deviceGas.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #pragma once
  2. #include <iostream>
  3. #include "deviceBase.h"
  4. #include "Crc.h"
  5. using namespace std;
  6. // 煤气驱鸟炮
  7. #define EXPEL_DATA_HEAD (0xFE) // 数据头
  8. #define EXPEL_HEART_BEAT (0x01) // 心跳
  9. #define EXPEL_GENERAL_ACK (0X02) // 通用应答
  10. #define EXPEL_SYS_STATE (0x14) // 获取设备信息
  11. #define EXPEL_SYS_STATE_ACK (0X15) // 获取设备信息应答
  12. #define EXPEL_POWER_OUTPUT_CTRL (0X16) // 电源输出控制 <-: 通用应答
  13. #define EXPEL_POWER_OUTPUT_ON (0x01) // 电源开启
  14. #define EXPEL_POWER_OUTPUT_OFF (0x00) // 电源关闭
  15. #define EXPEL_BOMB_CTRL (0X17) // 煤气炮控制 <-: 通用应答
  16. #define EXPEL_BOMB_ON (0X01) // 煤气炮开炮
  17. #define EXPEL_GET_BOMB_STATE (0X18) // 获取开炮结果
  18. #define EXPEL_GET_BOMB_STATE_ACK (0X19) // 煤气炮开炮应答 <-:通用应答(因为状态为阶段状态,过时会丢失状态。需确认应答收到,未收到应带会重传3次
  19. typedef struct{
  20. int deviceId;
  21. uint8_t msgId;
  22. uint8_t data;
  23. }GasControl;
  24. class deviceGas:public deviceBase
  25. {
  26. private:
  27. unsigned short voltage;
  28. short current;
  29. short pressure;
  30. uint8_t power_out_state;
  31. public:
  32. deviceGas():deviceBase()
  33. {
  34. }
  35. ~deviceGas(){}
  36. void setVoltage(unsigned short Voltage){
  37. voltage = Voltage;
  38. }
  39. void setCurent(short Current){
  40. current = Current;
  41. }
  42. void setPressure(short Pressure){
  43. pressure = Pressure;
  44. }
  45. void setPowerOutState(uint8_t PowerOutState){
  46. power_out_state = PowerOutState;
  47. }
  48. unsigned short getVoltage(){
  49. return voltage;
  50. }
  51. short getCurent(){
  52. return current;
  53. }
  54. short getPressure(){
  55. return pressure;
  56. }
  57. uint8_t getPowerOutState(){
  58. return power_out_state;
  59. }
  60. void serialization(){}
  61. static void serialization(const GasControl gasControl, char* data){
  62. data[0] = EXPEL_DATA_HEAD;
  63. data[1] = 0x01;
  64. data[2] = 0x01;
  65. data[3] = 0xAC;
  66. data[4] = (char)gasControl.deviceId;
  67. data[5] = gasControl.msgId;
  68. data[6] = gasControl.data;
  69. int16_t checksum = Crc::crc_calculate((uint8_t *)(data + 1), data[1] + 4 + 1);
  70. data[7] = (char)(checksum&0x00ff);
  71. data[8] = (char)(checksum >> 8);
  72. data[9] = 0x0D;
  73. data[10] = 0x0A;
  74. }
  75. bool deserialization(){
  76. return true;
  77. }
  78. bool deserialization(const uint8_t *data, int len, int &msg_id){
  79. if(data[0] != EXPEL_DATA_HEAD) return false;
  80. int16_t checksum = Crc::crc_calculate((uint8_t *)(data + 1), data[1] + 4 + 1);
  81. if(data[len - 2] != (uint8_t)(checksum&0x00ff) || data[len - 1] != (uint8_t)(checksum >> 8)){
  82. return false;
  83. }
  84. setDeviceId(data[4]);
  85. msg_id = data[5];
  86. if(msg_id == EXPEL_SYS_STATE_ACK){
  87. // 获取系统状态
  88. voltage = data[6] + (data[7]*255);
  89. current = data[8] + (data[9]*255);
  90. pressure = data[10] + (data[11]*255);
  91. power_out_state = data[12];
  92. }
  93. return true;
  94. }
  95. };