CctPacketFormatter.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <CctPacketFormatter.h>
  2. #include <MiLightButtons.h>
  3. void CctPacketFormatter::initializePacket(uint8_t* packet) {
  4. size_t packetPtr = 0;
  5. packet[packetPtr++] = CCT;
  6. packet[packetPtr++] = deviceId >> 8;
  7. packet[packetPtr++] = deviceId & 0xFF;
  8. packet[packetPtr++] = groupId;
  9. packet[packetPtr++] = 0;
  10. packet[packetPtr++] = sequenceNum;
  11. packet[packetPtr++] = sequenceNum++;
  12. }
  13. void CctPacketFormatter::updateBrightness(uint8_t value) {
  14. valueByStepFunction(
  15. &PacketFormatter::increaseBrightness,
  16. &PacketFormatter::decreaseBrightness,
  17. CCT_INTERVALS,
  18. value / CCT_INTERVALS
  19. );
  20. }
  21. void CctPacketFormatter::updateTemperature(uint8_t value) {
  22. valueByStepFunction(
  23. &PacketFormatter::increaseTemperature,
  24. &PacketFormatter::decreaseTemperature,
  25. CCT_INTERVALS,
  26. value / CCT_INTERVALS
  27. );
  28. }
  29. void CctPacketFormatter::command(uint8_t command, uint8_t arg) {
  30. pushPacket();
  31. if (held) {
  32. command |= 0x80;
  33. }
  34. currentPacket[CCT_COMMAND_INDEX] = command;
  35. }
  36. void CctPacketFormatter::updateStatus(MiLightStatus status, uint8_t groupId) {
  37. command(getCctStatusButton(groupId, status), 0);
  38. }
  39. void CctPacketFormatter::increaseTemperature() {
  40. command(CCT_TEMPERATURE_UP, 0);
  41. }
  42. void CctPacketFormatter::decreaseTemperature() {
  43. command(CCT_TEMPERATURE_DOWN, 0);
  44. }
  45. void CctPacketFormatter::increaseBrightness() {
  46. command(CCT_BRIGHTNESS_UP, 0);
  47. }
  48. void CctPacketFormatter::decreaseBrightness() {
  49. command(CCT_BRIGHTNESS_DOWN, 0);
  50. }
  51. uint8_t CctPacketFormatter::getCctStatusButton(uint8_t groupId, MiLightStatus status) {
  52. uint8_t button = 0;
  53. if (status == ON) {
  54. switch(groupId) {
  55. case 1:
  56. button = CCT_GROUP_1_ON;
  57. break;
  58. case 2:
  59. button = CCT_GROUP_2_ON;
  60. break;
  61. case 3:
  62. button = CCT_GROUP_3_ON;
  63. break;
  64. case 4:
  65. button = CCT_GROUP_4_ON;
  66. break;
  67. }
  68. } else {
  69. switch(groupId) {
  70. case 1:
  71. button = CCT_GROUP_1_OFF;
  72. break;
  73. case 2:
  74. button = CCT_GROUP_2_OFF;
  75. break;
  76. case 3:
  77. button = CCT_GROUP_3_OFF;
  78. break;
  79. case 4:
  80. button = CCT_GROUP_4_OFF;
  81. break;
  82. }
  83. }
  84. return button;
  85. }
  86. void CctPacketFormatter::format(uint8_t const* packet, char* buffer) {
  87. PacketFormatter::formatV1Packet(packet, buffer);
  88. }