protocol.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. //#include "storage.h"
  2. //#define FLAG_SEND_GESTURE 1
  3. //#define FLAG_SEND_AMBIENT_LIGHT 1<<1
  4. //#define FLAG_SEND_BATTERY_LEVEL 1<<2
  5. //#define FLAG_SEND_TOUCH 1<<3
  6. //
  7. //#define FLAG_SET_TIME 1
  8. //#define FLAG_SET_LIGHT_BAR 1<<1
  9. //#define FLAG_SET_DISPLAY_BRIGHTNESS 1<<2
  10. //#define FLAG_SET_HOUR_MODE 1<<3
  11. //#define FLAG_SET_DAY_NIGHT_LED 1<<4
  12. //#define FLAG_SET_INIT 1<<5
  13. #define CMD_SET_TIME 'T'
  14. #define CMD_SET_HOUR_MODE 'H'
  15. #define CMD_SET_LIGHT_BAR 'L'
  16. #define CMD_SET_BUTTON 'b'
  17. #define CMD_SET_ALL_BUTTONS 'l'
  18. #define CMD_SET_DISPLAY_BRIGHTNESS 'B'
  19. #define CMD_SET_DAY_NIGHT_LED 'D'
  20. #define CMD_SET_INIT 'I'
  21. #define CMD_SEND_GESTURE 'G'
  22. #define CMD_SEND_TOUCH 't'
  23. #define CMD_SEND_BATTERY 'V'
  24. #define CMD_SEND_AMBIENT_LIGHT 'A'
  25. #define CMD_SEND_INIT 'i'
  26. //int setFlag = 0;
  27. //int sendFlag = 0;
  28. void sendCommand (char cmd, String payload){
  29. Serial.print('~');
  30. Serial.print(cmd);
  31. Serial.print(payload);
  32. Serial.println(';');
  33. }
  34. bool parseInput (char* rxData) {
  35. char cmd = rxData[0];
  36. String payload = String(++rxData);
  37. long timeStamp = 0;
  38. int payloadInt = 255;
  39. char buf[64];
  40. uint32_t payloadArr[LIGHTBAR_NUM_LEDS];
  41. switch (cmd) {
  42. case CMD_SET_TIME:
  43. timeStamp = payload.toInt();
  44. // set RTC to received time
  45. setRtcTime(timeStamp);
  46. Serial.print("Setting RTC to: ");
  47. Serial.println(timeStamp);
  48. break;
  49. case CMD_SET_HOUR_MODE:
  50. if (payload == "12") {
  51. mcuConfig.twelveHMode = true;
  52. Serial.println("12h Mode");
  53. }else if (payload == "24") {
  54. mcuConfig.twelveHMode = false;
  55. Serial.println("24h Mode");
  56. }
  57. saveConfig();
  58. break;
  59. case CMD_SET_DISPLAY_BRIGHTNESS:
  60. payloadInt = payload.toInt();
  61. setDisplayBrightness(payloadInt);
  62. break;
  63. #if defined LIGHTBAR_ENABLED && LIGHTBAR_ENABLED == 1
  64. case CMD_SET_LIGHT_BAR:
  65. // Serial.print("Setting lightbar to 0x");
  66. // Serial.println((uint32_t)payload.toFloat(), HEX);
  67. lightBarSetColor((uint32_t)payload.toFloat());
  68. break;
  69. case CMD_SET_BUTTON:
  70. // payload = [buttonIndex (1 char)][buttonColor (1-many chars)]
  71. payloadInt = (int)rxData[0] - '0';
  72. payload = String(++rxData);
  73. // Serial.print("Setting button ");
  74. // Serial.print(payloadInt);
  75. // Serial.print(" to 0x");
  76. // Serial.println((uint32_t)payload.toFloat(), HEX);
  77. lightBarSetButton(payloadInt, (uint32_t)payload.toFloat() );
  78. break;
  79. case CMD_SET_ALL_BUTTONS:
  80. // payload = [button0 Color]:[button1 Color]:[button2 Color]:[button3 Color]
  81. sscanf(payload.c_str(), "%lu:%lu:%lu:%lu",
  82. &payloadArr[0],
  83. &payloadArr[1],
  84. &payloadArr[2],
  85. &payloadArr[3]
  86. );
  87. // Serial.print("Setting buttons to ");
  88. // Serial.print((uint32_t)payloadArr[0], HEX);
  89. // Serial.print((uint32_t)payloadArr[1], HEX);
  90. // Serial.print((uint32_t)payloadArr[2], HEX);
  91. // Serial.print((uint32_t)payloadArr[3], HEX);
  92. lightBarSetButton(0, payloadArr[0] );
  93. lightBarSetButton(1, payloadArr[1] );
  94. lightBarSetButton(2, payloadArr[2] );
  95. lightBarSetButton(3, payloadArr[3] );
  96. break;
  97. #endif // LIGHTBAR_ENABLED
  98. case CMD_SET_DAY_NIGHT_LED:
  99. if (payload == "1") {
  100. mcuConfig.dayNightIndicator = true;
  101. }else if (payload == "0") {
  102. mcuConfig.dayNightIndicator = false;
  103. }
  104. saveConfig();
  105. break;
  106. case CMD_SET_INIT:
  107. sprintf(buf, "%lu", getEpoch());
  108. sendCommand(CMD_SEND_INIT, buf);
  109. break;
  110. // TODO: add case to set max ambient light delta
  111. // TODO: add case to set number of transition steps for lightbar (lower priority)
  112. }
  113. return true;
  114. }