#ifndef _DEVICEGASV1_HPP_ #define _DEVICEGASV1_HPP_ #include "Crc.h" #include "UtilBase.hpp" namespace gsd{ // 声波驱鸟器 #define EXPEL_DATA_HEAD (0xFE) // 数据头 #define EXPEL_HEART_BEAT (0x01) // 心跳 #define EXPEL_GENERAL_ACK (0X02) // 通用应答 #define EXPEL_SYS_STATE (0x14) // 获取设备信息 #define EXPEL_SYS_STATE_ACK (0X15) // 获取设备信息应答 #define EXPEL_POWER_OUTPUT_CTRL (0X16) // 电源输出控制 <-: 通用应答 #define EXPEL_POWER_OUTPUT_ON (0x01) // 电源开启 #define EXPEL_POWER_OUTPUT_OFF (0x00) // 电源关闭 #define EXPEL_BOMB_CTRL (0X17) // 煤气炮控制 <-: 通用应答 #define EXPEL_BOMB_ON (0X01) // 煤气炮开炮 #define EXPEL_GET_BOMB_STATE (0X18) // 获取开炮结果 #define EXPEL_GET_BOMB_STATE_ACK (0X19) // 煤气炮开炮应答 <-:通用应答(因为状态为阶段状态,过时会丢失状态。需确认应答收到,未收到应带会重传3次 /** * @brief DevicePlayerV1 * */ class DevicePlayerV1: public ContorlSerialBase { private: unsigned short voltage; short current; short pressure; uint8_t power_out_state; enum RECV_STEP{ STEP_HEAD = 0, STEP_LEN = 1, STEP_SEQ = 2, STEP_SAddr = 3, STEP_DAddr = 4, STEP_MSGId = 5, STEP_DATA = 6 }; typedef struct { uint8_t dataCount; uint8_t dataLength; uint8_t dataCheckSum; uint8_t data[15]; enum RECV_STEP step = STEP_HEAD; }ExpelComm; ExpelComm _comm; public: DevicePlayerV1(): ContorlSerialBase() { this->DeviceInfo = "民航小板协议"; this->tool = DeviceTools::serial; this->baudRate = 115200; } ~DevicePlayerV1(){} unsigned short getVoltage(); short getCurent(); short getPressure(); uint8_t getPowerOutState(); /** * @description: 判定msg是否为status * @param {int} &msg_id * @return {*} */ bool getStatusMsg(int &msg_id); /** * @description: 消费数据 * @param {uint8_t} *data * @param {int} len * @param {int} &msg_id * @return {*} */ bool Consumer(uint8_t *data, int len, int &msg_id); /** * @description: 反序列化 * @param {uint8_t} *data * @param {int} len * @param {int} &msg_id * @return {*} */ virtual bool deserialization(const uint8_t *data, int len, int &msg_id); /** * @description: 序列化 * @param {ControlerMsg} gasControl * @param {char*} data * @return {*} */ void serialization(const ControlerMsg gasControl, char* data); // 常规操作 int8_t Open(std::string _deviceId, uint8_t* data, int& length); int8_t Close(std::string _deviceId, uint8_t* data, int&length); int8_t Fire(std::string _deviceId, uint8_t* data, int& length); int8_t Status(std::string _deviceId, uint8_t* data, int& length); /** * @description: 构建设备信息 * @param {SendDevice&} sendDevice * @return {*} */ virtual void BuildDeviceInfo(SendDevice& sendDevice); }; }; #endif