toshiba_ir.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef __TOSHIBA_IR__
  2. #define __TOSHIBA_IR__
  3. #include <stdbool.h>
  4. #include <stdint.h>
  5. // Toshiba A/C
  6. #define kToshibaAcHdrMark ((uint32_t)4420)
  7. #define kToshibaAcHdrSpace ((uint32_t)4450)
  8. #define kToshibaAcBitMark ((uint32_t)570)
  9. #define kToshibaAcOneSpace ((uint32_t)1600)
  10. #define kToshibaAcZeroSpace ((uint32_t)510)
  11. #define kToshibaAcUsualGap ((uint32_t)7960)
  12. void Toshiba_ir_ResetDecoder ();
  13. uint8_t* nextPulseToshiba_ir(uint32_t width);
  14. #define kToshibaNumberOfBits 72
  15. #define kToshibaNumberOfBytes (kToshibaNumberOfBits/8)
  16. struct toshibaDataBits {
  17. // Byte[0] - 0xF2
  18. uint8_t :8;
  19. // Byte[1] - 0x0D (inverted previous byte's value)
  20. uint8_t :8;
  21. // Byte[2] - The expected payload length (in bytes) past the Byte[4].
  22. ///< Known lengths are:
  23. ///< 1 (56 bit message)
  24. ///< 3 (72 bit message)
  25. ///< 4 (80 bit message)
  26. uint8_t Length :8;
  27. // Byte[3] - The bit-inverted value of the "length" byte.
  28. uint8_t :8;
  29. // Byte[4]
  30. uint8_t :3;
  31. uint8_t LongMsg :1;
  32. uint8_t :1;
  33. uint8_t ShortMsg :1;
  34. uint8_t :2;
  35. // Byte[5]
  36. uint8_t Swing :3;
  37. uint8_t :1;
  38. uint8_t Temp :4;
  39. // Byte[6]
  40. uint8_t Mode :3;
  41. uint8_t :2;
  42. uint8_t Fan :3;
  43. // Byte[7]
  44. uint8_t :4;
  45. uint8_t Filter :1;
  46. uint8_t :3;
  47. // Byte[8]
  48. // (Checksum for 72 bit messages, Eco/Turbo for long 80 bit messages)
  49. uint8_t EcoTurbo :8;
  50. };
  51. union ToshibaProtocolU {
  52. uint8_t raw[kToshibaNumberOfBytes]; ///< The state in code form.
  53. struct toshibaDataBits data;
  54. };
  55. #endif