123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #pragma once
- #include <iostream>
- #include "deviceBase.h"
- #include "Crc.h"
- using namespace std;
- // 煤气驱鸟炮
- #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次
- typedef struct{
- int deviceId;
- uint8_t msgId;
- uint8_t data;
- }GasControl;
- class deviceGas:public deviceBase
- {
- private:
- unsigned short voltage;
- short current;
- short pressure;
- uint8_t power_out_state;
- public:
- deviceGas():deviceBase()
- {
-
- }
- ~deviceGas(){}
- void setVoltage(unsigned short Voltage){
- voltage = Voltage;
- }
- void setCurent(short Current){
- current = Current;
- }
- void setPressure(short Pressure){
- pressure = Pressure;
- }
- void setPowerOutState(uint8_t PowerOutState){
- power_out_state = PowerOutState;
- }
- unsigned short getVoltage(){
- return voltage;
- }
- short getCurent(){
- return current;
- }
- short getPressure(){
- return pressure;
- }
- uint8_t getPowerOutState(){
- return power_out_state;
- }
- void serialization(){}
- static void serialization(const GasControl gasControl, char* data){
- data[0] = EXPEL_DATA_HEAD;
- data[1] = 0x01;
- data[2] = 0x01;
- data[3] = 0xAC;
- data[4] = (char)gasControl.deviceId;
- data[5] = gasControl.msgId;
- data[6] = gasControl.data;
- int16_t checksum = Crc::crc_calculate((uint8_t *)(data + 1), data[1] + 4 + 1);
- data[7] = (char)(checksum&0x00ff);
- data[8] = (char)(checksum >> 8);
- data[9] = 0x0D;
- data[10] = 0x0A;
- }
- bool deserialization(){
- return true;
- }
- bool deserialization(const uint8_t *data, int len, int &msg_id){
- if(data[0] != EXPEL_DATA_HEAD) return false;
- int16_t checksum = Crc::crc_calculate((uint8_t *)(data + 1), data[1] + 4 + 1);
- if(data[len - 2] != (uint8_t)(checksum&0x00ff) || data[len - 1] != (uint8_t)(checksum >> 8)){
- return false;
- }
- setDeviceId(data[4]);
- msg_id = data[5];
- if(msg_id == EXPEL_SYS_STATE_ACK){
- // 获取系统状态
- voltage = data[6] + (data[7]*255);
- current = data[8] + (data[9]*255);
- pressure = data[10] + (data[11]*255);
- power_out_state = data[12];
- }
- return true;
- }
- };
|