#ifndef __TOSHIBA_IR__ #define __TOSHIBA_IR__ #include #include // Toshiba A/C #define kToshibaAcHdrMark ((uint32_t)4420) #define kToshibaAcHdrSpace ((uint32_t)4450) #define kToshibaAcBitMark ((uint32_t)570) #define kToshibaAcOneSpace ((uint32_t)1600) #define kToshibaAcZeroSpace ((uint32_t)510) #define kToshibaAcUsualGap ((uint32_t)7960) void Toshiba_ir_ResetDecoder (); uint8_t* nextPulseToshiba_ir(uint32_t width); #define kToshibaNumberOfBits 72 #define kToshibaNumberOfBytes (kToshibaNumberOfBits/8) struct toshibaDataBits { // Byte[0] - 0xF2 uint8_t :8; // Byte[1] - 0x0D (inverted previous byte's value) uint8_t :8; // Byte[2] - The expected payload length (in bytes) past the Byte[4]. ///< Known lengths are: ///< 1 (56 bit message) ///< 3 (72 bit message) ///< 4 (80 bit message) uint8_t Length :8; // Byte[3] - The bit-inverted value of the "length" byte. uint8_t :8; // Byte[4] uint8_t :3; uint8_t LongMsg :1; uint8_t :1; uint8_t ShortMsg :1; uint8_t :2; // Byte[5] uint8_t Swing :3; uint8_t :1; uint8_t Temp :4; // Byte[6] uint8_t Mode :3; uint8_t :2; uint8_t Fan :3; // Byte[7] uint8_t :4; uint8_t Filter :1; uint8_t :3; // Byte[8] // (Checksum for 72 bit messages, Eco/Turbo for long 80 bit messages) uint8_t EcoTurbo :8; }; union ToshibaProtocolU { uint8_t raw[kToshibaNumberOfBytes]; ///< The state in code form. struct toshibaDataBits data; }; #endif