-typedef struct {
- byte offset;
- byte state;
-} rf_bit_t;
-
-// offset is number of alphas (0.08ms)
-
-const rf_bit_t zero_bit[] = { { 4, 1 },
- { 16, 0 },
- { 20, 1 },
- { 32, 0 },
- { 0, 0 } };
-
-const rf_bit_t one_bit[] = { { 12, 1 },
- { 16, 0 },
- { 28, 1 },
- { 32, 0 },
- { 0, 0 } };
-
-const rf_bit_t float_bit[] = { { 4, 1 },
- { 16, 0 },
- { 28, 1 },
- { 32, 0 },
- { 0, 0 } };
-
-const rf_bit_t sync_bit[] = { { 4, 1 },
- { 128, 0 },
- { 0, 0 } };
-
-typedef enum { ZERO = 0, ONE , FLOAT , SYNC } adbit_t;
-typedef byte ad_bit_t;
-#define WORD_LEN 13
-typedef ad_bit_t word_t[WORD_LEN];
-
-const rf_bit_t* bit_defs[] = { zero_bit, one_bit, float_bit, sync_bit };
-
-byte alpha_cnt = 0;
-byte bit_cnt = 0;
-byte chunk_cnt = 0;
-byte word_cnt = 0;
-const ad_bit_t* current_word;
-byte volatile frame_finished = 1;
-
-#define FRAME_LEN 8
-
-#define A1_ON 0
-#define A1_OFF 1
-#define A2_ON 2
-#define A2_OFF 3
-
-#define B1_ON 4
-#define B1_OFF 5
-#define B2_ON 6
-#define B2_OFF 7
-
-#define C1_ON 8
-#define C1_OFF 9
-#define C2_ON 10
-#define C2_OFF 11
-
-#define D1_ON 12
-#define D1_OFF 13
-#define D2_ON 14
-#define D2_OFF 15
-
-const word_t words[] = {
-{ ZERO, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // A1_ON
-{ ZERO, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // A1_OFF
-{ ZERO, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // A2_ON
-{ ZERO, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // A2_OFF
-
-{ FLOAT, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // B1_ON
-{ FLOAT, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // B1_OFF
-{ FLOAT, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // B2_ON
-{ FLOAT, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // B2_OFF
-
-{ ZERO, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // C1_ON
-{ ZERO, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // C1_OFF
-{ ZERO, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // C2_ON
-{ ZERO, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // C2_OFF
-
-{ FLOAT, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // D1_ON
-{ FLOAT, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // D1_OFF
-{ FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // D2_ON
-{ FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC } // D2_OFF
-};
-
+//********************************************************************//
+// IR Codes, 32 bit, NEC
+const int YAMAHA_CODE_BITS = 32;
+const unsigned long int YAMAHA_CODE_BASE = 0x0000000005EA10000;
+
+const char YAMAHA_POWER_TOGGLE =0xF8; //Power On/Off
+const char YAMAHA_POWER_OFF =0x78; //Power Off !!!
+const char YAMAHA_SLEEP =0xEA; //Toggle Sleep 120/90/60/30min or Off
+
+const char YAMAHA_CD =0xA8; //Input CD
+const char YAMAHA_TUNER =0x68; //Input Tuner
+const char YAMAHA_TAPE =0x18; //Input Toggle Tape/CD
+const char YAMAHA_DVD_SPDIF =0xE8; //Input Toggle DVD Auto / DVD Analog
+const char YAMAHA_SAT_SPDIFF =0x2A; //Input Toggle Sat-DTV Auto / Sat-DTV Analog
+const char YAMAHA_AUX =0xAA; //Input AUX (mode)
+const char YAMAHA_VCR =0xF0; //Input VCR
+const char YAMAHA_EXT51DEC =0xE1; //Input Ext. Decoder On/Off
+
+const char YAMAHA_TUNER_PLUS =0x08; //Tuner Next Station 1-7 (of A1 - E7)
+const char YAMAHA_TUNER_MINUS =0x88; //Tuner Prev Station 1-7 (of A1 - E7)
+const char YAMAHA_TUNER_ABCDE =0x48; //Tuner Next Station Row A-E (of A1 - E7)
+
+const char YAMAHA_MUTE =0x38;
+const char YAMAHA_VOLUME_UP =0x58;
+const char YAMAHA_VOLUME_DOWN =0xD8;
+
+//const char YAMAHA_FRONT_LEVEL_P =0x01; //no function
+//const char YAMAHA_FRONT_LEVEL_M =0x81; //no function
+//const char YAMAHA_CENTRE_LEVEL_P =0x41; //no function
+//const char YAMAHA_CENTRE_LEVEL_M =0xC1; //no function
+//const char YAMAHA_REAR_LEVEL_P =0x7A; //no function
+//const char YAMAHA_REAR_LEVEL_M =0xFA; //no function
+const char YAMAHA_PLUS =0x4A; //unteres Steuerkreuz: Taste Rechts (Plus)
+const char YAMAHA_MINUS =0xCA; //unteres Steuerkreuz: Taste Links (Minus)
+const char YAMAHA_MENU =0x39; // Menu: Settings
+const char YAMAHA_TEST =0xA1; // Test Sounds
+const char YAMAHA_TIME_LEVEL =0x19; //Settings for Delay, Subwfs, Right Surround, Left Surround, Center
+const char YAMAHA_TIME_LEVEL2 =0x61; //(also) Settings for Delay, Subwfs, Right Surround, Left Surround, Center
+const char YAMAHA_TIME_LEVEL3 =0x99; //(also) Settings for Delay, Subwfs, Right Surround, Left Surround, Center
+
+const char YAMAHA_EFFECT_TOGGLE =0x6A; //Effect Toggle On/Off
+const char YAMAHA_PRG_DOWN =0x9A; //Effect/DSP Programm Toggle in down direction
+const char YAMAHA_PRG_UP =0x1A; //Effect/DSP Programm Toggle in up direction
+const char YAMAHA_EFFECT1 =0x31; //Effect TV Sports
+const char YAMAHA_EFFECT2 =0x71; //Effect Rock Concert
+const char YAMAHA_EFFECT3 =0xB1; //Effect Disco
+const char YAMAHA_EFFECT4 =0xD1; //Mono Movie
+const char YAMAHA_EFFECT5 =0x91; //Effect Toggle 70mm Sci-Fi / 70mm Spectacle
+const char YAMAHA_EFFECT6 =0x51; //Effect Toggle 70mm General / 70mm Adventure
+const char YAMAHA_P5 =0xFB; //P5 PRT (1 Main Bypass)? (1587674115)