/******************************************************************************* * File Name : MQTTApp.h * Description : MQTT应用层头文件 *******************************************************************************/ #ifndef __MQTT_APP_H__ #define __MQTT_APP_H__ #ifdef __cplusplus extern "C" { #endif /******************************************************************************* * Include Files * *******************************************************************************/ #include "HIDO_Typedef.h" #include "MsgPack.h" /******************************************************************************* * Macro * *******************************************************************************/ /******************************************************************************* * Type Definition * *******************************************************************************/ /* GPS数据结构(应用层使用) */ typedef struct { HIDO_UINT64 timestamp; HIDO_CHAR gps_raw[256]; ST_IMUData imu_data; ST_StatusData status; } ST_MQTTAppGpsData; /* 控制指令数据结构 */ typedef struct { HIDO_CHAR command[32]; // 指令:start, stop, pause, resume, emergency_stop HIDO_CHAR request_id[64]; // 请求ID HIDO_CHAR parameters[256]; // 参数(JSON字符串) } ST_MQTTAppControlData; /* 路径点坐标结构 */ typedef struct { HIDO_FLOAT x; // X坐标,单位:米 HIDO_FLOAT y; // Y坐标,单位:米 } ST_MQTTAppPathPoint; /* 基站原点数据 */ typedef struct { HIDO_CHAR latitude_dm[32]; // 纬度(度分格式) HIDO_CHAR latitude_hemisphere[4]; // 纬度半球 N/S HIDO_CHAR longitude_dm[32]; // 经度(度分格式) HIDO_CHAR longitude_hemisphere[4]; // 经度半球 E/W HIDO_FLOAT altitude; // 海拔高度,单位:米 } ST_MQTTAppBasestationData; /* 路径数据结构 */ #define MQTT_APP_MAX_PATH_POINTS1 1000 // 最大路径点数量 #define MQTT_APP_MAX_PATH_POINTS2 4000 // 最大路径点数量 typedef struct { HIDO_CHAR msg_id[64]; // 消息ID HIDO_UINT64 timestamp; // 时间戳 HIDO_CHAR user_id[32]; // 用户ID HIDO_CHAR device_id[32]; // 设备ID HIDO_CHAR command[32]; // 命令类型 ST_MQTTAppBasestationData basestation; // 基站原点数据 HIDO_CHAR path_id[64]; // 路径ID HIDO_CHAR coordinate_system[32]; // 坐标系 HIDO_CHAR mowing_pattern[32]; // 割草模式 HIDO_UINT32 boundary_point_count; // 边界点数量 ST_MQTTAppPathPoint boundary_points[MQTT_APP_MAX_PATH_POINTS1]; // 边界点数组 HIDO_UINT32 navigation_point_count; // 导航点数量 ST_MQTTAppPathPoint navigation_points[MQTT_APP_MAX_PATH_POINTS2]; // 导航点数组 } ST_MQTTAppPathData; /* 控制指令回调函数 */ typedef HIDO_VOID (*FN_MQTTAppControlCallback)(ST_MQTTAppControlData *_pstCtrlData, HIDO_VOID *_pArg); /* 路径数据回调函数 */ typedef HIDO_VOID (*FN_MQTTAppPathCallback)(ST_MQTTAppPathData *_pstPathData, HIDO_VOID *_pArg); /* MQTT应用层配置 */ typedef struct { FN_MQTTAppControlCallback fnControlCallback; // 控制指令回调 HIDO_VOID *pControlArg; FN_MQTTAppPathCallback fnPathCallback; // 路径数据回调 HIDO_VOID *pPathArg; } ST_MQTTAppConfig; /******************************************************************************* * Global Function Declaration * *******************************************************************************/ /** * @brief MQTT应用层初始化 * @param _pstConfig 配置参数 * @return HIDO_OK/HIDO_ERR */ HIDO_INT32 MQTTApp_Init(ST_MQTTAppConfig *_pstConfig); /** * @brief 上报GPS数据 * @param _pstGpsData GPS数据 * @return HIDO_OK/HIDO_ERR */ HIDO_INT32 MQTTApp_ReportGps(ST_MQTTAppGpsData *_pstGpsData); /** * @brief 解析下发消息(由MQTTClient调用) * @param _pcTopic 主题 * @param _pu8Payload 消息负载 * @param _u32PayloadLen 负载长度 * @return HIDO_OK/HIDO_ERR */ HIDO_INT32 MQTTApp_ParseMessage(HIDO_CHAR *_pcTopic, HIDO_UINT8 *_pu8Payload, HIDO_UINT32 _u32PayloadLen); /** * @brief 填充GPS数据(辅助函数) * @param _pstGpsData GPS数据结构 * @param _pcGpsRaw GPS原始数据 * @param _fRoll 横滚角 * @param _fPitch 俯仰角 * @param _fYaw 偏航角 * @param _u8BattLevel 电池电量百分比 * @param _fBattVolt 电池电压 * @return HIDO_OK/HIDO_ERR */ HIDO_INT32 MQTTApp_FillGpsData(ST_MQTTAppGpsData *_pstGpsData, const HIDO_CHAR *_pcGpsRaw, HIDO_FLOAT _fRoll, HIDO_FLOAT _fPitch, HIDO_FLOAT _fYaw, HIDO_UINT8 _u8BattLevel, HIDO_FLOAT _fBattVolt); /** * @brief 从GPS模块获取数据并上报(使用GGA格式) * @return HIDO_OK/HIDO_ERR */ HIDO_INT32 MQTTApp_ReportGpsFromDevice(HIDO_VOID); /** * @brief 虚拟GPS数据上报(用于测试,不依赖真实硬件) * @return HIDO_OK/HIDO_ERR */ HIDO_INT32 MQTTApp_ReportGpsVirtual(HIDO_VOID); #ifdef __cplusplus } #endif #endif /* __MQTT_APP_H__ */