FUT02xPacketFormatter.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <FUT02xPacketFormatter.h>
  2. static const uint8_t FUT02X_PACKET_HEADER = 0xA5;
  3. static const uint8_t FUT02X_PAIR_COMMAND = 0x03;
  4. static const uint8_t FUT02X_UNPAIR_COMMAND = 0x03;
  5. void FUT02xPacketFormatter::initializePacket(uint8_t *packet) {
  6. size_t packetPtr = 0;
  7. packet[packetPtr++] = 0xA5;
  8. packet[packetPtr++] = deviceId >> 8;
  9. packet[packetPtr++] = deviceId & 0xFF;
  10. packet[packetPtr++] = 0; // arg
  11. packet[packetPtr++] = 0; // command
  12. packet[packetPtr++] = sequenceNum++;
  13. }
  14. bool FUT02xPacketFormatter::canHandle(const uint8_t* packet, const size_t len) {
  15. return len == packetLength && packet[0] == FUT02X_PACKET_HEADER;
  16. }
  17. void FUT02xPacketFormatter::command(uint8_t command, uint8_t arg) {
  18. pushPacket();
  19. if (held) {
  20. command |= 0x10;
  21. }
  22. currentPacket[FUT02X_COMMAND_INDEX] = command;
  23. currentPacket[FUT02X_ARGUMENT_INDEX] = arg;
  24. }
  25. void FUT02xPacketFormatter::pair() {
  26. for (size_t i = 0; i < 5; i++) {
  27. command(FUT02X_PAIR_COMMAND, 0);
  28. }
  29. }
  30. void FUT02xPacketFormatter::unpair() {
  31. for (size_t i = 0; i < 5; i++) {
  32. command(FUT02X_PAIR_COMMAND, 0);
  33. }
  34. }
  35. void FUT02xPacketFormatter::format(uint8_t const* packet, char* buffer) {
  36. buffer += sprintf_P(buffer, PSTR("b0 : %02X\n"), packet[0]);
  37. buffer += sprintf_P(buffer, PSTR("ID : %02X%02X\n"), packet[1], packet[2]);
  38. buffer += sprintf_P(buffer, PSTR("Arg : %02X\n"), packet[3]);
  39. buffer += sprintf_P(buffer, PSTR("Command : %02X\n"), packet[4]);
  40. buffer += sprintf_P(buffer, PSTR("Sequence : %02X\n"), packet[5]);
  41. }