25 #if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1 || IRMP_SUPPORT_NOKIA_PROTOCOL == 1 || IRMP_SUPPORT_IR60_PROTOCOL == 1 26 # define IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL 1 28 # define IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL 0 31 #if IRMP_SUPPORT_SIEMENS_PROTOCOL == 1 || IRMP_SUPPORT_RUWIDO_PROTOCOL == 1 32 # define IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL 1 34 # define IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL 0 37 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 || \ 38 IRMP_SUPPORT_RCII_PROTOCOL == 1 || \ 39 IRMP_SUPPORT_S100_PROTOCOL == 1 || \ 40 IRMP_SUPPORT_RC6_PROTOCOL == 1 || \ 41 IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 || \ 42 IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 || \ 43 IRMP_SUPPORT_IR60_PROTOCOL == 1 || \ 44 IRMP_SUPPORT_A1TVBOX_PROTOCOL == 1 || \ 45 IRMP_SUPPORT_MERLIN_PROTOCOL == 1 || \ 46 IRMP_SUPPORT_ORTEK_PROTOCOL == 1 47 # define IRMP_SUPPORT_MANCHESTER 1 49 # define IRMP_SUPPORT_MANCHESTER 0 52 #if IRMP_SUPPORT_NETBOX_PROTOCOL == 1 53 # define IRMP_SUPPORT_SERIAL 1 55 # define IRMP_SUPPORT_SERIAL 0 58 #define IRMP_KEY_REPETITION_LEN (uint_fast16_t)(F_INTERRUPTS * 150.0e-3 + 0.5) // autodetect key repetition within 150 msec 60 #define MIN_TOLERANCE_00 1.0 // -0% 61 #define MAX_TOLERANCE_00 1.0 // +0% 63 #define MIN_TOLERANCE_02 0.98 // -2% 64 #define MAX_TOLERANCE_02 1.02 // +2% 66 #define MIN_TOLERANCE_03 0.97 // -3% 67 #define MAX_TOLERANCE_03 1.03 // +3% 69 #define MIN_TOLERANCE_05 0.95 // -5% 70 #define MAX_TOLERANCE_05 1.05 // +5% 72 #define MIN_TOLERANCE_10 0.9 // -10% 73 #define MAX_TOLERANCE_10 1.1 // +10% 75 #define MIN_TOLERANCE_15 0.85 // -15% 76 #define MAX_TOLERANCE_15 1.15 // +15% 78 #define MIN_TOLERANCE_20 0.8 // -20% 79 #define MAX_TOLERANCE_20 1.2 // +20% 81 #define MIN_TOLERANCE_30 0.7 // -30% 82 #define MAX_TOLERANCE_30 1.3 // +30% 84 #define MIN_TOLERANCE_40 0.6 // -40% 85 #define MAX_TOLERANCE_40 1.4 // +40% 87 #define MIN_TOLERANCE_50 0.5 // -50% 88 #define MAX_TOLERANCE_50 1.5 // +50% 90 #define MIN_TOLERANCE_60 0.4 // -60% 91 #define MAX_TOLERANCE_60 1.6 // +60% 93 #define MIN_TOLERANCE_70 0.3 // -70% 94 #define MAX_TOLERANCE_70 1.7 // +70% 96 #define SIRCS_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 97 #define SIRCS_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 98 #define SIRCS_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 99 #if IRMP_SUPPORT_NETBOX_PROTOCOL // only 5% to avoid conflict with NETBOX: 100 # define SIRCS_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5)) 101 #else // only 5% + 1 to avoid conflict with RC6: 102 # define SIRCS_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 104 #define SIRCS_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_1_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 105 #define SIRCS_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_1_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 106 #define SIRCS_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_0_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 107 #define SIRCS_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_0_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 108 #define SIRCS_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIRCS_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 109 #define SIRCS_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIRCS_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 111 #define NEC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 112 #define NEC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 113 #define NEC_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 114 #define NEC_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 115 #define NEC_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 116 #define NEC_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_REPEAT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 117 #define NEC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 118 #define NEC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 119 #define NEC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 120 #define NEC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 121 #define NEC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 122 #define NEC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NEC_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 126 #define NEC_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * NEC_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) 128 #define NEC_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * 100.0e-3 * MAX_TOLERANCE_20 + 0.5) 131 #define SAMSUNG_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 132 #define SAMSUNG_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 133 #define SAMSUNG_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 134 #define SAMSUNG_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 135 #define SAMSUNG_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 136 #define SAMSUNG_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 137 #define SAMSUNG_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 138 #define SAMSUNG_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 139 #define SAMSUNG_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 140 #define SAMSUNG_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 142 #define SAMSUNGAH_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 143 #define SAMSUNGAH_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 144 #define SAMSUNGAH_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 145 #define SAMSUNGAH_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 146 #define SAMSUNGAH_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 147 #define SAMSUNGAH_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 148 #define SAMSUNGAH_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 149 #define SAMSUNGAH_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 150 #define SAMSUNGAH_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 151 #define SAMSUNGAH_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SAMSUNGAH_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 153 #define MATSUSHITA_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 154 #define MATSUSHITA_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 155 #define MATSUSHITA_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 156 #define MATSUSHITA_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 157 #define MATSUSHITA_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 158 #define MATSUSHITA_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 159 #define MATSUSHITA_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_1_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 160 #define MATSUSHITA_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_1_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 161 #define MATSUSHITA_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 162 #define MATSUSHITA_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MATSUSHITA_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 164 #define KASEIKYO_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 165 #define KASEIKYO_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 166 #define KASEIKYO_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 167 #define KASEIKYO_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 168 #define KASEIKYO_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 169 #define KASEIKYO_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 170 #define KASEIKYO_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 171 #define KASEIKYO_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 172 #define KASEIKYO_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 173 #define KASEIKYO_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 175 #define MITSU_HEAVY_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 176 #define MITSU_HEAVY_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 177 #define MITSU_HEAVY_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 178 #define MITSU_HEAVY_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 179 #define MITSU_HEAVY_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 180 #define MITSU_HEAVY_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 181 #define MITSU_HEAVY_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 182 #define MITSU_HEAVY_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 183 #define MITSU_HEAVY_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 184 #define MITSU_HEAVY_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 186 #define VINCENT_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 187 #define VINCENT_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 188 #define VINCENT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 189 #define VINCENT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 190 #define VINCENT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 191 #define VINCENT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 192 #define VINCENT_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 193 #define VINCENT_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 194 #define VINCENT_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * VINCENT_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 195 #define VINCENT_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * VINCENT_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 197 #define PANASONIC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 198 #define PANASONIC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 199 #define PANASONIC_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 200 #define PANASONIC_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 201 #define PANASONIC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 202 #define PANASONIC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 203 #define PANASONIC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 204 #define PANASONIC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 205 #define PANASONIC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 206 #define PANASONIC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 208 #define RECS80_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 209 #define RECS80_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 210 #define RECS80_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 211 #define RECS80_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 212 #define RECS80_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 213 #define RECS80_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 214 #define RECS80_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 215 #define RECS80_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 216 #define RECS80_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 217 #define RECS80_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 219 #if IRMP_SUPPORT_BOSE_PROTOCOL == 1 // BOSE conflicts with RC5, so keep tolerance for RC5 minimal here: 220 #define RC5_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 221 #define RC5_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 223 #define RC5_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 224 #define RC5_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 227 #define RC5_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 228 #define RC5_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 230 #define RCII_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 231 #define RCII_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 232 #define RCII_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 233 #define RCII_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 234 #define RCII_START_BIT2_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT2_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 235 #define RCII_START_BIT2_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_START_BIT2_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 237 #define RCII_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCII_BIT_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 238 #define RCII_BIT_LEN ((uint_fast8_t)(F_INTERRUPTS * RCII_BIT_TIME)) 239 #define RCII_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCII_BIT_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 241 #if IRMP_SUPPORT_BOSE_PROTOCOL == 1 // BOSE conflicts with S100, so keep tolerance for S100 minimal here: 242 #define S100_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 243 #define S100_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 245 #define S100_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 246 #define S100_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 249 #define S100_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 250 #define S100_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 252 #define DENON_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 253 #define DENON_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 254 #define DENON_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * DENON_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 255 #define DENON_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * DENON_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 257 #define DENON_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * DENON_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 258 #define DENON_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * DENON_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 259 #define DENON_AUTO_REPETITION_PAUSE_LEN ((uint_fast16_t)(F_INTERRUPTS * DENON_AUTO_REPETITION_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 261 #define THOMSON_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * THOMSON_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 262 #define THOMSON_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * THOMSON_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 263 #define THOMSON_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * THOMSON_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 264 #define THOMSON_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * THOMSON_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 265 #define THOMSON_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * THOMSON_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 266 #define THOMSON_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * THOMSON_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 268 #define RC6_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 269 #define RC6_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 270 #define RC6_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 271 #define RC6_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 272 #define RC6_TOGGLE_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 273 #define RC6_TOGGLE_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_TOGGLE_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 274 #define RC6_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 275 #define RC6_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_60 + 0.5) + 1) // pulses: 300 - 800 276 #define RC6_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 277 #define RC6_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RC6_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1) // pauses: 300 - 600 279 #define RECS80EXT_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 280 #define RECS80EXT_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 281 #define RECS80EXT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 282 #define RECS80EXT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 283 #define RECS80EXT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 284 #define RECS80EXT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 285 #define RECS80EXT_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 286 #define RECS80EXT_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 287 #define RECS80EXT_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 288 #define RECS80EXT_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RECS80EXT_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 290 #define NUBERT_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 291 #define NUBERT_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 292 #define NUBERT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 293 #define NUBERT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 294 #define NUBERT_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 295 #define NUBERT_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 296 #define NUBERT_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 297 #define NUBERT_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 298 #define NUBERT_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 299 #define NUBERT_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 300 #define NUBERT_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 301 #define NUBERT_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NUBERT_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 303 #define FAN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 304 #define FAN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 305 #define FAN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 306 #define FAN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 307 #define FAN_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 308 #define FAN_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 309 #define FAN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 310 #define FAN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 311 #define FAN_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 312 #define FAN_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 313 #define FAN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 314 #define FAN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FAN_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 316 #define SPEAKER_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 317 #define SPEAKER_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 318 #define SPEAKER_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 319 #define SPEAKER_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 320 #define SPEAKER_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 321 #define SPEAKER_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 322 #define SPEAKER_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 323 #define SPEAKER_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 324 #define SPEAKER_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 325 #define SPEAKER_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 326 #define SPEAKER_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 327 #define SPEAKER_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SPEAKER_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 329 #define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 330 #define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 331 #define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 332 #define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 333 #define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 334 #define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 335 #define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 336 #define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT2_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 337 #define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 338 #define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 339 #define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 340 #define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX ((PAUSE_LEN)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT3_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) // value must be below IRMP_TIMEOUT 341 #define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 342 #define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 343 #define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 344 #define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT4_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 345 #define BANG_OLUFSEN_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 346 #define BANG_OLUFSEN_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 347 #define BANG_OLUFSEN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 348 #define BANG_OLUFSEN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 349 #define BANG_OLUFSEN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 350 #define BANG_OLUFSEN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 351 #define BANG_OLUFSEN_R_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_R_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 352 #define BANG_OLUFSEN_R_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_R_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 353 #define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 354 #define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 356 #define IR60_TIMEOUT_LEN ((uint_fast8_t)(F_INTERRUPTS * IR60_TIMEOUT_TIME * 0.5)) 357 #define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 358 #define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 359 #define GRUNDIG_NOKIA_IR60_BIT_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 360 #define GRUNDIG_NOKIA_IR60_BIT_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 361 #define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_PRE_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) + 1) 362 #define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GRUNDIG_NOKIA_IR60_PRE_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 364 #define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 365 #define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 366 #define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 367 #define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 368 #define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 369 #define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 370 #define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 371 #define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * SIEMENS_OR_RUWIDO_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 373 #define FDC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) // 5%: avoid conflict with NETBOX 374 #define FDC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5)) 375 #define FDC_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 376 #define FDC_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5)) 377 #define FDC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 378 #define FDC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_PULSE_TIME * MAX_TOLERANCE_50 + 0.5) + 1) 379 #define FDC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 380 #define FDC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 382 #define FDC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * FDC_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) // could be negative: 255 384 #define FDC_0_PAUSE_LEN_MIN (1) // simply use 1 386 #define FDC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * FDC_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 388 #define RCCAR_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 389 #define RCCAR_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 390 #define RCCAR_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 391 #define RCCAR_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 392 #define RCCAR_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 393 #define RCCAR_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 394 #define RCCAR_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 395 #define RCCAR_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 396 #define RCCAR_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCCAR_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 397 #define RCCAR_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCCAR_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 399 #define JVC_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_START_BIT_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 400 #define JVC_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_START_BIT_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 401 #define JVC_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * (JVC_FRAME_REPEAT_PAUSE_TIME - IRMP_TIMEOUT_TIME) * MIN_TOLERANCE_40 + 0.5) - 1) // HACK! 402 #define JVC_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * (JVC_FRAME_REPEAT_PAUSE_TIME - IRMP_TIMEOUT_TIME) * MAX_TOLERANCE_70 + 0.5) - 1) // HACK! 403 #define JVC_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 404 #define JVC_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 405 #define JVC_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_1_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 406 #define JVC_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_1_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 407 #define JVC_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * JVC_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 408 #define JVC_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * JVC_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 410 #define JVC_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * JVC_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) 412 #define NIKON_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 413 #define NIKON_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 414 #define NIKON_START_BIT_PAUSE_LEN_MIN ((uint_fast16_t)(F_INTERRUPTS * NIKON_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 415 #define NIKON_START_BIT_PAUSE_LEN_MAX ((uint_fast16_t)(F_INTERRUPTS * NIKON_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 416 #define NIKON_REPEAT_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_REPEAT_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 417 #define NIKON_REPEAT_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_REPEAT_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 418 #define NIKON_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 419 #define NIKON_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 420 #define NIKON_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 421 #define NIKON_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 422 #define NIKON_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NIKON_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 423 #define NIKON_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NIKON_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 424 #define NIKON_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * NIKON_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) 426 #define KATHREIN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 427 #define KATHREIN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 428 #define KATHREIN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 429 #define KATHREIN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 430 #define KATHREIN_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 431 #define KATHREIN_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 432 #define KATHREIN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 433 #define KATHREIN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_1_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 434 #define KATHREIN_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 435 #define KATHREIN_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 436 #define KATHREIN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 437 #define KATHREIN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 438 #define KATHREIN_SYNC_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_SYNC_BIT_PAUSE_LEN_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 439 #define KATHREIN_SYNC_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * KATHREIN_SYNC_BIT_PAUSE_LEN_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 441 #define NETBOX_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 442 #define NETBOX_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 443 #define NETBOX_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 444 #define NETBOX_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * NETBOX_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 445 #define NETBOX_PULSE_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PULSE_TIME)) 446 #define NETBOX_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PAUSE_TIME)) 447 #define NETBOX_PULSE_REST_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PULSE_TIME / 4)) 448 #define NETBOX_PAUSE_REST_LEN ((uint_fast8_t)(F_INTERRUPTS * NETBOX_PAUSE_TIME / 4)) 450 #define LEGO_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 451 #define LEGO_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 452 #define LEGO_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 453 #define LEGO_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_START_BIT_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 454 #define LEGO_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 455 #define LEGO_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 456 #define LEGO_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_1_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 457 #define LEGO_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_1_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 458 #define LEGO_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * LEGO_0_PAUSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1) 459 #define LEGO_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * LEGO_0_PAUSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1) 461 #define IRMP16_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 462 #define IRMP16_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 463 #define IRMP16_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 464 #define IRMP16_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 465 #define IRMP16_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 466 #define IRMP16_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 467 #define IRMP16_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 468 #define IRMP16_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 469 #define IRMP16_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * IRMP16_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 470 #define IRMP16_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * IRMP16_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 472 #define GREE_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 473 #define GREE_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 474 #define GREE_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 475 #define GREE_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_START_BIT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 476 #define GREE_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 477 #define GREE_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 478 #define GREE_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 479 #define GREE_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 480 #define GREE_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * GREE_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 481 #define GREE_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * GREE_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 483 #define BOSE_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 484 #define BOSE_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 485 #define BOSE_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 486 #define BOSE_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_START_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 487 #define BOSE_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 488 #define BOSE_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 489 #define BOSE_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 490 #define BOSE_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 491 #define BOSE_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * BOSE_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 492 #define BOSE_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * BOSE_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 493 #define BOSE_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * 100.0e-3 * MAX_TOLERANCE_20 + 0.5) 495 #define A1TVBOX_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 496 #define A1TVBOX_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 497 #define A1TVBOX_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 498 #define A1TVBOX_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 499 #define A1TVBOX_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 500 #define A1TVBOX_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 501 #define A1TVBOX_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 502 #define A1TVBOX_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * A1TVBOX_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 504 #define MERLIN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 505 #define MERLIN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 506 #define MERLIN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 507 #define MERLIN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 508 #define MERLIN_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 509 #define MERLIN_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 510 #define MERLIN_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 511 #define MERLIN_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * MERLIN_BIT_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 513 #define ORTEK_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 514 #define ORTEK_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 515 #define ORTEK_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 516 #define ORTEK_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 517 #define ORTEK_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 518 #define ORTEK_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 519 #define ORTEK_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 520 #define ORTEK_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ORTEK_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 522 #define TELEFUNKEN_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 523 #define TELEFUNKEN_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 524 #define TELEFUNKEN_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * (TELEFUNKEN_START_BIT_PAUSE_TIME) * MIN_TOLERANCE_10 + 0.5) - 1) 525 #define TELEFUNKEN_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * (TELEFUNKEN_START_BIT_PAUSE_TIME) * MAX_TOLERANCE_10 + 0.5) - 1) 526 #define TELEFUNKEN_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 527 #define TELEFUNKEN_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 528 #define TELEFUNKEN_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 529 #define TELEFUNKEN_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 530 #define TELEFUNKEN_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1) 531 #define TELEFUNKEN_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * TELEFUNKEN_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1) 535 #define ROOMBA_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 536 #define ROOMBA_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 537 #define ROOMBA_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 538 #define ROOMBA_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 539 #define ROOMBA_1_PAUSE_LEN_EXACT ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PAUSE_TIME + 0.5)) 540 #define ROOMBA_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 541 #define ROOMBA_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 542 #define ROOMBA_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 543 #define ROOMBA_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 544 #define ROOMBA_0_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PAUSE_TIME)) 545 #define ROOMBA_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 546 #define ROOMBA_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 547 #define ROOMBA_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 548 #define ROOMBA_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ROOMBA_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 550 #define RCMM32_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 551 #define RCMM32_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 552 #define RCMM32_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 553 #define RCMM32_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 554 #define RCMM32_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 555 #define RCMM32_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 556 #define RCMM32_BIT_00_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_00_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 557 #define RCMM32_BIT_00_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_00_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 558 #define RCMM32_BIT_01_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_01_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 559 #define RCMM32_BIT_01_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_01_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 560 #define RCMM32_BIT_10_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_10_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 561 #define RCMM32_BIT_10_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_10_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 562 #define RCMM32_BIT_11_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_11_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 563 #define RCMM32_BIT_11_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_11_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 565 #define PENTAX_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 566 #define PENTAX_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 567 #define PENTAX_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 568 #define PENTAX_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 569 #define PENTAX_1_PAUSE_LEN_EXACT ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME + 0.5)) 570 #define PENTAX_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 571 #define PENTAX_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 572 #define PENTAX_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 573 #define PENTAX_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 574 #define PENTAX_0_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME)) 575 #define PENTAX_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 576 #define PENTAX_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 577 #define PENTAX_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 578 #define PENTAX_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 580 #define ACP24_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PULSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1) 581 #define ACP24_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PULSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1) 582 #define ACP24_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PAUSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1) 583 #define ACP24_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_START_BIT_PAUSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1) 584 #define ACP24_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_PULSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1) 585 #define ACP24_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_PULSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1) 586 #define ACP24_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_1_PAUSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1) 587 #define ACP24_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_1_PAUSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1) 588 #define ACP24_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * ACP24_0_PAUSE_TIME * MIN_TOLERANCE_15 + 0.5) - 1) 589 #define ACP24_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * ACP24_0_PAUSE_TIME * MAX_TOLERANCE_15 + 0.5) + 1) 591 #define METZ_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PULSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 592 #define METZ_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PULSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 593 #define METZ_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1) 594 #define METZ_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_START_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1) 595 #define METZ_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 596 #define METZ_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 597 #define METZ_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 598 #define METZ_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 599 #define METZ_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * METZ_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 600 #define METZ_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * METZ_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 601 #define METZ_FRAME_REPEAT_PAUSE_LEN_MAX (uint_fast16_t)(F_INTERRUPTS * METZ_FRAME_REPEAT_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) 603 #define RADIO1_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 604 #define RADIO1_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 605 #define RADIO1_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1) 606 #define RADIO1_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1) 607 #define RADIO1_1_PAUSE_LEN_EXACT ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PAUSE_TIME + 0.5)) 608 #define RADIO1_1_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 609 #define RADIO1_1_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 610 #define RADIO1_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 611 #define RADIO1_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 612 #define RADIO1_0_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PAUSE_TIME)) 613 #define RADIO1_0_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 614 #define RADIO1_0_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 615 #define RADIO1_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1) 616 #define RADIO1_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1) 618 #define AUTO_FRAME_REPETITION_LEN (uint_fast16_t)(F_INTERRUPTS * AUTO_FRAME_REPETITION_TIME + 0.5) // use uint_fast16_t! 621 # define ANALYZE_PUTCHAR(a) { if (! silent) { putchar (a); } } 622 # define ANALYZE_ONLY_NORMAL_PUTCHAR(a) { if (! silent && !verbose) { putchar (a); } } 623 # define ANALYZE_PRINTF(...) { if (verbose) { printf (__VA_ARGS__); } } 624 # define ANALYZE_ONLY_NORMAL_PRINTF(...) { if (! silent && !verbose) { printf (__VA_ARGS__); } } 625 # define ANALYZE_NEWLINE() { if (verbose) { putchar ('\n'); } } 627 static int time_counter;
631 # define ANALYZE_PUTCHAR(a) 632 # define ANALYZE_ONLY_NORMAL_PUTCHAR(a) 633 # define ANALYZE_PRINTF(...) 634 # define ANALYZE_ONLY_NORMAL_PRINTF(...) 635 # define ANALYZE_NEWLINE() 639 #if IRMP_USE_CALLBACK == 1 640 static void (*irmp_callback_ptr) (uint_fast8_t);
641 #endif // IRMP_USE_CALLBACK == 1 643 #define PARITY_CHECK_OK 1 644 #define PARITY_CHECK_FAILED 0 650 #if defined(UNIX_OR_WINDOWS) || IRMP_PROTOCOL_NAMES == 1 651 static const char proto_unknown[] PROGMEM =
"UNKNOWN";
652 static const char proto_sircs[] PROGMEM =
"SIRCS";
653 static const char proto_nec[] PROGMEM =
"NEC";
654 static const char proto_samsung[] PROGMEM =
"SAMSUNG";
655 static const char proto_matsushita[] PROGMEM =
"MATSUSH";
656 static const char proto_kaseikyo[] PROGMEM =
"KASEIKYO";
657 static const char proto_recs80[] PROGMEM =
"RECS80";
658 static const char proto_rc5[] PROGMEM =
"RC5";
659 static const char proto_denon[] PROGMEM =
"DENON";
660 static const char proto_rc6[] PROGMEM =
"RC6";
661 static const char proto_samsung32[] PROGMEM =
"SAMSG32";
662 static const char proto_apple[] PROGMEM =
"APPLE";
663 static const char proto_recs80ext[] PROGMEM =
"RECS80EX";
664 static const char proto_nubert[] PROGMEM =
"NUBERT";
665 static const char proto_bang_olufsen[] PROGMEM =
"BANG OLU";
666 static const char proto_grundig[] PROGMEM =
"GRUNDIG";
667 static const char proto_nokia[] PROGMEM =
"NOKIA";
668 static const char proto_siemens[] PROGMEM =
"SIEMENS";
669 static const char proto_fdc[] PROGMEM =
"FDC";
670 static const char proto_rccar[] PROGMEM =
"RCCAR";
671 static const char proto_jvc[] PROGMEM =
"JVC";
672 static const char proto_rc6a[] PROGMEM =
"RC6A";
673 static const char proto_nikon[] PROGMEM =
"NIKON";
674 static const char proto_ruwido[] PROGMEM =
"RUWIDO";
675 static const char proto_ir60[] PROGMEM =
"IR60";
676 static const char proto_kathrein[] PROGMEM =
"KATHREIN";
677 static const char proto_netbox[] PROGMEM =
"NETBOX";
678 static const char proto_nec16[] PROGMEM =
"NEC16";
679 static const char proto_nec42[] PROGMEM =
"NEC42";
680 static const char proto_lego[] PROGMEM =
"LEGO";
681 static const char proto_thomson[] PROGMEM =
"THOMSON";
682 static const char proto_bose[] PROGMEM =
"BOSE";
683 static const char proto_a1tvbox[] PROGMEM =
"A1TVBOX";
684 static const char proto_ortek[] PROGMEM =
"ORTEK";
685 static const char proto_telefunken[] PROGMEM =
"TELEFUNKEN";
686 static const char proto_roomba[] PROGMEM =
"ROOMBA";
687 static const char proto_rcmm32[] PROGMEM =
"RCMM32";
688 static const char proto_rcmm24[] PROGMEM =
"RCMM24";
689 static const char proto_rcmm12[] PROGMEM =
"RCMM12";
690 static const char proto_speaker[] PROGMEM =
"SPEAKER";
691 static const char proto_lgair[] PROGMEM =
"LGAIR";
692 static const char proto_samsung48[] PROGMEM =
"SAMSG48";
693 static const char proto_merlin[] PROGMEM =
"MERLIN";
694 static const char proto_pentax[] PROGMEM =
"PENTAX";
695 static const char proto_fan[] PROGMEM =
"FAN";
696 static const char proto_s100[] PROGMEM =
"S100";
697 static const char proto_acp24[] PROGMEM =
"ACP24";
698 static const char proto_technics[] PROGMEM =
"TECHNICS";
699 static const char proto_panasonic[] PROGMEM =
"PANASONIC";
700 static const char proto_mitsu_heavy[] PROGMEM =
"MITSU_HEAVY";
701 static const char proto_vincent[] PROGMEM =
"VINCENT";
702 static const char proto_samsungah[] PROGMEM =
"SAMSUNGAH";
703 static const char proto_irmp16[] PROGMEM =
"IRMP16";
704 static const char proto_gree[] PROGMEM =
"GREE";
705 static const char proto_rcii[] PROGMEM =
"RCII";
706 static const char proto_metz[] PROGMEM =
"METZ";
707 static const char proto_onkyo[] PROGMEM =
"ONKYO";
709 static const char proto_radio1[] PROGMEM =
"RADIO1";
781 #if IRMP_LOGGING == 1 // logging via UART 783 #if defined(ARM_STM32F4XX) 784 # define STM32_GPIO_CLOCK RCC_AHB1Periph_GPIOA // UART2 on PA2 785 # define STM32_UART_CLOCK RCC_APB1Periph_USART2 786 # define STM32_GPIO_PORT GPIOA 787 # define STM32_GPIO_PIN GPIO_Pin_2 788 # define STM32_GPIO_SOURCE GPIO_PinSource2 789 # define STM32_UART_AF GPIO_AF_USART2 790 # define STM32_UART_COM USART2 791 # define STM32_UART_BAUD 115200 // 115200 Baud 792 # include "stm32f4xx_usart.h" 793 #elif defined(ARM_STM32F10X) 794 # define STM32_UART_COM USART3 // UART3 on PB10 795 #elif defined(ARDUINO) // Arduino Serial implementation 796 # if defined(USB_SERIAL) 797 # include "usb_serial.h" 799 # error USB_SERIAL not defined in ARDUINO Environment 801 #elif defined(_CHIBIOS_HAL_) // ChibiOS HAL 802 # if IRMP_EXT_LOGGING == 1 803 # error IRMP_EXT_LOGGING not implemented for ChibiOS HAL, use regular logging instead 806 # if IRMP_EXT_LOGGING == 1 // use external logging 807 # include "irmpextlog.h" 808 # else // normal UART log (IRMP_EXT_LOGGING == 0) 810 # ifndef UNIX_OR_WINDOWS 811 # include <util/setbaud.h> 816 #define UART0_UBRRH UBRR0H 817 #define UART0_UBRRL UBRR0L 818 #define UART0_UCSRA UCSR0A 819 #define UART0_UCSRB UCSR0B 820 #define UART0_UCSRC UCSR0C 821 #define UART0_UDRE_BIT_VALUE (1<<UDRE0) 822 #define UART0_UCSZ1_BIT_VALUE (1<<UCSZ01) 823 #define UART0_UCSZ0_BIT_VALUE (1<<UCSZ00) 825 #define UART0_URSEL_BIT_VALUE (1<<URSEL0) 827 #define UART0_URSEL_BIT_VALUE (0) 829 #define UART0_TXEN_BIT_VALUE (1<<TXEN0) 830 #define UART0_UDR UDR0 831 #define UART0_U2X U2X0 835 #define UART0_UBRRH UBRRH 836 #define UART0_UBRRL UBRRL 837 #define UART0_UCSRA UCSRA 838 #define UART0_UCSRB UCSRB 839 #define UART0_UCSRC UCSRC 840 #define UART0_UDRE_BIT_VALUE (1<<UDRE) 841 #define UART0_UCSZ1_BIT_VALUE (1<<UCSZ1) 842 #define UART0_UCSZ0_BIT_VALUE (1<<UCSZ0) 844 #define UART0_URSEL_BIT_VALUE (1<<URSEL) 846 #define UART0_URSEL_BIT_VALUE (0) 848 #define UART0_TXEN_BIT_VALUE (1<<TXEN) 849 #define UART0_UDR UDR 850 #define UART0_U2X U2X 853 #endif //IRMP_EXT_LOGGING 854 #endif //ARM_STM32F4XX 862 irmp_uart_init (
void)
864 #ifndef UNIX_OR_WINDOWS 865 #if defined(ARM_STM32F4XX) 866 GPIO_InitTypeDef GPIO_InitStructure;
867 USART_InitTypeDef USART_InitStructure;
870 RCC_AHB1PeriphClockCmd(STM32_GPIO_CLOCK, ENABLE);
873 RCC_APB1PeriphClockCmd(STM32_UART_CLOCK, ENABLE);
876 GPIO_PinAFConfig(STM32_GPIO_PORT,STM32_GPIO_SOURCE,STM32_UART_AF);
879 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
880 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
881 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
882 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
885 GPIO_InitStructure.GPIO_Pin = STM32_GPIO_PIN;
886 GPIO_Init(STM32_GPIO_PORT, &GPIO_InitStructure);
889 USART_OverSampling8Cmd(STM32_UART_COM, ENABLE);
892 USART_InitStructure.USART_BaudRate = STM32_UART_BAUD;
893 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
894 USART_InitStructure.USART_StopBits = USART_StopBits_1;
895 USART_InitStructure.USART_Parity = USART_Parity_No;
896 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
897 USART_InitStructure.USART_Mode = USART_Mode_Tx;
898 USART_Init(STM32_UART_COM, &USART_InitStructure);
901 USART_Cmd(STM32_UART_COM, ENABLE);
903 #elif defined(ARM_STM32F10X) 904 GPIO_InitTypeDef GPIO_InitStructure;
905 USART_InitTypeDef USART_InitStructure;
908 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
911 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
914 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
915 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
918 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
919 GPIO_Init(GPIOB, &GPIO_InitStructure);
922 USART_OverSampling8Cmd(STM32_UART_COM, ENABLE);
925 USART_InitStructure.USART_BaudRate = 115200;
926 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
927 USART_InitStructure.USART_StopBits = USART_StopBits_1;
928 USART_InitStructure.USART_Parity = USART_Parity_No;
929 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
930 USART_InitStructure.USART_Mode = USART_Mode_Tx;
931 USART_Init(STM32_UART_COM, &USART_InitStructure);
934 USART_Cmd(STM32_UART_COM, ENABLE);
936 #elif defined(ARDUINO) 940 #elif defined (__AVR_XMEGA__) 942 PMIC.CTRL |= PMIC_HILVLEN_bm;
944 USARTC1.BAUDCTRLB = 0;
945 USARTC1.BAUDCTRLA = F_CPU / 153600 - 1;
946 USARTC1.CTRLA = USART_RXCINTLVL_HI_gc;
947 USARTC1.CTRLB = USART_TXEN_bm | USART_RXEN_bm;
948 USARTC1.CTRLC = USART_CHSIZE_8BIT_gc;
950 PORTC.DIR &= ~(1<<6);
952 #elif defined (_CHIBIOS_HAL_) 957 #if (IRMP_EXT_LOGGING == 0) // use UART 958 UART0_UBRRH = UBRRH_VALUE;
959 UART0_UBRRL = UBRRL_VALUE;
962 UART0_UCSRA |= (1<<UART0_U2X);
964 UART0_UCSRA &= ~(1<<UART0_U2X);
967 UART0_UCSRC = UART0_UCSZ1_BIT_VALUE | UART0_UCSZ0_BIT_VALUE | UART0_URSEL_BIT_VALUE;
968 UART0_UCSRB |= UART0_TXEN_BIT_VALUE;
969 #else // other log method 971 #endif //IRMP_EXT_LOGGING 972 #endif //ARM_STM32F4XX 973 #endif // UNIX_OR_WINDOWS 983 irmp_uart_putc (
unsigned char ch)
985 #ifndef UNIX_OR_WINDOWS 986 #if defined(ARM_STM32F4XX) || defined(ARM_STM32F10X) 988 while (USART_GetFlagStatus(STM32_UART_COM, USART_FLAG_TXE) == RESET)
993 USART_SendData(STM32_UART_COM, ch);
997 while (USART_GetFlagStatus(STM32_UART_COM, USART_FLAG_TXE) == RESET);
998 USART_SendData(STM32_UART_COM,
'\r');
1001 #elif defined(ARDUINO) 1003 usb_serial_putchar(ch);
1005 #elif defined(_CHIBIOS_HAL_) 1007 sdWriteI(&IRMP_LOGGING_SD,&ch,1);
1010 #if (IRMP_EXT_LOGGING == 0) 1012 # if defined (__AVR_XMEGA__) 1013 while (!(USARTC1.STATUS & USART_DREIF_bm))
1021 while (!(UART0_UCSRA & UART0_UDRE_BIT_VALUE))
1028 # endif // __AVR_XMEGA__ 1034 #endif // IRMP_EXT_LOGGING 1035 #endif // ARM_STM32F4XX 1038 #endif // UNIX_OR_WINDOWS 1046 #define STARTCYCLES 2 // min count of zeros before start of logging 1047 #define ENDBITS 1000 // number of sequenced highbits to detect end 1048 #define DATALEN 700 // log buffer size 1053 static uint8_t buf[DATALEN];
1054 static uint_fast16_t buf_idx;
1055 static uint_fast8_t startcycles;
1056 static uint_fast16_t cnt;
1057 static uint_fast8_t last_val = 1;
1059 if (! val && (startcycles < STARTCYCLES) && !buf_idx)
1067 if (! val || buf_idx != 0)
1069 if (last_val == val)
1073 if (val && cnt > ENDBITS)
1078 uint_fast8_t v =
'1';
1081 for (i8 = 0; i8 < STARTCYCLES; i8++)
1083 irmp_uart_putc (
'0');
1086 for (i = 0; i < buf_idx; i++)
1095 d |= ((uint_fast16_t) buf[i] << 8);
1098 for (j = 0; j < d; j++)
1103 v = (v ==
'1') ?
'0' :
'1';
1106 for (i8 = 0; i8 < 20; i8++)
1108 irmp_uart_putc (
'1');
1111 irmp_uart_putc (
'\n');
1117 else if (buf_idx < DATALEN - 3)
1121 buf[buf_idx++] = 0xff;
1122 buf[buf_idx++] = (cnt & 0xff);
1123 buf[buf_idx] = (cnt >> 8);
1139 #define irmp_log(val) 1140 #endif //IRMP_LOGGING 1145 uint_fast8_t pulse_1_len_min;
1146 uint_fast8_t pulse_1_len_max;
1147 uint_fast8_t pause_1_len_min;
1148 uint_fast8_t pause_1_len_max;
1149 uint_fast8_t pulse_0_len_min;
1150 uint_fast8_t pulse_0_len_max;
1151 uint_fast8_t pause_0_len_min;
1152 uint_fast8_t pause_0_len_max;
1153 uint_fast8_t address_offset;
1154 uint_fast8_t address_end;
1155 uint_fast8_t command_offset;
1156 uint_fast8_t command_end;
1157 uint_fast8_t complete_len;
1158 uint_fast8_t stop_bit;
1159 uint_fast8_t lsb_first;
1163 #if IRMP_SUPPORT_SIRCS_PROTOCOL == 1 1165 static const PROGMEM IRMP_PARAMETER sircs_param =
1188 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 1190 static const PROGMEM IRMP_PARAMETER nec_param =
1211 static const PROGMEM IRMP_PARAMETER nec_rep_param =
1234 #if IRMP_SUPPORT_NEC42_PROTOCOL == 1 1236 static const PROGMEM IRMP_PARAMETER nec42_param =
1259 #if IRMP_SUPPORT_LGAIR_PROTOCOL == 1 1261 static const PROGMEM IRMP_PARAMETER lgair_param =
1284 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 1286 static const PROGMEM IRMP_PARAMETER samsung_param =
1309 #if IRMP_SUPPORT_SAMSUNGAH_PROTOCOL == 1 1311 static const PROGMEM IRMP_PARAMETER samsungah_param =
1334 #if IRMP_SUPPORT_TELEFUNKEN_PROTOCOL == 1 1336 static const PROGMEM IRMP_PARAMETER telefunken_param =
1359 #if IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1 1361 static const PROGMEM IRMP_PARAMETER matsushita_param =
1384 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 1386 static const PROGMEM IRMP_PARAMETER kaseikyo_param =
1409 #if IRMP_SUPPORT_PANASONIC_PROTOCOL == 1 1411 static const PROGMEM IRMP_PARAMETER panasonic_param =
1434 #if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1 1436 static const PROGMEM IRMP_PARAMETER mitsu_heavy_param =
1459 #if IRMP_SUPPORT_VINCENT_PROTOCOL == 1 1461 static const PROGMEM IRMP_PARAMETER vincent_param =
1484 #if IRMP_SUPPORT_RECS80_PROTOCOL == 1 1486 static const PROGMEM IRMP_PARAMETER recs80_param =
1509 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 1511 static const PROGMEM IRMP_PARAMETER rc5_param =
1534 #if IRMP_SUPPORT_RCII_PROTOCOL == 1 1536 static const PROGMEM IRMP_PARAMETER rcii_param =
1559 #if IRMP_SUPPORT_S100_PROTOCOL == 1 1561 static const PROGMEM IRMP_PARAMETER s100_param =
1584 #if IRMP_SUPPORT_DENON_PROTOCOL == 1 1586 static const PROGMEM IRMP_PARAMETER denon_param =
1609 #if IRMP_SUPPORT_RC6_PROTOCOL == 1 1611 static const PROGMEM IRMP_PARAMETER rc6_param =
1635 #if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 1637 static const PROGMEM IRMP_PARAMETER recs80ext_param =
1660 #if IRMP_SUPPORT_NUBERT_PROTOCOL == 1 1662 static const PROGMEM IRMP_PARAMETER nubert_param =
1685 #if IRMP_SUPPORT_FAN_PROTOCOL == 1 1687 static const PROGMEM IRMP_PARAMETER fan_param =
1710 #if IRMP_SUPPORT_SPEAKER_PROTOCOL == 1 1712 static const PROGMEM IRMP_PARAMETER speaker_param =
1735 #if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 1737 static const PROGMEM IRMP_PARAMETER bang_olufsen_param =
1760 #if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 1762 static uint_fast8_t first_bit;
1764 static const PROGMEM IRMP_PARAMETER grundig_param =
1788 #if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 1790 static const PROGMEM IRMP_PARAMETER ruwido_param =
1813 #if IRMP_SUPPORT_FDC_PROTOCOL == 1 1815 static const PROGMEM IRMP_PARAMETER fdc_param =
1838 #if IRMP_SUPPORT_RCCAR_PROTOCOL == 1 1840 static const PROGMEM IRMP_PARAMETER rccar_param =
1863 #if IRMP_SUPPORT_NIKON_PROTOCOL == 1 1865 static const PROGMEM IRMP_PARAMETER nikon_param =
1888 #if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1 1890 static const PROGMEM IRMP_PARAMETER kathrein_param =
1913 #if IRMP_SUPPORT_NETBOX_PROTOCOL == 1 1915 static const PROGMEM IRMP_PARAMETER netbox_param =
1938 #if IRMP_SUPPORT_LEGO_PROTOCOL == 1 1940 static const PROGMEM IRMP_PARAMETER lego_param =
1963 #if IRMP_SUPPORT_IRMP16_PROTOCOL == 1 1965 static const PROGMEM IRMP_PARAMETER irmp16_param =
1988 #if IRMP_SUPPORT_GREE_PROTOCOL == 1 1990 static const PROGMEM IRMP_PARAMETER gree_param =
2013 #if IRMP_SUPPORT_THOMSON_PROTOCOL == 1 2015 static const PROGMEM IRMP_PARAMETER thomson_param =
2038 #if IRMP_SUPPORT_BOSE_PROTOCOL == 1 2040 static const PROGMEM IRMP_PARAMETER bose_param =
2063 #if IRMP_SUPPORT_A1TVBOX_PROTOCOL == 1 2065 static const PROGMEM IRMP_PARAMETER a1tvbox_param =
2089 #if IRMP_SUPPORT_MERLIN_PROTOCOL == 1 2091 static const PROGMEM IRMP_PARAMETER merlin_param =
2115 #if IRMP_SUPPORT_ORTEK_PROTOCOL == 1 2117 static const PROGMEM IRMP_PARAMETER ortek_param =
2141 #if IRMP_SUPPORT_ROOMBA_PROTOCOL == 1 2143 static const PROGMEM IRMP_PARAMETER roomba_param =
2166 #if IRMP_SUPPORT_RCMM_PROTOCOL == 1 2168 static const PROGMEM IRMP_PARAMETER rcmm_param =
2192 #if IRMP_SUPPORT_PENTAX_PROTOCOL == 1 2194 static const PROGMEM IRMP_PARAMETER pentax_param =
2217 #if IRMP_SUPPORT_ACP24_PROTOCOL == 1 2219 static const PROGMEM IRMP_PARAMETER acp24_param =
2242 #if IRMP_SUPPORT_METZ_PROTOCOL == 1 2244 static const PROGMEM IRMP_PARAMETER metz_param =
2267 #if IRMP_SUPPORT_RADIO1_PROTOCOL == 1 2269 static const PROGMEM IRMP_PARAMETER radio1_param =
2293 static uint_fast8_t irmp_bit;
2294 static IRMP_PARAMETER irmp_param;
2296 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) 2297 static IRMP_PARAMETER irmp_param2;
2300 static volatile uint_fast8_t irmp_ir_detected =
FALSE;
2301 static volatile uint_fast8_t irmp_protocol;
2302 static volatile uint_fast16_t irmp_address;
2303 #if IRMP_32_BIT == 1 2304 static volatile uint_fast32_t irmp_command;
2306 static volatile uint_fast16_t irmp_command;
2308 static volatile uint_fast16_t irmp_id;
2309 static volatile uint_fast8_t irmp_flags;
2312 #if defined(__MBED__) 2319 #define input(x) (x) 2320 static uint_fast8_t IRMP_PIN;
2321 static uint_fast8_t radio;
2333 #if defined(PIC_CCS) || defined(PIC_C18) // PIC: do nothing 2334 #elif defined (ARM_STM32_HAL) // STM32 with Hal Library: do nothing 2335 #elif defined (ARM_STM32) // STM32 2336 GPIO_InitTypeDef GPIO_InitStructure;
2339 # if defined (ARM_STM32L1XX) 2340 RCC_AHBPeriphClockCmd(IRMP_PORT_RCC, ENABLE);
2341 # elif defined (ARM_STM32F10X) 2342 RCC_APB2PeriphClockCmd(IRMP_PORT_RCC, ENABLE);
2343 # elif defined (ARM_STM32F4XX) 2344 RCC_AHB1PeriphClockCmd(IRMP_PORT_RCC, ENABLE);
2348 GPIO_InitStructure.GPIO_Pin = IRMP_BIT;
2349 # if defined (ARM_STM32L1XX) || defined (ARM_STM32F4XX) 2350 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
2351 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
2352 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
2353 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
2354 # elif defined (ARM_STM32F10X) 2355 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
2356 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
2358 GPIO_Init(IRMP_PORT, &GPIO_InitStructure);
2360 #elif defined(STELLARIS_ARM_CORTEX_M4) 2362 ROM_SysCtlPeripheralEnable(IRMP_PORT_PERIPH);
2365 ROM_GPIODirModeSet(IRMP_PORT_BASE, IRMP_PORT_PIN, GPIO_DIR_MODE_IN);
2366 ROM_GPIOPadConfigSet(IRMP_PORT_BASE, IRMP_PORT_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
2368 #elif defined(__SDCC_stm8) // STM8 2369 IRMP_GPIO_STRUCT->DDR &= ~(1<<IRMP_BIT);
2370 IRMP_GPIO_STRUCT->CR1 |= (1<<IRMP_BIT);
2372 #elif defined (TEENSY_ARM_CORTEX_M4) // TEENSY 2373 pinMode(IRMP_PIN, INPUT);
2375 #elif defined(__xtensa__) // ESP8266 2376 pinMode(IRMP_BIT_NUMBER, INPUT);
2378 # if (IRMP_BIT_NUMBER == 12) 2379 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
2384 # warning Please add PIN_FUNC_SELECT when necessary. 2386 GPIO_DIS_OUTPUT(IRMP_BIT_NUMBER);
2388 #elif defined(__MBED__) 2389 gpio_init_in_ex(&gpioIRin, IRMP_PIN, IRMP_PINMODE);
2391 #elif defined(_CHIBIOS_HAL_) 2395 IRMP_PORT &= ~(1<<IRMP_BIT);
2396 IRMP_DDR &= ~(1<<IRMP_BIT);
2399 #if IRMP_LOGGING == 1 2414 uint_fast8_t rtc =
FALSE;
2415 #if IRMP_SUPPORT_MERLIN_PROTOCOL == 1 2416 uint_fast8_t cmd_len = 0;
2419 if (irmp_ir_detected)
2421 switch (irmp_protocol)
2423 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 2425 if ((irmp_command >> 8) == (~irmp_command & 0x00FF))
2427 irmp_command &= 0xff;
2428 irmp_command |= irmp_id << 8;
2433 #if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1 2435 irmp_command = (irmp_command & 0x00FF) | ((irmp_id & 0x00FF) << 8);
2441 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 2443 if ((irmp_command >> 8) == (~irmp_command & 0x00FF))
2445 irmp_command &= 0xff;
2448 else if (irmp_address == 0x87EE)
2454 irmp_address = (irmp_command & 0xFF00) >> 8;
2455 irmp_command &= 0x00FF;
2470 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 2472 if ((irmp_command >> 8) == (irmp_command & 0x00FF))
2474 irmp_command &= 0xff;
2480 #if IRMP_SUPPORT_BOSE_PROTOCOL == 1 2482 if ((irmp_command >> 8) == (~irmp_command & 0x00FF))
2484 irmp_command &= 0xff;
2490 #if IRMP_SUPPORT_MERLIN_PROTOCOL == 1 2496 else if (irmp_bit >= 19 && ((irmp_bit - 3) % 8 == 0))
2498 if (((irmp_command >> 1) & 1) != (irmp_command & 1))
2501 irmp_command |= ((irmp_address & 1) << (irmp_bit - 12));
2503 cmd_len = (irmp_bit - 11) >> 3;
2510 #if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 2513 if (((irmp_command >> 1) & 0x0001) == (~irmp_command & 0x0001))
2520 #if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1 2522 if (irmp_command != 0x0000)
2528 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 2530 irmp_address &= ~0x20;
2534 #if IRMP_SUPPORT_S100_PROTOCOL == 1 2536 irmp_address &= ~0x20;
2540 #if IRMP_SUPPORT_IR60_PROTOCOL == 1 2542 if (irmp_command != 0x007d)
2554 #if IRMP_SUPPORT_RCCAR_PROTOCOL == 1 2559 irmp_address = (irmp_command & 0x000C) >> 2;
2560 irmp_command = ((irmp_command & 0x1000) >> 2) |
2561 ((irmp_command & 0x0003) << 8) |
2562 ((irmp_command & 0x0FF0) >> 4);
2567 #if IRMP_SUPPORT_NETBOX_PROTOCOL == 1 // squeeze code to 8 bit, upper bit indicates release-key 2569 if (irmp_command & 0x1000)
2571 if ((irmp_command & 0x1f) == 0x15)
2574 irmp_command &= 0x7F;
2577 else if ((irmp_command & 0x1f) == 0x10)
2580 irmp_command |= 0x80;
2598 #if IRMP_SUPPORT_LEGO_PROTOCOL == 1 2601 uint_fast8_t crc = 0x0F ^ ((irmp_command & 0xF000) >> 12) ^ ((irmp_command & 0x0F00) >> 8) ^ ((irmp_command & 0x00F0) >> 4);
2603 if ((irmp_command & 0x000F) == crc)
2619 #if IRMP_SUPPORT_METZ_PROTOCOL == 1 2621 irmp_address &= ~0x40;
2622 if (((~irmp_address) & 0x07) == (irmp_address >> 3) && ((~irmp_command) & 0x3f) == (irmp_command >> 6))
2639 irmp_data_p->
protocol = irmp_protocol;
2640 irmp_data_p->
address = irmp_address;
2641 irmp_data_p->
command = irmp_command;
2642 irmp_data_p->
flags = irmp_flags;
2643 #if IRMP_SUPPORT_MERLIN_PROTOCOL == 1 2644 irmp_data_p->
flags |= cmd_len;
2656 irmp_ir_detected =
FALSE;
2662 #if IRMP_USE_CALLBACK == 1 2664 irmp_set_callback_ptr (
void (*cb)(uint_fast8_t))
2666 irmp_callback_ptr = cb;
2668 #endif // IRMP_USE_CALLBACK == 1 2671 static uint_fast16_t irmp_tmp_address;
2672 #if IRMP_32_BIT == 1 2673 static uint_fast32_t irmp_tmp_command;
2675 static uint_fast16_t irmp_tmp_command;
2678 #if (IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)) || IRMP_SUPPORT_NEC42_PROTOCOL == 1 2679 static uint_fast16_t irmp_tmp_address2;
2680 static uint_fast16_t irmp_tmp_command2;
2683 #if IRMP_SUPPORT_LGAIR_PROTOCOL == 1 2684 static uint_fast16_t irmp_lgair_address;
2685 static uint_fast16_t irmp_lgair_command;
2688 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 2689 static uint_fast16_t irmp_tmp_id;
2691 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 2692 static uint8_t xor_check[6];
2693 static uint_fast8_t genre2;
2696 #if IRMP_SUPPORT_ORTEK_PROTOCOL == 1 2697 static uint_fast8_t parity;
2700 #if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1 2701 static uint_fast8_t check;
2702 static uint_fast8_t mitsu_parity;
2715 irmp_store_bit (uint_fast8_t value)
2717 #if IRMP_SUPPORT_ACP24_PROTOCOL == 1 2734 case 0: irmp_tmp_command |= (1<<15);
break;
2735 case 2: irmp_tmp_command |= (1<<13);
break;
2736 case 3: irmp_tmp_command |= (1<<12);
break;
2737 case 4: irmp_tmp_command |= (1<<10);
break;
2738 case 5: irmp_tmp_command |= (1<< 9);
break;
2739 case 6: irmp_tmp_command |= (1<< 8);
break;
2740 case 20: irmp_tmp_command |= (1<< 6);
break;
2741 case 22: irmp_tmp_command |= (1<<11);
break;
2742 case 23: irmp_tmp_command |= (1<< 7);
break;
2743 case 24: irmp_tmp_command |= (1<<14);
break;
2744 case 26: irmp_tmp_command |= (1<< 5);
break;
2745 case 44: irmp_tmp_command |= (1<< 4);
break;
2746 case 66: irmp_tmp_command |= (1<< 3);
break;
2747 case 67: irmp_tmp_command |= (1<< 2);
break;
2748 case 68: irmp_tmp_command |= (1<< 1);
break;
2749 case 69: irmp_tmp_command |= (1<< 0);
break;
2754 #endif // IRMP_SUPPORT_ACP24_PROTOCOL 2756 #if IRMP_SUPPORT_ORTEK_PROTOCOL == 1 2766 else if (irmp_bit == 14)
2798 #if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 2806 if (irmp_bit >= irmp_param.address_offset && irmp_bit < irmp_param.address_end)
2808 if (irmp_param.lsb_first)
2810 irmp_tmp_address |= (((uint_fast16_t) (value)) << (irmp_bit - irmp_param.address_offset));
2814 irmp_tmp_address <<= 1;
2815 irmp_tmp_address |= value;
2818 else if (irmp_bit >= irmp_param.command_offset && irmp_bit < irmp_param.command_end)
2820 if (irmp_param.lsb_first)
2822 #if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1 2825 irmp_tmp_id |= (((uint_fast16_t) (value)) << (irmp_bit - 32));
2830 irmp_tmp_command |= (((uint_fast16_t) (value)) << (irmp_bit - irmp_param.command_offset));
2835 irmp_tmp_command <<= 1;
2836 irmp_tmp_command |= value;
2840 #if IRMP_SUPPORT_LGAIR_PROTOCOL == 1 2845 irmp_lgair_address <<= 1;
2846 irmp_lgair_address |= value;
2848 else if (irmp_bit < 24)
2850 irmp_lgair_command <<= 1;
2851 irmp_lgair_command |= value;
2857 #if IRMP_SUPPORT_NEC42_PROTOCOL == 1 2860 irmp_tmp_address2 |= (((uint_fast16_t) (value)) << (irmp_bit - 13));
2865 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 2873 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 2876 if (irmp_bit >= 20 && irmp_bit < 24)
2878 irmp_tmp_command |= (((uint_fast16_t) (value)) << (irmp_bit - 8));
2880 else if (irmp_bit >= 24 && irmp_bit < 28)
2882 genre2 |= (((uint_fast8_t) (value)) << (irmp_bit - 20));
2889 xor_check[irmp_bit / 8] |= 1 << (irmp_bit % 8);
2893 xor_check[irmp_bit / 8] &= ~(1 << (irmp_bit % 8));
2900 #if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1 2903 if (irmp_bit == 72 )
2907 check = irmp_tmp_address >> 8;
2910 if (check == (irmp_tmp_address & 0xFF))
2912 irmp_tmp_address <<= 8;
2919 check = irmp_tmp_command >> 8;
2921 if (check == (irmp_tmp_command & 0xFF))
2923 irmp_tmp_address |= irmp_tmp_command & 0xFF;
2929 irmp_tmp_command = 0;
2932 if (irmp_bit >= 72 )
2934 irmp_tmp_command <<= 1;
2935 irmp_tmp_command |= value;
2939 #endif // IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL 2953 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) 2955 irmp_store_bit2 (uint_fast8_t value)
2957 uint_fast8_t irmp_bit2;
2959 if (irmp_param.protocol)
2961 irmp_bit2 = irmp_bit - 2;
2965 irmp_bit2 = irmp_bit - 1;
2968 if (irmp_bit2 >= irmp_param2.address_offset && irmp_bit2 < irmp_param2.address_end)
2970 irmp_tmp_address2 |= (((uint_fast16_t) (value)) << (irmp_bit2 - irmp_param2.address_offset));
2972 else if (irmp_bit2 >= irmp_param2.command_offset && irmp_bit2 < irmp_param2.command_end)
2974 irmp_tmp_command2 |= (((uint_fast16_t) (value)) << (irmp_bit2 - irmp_param2.command_offset));
2977 #endif // IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) 2980 static uint32_t s_curSample;
2981 static uint32_t s_startBitSample;
2992 static uint_fast8_t irmp_start_bit_detected;
2993 static uint_fast8_t wait_for_space;
2994 static uint_fast8_t wait_for_start_space;
2995 static uint_fast8_t irmp_pulse_time;
2997 static uint_fast16_t last_irmp_address = 0xFFFF;
2998 #if IRMP_32_BIT == 1 2999 static uint_fast32_t last_irmp_command = 0xFFFFFFFF;
3001 static uint_fast16_t last_irmp_command = 0xFFFF;
3003 static uint_fast16_t key_repetition_len;
3004 static uint_fast8_t repetition_frame_number;
3005 #if IRMP_SUPPORT_DENON_PROTOCOL == 1 3006 static uint_fast16_t last_irmp_denon_command;
3007 static uint_fast16_t denon_repetition_len = 0xFFFF;
3009 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_S100_PROTOCOL == 1 3010 static uint_fast8_t rc5_cmd_bit6;
3012 #if IRMP_SUPPORT_MANCHESTER == 1 3015 #if IRMP_SUPPORT_MANCHESTER == 1 || IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 3016 static uint_fast8_t last_value;
3018 #if IRMP_SUPPORT_RCII_PROTOCOL == 1 3019 static uint_fast8_t waiting_for_2nd_pulse = 0;
3021 uint_fast8_t irmp_input;
3025 #if 0 // only for test 3026 static uint_fast8_t last_irmp_start_bit_detected = 0xFF;
3027 static uint_fast8_t last_irmp_pulse_time = 0xFF;
3029 if (last_irmp_start_bit_detected != irmp_start_bit_detected || last_irmp_pulse_time != irmp_pulse_time)
3031 last_irmp_start_bit_detected = irmp_start_bit_detected;
3032 last_irmp_pulse_time = irmp_pulse_time;
3034 printf (
"%d %d %d\n", time_counter, irmp_start_bit_detected, irmp_pulse_time);
3041 #if defined(__SDCC_stm8) 3042 irmp_input =
input(IRMP_GPIO_STRUCT->IDR)
3043 #elif defined(__MBED__) 3045 irmp_input = gpio_read (&gpioIRin);
3047 irmp_input =
input(IRMP_PIN);
3050 #if IRMP_USE_CALLBACK == 1 3051 if (irmp_callback_ptr)
3053 static uint_fast8_t last_inverted_input;
3055 if (last_inverted_input != !irmp_input)
3057 (*irmp_callback_ptr) (! irmp_input);
3058 last_inverted_input = !irmp_input;
3061 #endif // IRMP_USE_CALLBACK == 1 3065 if (! irmp_ir_detected)
3067 if (! irmp_start_bit_detected)
3073 if (! irmp_pulse_time)
3075 s_startBitSample = s_curSample;
3076 ANALYZE_PRINTF(
"%8.3fms [starting pulse]\n", (
double) (time_counter * 1000) / F_INTERRUPTS);
3083 if (irmp_pulse_time)
3085 irmp_start_bit_detected = 1;
3086 wait_for_start_space = 1;
3088 irmp_tmp_command = 0;
3089 irmp_tmp_address = 0;
3090 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 3093 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 3097 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) || IRMP_SUPPORT_NEC42_PROTOCOL == 1 3098 irmp_tmp_command2 = 0;
3099 irmp_tmp_address2 = 0;
3101 #if IRMP_SUPPORT_LGAIR_PROTOCOL == 1 3102 irmp_lgair_command = 0;
3103 irmp_lgair_address = 0;
3106 irmp_pause_time = 1;
3107 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_S100_PROTOCOL == 1 3113 if (key_repetition_len < 0xFFFF)
3115 key_repetition_len++;
3117 #if IRMP_SUPPORT_DENON_PROTOCOL == 1 3118 if (denon_repetition_len < 0xFFFF)
3120 denon_repetition_len++;
3125 ANALYZE_PRINTF (
"%8.3fms warning: did not receive inverted command repetition\n",
3126 (
double) (time_counter * 1000) / F_INTERRUPTS);
3128 last_irmp_denon_command = 0;
3129 denon_repetition_len = 0xFFFF;
3132 #endif // IRMP_SUPPORT_DENON_PROTOCOL == 1 3139 if (wait_for_start_space)
3145 #if IRMP_SUPPORT_NIKON_PROTOCOL == 1 3147 irmp_pause_time > IRMP_TIMEOUT_NIKON_LEN)
3152 #if IRMP_SUPPORT_JVC_PROTOCOL == 1 3158 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 3161 ANALYZE_PRINTF (
"%8.3fms error 1: pause after start bit pulse %d too long: %d\n", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_pulse_time, irmp_pause_time);
3166 irmp_start_bit_detected = 0;
3167 irmp_pulse_time = 0;
3168 irmp_pause_time = 0;
3173 IRMP_PARAMETER * irmp_param_p;
3174 irmp_param_p = (IRMP_PARAMETER *) 0;
3176 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) 3177 irmp_param2.protocol = 0;
3181 ANALYZE_PRINTF (
"%8.3fms [start-bit: pulse = %2d, pause = %2d]\n", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_pulse_time, irmp_pause_time);
3184 #if IRMP_SUPPORT_SIRCS_PROTOCOL == 1 3189 ANALYZE_PRINTF (
"protocol = SIRCS, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3193 irmp_param_p = (IRMP_PARAMETER *) &sircs_param;
3196 #endif // IRMP_SUPPORT_SIRCS_PROTOCOL == 1 3198 #if IRMP_SUPPORT_JVC_PROTOCOL == 1 3204 ANALYZE_PRINTF (
"protocol = NEC or JVC (type 1) repeat frame, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3208 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3211 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 3213 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 3217 #if IRMP_SUPPORT_NEC42_PROTOCOL == 1 3219 ANALYZE_PRINTF (
"protocol = NEC42, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3223 irmp_param_p = (IRMP_PARAMETER *) &nec42_param;
3226 ANALYZE_PRINTF (
"protocol = NEC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3230 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3236 #if IRMP_SUPPORT_JVC_PROTOCOL == 1 3240 ANALYZE_PRINTF (
"protocol = JVC repeat frame type 2, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3244 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3247 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 3250 ANALYZE_PRINTF (
"protocol = NEC (repetition frame), start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3255 irmp_param_p = (IRMP_PARAMETER *) &nec_rep_param;
3260 #if IRMP_SUPPORT_JVC_PROTOCOL == 1 3266 ANALYZE_PRINTF (
"protocol = JVC repeat frame type 3, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3270 irmp_param_p = (IRMP_PARAMETER *) &nec_param;
3273 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 3275 #endif // IRMP_SUPPORT_NEC_PROTOCOL == 1 3277 #if IRMP_SUPPORT_TELEFUNKEN_PROTOCOL == 1 3282 ANALYZE_PRINTF (
"protocol = TELEFUNKEN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3286 irmp_param_p = (IRMP_PARAMETER *) &telefunken_param;
3289 #endif // IRMP_SUPPORT_TELEFUNKEN_PROTOCOL == 1 3291 #if IRMP_SUPPORT_ROOMBA_PROTOCOL == 1 3296 ANALYZE_PRINTF (
"protocol = ROOMBA, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3300 irmp_param_p = (IRMP_PARAMETER *) &roomba_param;
3303 #endif // IRMP_SUPPORT_ROOMBA_PROTOCOL == 1 3305 #if IRMP_SUPPORT_ACP24_PROTOCOL == 1 3310 ANALYZE_PRINTF (
"protocol = ACP24, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3314 irmp_param_p = (IRMP_PARAMETER *) &acp24_param;
3317 #endif // IRMP_SUPPORT_ROOMBA_PROTOCOL == 1 3319 #if IRMP_SUPPORT_PENTAX_PROTOCOL == 1 3324 ANALYZE_PRINTF (
"protocol = PENTAX, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3328 irmp_param_p = (IRMP_PARAMETER *) &pentax_param;
3331 #endif // IRMP_SUPPORT_PENTAX_PROTOCOL == 1 3333 #if IRMP_SUPPORT_NIKON_PROTOCOL == 1 3338 ANALYZE_PRINTF (
"protocol = NIKON, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3342 irmp_param_p = (IRMP_PARAMETER *) &nikon_param;
3345 #endif // IRMP_SUPPORT_NIKON_PROTOCOL == 1 3347 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 3352 ANALYZE_PRINTF (
"protocol = SAMSUNG, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3356 irmp_param_p = (IRMP_PARAMETER *) &samsung_param;
3359 #endif // IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 3361 #if IRMP_SUPPORT_SAMSUNGAH_PROTOCOL == 1 3366 ANALYZE_PRINTF (
"protocol = SAMSUNGAH, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3370 irmp_param_p = (IRMP_PARAMETER *) &samsungah_param;
3373 #endif // IRMP_SUPPORT_SAMSUNGAH_PROTOCOL == 1 3375 #if IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1 3380 ANALYZE_PRINTF (
"protocol = MATSUSHITA, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3384 irmp_param_p = (IRMP_PARAMETER *) &matsushita_param;
3387 #endif // IRMP_SUPPORT_MATSUSHITA_PROTOCOL == 1 3389 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 3394 ANALYZE_PRINTF (
"protocol = KASEIKYO, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3398 irmp_param_p = (IRMP_PARAMETER *) &kaseikyo_param;
3401 #endif // IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 3403 #if IRMP_SUPPORT_PANASONIC_PROTOCOL == 1 3408 ANALYZE_PRINTF (
"protocol = PANASONIC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3412 irmp_param_p = (IRMP_PARAMETER *) &panasonic_param;
3415 #endif // IRMP_SUPPORT_PANASONIC_PROTOCOL == 1 3417 #if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1 3422 ANALYZE_PRINTF (
"protocol = MITSU_HEAVY, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3426 irmp_param_p = (IRMP_PARAMETER *) &mitsu_heavy_param;
3429 #endif // IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1 3431 #if IRMP_SUPPORT_VINCENT_PROTOCOL == 1 3436 ANALYZE_PRINTF (
"protocol = VINCENT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3440 irmp_param_p = (IRMP_PARAMETER *) &vincent_param;
3443 #endif // IRMP_SUPPORT_VINCENT_PROTOCOL == 1 3445 #if IRMP_SUPPORT_METZ_PROTOCOL == 1 3450 ANALYZE_PRINTF (
"protocol = METZ, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3454 irmp_param_p = (IRMP_PARAMETER *) &metz_param;
3457 #endif // IRMP_SUPPORT_METZ_PROTOCOL == 1 3459 #if IRMP_SUPPORT_RADIO1_PROTOCOL == 1 3464 ANALYZE_PRINTF (
"protocol = RADIO1, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3468 irmp_param_p = (IRMP_PARAMETER *) &radio1_param;
3471 #endif // IRMP_SUPPORT_RRADIO1_PROTOCOL == 1 3473 #if IRMP_SUPPORT_RECS80_PROTOCOL == 1 3478 ANALYZE_PRINTF (
"protocol = RECS80, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3482 irmp_param_p = (IRMP_PARAMETER *) &recs80_param;
3485 #endif // IRMP_SUPPORT_RECS80_PROTOCOL == 1 3487 #if IRMP_SUPPORT_S100_PROTOCOL == 1 3494 ANALYZE_PRINTF (
"protocol = S100, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or pulse: %3d - %3d, pause: %3d - %3d\n",
3501 irmp_param_p = (IRMP_PARAMETER *) &s100_param;
3502 last_pause = irmp_pause_time;
3508 rc5_cmd_bit6 = 1<<6;
3516 #endif // IRMP_SUPPORT_S100_PROTOCOL == 1 3518 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 3524 #if IRMP_SUPPORT_FDC_PROTOCOL == 1 3530 ANALYZE_PRINTF (
"FDC start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3533 ANALYZE_PRINTF (
"RC5 start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3537 memcpy_P (&irmp_param2, &fdc_param,
sizeof (IRMP_PARAMETER));
3540 #endif // IRMP_SUPPORT_FDC_PROTOCOL == 1 3542 #if IRMP_SUPPORT_RCCAR_PROTOCOL == 1 3548 ANALYZE_PRINTF (
"RCCAR start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3551 ANALYZE_PRINTF (
"RC5 start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3555 memcpy_P (&irmp_param2, &rccar_param,
sizeof (IRMP_PARAMETER));
3558 #endif // IRMP_SUPPORT_RCCAR_PROTOCOL == 1 3561 ANALYZE_PRINTF (
"protocol = RC5, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or pulse: %3d - %3d, pause: %3d - %3d\n",
3569 irmp_param_p = (IRMP_PARAMETER *) &rc5_param;
3570 last_pause = irmp_pause_time;
3576 rc5_cmd_bit6 = 1<<6;
3584 #endif // IRMP_SUPPORT_RC5_PROTOCOL == 1 3586 #if IRMP_SUPPORT_RCII_PROTOCOL == 1 3591 ANALYZE_PRINTF (
"protocol = RCII, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3595 irmp_param_p = (IRMP_PARAMETER *) &rcii_param;
3596 last_pause = irmp_pause_time;
3597 waiting_for_2nd_pulse = 1;
3601 #endif // IRMP_SUPPORT_RCII_PROTOCOL == 1 3603 #if IRMP_SUPPORT_DENON_PROTOCOL == 1 3609 ANALYZE_PRINTF (
"protocol = DENON, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or %3d - %3d\n",
3614 irmp_param_p = (IRMP_PARAMETER *) &denon_param;
3617 #endif // IRMP_SUPPORT_DENON_PROTOCOL == 1 3619 #if IRMP_SUPPORT_THOMSON_PROTOCOL == 1 3625 ANALYZE_PRINTF (
"protocol = THOMSON, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or %3d - %3d\n",
3630 irmp_param_p = (IRMP_PARAMETER *) &thomson_param;
3633 #endif // IRMP_SUPPORT_THOMSON_PROTOCOL == 1 3635 #if IRMP_SUPPORT_BOSE_PROTOCOL == 1 3640 ANALYZE_PRINTF (
"protocol = BOSE, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3644 irmp_param_p = (IRMP_PARAMETER *) &bose_param;
3647 #endif // IRMP_SUPPORT_BOSE_PROTOCOL == 1 3649 #if IRMP_SUPPORT_RC6_PROTOCOL == 1 3654 ANALYZE_PRINTF (
"protocol = RC6, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3658 irmp_param_p = (IRMP_PARAMETER *) &rc6_param;
3663 #endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 3665 #if IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 3670 ANALYZE_PRINTF (
"protocol = RECS80EXT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3674 irmp_param_p = (IRMP_PARAMETER *) &recs80ext_param;
3677 #endif // IRMP_SUPPORT_RECS80EXT_PROTOCOL == 1 3679 #if IRMP_SUPPORT_NUBERT_PROTOCOL == 1 3684 ANALYZE_PRINTF (
"protocol = NUBERT, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3688 irmp_param_p = (IRMP_PARAMETER *) &nubert_param;
3691 #endif // IRMP_SUPPORT_NUBERT_PROTOCOL == 1 3693 #if IRMP_SUPPORT_FAN_PROTOCOL == 1 3698 ANALYZE_PRINTF (
"protocol = FAN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3702 irmp_param_p = (IRMP_PARAMETER *) &fan_param;
3705 #endif // IRMP_SUPPORT_FAN_PROTOCOL == 1 3707 #if IRMP_SUPPORT_SPEAKER_PROTOCOL == 1 3712 ANALYZE_PRINTF (
"protocol = SPEAKER, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3716 irmp_param_p = (IRMP_PARAMETER *) &speaker_param;
3719 #endif // IRMP_SUPPORT_SPEAKER_PROTOCOL == 1 3721 #if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 3727 ANALYZE_PRINTF (
"start bit 1 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3730 ANALYZE_PRINTF (
"start bit 2 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3733 ANALYZE_PRINTF (
"start bit 3 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3736 ANALYZE_PRINTF (
"start bit 4 timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3740 irmp_param_p = (IRMP_PARAMETER *) &bang_olufsen_param;
3744 #endif // IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 3746 #if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 3751 ANALYZE_PRINTF (
"protocol = GRUNDIG, pre bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3755 irmp_param_p = (IRMP_PARAMETER *) &grundig_param;
3756 last_pause = irmp_pause_time;
3760 #endif // IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 3762 #if IRMP_SUPPORT_MERLIN_PROTOCOL == 1 // check MERLIN before RUWIDO! 3767 ANALYZE_PRINTF (
"protocol = MERLIN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3771 irmp_param_p = (IRMP_PARAMETER *) &merlin_param;
3772 last_pause = irmp_pause_time;
3776 #endif // IRMP_SUPPORT_MERLIN_PROTOCOL == 1 3778 #if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 3785 ANALYZE_PRINTF (
"protocol = RUWIDO, start bit timings: pulse: %3d - %3d or %3d - %3d, pause: %3d - %3d or %3d - %3d\n",
3791 irmp_param_p = (IRMP_PARAMETER *) &ruwido_param;
3792 last_pause = irmp_pause_time;
3796 #endif // IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 3798 #if IRMP_SUPPORT_FDC_PROTOCOL == 1 3803 ANALYZE_PRINTF (
"protocol = FDC, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3807 irmp_param_p = (IRMP_PARAMETER *) &fdc_param;
3810 #endif // IRMP_SUPPORT_FDC_PROTOCOL == 1 3812 #if IRMP_SUPPORT_RCCAR_PROTOCOL == 1 3817 ANALYZE_PRINTF (
"protocol = RCCAR, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3821 irmp_param_p = (IRMP_PARAMETER *) &rccar_param;
3824 #endif // IRMP_SUPPORT_RCCAR_PROTOCOL == 1 3826 #if IRMP_SUPPORT_KATHREIN_PROTOCOL == 1 3831 ANALYZE_PRINTF (
"protocol = KATHREIN, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3835 irmp_param_p = (IRMP_PARAMETER *) &kathrein_param;
3838 #endif // IRMP_SUPPORT_KATHREIN_PROTOCOL == 1 3840 #if IRMP_SUPPORT_NETBOX_PROTOCOL == 1 3845 ANALYZE_PRINTF (
"protocol = NETBOX, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3849 irmp_param_p = (IRMP_PARAMETER *) &netbox_param;
3852 #endif // IRMP_SUPPORT_NETBOX_PROTOCOL == 1 3854 #if IRMP_SUPPORT_LEGO_PROTOCOL == 1 3859 ANALYZE_PRINTF (
"protocol = LEGO, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3863 irmp_param_p = (IRMP_PARAMETER *) &lego_param;
3866 #endif // IRMP_SUPPORT_LEGO_PROTOCOL == 1 3868 #if IRMP_SUPPORT_IRMP16_PROTOCOL == 1 3873 ANALYZE_PRINTF (
"protocol = IRMP16, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3877 irmp_param_p = (IRMP_PARAMETER *) &irmp16_param;
3880 #endif // IRMP_SUPPORT_IRMP16_PROTOCOL == 1 3882 #if IRMP_SUPPORT_GREE_PROTOCOL == 1 3887 ANALYZE_PRINTF (
"protocol = GREE, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3891 irmp_param_p = (IRMP_PARAMETER *) &gree_param;
3894 #endif // IRMP_SUPPORT_GREE_PROTOCOL == 1 3896 #if IRMP_SUPPORT_A1TVBOX_PROTOCOL == 1 3901 ANALYZE_PRINTF (
"protocol = A1TVBOX, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3905 irmp_param_p = (IRMP_PARAMETER *) &a1tvbox_param;
3910 #endif // IRMP_SUPPORT_A1TVBOX_PROTOCOL == 1 3912 #if IRMP_SUPPORT_ORTEK_PROTOCOL == 1 3917 ANALYZE_PRINTF (
"protocol = ORTEK, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3921 irmp_param_p = (IRMP_PARAMETER *) &ortek_param;
3927 #endif // IRMP_SUPPORT_ORTEK_PROTOCOL == 1 3929 #if IRMP_SUPPORT_RCMM_PROTOCOL == 1 3934 ANALYZE_PRINTF (
"protocol = RCMM, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
3938 irmp_param_p = (IRMP_PARAMETER *) &rcmm_param;
3941 #endif // IRMP_SUPPORT_RCMM_PROTOCOL == 1 3946 irmp_start_bit_detected = 0;
3949 if (irmp_start_bit_detected)
3951 memcpy_P (&irmp_param, irmp_param_p,
sizeof (IRMP_PARAMETER));
3956 ANALYZE_PRINTF (
"pulse_1: %3d - %3d\n", irmp_param.pulse_1_len_min, irmp_param.pulse_1_len_max);
3957 ANALYZE_PRINTF (
"pause_1: %3d - %3d\n", irmp_param.pause_1_len_min, irmp_param.pause_1_len_max);
3963 ANALYZE_PRINTF (
"pulse: %3d - %3d or %3d - %3d\n", irmp_param.pulse_1_len_min, irmp_param.pulse_1_len_max,
3964 2 * irmp_param.pulse_1_len_min, 2 * irmp_param.pulse_1_len_max);
3965 ANALYZE_PRINTF (
"pause: %3d - %3d or %3d - %3d\n", irmp_param.pause_1_len_min, irmp_param.pause_1_len_max,
3966 2 * irmp_param.pause_1_len_min, 2 * irmp_param.pause_1_len_max);
3970 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) 3971 if (irmp_param2.protocol)
3974 ANALYZE_PRINTF (
"pulse_0: %3d - %3d\n", irmp_param2.pulse_0_len_min, irmp_param2.pulse_0_len_max);
3975 ANALYZE_PRINTF (
"pause_0: %3d - %3d\n", irmp_param2.pause_0_len_min, irmp_param2.pause_0_len_max);
3976 ANALYZE_PRINTF (
"pulse_1: %3d - %3d\n", irmp_param2.pulse_1_len_min, irmp_param2.pulse_1_len_max);
3977 ANALYZE_PRINTF (
"pause_1: %3d - %3d\n", irmp_param2.pause_1_len_min, irmp_param2.pause_1_len_max);
3983 #if IRMP_SUPPORT_RC6_PROTOCOL == 1 3995 ANALYZE_PRINTF (
"pulse_0: %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);
3996 ANALYZE_PRINTF (
"pause_0: %3d - %3d\n", irmp_param.pause_0_len_min, irmp_param.pause_0_len_max);
4002 ANALYZE_PRINTF (
"pulse: %3d - %3d or %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max,
4003 2 * irmp_param.pulse_0_len_min, 2 * irmp_param.pulse_0_len_max);
4004 ANALYZE_PRINTF (
"pause: %3d - %3d or %3d - %3d\n", irmp_param.pause_0_len_min, irmp_param.pause_0_len_max,
4005 2 * irmp_param.pause_0_len_min, 2 * irmp_param.pause_0_len_max);
4010 #if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 4013 ANALYZE_PRINTF (
"pulse_r: %3d - %3d\n", irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);
4018 ANALYZE_PRINTF (
"command_offset: %2d\n", irmp_param.command_offset);
4019 ANALYZE_PRINTF (
"command_len: %3d\n", irmp_param.command_end - irmp_param.command_offset);
4027 #if IRMP_SUPPORT_MANCHESTER == 1 4033 if (irmp_pause_time > irmp_param.pulse_1_len_max && irmp_pause_time <= 2 * irmp_param.pulse_1_len_max)
4036 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4042 else if (! last_value)
4045 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4053 #endif // IRMP_SUPPORT_MANCHESTER == 1 4055 #if IRMP_SUPPORT_SERIAL == 1 4061 #endif // IRMP_SUPPORT_SERIAL == 1 4064 #if IRMP_SUPPORT_DENON_PROTOCOL == 1 4068 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4089 #endif // IRMP_SUPPORT_DENON_PROTOCOL == 1 4090 #if IRMP_SUPPORT_THOMSON_PROTOCOL == 1 4094 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4115 #endif // IRMP_SUPPORT_THOMSON_PROTOCOL == 1 4120 irmp_pulse_time = 1;
4121 irmp_pause_time = 0;
4122 wait_for_start_space = 0;
4125 else if (wait_for_space)
4127 uint_fast8_t got_light =
FALSE;
4131 if (irmp_bit == irmp_param.complete_len && irmp_param.stop_bit == 1)
4140 (irmp_pulse_time >= irmp_param.pulse_0_len_min && irmp_pulse_time <= irmp_param.pulse_0_len_max))
4148 irmp_param.stop_bit = 0;
4153 ANALYZE_PRINTF (
"error: stop bit timing wrong, irmp_bit = %d, irmp_pulse_time = %d, pulse_0_len_min = %d, pulse_0_len_max = %d\n",
4154 irmp_bit, irmp_pulse_time, irmp_param.pulse_0_len_min, irmp_param.pulse_0_len_max);
4156 irmp_start_bit_detected = 0;
4157 irmp_pulse_time = 0;
4158 irmp_pause_time = 0;
4165 #if IRMP_SUPPORT_SIRCS_PROTOCOL == 1 4170 irmp_param.complete_len = irmp_bit + 1;
4173 irmp_param.command_end = irmp_param.command_offset + irmp_bit + 1;
4178 #if IRMP_SUPPORT_MERLIN_PROTOCOL == 1 4183 irmp_param.complete_len = irmp_bit;
4189 #if IRMP_SUPPORT_FAN_PROTOCOL == 1 4210 #if IRMP_SUPPORT_SERIAL == 1 4219 #if IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 4222 if (irmp_pause_time >
IR60_TIMEOUT_LEN && (irmp_bit == 5 || irmp_bit == 6))
4228 irmp_param.stop_bit =
TRUE;
4237 irmp_tmp_command <<= 1;
4238 irmp_tmp_command |= first_bit;
4244 irmp_param.stop_bit =
TRUE;
4249 ANALYZE_PRINTF (
"Switching to NOKIA protocol, irmp_bit = %d\n", irmp_bit);
4257 if (irmp_tmp_command & 0x300)
4259 irmp_tmp_address = (irmp_tmp_command >> 8);
4260 irmp_tmp_command &= 0xFF;
4266 #if IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 4273 irmp_param.stop_bit =
TRUE;
4289 irmp_tmp_address <<= 2;
4290 irmp_tmp_address |= (irmp_tmp_command >> 6);
4291 irmp_tmp_command &= 0x003F;
4293 irmp_tmp_command |= last_value;
4298 #if IRMP_SUPPORT_ROOMBA_PROTOCOL == 1 4315 #if IRMP_SUPPORT_MANCHESTER == 1 4317 irmp_pause_time >= 2 * irmp_param.pause_1_len_max && irmp_bit >= irmp_param.complete_len - 2 && !irmp_param.stop_bit)
4320 irmp_param.stop_bit =
TRUE;
4323 #endif // IRMP_SUPPORT_MANCHESTER == 1 4326 if (irmp_bit == irmp_param.complete_len - 1 && irmp_param.stop_bit == 0)
4330 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 4333 #ifdef ANALYZE // with 4500us pause instead of 2250us 4334 ANALYZE_PRINTF (
"Detected non-standard repetition frame, switching to NEC repetition\n");
4338 irmp_param.stop_bit =
TRUE;
4340 irmp_param.complete_len = irmp_bit;
4341 irmp_tmp_address = last_irmp_address;
4342 irmp_tmp_command = last_irmp_command;
4344 key_repetition_len = 0;
4349 ANALYZE_PRINTF (
"ignoring NEC repetition frame: timeout occured, key_repetition_len = %d > %d\n",
4352 irmp_ir_detected =
FALSE;
4355 #endif // IRMP_SUPPORT_NEC_PROTOCOL == 1 4356 #if IRMP_SUPPORT_JVC_PROTOCOL == 1 4357 else if (irmp_param.protocol ==
IRMP_NEC_PROTOCOL && (irmp_bit == 16 || irmp_bit == 17))
4360 ANALYZE_PRINTF (
"Switching to JVC protocol, irmp_bit = %d\n", irmp_bit);
4362 irmp_param.stop_bit =
TRUE;
4364 irmp_param.complete_len = irmp_bit;
4365 irmp_tmp_command = (irmp_tmp_address >> 4);
4366 irmp_tmp_address = irmp_tmp_address & 0x000F;
4367 irmp_start_bit_detected = 1;
4369 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 4370 #if IRMP_SUPPORT_LGAIR_PROTOCOL == 1 4371 else if (irmp_param.protocol ==
IRMP_NEC_PROTOCOL && (irmp_bit == 28 || irmp_bit == 29))
4374 ANALYZE_PRINTF (
"Switching to LGAIR protocol, irmp_bit = %d\n", irmp_bit);
4376 irmp_param.stop_bit =
TRUE;
4378 irmp_param.complete_len = irmp_bit;
4379 irmp_tmp_command = irmp_lgair_command;
4380 irmp_tmp_address = irmp_lgair_address;
4381 irmp_start_bit_detected = 1;
4383 #endif // IRMP_SUPPORT_LGAIR_PROTOCOL == 1 4385 #if IRMP_SUPPORT_NEC42_PROTOCOL == 1 4386 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 4392 irmp_param.stop_bit =
TRUE;
4394 irmp_param.complete_len = irmp_bit;
4399 irmp_tmp_address |= (irmp_tmp_address2 & 0x0007) << 13;
4400 irmp_tmp_command = (irmp_tmp_address2 >> 3) | (irmp_tmp_command << 10);
4402 #endif // IRMP_SUPPORT_NEC_PROTOCOL == 1 4403 #if IRMP_SUPPORT_LGAIR_PROTOCOL == 1 4409 irmp_param.stop_bit =
TRUE;
4411 irmp_param.complete_len = irmp_bit;
4412 irmp_tmp_address = irmp_lgair_address;
4413 irmp_tmp_command = irmp_lgair_command;
4415 #endif // IRMP_SUPPORT_LGAIR_PROTOCOL == 1 4416 #if IRMP_SUPPORT_JVC_PROTOCOL == 1 4417 else if (irmp_param.protocol ==
IRMP_NEC42_PROTOCOL && (irmp_bit == 16 || irmp_bit == 17))
4420 ANALYZE_PRINTF (
"Switching to JVC protocol, irmp_bit = %d\n", irmp_bit);
4422 irmp_param.stop_bit =
TRUE;
4424 irmp_param.complete_len = irmp_bit;
4429 irmp_tmp_command = (irmp_tmp_address >> 4) | (irmp_tmp_address2 << 9);
4430 irmp_tmp_address = irmp_tmp_address & 0x000F;
4432 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 4433 #endif // IRMP_SUPPORT_NEC42_PROTOCOL == 1 4435 #if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1 4446 #endif // IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 4448 #if IRMP_SUPPORT_RCMM_PROTOCOL == 1 4453 irmp_tmp_command = (irmp_tmp_address & 0xFF);
4454 irmp_tmp_address >>= 8;
4457 ANALYZE_PRINTF (
"Switching to RCMM12 protocol, irmp_bit = %d\n", irmp_bit);
4464 ANALYZE_PRINTF (
"Switching to RCMM24 protocol, irmp_bit = %d\n", irmp_bit);
4468 irmp_param.stop_bit =
TRUE;
4469 irmp_param.complete_len = irmp_bit;
4471 #endif // IRMP_SUPPORT_RCMM_PROTOCOL == 1 4473 #if IRMP_SUPPORT_TECHNICS_PROTOCOL == 1 4477 ANALYZE_PRINTF (
"Switching to TECHNICS protocol, irmp_bit = %d\n", irmp_bit);
4487 irmp_tmp_address <<= 1;
4488 if (irmp_tmp_command & (1<<11))
4490 irmp_tmp_address |= 1;
4491 irmp_tmp_command &= ~(1<<11);
4494 if (irmp_tmp_command == ((~irmp_tmp_address) & 0x07FF))
4496 irmp_tmp_address = 0;
4499 irmp_param.complete_len = irmp_bit;
4507 irmp_start_bit_detected = 0;
4508 irmp_pulse_time = 0;
4509 irmp_pause_time = 0;
4512 #endif // IRMP_SUPPORT_TECHNICS_PROTOCOL == 1 4516 ANALYZE_PRINTF (
"error 2: pause %d after data bit %d too long\n", irmp_pause_time, irmp_bit);
4519 irmp_start_bit_detected = 0;
4520 irmp_pulse_time = 0;
4521 irmp_pause_time = 0;
4534 ANALYZE_PRINTF (
"%8.3fms [bit %2d: pulse = %3d, pause = %3d] ", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit, irmp_pulse_time, irmp_pause_time);
4537 #if IRMP_SUPPORT_MANCHESTER == 1 4540 #if IRMP_SUPPORT_MERLIN_PROTOCOL == 1 4543 if (last_value == 0)
4545 if (irmp_pulse_time >= 2 * irmp_param.pulse_1_len_min && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max &&
4546 last_pause >= irmp_param.pause_1_len_min && last_pause <= irmp_param.pulse_1_len_max)
4548 irmp_param.complete_len += 2;
4555 if (last_pause >= 2 * irmp_param.pause_1_len_min && last_pause <= 2 * irmp_param.pulse_1_len_max)
4557 if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max)
4559 irmp_param.complete_len++;
4562 else if (irmp_pulse_time >= 2 * irmp_param.pulse_1_len_min && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max)
4564 irmp_param.complete_len += 2;
4574 if (irmp_pulse_time > irmp_param.pulse_1_len_max )
4575 #else // better, but some IR-RCs use asymmetric timings :-/ 4576 if (irmp_pulse_time > irmp_param.pulse_1_len_max && irmp_pulse_time <= 2 * irmp_param.pulse_1_len_max &&
4577 irmp_pause_time <= 2 * irmp_param.pause_1_len_max)
4580 #if IRMP_SUPPORT_RC6_PROTOCOL == 1 4601 #endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 4608 #if IRMP_SUPPORT_RC6_PROTOCOL == 1 4616 if (irmp_pause_time > 2 * irmp_param.pause_1_len_max)
4629 #endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 4636 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_RCII_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) 4637 if (! irmp_param2.protocol)
4648 else if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max
4651 uint_fast8_t manchester_value;
4653 if (last_pause > irmp_param.pause_1_len_max && last_pause <= 2 * irmp_param.pause_1_len_max)
4655 manchester_value = last_value ? 0 : 1;
4656 last_value = manchester_value;
4660 manchester_value = last_value;
4667 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1) 4668 if (! irmp_param2.protocol)
4676 #if IRMP_SUPPORT_RC6_PROTOCOL == 1 4677 if (irmp_param.protocol ==
IRMP_RC6_PROTOCOL && irmp_bit == 1 && manchester_value == 1)
4683 irmp_param.address_offset = 5;
4684 irmp_param.address_end = irmp_param.address_offset + 15;
4685 irmp_param.command_offset = irmp_param.address_end + 1;
4686 irmp_param.command_end = irmp_param.command_offset + 16 - 1;
4687 irmp_tmp_address = 0;
4689 #endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 4691 irmp_store_bit (manchester_value);
4695 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_FDC_PROTOCOL == 1 4704 irmp_param.protocol = 0;
4707 #endif // IRMP_SUPPORT_FDC_PROTOCOL == 1 4708 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_RCCAR_PROTOCOL == 1 4717 irmp_param.protocol = 0;
4720 #endif // IRMP_SUPPORT_RCCAR_PROTOCOL == 1 4725 ANALYZE_PRINTF (
"error 3 manchester: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4728 irmp_start_bit_detected = 0;
4729 irmp_pause_time = 0;
4733 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_FDC_PROTOCOL == 1 4741 irmp_store_bit2 (1);
4748 irmp_store_bit2 (0);
4751 if (! irmp_param.protocol)
4756 memcpy (&irmp_param, &irmp_param2,
sizeof (IRMP_PARAMETER));
4757 irmp_param2.protocol = 0;
4758 irmp_tmp_address = irmp_tmp_address2;
4759 irmp_tmp_command = irmp_tmp_command2;
4762 #endif // IRMP_SUPPORT_FDC_PROTOCOL == 1 4763 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_RCCAR_PROTOCOL == 1 4771 irmp_store_bit2 (1);
4778 irmp_store_bit2 (0);
4781 if (! irmp_param.protocol)
4786 memcpy (&irmp_param, &irmp_param2,
sizeof (IRMP_PARAMETER));
4787 irmp_param2.protocol = 0;
4788 irmp_tmp_address = irmp_tmp_address2;
4789 irmp_tmp_command = irmp_tmp_command2;
4792 #endif // IRMP_SUPPORT_RCCAR_PROTOCOL == 1 4794 last_pause = irmp_pause_time;
4798 #endif // IRMP_SUPPORT_MANCHESTER == 1 4800 #if IRMP_SUPPORT_SERIAL == 1 4803 while (irmp_bit < irmp_param.complete_len && irmp_pulse_time > irmp_param.pulse_1_len_max)
4810 if (irmp_pulse_time >= irmp_param.pulse_1_len_min)
4812 irmp_pulse_time -= irmp_param.pulse_1_len_min;
4816 irmp_pulse_time = 0;
4820 while (irmp_bit < irmp_param.complete_len && irmp_pause_time > irmp_param.pause_1_len_max)
4827 if (irmp_pause_time >= irmp_param.pause_1_len_min)
4829 irmp_pause_time -= irmp_param.pause_1_len_min;
4833 irmp_pause_time = 0;
4842 #endif // IRMP_SUPPORT_SERIAL == 1 4844 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 4858 #if IRMP_SUPPORT_SAMSUNG48_PROTOCOL == 1 4897 ANALYZE_PRINTF (
"error 3 Samsung: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4900 irmp_start_bit_detected = 0;
4901 irmp_pause_time = 0;
4905 #endif // IRMP_SUPPORT_SAMSUNG_PROTOCOL 4907 #if IRMP_SUPPORT_NEC16_PROTOCOL 4908 #if IRMP_SUPPORT_NEC42_PROTOCOL == 1 4916 ANALYZE_PRINTF (
"Switching to NEC16 protocol\n");
4918 irmp_param.protocol = IRMP_NEC16_PROTOCOL;
4919 irmp_param.address_offset = NEC16_ADDRESS_OFFSET;
4920 irmp_param.address_end = NEC16_ADDRESS_OFFSET + NEC16_ADDRESS_LEN;
4921 irmp_param.command_offset = NEC16_COMMAND_OFFSET;
4922 irmp_param.command_end = NEC16_COMMAND_OFFSET + NEC16_COMMAND_LEN;
4923 irmp_param.complete_len = NEC16_COMPLETE_DATA_LEN;
4929 #
if IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
4932 if (irmp_pulse_time >= BANG_OLUFSEN_PULSE_LEN_MIN && irmp_pulse_time <= BANG_OLUFSEN_PULSE_LEN_MAX)
4936 if (irmp_pause_time >= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX)
4939 ANALYZE_PRINTF (
"3rd start bit\n");
4947 ANALYZE_PRINTF (
"error 3a B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4948 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
4950 irmp_start_bit_detected = 0;
4951 irmp_pause_time = 0;
4954 else if (irmp_bit == 19)
4956 if (irmp_pause_time >= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX)
4959 ANALYZE_PRINTF (
"trailer bit\n");
4967 ANALYZE_PRINTF (
"error 3b B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
4968 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
4970 irmp_start_bit_detected = 0;
4971 irmp_pause_time = 0;
4976 if (irmp_pause_time >= BANG_OLUFSEN_1_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_1_PAUSE_LEN_MAX)
4979 ANALYZE_PUTCHAR (
'1');
4986 else if (irmp_pause_time >= BANG_OLUFSEN_0_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_0_PAUSE_LEN_MAX)
4989 ANALYZE_PUTCHAR (
'0');
4996 else if (irmp_pause_time >= BANG_OLUFSEN_R_PAUSE_LEN_MIN && irmp_pause_time <= BANG_OLUFSEN_R_PAUSE_LEN_MAX)
4999 ANALYZE_PUTCHAR (last_value +
'0');
5002 irmp_store_bit (last_value);
5008 ANALYZE_PRINTF (
"error 3c B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
5009 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
5011 irmp_start_bit_detected = 0;
5012 irmp_pause_time = 0;
5019 ANALYZE_PRINTF (
"error 3d B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
5020 ANALYZE_ONLY_NORMAL_PUTCHAR (
'\n');
5022 irmp_start_bit_detected = 0;
5023 irmp_pause_time = 0;
5027 #endif // IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL 5029 #if IRMP_SUPPORT_RCMM_PROTOCOL == 1 5032 if (irmp_pause_time >= RCMM32_BIT_00_PAUSE_LEN_MIN && irmp_pause_time <= RCMM32_BIT_00_PAUSE_LEN_MAX)
5035 ANALYZE_PUTCHAR (
'0');
5036 ANALYZE_PUTCHAR (
'0');
5076 if (irmp_pulse_time >= irmp_param.pulse_1_len_min && irmp_pulse_time <= irmp_param.pulse_1_len_max &&
5077 irmp_pause_time >= irmp_param.pause_1_len_min && irmp_pause_time <= irmp_param.pause_1_len_max)
5086 else if (irmp_pulse_time >= irmp_param.pulse_0_len_min && irmp_pulse_time <= irmp_param.pulse_0_len_max &&
5087 irmp_pause_time >= irmp_param.pause_0_len_min && irmp_pause_time <= irmp_param.pause_0_len_max)
5097 #if IRMP_SUPPORT_KATHREIN_PROTOCOL 5101 (((irmp_bit == 8 || irmp_bit == 6) &&
5114 irmp_tmp_command <<= 1;
5127 #endif // IRMP_SUPPORT_KATHREIN_PROTOCOL 5130 ANALYZE_PRINTF (
"error 3: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
5133 irmp_start_bit_detected = 0;
5134 irmp_pause_time = 0;
5137 irmp_pulse_time = 1;
5149 irmp_pause_time = 1;
5151 #if IRMP_SUPPORT_RCII_PROTOCOL == 1 5154 printf (
"fm: %d %d\n", irmp_pulse_time * 1000000 / F_INTERRUPTS,
RCII_BIT_LEN * 1000000 / F_INTERRUPTS);
5165 #else // fm: das reicht für RCII 5171 ANALYZE_PRINTF (
"RCII: got 2nd pulse, irmp_pulse_time = %d\n", irmp_pulse_time);
5173 waiting_for_2nd_pulse = 0;
5179 if (irmp_start_bit_detected && irmp_bit == irmp_param.complete_len && irmp_param.stop_bit == 0)
5183 repetition_frame_number++;
5187 repetition_frame_number = 0;
5190 #if IRMP_SUPPORT_SIRCS_PROTOCOL == 1 5192 if (irmp_param.protocol ==
IRMP_SIRCS_PROTOCOL && (repetition_frame_number == 1 || repetition_frame_number == 2))
5195 ANALYZE_PRINTF (
"code skipped: SIRCS auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5198 key_repetition_len = 0;
5203 #if IRMP_SUPPORT_ORTEK_PROTOCOL == 1 5208 ANALYZE_PRINTF (
"code skipped: ORTEK auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5211 key_repetition_len = 0;
5216 #if 0 && IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 // fm 2015-12-02: don't ignore every 2nd frame 5221 ANALYZE_PRINTF (
"code skipped: KASEIKYO auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5224 key_repetition_len = 0;
5229 #if 0 && IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 // fm 2015-12-02: don't ignore every 2nd frame 5234 ANALYZE_PRINTF (
"code skipped: SAMSUNG32/SAMSUNG48 auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5237 key_repetition_len = 0;
5242 #if IRMP_SUPPORT_NUBERT_PROTOCOL == 1 5247 ANALYZE_PRINTF (
"code skipped: NUBERT auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5250 key_repetition_len = 0;
5255 #if IRMP_SUPPORT_SPEAKER_PROTOCOL == 1 5260 ANALYZE_PRINTF (
"code skipped: SPEAKER auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
5263 key_repetition_len = 0;
5270 ANALYZE_PRINTF (
"%8.3fms code detected, length = %d\n", (
double) (time_counter * 1000) / F_INTERRUPTS, irmp_bit);
5272 irmp_ir_detected =
TRUE;
5274 #if IRMP_SUPPORT_DENON_PROTOCOL == 1 5277 if ((~irmp_tmp_command & 0x3FF) == last_irmp_denon_command)
5279 irmp_tmp_command = last_irmp_denon_command;
5280 last_irmp_denon_command = 0;
5282 irmp_protocol = irmp_param.protocol;
5283 irmp_address = irmp_tmp_address;
5284 irmp_command = irmp_tmp_command;
5288 if ((irmp_tmp_command & 0x01) == 0x00)
5291 ANALYZE_PRINTF (
"%8.3fms info Denon: waiting for inverted command repetition\n", (
double) (time_counter * 1000) / F_INTERRUPTS);
5293 last_irmp_denon_command = irmp_tmp_command;
5294 denon_repetition_len = 0;
5295 irmp_ir_detected =
FALSE;
5300 ANALYZE_PRINTF (
"%8.3fms warning Denon: got unexpected inverted command, ignoring it\n", (
double) (time_counter * 1000) / F_INTERRUPTS);
5302 last_irmp_denon_command = 0;
5303 irmp_ir_detected =
FALSE;
5308 #endif // IRMP_SUPPORT_DENON_PROTOCOL 5310 #if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1 5316 irmp_ir_detected =
FALSE;
5319 #endif // IRMP_SUPPORT_GRUNDIG_PROTOCOL 5321 #if IRMP_SUPPORT_NOKIA_PROTOCOL == 1 5322 if (irmp_param.protocol ==
IRMP_NOKIA_PROTOCOL && irmp_tmp_address == 0x00ff && irmp_tmp_command == 0x00fe)
5327 irmp_ir_detected =
FALSE;
5330 #endif // IRMP_SUPPORT_NOKIA_PROTOCOL 5332 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 5338 ANALYZE_PRINTF (
"Detected NEC repetition frame, key_repetition_len = %d\n", (
int)key_repetition_len);
5341 irmp_tmp_address = last_irmp_address;
5342 irmp_tmp_command = last_irmp_command;
5344 key_repetition_len = 0;
5349 ANALYZE_PRINTF (
"Detected NEC repetition frame, ignoring it: timeout occured, key_repetition_len = %d > %d\n",
5352 irmp_ir_detected =
FALSE;
5355 #endif // IRMP_SUPPORT_NEC_PROTOCOL 5357 #if IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 5360 uint_fast8_t xor_value;
5362 xor_value = (xor_check[0] & 0x0F) ^ ((xor_check[0] & 0xF0) >> 4) ^ (xor_check[1] & 0x0F) ^ ((xor_check[1] & 0xF0) >> 4);
5364 if (xor_value != (xor_check[2] & 0x0F))
5367 ANALYZE_PRINTF (
"error 4: wrong XOR check for customer id: 0x%1x 0x%1x\n", xor_value, xor_check[2] & 0x0F);
5369 irmp_ir_detected =
FALSE;
5372 xor_value = xor_check[2] ^ xor_check[3] ^ xor_check[4];
5374 if (xor_value != xor_check[5])
5377 ANALYZE_PRINTF (
"error 5: wrong XOR check for data bits: 0x%02x 0x%02x\n", xor_value, xor_check[5]);
5379 irmp_ir_detected =
FALSE;
5382 irmp_flags |= genre2;
5384 #endif // IRMP_SUPPORT_KASEIKYO_PROTOCOL == 1 5386 #if IRMP_SUPPORT_ORTEK_PROTOCOL == 1 5394 irmp_ir_detected =
FALSE;
5397 if ((irmp_tmp_address & 0x03) == 0x02)
5400 ANALYZE_PRINTF (
"code skipped: ORTEK end of transmission frame (key release)\n");
5402 irmp_ir_detected =
FALSE;
5404 irmp_tmp_address >>= 2;
5406 #endif // IRMP_SUPPORT_ORTEK_PROTOCOL == 1 5408 #if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1 5411 check = irmp_tmp_command >> 8;
5413 if (check == (irmp_tmp_command & 0xFF)) {
5414 irmp_tmp_command &= 0xFF;
5422 irmp_ir_detected =
FALSE;
5425 #endif // IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL 5427 #if IRMP_SUPPORT_RC6_PROTOCOL == 1 5433 #endif // IRMP_SUPPORT_RC6_PROTOCOL == 1 5435 irmp_protocol = irmp_param.protocol;
5438 #if IRMP_SUPPORT_FDC_PROTOCOL == 1 5441 if (irmp_tmp_command & 0x000F)
5443 irmp_tmp_command = (irmp_tmp_command >> 4) | 0x80;
5447 irmp_tmp_command >>= 4;
5449 irmp_tmp_command |= (irmp_tmp_address << 2) & 0x0F00;
5450 irmp_tmp_address &= 0x003F;
5454 irmp_address = irmp_tmp_address;
5455 #if IRMP_SUPPORT_NEC_PROTOCOL == 1 5458 last_irmp_address = irmp_tmp_address;
5462 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 5465 irmp_tmp_command |= rc5_cmd_bit6;
5468 #if IRMP_SUPPORT_S100_PROTOCOL == 1 5471 irmp_tmp_command |= rc5_cmd_bit6;
5474 irmp_command = irmp_tmp_command;
5476 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1 5477 irmp_id = irmp_tmp_id;
5482 if (irmp_ir_detected)
5484 if (last_irmp_command == irmp_tmp_command &&
5485 last_irmp_address == irmp_tmp_address &&
5491 last_irmp_address = irmp_tmp_address;
5492 last_irmp_command = irmp_tmp_command;
5494 key_repetition_len = 0;
5503 irmp_start_bit_detected = 0;
5504 irmp_tmp_command = 0;
5505 irmp_pulse_time = 0;
5506 irmp_pause_time = 0;
5508 #if IRMP_SUPPORT_JVC_PROTOCOL == 1 5513 #endif // IRMP_SUPPORT_JVC_PROTOCOL == 1 5518 #if defined(STELLARIS_ARM_CORTEX_M4) 5520 TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
5523 #if (defined(_CHIBIOS_RT_) || defined(_CHIBIOS_NIL_)) && IRMP_USE_EVENT == 1 5524 if (IRMP_EVENT_THREAD_PTR != NULL && irmp_ir_detected)
5525 chEvtSignalI(IRMP_EVENT_THREAD_PTR,IRMP_EVENT_BIT);
5528 #if IRMP_USE_IDLE_CALL == 1 5530 if (!irmp_start_bit_detected && !irmp_pulse_time
5538 #endif // IRMP_USE_IDLE_CALL 5540 return (irmp_ir_detected);
5578 puts (
"-----------------------------------------------------------------------------");
5579 printf (
"%s:\n", text);
5581 for (i = 0; i < 256; i++)
5583 if (buf[i] > max_value)
5589 for (i = 1; i < 200; i++)
5594 value = (buf[i] * 60) / max_value;
5596 for (j = 0; j < value; j++)
5600 printf (
" %d\n", buf[i]);
5611 average = (float) sum / (
float) counter;
5622 printf (
"avg: %4.1f=%6.1f us, ", average, (1000000. * average) / (
float) F_INTERRUPTS);
5623 printf (
"min: %2d=%6.1f us, ", min, (1000000. * min) / (
float) F_INTERRUPTS);
5624 printf (
"max: %2d=%6.1f us, ", max, (1000000. * max) / (
float) F_INTERRUPTS);
5626 tolerance = (max - average);
5628 if (average - min > tolerance)
5630 tolerance = average - min;
5633 tolerance = tolerance * 100 / average;
5634 printf (
"tol: %4.1f%%\n", tolerance);
5644 #define STATE_LEFT_SHIFT 0x01 5645 #define STATE_RIGHT_SHIFT 0x02 5646 #define STATE_LEFT_CTRL 0x04 5647 #define STATE_LEFT_ALT 0x08 5648 #define STATE_RIGHT_ALT 0x10 5650 #define KEY_ESCAPE 0x1B // keycode = 0x006e 5651 #define KEY_MENUE 0x80 // keycode = 0x0070 5652 #define KEY_BACK 0x81 // keycode = 0x0071 5653 #define KEY_FORWARD 0x82 // keycode = 0x0072 5654 #define KEY_ADDRESS 0x83 // keycode = 0x0073 5655 #define KEY_WINDOW 0x84 // keycode = 0x0074 5656 #define KEY_1ST_PAGE 0x85 // keycode = 0x0075 5657 #define KEY_STOP 0x86 // keycode = 0x0076 5658 #define KEY_MAIL 0x87 // keycode = 0x0077 5659 #define KEY_FAVORITES 0x88 // keycode = 0x0078 5660 #define KEY_NEW_PAGE 0x89 // keycode = 0x0079 5661 #define KEY_SETUP 0x8A // keycode = 0x007a 5662 #define KEY_FONT 0x8B // keycode = 0x007b 5663 #define KEY_PRINT 0x8C // keycode = 0x007c 5664 #define KEY_ON_OFF 0x8E // keycode = 0x007c 5666 #define KEY_INSERT 0x90 // keycode = 0x004b 5667 #define KEY_DELETE 0x91 // keycode = 0x004c 5668 #define KEY_LEFT 0x92 // keycode = 0x004f 5669 #define KEY_HOME 0x93 // keycode = 0x0050 5670 #define KEY_END 0x94 // keycode = 0x0051 5671 #define KEY_UP 0x95 // keycode = 0x0053 5672 #define KEY_DOWN 0x96 // keycode = 0x0054 5673 #define KEY_PAGE_UP 0x97 // keycode = 0x0055 5674 #define KEY_PAGE_DOWN 0x98 // keycode = 0x0056 5675 #define KEY_RIGHT 0x99 // keycode = 0x0059 5676 #define KEY_MOUSE_1 0x9E // keycode = 0x0400 5677 #define KEY_MOUSE_2 0x9F // keycode = 0x0800 5680 get_fdc_key (uint_fast16_t cmd)
5682 static uint8_t key_table[128] =
5685 0,
'^',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'0', 0xDF, 0xB4, 0,
'\b',
5686 '\t',
'q',
'w',
'e',
'r',
't',
'z',
'u',
'i',
'o',
'p', 0xFC,
'+', 0, 0,
'a',
5687 's',
'd',
'f',
'g',
'h',
'j',
'k',
'l', 0xF6, 0xE4,
'#',
'\r', 0,
'<',
'y',
'x',
5688 'c',
'v',
'b',
'n',
'm',
',',
'.',
'-', 0, 0, 0, 0, 0,
' ', 0, 0,
5690 0, 0xB0,
'!',
'"', 0xA7,
'$',
'%',
'&',
'/',
'(',
')',
'=',
'?',
'`', 0,
'\b',
5691 '\t',
'Q',
'W',
'E',
'R',
'T',
'Z',
'U',
'I',
'O',
'P', 0xDC,
'*', 0, 0,
'A',
5692 'S',
'D',
'F',
'G',
'H',
'J',
'K',
'L', 0xD6, 0xC4,
'\'',
'\r', 0,
'>',
'Y',
'X',
5693 'C',
'V',
'B',
'N',
'M',
';',
':',
'_', 0, 0, 0, 0, 0,
' ', 0, 0
5695 static uint_fast8_t state;
5697 uint_fast8_t key = 0;
5715 case 0x004f: key =
KEY_LEFT;
break;
5716 case 0x0050: key =
KEY_HOME;
break;
5717 case 0x0051: key =
KEY_END;
break;
5718 case 0x0053: key =
KEY_UP;
break;
5719 case 0x0054: key =
KEY_DOWN;
break;
5730 if (cmd >= 0x70 && cmd <= 0x7F)
5740 case 0x0003: key = 0xB2;
break;
5741 case 0x0008: key =
'{';
break;
5742 case 0x0009: key =
'[';
break;
5743 case 0x000A: key =
']';
break;
5744 case 0x000B: key =
'}';
break;
5745 case 0x000C: key =
'\\';
break;
5746 case 0x001C: key =
'~';
break;
5747 case 0x002D: key =
'|';
break;
5748 case 0x0034: key = 0xB5;
break;
5753 if (key_table[cmd] >=
'a' && key_table[cmd] <=
'z')
5755 key = key_table[cmd] -
'a' + 1;
5759 key = key_table[cmd];
5768 key = key_table[idx];
5780 static int analyze =
FALSE;
5781 static int list =
FALSE;
5783 static int expected_protocol;
5784 static int expected_address;
5785 static int expected_command;
5786 static int do_check_expected_values;
5791 if (! analyze && ! list)
5803 printf (
"%8.3fms ", (
double) (time_counter * 1000) / F_INTERRUPTS);
5808 uint16_t temp = (irmp_data.
command & 0x000F) + 15;
5810 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, temp=%d",
5815 if ((key >= 0x20 && key < 0x7F) || key >= 0xA0)
5817 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, asc=0x%02x, key='%c'",
5820 else if (key ==
'\r' || key ==
'\t' || key ==
KEY_ESCAPE || (key >= 0x80 && key <= 0x9F))
5822 char * p = (
char *) NULL;
5826 case '\t' : p =
"TAB";
break;
5827 case '\r' : p =
"CR";
break;
5848 case KEY_END : p =
"END";
break;
5849 case KEY_UP : p =
"UP";
break;
5856 default : p =
"<UNKNWON>";
break;
5859 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, asc=0x%02x, key=%s",
5864 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x, asc=0x%02x",
5870 printf (
"p=%2d (%s), a=0x%04x, c=0x%04x, f=0x%02x",
5874 if (do_check_expected_values)
5876 if (irmp_data.
protocol != expected_protocol ||
5877 irmp_data.
address != expected_address ||
5878 (
int)irmp_data.
command != expected_command)
5880 printf (
"\nerror 7: expected values differ: p=%2d (%s), a=0x%04x, c=0x%04x\n",
5881 expected_protocol, irmp_protocol_names[expected_protocol], expected_address, expected_command);
5885 printf (
" checked!\n");
5887 do_check_expected_values =
FALSE;
5906 int start_pulses[256];
5907 int start_pauses[256];
5911 int first_pulse =
TRUE;
5912 int first_pause =
TRUE;
5916 if (! strcmp (argv[1],
"-v"))
5920 else if (! strcmp (argv[1],
"-l"))
5924 else if (! strcmp (argv[1],
"-a"))
5928 else if (! strcmp (argv[1],
"-s"))
5932 else if (! strcmp (argv[1],
"-r"))
5938 for (i = 0; i < 256; i++)
5940 start_pulses[i] = 0;
5941 start_pauses[i] = 0;
5948 while ((ch = getchar ()) != EOF)
5950 if (ch ==
'_' || ch ==
'0')
5958 printf (
"pause: %d\n", pause);
5967 start_pauses[pause]++;
5969 first_pause =
FALSE;
5985 else if (ch == 0xaf || ch ==
'-' || ch ==
'1')
5991 printf (
"pulse: %d ", pulse);
6000 start_pulses[pulse]++;
6002 first_pulse =
FALSE;
6018 else if (ch ==
'\n')
6023 if (list && pause > 0)
6025 printf (
"pause: %d\n", pause);
6031 for (i = 0; i < (int) ((10000.0 * F_INTERRUPTS) / 10000); i++)
6045 while ((ch = getchar()) !=
'\n' && ch != EOF)
6056 puts (
"----------------------------------------------------------------------");
6060 while ((ch = getchar()) !=
'\n' && ch != EOF)
6064 if (ch ==
'[' && idx == -1)
6072 do_check_expected_values =
FALSE;
6076 expected_protocol = atoi (buf);
6078 if (expected_protocol > 0)
6087 if (sscanf (p,
"%x", &expected_address) == 1)
6089 do_check_expected_values =
TRUE;
6096 if (do_check_expected_values)
6098 do_check_expected_values =
FALSE;
6106 if (sscanf (p,
"%x", &expected_command) == 1)
6108 do_check_expected_values =
TRUE;
6115 if (do_check_expected_values)
6122 else if (idx < 1024 - 2)
6146 puts (
"-----------------------------------------------------------------------------");
#define RADIO1_1_PAUSE_LEN_MIN
#define DENON_COMMAND_OFFSET
#define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MIN
uint_fast8_t irmp_get_data(IRMP_DATA *irmp_data_p)
#define TELEFUNKEN_START_BIT_PAUSE_LEN_MIN
#define SAMSUNGAH_0_PAUSE_LEN_MAX
#define SAMSUNGAH_COMMAND_OFFSET
#define LEGO_START_BIT_PAUSE_LEN_MIN
#define MITSU_HEAVY_START_BIT_PULSE_LEN_MAX
#define MERLIN_COMMAND_OFFSET
#define SAMSUNG_START_BIT_PAUSE_LEN_MIN
#define MATSUSHITA_ADDRESS_OFFSET
#define SAMSUNGAH_PULSE_LEN_MIN
#define ORTEK_START_BIT_PULSE_LEN_MAX
#define FAN_START_BIT_PULSE_LEN_MAX
#define NIKON_COMMAND_OFFSET
#define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MIN
#define TELEFUNKEN_COMMAND_LEN
#define BANG_OLUFSEN_PULSE_LEN_MAX
#define NEC_REPEAT_START_BIT_PAUSE_LEN_MIN
#define RUWIDO_COMPLETE_DATA_LEN
#define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MIN
#define SIRCS_ADDRESS_LEN
#define NIKON_START_BIT_PAUSE_LEN_MAX
#define PENTAX_COMMAND_LEN
#define KATHREIN_START_BIT_PULSE_LEN_MIN
#define MITSU_HEAVY_COMMAND_LEN
#define SAMSUNG_0_PAUSE_LEN_MIN
#define BOSE_PULSE_LEN_MAX
#define RC5_COMPLETE_DATA_LEN
#define SIRCS_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MIN
#define FAN_ADDRESS_OFFSET
#define NEC42_COMMAND_OFFSET
#define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MIN
#define RECS80EXT_START_BIT_PULSE_LEN_MIN
#define SAMSUNG48_COMMAND_OFFSET
#define PANASONIC_0_PAUSE_LEN_MIN
#define KATHREIN_SYNC_BIT_PAUSE_LEN_MIN
#define RCMM32_START_BIT_PULSE_LEN_MIN
#define IRMP16_ADDRESS_OFFSET
#define KATHREIN_COMMAND_LEN
#define IRMP16_START_BIT_PULSE_LEN_MAX
#define KATHREIN_ADDRESS_OFFSET
#define NOKIA_COMPLETE_DATA_LEN
#define RCMM32_BIT_10_PAUSE_LEN_MIN
#define NEC42_COMPLETE_DATA_LEN
#define JVC_REPEAT_START_BIT_PAUSE_LEN_MAX
#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MAX
#define RCII_START_BIT_PAUSE_LEN_MIN
#define NUBERT_START_BIT_PAUSE_LEN_MAX
#define NEC_ADDRESS_OFFSET
#define PENTAX_1_PAUSE_LEN_MAX
#define NETBOX_PAUSE_REST_LEN
#define METZ_1_PAUSE_LEN_MAX
#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MAX
#define KASEIKYO_START_BIT_PAUSE_LEN_MAX
#define KASEIKYO_START_BIT_PAUSE_LEN_MIN
#define KASEIKYO_STOP_BIT
#define NUBERT_START_BIT_PULSE_LEN_MAX
#define A1TVBOX_BIT_PULSE_LEN_MAX
#define NIKON_ADDRESS_OFFSET
#define DENON_AUTO_REPETITION_PAUSE_LEN
#define BANG_OLUFSEN_PULSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MIN
#define SAMSUNG_COMPLETE_DATA_LEN
#define MITSU_HEAVY_FLAGS
#define RCMM32_BIT_10_PAUSE_LEN_MAX
#define THOMSON_0_PAUSE_LEN_MAX
#define NEC_COMPLETE_DATA_LEN
#define GRUNDIG_COMMAND_LEN
#define GRUNDIG_NOKIA_IR60_FLAGS
#define KATHREIN_START_BIT_PAUSE_LEN_MIN
#define NETBOX_START_BIT_PULSE_LEN_MAX
#define RC6_COMPLETE_DATA_LEN_SHORT
#define RCMM32_COMMAND_OFFSET
#define ROOMBA_0_PULSE_LEN_MAX
#define IRMP_BANG_OLUFSEN_PROTOCOL
#define RECS80EXT_COMMAND_LEN
#define MITSU_HEAVY_PULSE_LEN_MIN
#define SAMSUNGAH_ADDRESS_LEN
#define THOMSON_COMPLETE_DATA_LEN
#define MATSUSHITA_COMPLETE_DATA_LEN
#define RCCAR_COMMAND_LEN
#define A1TVBOX_START_BIT_PULSE_LEN_MAX
#define IRMP16_COMPLETE_DATA_LEN
#define IRMP_FAN_PROTOCOL
#define IRMP16_START_BIT_PAUSE_LEN_MIN
#define IRMP_JVC_PROTOCOL
#define MITSU_HEAVY_COMMAND_OFFSET
#define IRMP_PANASONIC_PROTOCOL
#define RADIO1_1_PAUSE_LEN_MAX
#define RCMM32_COMMAND_LEN
#define A1TVBOX_COMMAND_LEN
#define IRMP_LEGO_PROTOCOL
#define RCMM32_COMPLETE_DATA_LEN
#define RECS80_0_PAUSE_LEN_MAX
#define ROOMBA_COMMAND_OFFSET
#define PANASONIC_PULSE_LEN_MIN
#define SAMSUNG_START_BIT_PAUSE_LEN_MAX
#define RUWIDO_ADDRESS_LEN
#define METZ_PULSE_LEN_MAX
#define IRMP_MITSU_HEAVY_PROTOCOL
#define BOSE_PULSE_LEN_MIN
#define RECS80_ADDRESS_OFFSET
#define PENTAX_COMPLETE_DATA_LEN
#define IRMP_RC5_PROTOCOL
#define IRMP_PARAM_FLAG_IS_SERIAL
#define RCCAR_START_BIT_PULSE_LEN_MAX
#define A1TVBOX_ADDRESS_LEN
#define GRUNDIG_NOKIA_IR60_BIT_LEN_MIN
#define RC6_START_BIT_PAUSE_LEN_MAX
#define RCCAR_1_PAUSE_LEN_MIN
#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MIN
#define IRMP16_0_PAUSE_LEN_MIN
#define IRMP16_PULSE_LEN_MAX
#define DENON_0_PAUSE_LEN_MIN
#define SPEAKER_1_PAUSE_LEN_MIN
#define ROOMBA_1_PAUSE_LEN_EXACT
#define RC6_START_BIT_PULSE_LEN_MIN
#define FDC_START_BIT_PULSE_LEN_MAX
#define RECS80_START_BIT_PULSE_LEN_MIN
#define SAMSUNG48_COMPLETE_DATA_LEN
#define RADIO1_0_PAUSE_LEN_MIN
#define NUBERT_1_PULSE_LEN_MAX
#define THOMSON_PULSE_LEN_MAX
#define ROOMBA_1_PAUSE_LEN_MAX
#define SPEAKER_0_PULSE_LEN_MAX
#define LEGO_ADDRESS_OFFSET
#define IRMP_RECS80_PROTOCOL
#define VINCENT_PULSE_LEN_MAX
#define VINCENT_START_BIT_PULSE_LEN_MAX
#define BANG_OLUFSEN_COMMAND_OFFSET
#define IRMP_LGAIR_PROTOCOL
#define NEC_COMMAND_OFFSET
#define AUTO_FRAME_REPETITION_LEN
#define ACP24_COMMAND_OFFSET
#define SAMSUNGAH_ADDRESS_OFFSET
#define SPEAKER_0_PAUSE_LEN_MAX
#define MATSUSHITA_STOP_BIT
#define RECS80_COMMAND_OFFSET
#define VINCENT_PULSE_LEN_MIN
#define IRMP16_PULSE_LEN_MIN
#define BANG_OLUFSEN_1_PAUSE_LEN_MAX
#define KATHREIN_COMPLETE_DATA_LEN
#define PANASONIC_PULSE_LEN_MAX
#define LGAIR_COMMAND_LEN
#define RADIO1_START_BIT_PULSE_LEN_MIN
#define RCCAR_COMPLETE_DATA_LEN
#define KASEIKYO_0_PAUSE_LEN_MIN
#define STATE_RIGHT_SHIFT
#define KATHREIN_1_PULSE_LEN_MAX
#define NEC_PULSE_LEN_MIN
#define RADIO1_ADDRESS_LEN
#define FDC_START_BIT_PAUSE_LEN_MAX
#define PANASONIC_START_BIT_PULSE_LEN_MIN
#define DENON_COMPLETE_DATA_LEN
#define THOMSON_ADDRESS_LEN
#define MITSU_HEAVY_0_PAUSE_LEN_MIN
#define IRMP16_ADDRESS_LEN
#define A1TVBOX_START_BIT_PAUSE_LEN_MAX
#define IRMP16_1_PAUSE_LEN_MAX
#define SIRCS_0_PULSE_LEN_MIN
#define RECS80EXT_PULSE_LEN_MAX
#define IRMP_FLAG_REPETITION
#define ORTEK_BIT_PAUSE_LEN_MAX
#define NETBOX_ADDRESS_LEN
#define A1TVBOX_COMMAND_OFFSET
#define RECS80_1_PAUSE_LEN_MAX
#define ACP24_PULSE_LEN_MAX
#define RCCAR_START_BIT_PAUSE_LEN_MIN
#define ROOMBA_0_PAUSE_LEN_MIN
#define RADIO1_COMPLETE_DATA_LEN
#define IRMP16_START_BIT_PAUSE_LEN_MAX
#define MERLIN_ADDRESS_LEN
#define ORTEK_BIT_PULSE_LEN_MIN
#define IRMP_RUWIDO_PROTOCOL
#define IRMP_ACP24_PROTOCOL
#define SIEMENS_ADDRESS_OFFSET
#define RCMM32_ADDRESS_LEN
#define GREE_1_PAUSE_LEN_MAX
#define RUWIDO_COMMAND_OFFSET
#define SAMSUNG_ADDRESS_OFFSET
#define ACP24_COMMAND_LEN
#define PENTAX_START_BIT_PAUSE_LEN_MAX
#define NIKON_1_PAUSE_LEN_MIN
#define METZ_PULSE_LEN_MIN
#define ROOMBA_START_BIT_PAUSE_LEN_MIN
#define SAMSUNG_1_PAUSE_LEN_MAX
#define NETBOX_ADDRESS_OFFSET
#define SIEMENS_COMPLETE_DATA_LEN
#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MIN
#define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MAX
#define NEC_0_PAUSE_LEN_MIN
#define FDC_PULSE_LEN_MIN
#define TELEFUNKEN_0_PAUSE_LEN_MIN
#define RECS80EXT_0_PAUSE_LEN_MAX
#define FDC_1_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN
#define IRMP_SAMSUNG48_PROTOCOL
#define IRMP_FDC_PROTOCOL
#define KASEIKYO_1_PAUSE_LEN_MAX
#define RADIO1_START_BIT_PULSE_LEN_MAX
#define ACP24_START_BIT_PAUSE_LEN_MIN
#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MIN
#define ORTEK_START_BIT_PAUSE_LEN_MAX
#define GREE_PULSE_LEN_MAX
#define SPEAKER_1_PULSE_LEN_MIN
#define LEGO_1_PAUSE_LEN_MIN
#define IRMP_SAMSUNG32_PROTOCOL
#define LEGO_START_BIT_PULSE_LEN_MIN
#define PENTAX_START_BIT_PULSE_LEN_MIN
#define IRMP_SPEAKER_PROTOCOL
#define BANG_OLUFSEN_STOP_BIT
#define METZ_START_BIT_PULSE_LEN_MIN
#define RCMM32_BIT_01_PAUSE_LEN_MAX
#define IRMP_RADIO1_PROTOCOL
#define SPEAKER_0_PAUSE_LEN_MIN
#define SPEAKER_COMPLETE_DATA_LEN
#define NOKIA_ADDRESS_LEN
#define RECS80_ADDRESS_LEN
#define VINCENT_1_PAUSE_LEN_MIN
#define RCMM32_BIT_PULSE_LEN_MIN
#define KASEIKYO_ADDRESS_LEN
#define LEGO_START_BIT_PAUSE_LEN_MAX
#define GRUNDIG_COMPLETE_DATA_LEN
#define SIRCS_START_BIT_PAUSE_LEN_MAX
#define KATHREIN_STOP_BIT
#define RC6_COMMAND_OFFSET
#define SIEMENS_COMMAND_OFFSET
#define FAN_0_PULSE_LEN_MAX
#define S100_START_BIT_LEN_MAX
#define DENON_ADDRESS_LEN
#define IRMP_IRMP16_PROTOCOL
#define NIKON_PULSE_LEN_MIN
#define IRMP_GREE_PROTOCOL
int main(int argc, char **argv)
#define KATHREIN_1_PAUSE_LEN_MIN
#define KATHREIN_COMMAND_OFFSET
#define METZ_START_BIT_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MAX
#define GRUNDIG_NOKIA_IR60_PRE_PAUSE_LEN_MAX
#define BANG_OLUFSEN_FLAGS
#define NUBERT_START_BIT_PAUSE_LEN_MIN
#define SAMSUNG_0_PAUSE_LEN_MAX
#define RECS80_START_BIT_PAUSE_LEN_MAX
#define SAMSUNG_1_PAUSE_LEN_MIN
#define KASEIKYO_1_PAUSE_LEN_MIN
#define LEGO_0_PAUSE_LEN_MAX
#define BANG_OLUFSEN_0_PAUSE_LEN_MIN
#define IRMP_VINCENT_PROTOCOL
#define MATSUSHITA_START_BIT_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT4_PULSE_LEN_MIN
#define TELEFUNKEN_1_PAUSE_LEN_MAX
#define VINCENT_START_BIT_PAUSE_LEN_MIN
#define BANG_OLUFSEN_ADDRESS_OFFSET
#define RC6_ADDRESS_OFFSET
#define LEGO_1_PAUSE_LEN_MAX
#define RECS80_PULSE_LEN_MIN
#define IRMP_RCMM24_PROTOCOL
#define RCCAR_START_BIT_PULSE_LEN_MIN
#define RECS80_COMPLETE_DATA_LEN
#define KATHREIN_START_BIT_PULSE_LEN_MAX
#define RCCAR_1_PAUSE_LEN_MAX
#define TELEFUNKEN_ADDRESS_OFFSET
#define MITSU_HEAVY_ADDRESS_LEN
#define KATHREIN_0_PULSE_LEN_MAX
#define RCII_START_BIT_PULSE_LEN_MIN
#define ORTEK_ADDRESS_LEN
#define RC6_START_BIT_PAUSE_LEN_MIN
#define BOSE_COMMAND_OFFSET
#define RCCAR_0_PAUSE_LEN_MIN
#define NIKON_COMPLETE_DATA_LEN
#define MATSUSHITA_PULSE_LEN_MAX
#define NEC_REPEAT_START_BIT_PAUSE_LEN_MAX
#define KASEIKYO_COMMAND_LEN
#define KASEIKYO_PULSE_LEN_MAX
#define SPEAKER_0_PULSE_LEN_MIN
#define MERLIN_COMMAND_LEN
#define JVC_REPEAT_START_BIT_PAUSE_LEN_MIN
#define IRMP16_COMMAND_LEN
#define BANG_OLUFSEN_COMPLETE_DATA_LEN
#define BANG_OLUFSEN_COMMAND_LEN
#define ORTEK_COMMAND_OFFSET
#define KATHREIN_1_PAUSE_LEN_MAX
#define MERLIN_BIT_PULSE_LEN_MAX
#define KATHREIN_0_PAUSE_LEN_MAX
#define KATHREIN_0_PULSE_LEN_MIN
#define RCCAR_0_PAUSE_LEN_MAX
#define IRMP_RCMM12_PROTOCOL
#define RECS80EXT_ADDRESS_LEN
#define IRMP_NOKIA_PROTOCOL
#define PANASONIC_ADDRESS_OFFSET
#define NIKON_START_BIT_PULSE_LEN_MAX
#define BOSE_0_PAUSE_LEN_MIN
#define IRMP_S100_PROTOCOL
#define RADIO1_COMMAND_OFFSET
#define NUBERT_0_PULSE_LEN_MAX
#define SIRCS_START_BIT_PULSE_LEN_MAX
#define RADIO1_START_BIT_PAUSE_LEN_MIN
#define IRMP16_0_PAUSE_LEN_MAX
#define FDC_0_PAUSE_LEN_MIN
#define VINCENT_COMMAND_LEN
#define ANALYZE_ONLY_NORMAL_PUTCHAR(a)
#define ROOMBA_0_PULSE_LEN_MIN
#define MATSUSHITA_1_PAUSE_LEN_MIN
#define PANASONIC_1_PAUSE_LEN_MAX
#define SAMSUNGAH_START_BIT_PAUSE_LEN_MIN
#define NUBERT_0_PAUSE_LEN_MIN
#define NEC42_ADDRESS_OFFSET
#define RADIO1_START_BIT_PAUSE_LEN_MAX
#define PENTAX_COMMAND_OFFSET
#define RC6_START_BIT_PULSE_LEN_MAX
#define SIRCS_START_BIT_PULSE_LEN_MIN
#define SPEAKER_ADDRESS_LEN
#define IRMP_NIKON_PROTOCOL
#define SAMSUNG_PULSE_LEN_MIN
#define KASEIKYO_ADDRESS_OFFSET
#define RCCAR_ADDRESS_OFFSET
#define GRUNDIG_NOKIA_IR60_START_BIT_LEN_MAX
#define RADIO1_COMMAND_LEN
#define NIKON_START_BIT_PULSE_LEN_MIN
#define ACP24_PULSE_LEN_MIN
#define PENTAX_PULSE_LEN_MIN
#define VINCENT_COMPLETE_DATA_LEN
#define RC5_START_BIT_LEN_MAX
#define FAN_COMMAND_OFFSET
#define RCII_ADDRESS_OFFSET
#define SIEMENS_OR_RUWIDO_START_BIT_PAUSE_LEN_MIN
#define FDC_0_PAUSE_LEN_MAX
#define ORTEK_ADDRESS_OFFSET
#define RUWIDO_ADDRESS_OFFSET
#define IRMP_SIEMENS_PROTOCOL
#define METZ_START_BIT_PULSE_LEN_MAX
#define ORTEK_COMPLETE_DATA_LEN
#define MERLIN_START_BIT_PULSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT3_PULSE_LEN_MAX
#define ROOMBA_1_PAUSE_LEN_MIN
#define PANASONIC_COMPLETE_DATA_LEN
#define PANASONIC_1_PAUSE_LEN_MIN
#define VINCENT_ADDRESS_OFFSET
#define SIRCS_0_PULSE_LEN_MAX
#define MERLIN_START_BIT_PAUSE_LEN_MIN
#define THOMSON_ADDRESS_OFFSET
#define PANASONIC_START_BIT_PULSE_LEN_MAX
#define A1TVBOX_BIT_PULSE_LEN_MIN
#define DENON_PULSE_LEN_MAX
#define IRMP_KEY_REPETITION_LEN
#define SAMSUNG32_COMMAND_OFFSET
#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MAX
#define SIRCS_START_BIT_PAUSE_LEN_MIN
#define GREE_0_PAUSE_LEN_MIN
#define ACP24_0_PAUSE_LEN_MIN
#define RECS80EXT_COMPLETE_DATA_LEN
#define SAMSUNGAH_PULSE_LEN_MAX
#define BANG_OLUFSEN_1_PAUSE_LEN_MIN
#define LEGO_0_PAUSE_LEN_MIN
#define SAMSUNG_START_BIT_PULSE_LEN_MAX
#define RCMM32_BIT_01_PAUSE_LEN_MIN
#define RC6_BIT_PAUSE_LEN_MAX
#define BOSE_COMPLETE_DATA_LEN
#define FAN_0_PAUSE_LEN_MAX
#define SAMSUNGAH_START_BIT_PAUSE_LEN_MAX
#define A1TVBOX_START_BIT_PAUSE_LEN_MIN
#define METZ_0_PAUSE_LEN_MIN
#define FAN_COMPLETE_DATA_LEN
#define LGAIR_ADDRESS_OFFSET
#define RCMM32_ADDRESS_OFFSET
#define PANASONIC_COMMAND_OFFSET
#define NOKIA_ADDRESS_OFFSET
#define RECS80EXT_PULSE_LEN_MIN
#define TELEFUNKEN_STOP_BIT
#define SAMSUNG_START_BIT_PULSE_LEN_MIN
#define MATSUSHITA_PULSE_LEN_MIN
#define VINCENT_ADDRESS_LEN
#define MERLIN_ADDRESS_OFFSET
#define BOSE_0_PAUSE_LEN_MAX
#define DENON_PULSE_LEN_MIN
#define RC6_BIT_PULSE_LEN_MAX
#define PENTAX_0_PAUSE_LEN_MIN
#define NEC42_ADDRESS_LEN
#define SIRCS_COMMAND_OFFSET
#define ROOMBA_COMPLETE_DATA_LEN
#define SPEAKER_COMMAND_OFFSET
#define MERLIN_BIT_PAUSE_LEN_MAX
#define GREE_START_BIT_PAUSE_LEN_MIN
#define LGAIR_COMPLETE_DATA_LEN
#define RECS80EXT_1_PAUSE_LEN_MIN
#define ACP24_START_BIT_PULSE_LEN_MIN
#define IRMP_ROOMBA_PROTOCOL
#define NEC42_COMMAND_LEN
#define TELEFUNKEN_START_BIT_PULSE_LEN_MAX
#define LEGO_COMPLETE_DATA_LEN
#define GRUNDIG_ADDRESS_LEN
#define IRMP_PENTAX_PROTOCOL
#define GREE_ADDRESS_OFFSET
#define ROOMBA_START_BIT_PAUSE_LEN_MAX
#define BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX
#define KASEIKYO_START_BIT_PULSE_LEN_MAX
#define ANALYZE_PUTCHAR(a)
#define PENTAX_0_PAUSE_LEN_MAX
#define KASEIKYO_COMMAND_OFFSET
#define FAN_1_PULSE_LEN_MIN
#define IRMP16_COMMAND_OFFSET
#define FDC_START_BIT_PULSE_LEN_MIN
#define RECS80EXT_START_BIT_PULSE_LEN_MAX
#define KASEIKYO_START_BIT_PULSE_LEN_MIN
#define A1TVBOX_BIT_PAUSE_LEN_MAX
#define IR60_COMMAND_OFFSET
#define RCMM32_BIT_11_PAUSE_LEN_MIN
#define IRMP_RECS80EXT_PROTOCOL
#define MATSUSHITA_COMMAND_OFFSET
#define NETBOX_COMPLETE_DATA_LEN
#define SAMSUNGAH_STOP_BIT
#define SIEMENS_OR_RUWIDO_STOP_BIT
#define RUWIDO_COMMAND_LEN
#define SAMSUNG_COMMAND_OFFSET
#define SPEAKER_START_BIT_PAUSE_LEN_MIN
#define SIEMENS_COMMAND_LEN
#define PANASONIC_0_PAUSE_LEN_MAX
#define FDC_1_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT1_PULSE_LEN_MAX
#define ACP24_START_BIT_PAUSE_LEN_MAX
#define PANASONIC_STOP_BIT
#define PENTAX_1_PAUSE_LEN_MIN
#define IRMP_NUBERT_PROTOCOL
#define GREE_COMMAND_OFFSET
#define KATHREIN_SYNC_BIT_PAUSE_LEN_MAX
#define IRMP_SUPPORT_SERIAL
uint_fast8_t irmp_ISR(void)
#define NIKON_0_PAUSE_LEN_MAX
#define TELEFUNKEN_COMPLETE_DATA_LEN
#define MITSU_HEAVY_ADDRESS_OFFSET
#define NUBERT_ADDRESS_LEN
#define BANG_OLUFSEN_START_BIT2_PAUSE_LEN_MAX
#define NUBERT_1_PAUSE_LEN_MAX
#define BOSE_START_BIT_PAUSE_LEN_MAX
#define NOKIA_COMMAND_OFFSET
#define PENTAX_ADDRESS_OFFSET
#define SAMSUNG_ID_OFFSET
#define RCCAR_PULSE_LEN_MIN
#define NEC_PULSE_LEN_MAX
#define NEC_START_BIT_PAUSE_LEN_MIN
#define IRMP_NEC42_PROTOCOL
#define ORTEK_COMMAND_LEN
#define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MAX
#define PANASONIC_START_BIT_PAUSE_LEN_MAX
#define TELEFUNKEN_START_BIT_PULSE_LEN_MIN
#define RADIO1_ADDRESS_OFFSET
#define TELEFUNKEN_1_PAUSE_LEN_MIN
#define RCMM32_BIT_11_PAUSE_LEN_MAX
#define RECS80EXT_ADDRESS_OFFSET
#define MITSU_HEAVY_0_PAUSE_LEN_MAX
#define SPEAKER_COMMAND_LEN
#define LEGO_PULSE_LEN_MAX
#define KATHREIN_0_PAUSE_LEN_MIN
#define SPEAKER_1_PAUSE_LEN_MAX
#define ACP24_0_PAUSE_LEN_MAX
#define NETBOX_PULSE_REST_LEN
#define IRMP_KASEIKYO_PROTOCOL
#define SIEMENS_OR_RUWIDO_LSB
#define MITSU_HEAVY_START_BIT_PULSE_LEN_MIN
#define NIKON_START_BIT_PAUSE_LEN_MIN
#define NEC_FRAME_REPEAT_PAUSE_LEN_MAX
#define RCII_COMPLETE_DATA_LEN
#define GRUNDIG_NOKIA_IR60_LSB
#define IRMP_RCMM32_PROTOCOL
#define ACP24_COMPLETE_DATA_LEN
#define IRMP16_1_PAUSE_LEN_MIN
#define VINCENT_1_PAUSE_LEN_MAX
#define KATHREIN_START_BIT_PAUSE_LEN_MAX
#define SIRCS_MINIMUM_DATA_LEN
#define ACP24_1_PAUSE_LEN_MIN
#define IRMP_RC6_PROTOCOL
#define SPEAKER_START_BIT_PULSE_LEN_MIN
#define TELEFUNKEN_PULSE_LEN_MAX
#define THOMSON_COMMAND_OFFSET
#define PANASONIC_START_BIT_PAUSE_LEN_MIN
#define NIKON_0_PAUSE_LEN_MIN
#define FAN_0_PAUSE_LEN_MIN
#define FAN_1_PULSE_LEN_MAX
#define IRMP_SUPPORT_MANCHESTER
#define A1TVBOX_COMPLETE_DATA_LEN
#define PENTAX_START_BIT_PULSE_LEN_MAX
#define NUBERT_1_PULSE_LEN_MIN
#define ROOMBA_1_PULSE_LEN_MIN
#define IRMP_PARAM_FLAG_IS_MANCHESTER
#define ORTEK_START_BIT_PULSE_LEN_MIN
#define RCII_COMMAND_OFFSET
#define KASEIKYO_COMPLETE_DATA_LEN
#define ROOMBA_0_PAUSE_LEN_MAX
#define SIRCS_1_PULSE_LEN_MAX
#define KASEIKYO_PULSE_LEN_MIN
#define NIKON_PULSE_LEN_MAX
#define SAMSUNG32_COMMAND_LEN
#define RC6_TOGGLE_BIT_LEN_MIN
#define DENON_0_PAUSE_LEN_MAX
#define FDC_COMPLETE_DATA_LEN
#define PANASONIC_COMMAND_LEN
#define RCMM32_BIT_PULSE_LEN_MAX
#define RADIO1_0_PULSE_LEN_MIN
#define METZ_COMPLETE_DATA_LEN
#define SPEAKER_START_BIT_PULSE_LEN_MAX
#define NEC_1_PAUSE_LEN_MIN
#define SIEMENS_ADDRESS_LEN
#define S100_COMMAND_OFFSET
#define BOSE_START_BIT_PULSE_LEN_MAX
#define PARITY_CHECK_FAILED
#define RECS80_START_BIT_PULSE_LEN_MAX
#define NOKIA_COMMAND_LEN
#define LEGO_COMMAND_OFFSET
#define SAMSUNG_PULSE_LEN_MAX
#define MITSU_HEAVY_PULSE_LEN_MAX
#define IRMP_RC6A_PROTOCOL
#define ACP24_START_BIT_PULSE_LEN_MAX
#define MERLIN_BIT_PULSE_LEN_MIN
#define FAN_0_PULSE_LEN_MIN
#define SAMSUNGAH_1_PAUSE_LEN_MIN
#define SPEAKER_ADDRESS_OFFSET
#define RECS80EXT_START_BIT_PAUSE_LEN_MIN
#define THOMSON_COMMAND_LEN
#define IRMP_MATSUSHITA_PROTOCOL
#define NEC_START_BIT_PULSE_LEN_MIN
#define RC5_COMMAND_OFFSET
#define TELEFUNKEN_START_BIT_PAUSE_LEN_MAX
#define IRMP16_START_BIT_PULSE_LEN_MIN
#define IRMP_KATHREIN_PROTOCOL
#define MATSUSHITA_COMMAND_LEN
#define ROOMBA_1_PULSE_LEN_MAX
#define FDC_PULSE_LEN_MAX
#define VINCENT_START_BIT_PULSE_LEN_MIN
#define RCCAR_COMMAND_OFFSET
#define RADIO1_0_PAUSE_LEN_MAX
#define VINCENT_0_PAUSE_LEN_MAX
#define METZ_COMMAND_OFFSET
#define DENON_COMMAND_LEN
#define JVC_START_BIT_PULSE_LEN_MIN
#define SAMSUNG_ADDRESS_LEN
#define SAMSUNGAH_COMPLETE_DATA_LEN
#define IRMP_BOSE_PROTOCOL
#define JVC_START_BIT_PULSE_LEN_MAX
#define IRMP_DENON_PROTOCOL
#define IRMP_SAMSUNGAH_PROTOCOL
#define SAMSUNGAH_START_BIT_PULSE_LEN_MIN
#define SIRCS_COMMAND_LEN
#define SAMSUNG48_COMMAND_LEN
#define LEGO_PULSE_LEN_MIN
#define IRMP_APPLE_PROTOCOL
#define FAN_1_PAUSE_LEN_MAX
#define SIRCS_1_PULSE_LEN_MIN
#define RC6_TOGGLE_BIT_LEN_MAX
#define TELEFUNKEN_0_PAUSE_LEN_MAX
#define MITSU_HEAVY_1_PAUSE_LEN_MIN
#define METZ_1_PAUSE_LEN_MIN
#define NUBERT_COMMAND_LEN
#define ORTEK_START_BIT_PAUSE_LEN_MIN
#define LEGO_START_BIT_PULSE_LEN_MAX
#define RCMM32_START_BIT_PAUSE_LEN_MIN
#define MITSU_HEAVY_COMPLETE_DATA_LEN
#define BANG_OLUFSEN_START_BIT1_PAUSE_LEN_MIN
#define NIKON_1_PAUSE_LEN_MAX
#define RC6_COMPLETE_DATA_LEN_LONG
#define S100_ADDRESS_OFFSET
#define ROOMBA_START_BIT_PULSE_LEN_MIN
#define IRMP_TELEFUNKEN_PROTOCOL
#define IRMP_GRUNDIG_PROTOCOL
#define ACP24_ADDRESS_LEN
#define IRMP_PARAM_FLAG_1ST_PULSE_IS_1
#define TELEFUNKEN_COMMAND_OFFSET
#define BOSE_ADDRESS_OFFSET
#define GREE_1_PAUSE_LEN_MIN
#define IRMP_NETBOX_PROTOCOL
#define VINCENT_START_BIT_PAUSE_LEN_MAX
#define MATSUSHITA_START_BIT_PULSE_LEN_MIN
#define ROOMBA_0_PAUSE_LEN
#define FAN_START_BIT_PULSE_LEN_MIN
#define RECS80_1_PAUSE_LEN_MIN
#define RADIO1_1_PULSE_LEN_MAX
#define GREE_PULSE_LEN_MIN
#define NUBERT_START_BIT_PULSE_LEN_MIN
#define VINCENT_0_PAUSE_LEN_MIN
#define ANALYZE_NEWLINE()
#define RCMM32_START_BIT_PAUSE_LEN_MAX
#define IRMP_TECHNICS_PROTOCOL
#define BOSE_1_PAUSE_LEN_MIN
#define FAN_1_PAUSE_LEN_MIN
#define RC6_BIT_PULSE_LEN_MIN
#define KATHREIN_1_PULSE_LEN_MIN
#define METZ_START_BIT_PAUSE_LEN_MIN
#define NEC_START_BIT_PULSE_LEN_MAX
#define SPEAKER_START_BIT_PAUSE_LEN_MAX
#define NETBOX_START_BIT_PULSE_LEN_MIN
#define IRMP_A1TVBOX_PROTOCOL
#define RECS80_0_PAUSE_LEN_MIN
#define GREE_START_BIT_PAUSE_LEN_MAX
#define NUBERT_0_PAUSE_LEN_MAX
#define GRUNDIG_COMMAND_OFFSET
#define BOSE_START_BIT_PULSE_LEN_MIN
#define FDC_COMMAND_OFFSET
#define GREE_START_BIT_PULSE_LEN_MIN
#define A1TVBOX_BIT_PAUSE_LEN_MIN
#define NIKON_ADDRESS_LEN
#define IRMP_RCCAR_PROTOCOL
#define IRMP_METZ_PROTOCOL
#define MERLIN_START_BIT_PAUSE_LEN_MAX
#define ANALYZE_PRINTF(...)
#define RCCAR_ADDRESS_LEN
#define DENON_1_PAUSE_LEN_MIN
void print_spectrum(char *text, int *buf, int is_pulse)
#define GREE_START_BIT_PULSE_LEN_MAX
#define RCII_START_BIT_PULSE_LEN_MAX
#define TELEFUNKEN_PULSE_LEN_MIN
#define RECS80EXT_0_PAUSE_LEN_MIN
#define NETBOX_COMMAND_LEN
#define RCMM32_START_BIT_PULSE_LEN_MAX
#define NUBERT_ADDRESS_OFFSET
#define GREE_COMPLETE_DATA_LEN
#define MATSUSHITA_0_PAUSE_LEN_MAX
#define BOSE_START_BIT_PAUSE_LEN_MIN
#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MIN
#define SAMSUNGAH_0_PAUSE_LEN_MIN
#define SIRCS_COMPLETE_DATA_LEN
#define NIKON_COMMAND_LEN
#define GRUNDIG_ADDRESS_OFFSET
#define PENTAX_PULSE_LEN_MAX
#define ACP24_1_PAUSE_LEN_MAX
#define DENON_ADDRESS_OFFSET
#define THOMSON_1_PAUSE_LEN_MIN
#define RECS80EXT_START_BIT_PAUSE_LEN_MAX
#define MERLIN_START_BIT_PULSE_LEN_MIN
#define THOMSON_1_PAUSE_LEN_MAX
#define ORTEK_BIT_PAUSE_LEN_MIN
#define NEC_START_BIT_PAUSE_LEN_MAX
#define IRMP_SIRCS_PROTOCOL
#define PENTAX_ADDRESS_LEN
#define NETBOX_START_BIT_PAUSE_LEN_MIN
#define ORTEK_BIT_PULSE_LEN_MAX
#define IRMP_THOMSON_PROTOCOL
#define A1TVBOX_ADDRESS_OFFSET
#define RECS80_COMMAND_LEN
#define FDC_START_BIT_PAUSE_LEN_MIN
#define SIRCS_ADDRESS_OFFSET
#define SAMSUNGAH_COMMAND_LEN
#define IRMP_IR60_PROTOCOL
#define ROOMBA_ADDRESS_OFFSET
#define SPEAKER_1_PULSE_LEN_MAX
#define ROOMBA_ADDRESS_LEN
#define A1TVBOX_START_BIT_PULSE_LEN_MIN
#define FDC_ADDRESS_OFFSET
#define IRMP_ORTEK_PROTOCOL
#define NUBERT_COMPLETE_DATA_LEN
#define NUBERT_1_PAUSE_LEN_MIN
#define BANG_OLUFSEN_ADDRESS_LEN
#define MERLIN_BIT_PAUSE_LEN_MIN
#define BANG_OLUFSEN_START_BIT2_PULSE_LEN_MAX
#define MERLIN_COMPLETE_DATA_LEN
#define THOMSON_0_PAUSE_LEN_MIN
#define GRUNDIG_NOKIA_IR60_STOP_BIT
#define IR60_COMPLETE_DATA_LEN
#define SAMSUNG_COMMAND_LEN
#define MATSUSHITA_START_BIT_PULSE_LEN_MAX
#define SAMSUNGAH_1_PAUSE_LEN_MAX
#define BOSE_1_PAUSE_LEN_MAX
#define MATSUSHITA_1_PAUSE_LEN_MAX
#define THOMSON_PULSE_LEN_MIN
#define KATHREIN_ADDRESS_LEN
#define MITSU_HEAVY_1_PAUSE_LEN_MAX
#define RADIO1_1_PULSE_LEN_MIN
#define RECS80_PULSE_LEN_MAX
#define MATSUSHITA_ADDRESS_LEN
#define RADIO1_0_PULSE_LEN_MAX
#define ROOMBA_START_BIT_PULSE_LEN_MAX
#define SIEMENS_OR_RUWIDO_BIT_PAUSE_LEN_MAX
#define MATSUSHITA_0_PAUSE_LEN_MIN
#define FAN_START_BIT_PAUSE_LEN_MIN
#define SIEMENS_OR_RUWIDO_START_BIT_PULSE_LEN_MIN
#define MATSUSHITA_START_BIT_PAUSE_LEN_MAX
#define RC5_ADDRESS_OFFSET
#define VINCENT_COMMAND_OFFSET
#define TELEFUNKEN_ADDRESS_LEN
#define PANASONIC_ADDRESS_LEN
#define BANG_OLUFSEN_R_PAUSE_LEN_MIN
#define RECS80EXT_STOP_BIT
#define BANG_OLUFSEN_R_PAUSE_LEN_MAX
#define IRMP_NEC_PROTOCOL
#define IRMP_SAMSUNG_PROTOCOL
#define RCCAR_PULSE_LEN_MAX
#define MITSU_HEAVY_STOP_BIT
#define RC5_START_BIT_LEN_MIN
#define RECS80EXT_COMMAND_OFFSET
#define S100_COMPLETE_DATA_LEN
#define GREE_0_PAUSE_LEN_MAX
#define IRMP_UNKNOWN_PROTOCOL
#define SAMSUNGAH_START_BIT_PULSE_LEN_MAX
#define S100_START_BIT_LEN_MIN
#define IRMP_RCII_PROTOCOL
#define RECS80_START_BIT_PAUSE_LEN_MIN
#define NETBOX_START_BIT_PAUSE_LEN_MAX
#define NUBERT_COMMAND_OFFSET
#define RCCAR_START_BIT_PAUSE_LEN_MAX
#define LGAIR_COMMAND_OFFSET
#define NUBERT_0_PULSE_LEN_MIN
#define IR60_ADDRESS_OFFSET
#define GRUNDIG_NOKIA_IR60_BIT_LEN_MAX
#define NEC_0_PAUSE_LEN_MAX
#define IRMP_MERLIN_PROTOCOL
#define RECS80EXT_1_PAUSE_LEN_MAX
#define SIEMENS_OR_RUWIDO_FLAGS
#define DENON_1_PAUSE_LEN_MAX
#define JVC_START_BIT_PULSE_TIME
#define RCII_START_BIT_PAUSE_LEN_MAX
#define ANALYZE_ONLY_NORMAL_PRINTF(...)
#define PENTAX_START_BIT_PAUSE_LEN_MIN
#define KASEIKYO_0_PAUSE_LEN_MAX
#define NETBOX_COMMAND_OFFSET
#define SIEMENS_OR_RUWIDO_BIT_PULSE_LEN_MAX
#define METZ_0_PAUSE_LEN_MAX
#define FAN_START_BIT_PAUSE_LEN_MAX
#define IRMP_ONKYO_PROTOCOL
#define ACP24_ADDRESS_OFFSET
#define RC6_BIT_PAUSE_LEN_MIN
#define SAMSUNG32_COMPLETE_DATA_LEN
#define LGAIR_ADDRESS_LEN
#define ROOMBA_COMMAND_LEN
#define BANG_OLUFSEN_0_PAUSE_LEN_MAX
#define METZ_ADDRESS_OFFSET
#define NEC_1_PAUSE_LEN_MAX
#define SIRCS_PAUSE_LEN_MIN