toshiba_ir.h 1.6 KB

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