irtxrx 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +127 -0
  2. package/dist/cjs/decode.d.ts +184 -0
  3. package/dist/cjs/decode.d.ts.map +1 -0
  4. package/dist/cjs/decode.js +431 -0
  5. package/dist/cjs/decode.js.map +1 -0
  6. package/dist/cjs/encode.d.ts +76 -0
  7. package/dist/cjs/encode.d.ts.map +1 -0
  8. package/dist/cjs/encode.js +185 -0
  9. package/dist/cjs/encode.js.map +1 -0
  10. package/dist/cjs/index.d.ts +34 -0
  11. package/dist/cjs/index.d.ts.map +1 -0
  12. package/dist/cjs/index.js +99 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/protocols/coolix.d.ts +98 -0
  15. package/dist/cjs/protocols/coolix.d.ts.map +1 -0
  16. package/dist/cjs/protocols/coolix.js +331 -0
  17. package/dist/cjs/protocols/coolix.js.map +1 -0
  18. package/dist/cjs/protocols/daikin.d.ts +47 -0
  19. package/dist/cjs/protocols/daikin.d.ts.map +1 -0
  20. package/dist/cjs/protocols/daikin.js +353 -0
  21. package/dist/cjs/protocols/daikin.js.map +1 -0
  22. package/dist/cjs/protocols/daikin128.d.ts +60 -0
  23. package/dist/cjs/protocols/daikin128.d.ts.map +1 -0
  24. package/dist/cjs/protocols/daikin128.js +267 -0
  25. package/dist/cjs/protocols/daikin128.js.map +1 -0
  26. package/dist/cjs/protocols/daikin152.d.ts +47 -0
  27. package/dist/cjs/protocols/daikin152.d.ts.map +1 -0
  28. package/dist/cjs/protocols/daikin152.js +256 -0
  29. package/dist/cjs/protocols/daikin152.js.map +1 -0
  30. package/dist/cjs/protocols/daikin160.d.ts +37 -0
  31. package/dist/cjs/protocols/daikin160.d.ts.map +1 -0
  32. package/dist/cjs/protocols/daikin160.js +176 -0
  33. package/dist/cjs/protocols/daikin160.js.map +1 -0
  34. package/dist/cjs/protocols/daikin176.d.ts +44 -0
  35. package/dist/cjs/protocols/daikin176.d.ts.map +1 -0
  36. package/dist/cjs/protocols/daikin176.js +215 -0
  37. package/dist/cjs/protocols/daikin176.js.map +1 -0
  38. package/dist/cjs/protocols/daikin2.d.ts +46 -0
  39. package/dist/cjs/protocols/daikin2.d.ts.map +1 -0
  40. package/dist/cjs/protocols/daikin2.js +337 -0
  41. package/dist/cjs/protocols/daikin2.js.map +1 -0
  42. package/dist/cjs/protocols/daikin216.d.ts +30 -0
  43. package/dist/cjs/protocols/daikin216.d.ts.map +1 -0
  44. package/dist/cjs/protocols/daikin216.js +167 -0
  45. package/dist/cjs/protocols/daikin216.js.map +1 -0
  46. package/dist/cjs/protocols/daikin312.d.ts +45 -0
  47. package/dist/cjs/protocols/daikin312.d.ts.map +1 -0
  48. package/dist/cjs/protocols/daikin312.js +345 -0
  49. package/dist/cjs/protocols/daikin312.js.map +1 -0
  50. package/dist/cjs/protocols/daikin64.d.ts +79 -0
  51. package/dist/cjs/protocols/daikin64.d.ts.map +1 -0
  52. package/dist/cjs/protocols/daikin64.js +260 -0
  53. package/dist/cjs/protocols/daikin64.js.map +1 -0
  54. package/dist/cjs/protocols/daikin_common.d.ts +28 -0
  55. package/dist/cjs/protocols/daikin_common.d.ts.map +1 -0
  56. package/dist/cjs/protocols/daikin_common.js +41 -0
  57. package/dist/cjs/protocols/daikin_common.js.map +1 -0
  58. package/dist/cjs/protocols/nec.d.ts +50 -0
  59. package/dist/cjs/protocols/nec.d.ts.map +1 -0
  60. package/dist/cjs/protocols/nec.js +180 -0
  61. package/dist/cjs/protocols/nec.js.map +1 -0
  62. package/dist/decode.d.ts +67 -0
  63. package/dist/decode.d.ts.map +1 -0
  64. package/dist/decode.js +242 -0
  65. package/dist/decode.js.map +1 -0
  66. package/dist/encode.d.ts +76 -0
  67. package/dist/encode.d.ts.map +1 -0
  68. package/dist/encode.js +174 -0
  69. package/dist/encode.js.map +1 -0
  70. package/dist/esm/decode.d.ts +184 -0
  71. package/dist/esm/decode.d.ts.map +1 -0
  72. package/dist/esm/decode.js +420 -0
  73. package/dist/esm/decode.js.map +1 -0
  74. package/dist/esm/encode.d.ts +76 -0
  75. package/dist/esm/encode.d.ts.map +1 -0
  76. package/dist/esm/encode.js +174 -0
  77. package/dist/esm/encode.js.map +1 -0
  78. package/dist/esm/index.d.ts +34 -0
  79. package/dist/esm/index.d.ts.map +1 -0
  80. package/dist/esm/index.js +20 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/protocols/coolix.d.ts +98 -0
  83. package/dist/esm/protocols/coolix.d.ts.map +1 -0
  84. package/dist/esm/protocols/coolix.js +322 -0
  85. package/dist/esm/protocols/coolix.js.map +1 -0
  86. package/dist/esm/protocols/daikin.d.ts +47 -0
  87. package/dist/esm/protocols/daikin.d.ts.map +1 -0
  88. package/dist/esm/protocols/daikin.js +344 -0
  89. package/dist/esm/protocols/daikin.js.map +1 -0
  90. package/dist/esm/protocols/daikin128.d.ts +60 -0
  91. package/dist/esm/protocols/daikin128.d.ts.map +1 -0
  92. package/dist/esm/protocols/daikin128.js +260 -0
  93. package/dist/esm/protocols/daikin128.js.map +1 -0
  94. package/dist/esm/protocols/daikin152.d.ts +47 -0
  95. package/dist/esm/protocols/daikin152.d.ts.map +1 -0
  96. package/dist/esm/protocols/daikin152.js +247 -0
  97. package/dist/esm/protocols/daikin152.js.map +1 -0
  98. package/dist/esm/protocols/daikin160.d.ts +37 -0
  99. package/dist/esm/protocols/daikin160.d.ts.map +1 -0
  100. package/dist/esm/protocols/daikin160.js +167 -0
  101. package/dist/esm/protocols/daikin160.js.map +1 -0
  102. package/dist/esm/protocols/daikin176.d.ts +44 -0
  103. package/dist/esm/protocols/daikin176.d.ts.map +1 -0
  104. package/dist/esm/protocols/daikin176.js +208 -0
  105. package/dist/esm/protocols/daikin176.js.map +1 -0
  106. package/dist/esm/protocols/daikin2.d.ts +46 -0
  107. package/dist/esm/protocols/daikin2.d.ts.map +1 -0
  108. package/dist/esm/protocols/daikin2.js +328 -0
  109. package/dist/esm/protocols/daikin2.js.map +1 -0
  110. package/dist/esm/protocols/daikin216.d.ts +30 -0
  111. package/dist/esm/protocols/daikin216.d.ts.map +1 -0
  112. package/dist/esm/protocols/daikin216.js +158 -0
  113. package/dist/esm/protocols/daikin216.js.map +1 -0
  114. package/dist/esm/protocols/daikin312.d.ts +45 -0
  115. package/dist/esm/protocols/daikin312.d.ts.map +1 -0
  116. package/dist/esm/protocols/daikin312.js +336 -0
  117. package/dist/esm/protocols/daikin312.js.map +1 -0
  118. package/dist/esm/protocols/daikin64.d.ts +79 -0
  119. package/dist/esm/protocols/daikin64.d.ts.map +1 -0
  120. package/dist/esm/protocols/daikin64.js +253 -0
  121. package/dist/esm/protocols/daikin64.js.map +1 -0
  122. package/dist/esm/protocols/daikin_common.d.ts +28 -0
  123. package/dist/esm/protocols/daikin_common.d.ts.map +1 -0
  124. package/dist/esm/protocols/daikin_common.js +38 -0
  125. package/dist/esm/protocols/daikin_common.js.map +1 -0
  126. package/dist/esm/protocols/nec.d.ts +50 -0
  127. package/dist/esm/protocols/nec.d.ts.map +1 -0
  128. package/dist/esm/protocols/nec.js +175 -0
  129. package/dist/esm/protocols/nec.js.map +1 -0
  130. package/dist/index.d.ts +32 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +19 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/protocols/daikin.d.ts +47 -0
  135. package/dist/protocols/daikin.d.ts.map +1 -0
  136. package/dist/protocols/daikin.js +343 -0
  137. package/dist/protocols/daikin.js.map +1 -0
  138. package/dist/protocols/daikin128.d.ts +60 -0
  139. package/dist/protocols/daikin128.d.ts.map +1 -0
  140. package/dist/protocols/daikin128.js +259 -0
  141. package/dist/protocols/daikin128.js.map +1 -0
  142. package/dist/protocols/daikin152.d.ts +47 -0
  143. package/dist/protocols/daikin152.d.ts.map +1 -0
  144. package/dist/protocols/daikin152.js +246 -0
  145. package/dist/protocols/daikin152.js.map +1 -0
  146. package/dist/protocols/daikin160.d.ts +37 -0
  147. package/dist/protocols/daikin160.d.ts.map +1 -0
  148. package/dist/protocols/daikin160.js +166 -0
  149. package/dist/protocols/daikin160.js.map +1 -0
  150. package/dist/protocols/daikin176.d.ts +44 -0
  151. package/dist/protocols/daikin176.d.ts.map +1 -0
  152. package/dist/protocols/daikin176.js +207 -0
  153. package/dist/protocols/daikin176.js.map +1 -0
  154. package/dist/protocols/daikin2.d.ts +46 -0
  155. package/dist/protocols/daikin2.d.ts.map +1 -0
  156. package/dist/protocols/daikin2.js +326 -0
  157. package/dist/protocols/daikin2.js.map +1 -0
  158. package/dist/protocols/daikin216.d.ts +30 -0
  159. package/dist/protocols/daikin216.d.ts.map +1 -0
  160. package/dist/protocols/daikin216.js +157 -0
  161. package/dist/protocols/daikin216.js.map +1 -0
  162. package/dist/protocols/daikin312.d.ts +45 -0
  163. package/dist/protocols/daikin312.d.ts.map +1 -0
  164. package/dist/protocols/daikin312.js +334 -0
  165. package/dist/protocols/daikin312.js.map +1 -0
  166. package/dist/protocols/daikin64.d.ts +79 -0
  167. package/dist/protocols/daikin64.d.ts.map +1 -0
  168. package/dist/protocols/daikin64.js +251 -0
  169. package/dist/protocols/daikin64.js.map +1 -0
  170. package/dist/protocols/daikin_common.d.ts +28 -0
  171. package/dist/protocols/daikin_common.d.ts.map +1 -0
  172. package/dist/protocols/daikin_common.js +38 -0
  173. package/dist/protocols/daikin_common.js.map +1 -0
  174. package/dist/protocols/nec.d.ts +50 -0
  175. package/dist/protocols/nec.d.ts.map +1 -0
  176. package/dist/protocols/nec.js +175 -0
  177. package/dist/protocols/nec.js.map +1 -0
  178. package/package.json +37 -0
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ /**
3
+ * Daikin 64-bit IR protocol encoder.
4
+ *
5
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
6
+ *
7
+ * This is a stateless encoder: pass a {@link Daikin64State} object and get
8
+ * back a raw IR timing array.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.Daikin64Fan = exports.Daikin64Mode = void 0;
12
+ exports.buildDaikin64Raw = buildDaikin64Raw;
13
+ exports.sendDaikin64 = sendDaikin64;
14
+ exports.encodeDaikin64Raw = encodeDaikin64Raw;
15
+ exports.decodeDaikin64 = decodeDaikin64;
16
+ const encode_js_1 = require("../encode.js");
17
+ const decode_js_1 = require("../decode.js");
18
+ // ---------------------------------------------------------------------------
19
+ // Timing constants — must match ir_Daikin.h exactly
20
+ // ---------------------------------------------------------------------------
21
+ const DAIKIN64_LDR_MARK = 9800;
22
+ const DAIKIN64_LDR_SPACE = 9800;
23
+ const DAIKIN64_HDR_MARK = 4600;
24
+ const DAIKIN64_HDR_SPACE = 2500;
25
+ const DAIKIN64_BIT_MARK = 350;
26
+ const DAIKIN64_ONE_SPACE = 954;
27
+ const DAIKIN64_ZERO_SPACE = 382;
28
+ const DAIKIN64_GAP = 20300;
29
+ const DAIKIN64_DEFAULT_MESSAGE_GAP = 100000;
30
+ const DAIKIN64_BITS = 64;
31
+ const DAIKIN64_CHECKSUM_OFFSET = 60;
32
+ const DAIKIN64_TOLERANCE = 30;
33
+ // ---------------------------------------------------------------------------
34
+ // Protocol values
35
+ // ---------------------------------------------------------------------------
36
+ exports.Daikin64Mode = {
37
+ Dry: 0b0001,
38
+ Cool: 0b0010,
39
+ Fan: 0b0100,
40
+ Heat: 0b1000,
41
+ };
42
+ exports.Daikin64Fan = {
43
+ Auto: 0b0001,
44
+ High: 0b0010,
45
+ Med: 0b0100,
46
+ Low: 0b1000,
47
+ Quiet: 0b1001,
48
+ Turbo: 0b0011,
49
+ };
50
+ const DAIKIN64_MIN_TEMP = 16;
51
+ const DAIKIN64_MAX_TEMP = 30;
52
+ // Known good default state: 0x7C16161607204216
53
+ const DAIKIN64_DEFAULT_STATE = 0x7c16161607204216n;
54
+ // ---------------------------------------------------------------------------
55
+ // Bit packing helpers (little-endian bitfield layout)
56
+ // ---------------------------------------------------------------------------
57
+ function setBits(value, offset, size, bits) {
58
+ const mask = ((1n << BigInt(size)) - 1n) << BigInt(offset);
59
+ return (value & ~mask) | ((BigInt(bits) & ((1n << BigInt(size)) - 1n)) << BigInt(offset));
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // Checksum
63
+ // ---------------------------------------------------------------------------
64
+ function calcChecksum(state) {
65
+ return (0, encode_js_1.sumNibbles64)(state, DAIKIN64_CHECKSUM_OFFSET);
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // State → raw uint64
69
+ // ---------------------------------------------------------------------------
70
+ /**
71
+ * Build the raw 64-bit Daikin64 value from a state object.
72
+ * Fields not present in the state use the known-good defaults.
73
+ */
74
+ function buildDaikin64Raw(state) {
75
+ let raw = DAIKIN64_DEFAULT_STATE;
76
+ if (state.mode !== undefined) {
77
+ raw = setBits(raw, 8, 4, state.mode);
78
+ }
79
+ if (state.fan !== undefined) {
80
+ raw = setBits(raw, 12, 4, state.fan);
81
+ }
82
+ if (state.clock !== undefined) {
83
+ let mins = state.clock;
84
+ if (mins >= 24 * 60)
85
+ mins = 0;
86
+ raw = setBits(raw, 16, 8, (0, encode_js_1.uint8ToBcd)(mins % 60));
87
+ raw = setBits(raw, 24, 8, (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60)));
88
+ }
89
+ if (state.onTime !== undefined) {
90
+ let mins = state.onTime;
91
+ if (mins >= 24 * 60)
92
+ mins = 0;
93
+ raw = setBits(raw, 38, 1, (mins % 60) >= 30 ? 1 : 0); // OnHalfHour
94
+ raw = setBits(raw, 32, 6, (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60))); // OnHours
95
+ }
96
+ if (state.onTimerEnabled !== undefined) {
97
+ raw = setBits(raw, 39, 1, state.onTimerEnabled ? 1 : 0);
98
+ }
99
+ if (state.offTime !== undefined) {
100
+ let mins = state.offTime;
101
+ if (mins >= 24 * 60)
102
+ mins = 0;
103
+ raw = setBits(raw, 46, 1, (mins % 60) >= 30 ? 1 : 0); // OffHalfHour
104
+ raw = setBits(raw, 40, 6, (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60))); // OffHours
105
+ }
106
+ if (state.offTimerEnabled !== undefined) {
107
+ raw = setBits(raw, 47, 1, state.offTimerEnabled ? 1 : 0);
108
+ }
109
+ if (state.temp !== undefined) {
110
+ const degrees = Math.min(Math.max(state.temp, DAIKIN64_MIN_TEMP), DAIKIN64_MAX_TEMP);
111
+ raw = setBits(raw, 48, 8, (0, encode_js_1.uint8ToBcd)(degrees));
112
+ }
113
+ if (state.swingVertical !== undefined) {
114
+ raw = setBits(raw, 56, 1, state.swingVertical ? 1 : 0);
115
+ }
116
+ if (state.sleep !== undefined) {
117
+ raw = setBits(raw, 57, 1, state.sleep ? 1 : 0);
118
+ }
119
+ if (state.power !== undefined) {
120
+ raw = setBits(raw, 59, 1, state.power ? 1 : 0);
121
+ }
122
+ // Compute and set checksum (bits 60–63)
123
+ raw = setBits(raw, DAIKIN64_CHECKSUM_OFFSET, 4, calcChecksum(raw));
124
+ return raw;
125
+ }
126
+ // ---------------------------------------------------------------------------
127
+ // Public API
128
+ // ---------------------------------------------------------------------------
129
+ /**
130
+ * Encode a Daikin64 AC state into raw IR timings.
131
+ *
132
+ * @param state The desired AC state.
133
+ * @param repeat Number of times to repeat the message (default 0).
134
+ * @returns Flat array of alternating mark/space durations in microseconds.
135
+ */
136
+ function sendDaikin64(state, repeat = 0) {
137
+ const data = buildDaikin64Raw(state);
138
+ return encodeDaikin64Raw(data, repeat);
139
+ }
140
+ /**
141
+ * Encode a raw 64-bit Daikin64 value into IR timings.
142
+ * Useful when you already have the packed uint64 (e.g. from `buildDaikin64Raw`).
143
+ *
144
+ * Matches IRremoteESP8266 `IRsend::sendDaikin64`.
145
+ */
146
+ function encodeDaikin64Raw(data, repeat = 0) {
147
+ const result = [];
148
+ for (let r = 0; r <= repeat; r++) {
149
+ // Leader: 2x (mark + space)
150
+ for (let i = 0; i < 2; i++) {
151
+ result.push(DAIKIN64_LDR_MARK);
152
+ result.push(DAIKIN64_LDR_SPACE);
153
+ }
154
+ // Header + Data + Footer #1
155
+ const frame = (0, encode_js_1.sendGeneric)({
156
+ headerMark: DAIKIN64_HDR_MARK,
157
+ headerSpace: DAIKIN64_HDR_SPACE,
158
+ oneMark: DAIKIN64_BIT_MARK,
159
+ oneSpace: DAIKIN64_ONE_SPACE,
160
+ zeroMark: DAIKIN64_BIT_MARK,
161
+ zeroSpace: DAIKIN64_ZERO_SPACE,
162
+ footerMark: DAIKIN64_BIT_MARK,
163
+ gap: DAIKIN64_GAP,
164
+ data,
165
+ nbits: DAIKIN64_BITS,
166
+ msbFirst: false,
167
+ });
168
+ for (let i = 0; i < frame.length; i++)
169
+ result.push(frame[i]);
170
+ // Footer #2
171
+ result.push(DAIKIN64_HDR_MARK);
172
+ result.push(DAIKIN64_DEFAULT_MESSAGE_GAP);
173
+ }
174
+ return result;
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // Decode API
178
+ // ---------------------------------------------------------------------------
179
+ /**
180
+ * Try to skip the leader section (2x mark+space pairs + footer mark + gap).
181
+ * Returns the new offset past the leader, or the original offset if no leader.
182
+ */
183
+ function skipLeader(timings, offset) {
184
+ // The leader consists of 2 pairs of (LDR_MARK, LDR_SPACE).
185
+ // We match these as 2 x matchGeneric with 0 data bits.
186
+ let pos = offset;
187
+ for (let i = 0; i < 2; i++) {
188
+ const result = (0, decode_js_1.matchGeneric)(timings, pos, timings.length - pos, 0, DAIKIN64_LDR_MARK, DAIKIN64_LDR_SPACE, // header mark, header space
189
+ 0, 0, // oneMark, oneSpace (unused, 0 bits)
190
+ 0, 0, // zeroMark, zeroSpace (unused)
191
+ 0, 0, // no footer
192
+ true, DAIKIN64_TOLERANCE);
193
+ if (!result)
194
+ return offset; // Leader not found, return original offset
195
+ pos += result.used;
196
+ }
197
+ return pos;
198
+ }
199
+ /**
200
+ * Decode raw IR timings as a Daikin64 message.
201
+ *
202
+ * The leader (2x mark+space pairs) is optional -- hardware captures may miss it.
203
+ *
204
+ * @param timings Raw mark/space timing array in microseconds.
205
+ * @param offset Starting index in the timings array (default 0).
206
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
207
+ */
208
+ function decodeDaikin64(timings, offset = 0, headerOptional = false) {
209
+ // Skip leader if present.
210
+ let pos = skipLeader(timings, offset);
211
+ // Match main frame: header + 64 bits (LSB-first) + footer + gap.
212
+ const frame = (0, decode_js_1.matchGeneric)(timings, pos, timings.length - pos, DAIKIN64_BITS, DAIKIN64_HDR_MARK, DAIKIN64_HDR_SPACE, DAIKIN64_BIT_MARK, DAIKIN64_ONE_SPACE, DAIKIN64_BIT_MARK, DAIKIN64_ZERO_SPACE, DAIKIN64_BIT_MARK, DAIKIN64_GAP, true, DAIKIN64_TOLERANCE, undefined, false, // atLeast, tol, excess, msbFirst=false
213
+ headerOptional);
214
+ if (!frame)
215
+ return null;
216
+ const raw = frame.data;
217
+ // Validate nibble checksum (bits 60-63).
218
+ const expectedChecksum = (0, encode_js_1.sumNibbles64)(raw, DAIKIN64_CHECKSUM_OFFSET);
219
+ const actualChecksum = Number((raw >> 60n) & 0xfn);
220
+ if (actualChecksum !== expectedChecksum)
221
+ return null;
222
+ // Extract fields from the 64-bit value (inverse of buildDaikin64Raw).
223
+ const getBits = (off, size) => Number((raw >> BigInt(off)) & ((1n << BigInt(size)) - 1n));
224
+ const mode = getBits(8, 4);
225
+ const fan = getBits(12, 4);
226
+ // Clock: BCD minutes (bits 16-23) + BCD hours (bits 24-31)
227
+ const clockMinBcd = getBits(16, 8);
228
+ const clockHourBcd = getBits(24, 8);
229
+ const clock = (0, encode_js_1.bcdToUint8)(clockHourBcd) * 60 + (0, encode_js_1.bcdToUint8)(clockMinBcd);
230
+ // On timer: BCD hours (bits 32-37, 6 bits) + half-hour flag (bit 38) + enabled (bit 39)
231
+ const onHoursBcd = getBits(32, 6);
232
+ const onHalfHour = getBits(38, 1);
233
+ const onTimerEnabled = !!getBits(39, 1);
234
+ const onTime = (0, encode_js_1.bcdToUint8)(onHoursBcd) * 60 + (onHalfHour ? 30 : 0);
235
+ // Off timer: BCD hours (bits 40-45, 6 bits) + half-hour flag (bit 46) + enabled (bit 47)
236
+ const offHoursBcd = getBits(40, 6);
237
+ const offHalfHour = getBits(46, 1);
238
+ const offTimerEnabled = !!getBits(47, 1);
239
+ const offTime = (0, encode_js_1.bcdToUint8)(offHoursBcd) * 60 + (offHalfHour ? 30 : 0);
240
+ // Temp: BCD (bits 48-55)
241
+ const tempBcd = getBits(48, 8);
242
+ const temp = (0, encode_js_1.bcdToUint8)(tempBcd);
243
+ const swingVertical = !!getBits(56, 1);
244
+ const sleep = !!getBits(57, 1);
245
+ const power = !!getBits(59, 1);
246
+ return {
247
+ power,
248
+ temp,
249
+ mode,
250
+ fan,
251
+ swingVertical,
252
+ sleep,
253
+ clock,
254
+ onTimerEnabled,
255
+ onTime,
256
+ offTimerEnabled,
257
+ offTime,
258
+ };
259
+ }
260
+ //# sourceMappingURL=daikin64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin64.js","sourceRoot":"","sources":["../../../src/protocols/daikin64.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared constants for Daikin AC protocols (used by IRDaikinESP, Daikin152,
3
+ * Daikin160, Daikin176, Daikin216, etc.).
4
+ *
5
+ * Ported from IRremoteESP8266 `ir_Daikin.h`.
6
+ */
7
+ export declare const DaikinMode: {
8
+ readonly Auto: 0;
9
+ readonly Dry: 2;
10
+ readonly Cool: 3;
11
+ readonly Heat: 4;
12
+ readonly Fan: 6;
13
+ };
14
+ export type DaikinModeValue = (typeof DaikinMode)[keyof typeof DaikinMode];
15
+ export declare const DaikinFan: {
16
+ readonly Auto: 10;
17
+ readonly Quiet: 11;
18
+ readonly Min: 1;
19
+ readonly Med: 3;
20
+ readonly Max: 5;
21
+ };
22
+ export type DaikinFanValue = (typeof DaikinFan)[keyof typeof DaikinFan] | 1 | 2 | 3 | 4 | 5;
23
+ export declare const DAIKIN_SWING_ON = 15;
24
+ export declare const DAIKIN_SWING_OFF = 0;
25
+ export declare const DAIKIN_MIN_TEMP = 10;
26
+ export declare const DAIKIN_MAX_TEMP = 32;
27
+ export declare const DAIKIN2_MIN_COOL_TEMP = 18;
28
+ //# sourceMappingURL=daikin_common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin_common.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin_common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAM3E,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAM5F,eAAO,MAAM,eAAe,KAAS,CAAC;AACtC,eAAO,MAAM,gBAAgB,IAAS,CAAC;AAMvC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,qBAAqB,KAAK,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * Shared constants for Daikin AC protocols (used by IRDaikinESP, Daikin152,
4
+ * Daikin160, Daikin176, Daikin216, etc.).
5
+ *
6
+ * Ported from IRremoteESP8266 `ir_Daikin.h`.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DAIKIN2_MIN_COOL_TEMP = exports.DAIKIN_MAX_TEMP = exports.DAIKIN_MIN_TEMP = exports.DAIKIN_SWING_OFF = exports.DAIKIN_SWING_ON = exports.DaikinFan = exports.DaikinMode = void 0;
10
+ // ---------------------------------------------------------------------------
11
+ // Operating modes (shared across most Daikin byte-array protocols)
12
+ // ---------------------------------------------------------------------------
13
+ exports.DaikinMode = {
14
+ Auto: 0b000,
15
+ Dry: 0b010,
16
+ Cool: 0b011,
17
+ Heat: 0b100,
18
+ Fan: 0b110,
19
+ };
20
+ // ---------------------------------------------------------------------------
21
+ // Fan speeds (shared across most Daikin byte-array protocols)
22
+ // ---------------------------------------------------------------------------
23
+ exports.DaikinFan = {
24
+ Auto: 0b1010, // 0xA
25
+ Quiet: 0b1011, // 0xB
26
+ Min: 1,
27
+ Med: 3,
28
+ Max: 5,
29
+ };
30
+ // ---------------------------------------------------------------------------
31
+ // Swing
32
+ // ---------------------------------------------------------------------------
33
+ exports.DAIKIN_SWING_ON = 0b1111;
34
+ exports.DAIKIN_SWING_OFF = 0b0000;
35
+ // ---------------------------------------------------------------------------
36
+ // Temperature limits
37
+ // ---------------------------------------------------------------------------
38
+ exports.DAIKIN_MIN_TEMP = 10;
39
+ exports.DAIKIN_MAX_TEMP = 32;
40
+ exports.DAIKIN2_MIN_COOL_TEMP = 18;
41
+ //# sourceMappingURL=daikin_common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin_common.js","sourceRoot":"","sources":["../../../src/protocols/daikin_common.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAEjE,QAAA,UAAU,GAAG;IACxB,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;CACF,CAAC;AAIX,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAEjE,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM,EAAI,MAAM;IACtB,KAAK,EAAE,MAAM,EAAG,MAAM;IACtB,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;CACE,CAAC;AAIX,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAEjE,QAAA,eAAe,GAAG,MAAM,CAAC;AACzB,QAAA,gBAAgB,GAAG,MAAM,CAAC;AAEvC,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAEjE,QAAA,eAAe,GAAG,EAAE,CAAC;AACrB,QAAA,eAAe,GAAG,EAAE,CAAC;AACrB,QAAA,qBAAqB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * NEC (Renesas) IR protocol encoder.
3
+ *
4
+ * Ported from IRremoteESP8266 `ir_NEC.cpp` / `ir_NEC.h`.
5
+ *
6
+ * @see http://www.sbprojects.net/knowledge/ir/nec.php
7
+ */
8
+ /**
9
+ * Encode a NEC address + command into a raw 32-bit data value suitable for
10
+ * {@link sendNEC}.
11
+ *
12
+ * Supports both normal NEC (8-bit address) and extended NEC (16-bit address).
13
+ *
14
+ * Matches IRremoteESP8266 `IRsend::encodeNEC`.
15
+ */
16
+ export declare function encodeNEC(address: number, command: number): number;
17
+ /**
18
+ * Generate raw IR timings for a NEC message.
19
+ *
20
+ * @param data Raw NEC data (use {@link encodeNEC} to build from address + command).
21
+ * @param nbits Number of data bits (default 32).
22
+ * @param repeat Number of repeat frames to append (default 0).
23
+ * @returns Flat array of alternating mark/space durations in microseconds.
24
+ *
25
+ * Matches IRremoteESP8266 `IRsend::sendNEC`.
26
+ */
27
+ export declare function sendNEC(data: number | bigint, nbits?: number, repeat?: number): number[];
28
+ export interface NECDecodeResult {
29
+ /** Raw 32-bit NEC data (MSB-first). */
30
+ data: number;
31
+ /** Decoded device address. */
32
+ address: number;
33
+ /** Decoded command. */
34
+ command: number;
35
+ /** Whether this is a repeat frame. */
36
+ repeat: boolean;
37
+ }
38
+ /**
39
+ * Decode raw IR timings as a NEC message.
40
+ *
41
+ * Matches IRremoteESP8266 `IRrecv::decodeNEC`.
42
+ *
43
+ * @param timings Raw mark/space timing array in microseconds.
44
+ * @param offset Starting index in the timings array (default 0).
45
+ * @param nbits Expected number of data bits (default 32).
46
+ * @param strict If true, enforce NEC constraints (default true).
47
+ * @returns Decoded NEC result, or null if timings don't match.
48
+ */
49
+ export declare function decodeNEC(timings: number[], offset?: number, nbits?: number, strict?: boolean, headerOptional?: boolean): NECDecodeResult | null;
50
+ //# sourceMappingURL=nec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nec.d.ts","sourceRoot":"","sources":["../../../src/protocols/nec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmCH;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAelE;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,KAAK,GAAE,MAAiB,EACxB,MAAM,GAAE,MAAU,GACjB,MAAM,EAAE,CAwCV;AAMD,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,KAAK,GAAE,MAAiB,EACxB,MAAM,GAAE,OAAc,EACtB,cAAc,GAAE,OAAe,GAC9B,eAAe,GAAG,IAAI,CAsExB"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * NEC (Renesas) IR protocol encoder.
4
+ *
5
+ * Ported from IRremoteESP8266 `ir_NEC.cpp` / `ir_NEC.h`.
6
+ *
7
+ * @see http://www.sbprojects.net/knowledge/ir/nec.php
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.encodeNEC = encodeNEC;
11
+ exports.sendNEC = sendNEC;
12
+ exports.decodeNEC = decodeNEC;
13
+ const encode_js_1 = require("../encode.js");
14
+ const decode_js_1 = require("../decode.js");
15
+ // ---------------------------------------------------------------------------
16
+ // Timing constants — must match ir_NEC.h exactly
17
+ // ---------------------------------------------------------------------------
18
+ const NEC_TICK = 560;
19
+ const NEC_HDR_MARK = 16 * NEC_TICK; // 8960
20
+ const NEC_HDR_SPACE = 8 * NEC_TICK; // 4480
21
+ const NEC_BIT_MARK = 1 * NEC_TICK; // 560
22
+ const NEC_ONE_SPACE = 3 * NEC_TICK; // 1680
23
+ const NEC_ZERO_SPACE = 1 * NEC_TICK; // 560
24
+ const NEC_RPT_SPACE = 4 * NEC_TICK; // 2240
25
+ const NEC_BITS = 32;
26
+ const NEC_MIN_COMMAND_LENGTH_TICKS = 193;
27
+ const NEC_MIN_COMMAND_LENGTH = NEC_MIN_COMMAND_LENGTH_TICKS * NEC_TICK; // 108080
28
+ const NEC_MIN_GAP = NEC_MIN_COMMAND_LENGTH -
29
+ (NEC_HDR_MARK +
30
+ NEC_HDR_SPACE +
31
+ NEC_BITS * (NEC_BIT_MARK + NEC_ONE_SPACE) +
32
+ NEC_BIT_MARK); // 22400
33
+ // ---------------------------------------------------------------------------
34
+ // Encode API
35
+ // ---------------------------------------------------------------------------
36
+ /**
37
+ * Encode a NEC address + command into a raw 32-bit data value suitable for
38
+ * {@link sendNEC}.
39
+ *
40
+ * Supports both normal NEC (8-bit address) and extended NEC (16-bit address).
41
+ *
42
+ * Matches IRremoteESP8266 `IRsend::encodeNEC`.
43
+ */
44
+ function encodeNEC(address, command) {
45
+ command &= 0xff;
46
+ // NEC is LSB-first on the wire but sendNEC transmits MSB-first,
47
+ // so we pre-reverse the bits.
48
+ command = (0, encode_js_1.reverseBits)(command, 8);
49
+ command = (command << 8) | (command ^ 0xff);
50
+ if (address > 0xff) {
51
+ // Extended NEC — 16-bit address, no inverted address byte.
52
+ address = (0, encode_js_1.reverseBits)(address, 16);
53
+ return ((address << 16) + command) >>> 0;
54
+ }
55
+ // Normal NEC — 8-bit address + inverted address.
56
+ address = (0, encode_js_1.reverseBits)(address, 8);
57
+ return (((address << 24) + ((address ^ 0xff) << 16) + command) >>> 0);
58
+ }
59
+ /**
60
+ * Generate raw IR timings for a NEC message.
61
+ *
62
+ * @param data Raw NEC data (use {@link encodeNEC} to build from address + command).
63
+ * @param nbits Number of data bits (default 32).
64
+ * @param repeat Number of repeat frames to append (default 0).
65
+ * @returns Flat array of alternating mark/space durations in microseconds.
66
+ *
67
+ * Matches IRremoteESP8266 `IRsend::sendNEC`.
68
+ */
69
+ function sendNEC(data, nbits = NEC_BITS, repeat = 0) {
70
+ const d = typeof data === "number" ? BigInt(data) : data;
71
+ // Initial command frame (no internal repeats).
72
+ const result = (0, encode_js_1.sendGeneric)({
73
+ headerMark: NEC_HDR_MARK,
74
+ headerSpace: NEC_HDR_SPACE,
75
+ oneMark: NEC_BIT_MARK,
76
+ oneSpace: NEC_ONE_SPACE,
77
+ zeroMark: NEC_BIT_MARK,
78
+ zeroSpace: NEC_ZERO_SPACE,
79
+ footerMark: NEC_BIT_MARK,
80
+ gap: NEC_MIN_GAP,
81
+ mesgTime: NEC_MIN_COMMAND_LENGTH,
82
+ data: d,
83
+ nbits,
84
+ msbFirst: true,
85
+ });
86
+ // Optional repeat sequence — header mark + short repeat space + footer mark.
87
+ if (repeat > 0) {
88
+ const rpt = (0, encode_js_1.sendGeneric)({
89
+ headerMark: NEC_HDR_MARK,
90
+ headerSpace: NEC_RPT_SPACE,
91
+ oneMark: 0,
92
+ oneSpace: 0,
93
+ zeroMark: 0,
94
+ zeroSpace: 0,
95
+ footerMark: NEC_BIT_MARK,
96
+ gap: NEC_MIN_GAP,
97
+ mesgTime: NEC_MIN_COMMAND_LENGTH,
98
+ data: 0n,
99
+ nbits: 0,
100
+ msbFirst: true,
101
+ repeat: repeat - 1,
102
+ });
103
+ for (let i = 0; i < rpt.length; i++)
104
+ result.push(rpt[i]);
105
+ }
106
+ return result;
107
+ }
108
+ /**
109
+ * Decode raw IR timings as a NEC message.
110
+ *
111
+ * Matches IRremoteESP8266 `IRrecv::decodeNEC`.
112
+ *
113
+ * @param timings Raw mark/space timing array in microseconds.
114
+ * @param offset Starting index in the timings array (default 0).
115
+ * @param nbits Expected number of data bits (default 32).
116
+ * @param strict If true, enforce NEC constraints (default true).
117
+ * @returns Decoded NEC result, or null if timings don't match.
118
+ */
119
+ function decodeNEC(timings, offset = 0, nbits = NEC_BITS, strict = true, headerOptional = false) {
120
+ const remaining = timings.length - offset;
121
+ // Need at least 4 entries for a repeat frame.
122
+ if (remaining < 4)
123
+ return null;
124
+ if (strict && nbits !== NEC_BITS)
125
+ return null;
126
+ let pos = offset;
127
+ // 1. Match header mark.
128
+ const headerMarkFound = (0, decode_js_1.matchMark)(timings[pos], NEC_HDR_MARK);
129
+ if (!headerMarkFound && !headerOptional)
130
+ return null;
131
+ if (headerMarkFound)
132
+ pos++;
133
+ // 2. Check for repeat: rptSpace + footerMark (+ optional gap).
134
+ // Only possible if header mark was found.
135
+ if (headerMarkFound && pos + 1 < timings.length &&
136
+ (0, decode_js_1.matchSpace)(timings[pos], NEC_RPT_SPACE) &&
137
+ (0, decode_js_1.matchMark)(timings[pos + 1], NEC_BIT_MARK)) {
138
+ if (pos + 2 < timings.length &&
139
+ !(0, decode_js_1.matchAtLeast)(timings[pos + 2], NEC_MIN_GAP)) {
140
+ return null;
141
+ }
142
+ return { data: 0xFFFFFFFF, address: 0, command: 0, repeat: true };
143
+ }
144
+ // 3. Decode header space + data bits + footer via matchGeneric.
145
+ // If header mark was found, it's already consumed (pass headerMark = 0).
146
+ // If header was optional and missing, pass the full header to matchGeneric
147
+ // with headerOptional so it can skip both mark and space.
148
+ const result = (0, decode_js_1.matchGeneric)(timings, pos, remaining - (pos - offset), nbits, headerMarkFound ? 0 : NEC_HDR_MARK, // skip if already consumed
149
+ NEC_HDR_SPACE, NEC_BIT_MARK, NEC_ONE_SPACE, NEC_BIT_MARK, NEC_ZERO_SPACE, NEC_BIT_MARK, NEC_MIN_GAP, true, // atLeast
150
+ undefined, undefined, undefined, // tolerance, excess, msbFirst defaults
151
+ !headerMarkFound && headerOptional);
152
+ if (!result)
153
+ return null;
154
+ const data = Number(result.data & 0xffffffffn);
155
+ // 4. Validate command (inverted complement in bits 7:0).
156
+ let command = (data >> 8) & 0xFF;
157
+ const commandInv = data & 0xFF;
158
+ if ((command ^ 0xFF) !== commandInv) {
159
+ if (strict)
160
+ return null;
161
+ command = 0;
162
+ }
163
+ // 5. Extract address — normal (8-bit) vs extended (16-bit).
164
+ const addrHi = (data >> 24) & 0xFF;
165
+ const addrLo = (data >> 16) & 0xFF;
166
+ let address;
167
+ if (addrHi === (addrLo ^ 0xFF)) {
168
+ address = (0, encode_js_1.reverseBits)(addrHi, 8);
169
+ }
170
+ else {
171
+ address = (0, encode_js_1.reverseBits)((data >> 16) & 0xFFFF, 16);
172
+ }
173
+ return {
174
+ data,
175
+ address,
176
+ command: (0, encode_js_1.reverseBits)(command, 8),
177
+ repeat: false,
178
+ };
179
+ }
180
+ //# sourceMappingURL=nec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nec.js","sourceRoot":"","sources":["../../../src/protocols/nec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Core IR decoding engine.
3
+ *
4
+ * Mirrors the decoding logic of IRremoteESP8266's IRrecv, but operates
5
+ * on plain timing arrays (in microseconds) instead of hardware capture buffers.
6
+ */
7
+ /** Default percentage tolerance for timing matches (±25%). */
8
+ export declare const kTolerance = 25;
9
+ /**
10
+ * Default mark excess in microseconds.
11
+ * Compensates for sensor lag: marks are captured too long, spaces too short.
12
+ * Set to 0 for ideal timings (encoder output); increase for real hardware.
13
+ */
14
+ export declare const kMarkExcess = 0;
15
+ /** Check if a measured timing is within tolerance of a desired value. */
16
+ export declare function matchTiming(measured: number, desired: number, tolerance?: number, delta?: number): boolean;
17
+ /**
18
+ * Match a mark (IR ON) timing.
19
+ * Adds excess to desired to compensate for marks being captured too long.
20
+ */
21
+ export declare function matchMark(measured: number, desired: number, tolerance?: number, excess?: number): boolean;
22
+ /**
23
+ * Match a space (IR OFF) timing.
24
+ * Subtracts excess from desired to compensate for spaces being too short.
25
+ */
26
+ export declare function matchSpace(measured: number, desired: number, tolerance?: number, excess?: number): boolean;
27
+ /**
28
+ * Match a timing that should be at least as long as desired.
29
+ * Used for trailing gaps which can be arbitrarily long.
30
+ */
31
+ export declare function matchAtLeast(measured: number, desired: number, tolerance?: number, delta?: number): boolean;
32
+ export interface MatchDataResult {
33
+ success: boolean;
34
+ data: bigint;
35
+ used: number;
36
+ }
37
+ /**
38
+ * Decode `nbits` of data from mark/space pairs in a timing array.
39
+ *
40
+ * Inverse of `encodeData`. Matches IRremoteESP8266 `IRrecv::matchData`.
41
+ */
42
+ export declare function matchData(timings: number[], offset: number, nbits: number, oneMark: number, oneSpace: number, zeroMark: number, zeroSpace: number, tolerance?: number, excess?: number, msbFirst?: boolean, expectLastSpace?: boolean): MatchDataResult;
43
+ export interface MatchGenericResult {
44
+ data: bigint;
45
+ used: number;
46
+ }
47
+ /**
48
+ * Generic IR frame decoder for protocols with ≤ 64 data bits.
49
+ *
50
+ * Inverse of `sendGeneric`. Matches IRremoteESP8266 `IRrecv::matchGeneric`.
51
+ *
52
+ * @returns Decoded data and entries consumed, or null on mismatch.
53
+ */
54
+ export declare function matchGeneric(timings: number[], offset: number, remaining: number, nbits: number, headerMark: number, headerSpace: number, oneMark: number, oneSpace: number, zeroMark: number, zeroSpace: number, footerMark: number, footerSpace: number, atLeast?: boolean, tolerance?: number, excess?: number, msbFirst?: boolean): MatchGenericResult | null;
55
+ export interface MatchGenericBytesResult {
56
+ data: Uint8Array;
57
+ used: number;
58
+ }
59
+ /**
60
+ * Generic IR frame decoder for byte-array protocols (AC protocols).
61
+ *
62
+ * Inverse of `sendGenericBytes`. Decodes each byte individually (8 bits).
63
+ *
64
+ * @returns Decoded byte array and entries consumed, or null on mismatch.
65
+ */
66
+ export declare function matchGenericBytes(timings: number[], offset: number, remaining: number, nbytes: number, headerMark: number, headerSpace: number, oneMark: number, oneSpace: number, zeroMark: number, zeroSpace: number, footerMark: number, footerSpace: number, atLeast?: boolean, tolerance?: number, excess?: number, msbFirst?: boolean): MatchGenericBytesResult | null;
67
+ //# sourceMappingURL=decode.d.ts.map