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
+ /**
2
+ * Daikin 128-bit (16-byte) IR protocol encoder.
3
+ *
4
+ * Leader (2x mark/space) + 2 sections: bytes 0–7 (with header) + bytes 8–15 (no header, footer mark).
5
+ * Nibble-based checksums.
6
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
7
+ */
8
+ import { uint8ToBcd, bcdToUint8, sumNibbles, sendGenericBytes } from "../encode.js";
9
+ import { matchMark, matchSpace, matchGenericBytes } from "../decode.js";
10
+ // ---------------------------------------------------------------------------
11
+ // Timing constants (shared with Daikin64)
12
+ // ---------------------------------------------------------------------------
13
+ const LDR_MARK = 9800;
14
+ const LDR_SPACE = 9800;
15
+ const HDR_MARK = 4600;
16
+ const HDR_SPACE = 2500;
17
+ const BIT_MARK = 350;
18
+ const ONE_SPACE = 954;
19
+ const ZERO_SPACE = 382;
20
+ const GAP = 20300;
21
+ const FOOTER_MARK = 4600; // kDaikin128FooterMark = kDaikin128HdrMark
22
+ const STATE_LENGTH = 16;
23
+ const SECTION_LEN = 8;
24
+ // ---------------------------------------------------------------------------
25
+ // Daikin128-specific mode values (4-bit, different from shared 3-bit)
26
+ // ---------------------------------------------------------------------------
27
+ export const Daikin128Mode = {
28
+ Dry: 0b0001,
29
+ Cool: 0b0010,
30
+ Fan: 0b0100,
31
+ Heat: 0b1000,
32
+ Auto: 0b1010,
33
+ };
34
+ export const Daikin128Fan = {
35
+ Auto: 0b0001,
36
+ High: 0b0010,
37
+ Med: 0b0100,
38
+ Low: 0b1000,
39
+ Powerful: 0b0011,
40
+ Quiet: 0b1001,
41
+ };
42
+ const MIN_TEMP = 16;
43
+ const MAX_TEMP = 30;
44
+ // ---------------------------------------------------------------------------
45
+ // Bit helpers
46
+ // ---------------------------------------------------------------------------
47
+ function setBit(raw, byteIdx, bitIdx, on) {
48
+ if (on)
49
+ raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
50
+ else
51
+ raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
52
+ }
53
+ function setBitsRange(raw, byteIdx, bitOffset, size, value) {
54
+ const mask = ((1 << size) - 1) << bitOffset;
55
+ raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Build
59
+ // ---------------------------------------------------------------------------
60
+ function defaultState() {
61
+ const raw = new Uint8Array(STATE_LENGTH);
62
+ raw[0] = 0x16;
63
+ raw[7] = 0x04; // Lower nibble = 0x4, upper nibble = checksum
64
+ raw[8] = 0xa1;
65
+ return raw;
66
+ }
67
+ export function buildDaikin128Raw(state) {
68
+ const raw = defaultState();
69
+ // Mode (byte 1, bits 0–3)
70
+ let mode = state.mode ?? Daikin128Mode.Auto;
71
+ if (!(mode === Daikin128Mode.Auto || mode === Daikin128Mode.Cool || mode === Daikin128Mode.Heat || mode === Daikin128Mode.Fan || mode === Daikin128Mode.Dry))
72
+ mode = Daikin128Mode.Auto;
73
+ setBitsRange(raw, 1, 0, 4, mode);
74
+ // Fan (byte 1, bits 4–7) — mode-dependent constraints
75
+ let fan = state.fan ?? Daikin128Fan.Auto;
76
+ if (fan === Daikin128Fan.Quiet || fan === Daikin128Fan.Powerful) {
77
+ if (mode === Daikin128Mode.Auto)
78
+ fan = Daikin128Fan.Auto;
79
+ }
80
+ if (!(fan === Daikin128Fan.Auto || fan === Daikin128Fan.High || fan === Daikin128Fan.Med || fan === Daikin128Fan.Low || fan === Daikin128Fan.Quiet || fan === Daikin128Fan.Powerful))
81
+ fan = Daikin128Fan.Auto;
82
+ setBitsRange(raw, 1, 4, 4, fan);
83
+ // Clock (byte 2 = ClockMins BCD, byte 3 = ClockHours BCD)
84
+ if (state.clock !== undefined) {
85
+ let mins = state.clock;
86
+ if (mins >= 24 * 60)
87
+ mins = 0;
88
+ raw[2] = uint8ToBcd(mins % 60);
89
+ raw[3] = uint8ToBcd(Math.trunc(mins / 60));
90
+ }
91
+ // On timer (byte 4: bits 0–5 = OnHours, bit 6 = OnHalfHour, bit 7 = OnTimer)
92
+ if (state.onTime !== undefined) {
93
+ let mins = state.onTime;
94
+ if (mins >= 24 * 60)
95
+ mins = 0;
96
+ setBitsRange(raw, 4, 0, 6, uint8ToBcd(Math.trunc(mins / 60)));
97
+ setBit(raw, 4, 6, (mins % 60) >= 30);
98
+ }
99
+ setBit(raw, 4, 7, state.onTimerEnabled ?? false);
100
+ // Off timer (byte 5: bits 0–5 = OffHours, bit 6 = OffHalfHour, bit 7 = OffTimer)
101
+ if (state.offTime !== undefined) {
102
+ let mins = state.offTime;
103
+ if (mins >= 24 * 60)
104
+ mins = 0;
105
+ setBitsRange(raw, 5, 0, 6, uint8ToBcd(Math.trunc(mins / 60)));
106
+ setBit(raw, 5, 6, (mins % 60) >= 30);
107
+ }
108
+ setBit(raw, 5, 7, state.offTimerEnabled ?? false);
109
+ // Temp (byte 6, BCD)
110
+ const temp = Math.min(Math.max(state.temp ?? 24, MIN_TEMP), MAX_TEMP);
111
+ raw[6] = uint8ToBcd(temp);
112
+ // Byte 7 lower nibble fields: SwingV(bit 0), Sleep(bit 1), bit 2 always 1, Power(bit 3)
113
+ setBit(raw, 7, 0, state.swingVertical ?? false);
114
+ setBit(raw, 7, 1, state.sleep ?? false);
115
+ setBit(raw, 7, 2, true); // always 1
116
+ setBit(raw, 7, 3, state.power ?? false);
117
+ // Byte 9: Ceiling(bit 0), Econo(bit 2), Wall(bit 3)
118
+ const econo = (state.econo ?? false) && (mode === Daikin128Mode.Cool || mode === Daikin128Mode.Heat);
119
+ setBit(raw, 9, 0, state.ceiling ?? false);
120
+ setBit(raw, 9, 2, econo);
121
+ setBit(raw, 9, 3, state.wall ?? false);
122
+ // --- Checksums ---
123
+ // First checksum: sumNibbles(bytes 0–6, init=lower nibble of byte 7) & 0x0F → upper nibble of byte 7
124
+ const sum1 = sumNibbles(raw, 0, SECTION_LEN - 1, raw[7] & 0x0f) & 0x0f;
125
+ raw[7] = (raw[7] & 0x0f) | (sum1 << 4);
126
+ // Second checksum: sumNibbles(bytes 8–14) → byte 15
127
+ raw[15] = sumNibbles(raw, SECTION_LEN, SECTION_LEN - 1);
128
+ return raw;
129
+ }
130
+ // ---------------------------------------------------------------------------
131
+ // Send
132
+ // ---------------------------------------------------------------------------
133
+ export function sendDaikin128(state, repeat = 0) {
134
+ return encodeDaikin128Raw(buildDaikin128Raw(state), repeat);
135
+ }
136
+ export function encodeDaikin128Raw(data, repeat = 0) {
137
+ const result = [];
138
+ for (let r = 0; r <= repeat; r++) {
139
+ // Leader: 2x (mark + space)
140
+ for (let i = 0; i < 2; i++) {
141
+ result.push(LDR_MARK);
142
+ result.push(LDR_SPACE);
143
+ }
144
+ // Section 1 (bytes 0–7) — with header
145
+ const s1 = sendGenericBytes({
146
+ headerMark: HDR_MARK, headerSpace: HDR_SPACE,
147
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
148
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
149
+ footerMark: BIT_MARK, gap: GAP,
150
+ data: data.subarray(0, SECTION_LEN), msbFirst: false,
151
+ });
152
+ for (let i = 0; i < s1.length; i++)
153
+ result.push(s1[i]);
154
+ // Section 2 (bytes 8–15) — no header, footer = FOOTER_MARK
155
+ const s2 = sendGenericBytes({
156
+ headerMark: 0, headerSpace: 0,
157
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
158
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
159
+ footerMark: FOOTER_MARK, gap: GAP,
160
+ data: data.subarray(SECTION_LEN), msbFirst: false,
161
+ });
162
+ for (let i = 0; i < s2.length; i++)
163
+ result.push(s2[i]);
164
+ }
165
+ return result;
166
+ }
167
+ // ---------------------------------------------------------------------------
168
+ // Decode API
169
+ // ---------------------------------------------------------------------------
170
+ /**
171
+ * Try to skip the leader section (2x mark/space pairs).
172
+ * Returns the new offset past the leader, or the original offset if no leader.
173
+ */
174
+ function skipLeader(timings, offset) {
175
+ let pos = offset;
176
+ // Leader is 2x (LDR_MARK + LDR_SPACE)
177
+ for (let i = 0; i < 2; i++) {
178
+ if (pos + 1 >= timings.length)
179
+ return offset;
180
+ if (!matchMark(timings[pos], LDR_MARK))
181
+ return offset;
182
+ if (!matchSpace(timings[pos + 1], LDR_SPACE))
183
+ return offset;
184
+ pos += 2;
185
+ }
186
+ return pos;
187
+ }
188
+ /**
189
+ * Decode raw IR timings as a Daikin128 message.
190
+ *
191
+ * The leader preamble (2x mark/space) is optional — hardware captures often
192
+ * miss it.
193
+ *
194
+ * @param timings Raw mark/space timing array in microseconds.
195
+ * @param offset Starting index in the timings array (default 0).
196
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
197
+ */
198
+ export function decodeDaikin128(timings, offset = 0, headerOptional = false) {
199
+ // Skip leader if present.
200
+ let pos = skipLeader(timings, offset);
201
+ // Section 1 (bytes 0–7): header + 8 bytes + footer (BIT_MARK + GAP).
202
+ const s1 = matchGenericBytes(timings, pos, timings.length - pos, SECTION_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
203
+ headerOptional);
204
+ if (!s1)
205
+ return null;
206
+ pos += s1.used;
207
+ // Section 2 (bytes 8–15): no header + 8 bytes + footer (FOOTER_MARK + GAP).
208
+ const s2 = matchGenericBytes(timings, pos, timings.length - pos, SECTION_LEN, 0, 0, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, FOOTER_MARK, GAP, true, undefined, undefined, false);
209
+ if (!s2)
210
+ return null;
211
+ // Concatenate sections into one 16-byte array.
212
+ const raw = new Uint8Array(STATE_LENGTH);
213
+ raw.set(s1.data, 0);
214
+ raw.set(s2.data, SECTION_LEN);
215
+ // Validate checksums.
216
+ // Section 1: sumNibbles(bytes 0–6, init=lower nibble of byte 7) & 0x0F === upper nibble of byte 7
217
+ const expectedSum1 = sumNibbles(raw, 0, SECTION_LEN - 1, raw[7] & 0x0f) & 0x0f;
218
+ if (((raw[7] >> 4) & 0x0f) !== expectedSum1)
219
+ return null;
220
+ // Section 2: sumNibbles(bytes 8–14) === byte 15
221
+ const expectedSum2 = sumNibbles(raw, SECTION_LEN, SECTION_LEN - 1);
222
+ if (raw[15] !== expectedSum2)
223
+ return null;
224
+ // Extract state from byte/bit positions.
225
+ const mode = (raw[1] & 0x0f);
226
+ const fan = ((raw[1] >> 4) & 0x0f);
227
+ // Clock: byte 2 = minutes BCD, byte 3 = hours BCD
228
+ const clockMins = bcdToUint8(raw[2]);
229
+ const clockHours = bcdToUint8(raw[3]);
230
+ const clock = clockHours * 60 + clockMins;
231
+ // On timer (byte 4): bits 0–5 = hours BCD, bit 6 = half-hour, bit 7 = enabled
232
+ const onTimerHours = bcdToUint8(raw[4] & 0x3f);
233
+ const onTimerHalf = !!(raw[4] & (1 << 6));
234
+ const onTimerEnabled = !!(raw[4] & (1 << 7));
235
+ const onTime = onTimerHours * 60 + (onTimerHalf ? 30 : 0);
236
+ // Off timer (byte 5): bits 0–5 = hours BCD, bit 6 = half-hour, bit 7 = enabled
237
+ const offTimerHours = bcdToUint8(raw[5] & 0x3f);
238
+ const offTimerHalf = !!(raw[5] & (1 << 6));
239
+ const offTimerEnabled = !!(raw[5] & (1 << 7));
240
+ const offTime = offTimerHours * 60 + (offTimerHalf ? 30 : 0);
241
+ // Temp (byte 6, BCD)
242
+ const temp = bcdToUint8(raw[6]);
243
+ return {
244
+ power: !!(raw[7] & (1 << 3)),
245
+ temp,
246
+ mode,
247
+ fan,
248
+ swingVertical: !!(raw[7] & (1 << 0)),
249
+ sleep: !!(raw[7] & (1 << 1)),
250
+ econo: !!(raw[9] & (1 << 2)),
251
+ ceiling: !!(raw[9] & (1 << 0)),
252
+ wall: !!(raw[9] & (1 << 3)),
253
+ clock,
254
+ onTimerEnabled,
255
+ onTime,
256
+ offTimerEnabled,
257
+ offTime,
258
+ };
259
+ }
260
+ //# sourceMappingURL=daikin128.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin128.js","sourceRoot":"","sources":["../../../src/protocols/daikin128.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAExE,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,GAAG,GAAG,KAAK,CAAC;AAClB,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,2CAA2C;AACrE,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,MAAM;CACL,CAAC;AAIX,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,QAAQ,GAAG,EAAE,CAAC;AA4BpB,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,MAAM,CAAC,GAAe,EAAE,OAAe,EAAE,MAAc,EAAE,EAAW;IAC3E,IAAI,EAAE;QAAE,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;;QAChD,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAE,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CACnB,GAAe,EAAE,OAAe,EAAE,SAAiB,EAAE,IAAY,EAAE,KAAa;IAEhF,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC;IAC5C,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAC7D,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAqB;IACrD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAE3B,0BAA0B;IAC1B,IAAI,IAAI,GAAW,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,CAAC,GAAG,IAAI,IAAI,KAAK,aAAa,CAAC,GAAG,CAAC;QAC1J,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;IAC5B,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEjC,sDAAsD;IACtD,IAAI,GAAG,GAAW,KAAK,CAAC,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;IACjD,IAAI,GAAG,KAAK,YAAY,CAAC,KAAK,IAAI,GAAG,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;QAChE,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI;YAAE,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,IAAI,IAAI,GAAG,KAAK,YAAY,CAAC,IAAI,IAAI,GAAG,KAAK,YAAY,CAAC,GAAG,IAAI,GAAG,KAAK,YAAY,CAAC,GAAG,IAAI,GAAG,KAAK,YAAY,CAAC,KAAK,IAAI,GAAG,KAAK,YAAY,CAAC,QAAQ,CAAC;QAClL,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC;IAC1B,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEhC,0DAA0D;IAC1D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACvB,IAAI,IAAI,IAAI,EAAE,GAAG,EAAE;YAAE,IAAI,GAAG,CAAC,CAAC;QAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,6EAA6E;IAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QACxB,IAAI,IAAI,IAAI,EAAE,GAAG,EAAE;YAAE,IAAI,GAAG,CAAC,CAAC;QAC9B,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;IAEjD,iFAAiF;IACjF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;QACzB,IAAI,IAAI,IAAI,EAAE,GAAG,EAAE;YAAE,IAAI,GAAG,CAAC,CAAC;QAC9B,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,CAAC;IAElD,qBAAqB;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtE,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE1B,wFAAwF;IACxF,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW;IACpC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAExC,oDAAoD;IACpD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC;IACrG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IAEvC,oBAAoB;IACpB,qGAAqG;IACrG,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACxE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAExC,oDAAoD;IACpD,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;IAExD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,MAAM,UAAU,aAAa,CAAC,KAAqB,EAAE,MAAM,GAAG,CAAC;IAC7D,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAgB,EAAE,MAAM,GAAG,CAAC;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,4BAA4B;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QAED,sCAAsC;QACtC,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC1B,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS;YAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS;YACtC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU;YACzC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG;YAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK;SACrD,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAExD,2DAA2D;QAC3D,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC1B,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;YAC7B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS;YACtC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU;YACzC,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG;YACjC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK;SAClD,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,UAAU,CACjB,OAAiB,EACjB,MAAc;IAEd,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,sCAAsC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAE,EAAE,QAAQ,CAAC;YAAE,OAAO,MAAM,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAE,EAAE,SAAS,CAAC;YAAE,OAAO,MAAM,CAAC;QAC7D,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAiB,EACjB,SAAiB,CAAC,EAClB,iBAA0B,KAAK;IAE/B,0BAA0B;IAC1B,IAAI,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtC,qEAAqE;IACrE,MAAM,EAAE,GAAG,iBAAiB,CAC1B,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,WAAW,EAC/C,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,uCAAuC;IAC1E,cAAc,CACf,CAAC;IACF,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;IAEf,4EAA4E;IAC5E,MAAM,EAAE,GAAG,iBAAiB,CAC1B,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,WAAW,EAC/C,CAAC,EAAE,CAAC,EACJ,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,UAAU,EACpB,WAAW,EAAE,GAAG,EAChB,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAClC,CAAC;IACF,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAErB,+CAA+C;IAC/C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAE9B,sBAAsB;IACtB,kGAAkG;IAClG,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChF,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAE1D,gDAAgD;IAChD,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;IACnE,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAE1C,yCAAyC;IACzC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAuB,CAAC;IACpD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAsB,CAAC;IAEzD,kDAAkD;IAClD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,GAAG,EAAE,GAAG,SAAS,CAAC;IAE1C,8EAA8E;IAC9E,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1D,+EAA+E;IAC/E,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,aAAa,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7D,qBAAqB;IACrB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;IAEjC,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,IAAI;QACJ,IAAI;QACJ,GAAG;QACH,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5B,KAAK;QACL,cAAc;QACd,MAAM;QACN,eAAe;QACf,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Daikin 152-bit (19-byte) IR protocol encoder.
3
+ *
4
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
5
+ */
6
+ import type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
7
+ export { DaikinMode, DaikinFan } from "./daikin_common.js";
8
+ export type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
9
+ export interface Daikin152State {
10
+ power?: boolean;
11
+ /** Temperature in °C (10–32). Ignored in Fan/Dry modes. */
12
+ temp?: number;
13
+ mode?: DaikinModeValue;
14
+ /** Fan speed: 1–5, or DaikinFan.Auto / DaikinFan.Quiet. */
15
+ fan?: DaikinFanValue;
16
+ swingVertical?: boolean;
17
+ quiet?: boolean;
18
+ powerful?: boolean;
19
+ econo?: boolean;
20
+ sensor?: boolean;
21
+ comfort?: boolean;
22
+ }
23
+ /**
24
+ * Build the raw 19-byte Daikin152 state from a state object.
25
+ */
26
+ export declare function buildDaikin152Raw(state: Daikin152State): Uint8Array;
27
+ /**
28
+ * Encode a Daikin152 AC state into raw IR timings.
29
+ */
30
+ export declare function sendDaikin152(state: Daikin152State, repeat?: number): number[];
31
+ /**
32
+ * Encode a raw 19-byte Daikin152 state into IR timings.
33
+ *
34
+ * Matches IRremoteESP8266 `IRsend::sendDaikin152`.
35
+ */
36
+ export declare function encodeDaikin152Raw(data: Uint8Array, repeat?: number): number[];
37
+ /**
38
+ * Decode raw IR timings as a Daikin152 message.
39
+ *
40
+ * The 5-bit leader preamble is optional — hardware captures often miss it.
41
+ *
42
+ * @param timings Raw mark/space timing array in microseconds.
43
+ * @param offset Starting index in the timings array (default 0).
44
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
45
+ */
46
+ export declare function decodeDaikin152(timings: number[], offset?: number, headerOptional?: boolean): Daikin152State | null;
47
+ //# sourceMappingURL=daikin152.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin152.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin152.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqB1E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAwFnE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAGzE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAqCzE;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CA2CvB"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Daikin 152-bit (19-byte) IR protocol encoder.
3
+ *
4
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
5
+ */
6
+ import { sumBytes, sendGeneric, sendGenericBytes } from "../encode.js";
7
+ import { matchGeneric, matchGenericBytes } from "../decode.js";
8
+ import { DaikinMode, DaikinFan, DAIKIN_SWING_ON, DAIKIN_SWING_OFF, DAIKIN_MIN_TEMP, DAIKIN_MAX_TEMP, DAIKIN2_MIN_COOL_TEMP, } from "./daikin_common.js";
9
+ export { DaikinMode, DaikinFan } from "./daikin_common.js";
10
+ // ---------------------------------------------------------------------------
11
+ // Timing constants
12
+ // ---------------------------------------------------------------------------
13
+ const HDR_MARK = 3492;
14
+ const HDR_SPACE = 1718;
15
+ const BIT_MARK = 433;
16
+ const ONE_SPACE = 1529;
17
+ const ZERO_SPACE = 433; // kDaikin152ZeroSpace = kDaikin152BitMark
18
+ const GAP = 25182;
19
+ const LEADER_BITS = 5;
20
+ const STATE_LENGTH = 19;
21
+ const FAN_TEMP = 0x60; // 96 — special temp for fan-only mode
22
+ const DRY_TEMP = DAIKIN2_MIN_COOL_TEMP; // 18
23
+ // ---------------------------------------------------------------------------
24
+ // Build raw byte array
25
+ // ---------------------------------------------------------------------------
26
+ function defaultState() {
27
+ const raw = new Uint8Array(STATE_LENGTH);
28
+ raw[0] = 0x11;
29
+ raw[1] = 0xda;
30
+ raw[2] = 0x27;
31
+ // bytes 3–14 are 0x00
32
+ raw[15] = 0xc5;
33
+ // bytes 16–17 are 0x00
34
+ // byte 18 = checksum (set later)
35
+ return raw;
36
+ }
37
+ // Bit manipulation helpers for byte arrays
38
+ function setBit(raw, byteIdx, bitIdx, on) {
39
+ if (on)
40
+ raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
41
+ else
42
+ raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
43
+ }
44
+ function setBitsRange(raw, byteIdx, bitOffset, size, value) {
45
+ const mask = ((1 << size) - 1) << bitOffset;
46
+ raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
47
+ }
48
+ /**
49
+ * Build the raw 19-byte Daikin152 state from a state object.
50
+ */
51
+ export function buildDaikin152Raw(state) {
52
+ const raw = defaultState();
53
+ // --- Mode (byte 5, bits 4–6) ---
54
+ let mode = state.mode ?? DaikinMode.Auto;
55
+ switch (mode) {
56
+ case DaikinMode.Auto:
57
+ case DaikinMode.Cool:
58
+ case DaikinMode.Heat:
59
+ case DaikinMode.Dry:
60
+ case DaikinMode.Fan:
61
+ break;
62
+ default:
63
+ mode = DaikinMode.Auto;
64
+ }
65
+ setBitsRange(raw, 5, 4, 3, mode);
66
+ // --- Temp (byte 6, bits 1–7) ---
67
+ // C++ behaviour: setMode() sets a mode-specific default temp for Fan/Dry,
68
+ // then setTemp() overrides if the caller provides one.
69
+ let temp;
70
+ if (state.temp !== undefined) {
71
+ // Caller provided temp — apply same logic as C++ setTemp()
72
+ if (state.temp === FAN_TEMP) {
73
+ temp = FAN_TEMP; // Special fan-only temp passthrough
74
+ }
75
+ else {
76
+ const minTemp = mode === DaikinMode.Heat ? DAIKIN_MIN_TEMP : DAIKIN2_MIN_COOL_TEMP;
77
+ temp = Math.min(Math.max(state.temp, minTemp), DAIKIN_MAX_TEMP);
78
+ }
79
+ }
80
+ else {
81
+ // No temp provided — use mode-specific default
82
+ if (mode === DaikinMode.Fan)
83
+ temp = FAN_TEMP;
84
+ else if (mode === DaikinMode.Dry)
85
+ temp = DRY_TEMP;
86
+ else
87
+ temp = 25;
88
+ }
89
+ setBitsRange(raw, 6, 1, 7, temp);
90
+ // --- Fan (byte 8, bits 4–7) ---
91
+ let fan;
92
+ const fanInput = state.fan ?? DaikinFan.Auto;
93
+ if (fanInput === DaikinFan.Quiet || fanInput === DaikinFan.Auto) {
94
+ fan = fanInput;
95
+ }
96
+ else if (fanInput < 1 || fanInput > 5) {
97
+ fan = DaikinFan.Auto;
98
+ }
99
+ else {
100
+ fan = fanInput + 2; // Internal encoding: speed + 2
101
+ }
102
+ setBitsRange(raw, 8, 4, 4, fan);
103
+ // --- SwingV (byte 8, bits 0–3) ---
104
+ const swingV = state.swingVertical ?? false;
105
+ setBitsRange(raw, 8, 0, 4, swingV ? DAIKIN_SWING_ON : DAIKIN_SWING_OFF);
106
+ // --- Power (byte 5, bit 0) ---
107
+ setBit(raw, 5, 0, state.power ?? false);
108
+ // --- Quiet, Powerful, Econo, Comfort with mutual exclusions ---
109
+ // Apply in same order as C++ class: quiet → powerful → econo → comfort
110
+ let quiet = state.quiet ?? false;
111
+ let powerful = state.powerful ?? false;
112
+ let econo = state.econo ?? false;
113
+ let comfort = state.comfort ?? false;
114
+ // Resolve mutual exclusions (same logic as C++ setters called in order)
115
+ if (quiet)
116
+ powerful = false;
117
+ if (powerful) {
118
+ quiet = false;
119
+ comfort = false;
120
+ econo = false;
121
+ }
122
+ if (econo)
123
+ powerful = false;
124
+ if (comfort) {
125
+ powerful = false;
126
+ // Comfort also forces fan=auto and swing=off
127
+ setBitsRange(raw, 8, 4, 4, DaikinFan.Auto);
128
+ setBitsRange(raw, 8, 0, 4, DAIKIN_SWING_OFF);
129
+ }
130
+ setBit(raw, 13, 5, quiet); // Byte 13, bit 5
131
+ setBit(raw, 13, 0, powerful); // Byte 13, bit 0
132
+ setBit(raw, 16, 2, econo); // Byte 16, bit 2
133
+ setBit(raw, 16, 1, comfort); // Byte 16, bit 1
134
+ setBit(raw, 16, 3, state.sensor ?? false); // Byte 16, bit 3
135
+ // --- Checksum (byte 18) ---
136
+ raw[18] = sumBytes(raw, 0, STATE_LENGTH - 1);
137
+ return raw;
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // Public API
141
+ // ---------------------------------------------------------------------------
142
+ /**
143
+ * Encode a Daikin152 AC state into raw IR timings.
144
+ */
145
+ export function sendDaikin152(state, repeat = 0) {
146
+ const raw = buildDaikin152Raw(state);
147
+ return encodeDaikin152Raw(raw, repeat);
148
+ }
149
+ /**
150
+ * Encode a raw 19-byte Daikin152 state into IR timings.
151
+ *
152
+ * Matches IRremoteESP8266 `IRsend::sendDaikin152`.
153
+ */
154
+ export function encodeDaikin152Raw(data, repeat = 0) {
155
+ const result = [];
156
+ for (let r = 0; r <= repeat; r++) {
157
+ // Leader: 5 bits of zero (no header)
158
+ const leader = sendGeneric({
159
+ headerMark: 0,
160
+ headerSpace: 0,
161
+ oneMark: BIT_MARK,
162
+ oneSpace: ONE_SPACE,
163
+ zeroMark: BIT_MARK,
164
+ zeroSpace: ZERO_SPACE,
165
+ footerMark: BIT_MARK,
166
+ gap: GAP,
167
+ data: 0n,
168
+ nbits: LEADER_BITS,
169
+ msbFirst: false,
170
+ });
171
+ for (let i = 0; i < leader.length; i++)
172
+ result.push(leader[i]);
173
+ // Header + Data + Footer
174
+ const frame = sendGenericBytes({
175
+ headerMark: HDR_MARK,
176
+ headerSpace: HDR_SPACE,
177
+ oneMark: BIT_MARK,
178
+ oneSpace: ONE_SPACE,
179
+ zeroMark: BIT_MARK,
180
+ zeroSpace: ZERO_SPACE,
181
+ footerMark: BIT_MARK,
182
+ gap: GAP,
183
+ data,
184
+ msbFirst: false,
185
+ });
186
+ for (let i = 0; i < frame.length; i++)
187
+ result.push(frame[i]);
188
+ }
189
+ return result;
190
+ }
191
+ // ---------------------------------------------------------------------------
192
+ // Decode API
193
+ // ---------------------------------------------------------------------------
194
+ /**
195
+ * Try to skip a leader section (e.g. 5 zero bits + footer + gap).
196
+ * Returns the new offset past the leader, or the original offset if no leader.
197
+ */
198
+ function skipLeader(timings, offset) {
199
+ const result = matchGeneric(timings, offset, timings.length - offset, LEADER_BITS, 0, 0, // no header
200
+ BIT_MARK, ONE_SPACE, // oneMark, oneSpace
201
+ BIT_MARK, ZERO_SPACE, // zeroMark, zeroSpace
202
+ BIT_MARK, GAP, // footerMark, gap
203
+ true);
204
+ return result ? offset + result.used : offset;
205
+ }
206
+ /**
207
+ * Decode raw IR timings as a Daikin152 message.
208
+ *
209
+ * The 5-bit leader preamble is optional — hardware captures often miss it.
210
+ *
211
+ * @param timings Raw mark/space timing array in microseconds.
212
+ * @param offset Starting index in the timings array (default 0).
213
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
214
+ */
215
+ export function decodeDaikin152(timings, offset = 0, headerOptional = false) {
216
+ // Skip leader if present.
217
+ let pos = skipLeader(timings, offset);
218
+ // Match main frame: header + 19 bytes (LSB-first) + footer.
219
+ const frame = matchGenericBytes(timings, pos, timings.length - pos, STATE_LENGTH, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
220
+ headerOptional);
221
+ if (!frame)
222
+ return null;
223
+ const raw = frame.data;
224
+ // Validate checksum.
225
+ if (raw[18] !== sumBytes(raw, 0, STATE_LENGTH - 1))
226
+ return null;
227
+ // Extract state from byte/bit positions.
228
+ const mode = ((raw[5] >> 4) & 0b111);
229
+ const temp = (raw[6] >> 1) & 0x7F;
230
+ const fanInternal = (raw[8] >> 4) & 0x0F;
231
+ const fan = fanInternal === DaikinFan.Auto || fanInternal === DaikinFan.Quiet
232
+ ? fanInternal
233
+ : (fanInternal - 2);
234
+ return {
235
+ power: !!(raw[5] & 0x01),
236
+ temp,
237
+ mode,
238
+ fan,
239
+ swingVertical: (raw[8] & 0x0F) === DAIKIN_SWING_ON,
240
+ quiet: !!(raw[13] & (1 << 5)),
241
+ powerful: !!(raw[13] & (1 << 0)),
242
+ econo: !!(raw[16] & (1 << 2)),
243
+ comfort: !!(raw[16] & (1 << 1)),
244
+ sensor: !!(raw[16] & (1 << 3)),
245
+ };
246
+ }
247
+ //# sourceMappingURL=daikin152.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin152.js","sourceRoot":"","sources":["../../../src/protocols/daikin152.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Daikin 160-bit (20-byte) IR protocol encoder.
3
+ *
4
+ * 2 sections: bytes 0–6 (7 bytes) + bytes 7–19 (13 bytes).
5
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
6
+ */
7
+ import type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
8
+ export { DaikinMode, DaikinFan } from "./daikin_common.js";
9
+ export type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
10
+ export declare const Daikin160SwingV: {
11
+ readonly Lowest: 1;
12
+ readonly Low: 2;
13
+ readonly Middle: 3;
14
+ readonly High: 4;
15
+ readonly Highest: 5;
16
+ readonly Auto: 15;
17
+ };
18
+ export type Daikin160SwingVValue = (typeof Daikin160SwingV)[keyof typeof Daikin160SwingV];
19
+ export interface Daikin160State {
20
+ power?: boolean;
21
+ temp?: number;
22
+ mode?: DaikinModeValue;
23
+ fan?: DaikinFanValue;
24
+ swingVertical?: Daikin160SwingVValue;
25
+ }
26
+ export declare function buildDaikin160Raw(state: Daikin160State): Uint8Array;
27
+ export declare function sendDaikin160(state: Daikin160State, repeat?: number): number[];
28
+ export declare function encodeDaikin160Raw(data: Uint8Array, repeat?: number): number[];
29
+ /**
30
+ * Decode raw IR timings as a Daikin160 message.
31
+ *
32
+ * @param timings Raw mark/space timing array in microseconds.
33
+ * @param offset Starting index in the timings array (default 0).
34
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
35
+ */
36
+ export declare function decodeDaikin160(timings: number[], offset?: number, headerOptional?: boolean): Daikin160State | null;
37
+ //# sourceMappingURL=daikin160.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin160.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin160.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgB1E,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAM1F,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAmCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAiCnE;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAgBzE;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CAwDvB"}