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,353 @@
1
+ "use strict";
2
+ /**
3
+ * Daikin ESP / standard 280-bit (35-byte) IR protocol encoder.
4
+ *
5
+ * Header (5-bit) + 3 sections: bytes 0–7 (8) + bytes 8–15 (8) + bytes 16–34 (19).
6
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DaikinFan = exports.DaikinMode = void 0;
10
+ exports.buildDaikinESPRaw = buildDaikinESPRaw;
11
+ exports.sendDaikinESP = sendDaikinESP;
12
+ exports.encodeDaikinESPRaw = encodeDaikinESPRaw;
13
+ exports.decodeDaikinESP = decodeDaikinESP;
14
+ const encode_js_1 = require("../encode.js");
15
+ const decode_js_1 = require("../decode.js");
16
+ const daikin_common_js_1 = require("./daikin_common.js");
17
+ var daikin_common_js_2 = require("./daikin_common.js");
18
+ Object.defineProperty(exports, "DaikinMode", { enumerable: true, get: function () { return daikin_common_js_2.DaikinMode; } });
19
+ Object.defineProperty(exports, "DaikinFan", { enumerable: true, get: function () { return daikin_common_js_2.DaikinFan; } });
20
+ // ---------------------------------------------------------------------------
21
+ // Timing constants
22
+ // ---------------------------------------------------------------------------
23
+ const HDR_MARK = 3650;
24
+ const HDR_SPACE = 1623;
25
+ const BIT_MARK = 428;
26
+ const ONE_SPACE = 1280;
27
+ const ZERO_SPACE = 428;
28
+ const GAP = 29000;
29
+ const FOOTER_GAP = ZERO_SPACE + GAP; // 29428
30
+ const STATE_LENGTH = 35;
31
+ const SECTION1_LEN = 8;
32
+ const SECTION2_LEN = 8;
33
+ const HEADER_BITS = 5;
34
+ const UNUSED_TIME = 0x600;
35
+ // ---------------------------------------------------------------------------
36
+ // Bit helpers
37
+ // ---------------------------------------------------------------------------
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
+ /** Set a multi-byte little-endian bitfield spanning byte boundaries. */
49
+ function setFieldLE(raw, startByte, startBit, totalBits, value) {
50
+ let v = value;
51
+ let byte = startByte;
52
+ let bit = startBit;
53
+ let remaining = totalBits;
54
+ while (remaining > 0) {
55
+ const bitsInThisByte = Math.min(remaining, 8 - bit);
56
+ const mask = ((1 << bitsInThisByte) - 1) << bit;
57
+ raw[byte] = (raw[byte] & ~mask) | (((v & ((1 << bitsInThisByte) - 1)) << bit) & mask);
58
+ v >>>= bitsInThisByte;
59
+ remaining -= bitsInThisByte;
60
+ byte++;
61
+ bit = 0;
62
+ }
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // Build
66
+ // ---------------------------------------------------------------------------
67
+ function defaultState() {
68
+ const raw = new Uint8Array(STATE_LENGTH);
69
+ raw[0] = 0x11;
70
+ raw[1] = 0xda;
71
+ raw[2] = 0x27;
72
+ raw[4] = 0xc5;
73
+ raw[8] = 0x11;
74
+ raw[9] = 0xda;
75
+ raw[10] = 0x27;
76
+ raw[12] = 0x42;
77
+ raw[16] = 0x11;
78
+ raw[17] = 0xda;
79
+ raw[18] = 0x27;
80
+ raw[21] = 0x49; // Power=1, OnTimer=0, OffTimer=0, :1=1, Mode=kDaikinHeat(0b100)
81
+ raw[22] = 0x1e; // Temp = 15°C * 2 = 30 = 0x1E
82
+ raw[24] = 0xb0; // SwingV=0, Fan=0xB
83
+ raw[27] = 0x06;
84
+ raw[28] = 0x60;
85
+ raw[31] = 0xc0;
86
+ return raw;
87
+ }
88
+ function buildDaikinESPRaw(state) {
89
+ const raw = defaultState();
90
+ // --- Section 1 (bytes 0–7) ---
91
+ // Comfort (byte 6, bit 4)
92
+ setBit(raw, 6, 4, state.comfort ?? false);
93
+ // --- Section 2 (bytes 8–15) ---
94
+ // CurrentTime (bytes 13–14, bits 0–10 starting at byte 13 bit 0)
95
+ if (state.currentTime !== undefined) {
96
+ let mins = state.currentTime;
97
+ if (mins > 24 * 60)
98
+ mins = 0;
99
+ setFieldLE(raw, 13, 0, 11, mins);
100
+ }
101
+ // CurrentDay (byte 14, bits 3–5)
102
+ if (state.currentDay !== undefined) {
103
+ setBitsRange(raw, 14, 3, 3, state.currentDay & 0x7);
104
+ }
105
+ // --- Section 3 (bytes 16–34) ---
106
+ // Mode (byte 21, bits 4–6)
107
+ let mode = state.mode ?? daikin_common_js_1.DaikinMode.Auto;
108
+ if (!(mode === daikin_common_js_1.DaikinMode.Auto || mode === daikin_common_js_1.DaikinMode.Cool || mode === daikin_common_js_1.DaikinMode.Heat || mode === daikin_common_js_1.DaikinMode.Fan || mode === daikin_common_js_1.DaikinMode.Dry))
109
+ mode = daikin_common_js_1.DaikinMode.Auto;
110
+ setBitsRange(raw, 21, 4, 3, mode);
111
+ // Power (byte 21, bit 0)
112
+ setBit(raw, 21, 0, state.power ?? false);
113
+ // Temp (byte 22) — stored as degrees * 2
114
+ const temp = Math.min(Math.max(state.temp ?? 25, daikin_common_js_1.DAIKIN_MIN_TEMP), daikin_common_js_1.DAIKIN_MAX_TEMP);
115
+ raw[22] = Math.round(temp * 2);
116
+ // Fan (byte 24, bits 4–7)
117
+ const fanInput = state.fan ?? daikin_common_js_1.DaikinFan.Auto;
118
+ let fan;
119
+ if (fanInput === daikin_common_js_1.DaikinFan.Quiet || fanInput === daikin_common_js_1.DaikinFan.Auto)
120
+ fan = fanInput;
121
+ else if (fanInput < 1 || fanInput > 5)
122
+ fan = daikin_common_js_1.DaikinFan.Auto;
123
+ else
124
+ fan = fanInput + 2;
125
+ setBitsRange(raw, 24, 4, 4, fan);
126
+ // SwingV (byte 24, bits 0–3)
127
+ setBitsRange(raw, 24, 0, 4, (state.swingVertical ?? false) ? daikin_common_js_1.DAIKIN_SWING_ON : daikin_common_js_1.DAIKIN_SWING_OFF);
128
+ // SwingH (byte 25, bits 0–3)
129
+ setBitsRange(raw, 25, 0, 4, (state.swingHorizontal ?? false) ? daikin_common_js_1.DAIKIN_SWING_ON : daikin_common_js_1.DAIKIN_SWING_OFF);
130
+ // On/Off timers (bytes 26–28, 12 bits each)
131
+ if (state.onTime !== undefined) {
132
+ setBit(raw, 21, 1, true); // OnTimer enable
133
+ setFieldLE(raw, 26, 0, 12, state.onTime);
134
+ }
135
+ else {
136
+ setBit(raw, 21, 1, false);
137
+ setFieldLE(raw, 26, 0, 12, UNUSED_TIME);
138
+ }
139
+ if (state.offTime !== undefined) {
140
+ setBit(raw, 21, 2, true); // OffTimer enable
141
+ setFieldLE(raw, 27, 4, 12, state.offTime);
142
+ }
143
+ else {
144
+ setBit(raw, 21, 2, false);
145
+ setFieldLE(raw, 27, 4, 12, UNUSED_TIME);
146
+ }
147
+ // Quiet/Powerful/Econo with mutual exclusions
148
+ let quiet = state.quiet ?? false;
149
+ let powerful = state.powerful ?? false;
150
+ let econo = state.econo ?? false;
151
+ if (quiet)
152
+ powerful = false;
153
+ if (powerful) {
154
+ quiet = false;
155
+ econo = false;
156
+ }
157
+ if (econo)
158
+ powerful = false;
159
+ setBit(raw, 29, 5, quiet); // Byte 29, bit 5
160
+ setBit(raw, 29, 0, powerful); // Byte 29, bit 0
161
+ setBit(raw, 32, 2, econo); // Byte 32, bit 2
162
+ // Other flags
163
+ setBit(raw, 32, 1, state.sensor ?? false);
164
+ setBit(raw, 32, 7, !(state.weeklyTimer ?? true)); // Inverted: bit=1 means disabled
165
+ setBit(raw, 33, 1, state.mold ?? false);
166
+ // The constant bit in byte 21 bit 3 should always be 1
167
+ setBit(raw, 21, 3, true);
168
+ // --- Checksums ---
169
+ raw[7] = (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1);
170
+ raw[15] = (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, SECTION1_LEN + SECTION2_LEN - 1);
171
+ raw[34] = (0, encode_js_1.sumBytes)(raw, SECTION1_LEN + SECTION2_LEN, STATE_LENGTH - 1);
172
+ return raw;
173
+ }
174
+ // ---------------------------------------------------------------------------
175
+ // Send
176
+ // ---------------------------------------------------------------------------
177
+ function sendDaikinESP(state, repeat = 0) {
178
+ return encodeDaikinESPRaw(buildDaikinESPRaw(state), repeat);
179
+ }
180
+ function encodeDaikinESPRaw(data, repeat = 0) {
181
+ const result = [];
182
+ const sectionOpts = {
183
+ headerMark: HDR_MARK, headerSpace: HDR_SPACE,
184
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
185
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
186
+ footerMark: BIT_MARK, gap: FOOTER_GAP, msbFirst: false,
187
+ };
188
+ for (let r = 0; r <= repeat; r++) {
189
+ // Header: 5 bits of zero (no header mark/space)
190
+ const hdr = (0, encode_js_1.sendGeneric)({
191
+ headerMark: 0, headerSpace: 0,
192
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
193
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
194
+ footerMark: BIT_MARK, gap: FOOTER_GAP,
195
+ data: 0n, nbits: HEADER_BITS, msbFirst: false,
196
+ });
197
+ for (let i = 0; i < hdr.length; i++)
198
+ result.push(hdr[i]);
199
+ // Section 1 (bytes 0–7)
200
+ const s1 = (0, encode_js_1.sendGenericBytes)({ ...sectionOpts, data: data.subarray(0, SECTION1_LEN) });
201
+ for (let i = 0; i < s1.length; i++)
202
+ result.push(s1[i]);
203
+ // Section 2 (bytes 8–15)
204
+ const s2 = (0, encode_js_1.sendGenericBytes)({ ...sectionOpts, data: data.subarray(SECTION1_LEN, SECTION1_LEN + SECTION2_LEN) });
205
+ for (let i = 0; i < s2.length; i++)
206
+ result.push(s2[i]);
207
+ // Section 3 (bytes 16–34)
208
+ const s3 = (0, encode_js_1.sendGenericBytes)({ ...sectionOpts, data: data.subarray(SECTION1_LEN + SECTION2_LEN) });
209
+ for (let i = 0; i < s3.length; i++)
210
+ result.push(s3[i]);
211
+ }
212
+ return result;
213
+ }
214
+ // ---------------------------------------------------------------------------
215
+ // Decode API
216
+ // ---------------------------------------------------------------------------
217
+ const SECTION3_LEN = STATE_LENGTH - SECTION1_LEN - SECTION2_LEN; // 19
218
+ /** Read a multi-byte little-endian bitfield (inverse of setFieldLE). */
219
+ function getFieldLE(raw, startByte, startBit, totalBits) {
220
+ let value = 0;
221
+ let byte = startByte;
222
+ let bit = startBit;
223
+ let remaining = totalBits;
224
+ let shift = 0;
225
+ while (remaining > 0) {
226
+ const bitsInThisByte = Math.min(remaining, 8 - bit);
227
+ const mask = ((1 << bitsInThisByte) - 1) << bit;
228
+ value |= ((raw[byte] & mask) >>> bit) << shift;
229
+ shift += bitsInThisByte;
230
+ remaining -= bitsInThisByte;
231
+ byte++;
232
+ bit = 0;
233
+ }
234
+ return value;
235
+ }
236
+ /**
237
+ * Try to skip the 5-bit zero leader (no header mark/space).
238
+ * Returns the new offset past the leader, or the original offset if no leader.
239
+ */
240
+ function skipLeader(timings, offset) {
241
+ const result = (0, decode_js_1.matchGeneric)(timings, offset, timings.length - offset, HEADER_BITS, 0, 0, // no header
242
+ BIT_MARK, ONE_SPACE, // oneMark, oneSpace
243
+ BIT_MARK, ZERO_SPACE, // zeroMark, zeroSpace
244
+ BIT_MARK, FOOTER_GAP, // footerMark, gap
245
+ true);
246
+ return result ? offset + result.used : offset;
247
+ }
248
+ /**
249
+ * Decode raw IR timings as a DaikinESP message.
250
+ *
251
+ * The 5-bit leader preamble is optional — hardware captures often miss it.
252
+ *
253
+ * @param timings Raw mark/space timing array in microseconds.
254
+ * @param offset Starting index in the timings array (default 0).
255
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
256
+ */
257
+ function decodeDaikinESP(timings, offset = 0, headerOptional = false) {
258
+ // Skip leader if present.
259
+ let pos = skipLeader(timings, offset);
260
+ // Section 1 (bytes 0–7): header + 8 bytes + footer.
261
+ const s1 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, SECTION1_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, FOOTER_GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
262
+ headerOptional);
263
+ if (!s1)
264
+ return null;
265
+ pos += s1.used;
266
+ // Section 2 (bytes 8–15): header + 8 bytes + footer.
267
+ const s2 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, SECTION2_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, FOOTER_GAP, true, undefined, undefined, false);
268
+ if (!s2)
269
+ return null;
270
+ pos += s2.used;
271
+ // Section 3 (bytes 16–34): header + 19 bytes + footer.
272
+ const s3 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, SECTION3_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, FOOTER_GAP, true, undefined, undefined, false);
273
+ if (!s3)
274
+ return null;
275
+ // Concatenate sections into one 35-byte array.
276
+ const raw = new Uint8Array(STATE_LENGTH);
277
+ raw.set(s1.data, 0);
278
+ raw.set(s2.data, SECTION1_LEN);
279
+ raw.set(s3.data, SECTION1_LEN + SECTION2_LEN);
280
+ // Validate checksums.
281
+ if (raw[7] !== (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1))
282
+ return null;
283
+ if (raw[15] !== (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, SECTION1_LEN + SECTION2_LEN - 1))
284
+ return null;
285
+ if (raw[34] !== (0, encode_js_1.sumBytes)(raw, SECTION1_LEN + SECTION2_LEN, STATE_LENGTH - 1))
286
+ return null;
287
+ // Extract state from byte/bit positions.
288
+ // --- Section 1 fields ---
289
+ const comfort = !!(raw[6] & (1 << 4));
290
+ // --- Section 2 fields ---
291
+ // CurrentTime: 11-bit LE field at byte 13, bit 0
292
+ const currentTime = getFieldLE(raw, 13, 0, 11);
293
+ // CurrentDay: byte 14, bits 3–5
294
+ const currentDay = (raw[14] >> 3) & 0x07;
295
+ // --- Section 3 fields ---
296
+ // Mode (byte 21, bits 4–6)
297
+ const mode = ((raw[21] >> 4) & 0b111);
298
+ // Power (byte 21, bit 0)
299
+ const power = !!(raw[21] & 0x01);
300
+ // On/Off timer enables (byte 21, bits 1–2)
301
+ const onTimerEnabled = !!(raw[21] & (1 << 1));
302
+ const offTimerEnabled = !!(raw[21] & (1 << 2));
303
+ // Temp (byte 22) — stored as degrees * 2
304
+ const temp = raw[22] / 2;
305
+ // Fan (byte 24, bits 4–7)
306
+ const fanInternal = (raw[24] >> 4) & 0x0f;
307
+ const fan = fanInternal === daikin_common_js_1.DaikinFan.Auto || fanInternal === daikin_common_js_1.DaikinFan.Quiet
308
+ ? fanInternal
309
+ : (fanInternal - 2);
310
+ // SwingV (byte 24, bits 0–3)
311
+ const swingVertical = (raw[24] & 0x0f) === daikin_common_js_1.DAIKIN_SWING_ON;
312
+ // SwingH (byte 25, bits 0–3)
313
+ const swingHorizontal = (raw[25] & 0x0f) === daikin_common_js_1.DAIKIN_SWING_ON;
314
+ // On timer: 12-bit LE field at byte 26, bit 0
315
+ const onTimeRaw = getFieldLE(raw, 26, 0, 12);
316
+ // Off timer: 12-bit LE field at byte 27, bit 4
317
+ const offTimeRaw = getFieldLE(raw, 27, 4, 12);
318
+ // Quiet (byte 29, bit 5)
319
+ const quiet = !!(raw[29] & (1 << 5));
320
+ // Powerful (byte 29, bit 0)
321
+ const powerful = !!(raw[29] & (1 << 0));
322
+ // Econo (byte 32, bit 2)
323
+ const econo = !!(raw[32] & (1 << 2));
324
+ // Sensor (byte 32, bit 1)
325
+ const sensor = !!(raw[32] & (1 << 1));
326
+ // WeeklyTimer (byte 32, bit 7) — inverted: bit=1 means disabled
327
+ const weeklyTimer = !(raw[32] & (1 << 7));
328
+ // Mold (byte 33, bit 1)
329
+ const mold = !!(raw[33] & (1 << 1));
330
+ const result = {
331
+ power,
332
+ temp,
333
+ mode,
334
+ fan,
335
+ swingVertical,
336
+ swingHorizontal,
337
+ quiet,
338
+ powerful,
339
+ econo,
340
+ mold,
341
+ comfort,
342
+ sensor,
343
+ weeklyTimer,
344
+ currentTime,
345
+ currentDay,
346
+ };
347
+ if (onTimerEnabled)
348
+ result.onTime = onTimeRaw;
349
+ if (offTimerEnabled)
350
+ result.offTime = offTimeRaw;
351
+ return result;
352
+ }
353
+ //# sourceMappingURL=daikin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin.js","sourceRoot":"","sources":["../../../src/protocols/daikin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
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
+ export declare const Daikin128Mode: {
9
+ readonly Dry: 1;
10
+ readonly Cool: 2;
11
+ readonly Fan: 4;
12
+ readonly Heat: 8;
13
+ readonly Auto: 10;
14
+ };
15
+ export type Daikin128ModeValue = (typeof Daikin128Mode)[keyof typeof Daikin128Mode];
16
+ export declare const Daikin128Fan: {
17
+ readonly Auto: 1;
18
+ readonly High: 2;
19
+ readonly Med: 4;
20
+ readonly Low: 8;
21
+ readonly Powerful: 3;
22
+ readonly Quiet: 9;
23
+ };
24
+ export type Daikin128FanValue = (typeof Daikin128Fan)[keyof typeof Daikin128Fan];
25
+ export interface Daikin128State {
26
+ power?: boolean;
27
+ temp?: number;
28
+ mode?: Daikin128ModeValue;
29
+ fan?: Daikin128FanValue;
30
+ swingVertical?: boolean;
31
+ sleep?: boolean;
32
+ econo?: boolean;
33
+ /** Ceiling light control. */
34
+ ceiling?: boolean;
35
+ /** Wall light control. */
36
+ wall?: boolean;
37
+ /** Clock: minutes since midnight (0–1439). */
38
+ clock?: number;
39
+ onTimerEnabled?: boolean;
40
+ /** On timer: minutes since midnight (resolution 30 min). */
41
+ onTime?: number;
42
+ offTimerEnabled?: boolean;
43
+ /** Off timer: minutes since midnight (resolution 30 min). */
44
+ offTime?: number;
45
+ }
46
+ export declare function buildDaikin128Raw(state: Daikin128State): Uint8Array;
47
+ export declare function sendDaikin128(state: Daikin128State, repeat?: number): number[];
48
+ export declare function encodeDaikin128Raw(data: Uint8Array, repeat?: number): number[];
49
+ /**
50
+ * Decode raw IR timings as a Daikin128 message.
51
+ *
52
+ * The leader preamble (2x mark/space) is optional — hardware captures often
53
+ * miss it.
54
+ *
55
+ * @param timings Raw mark/space timing array in microseconds.
56
+ * @param offset Starting index in the timings array (default 0).
57
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
58
+ */
59
+ export declare function decodeDaikin128(timings: number[], offset?: number, headerOptional?: boolean): Daikin128State | null;
60
+ //# sourceMappingURL=daikin128.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin128.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin128.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyBH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAEpF,eAAO,MAAM,YAAY;;;;;;;CAOf,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AASjF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA8BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAqEnE;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,CA+BzE;AAyBD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CAkFvB"}