#include "SimMsg.h" #include "ComS.h" #include #include #include using namespace std; void ComSWriteLog(const std::string &msg) { std::cout << msg< parameters; string expression = "dest = '"+ servername + "'"; if (nullptr == ComS_part) { ComS_part=new SimMsg(domainid, 3000, appname, ComSWriteLog); ComS_part->create_pub(topic_name_cmd); ComS_part->create_pub(topic_name_tlm); ComS_part->create_sub(topic_name_cmd, command_callback, expression, parameters); ComS_part->create_sub(topic_name_tlm, telemetry_callback, expression, parameters); } } // 遥控接收回调函数 void command_callback(std::string src, std::string dest, std::string type, std::string reserve1, std::string reserve2, std::vector& data) { if (data.size() < 5) { std::cout << "指令长度错误!" << std::endl; return; } switch(data[0]) { case 0x80: ComS_command_Pub(&data[4], "Mag_Service", data.size() - 4); break; case 0x81: ComS_command_Pub(&data[4], "Com_Service", data.size() - 4); break; case 0x82: ComS_command_Pub(&data[4], "Eng_Service", data.size() - 4); break; case 0x83: ComS_command_Pub(&data[4], "Thm_Service", data.size() - 4); break; case 0x84: ComS_command_Pub(&data[4], "Gnc_Service", data.size() - 4); break; case 0x85: ComS_command_Pub(&data[4], "Pld_Service", data.size() - 4); break; case 0x90: ComS_command_Pub(&data[4], "Obc_Hardware_Service", data.size() - 4); break; case 0x91: ComS_command_Pub(&data[4], "Gnss_Hardware_Service", data.size() - 4); break; case 0x92: ComS_command_Pub(&data[4], "Com_Hardware_Service", data.size() - 4); break; case 0x93: ComS_command_Pub(&data[4], "Can_Hardware_Service", data.size() - 4); break; case 0x94: ComS_command_Pub(&data[4], "Switch_Hardware_Service", data.size() - 4); break; case 0x95: ComS_command_Pub(&data[4], "Ad_Hardware_Service", data.size() - 4); break; case 0x96: ComS_command_Pub(&data[4], "Starsensor_Hardware_Service", data.size() - 4); break; case 0x97: ComS_command_Pub(&data[4], "Mems_Hardware_Service", data.size() - 4); break; case 0x98: ComS_command_Pub(&data[4], "Flywheel_Hardware_Service", data.size() - 4); break; case 0x99: ComS_command_Pub(&data[4], "Gyro_Hardware_Service", data.size() - 4); break; case 0x9A: ComS_command_Pub(&data[4], "opticaltracker_Hardware_Service", data.size() - 4); break; case 0x9B: ComS_command_Pub(&data[4], "visionsensor_Hardware_Service", data.size() - 4); break; default: std::cout << "指令去向错误!" << std::endl; return; } } // 遥测接收回调函数 void telemetry_callback(std::string src, std::string dest, std::string type, std::string reserve1, std::string reserve2, std::vector& data) { // 打印接收到的数据 std::cout << "Telemetry received from " << src << " to " << dest << std::endl; std::cout << "Type: " << type << std::endl; std::cout << "Data (" << data.size() << " bytes): "; for (size_t i = 0; i < data.size(); ++i) { std::cout << std::hex << std::uppercase << (int)data[i]; if (i < data.size() - 1) { std::cout << ", "; } } std::cout << std::dec << std::endl; } // 通信服务遥控发布 void ComS_command_Pub(uint8_t* data, string dest, uint16_t len) { ComS_part->publish(topic_name_cmd, "Com_Service", dest, "command", data, len); } // 通信服务遥测发布 void ComS_telemetry_Pub(uint8_t* data, string dest, uint16_t len) { ComS_part->publish(topic_name_tlm, "Com_Service", dest, "telemetry", data, len); }