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,345 @@
1
+ "use strict";
2
+ /**
3
+ * Daikin312 312-bit (39-byte) IR protocol encoder.
4
+ *
5
+ * 5-bit header + 2 sections: bytes 0–19 (20) + bytes 20–38 (19).
6
+ * 36700 Hz carrier. Very similar to Daikin2 with field repositioning.
7
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DaikinFan = exports.DaikinMode = void 0;
11
+ exports.buildDaikin312Raw = buildDaikin312Raw;
12
+ exports.sendDaikin312 = sendDaikin312;
13
+ exports.encodeDaikin312Raw = encodeDaikin312Raw;
14
+ exports.decodeDaikin312 = decodeDaikin312;
15
+ const encode_js_1 = require("../encode.js");
16
+ const decode_js_1 = require("../decode.js");
17
+ const daikin_common_js_1 = require("./daikin_common.js");
18
+ var daikin_common_js_2 = require("./daikin_common.js");
19
+ Object.defineProperty(exports, "DaikinMode", { enumerable: true, get: function () { return daikin_common_js_2.DaikinMode; } });
20
+ Object.defineProperty(exports, "DaikinFan", { enumerable: true, get: function () { return daikin_common_js_2.DaikinFan; } });
21
+ // ---------------------------------------------------------------------------
22
+ // Timing constants
23
+ // ---------------------------------------------------------------------------
24
+ const HDR_MARK = 3518;
25
+ const HDR_SPACE = 1688;
26
+ const BIT_MARK = 453;
27
+ const ONE_SPACE = 1275;
28
+ const ZERO_SPACE = 414;
29
+ const HDR_GAP = 25100;
30
+ const SECTION_GAP = 35512;
31
+ const STATE_LENGTH = 39;
32
+ const SECTION1_LEN = 20;
33
+ const HEADER_BITS = 5;
34
+ const UNUSED_TIME = 0x600;
35
+ const DAIKIN312_TOLERANCE = 30;
36
+ // ---------------------------------------------------------------------------
37
+ // Bit helpers
38
+ // ---------------------------------------------------------------------------
39
+ function setBit(raw, byteIdx, bitIdx, on) {
40
+ if (on)
41
+ raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
42
+ else
43
+ raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
44
+ }
45
+ function setBitsRange(raw, byteIdx, bitOffset, size, value) {
46
+ const mask = ((1 << size) - 1) << bitOffset;
47
+ raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
48
+ }
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
+ // Section 1
70
+ raw[0] = 0x11;
71
+ raw[1] = 0xda;
72
+ raw[2] = 0x27;
73
+ raw[4] = 0x02;
74
+ raw[5] = 0x58;
75
+ raw[6] = 0x64;
76
+ raw[7] = 0x58;
77
+ raw[8] = 0x64;
78
+ raw[9] = 0x06;
79
+ raw[12] = 0x01;
80
+ // Section 2
81
+ raw[20] = 0x11;
82
+ raw[21] = 0xda;
83
+ raw[22] = 0x27;
84
+ raw[25] = 0x08;
85
+ raw[26] = 0x2c;
86
+ raw[31] = 0x06;
87
+ raw[32] = 0x60;
88
+ raw[35] = 0xc5;
89
+ raw[37] = 0x08;
90
+ // disableOnTimer/disableOffTimer/disableSleepTimer
91
+ setFieldLE(raw, 30, 0, 12, UNUSED_TIME);
92
+ setBit(raw, 25, 1, false);
93
+ setBit(raw, 36, 5, false);
94
+ setFieldLE(raw, 31, 4, 12, UNUSED_TIME);
95
+ setBit(raw, 25, 2, false);
96
+ return raw;
97
+ }
98
+ function buildDaikin312Raw(state) {
99
+ const raw = defaultState();
100
+ // --- Section 1 fields ---
101
+ // CurrentTime (bytes 5–6, bits 0–11)
102
+ if (state.currentTime !== undefined) {
103
+ let mins = state.currentTime;
104
+ if (mins > 24 * 60)
105
+ mins = 0;
106
+ setFieldLE(raw, 5, 0, 12, mins);
107
+ }
108
+ // Power2 (byte 6, bit 7) — inverted
109
+ const power = state.power ?? false;
110
+ setBit(raw, 6, 7, !power);
111
+ // Beep (byte 7, bits 6–7)
112
+ if (state.beep !== undefined)
113
+ setBitsRange(raw, 7, 6, 2, state.beep & 0x3);
114
+ // FreshAir (byte 8, bit 0), Mold (byte 8, bit 3), FreshAirHigh (byte 8, bit 7)
115
+ if (state.freshAir !== undefined)
116
+ setBit(raw, 8, 0, state.freshAir);
117
+ if (state.mold !== undefined)
118
+ setBit(raw, 8, 3, state.mold);
119
+ if (state.freshAirHigh !== undefined)
120
+ setBit(raw, 8, 7, state.freshAirHigh);
121
+ // Light (byte 12, bits 0–1) — moved from Daikin2's byte 7
122
+ if (state.light !== undefined)
123
+ setBitsRange(raw, 12, 0, 2, state.light & 0x3);
124
+ // Clean (byte 14, bit 4) — moved from Daikin2's byte 8
125
+ if (state.clean !== undefined)
126
+ setBit(raw, 14, 4, state.clean);
127
+ // --- Section 2 fields ---
128
+ // Mode (byte 25, bits 4–6)
129
+ let mode = state.mode ?? daikin_common_js_1.DaikinMode.Auto;
130
+ 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))
131
+ mode = daikin_common_js_1.DaikinMode.Auto;
132
+ setBitsRange(raw, 25, 4, 3, mode);
133
+ // Temp (byte 26, bits 0–6, 7 bits) — stored as degrees * 2 for 0.5°C resolution
134
+ let temp;
135
+ if (state.temp !== undefined) {
136
+ const minTemp = (mode === daikin_common_js_1.DaikinMode.Cool) ? daikin_common_js_1.DAIKIN2_MIN_COOL_TEMP : daikin_common_js_1.DAIKIN_MIN_TEMP;
137
+ temp = Math.min(Math.max(state.temp, minTemp), daikin_common_js_1.DAIKIN_MAX_TEMP);
138
+ }
139
+ else {
140
+ temp = 22;
141
+ }
142
+ setBitsRange(raw, 26, 0, 7, Math.round(temp * 2));
143
+ // Fan (byte 28, bits 4–7)
144
+ const fanInput = state.fan ?? daikin_common_js_1.DaikinFan.Auto;
145
+ let fan;
146
+ if (fanInput === daikin_common_js_1.DaikinFan.Quiet || fanInput === daikin_common_js_1.DaikinFan.Auto)
147
+ fan = fanInput;
148
+ else if (fanInput < 1 || fanInput > 5)
149
+ fan = daikin_common_js_1.DaikinFan.Auto;
150
+ else
151
+ fan = fanInput + 2;
152
+ setBitsRange(raw, 28, 4, 4, fan);
153
+ // SwingV (byte 28, bits 0–3) — moved from Daikin2's byte 18
154
+ setBitsRange(raw, 28, 0, 4, (state.swingVertical ?? 0) & 0xf);
155
+ // SwingH (byte 29, bits 0–3) — moved from Daikin2's byte 17 (now 4-bit)
156
+ setBitsRange(raw, 29, 0, 4, (state.swingHorizontal ?? 0) & 0xf);
157
+ // Power (byte 25, bit 0)
158
+ setBit(raw, 25, 0, power);
159
+ // Quiet (byte 33, bit 5), Powerful (byte 33, bit 0)
160
+ let quiet = state.quiet ?? false;
161
+ let powerful = state.powerful ?? false;
162
+ if (quiet)
163
+ powerful = false;
164
+ if (powerful)
165
+ quiet = false;
166
+ setBit(raw, 33, 5, quiet);
167
+ setBit(raw, 33, 0, powerful);
168
+ // Econo (byte 36, bit 2), Eye (byte 36, bit 1), EyeAuto (byte 36, bit 3), Purify (byte 36, bit 4)
169
+ if (state.econo !== undefined)
170
+ setBit(raw, 36, 2, state.econo);
171
+ if (state.eye !== undefined)
172
+ setBit(raw, 36, 1, state.eye);
173
+ if (state.eyeAuto !== undefined)
174
+ setBit(raw, 36, 3, state.eyeAuto);
175
+ if (state.purify !== undefined)
176
+ setBit(raw, 36, 4, state.purify);
177
+ // --- Checksums ---
178
+ raw[19] = (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1);
179
+ raw[38] = (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, STATE_LENGTH - 1);
180
+ return raw;
181
+ }
182
+ // ---------------------------------------------------------------------------
183
+ // Send
184
+ // ---------------------------------------------------------------------------
185
+ function sendDaikin312(state, repeat = 0) {
186
+ return encodeDaikin312Raw(buildDaikin312Raw(state), repeat);
187
+ }
188
+ function encodeDaikin312Raw(data, repeat = 0) {
189
+ const result = [];
190
+ const sectionOpts = {
191
+ headerMark: HDR_MARK, headerSpace: HDR_SPACE,
192
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
193
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
194
+ footerMark: BIT_MARK, gap: SECTION_GAP, msbFirst: false,
195
+ };
196
+ for (let r = 0; r <= repeat; r++) {
197
+ // Header: 5 bits of zero
198
+ const hdr = (0, encode_js_1.sendGeneric)({
199
+ headerMark: 0, headerSpace: 0,
200
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
201
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
202
+ footerMark: BIT_MARK, gap: HDR_GAP,
203
+ data: 0n, nbits: HEADER_BITS, msbFirst: false,
204
+ });
205
+ for (let i = 0; i < hdr.length; i++)
206
+ result.push(hdr[i]);
207
+ // Section 1 (bytes 0–19)
208
+ const s1 = (0, encode_js_1.sendGenericBytes)({ ...sectionOpts, data: data.subarray(0, SECTION1_LEN) });
209
+ for (let i = 0; i < s1.length; i++)
210
+ result.push(s1[i]);
211
+ // Section 2 (bytes 20–38)
212
+ const s2 = (0, encode_js_1.sendGenericBytes)({ ...sectionOpts, data: data.subarray(SECTION1_LEN) });
213
+ for (let i = 0; i < s2.length; i++)
214
+ result.push(s2[i]);
215
+ }
216
+ return result;
217
+ }
218
+ // ---------------------------------------------------------------------------
219
+ // Decode API
220
+ // ---------------------------------------------------------------------------
221
+ /**
222
+ * Try to skip a leader section (e.g. 5 zero bits + footer + gap).
223
+ * Returns the new offset past the leader, or the original offset if no leader.
224
+ */
225
+ function skipLeader(timings, offset) {
226
+ const result = (0, decode_js_1.matchGeneric)(timings, offset, timings.length - offset, HEADER_BITS, 0, 0, // no header
227
+ BIT_MARK, ONE_SPACE, // oneMark, oneSpace
228
+ BIT_MARK, ZERO_SPACE, // zeroMark, zeroSpace
229
+ BIT_MARK, HDR_GAP, // footerMark, gap
230
+ true, // atLeast for gap
231
+ DAIKIN312_TOLERANCE);
232
+ return result ? offset + result.used : offset;
233
+ }
234
+ /**
235
+ * Read a little-endian bitfield spanning one or more bytes.
236
+ * Inverse of `setFieldLE`.
237
+ */
238
+ function getFieldLE(raw, startByte, startBit, totalBits) {
239
+ let value = 0;
240
+ let byte = startByte;
241
+ let bit = startBit;
242
+ let remaining = totalBits;
243
+ let shift = 0;
244
+ while (remaining > 0) {
245
+ const bitsInThisByte = Math.min(remaining, 8 - bit);
246
+ const mask = ((1 << bitsInThisByte) - 1) << bit;
247
+ value |= ((raw[byte] & mask) >>> bit) << shift;
248
+ shift += bitsInThisByte;
249
+ remaining -= bitsInThisByte;
250
+ byte++;
251
+ bit = 0;
252
+ }
253
+ return value;
254
+ }
255
+ /**
256
+ * Decode raw IR timings as a Daikin312 message.
257
+ *
258
+ * The 5-bit header preamble is optional — hardware captures often miss it.
259
+ *
260
+ * @param timings Raw mark/space timing array in microseconds.
261
+ * @param offset Starting index in the timings array (default 0).
262
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
263
+ */
264
+ function decodeDaikin312(timings, offset = 0, headerOptional = false) {
265
+ // Skip leader if present.
266
+ let pos = skipLeader(timings, offset);
267
+ // Section 1: 20 bytes (LSB-first)
268
+ 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, SECTION_GAP, true, DAIKIN312_TOLERANCE, undefined, false, headerOptional);
269
+ if (!s1)
270
+ return null;
271
+ pos += s1.used;
272
+ // Section 2: 19 bytes (LSB-first)
273
+ const s2Len = STATE_LENGTH - SECTION1_LEN;
274
+ const s2 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, s2Len, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, SECTION_GAP, true, DAIKIN312_TOLERANCE, undefined, false);
275
+ if (!s2)
276
+ return null;
277
+ // Concatenate sections into one 39-byte array.
278
+ const raw = new Uint8Array(STATE_LENGTH);
279
+ raw.set(s1.data, 0);
280
+ raw.set(s2.data, SECTION1_LEN);
281
+ // Validate checksums.
282
+ if (raw[19] !== (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1))
283
+ return null;
284
+ if (raw[38] !== (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, STATE_LENGTH - 1))
285
+ return null;
286
+ // --- Extract state ---
287
+ // CurrentTime (bytes 5–6, bits 0–11 LE)
288
+ const currentTime = getFieldLE(raw, 5, 0, 12);
289
+ // Power2 (byte 6, bit 7) — inverted
290
+ // Power (byte 25, bit 0) — primary
291
+ const power = !!(raw[25] & 0x01);
292
+ // Beep (byte 7, bits 6–7)
293
+ const beep = (raw[7] >> 6) & 0x3;
294
+ // FreshAir (byte 8, bit 0), Mold (byte 8, bit 3), FreshAirHigh (byte 8, bit 7)
295
+ const freshAir = !!(raw[8] & (1 << 0));
296
+ const mold = !!(raw[8] & (1 << 3));
297
+ const freshAirHigh = !!(raw[8] & (1 << 7));
298
+ // Light (byte 12, bits 0–1)
299
+ const light = raw[12] & 0x3;
300
+ // Clean (byte 14, bit 4)
301
+ const clean = !!(raw[14] & (1 << 4));
302
+ // Mode (byte 25, bits 4–6)
303
+ const mode = ((raw[25] >> 4) & 0b111);
304
+ // Temp (byte 26, bits 0–6, 7 bits) — stored as degrees * 2
305
+ const temp = (raw[26] & 0x7f) / 2;
306
+ // Fan (byte 28, bits 4–7)
307
+ const fanInternal = (raw[28] >> 4) & 0x0f;
308
+ const fan = fanInternal === daikin_common_js_1.DaikinFan.Auto || fanInternal === daikin_common_js_1.DaikinFan.Quiet
309
+ ? fanInternal
310
+ : (fanInternal - 2);
311
+ // SwingV (byte 28, bits 0–3)
312
+ const swingVertical = raw[28] & 0x0f;
313
+ // SwingH (byte 29, bits 0–3)
314
+ const swingHorizontal = raw[29] & 0x0f;
315
+ // Quiet (byte 33, bit 5), Powerful (byte 33, bit 0)
316
+ const quiet = !!(raw[33] & (1 << 5));
317
+ const powerful = !!(raw[33] & (1 << 0));
318
+ // Econo (byte 36, bit 2), Eye (byte 36, bit 1), EyeAuto (byte 36, bit 3), Purify (byte 36, bit 4)
319
+ const econo = !!(raw[36] & (1 << 2));
320
+ const eye = !!(raw[36] & (1 << 1));
321
+ const eyeAuto = !!(raw[36] & (1 << 3));
322
+ const purify = !!(raw[36] & (1 << 4));
323
+ return {
324
+ power,
325
+ temp,
326
+ mode,
327
+ fan,
328
+ swingVertical,
329
+ swingHorizontal,
330
+ quiet,
331
+ powerful,
332
+ econo,
333
+ light,
334
+ beep,
335
+ clean,
336
+ mold,
337
+ freshAir,
338
+ freshAirHigh,
339
+ eye,
340
+ eyeAuto,
341
+ purify,
342
+ currentTime,
343
+ };
344
+ }
345
+ //# sourceMappingURL=daikin312.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin312.js","sourceRoot":"","sources":["../../../src/protocols/daikin312.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Daikin 64-bit IR protocol encoder.
3
+ *
4
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
5
+ *
6
+ * This is a stateless encoder: pass a {@link Daikin64State} object and get
7
+ * back a raw IR timing array.
8
+ */
9
+ export declare const Daikin64Mode: {
10
+ readonly Dry: 1;
11
+ readonly Cool: 2;
12
+ readonly Fan: 4;
13
+ readonly Heat: 8;
14
+ };
15
+ export type Daikin64ModeValue = (typeof Daikin64Mode)[keyof typeof Daikin64Mode];
16
+ export declare const Daikin64Fan: {
17
+ readonly Auto: 1;
18
+ readonly High: 2;
19
+ readonly Med: 4;
20
+ readonly Low: 8;
21
+ readonly Quiet: 9;
22
+ readonly Turbo: 3;
23
+ };
24
+ export type Daikin64FanValue = (typeof Daikin64Fan)[keyof typeof Daikin64Fan];
25
+ export interface Daikin64State {
26
+ /** Power toggle. */
27
+ power?: boolean;
28
+ /** Temperature in degrees Celsius (16–30). */
29
+ temp?: number;
30
+ /** Operating mode. */
31
+ mode?: Daikin64ModeValue;
32
+ /** Fan speed. */
33
+ fan?: Daikin64FanValue;
34
+ /** Vertical swing. */
35
+ swingVertical?: boolean;
36
+ /** Sleep mode. */
37
+ sleep?: boolean;
38
+ /** Clock: minutes since midnight (0–1439). */
39
+ clock?: number;
40
+ /** On timer enabled. */
41
+ onTimerEnabled?: boolean;
42
+ /** On timer: minutes since midnight (resolution 30 min). */
43
+ onTime?: number;
44
+ /** Off timer enabled. */
45
+ offTimerEnabled?: boolean;
46
+ /** Off timer: minutes since midnight (resolution 30 min). */
47
+ offTime?: number;
48
+ }
49
+ /**
50
+ * Build the raw 64-bit Daikin64 value from a state object.
51
+ * Fields not present in the state use the known-good defaults.
52
+ */
53
+ export declare function buildDaikin64Raw(state: Daikin64State): bigint;
54
+ /**
55
+ * Encode a Daikin64 AC state into raw IR timings.
56
+ *
57
+ * @param state The desired AC state.
58
+ * @param repeat Number of times to repeat the message (default 0).
59
+ * @returns Flat array of alternating mark/space durations in microseconds.
60
+ */
61
+ export declare function sendDaikin64(state: Daikin64State, repeat?: number): number[];
62
+ /**
63
+ * Encode a raw 64-bit Daikin64 value into IR timings.
64
+ * Useful when you already have the packed uint64 (e.g. from `buildDaikin64Raw`).
65
+ *
66
+ * Matches IRremoteESP8266 `IRsend::sendDaikin64`.
67
+ */
68
+ export declare function encodeDaikin64Raw(data: bigint, repeat?: number): number[];
69
+ /**
70
+ * Decode raw IR timings as a Daikin64 message.
71
+ *
72
+ * The leader (2x mark+space pairs) is optional -- hardware captures may miss it.
73
+ *
74
+ * @param timings Raw mark/space timing array in microseconds.
75
+ * @param offset Starting index in the timings array (default 0).
76
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
77
+ */
78
+ export declare function decodeDaikin64(timings: number[], offset?: number, headerOptional?: boolean): Daikin64State | null;
79
+ //# sourceMappingURL=daikin64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin64.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin64.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+BH,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAEjF,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAY9E,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,iBAAiB;IACjB,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,sBAAsB;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA4BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA6D7D;AAMD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,EACpB,MAAM,SAAI,GACT,MAAM,EAAE,CAGV;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,SAAI,GACT,MAAM,EAAE,CAgCV;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,aAAa,GAAG,IAAI,CAoEtB"}