#include "SimMsg.h" #include "test1.h" #include #include #include #include // 添加这个头文件用于memset #include // 用于std::generate using namespace std; void test1WriteLog(const std::string &msg) { std::cout << msg<& data); void telemetry_callback(std::string src, std::string dest, std::string type, std::string reserve1, std::string reserve2, std::vector& data); // 为test1生成测试数据:从1开始累加,最后一位是校验位 void generate_test1_data(uint8_t* buffer, size_t size) { if (size == 0) return; // 填充数据:从1开始累加 for (size_t i = 0; i < size - 1; i++) { buffer[i] = (uint8_t)((i + 1) % 256); // 从1开始,防止溢出 } // 计算校验和(除最后一位外的所有字节的和) uint8_t checksum = 0; for (size_t i = 0; i < size - 1; i++) { checksum += buffer[i]; } // 设置最后一位为校验位 buffer[size - 1] = checksum; // 打印生成的数据(调试用) std::cout << "test1生成数据: "; size_t print_len = size > 20 ? 20 : size; for (size_t i = 0; i < print_len; ++i) { std::cout << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << (int)buffer[i] << " "; } if (size > print_len) { std::cout << "..."; } std::cout << std::dec << " (校验位: 0x" << std::hex << (int)checksum << std::dec << ")" << std::endl; } //初始化 void test1_init(uint8_t domainid, std::string appname) { std::vector parameters; string expression = "src = '"+ servername + "'"; if (nullptr == test1_part) { test1_part=new SimMsg(domainid, 3000, appname, test1WriteLog); test1_part->create_pub(topic_name_cmd); test1_part->create_pub(topic_name_tlm); test1_part->create_sub(topic_name_cmd, command_callback, expression, parameters); test1_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) { uint8_t test1_data[256] = {0}; generate_test1_data(test1_data, 256); uint16_t data_len = 256; // 发送数据 test1_command_Pub(test1_data, dest, data_len); std::cout << "test1收到指令,已发送数据" << std::endl; } // 遥测接收回调函数 void telemetry_callback(std::string src, std::string dest, std::string type, std::string reserve1, std::string reserve2, std::vector& data) { // 可以保持原样或根据需要修改 } // AD硬件服务化遥控发布 void test1_command_Pub(uint8_t* data, string dest, uint16_t len) { if (test1_part != nullptr) { test1_part->publish(topic_name_cmd, "test1_Service", dest, "command", data, len); } } // AD硬件服务化遥测发布 void test1_telemetry_Pub(uint8_t* data, string dest, uint16_t len) { if (test1_part != nullptr) { test1_part->publish(topic_name_tlm, "test1_Service", dest, "telemetry", data, len); } }