Auto commit from DCSP - 2026/1/5 11:30:54
This commit is contained in:
285
ComHS.h
285
ComHS.h
@@ -7,178 +7,195 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
// 遥测cmd定义
|
||||
#define CON_TELEMETRY 0x0F //常规遥测查询
|
||||
#define TELECONTROL_CMD 0x1E //遥控指令
|
||||
#define QUERY_TELECMD 0x4B //遥控指令查询
|
||||
#define SEND_TELEMETRY 0x5A //发送遥测
|
||||
/* 遥测cmd定义 */
|
||||
#define CON_TELEMETRY 0x0F /* 常规遥测查询 */
|
||||
#define TELECONTROL_CMD 0x1E /* 遥控指令 */
|
||||
#define QUERY_TELECMD 0x4B /* 遥控指令查询 */
|
||||
#define SEND_TELEMETRY 0x5A /* 发送遥测 */
|
||||
|
||||
// 星间通信机子遥测
|
||||
/* 所占bit长度定义 */
|
||||
#define EPDU_ID_VERSION_SIZE 3 /* 版本号 */
|
||||
#define EPDU_ID_TYPE_SIZE 1 /* 类型 */
|
||||
#define EPDU_ID_HEAD_SIZE 1 /* 副导头 */
|
||||
#define EPDU_APID 11 /* APID */
|
||||
|
||||
#define EPDU_CONTROL_GROUPID_SIZE 2 /* 分组标识 */
|
||||
#define EPDU_CONTROL_COUNT_SIZE 14 /* 包序列计数 */
|
||||
|
||||
#define MULTI_EPDU_LENS 244
|
||||
|
||||
/* 星间通信机子遥测 */
|
||||
typedef union {
|
||||
uint8_t ext[9]; //72位数据的联合体
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int temperature : 12; //温度遥测
|
||||
unsigned int temperature_calibrated : 12; //温度遥测标校
|
||||
unsigned int transmission_power : 12; //12V电源遥测
|
||||
unsigned int power_supply_5v4 : 12; //5.4V电源遥测
|
||||
unsigned int power_supply_2v5 : 12; //2.5V电源遥测
|
||||
unsigned int power_supply_1v2 : 12; //1.2V电源遥测
|
||||
};
|
||||
uint8_t ext[9]; /* 72位数据的联合体 */
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int temperature : 12; /* 温度遥测 */
|
||||
unsigned int temperature_calibrated : 12; /* 温度遥测标校 */
|
||||
unsigned int transmission_power : 12; /* 12V电源遥测 */
|
||||
unsigned int power_supply_5v4 : 12; /* 5.4V电源遥测 */
|
||||
unsigned int power_supply_2v5 : 12; /* 2.5V电源遥测 */
|
||||
unsigned int power_supply_1v2 : 12; /* 1.2V电源遥测 */
|
||||
};
|
||||
} s_comm_telemetry_t;
|
||||
|
||||
// 星间通信机子遥测
|
||||
/* 星间通信机子遥测 */
|
||||
typedef union {
|
||||
uint8_t ext;
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int loadNo : 2; //加载程序编号
|
||||
unsigned int loadMode : 2; //加载模式
|
||||
unsigned int AorB : 1; //AB机状态
|
||||
unsigned int FPGAFresh : 1; //FPGA刷新状态
|
||||
unsigned int zaiboSync : 1; //信息载波同步
|
||||
unsigned int weimaSync : 1; //信息伪码同步
|
||||
};
|
||||
uint8_t ext;
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int loadNo : 2; /* 加载程序编号 */
|
||||
unsigned int loadMode : 2; /* 加载模式 */
|
||||
unsigned int AorB : 1; /* AB机状态 */
|
||||
unsigned int FPGAFresh : 1; /* FPGA刷新状态 */
|
||||
unsigned int zaiboSync : 1; /* 信息载波同步 */
|
||||
unsigned int weimaSync : 1; /* 信息伪码同步 */
|
||||
};
|
||||
} s_comm_para0;
|
||||
|
||||
// 星间通信机子遥测
|
||||
/* 星间通信机子遥测 */
|
||||
typedef union {
|
||||
uint8_t ext;
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int recDampCtrlMode : 1; //接收衰减控制模式
|
||||
unsigned int recDampCtrl : 3; //接收衰减控制字
|
||||
unsigned int trans : 1; //发射通道开关
|
||||
unsigned int transDampCtrl : 3; //发射衰减控制字
|
||||
};
|
||||
uint8_t ext;
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int recDampCtrlMode : 1; /* 接收衰减控制模式 */
|
||||
unsigned int recDampCtrl : 3; /* 接收衰减控制字 */
|
||||
unsigned int trans : 1; /* 发射通道开关 */
|
||||
unsigned int transDampCtrl : 3; /* 发射衰减控制字 */
|
||||
};
|
||||
} s_comm_para2;
|
||||
|
||||
// 星间通信机子遥测
|
||||
/* 星间通信机子遥测 */
|
||||
typedef union {
|
||||
uint8_t ext;
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int recStatus : 1; // 接收缓存状态
|
||||
unsigned int workmode : 2; //工作模式
|
||||
unsigned int sendStatus : 1; //发射缓存状态
|
||||
unsigned int antsChoice : 1; //天线选择
|
||||
unsigned int FreqChoice : 1; //频点选择
|
||||
unsigned int telem_MM_Mode : 1; //遥测明/密状态
|
||||
unsigned int telec_MM_Mode : 1; //遥控明/密状态
|
||||
};
|
||||
uint8_t ext;
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int recStatus : 1; /* 接收缓存状态 */
|
||||
unsigned int workmode : 2; /* 工作模式 */
|
||||
unsigned int sendStatus : 1; /* 发射缓存状态 */
|
||||
unsigned int antsChoice : 1; /* 天线选择 */
|
||||
unsigned int FreqChoice : 1; /* 频点选择 */
|
||||
unsigned int telem_MM_Mode : 1; /* 遥测明/密状态 */
|
||||
unsigned int telec_MM_Mode : 1; /* 遥控明/密状态 */
|
||||
};
|
||||
} s_comm_para3;
|
||||
|
||||
// S通信机遥测结构体
|
||||
typedef struct __attribute__((packed)){
|
||||
uint8_t packet_cnt_1; // 遥测包计数
|
||||
uint8_t cmd1_success_count; //接收指令1正确计数
|
||||
uint8_t cmd1_err_type1_count; //接收指令1错误类型1计数
|
||||
uint8_t cmd2_success_count; //接收指令2正确计数
|
||||
uint8_t cmd2_err_count; //接收指令2错误计数
|
||||
uint8_t reset_count; //复位计数
|
||||
uint8_t refresh_count; //刷新状态计数
|
||||
s_comm_para0 para0; //
|
||||
uint8_t para1; //
|
||||
int8_t dopplerFreqInfoChannel; //信息通道多普勒频偏
|
||||
int8_t dopplerFreqMeasureChannel; //测量通道多普勒频偏
|
||||
uint8_t snrInfoChannel; //信息通道接收信噪比
|
||||
uint8_t snrMeasureChannel; //测量通道接收信噪比
|
||||
uint8_t receive_RSSI; //接收RSSI
|
||||
uint8_t generalQueryCount; //常规遥测查询计数
|
||||
uint8_t forwardcmdcnt; //转发遥控指令计数
|
||||
uint8_t cmdinquiryCount; //空空接收后遥控计数
|
||||
uint8_t teletransmissionCount; //转发遥测计数
|
||||
uint8_t res0[2]; //LVDS预留参数,不使用
|
||||
s_comm_para2 para2; //
|
||||
s_comm_telemetry_t s_telemetry;
|
||||
uint8_t AD9364_configuration_count; //AD9364配置计数
|
||||
s_comm_para3 para3;
|
||||
uint8_t res1[3]; //预留参数,CJB不使用
|
||||
uint8_t cmd1_err_type2_count; //接收指令1错误类型2计数
|
||||
uint16_t teletransmission_secretkey; //遥测当前密钥
|
||||
uint16_t telecmd_secretkey; //遥控当前密钥
|
||||
/* S通信机遥测结构体 */
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint8_t packet_cnt_1; /* 遥测包计数 */
|
||||
uint8_t cmd1_success_count; /* 接收指令1正确计数 */
|
||||
uint8_t cmd1_err_type1_count; /* 接收指令1错误类型1计数 */
|
||||
uint8_t cmd2_success_count; /* 接收指令2正确计数 */
|
||||
uint8_t cmd2_err_count; /* 接收指令2错误计数 */
|
||||
uint8_t reset_count; /* 复位计数 */
|
||||
uint8_t refresh_count; /* 刷新状态计数 */
|
||||
s_comm_para0 para0;
|
||||
uint8_t para1;
|
||||
int8_t dopplerFreqInfoChannel; /* 信息通道多普勒频偏 */
|
||||
int8_t dopplerFreqMeasureChannel; /* 测量通道多普勒频偏 */
|
||||
uint8_t snrInfoChannel; /* 信息通道接收信噪比 */
|
||||
uint8_t snrMeasureChannel; /* 测量通道接收信噪比 */
|
||||
uint8_t receive_RSSI; /* 接收RSSI */
|
||||
uint8_t generalQueryCount; /* 常规遥测查询计数 */
|
||||
uint8_t forwardcmdcnt; /* 转发遥控指令计数 */
|
||||
uint8_t cmdinquiryCount; /* 空空接收后遥控计数 */
|
||||
uint8_t teletransmissionCount; /* 转发遥测计数 */
|
||||
uint8_t res0[2]; /* LVDS预留参数,不使用 */
|
||||
s_comm_para2 para2;
|
||||
s_comm_telemetry_t s_telemetry;
|
||||
uint8_t AD9364_configuration_count; /* AD9364配置计数 */
|
||||
s_comm_para3 para3;
|
||||
uint8_t res1[3]; /* 预留参数,CJB不使用 */
|
||||
uint8_t cmd1_err_type2_count; /* 接收指令1错误类型2计数 */
|
||||
uint16_t teletransmission_secretkey; /* 遥测当前密钥 */
|
||||
uint16_t telecmd_secretkey; /* 遥控当前密钥 */
|
||||
} S_Comm_telemetry_data_t;
|
||||
|
||||
// 指令/注数单元格式
|
||||
typedef struct __attribute__((__packed__)){
|
||||
uint8_t cmd_type; //指令类型
|
||||
uint8_t cmd_len; //指令长度 数据内容+4
|
||||
uint8_t device; //设备号
|
||||
uint8_t REMAIN; //保留字
|
||||
uint8_t data[255]; //数据内容 最大60
|
||||
/* 指令/注数单元格式 */
|
||||
typedef struct __attribute__((__packed__)) {
|
||||
uint8_t cmd_type; /* 指令类型 */
|
||||
uint8_t cmd_len; /* 指令长度 数据内容+4 */
|
||||
uint8_t device; /* 设备号 */
|
||||
uint8_t REMAIN; /* 保留字 */
|
||||
uint8_t data[255]; /* 数据内容 最大60 */
|
||||
} CMD_unit;
|
||||
|
||||
// 遥控包 仅单指令
|
||||
/* 遥控包 仅单指令 */
|
||||
typedef struct __attribute__((__packed__)) {
|
||||
uint8_t serve_type; //服务类型 全为50H实时指令
|
||||
uint8_t cmd_num; //指令数
|
||||
CMD_unit cmd_unit; //指令单元
|
||||
uint8_t serve_type; /* 服务类型 全为50H实时指令 */
|
||||
uint8_t cmd_num; /* 指令数 */
|
||||
CMD_unit cmd_unit; /* 指令单元 */
|
||||
} CMD_pack_t;
|
||||
|
||||
/*所占bit长度定义*/
|
||||
#define EPDU_ID_VERSION_SIZE 3 //版本号
|
||||
#define EPDU_ID_TYPE_SIZE 1 //类型
|
||||
#define EPDU_ID_HEAD_SIZE 1 //副导头
|
||||
#define EPDU_APID 11 //APID
|
||||
|
||||
#define EPDU_CONTROL_GROUPID_SIZE 2 //分组标识
|
||||
#define EPDU_CONTROL_COUNT_SIZE 14 //包序列计数
|
||||
|
||||
#define MULTI_EPDU_LENS 244
|
||||
|
||||
/*包识别*/
|
||||
typedef union{
|
||||
uint16_t ext; //16位数据的联合体
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int version : EPDU_ID_VERSION_SIZE; //版本号
|
||||
unsigned int type : EPDU_ID_TYPE_SIZE; //类型
|
||||
unsigned int subhead : EPDU_ID_HEAD_SIZE; //副导头
|
||||
unsigned int reserve : EPDU_APID; //应用过程标识符
|
||||
};
|
||||
/* 包识别 */
|
||||
typedef union {
|
||||
uint16_t ext; /* 16位数据的联合体 */
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int version : EPDU_ID_VERSION_SIZE; /* 版本号 */
|
||||
unsigned int type : EPDU_ID_TYPE_SIZE; /* 类型 */
|
||||
unsigned int subhead : EPDU_ID_HEAD_SIZE; /* 副导头 */
|
||||
unsigned int reserve : EPDU_APID; /* 应用过程标识符 */
|
||||
};
|
||||
} packet_id_t;
|
||||
|
||||
/*包序列控制*/
|
||||
typedef union{
|
||||
uint16_t ext; // 16位数据的联合体
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int groupid : EPDU_CONTROL_GROUPID_SIZE; //分组标识
|
||||
unsigned int count : EPDU_CONTROL_COUNT_SIZE; //包序列计数
|
||||
};
|
||||
/* 包序列控制 */
|
||||
typedef union {
|
||||
uint16_t ext; /* 16位数据的联合体 */
|
||||
struct __attribute__((__packed__)) {
|
||||
unsigned int groupid : EPDU_CONTROL_GROUPID_SIZE; /* 分组标识 */
|
||||
unsigned int count : EPDU_CONTROL_COUNT_SIZE; /* 包序列计数 */
|
||||
};
|
||||
} sequence_control_t;
|
||||
|
||||
/*E-PDU源包格式*/
|
||||
/* E-PDU源包格式 */
|
||||
typedef struct __attribute__((__packed__)) {
|
||||
packet_id_t id; //包识别
|
||||
sequence_control_t seq; //包控制序列
|
||||
uint16_t length; //包长
|
||||
uint8_t data[MULTI_EPDU_LENS];
|
||||
packet_id_t id; /* 包识别 */
|
||||
sequence_control_t seq; /* 包控制序列 */
|
||||
uint16_t length; /* 包长 */
|
||||
uint8_t data[MULTI_EPDU_LENS];
|
||||
} EPDU_packet_t;
|
||||
|
||||
typedef struct __attribute__((__packed__)) {
|
||||
uint16_t epdu_len;
|
||||
EPDU_packet_t epdu;
|
||||
uint16_t epdu_len;
|
||||
EPDU_packet_t epdu;
|
||||
} Multi_EPDU_packet_t;
|
||||
|
||||
// 声明ComHS接口函数
|
||||
void ComHSWriteLog(const string &msg);
|
||||
void ComHS_init(uint8_t domainid, string appname);
|
||||
void command_callback(string src, string dest, string type,
|
||||
string reserve1, string reserve2,
|
||||
vector<uint8_t>& data);
|
||||
void telemetry_callback(string src, string dest, string type,
|
||||
string reserve1, string reserve2,
|
||||
vector<uint8_t>& data);
|
||||
void ComHS_command_Pub(uint8_t* data, string dest, uint16_t len);
|
||||
void ComHS_telemetry_Pub(uint8_t* data, string dest, uint16_t len);
|
||||
/*
|
||||
* ComHS接口函数声明
|
||||
*/
|
||||
|
||||
// 声明串口操作函数
|
||||
/* 日志函数 */
|
||||
void ComHSWriteLog(const string &msg);
|
||||
|
||||
/* 初始化函数 */
|
||||
void ComHS_init(uint8_t domainid, string appname);
|
||||
|
||||
/* 回调函数 */
|
||||
void command_callback(string src, string dest, string type,
|
||||
string reserve1, string reserve2,
|
||||
vector<uint8_t> &data);
|
||||
|
||||
void telemetry_callback(string src, string dest, string type,
|
||||
string reserve1, string reserve2,
|
||||
vector<uint8_t> &data);
|
||||
|
||||
/* 发布函数 */
|
||||
void ComHS_command_Pub(uint8_t *data, string dest, uint16_t len);
|
||||
void ComHS_telemetry_Pub(uint8_t *data, string dest, uint16_t len);
|
||||
|
||||
/*
|
||||
* 串口操作函数声明
|
||||
*/
|
||||
int scomm_uart_init(const char *dev_telec, const char *dev_telem, int baudrate);
|
||||
void send_S_COMM_Cmder(uint8_t *cmd, uint16_t len);
|
||||
void Get_S_COMM_Telemetry_Data(void);
|
||||
void Get_S_COMM_UP_CMD(void);
|
||||
void Send_Telemetry_From_S(uint8_t *tele, uint16_t len);
|
||||
void S_UART_TELEMETRY_SEND(uint8_t cmd, uint16_t len, uint8_t *nums);
|
||||
int read_scomm_response(void);
|
||||
int process_received_data(uint8_t *data, uint16_t size);
|
||||
|
||||
// 声明运行控制函数
|
||||
/* 同步读取函数声明 */
|
||||
int scomm_read_with_select(int timeout_ms);
|
||||
int S_UART_SEND_AND_WAIT(uint8_t cmd, uint16_t len, uint8_t *nums, int timeout_ms);
|
||||
|
||||
/*
|
||||
* 运行控制函数声明
|
||||
*/
|
||||
void start_scomm_service(const char *dev_telec, const char *dev_telem, int baudrate);
|
||||
void stop_scomm_service(void);
|
||||
|
||||
#endif // COMHS_H
|
||||
#endif /* COMHS_H */
|
||||
Reference in New Issue
Block a user