123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- #ifndef __DEVICEGASV3_HPP_
- #define __DEVICEGASV3_HPP_
- #include <iostream>
- #include "deviceBase.h"
- #define DEVICEGASV3_DATA_HEAD (0XC5AB) // 数据头
- #define DEVICEGASV3_DATA_DEVTYPE (0x05) // 设备类型
- #define DEVICEGASV3_COMMAND_PLAY_NOW 3
- #define DEVICEGASV3_COMMAND_PAUSE 4
- #define DEVICEGASV3_COMMAND_STOP 5
- #define DEVICEGASV3_COMMAND_NEXT 6
- #define DEVICEGASV3_COMMAND_UP 7
- #define DEVICEGASV3_COMMAND_SET_VOLUME 14
- #define DEVICEGASV3_COMMAND_PLAY_SET 15
- class deviceGasV3:public deviceBase
- {
- private:
- enum RECV_STEP{
- STEP_HEAD_1 = 0,
- STEP_HEAD_2 = 1,
- STEP_TYPE = 2,
- STEP_DEVID = 3,
- STEP_COM = 4,
- STEP_ACK = 5
- };
- typedef struct {
- uint8_t dataCount;
- uint8_t dataLength;
- uint8_t dataCheckSum;
- uint8_t data[6];
- enum RECV_STEP step = STEP_HEAD_1;
- }ExpelComm;
- ExpelComm _comm;
- public:
- deviceGasV3():deviceBase(){
- this->setDeviceToken(tcp);
- this->setDeviceInfo("赛为智能 驱鸟器协议");
- }
- public:
- // 电压
- float voltage = 0;
- // 气压
- float pressure = 0;
- // 状态
- int state = 0;
- // 纬度
- float latitude = 0;
- // 经度
- float longitude = 0;
-
- // LRC校验
- static unsigned char check(unsigned char *pSendBuf,unsigned char num)
- {
- char bylrc = 0,i = 0;
- for(i = 0; i < num; i++){
- bylrc += pSendBuf[i];
- }
- return (bylrc & 0x00ff);
- }
- static void serialization(const GasV1Control gasV1Control,char *data){
- data[0] = 0XC5;
- data[1] = 0XAB;
- data[2] = DEVICEGASV3_DATA_DEVTYPE;
- data[3] = gasV1Control.deviceId;
- data[4] = gasV1Control.msgId;
- data[5] = 0;
- data[6] = 0;
- data[7] = 0;
- data[8] = 0;
- data[9] = check((unsigned char *)(data + 2), 7);
- }
- bool deserialization()
- {
- return true;
- }
- bool Consumer(uint8_t *data, int len, int &msg_id)
- {
- bool ReceiveSuccessful = false;
- for (int i = 0; i < len; i++)
- {
- switch(_comm.step){
- case STEP_HEAD_1:
- if(data[i] == 0xAB){
- _comm.data[0] = 0xAB;
- _comm.step = STEP_HEAD_2;
- }
- break;
- case STEP_HEAD_2:
- if(data[i] == 0xC5){
- _comm.data[1] = 0xC5;
- _comm.step = STEP_TYPE;
- }
- break;
- case STEP_TYPE:
- _comm.data[2] = data[i];
- _comm.step = STEP_DEVID;
- break;
- case STEP_DEVID:
- _comm.data[3] = data[i];
- _comm.step = STEP_COM;
- break;
- case STEP_COM:
- _comm.data[4] = data[i];
- _comm.step = STEP_ACK;
- break;
- case STEP_ACK:
- _comm.data[5] = data[i];
- _comm.step = STEP_HEAD_1;
- ReceiveSuccessful = true;
- _comm.dataCount = 6;
- break;
- default:
- _comm.step = STEP_HEAD_1;
- break;
- }
- }
- if(!ReceiveSuccessful) return false;
- return deserialization(_comm.data, _comm.dataCount, msg_id);
- }
- bool deserialization(const uint8_t *data, int len, int &msg_id){
- if(len == 6 && data[5] == 0x01){
- this->deviceId = data[3];
- return true;
- }
- return false;
- }
- /**
- * @description: 打开
- * @param {int} deivceId
- * @return {*}
- */
- int32_t Open(std::string DeviceId, uint8_t* data, int& length){
- GasV1Control gasControl;
- gasControl.deviceId = atoi(DeviceId.c_str());
- gasControl.msgId = DEVICEGASV3_COMMAND_PLAY_NOW;
- gasControl.data = 0x00;
- length = 10;
- serialization(gasControl, (char *)data);
- return 0;
- }
- /**
- * @description: 关闭
- * @param {int} deivceId
- * @return {*}
- */
- int32_t Close(std::string DeviceId, uint8_t* data, int& length){
- GasV1Control gasControl;
- gasControl.deviceId = atoi(DeviceId.c_str());
- gasControl.msgId = DEVICEGASV3_COMMAND_STOP;
- gasControl.data = 0x00;
- length = 10;
- serialization(gasControl, (char *)data);
- return 0;
- }
- /**
- * @description: 开炮
- * @param {int} deivceId
- * @return {*}
- */
- int32_t Fire(std::string DeviceId, uint8_t* data, int& length){
- GasV1Control gasControl;
- gasControl.deviceId = atoi(DeviceId.c_str());
- gasControl.msgId = DEVICEGASV3_COMMAND_PLAY_NOW;
- gasControl.data = 0x00;
- length = 10;
- serialization(gasControl, (char *)data);
- return 0;
- }
- /**
- * @description: 状态
- * @param {int} deivceId
- * @return {*}
- */
- int32_t Status(std::string DeviceId, uint8_t* data, int& length){
- return 0;
- }
- /**
- * @description: 判定msg是否为status
- * @param {int} &msg_id
- * @return {*}
- */
- bool getStatusMsg(int &msg_id){
- return true;
- }
-
- /**
- * @description: 构建设备信息
- * @param {SendDevice&} sendDevice
- * @return {*}
- */
- void BuildDeviceInfo(SendDevice& sendDevice){
- sendDevice.deviceId = atoi(this->getDeviceId().c_str());
- sendDevice.commandCode = "1";
- sendDevice.status = 1;
- sendDevice.workStatus = 1;
- sendDevice.powerStatus = 1;
- sendDevice.batteryStatus = 1;
- sendDevice.num = 0;
- sendDevice.oxyPressure = 0;
- sendDevice.gasPressure = 0;
- sendDevice.remark = "";
- sendDevice.attr1 = std::to_string(this->voltage); // 电压
- sendDevice.attr2 = std::to_string(this->pressure); // 声压
- }
- };
- #endif
|