+#if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1\r
+ if (irmp_param.protocol == IRMP_BANG_OLUFSEN_PROTOCOL)\r
+ {\r
+ if (irmp_pulse_time >= BANG_OLUFSEN_PULSE_LEN_MIN && irmp_pulse_time <= BANG_OLUFSEN_PULSE_LEN_MAX)\r
+ {\r
+ if (irmp_bit == 1) // Bang & Olufsen: 3rd bit\r
+ {\r
+ if (irmp_pause_time >= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX)\r
+ {\r
+ DEBUG_PRINTF ("3rd start bit\n");\r
+ wait_for_space = 0;\r
+ irmp_tmp_id = 0;\r
+ irmp_bit++;\r
+ }\r
+ else\r
+ { // timing incorrect!\r
+ DEBUG_PRINTF ("error 3a B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+ irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
+ irmp_pause_time = 0;\r
+ }\r
+\r
+ irmp_pulse_time = 1; // set counter to 1, not 0\r
+ }\r
+ else if (irmp_bit == 19) // Bang & Olufsen: trailer bit\r
+ {\r
+ if (irmp_pause_time >= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX)\r
+ {\r
+ DEBUG_PRINTF ("trailer bit\n");\r
+ wait_for_space = 0;\r
+ irmp_tmp_id = 0;\r
+ irmp_bit++;\r
+ }\r
+ else\r
+ { // timing incorrect!\r
+ DEBUG_PRINTF ("error 3b B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+ irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
+ irmp_pause_time = 0;\r
+ }\r
+\r
+ irmp_pulse_time = 1; // set counter to 1, not 0\r
+ }\r
+ else\r
+ {\r
+ if (irmp_pause_time >= irmp_param.pause_1_len_min && irmp_pause_time <= irmp_param.pause_1_len_max)\r
+ { // pulse & pause timings correct for "1"?\r
+ DEBUG_PUTCHAR ('1');\r
+ DEBUG_PUTCHAR ('\n');\r
+ irmp_store_bit (1);\r
+ last_value = 1;\r
+ wait_for_space = 0;\r
+ }\r
+ else if (irmp_pause_time >= irmp_param.pause_0_len_min && irmp_pause_time <= irmp_param.pause_0_len_max)\r
+ { // pulse & pause timings correct for "0"?\r
+ DEBUG_PUTCHAR ('0');\r
+ DEBUG_PUTCHAR ('\n');\r
+ irmp_store_bit (0);\r
+ last_value = 0;\r
+ wait_for_space = 0;\r
+ }\r
+ else if (irmp_pause_time >= BANG_OLUFSEN_R_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_R_PAUSE_LEN_MAX)\r
+ {\r
+ DEBUG_PUTCHAR (last_value + '0');\r
+ DEBUG_PUTCHAR ('\n');\r
+ irmp_store_bit (last_value);\r
+ wait_for_space = 0;\r
+ }\r
+ else\r
+ { // timing incorrect!\r
+ DEBUG_PRINTF ("error 3c B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+ irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
+ irmp_pause_time = 0;\r
+ }\r
+ }\r
+ }\r
+ else\r
+ { // timing incorrect!\r
+ DEBUG_PRINTF ("error 3d B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);\r
+ irmp_start_bit_detected = 0; // reset flags and wait for next start bit\r
+ irmp_pause_time = 0;\r
+ }\r
+ }\r
+ else\r
+#endif // IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL\r
+\r