/*******************************************************************************
|
* 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__ */
|