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,166 @@
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 { sumBytes, sendGenericBytes } from "../encode.js";
8
+ import { matchGenericBytes } from "../decode.js";
9
+ import { DaikinMode, DaikinFan, DAIKIN_MIN_TEMP, DAIKIN_MAX_TEMP, } from "./daikin_common.js";
10
+ export { DaikinMode, DaikinFan } from "./daikin_common.js";
11
+ // ---------------------------------------------------------------------------
12
+ // Timing constants
13
+ // ---------------------------------------------------------------------------
14
+ const HDR_MARK = 5000;
15
+ const HDR_SPACE = 2145;
16
+ const BIT_MARK = 342;
17
+ const ONE_SPACE = 1786;
18
+ const ZERO_SPACE = 700;
19
+ const GAP = 29650;
20
+ const STATE_LENGTH = 20;
21
+ const SECTION1_LEN = 7;
22
+ // Swing positions
23
+ export const Daikin160SwingV = {
24
+ Lowest: 0x1,
25
+ Low: 0x2,
26
+ Middle: 0x3,
27
+ High: 0x4,
28
+ Highest: 0x5,
29
+ Auto: 0xf,
30
+ };
31
+ // ---------------------------------------------------------------------------
32
+ // Bit helpers
33
+ // ---------------------------------------------------------------------------
34
+ function setBit(raw, byteIdx, bitIdx, on) {
35
+ if (on)
36
+ raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
37
+ else
38
+ raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
39
+ }
40
+ function setBitsRange(raw, byteIdx, bitOffset, size, value) {
41
+ const mask = ((1 << size) - 1) << bitOffset;
42
+ raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Build
46
+ // ---------------------------------------------------------------------------
47
+ function defaultState() {
48
+ const raw = new Uint8Array(STATE_LENGTH);
49
+ raw[0] = 0x11;
50
+ raw[1] = 0xda;
51
+ raw[2] = 0x27;
52
+ raw[3] = 0xf0;
53
+ raw[4] = 0x0d;
54
+ raw[7] = 0x11;
55
+ raw[8] = 0xda;
56
+ raw[9] = 0x27;
57
+ raw[11] = 0xd3;
58
+ raw[12] = 0x30; // Power=0, Mode=kDaikinCool(0b011)
59
+ raw[13] = 0x11; // SwingV (upper nibble) = 0x1 (lowest)
60
+ raw[16] = 0x1e; // Temp = (25-10)=15 at bits 1-6 → 0x1e
61
+ raw[17] = 0x0a; // Fan = kDaikinFanAuto(0xA) at bits 0-3... wait
62
+ raw[18] = 0x08;
63
+ return raw;
64
+ }
65
+ export function buildDaikin160Raw(state) {
66
+ const raw = defaultState();
67
+ // Mode (byte 12, bits 4–6)
68
+ let mode = state.mode ?? DaikinMode.Cool;
69
+ if (!(mode === DaikinMode.Auto || mode === DaikinMode.Cool || mode === DaikinMode.Heat || mode === DaikinMode.Fan || mode === DaikinMode.Dry))
70
+ mode = DaikinMode.Auto;
71
+ setBitsRange(raw, 12, 4, 3, mode);
72
+ // Power (byte 12, bit 0)
73
+ setBit(raw, 12, 0, state.power ?? false);
74
+ // Temp (byte 16, bits 1–6) — stored as (degrees - 10)
75
+ const temp = Math.min(Math.max(state.temp ?? 25, DAIKIN_MIN_TEMP), DAIKIN_MAX_TEMP);
76
+ setBitsRange(raw, 16, 1, 6, temp - 10);
77
+ // Fan (byte 17, bits 0–3)
78
+ const fanInput = state.fan ?? DaikinFan.Auto;
79
+ let fan;
80
+ if (fanInput === DaikinFan.Quiet || fanInput === DaikinFan.Auto)
81
+ fan = fanInput;
82
+ else if (fanInput < 1 || fanInput > 5)
83
+ fan = DaikinFan.Auto;
84
+ else
85
+ fan = fanInput + 2;
86
+ setBitsRange(raw, 17, 0, 4, fan);
87
+ // SwingV (byte 13, bits 4–7)
88
+ const swingV = state.swingVertical ?? Daikin160SwingV.Auto;
89
+ setBitsRange(raw, 13, 4, 4, swingV);
90
+ // Checksums
91
+ raw[6] = sumBytes(raw, 0, SECTION1_LEN - 1);
92
+ raw[19] = sumBytes(raw, SECTION1_LEN, STATE_LENGTH - 1);
93
+ return raw;
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Send
97
+ // ---------------------------------------------------------------------------
98
+ export function sendDaikin160(state, repeat = 0) {
99
+ return encodeDaikin160Raw(buildDaikin160Raw(state), repeat);
100
+ }
101
+ export function encodeDaikin160Raw(data, repeat = 0) {
102
+ const result = [];
103
+ const opts = {
104
+ headerMark: HDR_MARK, headerSpace: HDR_SPACE,
105
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
106
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
107
+ footerMark: BIT_MARK, gap: GAP, msbFirst: false,
108
+ };
109
+ for (let r = 0; r <= repeat; r++) {
110
+ const s1 = sendGenericBytes({ ...opts, data: data.subarray(0, SECTION1_LEN) });
111
+ for (let i = 0; i < s1.length; i++)
112
+ result.push(s1[i]);
113
+ const s2 = sendGenericBytes({ ...opts, data: data.subarray(SECTION1_LEN) });
114
+ for (let i = 0; i < s2.length; i++)
115
+ result.push(s2[i]);
116
+ }
117
+ return result;
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // Decode API
121
+ // ---------------------------------------------------------------------------
122
+ /**
123
+ * Decode raw IR timings as a Daikin160 message.
124
+ *
125
+ * @param timings Raw mark/space timing array in microseconds.
126
+ * @param offset Starting index in the timings array (default 0).
127
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
128
+ */
129
+ export function decodeDaikin160(timings, offset = 0) {
130
+ let pos = offset;
131
+ // Section 1: bytes 0–6 (7 bytes)
132
+ const section1 = matchGenericBytes(timings, pos, timings.length - pos, SECTION1_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false);
133
+ if (!section1)
134
+ return null;
135
+ pos += section1.used;
136
+ // Section 2: bytes 7–19 (13 bytes)
137
+ const section2Len = STATE_LENGTH - SECTION1_LEN;
138
+ const section2 = matchGenericBytes(timings, pos, timings.length - pos, section2Len, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false);
139
+ if (!section2)
140
+ return null;
141
+ // Combine into full raw array.
142
+ const raw = new Uint8Array(STATE_LENGTH);
143
+ raw.set(section1.data, 0);
144
+ raw.set(section2.data, SECTION1_LEN);
145
+ // Validate checksums.
146
+ if (raw[6] !== sumBytes(raw, 0, SECTION1_LEN - 1))
147
+ return null;
148
+ if (raw[19] !== sumBytes(raw, SECTION1_LEN, STATE_LENGTH - 1))
149
+ return null;
150
+ // Extract state from byte/bit positions.
151
+ const mode = ((raw[12] >> 4) & 0b111);
152
+ const temp = ((raw[16] >> 1) & 0x3F) + 10;
153
+ const fanInternal = raw[17] & 0x0F;
154
+ const fan = fanInternal === DaikinFan.Auto || fanInternal === DaikinFan.Quiet
155
+ ? fanInternal
156
+ : (fanInternal - 2);
157
+ const swingV = ((raw[13] >> 4) & 0x0F);
158
+ return {
159
+ power: !!(raw[12] & 0x01),
160
+ temp,
161
+ mode,
162
+ fan,
163
+ swingVertical: swingV,
164
+ };
165
+ }
166
+ //# sourceMappingURL=daikin160.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin160.js","sourceRoot":"","sources":["../../src/protocols/daikin160.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Daikin 176-bit (22-byte) IR protocol encoder.
3
+ *
4
+ * 2 sections: bytes 0–6 (7 bytes) + bytes 7–21 (15 bytes).
5
+ * Uses different mode values from the shared Daikin constants.
6
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
7
+ */
8
+ export declare const Daikin176Mode: {
9
+ readonly Fan: 0;
10
+ readonly Heat: 1;
11
+ readonly Cool: 2;
12
+ readonly Auto: 3;
13
+ readonly Dry: 7;
14
+ };
15
+ export type Daikin176ModeValue = (typeof Daikin176Mode)[keyof typeof Daikin176Mode];
16
+ export declare const Daikin176SwingH: {
17
+ readonly Off: 6;
18
+ readonly Auto: 5;
19
+ };
20
+ export type Daikin176SwingHValue = (typeof Daikin176SwingH)[keyof typeof Daikin176SwingH];
21
+ export interface Daikin176State {
22
+ power?: boolean;
23
+ temp?: number;
24
+ mode?: Daikin176ModeValue;
25
+ /** Fan speed: 1 (min) or 3 (max). Only two positions supported. */
26
+ fan?: 1 | 3;
27
+ swingHorizontal?: Daikin176SwingHValue;
28
+ id?: 0 | 1;
29
+ }
30
+ export declare function buildDaikin176Raw(state: Daikin176State): Uint8Array;
31
+ export declare function sendDaikin176(state: Daikin176State, repeat?: number): number[];
32
+ export declare function encodeDaikin176Raw(data: Uint8Array, repeat?: number): number[];
33
+ /**
34
+ * Decode raw IR timings as a Daikin176 message.
35
+ *
36
+ * The protocol has 2 sections (7 + 15 bytes), each with its own header,
37
+ * data, footer, and checksum. No leader/preamble.
38
+ *
39
+ * @param timings Raw mark/space timing array in microseconds.
40
+ * @param offset Starting index in the timings array (default 0).
41
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
42
+ */
43
+ export declare function decodeDaikin176(timings: number[], offset?: number): Daikin176State | null;
44
+ //# sourceMappingURL=daikin176.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin176.d.ts","sourceRoot":"","sources":["../../src/protocols/daikin176.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAMpF,eAAO,MAAM,eAAe;;;CAGlB,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,kBAAkB,CAAC;IAC1B,mEAAmE;IACnE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACZ;AAiCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CA2DnE;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;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,GACjB,cAAc,GAAG,IAAI,CAsDvB"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Daikin 176-bit (22-byte) IR protocol encoder.
3
+ *
4
+ * 2 sections: bytes 0–6 (7 bytes) + bytes 7–21 (15 bytes).
5
+ * Uses different mode values from the shared Daikin constants.
6
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
7
+ */
8
+ import { sumBytes, sendGenericBytes } from "../encode.js";
9
+ import { matchGenericBytes } from "../decode.js";
10
+ import { DAIKIN_MIN_TEMP, DAIKIN_MAX_TEMP } from "./daikin_common.js";
11
+ // ---------------------------------------------------------------------------
12
+ // Timing constants
13
+ // ---------------------------------------------------------------------------
14
+ const HDR_MARK = 5070;
15
+ const HDR_SPACE = 2140;
16
+ const BIT_MARK = 370;
17
+ const ONE_SPACE = 1780;
18
+ const ZERO_SPACE = 710;
19
+ const GAP = 29410;
20
+ const STATE_LENGTH = 22;
21
+ const SECTION1_LEN = 7;
22
+ // ---------------------------------------------------------------------------
23
+ // Daikin176-specific mode values (different from shared DaikinMode!)
24
+ // ---------------------------------------------------------------------------
25
+ export const Daikin176Mode = {
26
+ Fan: 0b000,
27
+ Heat: 0b001,
28
+ Cool: 0b010,
29
+ Auto: 0b011,
30
+ Dry: 0b111,
31
+ };
32
+ const DRY_FAN_TEMP = 17;
33
+ const MODE_BUTTON = 0x04;
34
+ const FAN_MAX = 3;
35
+ export const Daikin176SwingH = {
36
+ Off: 0x6,
37
+ Auto: 0x5,
38
+ };
39
+ // ---------------------------------------------------------------------------
40
+ // Bit helpers
41
+ // ---------------------------------------------------------------------------
42
+ function setBit(raw, byteIdx, bitIdx, on) {
43
+ if (on)
44
+ raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
45
+ else
46
+ raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
47
+ }
48
+ function setBitsRange(raw, byteIdx, bitOffset, size, value) {
49
+ const mask = ((1 << size) - 1) << bitOffset;
50
+ raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // Build
54
+ // ---------------------------------------------------------------------------
55
+ function defaultState() {
56
+ const raw = new Uint8Array(STATE_LENGTH);
57
+ raw[0] = 0x11;
58
+ raw[1] = 0xda;
59
+ raw[2] = 0x17;
60
+ raw[3] = 0x18;
61
+ raw[4] = 0x04;
62
+ raw[7] = 0x11;
63
+ raw[8] = 0xda;
64
+ raw[9] = 0x17;
65
+ raw[10] = 0x18;
66
+ raw[12] = 0x73;
67
+ raw[14] = 0x20; // Power=0, Mode=Cool(0b010) at bits 4-6
68
+ raw[18] = 0x16; // Fan and SwingH
69
+ raw[20] = 0x20;
70
+ return raw;
71
+ }
72
+ export function buildDaikin176Raw(state) {
73
+ const raw = defaultState();
74
+ // Id (byte 3 bit 0 and byte 10 bit 0)
75
+ const id = state.id ?? 0;
76
+ setBit(raw, 3, 0, id === 1);
77
+ setBit(raw, 10, 0, id === 1);
78
+ // Mode (byte 14, bits 4–6) + AltMode (byte 12, bits 4–6)
79
+ let mode = state.mode ?? Daikin176Mode.Cool;
80
+ let altMode;
81
+ switch (mode) {
82
+ case Daikin176Mode.Dry:
83
+ altMode = 2;
84
+ break;
85
+ case Daikin176Mode.Fan:
86
+ altMode = 6;
87
+ break;
88
+ case Daikin176Mode.Auto:
89
+ case Daikin176Mode.Cool:
90
+ case Daikin176Mode.Heat:
91
+ altMode = 7;
92
+ break;
93
+ default:
94
+ mode = Daikin176Mode.Cool;
95
+ altMode = 7;
96
+ }
97
+ setBitsRange(raw, 14, 4, 3, mode);
98
+ setBitsRange(raw, 12, 4, 3, altMode);
99
+ // Temp (byte 17, bits 1–6) — stored as (degrees - 9)
100
+ // Dry/Fan modes force temp to 17
101
+ let temp;
102
+ if (state.temp !== undefined) {
103
+ temp = Math.min(Math.max(state.temp, DAIKIN_MIN_TEMP), DAIKIN_MAX_TEMP);
104
+ }
105
+ else {
106
+ temp = 25;
107
+ }
108
+ const storedTemp = (mode === Daikin176Mode.Dry || mode === Daikin176Mode.Fan)
109
+ ? DRY_FAN_TEMP - 9
110
+ : temp - 9;
111
+ setBitsRange(raw, 17, 1, 6, storedTemp);
112
+ // ModeButton (byte 13) — setMode sets it to MODE_BUTTON, setTemp clears it
113
+ // Since setMode is called last logically, set it
114
+ raw[13] = MODE_BUTTON;
115
+ // Fan (byte 18, bits 4–7) — only 1 or FAN_MAX(3) supported
116
+ const fanInput = state.fan ?? FAN_MAX;
117
+ const fan = (fanInput === 1) ? 1 : FAN_MAX;
118
+ setBitsRange(raw, 18, 4, 4, fan);
119
+ // setFan clears ModeButton
120
+ raw[13] = 0;
121
+ // Power (byte 14, bit 0) — setPower clears ModeButton
122
+ setBit(raw, 14, 0, state.power ?? false);
123
+ raw[13] = 0;
124
+ // SwingH (byte 18, bits 0–3)
125
+ const swingH = state.swingHorizontal ?? Daikin176SwingH.Auto;
126
+ setBitsRange(raw, 18, 0, 4, swingH === Daikin176SwingH.Off ? Daikin176SwingH.Off : Daikin176SwingH.Auto);
127
+ // Checksums
128
+ raw[6] = sumBytes(raw, 0, SECTION1_LEN - 1);
129
+ raw[21] = sumBytes(raw, SECTION1_LEN, STATE_LENGTH - 1);
130
+ return raw;
131
+ }
132
+ // ---------------------------------------------------------------------------
133
+ // Send
134
+ // ---------------------------------------------------------------------------
135
+ export function sendDaikin176(state, repeat = 0) {
136
+ return encodeDaikin176Raw(buildDaikin176Raw(state), repeat);
137
+ }
138
+ export function encodeDaikin176Raw(data, repeat = 0) {
139
+ const result = [];
140
+ const opts = {
141
+ headerMark: HDR_MARK, headerSpace: HDR_SPACE,
142
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
143
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
144
+ footerMark: BIT_MARK, gap: GAP, msbFirst: false,
145
+ };
146
+ for (let r = 0; r <= repeat; r++) {
147
+ const s1 = sendGenericBytes({ ...opts, data: data.subarray(0, SECTION1_LEN) });
148
+ for (let i = 0; i < s1.length; i++)
149
+ result.push(s1[i]);
150
+ const s2 = sendGenericBytes({ ...opts, data: data.subarray(SECTION1_LEN) });
151
+ for (let i = 0; i < s2.length; i++)
152
+ result.push(s2[i]);
153
+ }
154
+ return result;
155
+ }
156
+ // ---------------------------------------------------------------------------
157
+ // Decode API
158
+ // ---------------------------------------------------------------------------
159
+ /**
160
+ * Decode raw IR timings as a Daikin176 message.
161
+ *
162
+ * The protocol has 2 sections (7 + 15 bytes), each with its own header,
163
+ * data, footer, and checksum. No leader/preamble.
164
+ *
165
+ * @param timings Raw mark/space timing array in microseconds.
166
+ * @param offset Starting index in the timings array (default 0).
167
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
168
+ */
169
+ export function decodeDaikin176(timings, offset = 0) {
170
+ let pos = offset;
171
+ // Section 1: 7 bytes (header + data + footer).
172
+ const section1 = matchGenericBytes(timings, pos, timings.length - pos, SECTION1_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false);
173
+ if (!section1)
174
+ return null;
175
+ pos += section1.used;
176
+ // Section 2: 15 bytes (header + data + footer).
177
+ const section2Len = STATE_LENGTH - SECTION1_LEN;
178
+ const section2 = matchGenericBytes(timings, pos, timings.length - pos, section2Len, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false);
179
+ if (!section2)
180
+ return null;
181
+ // Combine into full 22-byte array.
182
+ const raw = new Uint8Array(STATE_LENGTH);
183
+ raw.set(section1.data, 0);
184
+ raw.set(section2.data, SECTION1_LEN);
185
+ // Validate checksums.
186
+ if (raw[6] !== sumBytes(raw, 0, SECTION1_LEN - 1))
187
+ return null;
188
+ if (raw[21] !== sumBytes(raw, SECTION1_LEN, STATE_LENGTH - 1))
189
+ return null;
190
+ // Extract state from byte/bit positions.
191
+ const mode = ((raw[14] >> 4) & 0b111);
192
+ const storedTemp = (raw[17] >> 1) & 0x3F;
193
+ const temp = storedTemp + 9;
194
+ const fan = ((raw[18] >> 4) & 0x0F);
195
+ const swingHRaw = raw[18] & 0x0F;
196
+ const swingHorizontal = swingHRaw === Daikin176SwingH.Auto ? Daikin176SwingH.Auto : Daikin176SwingH.Off;
197
+ const id = (raw[3] & 0x01) ? 1 : 0;
198
+ return {
199
+ power: !!(raw[14] & 0x01),
200
+ temp,
201
+ mode,
202
+ fan,
203
+ swingHorizontal,
204
+ id,
205
+ };
206
+ }
207
+ //# sourceMappingURL=daikin176.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin176.js","sourceRoot":"","sources":["../../src/protocols/daikin176.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Daikin2 312-bit (39-byte) IR protocol encoder.
3
+ *
4
+ * Leader + 2 sections: bytes 0–19 (20) + bytes 20–38 (19).
5
+ * 36700 Hz carrier frequency.
6
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
7
+ */
8
+ import type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
9
+ export { DaikinMode, DaikinFan } from "./daikin_common.js";
10
+ export interface Daikin2State {
11
+ power?: boolean;
12
+ temp?: number;
13
+ mode?: DaikinModeValue;
14
+ fan?: DaikinFanValue;
15
+ swingVertical?: number;
16
+ swingHorizontal?: number;
17
+ quiet?: boolean;
18
+ powerful?: boolean;
19
+ econo?: boolean;
20
+ /** Light setting (0–3). */
21
+ light?: number;
22
+ /** Beep setting (0–3). */
23
+ beep?: number;
24
+ clean?: boolean;
25
+ mold?: boolean;
26
+ freshAir?: boolean;
27
+ freshAirHigh?: boolean;
28
+ eye?: boolean;
29
+ eyeAuto?: boolean;
30
+ purify?: boolean;
31
+ currentTime?: number;
32
+ }
33
+ export declare function buildDaikin2Raw(state: Daikin2State): Uint8Array;
34
+ export declare function sendDaikin2(state: Daikin2State, repeat?: number): number[];
35
+ export declare function encodeDaikin2Raw(data: Uint8Array, repeat?: number): number[];
36
+ /**
37
+ * Decode raw IR timings as a Daikin2 message.
38
+ *
39
+ * The leader mark/space pair is optional — hardware captures may miss it.
40
+ *
41
+ * @param timings Raw mark/space timing array in microseconds.
42
+ * @param offset Starting index in the timings array (default 0).
43
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
44
+ */
45
+ export declare function decodeDaikin2(timings: number[], offset?: number): Daikin2State | null;
46
+ //# sourceMappingURL=daikin2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin2.d.ts","sourceRoot":"","sources":["../../src/protocols/daikin2.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAsB3D,MAAM,WAAW,YAAY;IAC3B,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,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,CAkF/D;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAErE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAuBvE;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,GACjB,YAAY,GAAG,IAAI,CAuHrB"}