00001
00002
00003
00004 #ifndef CANAEROBUSCONNECTOR_H
00005 #define CANAEROBUSCONNECTOR_H
00006
00007 #include "dllexport.h"
00008
00009 #include <memory>
00010 #include <queue>
00011 #include <string>
00012 #include <boost/date_time.hpp>
00013
00014 #include "canaerotypes.h"
00015 #include "connectedclient.h"
00016 #include "connector.h"
00017 #include "scopedlock.h"
00018 #include "nodesmodulemanager.h"
00019
00020 namespace SCS {
00021
00022 class CanAeroDataManager;
00023
00035 class DLL_PUBLIC CanAeroBusConnector: public BusConnector<can_t>
00036 {
00037 public:
00038
00045 CanAeroBusConnector(CanAeroDataManager* manager,
00046 NetworkConnector<can_t>* connector,
00047 uint8_t own_node_id,
00048 uint8_t config_revision);
00049
00053 void doHouseKeeping();
00054
00058 uint8_t ownNodeId() const;
00059
00063 void send(const can_t& msg);
00064
00068 void send(const std::vector<can_t>& msg);
00069
00074 void sendSTS(uint8_t node_id = BROADCAST_NODE_ID);
00075
00082 void sendDRS(can_Id_t can_id, uint8_t node_id = BROADCAST_NODE_ID);
00083
00088 void sendIDS(uint8_t node_id = BROADCAST_NODE_ID);
00089
00095 void receiveMessage(const can_t& msg);
00096
00102 void receiveMessage(const std::vector<can_t>& msg);
00103
00107 void requestModule(uint8_t node_id, uint16_t module, uint16_t mode);
00108
00114 bool isModuleActive(uint8_t node_id, uint16_t module);
00115
00120 bool isClientActive(uint8_t node_id);
00121
00122 private:
00123
00128 void sendMIS(uint8_t node_id = BROADCAST_NODE_ID);
00129
00130 void processServiceRequests(const can_t&);
00131
00132 void processServiceResponses(const can_t&);
00133
00134 uint8_t getNewNodeId(uint32_t uuid);
00135
00136
00137 private:
00138
00139 typedef std::map<uint8_t, ConnectedClient> ClientMap;
00140 typedef std::map<uint32_t, uint8_t> NCSMap;
00141 Mutex m_map_mutex;
00142 ClientMap m_connected_clients;
00143 NCSMap m_ncs_lookup;
00144 uint8_t m_own_node_id;
00145 const uint8_t m_config_revision;
00146 uint32_t m_gen_uuid;
00147 CanAeroDataManager* m_manager;
00148 NetworkConnector<can_t>* m_network_connector;
00149 NodesModuleManager m_nodes_module_manager;
00150 boost::posix_time::ptime m_last_did_MIS;
00151 #ifdef USE_STOCK_DATAFRAME
00152 uint32_t m_frame_counter;
00153 #endif
00154 };
00155
00156 }
00157
00158 #endif // CANAEROBUSCONNECTOR_H