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,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Daikin 128-bit (16-byte) IR protocol encoder.
|
|
4
|
+
*
|
|
5
|
+
* Leader (2x mark/space) + 2 sections: bytes 0–7 (with header) + bytes 8–15 (no header, footer mark).
|
|
6
|
+
* Nibble-based checksums.
|
|
7
|
+
* Ported from IRremoteESP8266 `ir_Daikin.cpp`.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.Daikin128Fan = exports.Daikin128Mode = void 0;
|
|
11
|
+
exports.buildDaikin128Raw = buildDaikin128Raw;
|
|
12
|
+
exports.sendDaikin128 = sendDaikin128;
|
|
13
|
+
exports.encodeDaikin128Raw = encodeDaikin128Raw;
|
|
14
|
+
exports.decodeDaikin128 = decodeDaikin128;
|
|
15
|
+
const encode_js_1 = require("../encode.js");
|
|
16
|
+
const decode_js_1 = require("../decode.js");
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Timing constants (shared with Daikin64)
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
const LDR_MARK = 9800;
|
|
21
|
+
const LDR_SPACE = 9800;
|
|
22
|
+
const HDR_MARK = 4600;
|
|
23
|
+
const HDR_SPACE = 2500;
|
|
24
|
+
const BIT_MARK = 350;
|
|
25
|
+
const ONE_SPACE = 954;
|
|
26
|
+
const ZERO_SPACE = 382;
|
|
27
|
+
const GAP = 20300;
|
|
28
|
+
const FOOTER_MARK = 4600; // kDaikin128FooterMark = kDaikin128HdrMark
|
|
29
|
+
const STATE_LENGTH = 16;
|
|
30
|
+
const SECTION_LEN = 8;
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Daikin128-specific mode values (4-bit, different from shared 3-bit)
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
exports.Daikin128Mode = {
|
|
35
|
+
Dry: 0b0001,
|
|
36
|
+
Cool: 0b0010,
|
|
37
|
+
Fan: 0b0100,
|
|
38
|
+
Heat: 0b1000,
|
|
39
|
+
Auto: 0b1010,
|
|
40
|
+
};
|
|
41
|
+
exports.Daikin128Fan = {
|
|
42
|
+
Auto: 0b0001,
|
|
43
|
+
High: 0b0010,
|
|
44
|
+
Med: 0b0100,
|
|
45
|
+
Low: 0b1000,
|
|
46
|
+
Powerful: 0b0011,
|
|
47
|
+
Quiet: 0b1001,
|
|
48
|
+
};
|
|
49
|
+
const MIN_TEMP = 16;
|
|
50
|
+
const MAX_TEMP = 30;
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Bit helpers
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
function setBit(raw, byteIdx, bitIdx, on) {
|
|
55
|
+
if (on)
|
|
56
|
+
raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
|
|
57
|
+
else
|
|
58
|
+
raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
|
|
59
|
+
}
|
|
60
|
+
function setBitsRange(raw, byteIdx, bitOffset, size, value) {
|
|
61
|
+
const mask = ((1 << size) - 1) << bitOffset;
|
|
62
|
+
raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Build
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
function defaultState() {
|
|
68
|
+
const raw = new Uint8Array(STATE_LENGTH);
|
|
69
|
+
raw[0] = 0x16;
|
|
70
|
+
raw[7] = 0x04; // Lower nibble = 0x4, upper nibble = checksum
|
|
71
|
+
raw[8] = 0xa1;
|
|
72
|
+
return raw;
|
|
73
|
+
}
|
|
74
|
+
function buildDaikin128Raw(state) {
|
|
75
|
+
const raw = defaultState();
|
|
76
|
+
// Mode (byte 1, bits 0–3)
|
|
77
|
+
let mode = state.mode ?? exports.Daikin128Mode.Auto;
|
|
78
|
+
if (!(mode === exports.Daikin128Mode.Auto || mode === exports.Daikin128Mode.Cool || mode === exports.Daikin128Mode.Heat || mode === exports.Daikin128Mode.Fan || mode === exports.Daikin128Mode.Dry))
|
|
79
|
+
mode = exports.Daikin128Mode.Auto;
|
|
80
|
+
setBitsRange(raw, 1, 0, 4, mode);
|
|
81
|
+
// Fan (byte 1, bits 4–7) — mode-dependent constraints
|
|
82
|
+
let fan = state.fan ?? exports.Daikin128Fan.Auto;
|
|
83
|
+
if (fan === exports.Daikin128Fan.Quiet || fan === exports.Daikin128Fan.Powerful) {
|
|
84
|
+
if (mode === exports.Daikin128Mode.Auto)
|
|
85
|
+
fan = exports.Daikin128Fan.Auto;
|
|
86
|
+
}
|
|
87
|
+
if (!(fan === exports.Daikin128Fan.Auto || fan === exports.Daikin128Fan.High || fan === exports.Daikin128Fan.Med || fan === exports.Daikin128Fan.Low || fan === exports.Daikin128Fan.Quiet || fan === exports.Daikin128Fan.Powerful))
|
|
88
|
+
fan = exports.Daikin128Fan.Auto;
|
|
89
|
+
setBitsRange(raw, 1, 4, 4, fan);
|
|
90
|
+
// Clock (byte 2 = ClockMins BCD, byte 3 = ClockHours BCD)
|
|
91
|
+
if (state.clock !== undefined) {
|
|
92
|
+
let mins = state.clock;
|
|
93
|
+
if (mins >= 24 * 60)
|
|
94
|
+
mins = 0;
|
|
95
|
+
raw[2] = (0, encode_js_1.uint8ToBcd)(mins % 60);
|
|
96
|
+
raw[3] = (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60));
|
|
97
|
+
}
|
|
98
|
+
// On timer (byte 4: bits 0–5 = OnHours, bit 6 = OnHalfHour, bit 7 = OnTimer)
|
|
99
|
+
if (state.onTime !== undefined) {
|
|
100
|
+
let mins = state.onTime;
|
|
101
|
+
if (mins >= 24 * 60)
|
|
102
|
+
mins = 0;
|
|
103
|
+
setBitsRange(raw, 4, 0, 6, (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60)));
|
|
104
|
+
setBit(raw, 4, 6, (mins % 60) >= 30);
|
|
105
|
+
}
|
|
106
|
+
setBit(raw, 4, 7, state.onTimerEnabled ?? false);
|
|
107
|
+
// Off timer (byte 5: bits 0–5 = OffHours, bit 6 = OffHalfHour, bit 7 = OffTimer)
|
|
108
|
+
if (state.offTime !== undefined) {
|
|
109
|
+
let mins = state.offTime;
|
|
110
|
+
if (mins >= 24 * 60)
|
|
111
|
+
mins = 0;
|
|
112
|
+
setBitsRange(raw, 5, 0, 6, (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60)));
|
|
113
|
+
setBit(raw, 5, 6, (mins % 60) >= 30);
|
|
114
|
+
}
|
|
115
|
+
setBit(raw, 5, 7, state.offTimerEnabled ?? false);
|
|
116
|
+
// Temp (byte 6, BCD)
|
|
117
|
+
const temp = Math.min(Math.max(state.temp ?? 24, MIN_TEMP), MAX_TEMP);
|
|
118
|
+
raw[6] = (0, encode_js_1.uint8ToBcd)(temp);
|
|
119
|
+
// Byte 7 lower nibble fields: SwingV(bit 0), Sleep(bit 1), bit 2 always 1, Power(bit 3)
|
|
120
|
+
setBit(raw, 7, 0, state.swingVertical ?? false);
|
|
121
|
+
setBit(raw, 7, 1, state.sleep ?? false);
|
|
122
|
+
setBit(raw, 7, 2, true); // always 1
|
|
123
|
+
setBit(raw, 7, 3, state.power ?? false);
|
|
124
|
+
// Byte 9: Ceiling(bit 0), Econo(bit 2), Wall(bit 3)
|
|
125
|
+
const econo = (state.econo ?? false) && (mode === exports.Daikin128Mode.Cool || mode === exports.Daikin128Mode.Heat);
|
|
126
|
+
setBit(raw, 9, 0, state.ceiling ?? false);
|
|
127
|
+
setBit(raw, 9, 2, econo);
|
|
128
|
+
setBit(raw, 9, 3, state.wall ?? false);
|
|
129
|
+
// --- Checksums ---
|
|
130
|
+
// First checksum: sumNibbles(bytes 0–6, init=lower nibble of byte 7) & 0x0F → upper nibble of byte 7
|
|
131
|
+
const sum1 = (0, encode_js_1.sumNibbles)(raw, 0, SECTION_LEN - 1, raw[7] & 0x0f) & 0x0f;
|
|
132
|
+
raw[7] = (raw[7] & 0x0f) | (sum1 << 4);
|
|
133
|
+
// Second checksum: sumNibbles(bytes 8–14) → byte 15
|
|
134
|
+
raw[15] = (0, encode_js_1.sumNibbles)(raw, SECTION_LEN, SECTION_LEN - 1);
|
|
135
|
+
return raw;
|
|
136
|
+
}
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
// Send
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
function sendDaikin128(state, repeat = 0) {
|
|
141
|
+
return encodeDaikin128Raw(buildDaikin128Raw(state), repeat);
|
|
142
|
+
}
|
|
143
|
+
function encodeDaikin128Raw(data, repeat = 0) {
|
|
144
|
+
const result = [];
|
|
145
|
+
for (let r = 0; r <= repeat; r++) {
|
|
146
|
+
// Leader: 2x (mark + space)
|
|
147
|
+
for (let i = 0; i < 2; i++) {
|
|
148
|
+
result.push(LDR_MARK);
|
|
149
|
+
result.push(LDR_SPACE);
|
|
150
|
+
}
|
|
151
|
+
// Section 1 (bytes 0–7) — with header
|
|
152
|
+
const s1 = (0, encode_js_1.sendGenericBytes)({
|
|
153
|
+
headerMark: HDR_MARK, headerSpace: HDR_SPACE,
|
|
154
|
+
oneMark: BIT_MARK, oneSpace: ONE_SPACE,
|
|
155
|
+
zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
|
|
156
|
+
footerMark: BIT_MARK, gap: GAP,
|
|
157
|
+
data: data.subarray(0, SECTION_LEN), msbFirst: false,
|
|
158
|
+
});
|
|
159
|
+
for (let i = 0; i < s1.length; i++)
|
|
160
|
+
result.push(s1[i]);
|
|
161
|
+
// Section 2 (bytes 8–15) — no header, footer = FOOTER_MARK
|
|
162
|
+
const s2 = (0, encode_js_1.sendGenericBytes)({
|
|
163
|
+
headerMark: 0, headerSpace: 0,
|
|
164
|
+
oneMark: BIT_MARK, oneSpace: ONE_SPACE,
|
|
165
|
+
zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
|
|
166
|
+
footerMark: FOOTER_MARK, gap: GAP,
|
|
167
|
+
data: data.subarray(SECTION_LEN), msbFirst: false,
|
|
168
|
+
});
|
|
169
|
+
for (let i = 0; i < s2.length; i++)
|
|
170
|
+
result.push(s2[i]);
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Decode API
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
/**
|
|
178
|
+
* Try to skip the leader section (2x mark/space pairs).
|
|
179
|
+
* Returns the new offset past the leader, or the original offset if no leader.
|
|
180
|
+
*/
|
|
181
|
+
function skipLeader(timings, offset) {
|
|
182
|
+
let pos = offset;
|
|
183
|
+
// Leader is 2x (LDR_MARK + LDR_SPACE)
|
|
184
|
+
for (let i = 0; i < 2; i++) {
|
|
185
|
+
if (pos + 1 >= timings.length)
|
|
186
|
+
return offset;
|
|
187
|
+
if (!(0, decode_js_1.matchMark)(timings[pos], LDR_MARK))
|
|
188
|
+
return offset;
|
|
189
|
+
if (!(0, decode_js_1.matchSpace)(timings[pos + 1], LDR_SPACE))
|
|
190
|
+
return offset;
|
|
191
|
+
pos += 2;
|
|
192
|
+
}
|
|
193
|
+
return pos;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Decode raw IR timings as a Daikin128 message.
|
|
197
|
+
*
|
|
198
|
+
* The leader preamble (2x mark/space) is optional — hardware captures often
|
|
199
|
+
* miss it.
|
|
200
|
+
*
|
|
201
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
202
|
+
* @param offset Starting index in the timings array (default 0).
|
|
203
|
+
* @returns Decoded state (same shape as encode input), or null on mismatch.
|
|
204
|
+
*/
|
|
205
|
+
function decodeDaikin128(timings, offset = 0, headerOptional = false) {
|
|
206
|
+
// Skip leader if present.
|
|
207
|
+
let pos = skipLeader(timings, offset);
|
|
208
|
+
// Section 1 (bytes 0–7): header + 8 bytes + footer (BIT_MARK + GAP).
|
|
209
|
+
const s1 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, SECTION_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
|
|
210
|
+
headerOptional);
|
|
211
|
+
if (!s1)
|
|
212
|
+
return null;
|
|
213
|
+
pos += s1.used;
|
|
214
|
+
// Section 2 (bytes 8–15): no header + 8 bytes + footer (FOOTER_MARK + GAP).
|
|
215
|
+
const s2 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, SECTION_LEN, 0, 0, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, FOOTER_MARK, GAP, true, undefined, undefined, false);
|
|
216
|
+
if (!s2)
|
|
217
|
+
return null;
|
|
218
|
+
// Concatenate sections into one 16-byte array.
|
|
219
|
+
const raw = new Uint8Array(STATE_LENGTH);
|
|
220
|
+
raw.set(s1.data, 0);
|
|
221
|
+
raw.set(s2.data, SECTION_LEN);
|
|
222
|
+
// Validate checksums.
|
|
223
|
+
// Section 1: sumNibbles(bytes 0–6, init=lower nibble of byte 7) & 0x0F === upper nibble of byte 7
|
|
224
|
+
const expectedSum1 = (0, encode_js_1.sumNibbles)(raw, 0, SECTION_LEN - 1, raw[7] & 0x0f) & 0x0f;
|
|
225
|
+
if (((raw[7] >> 4) & 0x0f) !== expectedSum1)
|
|
226
|
+
return null;
|
|
227
|
+
// Section 2: sumNibbles(bytes 8–14) === byte 15
|
|
228
|
+
const expectedSum2 = (0, encode_js_1.sumNibbles)(raw, SECTION_LEN, SECTION_LEN - 1);
|
|
229
|
+
if (raw[15] !== expectedSum2)
|
|
230
|
+
return null;
|
|
231
|
+
// Extract state from byte/bit positions.
|
|
232
|
+
const mode = (raw[1] & 0x0f);
|
|
233
|
+
const fan = ((raw[1] >> 4) & 0x0f);
|
|
234
|
+
// Clock: byte 2 = minutes BCD, byte 3 = hours BCD
|
|
235
|
+
const clockMins = (0, encode_js_1.bcdToUint8)(raw[2]);
|
|
236
|
+
const clockHours = (0, encode_js_1.bcdToUint8)(raw[3]);
|
|
237
|
+
const clock = clockHours * 60 + clockMins;
|
|
238
|
+
// On timer (byte 4): bits 0–5 = hours BCD, bit 6 = half-hour, bit 7 = enabled
|
|
239
|
+
const onTimerHours = (0, encode_js_1.bcdToUint8)(raw[4] & 0x3f);
|
|
240
|
+
const onTimerHalf = !!(raw[4] & (1 << 6));
|
|
241
|
+
const onTimerEnabled = !!(raw[4] & (1 << 7));
|
|
242
|
+
const onTime = onTimerHours * 60 + (onTimerHalf ? 30 : 0);
|
|
243
|
+
// Off timer (byte 5): bits 0–5 = hours BCD, bit 6 = half-hour, bit 7 = enabled
|
|
244
|
+
const offTimerHours = (0, encode_js_1.bcdToUint8)(raw[5] & 0x3f);
|
|
245
|
+
const offTimerHalf = !!(raw[5] & (1 << 6));
|
|
246
|
+
const offTimerEnabled = !!(raw[5] & (1 << 7));
|
|
247
|
+
const offTime = offTimerHours * 60 + (offTimerHalf ? 30 : 0);
|
|
248
|
+
// Temp (byte 6, BCD)
|
|
249
|
+
const temp = (0, encode_js_1.bcdToUint8)(raw[6]);
|
|
250
|
+
return {
|
|
251
|
+
power: !!(raw[7] & (1 << 3)),
|
|
252
|
+
temp,
|
|
253
|
+
mode,
|
|
254
|
+
fan,
|
|
255
|
+
swingVertical: !!(raw[7] & (1 << 0)),
|
|
256
|
+
sleep: !!(raw[7] & (1 << 1)),
|
|
257
|
+
econo: !!(raw[9] & (1 << 2)),
|
|
258
|
+
ceiling: !!(raw[9] & (1 << 0)),
|
|
259
|
+
wall: !!(raw[9] & (1 << 3)),
|
|
260
|
+
clock,
|
|
261
|
+
onTimerEnabled,
|
|
262
|
+
onTime,
|
|
263
|
+
offTimerEnabled,
|
|
264
|
+
offTime,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=daikin128.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daikin128.js","sourceRoot":"","sources":["../../../src/protocols/daikin128.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daikin 152-bit (19-byte) IR protocol encoder.
|
|
3
|
+
*
|
|
4
|
+
* Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
|
|
5
|
+
*/
|
|
6
|
+
import type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
|
|
7
|
+
export { DaikinMode, DaikinFan } from "./daikin_common.js";
|
|
8
|
+
export type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
|
|
9
|
+
export interface Daikin152State {
|
|
10
|
+
power?: boolean;
|
|
11
|
+
/** Temperature in °C (10–32). Ignored in Fan/Dry modes. */
|
|
12
|
+
temp?: number;
|
|
13
|
+
mode?: DaikinModeValue;
|
|
14
|
+
/** Fan speed: 1–5, or DaikinFan.Auto / DaikinFan.Quiet. */
|
|
15
|
+
fan?: DaikinFanValue;
|
|
16
|
+
swingVertical?: boolean;
|
|
17
|
+
quiet?: boolean;
|
|
18
|
+
powerful?: boolean;
|
|
19
|
+
econo?: boolean;
|
|
20
|
+
sensor?: boolean;
|
|
21
|
+
comfort?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the raw 19-byte Daikin152 state from a state object.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildDaikin152Raw(state: Daikin152State): Uint8Array;
|
|
27
|
+
/**
|
|
28
|
+
* Encode a Daikin152 AC state into raw IR timings.
|
|
29
|
+
*/
|
|
30
|
+
export declare function sendDaikin152(state: Daikin152State, repeat?: number): number[];
|
|
31
|
+
/**
|
|
32
|
+
* Encode a raw 19-byte Daikin152 state into IR timings.
|
|
33
|
+
*
|
|
34
|
+
* Matches IRremoteESP8266 `IRsend::sendDaikin152`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function encodeDaikin152Raw(data: Uint8Array, repeat?: number): number[];
|
|
37
|
+
/**
|
|
38
|
+
* Decode raw IR timings as a Daikin152 message.
|
|
39
|
+
*
|
|
40
|
+
* The 5-bit leader preamble is optional — hardware captures often miss it.
|
|
41
|
+
*
|
|
42
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
43
|
+
* @param offset Starting index in the timings array (default 0).
|
|
44
|
+
* @returns Decoded state (same shape as encode input), or null on mismatch.
|
|
45
|
+
*/
|
|
46
|
+
export declare function decodeDaikin152(timings: number[], offset?: number, headerOptional?: boolean): Daikin152State | null;
|
|
47
|
+
//# sourceMappingURL=daikin152.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daikin152.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin152.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqB1E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAwFnE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAGzE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAqCzE;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CA2CvB"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Daikin 152-bit (19-byte) IR protocol encoder.
|
|
4
|
+
*
|
|
5
|
+
* Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.DaikinFan = exports.DaikinMode = void 0;
|
|
9
|
+
exports.buildDaikin152Raw = buildDaikin152Raw;
|
|
10
|
+
exports.sendDaikin152 = sendDaikin152;
|
|
11
|
+
exports.encodeDaikin152Raw = encodeDaikin152Raw;
|
|
12
|
+
exports.decodeDaikin152 = decodeDaikin152;
|
|
13
|
+
const encode_js_1 = require("../encode.js");
|
|
14
|
+
const decode_js_1 = require("../decode.js");
|
|
15
|
+
const daikin_common_js_1 = require("./daikin_common.js");
|
|
16
|
+
var daikin_common_js_2 = require("./daikin_common.js");
|
|
17
|
+
Object.defineProperty(exports, "DaikinMode", { enumerable: true, get: function () { return daikin_common_js_2.DaikinMode; } });
|
|
18
|
+
Object.defineProperty(exports, "DaikinFan", { enumerable: true, get: function () { return daikin_common_js_2.DaikinFan; } });
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Timing constants
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
const HDR_MARK = 3492;
|
|
23
|
+
const HDR_SPACE = 1718;
|
|
24
|
+
const BIT_MARK = 433;
|
|
25
|
+
const ONE_SPACE = 1529;
|
|
26
|
+
const ZERO_SPACE = 433; // kDaikin152ZeroSpace = kDaikin152BitMark
|
|
27
|
+
const GAP = 25182;
|
|
28
|
+
const LEADER_BITS = 5;
|
|
29
|
+
const STATE_LENGTH = 19;
|
|
30
|
+
const FAN_TEMP = 0x60; // 96 — special temp for fan-only mode
|
|
31
|
+
const DRY_TEMP = daikin_common_js_1.DAIKIN2_MIN_COOL_TEMP; // 18
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Build raw byte array
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
function defaultState() {
|
|
36
|
+
const raw = new Uint8Array(STATE_LENGTH);
|
|
37
|
+
raw[0] = 0x11;
|
|
38
|
+
raw[1] = 0xda;
|
|
39
|
+
raw[2] = 0x27;
|
|
40
|
+
// bytes 3–14 are 0x00
|
|
41
|
+
raw[15] = 0xc5;
|
|
42
|
+
// bytes 16–17 are 0x00
|
|
43
|
+
// byte 18 = checksum (set later)
|
|
44
|
+
return raw;
|
|
45
|
+
}
|
|
46
|
+
// Bit manipulation helpers for byte arrays
|
|
47
|
+
function setBit(raw, byteIdx, bitIdx, on) {
|
|
48
|
+
if (on)
|
|
49
|
+
raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
|
|
50
|
+
else
|
|
51
|
+
raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
|
|
52
|
+
}
|
|
53
|
+
function setBitsRange(raw, byteIdx, bitOffset, size, value) {
|
|
54
|
+
const mask = ((1 << size) - 1) << bitOffset;
|
|
55
|
+
raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build the raw 19-byte Daikin152 state from a state object.
|
|
59
|
+
*/
|
|
60
|
+
function buildDaikin152Raw(state) {
|
|
61
|
+
const raw = defaultState();
|
|
62
|
+
// --- Mode (byte 5, bits 4–6) ---
|
|
63
|
+
let mode = state.mode ?? daikin_common_js_1.DaikinMode.Auto;
|
|
64
|
+
switch (mode) {
|
|
65
|
+
case daikin_common_js_1.DaikinMode.Auto:
|
|
66
|
+
case daikin_common_js_1.DaikinMode.Cool:
|
|
67
|
+
case daikin_common_js_1.DaikinMode.Heat:
|
|
68
|
+
case daikin_common_js_1.DaikinMode.Dry:
|
|
69
|
+
case daikin_common_js_1.DaikinMode.Fan:
|
|
70
|
+
break;
|
|
71
|
+
default:
|
|
72
|
+
mode = daikin_common_js_1.DaikinMode.Auto;
|
|
73
|
+
}
|
|
74
|
+
setBitsRange(raw, 5, 4, 3, mode);
|
|
75
|
+
// --- Temp (byte 6, bits 1–7) ---
|
|
76
|
+
// C++ behaviour: setMode() sets a mode-specific default temp for Fan/Dry,
|
|
77
|
+
// then setTemp() overrides if the caller provides one.
|
|
78
|
+
let temp;
|
|
79
|
+
if (state.temp !== undefined) {
|
|
80
|
+
// Caller provided temp — apply same logic as C++ setTemp()
|
|
81
|
+
if (state.temp === FAN_TEMP) {
|
|
82
|
+
temp = FAN_TEMP; // Special fan-only temp passthrough
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const minTemp = mode === daikin_common_js_1.DaikinMode.Heat ? daikin_common_js_1.DAIKIN_MIN_TEMP : daikin_common_js_1.DAIKIN2_MIN_COOL_TEMP;
|
|
86
|
+
temp = Math.min(Math.max(state.temp, minTemp), daikin_common_js_1.DAIKIN_MAX_TEMP);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// No temp provided — use mode-specific default
|
|
91
|
+
if (mode === daikin_common_js_1.DaikinMode.Fan)
|
|
92
|
+
temp = FAN_TEMP;
|
|
93
|
+
else if (mode === daikin_common_js_1.DaikinMode.Dry)
|
|
94
|
+
temp = DRY_TEMP;
|
|
95
|
+
else
|
|
96
|
+
temp = 25;
|
|
97
|
+
}
|
|
98
|
+
setBitsRange(raw, 6, 1, 7, temp);
|
|
99
|
+
// --- Fan (byte 8, bits 4–7) ---
|
|
100
|
+
let fan;
|
|
101
|
+
const fanInput = state.fan ?? daikin_common_js_1.DaikinFan.Auto;
|
|
102
|
+
if (fanInput === daikin_common_js_1.DaikinFan.Quiet || fanInput === daikin_common_js_1.DaikinFan.Auto) {
|
|
103
|
+
fan = fanInput;
|
|
104
|
+
}
|
|
105
|
+
else if (fanInput < 1 || fanInput > 5) {
|
|
106
|
+
fan = daikin_common_js_1.DaikinFan.Auto;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
fan = fanInput + 2; // Internal encoding: speed + 2
|
|
110
|
+
}
|
|
111
|
+
setBitsRange(raw, 8, 4, 4, fan);
|
|
112
|
+
// --- SwingV (byte 8, bits 0–3) ---
|
|
113
|
+
const swingV = state.swingVertical ?? false;
|
|
114
|
+
setBitsRange(raw, 8, 0, 4, swingV ? daikin_common_js_1.DAIKIN_SWING_ON : daikin_common_js_1.DAIKIN_SWING_OFF);
|
|
115
|
+
// --- Power (byte 5, bit 0) ---
|
|
116
|
+
setBit(raw, 5, 0, state.power ?? false);
|
|
117
|
+
// --- Quiet, Powerful, Econo, Comfort with mutual exclusions ---
|
|
118
|
+
// Apply in same order as C++ class: quiet → powerful → econo → comfort
|
|
119
|
+
let quiet = state.quiet ?? false;
|
|
120
|
+
let powerful = state.powerful ?? false;
|
|
121
|
+
let econo = state.econo ?? false;
|
|
122
|
+
let comfort = state.comfort ?? false;
|
|
123
|
+
// Resolve mutual exclusions (same logic as C++ setters called in order)
|
|
124
|
+
if (quiet)
|
|
125
|
+
powerful = false;
|
|
126
|
+
if (powerful) {
|
|
127
|
+
quiet = false;
|
|
128
|
+
comfort = false;
|
|
129
|
+
econo = false;
|
|
130
|
+
}
|
|
131
|
+
if (econo)
|
|
132
|
+
powerful = false;
|
|
133
|
+
if (comfort) {
|
|
134
|
+
powerful = false;
|
|
135
|
+
// Comfort also forces fan=auto and swing=off
|
|
136
|
+
setBitsRange(raw, 8, 4, 4, daikin_common_js_1.DaikinFan.Auto);
|
|
137
|
+
setBitsRange(raw, 8, 0, 4, daikin_common_js_1.DAIKIN_SWING_OFF);
|
|
138
|
+
}
|
|
139
|
+
setBit(raw, 13, 5, quiet); // Byte 13, bit 5
|
|
140
|
+
setBit(raw, 13, 0, powerful); // Byte 13, bit 0
|
|
141
|
+
setBit(raw, 16, 2, econo); // Byte 16, bit 2
|
|
142
|
+
setBit(raw, 16, 1, comfort); // Byte 16, bit 1
|
|
143
|
+
setBit(raw, 16, 3, state.sensor ?? false); // Byte 16, bit 3
|
|
144
|
+
// --- Checksum (byte 18) ---
|
|
145
|
+
raw[18] = (0, encode_js_1.sumBytes)(raw, 0, STATE_LENGTH - 1);
|
|
146
|
+
return raw;
|
|
147
|
+
}
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// Public API
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
/**
|
|
152
|
+
* Encode a Daikin152 AC state into raw IR timings.
|
|
153
|
+
*/
|
|
154
|
+
function sendDaikin152(state, repeat = 0) {
|
|
155
|
+
const raw = buildDaikin152Raw(state);
|
|
156
|
+
return encodeDaikin152Raw(raw, repeat);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Encode a raw 19-byte Daikin152 state into IR timings.
|
|
160
|
+
*
|
|
161
|
+
* Matches IRremoteESP8266 `IRsend::sendDaikin152`.
|
|
162
|
+
*/
|
|
163
|
+
function encodeDaikin152Raw(data, repeat = 0) {
|
|
164
|
+
const result = [];
|
|
165
|
+
for (let r = 0; r <= repeat; r++) {
|
|
166
|
+
// Leader: 5 bits of zero (no header)
|
|
167
|
+
const leader = (0, encode_js_1.sendGeneric)({
|
|
168
|
+
headerMark: 0,
|
|
169
|
+
headerSpace: 0,
|
|
170
|
+
oneMark: BIT_MARK,
|
|
171
|
+
oneSpace: ONE_SPACE,
|
|
172
|
+
zeroMark: BIT_MARK,
|
|
173
|
+
zeroSpace: ZERO_SPACE,
|
|
174
|
+
footerMark: BIT_MARK,
|
|
175
|
+
gap: GAP,
|
|
176
|
+
data: 0n,
|
|
177
|
+
nbits: LEADER_BITS,
|
|
178
|
+
msbFirst: false,
|
|
179
|
+
});
|
|
180
|
+
for (let i = 0; i < leader.length; i++)
|
|
181
|
+
result.push(leader[i]);
|
|
182
|
+
// Header + Data + Footer
|
|
183
|
+
const frame = (0, encode_js_1.sendGenericBytes)({
|
|
184
|
+
headerMark: HDR_MARK,
|
|
185
|
+
headerSpace: HDR_SPACE,
|
|
186
|
+
oneMark: BIT_MARK,
|
|
187
|
+
oneSpace: ONE_SPACE,
|
|
188
|
+
zeroMark: BIT_MARK,
|
|
189
|
+
zeroSpace: ZERO_SPACE,
|
|
190
|
+
footerMark: BIT_MARK,
|
|
191
|
+
gap: GAP,
|
|
192
|
+
data,
|
|
193
|
+
msbFirst: false,
|
|
194
|
+
});
|
|
195
|
+
for (let i = 0; i < frame.length; i++)
|
|
196
|
+
result.push(frame[i]);
|
|
197
|
+
}
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// Decode API
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
/**
|
|
204
|
+
* Try to skip a leader section (e.g. 5 zero bits + footer + gap).
|
|
205
|
+
* Returns the new offset past the leader, or the original offset if no leader.
|
|
206
|
+
*/
|
|
207
|
+
function skipLeader(timings, offset) {
|
|
208
|
+
const result = (0, decode_js_1.matchGeneric)(timings, offset, timings.length - offset, LEADER_BITS, 0, 0, // no header
|
|
209
|
+
BIT_MARK, ONE_SPACE, // oneMark, oneSpace
|
|
210
|
+
BIT_MARK, ZERO_SPACE, // zeroMark, zeroSpace
|
|
211
|
+
BIT_MARK, GAP, // footerMark, gap
|
|
212
|
+
true);
|
|
213
|
+
return result ? offset + result.used : offset;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Decode raw IR timings as a Daikin152 message.
|
|
217
|
+
*
|
|
218
|
+
* The 5-bit leader preamble is optional — hardware captures often miss it.
|
|
219
|
+
*
|
|
220
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
221
|
+
* @param offset Starting index in the timings array (default 0).
|
|
222
|
+
* @returns Decoded state (same shape as encode input), or null on mismatch.
|
|
223
|
+
*/
|
|
224
|
+
function decodeDaikin152(timings, offset = 0, headerOptional = false) {
|
|
225
|
+
// Skip leader if present.
|
|
226
|
+
let pos = skipLeader(timings, offset);
|
|
227
|
+
// Match main frame: header + 19 bytes (LSB-first) + footer.
|
|
228
|
+
const frame = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, STATE_LENGTH, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
|
|
229
|
+
headerOptional);
|
|
230
|
+
if (!frame)
|
|
231
|
+
return null;
|
|
232
|
+
const raw = frame.data;
|
|
233
|
+
// Validate checksum.
|
|
234
|
+
if (raw[18] !== (0, encode_js_1.sumBytes)(raw, 0, STATE_LENGTH - 1))
|
|
235
|
+
return null;
|
|
236
|
+
// Extract state from byte/bit positions.
|
|
237
|
+
const mode = ((raw[5] >> 4) & 0b111);
|
|
238
|
+
const temp = (raw[6] >> 1) & 0x7F;
|
|
239
|
+
const fanInternal = (raw[8] >> 4) & 0x0F;
|
|
240
|
+
const fan = fanInternal === daikin_common_js_1.DaikinFan.Auto || fanInternal === daikin_common_js_1.DaikinFan.Quiet
|
|
241
|
+
? fanInternal
|
|
242
|
+
: (fanInternal - 2);
|
|
243
|
+
return {
|
|
244
|
+
power: !!(raw[5] & 0x01),
|
|
245
|
+
temp,
|
|
246
|
+
mode,
|
|
247
|
+
fan,
|
|
248
|
+
swingVertical: (raw[8] & 0x0F) === daikin_common_js_1.DAIKIN_SWING_ON,
|
|
249
|
+
quiet: !!(raw[13] & (1 << 5)),
|
|
250
|
+
powerful: !!(raw[13] & (1 << 0)),
|
|
251
|
+
econo: !!(raw[16] & (1 << 2)),
|
|
252
|
+
comfort: !!(raw[16] & (1 << 1)),
|
|
253
|
+
sensor: !!(raw[16] & (1 << 3)),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=daikin152.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daikin152.js","sourceRoot":"","sources":["../../../src/protocols/daikin152.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAwFH,8CAwFC;AASD,sCAGC;AAOD,gDAqCC;AAkCD,0CA+CC;AAvTD,4CAAuE;AACvE,4CAA+D;AAC/D,yDAQ4B;AAG5B,uDAA2D;AAAlD,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAG9B,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,0CAA0C;AAClE,MAAM,GAAG,GAAG,KAAK,CAAC;AAClB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,sCAAsC;AAC7D,MAAM,QAAQ,GAAG,wCAAqB,CAAC,CAAC,KAAK;AAqB7C,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,sBAAsB;IACtB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,uBAAuB;IACvB,iCAAiC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2CAA2C;AAC3C,SAAS,MAAM,CAAC,GAAe,EAAE,OAAe,EAAE,MAAc,EAAE,EAAW;IAC3E,IAAI,EAAE;QAAE,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;;QAChD,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAE,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CACnB,GAAe,EACf,OAAe,EACf,SAAiB,EACjB,IAAY,EACZ,KAAa;IAEb,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC;IAC5C,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAqB;IACrD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAE3B,kCAAkC;IAClC,IAAI,IAAI,GAAW,KAAK,CAAC,IAAI,IAAI,6BAAU,CAAC,IAAI,CAAC;IACjD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,6BAAU,CAAC,IAAI,CAAC;QACrB,KAAK,6BAAU,CAAC,IAAI,CAAC;QACrB,KAAK,6BAAU,CAAC,IAAI,CAAC;QACrB,KAAK,6BAAU,CAAC,GAAG,CAAC;QACpB,KAAK,6BAAU,CAAC,GAAG;YACjB,MAAM;QACR;YACE,IAAI,GAAG,6BAAU,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEjC,kCAAkC;IAClC,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,IAAY,CAAC;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,2DAA2D;QAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,QAAQ,CAAC,CAAC,oCAAoC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,IAAI,KAAK,6BAAU,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAe,CAAC,CAAC,CAAC,wCAAqB,CAAC;YACnF,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,kCAAe,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,IAAI,IAAI,KAAK,6BAAU,CAAC,GAAG;YAAE,IAAI,GAAG,QAAQ,CAAC;aACxC,IAAI,IAAI,KAAK,6BAAU,CAAC,GAAG;YAAE,IAAI,GAAG,QAAQ,CAAC;;YAC7C,IAAI,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEjC,iCAAiC;IACjC,IAAI,GAAW,CAAC;IAChB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI,4BAAS,CAAC,IAAI,CAAC;IAC7C,IAAI,QAAQ,KAAK,4BAAS,CAAC,KAAK,IAAI,QAAQ,KAAK,4BAAS,CAAC,IAAI,EAAE,CAAC;QAChE,GAAG,GAAG,QAAQ,CAAC;IACjB,CAAC;SAAM,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACxC,GAAG,GAAG,4BAAS,CAAC,IAAI,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,+BAA+B;IACrD,CAAC;IACD,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEhC,oCAAoC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC;IAC5C,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,kCAAe,CAAC,CAAC,CAAC,mCAAgB,CAAC,CAAC;IAExE,gCAAgC;IAChC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAExC,iEAAiE;IACjE,uEAAuE;IACvE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;IACjC,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;IACvC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;IAErC,wEAAwE;IACxE,IAAI,KAAK;QAAE,QAAQ,GAAG,KAAK,CAAC;IAC5B,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,GAAG,KAAK,CAAC;QACd,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IACD,IAAI,KAAK;QAAE,QAAQ,GAAG,KAAK,CAAC;IAC5B,IAAI,OAAO,EAAE,CAAC;QACZ,QAAQ,GAAG,KAAK,CAAC;QACjB,6CAA6C;QAC7C,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,4BAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,mCAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAI,iBAAiB;IAC/C,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAE,iBAAiB;IAChD,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAI,iBAAiB;IAC/C,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,iBAAiB;IAC/C,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,iBAAiB;IAE5D,6BAA6B;IAC7B,GAAG,CAAC,EAAE,CAAC,GAAG,IAAA,oBAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IAE7C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;GAEG;AACH,SAAgB,aAAa,CAAC,KAAqB,EAAE,MAAM,GAAG,CAAC;IAC7D,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,IAAgB,EAAE,MAAM,GAAG,CAAC;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAA,uBAAW,EAAC;YACzB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,UAAU;YACrB,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;QAEhE,yBAAyB;QACzB,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC;YAC7B,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,SAAS;YACtB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,UAAU;YACrB,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,GAAG;YACR,IAAI;YACJ,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,UAAU,CACjB,OAAiB,EACjB,MAAc;IAEd,MAAM,MAAM,GAAG,IAAA,wBAAY,EACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,WAAW,EACrD,CAAC,EAAE,CAAC,EAA8B,YAAY;IAC9C,QAAQ,EAAE,SAAS,EAAe,oBAAoB;IACtD,QAAQ,EAAE,UAAU,EAAc,sBAAsB;IACxD,QAAQ,EAAE,GAAG,EAAqB,kBAAkB;IACpD,IAAI,CACL,CAAC;IACF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC7B,OAAiB,EACjB,SAAiB,CAAC,EAClB,iBAA0B,KAAK;IAE/B,0BAA0B;IAC1B,IAAI,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtC,4DAA4D;IAC5D,MAAM,KAAK,GAAG,IAAA,6BAAiB,EAC7B,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,YAAY,EAChD,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,uCAAuC;IAC1E,cAAc,CACf,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;IAEvB,qBAAqB;IACrB,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,IAAA,oBAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,yCAAyC;IACzC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAoB,CAAC;IACzD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAEnC,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,GAAG,GACP,WAAW,KAAK,4BAAS,CAAC,IAAI,IAAI,WAAW,KAAK,4BAAS,CAAC,KAAK;QAC/D,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAmB,CAAC;IAE1C,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC;QACzB,IAAI;QACJ,IAAI;QACJ,GAAG;QACH,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,KAAK,kCAAe;QACnD,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daikin 160-bit (20-byte) IR protocol encoder.
|
|
3
|
+
*
|
|
4
|
+
* 2 sections: bytes 0–6 (7 bytes) + bytes 7–19 (13 bytes).
|
|
5
|
+
* Ported from IRremoteESP8266 `ir_Daikin.cpp`.
|
|
6
|
+
*/
|
|
7
|
+
import type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
|
|
8
|
+
export { DaikinMode, DaikinFan } from "./daikin_common.js";
|
|
9
|
+
export type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
|
|
10
|
+
export declare const Daikin160SwingV: {
|
|
11
|
+
readonly Lowest: 1;
|
|
12
|
+
readonly Low: 2;
|
|
13
|
+
readonly Middle: 3;
|
|
14
|
+
readonly High: 4;
|
|
15
|
+
readonly Highest: 5;
|
|
16
|
+
readonly Auto: 15;
|
|
17
|
+
};
|
|
18
|
+
export type Daikin160SwingVValue = (typeof Daikin160SwingV)[keyof typeof Daikin160SwingV];
|
|
19
|
+
export interface Daikin160State {
|
|
20
|
+
power?: boolean;
|
|
21
|
+
temp?: number;
|
|
22
|
+
mode?: DaikinModeValue;
|
|
23
|
+
fan?: DaikinFanValue;
|
|
24
|
+
swingVertical?: Daikin160SwingVValue;
|
|
25
|
+
}
|
|
26
|
+
export declare function buildDaikin160Raw(state: Daikin160State): Uint8Array;
|
|
27
|
+
export declare function sendDaikin160(state: Daikin160State, repeat?: number): number[];
|
|
28
|
+
export declare function encodeDaikin160Raw(data: Uint8Array, repeat?: number): number[];
|
|
29
|
+
/**
|
|
30
|
+
* Decode raw IR timings as a Daikin160 message.
|
|
31
|
+
*
|
|
32
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
33
|
+
* @param offset Starting index in the timings array (default 0).
|
|
34
|
+
* @returns Decoded state (same shape as encode input), or null on mismatch.
|
|
35
|
+
*/
|
|
36
|
+
export declare function decodeDaikin160(timings: number[], offset?: number, headerOptional?: boolean): Daikin160State | null;
|
|
37
|
+
//# sourceMappingURL=daikin160.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daikin160.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin160.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgB1E,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAM1F,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAmCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAiCnE;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAgBzE;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CAwDvB"}
|