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.
- package/README.md +127 -0
- package/dist/cjs/decode.d.ts +184 -0
- package/dist/cjs/decode.d.ts.map +1 -0
- package/dist/cjs/decode.js +431 -0
- package/dist/cjs/decode.js.map +1 -0
- package/dist/cjs/encode.d.ts +76 -0
- package/dist/cjs/encode.d.ts.map +1 -0
- package/dist/cjs/encode.js +185 -0
- package/dist/cjs/encode.js.map +1 -0
- package/dist/cjs/index.d.ts +34 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +99 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/protocols/coolix.d.ts +98 -0
- package/dist/cjs/protocols/coolix.d.ts.map +1 -0
- package/dist/cjs/protocols/coolix.js +331 -0
- package/dist/cjs/protocols/coolix.js.map +1 -0
- package/dist/cjs/protocols/daikin.d.ts +47 -0
- package/dist/cjs/protocols/daikin.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin.js +353 -0
- package/dist/cjs/protocols/daikin.js.map +1 -0
- package/dist/cjs/protocols/daikin128.d.ts +60 -0
- package/dist/cjs/protocols/daikin128.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin128.js +267 -0
- package/dist/cjs/protocols/daikin128.js.map +1 -0
- package/dist/cjs/protocols/daikin152.d.ts +47 -0
- package/dist/cjs/protocols/daikin152.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin152.js +256 -0
- package/dist/cjs/protocols/daikin152.js.map +1 -0
- package/dist/cjs/protocols/daikin160.d.ts +37 -0
- package/dist/cjs/protocols/daikin160.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin160.js +176 -0
- package/dist/cjs/protocols/daikin160.js.map +1 -0
- package/dist/cjs/protocols/daikin176.d.ts +44 -0
- package/dist/cjs/protocols/daikin176.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin176.js +215 -0
- package/dist/cjs/protocols/daikin176.js.map +1 -0
- package/dist/cjs/protocols/daikin2.d.ts +46 -0
- package/dist/cjs/protocols/daikin2.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin2.js +337 -0
- package/dist/cjs/protocols/daikin2.js.map +1 -0
- package/dist/cjs/protocols/daikin216.d.ts +30 -0
- package/dist/cjs/protocols/daikin216.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin216.js +167 -0
- package/dist/cjs/protocols/daikin216.js.map +1 -0
- package/dist/cjs/protocols/daikin312.d.ts +45 -0
- package/dist/cjs/protocols/daikin312.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin312.js +345 -0
- package/dist/cjs/protocols/daikin312.js.map +1 -0
- package/dist/cjs/protocols/daikin64.d.ts +79 -0
- package/dist/cjs/protocols/daikin64.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin64.js +260 -0
- package/dist/cjs/protocols/daikin64.js.map +1 -0
- package/dist/cjs/protocols/daikin_common.d.ts +28 -0
- package/dist/cjs/protocols/daikin_common.d.ts.map +1 -0
- package/dist/cjs/protocols/daikin_common.js +41 -0
- package/dist/cjs/protocols/daikin_common.js.map +1 -0
- package/dist/cjs/protocols/nec.d.ts +50 -0
- package/dist/cjs/protocols/nec.d.ts.map +1 -0
- package/dist/cjs/protocols/nec.js +180 -0
- package/dist/cjs/protocols/nec.js.map +1 -0
- package/dist/decode.d.ts +67 -0
- package/dist/decode.d.ts.map +1 -0
- package/dist/decode.js +242 -0
- package/dist/decode.js.map +1 -0
- package/dist/encode.d.ts +76 -0
- package/dist/encode.d.ts.map +1 -0
- package/dist/encode.js +174 -0
- package/dist/encode.js.map +1 -0
- package/dist/esm/decode.d.ts +184 -0
- package/dist/esm/decode.d.ts.map +1 -0
- package/dist/esm/decode.js +420 -0
- package/dist/esm/decode.js.map +1 -0
- package/dist/esm/encode.d.ts +76 -0
- package/dist/esm/encode.d.ts.map +1 -0
- package/dist/esm/encode.js +174 -0
- package/dist/esm/encode.js.map +1 -0
- package/dist/esm/index.d.ts +34 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +20 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/protocols/coolix.d.ts +98 -0
- package/dist/esm/protocols/coolix.d.ts.map +1 -0
- package/dist/esm/protocols/coolix.js +322 -0
- package/dist/esm/protocols/coolix.js.map +1 -0
- package/dist/esm/protocols/daikin.d.ts +47 -0
- package/dist/esm/protocols/daikin.d.ts.map +1 -0
- package/dist/esm/protocols/daikin.js +344 -0
- package/dist/esm/protocols/daikin.js.map +1 -0
- package/dist/esm/protocols/daikin128.d.ts +60 -0
- package/dist/esm/protocols/daikin128.d.ts.map +1 -0
- package/dist/esm/protocols/daikin128.js +260 -0
- package/dist/esm/protocols/daikin128.js.map +1 -0
- package/dist/esm/protocols/daikin152.d.ts +47 -0
- package/dist/esm/protocols/daikin152.d.ts.map +1 -0
- package/dist/esm/protocols/daikin152.js +247 -0
- package/dist/esm/protocols/daikin152.js.map +1 -0
- package/dist/esm/protocols/daikin160.d.ts +37 -0
- package/dist/esm/protocols/daikin160.d.ts.map +1 -0
- package/dist/esm/protocols/daikin160.js +167 -0
- package/dist/esm/protocols/daikin160.js.map +1 -0
- package/dist/esm/protocols/daikin176.d.ts +44 -0
- package/dist/esm/protocols/daikin176.d.ts.map +1 -0
- package/dist/esm/protocols/daikin176.js +208 -0
- package/dist/esm/protocols/daikin176.js.map +1 -0
- package/dist/esm/protocols/daikin2.d.ts +46 -0
- package/dist/esm/protocols/daikin2.d.ts.map +1 -0
- package/dist/esm/protocols/daikin2.js +328 -0
- package/dist/esm/protocols/daikin2.js.map +1 -0
- package/dist/esm/protocols/daikin216.d.ts +30 -0
- package/dist/esm/protocols/daikin216.d.ts.map +1 -0
- package/dist/esm/protocols/daikin216.js +158 -0
- package/dist/esm/protocols/daikin216.js.map +1 -0
- package/dist/esm/protocols/daikin312.d.ts +45 -0
- package/dist/esm/protocols/daikin312.d.ts.map +1 -0
- package/dist/esm/protocols/daikin312.js +336 -0
- package/dist/esm/protocols/daikin312.js.map +1 -0
- package/dist/esm/protocols/daikin64.d.ts +79 -0
- package/dist/esm/protocols/daikin64.d.ts.map +1 -0
- package/dist/esm/protocols/daikin64.js +253 -0
- package/dist/esm/protocols/daikin64.js.map +1 -0
- package/dist/esm/protocols/daikin_common.d.ts +28 -0
- package/dist/esm/protocols/daikin_common.d.ts.map +1 -0
- package/dist/esm/protocols/daikin_common.js +38 -0
- package/dist/esm/protocols/daikin_common.js.map +1 -0
- package/dist/esm/protocols/nec.d.ts +50 -0
- package/dist/esm/protocols/nec.d.ts.map +1 -0
- package/dist/esm/protocols/nec.js +175 -0
- package/dist/esm/protocols/nec.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/protocols/daikin.d.ts +47 -0
- package/dist/protocols/daikin.d.ts.map +1 -0
- package/dist/protocols/daikin.js +343 -0
- package/dist/protocols/daikin.js.map +1 -0
- package/dist/protocols/daikin128.d.ts +60 -0
- package/dist/protocols/daikin128.d.ts.map +1 -0
- package/dist/protocols/daikin128.js +259 -0
- package/dist/protocols/daikin128.js.map +1 -0
- package/dist/protocols/daikin152.d.ts +47 -0
- package/dist/protocols/daikin152.d.ts.map +1 -0
- package/dist/protocols/daikin152.js +246 -0
- package/dist/protocols/daikin152.js.map +1 -0
- package/dist/protocols/daikin160.d.ts +37 -0
- package/dist/protocols/daikin160.d.ts.map +1 -0
- package/dist/protocols/daikin160.js +166 -0
- package/dist/protocols/daikin160.js.map +1 -0
- package/dist/protocols/daikin176.d.ts +44 -0
- package/dist/protocols/daikin176.d.ts.map +1 -0
- package/dist/protocols/daikin176.js +207 -0
- package/dist/protocols/daikin176.js.map +1 -0
- package/dist/protocols/daikin2.d.ts +46 -0
- package/dist/protocols/daikin2.d.ts.map +1 -0
- package/dist/protocols/daikin2.js +326 -0
- package/dist/protocols/daikin2.js.map +1 -0
- package/dist/protocols/daikin216.d.ts +30 -0
- package/dist/protocols/daikin216.d.ts.map +1 -0
- package/dist/protocols/daikin216.js +157 -0
- package/dist/protocols/daikin216.js.map +1 -0
- package/dist/protocols/daikin312.d.ts +45 -0
- package/dist/protocols/daikin312.d.ts.map +1 -0
- package/dist/protocols/daikin312.js +334 -0
- package/dist/protocols/daikin312.js.map +1 -0
- package/dist/protocols/daikin64.d.ts +79 -0
- package/dist/protocols/daikin64.d.ts.map +1 -0
- package/dist/protocols/daikin64.js +251 -0
- package/dist/protocols/daikin64.js.map +1 -0
- package/dist/protocols/daikin_common.d.ts +28 -0
- package/dist/protocols/daikin_common.d.ts.map +1 -0
- package/dist/protocols/daikin_common.js +38 -0
- package/dist/protocols/daikin_common.js.map +1 -0
- package/dist/protocols/nec.d.ts +50 -0
- package/dist/protocols/nec.d.ts.map +1 -0
- package/dist/protocols/nec.js +175 -0
- package/dist/protocols/nec.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Daikin 160-bit (20-byte) IR protocol encoder.
|
|
4
|
+
*
|
|
5
|
+
* 2 sections: bytes 0–6 (7 bytes) + bytes 7–19 (13 bytes).
|
|
6
|
+
* Ported from IRremoteESP8266 `ir_Daikin.cpp`.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.Daikin160SwingV = exports.DaikinFan = exports.DaikinMode = void 0;
|
|
10
|
+
exports.buildDaikin160Raw = buildDaikin160Raw;
|
|
11
|
+
exports.sendDaikin160 = sendDaikin160;
|
|
12
|
+
exports.encodeDaikin160Raw = encodeDaikin160Raw;
|
|
13
|
+
exports.decodeDaikin160 = decodeDaikin160;
|
|
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 = 5000;
|
|
24
|
+
const HDR_SPACE = 2145;
|
|
25
|
+
const BIT_MARK = 342;
|
|
26
|
+
const ONE_SPACE = 1786;
|
|
27
|
+
const ZERO_SPACE = 700;
|
|
28
|
+
const GAP = 29650;
|
|
29
|
+
const STATE_LENGTH = 20;
|
|
30
|
+
const SECTION1_LEN = 7;
|
|
31
|
+
// Swing positions
|
|
32
|
+
exports.Daikin160SwingV = {
|
|
33
|
+
Lowest: 0x1,
|
|
34
|
+
Low: 0x2,
|
|
35
|
+
Middle: 0x3,
|
|
36
|
+
High: 0x4,
|
|
37
|
+
Highest: 0x5,
|
|
38
|
+
Auto: 0xf,
|
|
39
|
+
};
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Bit helpers
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function setBit(raw, byteIdx, bitIdx, on) {
|
|
44
|
+
if (on)
|
|
45
|
+
raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
|
|
46
|
+
else
|
|
47
|
+
raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
|
|
48
|
+
}
|
|
49
|
+
function setBitsRange(raw, byteIdx, bitOffset, size, value) {
|
|
50
|
+
const mask = ((1 << size) - 1) << bitOffset;
|
|
51
|
+
raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Build
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
function defaultState() {
|
|
57
|
+
const raw = new Uint8Array(STATE_LENGTH);
|
|
58
|
+
raw[0] = 0x11;
|
|
59
|
+
raw[1] = 0xda;
|
|
60
|
+
raw[2] = 0x27;
|
|
61
|
+
raw[3] = 0xf0;
|
|
62
|
+
raw[4] = 0x0d;
|
|
63
|
+
raw[7] = 0x11;
|
|
64
|
+
raw[8] = 0xda;
|
|
65
|
+
raw[9] = 0x27;
|
|
66
|
+
raw[11] = 0xd3;
|
|
67
|
+
raw[12] = 0x30; // Power=0, Mode=kDaikinCool(0b011)
|
|
68
|
+
raw[13] = 0x11; // SwingV (upper nibble) = 0x1 (lowest)
|
|
69
|
+
raw[16] = 0x1e; // Temp = (25-10)=15 at bits 1-6 → 0x1e
|
|
70
|
+
raw[17] = 0x0a; // Fan = kDaikinFanAuto(0xA) at bits 0-3... wait
|
|
71
|
+
raw[18] = 0x08;
|
|
72
|
+
return raw;
|
|
73
|
+
}
|
|
74
|
+
function buildDaikin160Raw(state) {
|
|
75
|
+
const raw = defaultState();
|
|
76
|
+
// Mode (byte 12, bits 4–6)
|
|
77
|
+
let mode = state.mode ?? daikin_common_js_1.DaikinMode.Cool;
|
|
78
|
+
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))
|
|
79
|
+
mode = daikin_common_js_1.DaikinMode.Auto;
|
|
80
|
+
setBitsRange(raw, 12, 4, 3, mode);
|
|
81
|
+
// Power (byte 12, bit 0)
|
|
82
|
+
setBit(raw, 12, 0, state.power ?? false);
|
|
83
|
+
// Temp (byte 16, bits 1–6) — stored as (degrees - 10)
|
|
84
|
+
const temp = Math.min(Math.max(state.temp ?? 25, daikin_common_js_1.DAIKIN_MIN_TEMP), daikin_common_js_1.DAIKIN_MAX_TEMP);
|
|
85
|
+
setBitsRange(raw, 16, 1, 6, temp - 10);
|
|
86
|
+
// Fan (byte 17, bits 0–3)
|
|
87
|
+
const fanInput = state.fan ?? daikin_common_js_1.DaikinFan.Auto;
|
|
88
|
+
let fan;
|
|
89
|
+
if (fanInput === daikin_common_js_1.DaikinFan.Quiet || fanInput === daikin_common_js_1.DaikinFan.Auto)
|
|
90
|
+
fan = fanInput;
|
|
91
|
+
else if (fanInput < 1 || fanInput > 5)
|
|
92
|
+
fan = daikin_common_js_1.DaikinFan.Auto;
|
|
93
|
+
else
|
|
94
|
+
fan = fanInput + 2;
|
|
95
|
+
setBitsRange(raw, 17, 0, 4, fan);
|
|
96
|
+
// SwingV (byte 13, bits 4–7)
|
|
97
|
+
const swingV = state.swingVertical ?? exports.Daikin160SwingV.Auto;
|
|
98
|
+
setBitsRange(raw, 13, 4, 4, swingV);
|
|
99
|
+
// Checksums
|
|
100
|
+
raw[6] = (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1);
|
|
101
|
+
raw[19] = (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, STATE_LENGTH - 1);
|
|
102
|
+
return raw;
|
|
103
|
+
}
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Send
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
function sendDaikin160(state, repeat = 0) {
|
|
108
|
+
return encodeDaikin160Raw(buildDaikin160Raw(state), repeat);
|
|
109
|
+
}
|
|
110
|
+
function encodeDaikin160Raw(data, repeat = 0) {
|
|
111
|
+
const result = [];
|
|
112
|
+
const opts = {
|
|
113
|
+
headerMark: HDR_MARK, headerSpace: HDR_SPACE,
|
|
114
|
+
oneMark: BIT_MARK, oneSpace: ONE_SPACE,
|
|
115
|
+
zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
|
|
116
|
+
footerMark: BIT_MARK, gap: GAP, msbFirst: false,
|
|
117
|
+
};
|
|
118
|
+
for (let r = 0; r <= repeat; r++) {
|
|
119
|
+
const s1 = (0, encode_js_1.sendGenericBytes)({ ...opts, data: data.subarray(0, SECTION1_LEN) });
|
|
120
|
+
for (let i = 0; i < s1.length; i++)
|
|
121
|
+
result.push(s1[i]);
|
|
122
|
+
const s2 = (0, encode_js_1.sendGenericBytes)({ ...opts, data: data.subarray(SECTION1_LEN) });
|
|
123
|
+
for (let i = 0; i < s2.length; i++)
|
|
124
|
+
result.push(s2[i]);
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
// Decode API
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
/**
|
|
132
|
+
* Decode raw IR timings as a Daikin160 message.
|
|
133
|
+
*
|
|
134
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
135
|
+
* @param offset Starting index in the timings array (default 0).
|
|
136
|
+
* @returns Decoded state (same shape as encode input), or null on mismatch.
|
|
137
|
+
*/
|
|
138
|
+
function decodeDaikin160(timings, offset = 0, headerOptional = false) {
|
|
139
|
+
let pos = offset;
|
|
140
|
+
// Section 1: bytes 0–6 (7 bytes)
|
|
141
|
+
const section1 = (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, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
|
|
142
|
+
headerOptional);
|
|
143
|
+
if (!section1)
|
|
144
|
+
return null;
|
|
145
|
+
pos += section1.used;
|
|
146
|
+
// Section 2: bytes 7–19 (13 bytes)
|
|
147
|
+
const section2Len = STATE_LENGTH - SECTION1_LEN;
|
|
148
|
+
const section2 = (0, decode_js_1.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);
|
|
149
|
+
if (!section2)
|
|
150
|
+
return null;
|
|
151
|
+
// Combine into full raw array.
|
|
152
|
+
const raw = new Uint8Array(STATE_LENGTH);
|
|
153
|
+
raw.set(section1.data, 0);
|
|
154
|
+
raw.set(section2.data, SECTION1_LEN);
|
|
155
|
+
// Validate checksums.
|
|
156
|
+
if (raw[6] !== (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1))
|
|
157
|
+
return null;
|
|
158
|
+
if (raw[19] !== (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, STATE_LENGTH - 1))
|
|
159
|
+
return null;
|
|
160
|
+
// Extract state from byte/bit positions.
|
|
161
|
+
const mode = ((raw[12] >> 4) & 0b111);
|
|
162
|
+
const temp = ((raw[16] >> 1) & 0x3F) + 10;
|
|
163
|
+
const fanInternal = raw[17] & 0x0F;
|
|
164
|
+
const fan = fanInternal === daikin_common_js_1.DaikinFan.Auto || fanInternal === daikin_common_js_1.DaikinFan.Quiet
|
|
165
|
+
? fanInternal
|
|
166
|
+
: (fanInternal - 2);
|
|
167
|
+
const swingV = ((raw[13] >> 4) & 0x0F);
|
|
168
|
+
return {
|
|
169
|
+
power: !!(raw[12] & 0x01),
|
|
170
|
+
temp,
|
|
171
|
+
mode,
|
|
172
|
+
fan,
|
|
173
|
+
swingVertical: swingV,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//# 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, headerOptional?: boolean): 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,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CAuDvB"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Daikin 176-bit (22-byte) IR protocol encoder.
|
|
4
|
+
*
|
|
5
|
+
* 2 sections: bytes 0–6 (7 bytes) + bytes 7–21 (15 bytes).
|
|
6
|
+
* Uses different mode values from the shared Daikin constants.
|
|
7
|
+
* Ported from IRremoteESP8266 `ir_Daikin.cpp`.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.Daikin176SwingH = exports.Daikin176Mode = void 0;
|
|
11
|
+
exports.buildDaikin176Raw = buildDaikin176Raw;
|
|
12
|
+
exports.sendDaikin176 = sendDaikin176;
|
|
13
|
+
exports.encodeDaikin176Raw = encodeDaikin176Raw;
|
|
14
|
+
exports.decodeDaikin176 = decodeDaikin176;
|
|
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
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Timing constants
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
const HDR_MARK = 5070;
|
|
22
|
+
const HDR_SPACE = 2140;
|
|
23
|
+
const BIT_MARK = 370;
|
|
24
|
+
const ONE_SPACE = 1780;
|
|
25
|
+
const ZERO_SPACE = 710;
|
|
26
|
+
const GAP = 29410;
|
|
27
|
+
const STATE_LENGTH = 22;
|
|
28
|
+
const SECTION1_LEN = 7;
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Daikin176-specific mode values (different from shared DaikinMode!)
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
exports.Daikin176Mode = {
|
|
33
|
+
Fan: 0b000,
|
|
34
|
+
Heat: 0b001,
|
|
35
|
+
Cool: 0b010,
|
|
36
|
+
Auto: 0b011,
|
|
37
|
+
Dry: 0b111,
|
|
38
|
+
};
|
|
39
|
+
const DRY_FAN_TEMP = 17;
|
|
40
|
+
const MODE_BUTTON = 0x04;
|
|
41
|
+
const FAN_MAX = 3;
|
|
42
|
+
exports.Daikin176SwingH = {
|
|
43
|
+
Off: 0x6,
|
|
44
|
+
Auto: 0x5,
|
|
45
|
+
};
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Bit helpers
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
function setBit(raw, byteIdx, bitIdx, on) {
|
|
50
|
+
if (on)
|
|
51
|
+
raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
|
|
52
|
+
else
|
|
53
|
+
raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
|
|
54
|
+
}
|
|
55
|
+
function setBitsRange(raw, byteIdx, bitOffset, size, value) {
|
|
56
|
+
const mask = ((1 << size) - 1) << bitOffset;
|
|
57
|
+
raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
|
|
58
|
+
}
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Build
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
function defaultState() {
|
|
63
|
+
const raw = new Uint8Array(STATE_LENGTH);
|
|
64
|
+
raw[0] = 0x11;
|
|
65
|
+
raw[1] = 0xda;
|
|
66
|
+
raw[2] = 0x17;
|
|
67
|
+
raw[3] = 0x18;
|
|
68
|
+
raw[4] = 0x04;
|
|
69
|
+
raw[7] = 0x11;
|
|
70
|
+
raw[8] = 0xda;
|
|
71
|
+
raw[9] = 0x17;
|
|
72
|
+
raw[10] = 0x18;
|
|
73
|
+
raw[12] = 0x73;
|
|
74
|
+
raw[14] = 0x20; // Power=0, Mode=Cool(0b010) at bits 4-6
|
|
75
|
+
raw[18] = 0x16; // Fan and SwingH
|
|
76
|
+
raw[20] = 0x20;
|
|
77
|
+
return raw;
|
|
78
|
+
}
|
|
79
|
+
function buildDaikin176Raw(state) {
|
|
80
|
+
const raw = defaultState();
|
|
81
|
+
// Id (byte 3 bit 0 and byte 10 bit 0)
|
|
82
|
+
const id = state.id ?? 0;
|
|
83
|
+
setBit(raw, 3, 0, id === 1);
|
|
84
|
+
setBit(raw, 10, 0, id === 1);
|
|
85
|
+
// Mode (byte 14, bits 4–6) + AltMode (byte 12, bits 4–6)
|
|
86
|
+
let mode = state.mode ?? exports.Daikin176Mode.Cool;
|
|
87
|
+
let altMode;
|
|
88
|
+
switch (mode) {
|
|
89
|
+
case exports.Daikin176Mode.Dry:
|
|
90
|
+
altMode = 2;
|
|
91
|
+
break;
|
|
92
|
+
case exports.Daikin176Mode.Fan:
|
|
93
|
+
altMode = 6;
|
|
94
|
+
break;
|
|
95
|
+
case exports.Daikin176Mode.Auto:
|
|
96
|
+
case exports.Daikin176Mode.Cool:
|
|
97
|
+
case exports.Daikin176Mode.Heat:
|
|
98
|
+
altMode = 7;
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
mode = exports.Daikin176Mode.Cool;
|
|
102
|
+
altMode = 7;
|
|
103
|
+
}
|
|
104
|
+
setBitsRange(raw, 14, 4, 3, mode);
|
|
105
|
+
setBitsRange(raw, 12, 4, 3, altMode);
|
|
106
|
+
// Temp (byte 17, bits 1–6) — stored as (degrees - 9)
|
|
107
|
+
// Dry/Fan modes force temp to 17
|
|
108
|
+
let temp;
|
|
109
|
+
if (state.temp !== undefined) {
|
|
110
|
+
temp = Math.min(Math.max(state.temp, daikin_common_js_1.DAIKIN_MIN_TEMP), daikin_common_js_1.DAIKIN_MAX_TEMP);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
temp = 25;
|
|
114
|
+
}
|
|
115
|
+
const storedTemp = (mode === exports.Daikin176Mode.Dry || mode === exports.Daikin176Mode.Fan)
|
|
116
|
+
? DRY_FAN_TEMP - 9
|
|
117
|
+
: temp - 9;
|
|
118
|
+
setBitsRange(raw, 17, 1, 6, storedTemp);
|
|
119
|
+
// ModeButton (byte 13) — setMode sets it to MODE_BUTTON, setTemp clears it
|
|
120
|
+
// Since setMode is called last logically, set it
|
|
121
|
+
raw[13] = MODE_BUTTON;
|
|
122
|
+
// Fan (byte 18, bits 4–7) — only 1 or FAN_MAX(3) supported
|
|
123
|
+
const fanInput = state.fan ?? FAN_MAX;
|
|
124
|
+
const fan = (fanInput === 1) ? 1 : FAN_MAX;
|
|
125
|
+
setBitsRange(raw, 18, 4, 4, fan);
|
|
126
|
+
// setFan clears ModeButton
|
|
127
|
+
raw[13] = 0;
|
|
128
|
+
// Power (byte 14, bit 0) — setPower clears ModeButton
|
|
129
|
+
setBit(raw, 14, 0, state.power ?? false);
|
|
130
|
+
raw[13] = 0;
|
|
131
|
+
// SwingH (byte 18, bits 0–3)
|
|
132
|
+
const swingH = state.swingHorizontal ?? exports.Daikin176SwingH.Auto;
|
|
133
|
+
setBitsRange(raw, 18, 0, 4, swingH === exports.Daikin176SwingH.Off ? exports.Daikin176SwingH.Off : exports.Daikin176SwingH.Auto);
|
|
134
|
+
// Checksums
|
|
135
|
+
raw[6] = (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1);
|
|
136
|
+
raw[21] = (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, STATE_LENGTH - 1);
|
|
137
|
+
return raw;
|
|
138
|
+
}
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Send
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
function sendDaikin176(state, repeat = 0) {
|
|
143
|
+
return encodeDaikin176Raw(buildDaikin176Raw(state), repeat);
|
|
144
|
+
}
|
|
145
|
+
function encodeDaikin176Raw(data, repeat = 0) {
|
|
146
|
+
const result = [];
|
|
147
|
+
const opts = {
|
|
148
|
+
headerMark: HDR_MARK, headerSpace: HDR_SPACE,
|
|
149
|
+
oneMark: BIT_MARK, oneSpace: ONE_SPACE,
|
|
150
|
+
zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
|
|
151
|
+
footerMark: BIT_MARK, gap: GAP, msbFirst: false,
|
|
152
|
+
};
|
|
153
|
+
for (let r = 0; r <= repeat; r++) {
|
|
154
|
+
const s1 = (0, encode_js_1.sendGenericBytes)({ ...opts, data: data.subarray(0, SECTION1_LEN) });
|
|
155
|
+
for (let i = 0; i < s1.length; i++)
|
|
156
|
+
result.push(s1[i]);
|
|
157
|
+
const s2 = (0, encode_js_1.sendGenericBytes)({ ...opts, data: data.subarray(SECTION1_LEN) });
|
|
158
|
+
for (let i = 0; i < s2.length; i++)
|
|
159
|
+
result.push(s2[i]);
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
// Decode API
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
/**
|
|
167
|
+
* Decode raw IR timings as a Daikin176 message.
|
|
168
|
+
*
|
|
169
|
+
* The protocol has 2 sections (7 + 15 bytes), each with its own header,
|
|
170
|
+
* data, footer, and checksum. No leader/preamble.
|
|
171
|
+
*
|
|
172
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
173
|
+
* @param offset Starting index in the timings array (default 0).
|
|
174
|
+
* @returns Decoded state (same shape as encode input), or null on mismatch.
|
|
175
|
+
*/
|
|
176
|
+
function decodeDaikin176(timings, offset = 0, headerOptional = false) {
|
|
177
|
+
let pos = offset;
|
|
178
|
+
// Section 1: 7 bytes (header + data + footer).
|
|
179
|
+
const section1 = (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, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
|
|
180
|
+
headerOptional);
|
|
181
|
+
if (!section1)
|
|
182
|
+
return null;
|
|
183
|
+
pos += section1.used;
|
|
184
|
+
// Section 2: 15 bytes (header + data + footer).
|
|
185
|
+
const section2Len = STATE_LENGTH - SECTION1_LEN;
|
|
186
|
+
const section2 = (0, decode_js_1.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);
|
|
187
|
+
if (!section2)
|
|
188
|
+
return null;
|
|
189
|
+
// Combine into full 22-byte array.
|
|
190
|
+
const raw = new Uint8Array(STATE_LENGTH);
|
|
191
|
+
raw.set(section1.data, 0);
|
|
192
|
+
raw.set(section2.data, SECTION1_LEN);
|
|
193
|
+
// Validate checksums.
|
|
194
|
+
if (raw[6] !== (0, encode_js_1.sumBytes)(raw, 0, SECTION1_LEN - 1))
|
|
195
|
+
return null;
|
|
196
|
+
if (raw[21] !== (0, encode_js_1.sumBytes)(raw, SECTION1_LEN, STATE_LENGTH - 1))
|
|
197
|
+
return null;
|
|
198
|
+
// Extract state from byte/bit positions.
|
|
199
|
+
const mode = ((raw[14] >> 4) & 0b111);
|
|
200
|
+
const storedTemp = (raw[17] >> 1) & 0x3F;
|
|
201
|
+
const temp = storedTemp + 9;
|
|
202
|
+
const fan = ((raw[18] >> 4) & 0x0F);
|
|
203
|
+
const swingHRaw = raw[18] & 0x0F;
|
|
204
|
+
const swingHorizontal = swingHRaw === exports.Daikin176SwingH.Auto ? exports.Daikin176SwingH.Auto : exports.Daikin176SwingH.Off;
|
|
205
|
+
const id = (raw[3] & 0x01) ? 1 : 0;
|
|
206
|
+
return {
|
|
207
|
+
power: !!(raw[14] & 0x01),
|
|
208
|
+
temp,
|
|
209
|
+
mode,
|
|
210
|
+
fan,
|
|
211
|
+
swingHorizontal,
|
|
212
|
+
id,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
//# 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, headerOptional?: boolean): 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;AAuB3D,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,EAClB,cAAc,GAAE,OAAe,GAC9B,YAAY,GAAG,IAAI,CAyHrB"}
|