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,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daikin 64-bit IR protocol encoder.
|
|
3
|
+
*
|
|
4
|
+
* Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
|
|
5
|
+
*
|
|
6
|
+
* This is a stateless encoder: pass a {@link Daikin64State} object and get
|
|
7
|
+
* back a raw IR timing array.
|
|
8
|
+
*/
|
|
9
|
+
import { uint8ToBcd, bcdToUint8, sumNibbles64, sendGeneric, } from "../encode.js";
|
|
10
|
+
import { matchGeneric } from "../decode.js";
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Timing constants — must match ir_Daikin.h exactly
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
const DAIKIN64_LDR_MARK = 9800;
|
|
15
|
+
const DAIKIN64_LDR_SPACE = 9800;
|
|
16
|
+
const DAIKIN64_HDR_MARK = 4600;
|
|
17
|
+
const DAIKIN64_HDR_SPACE = 2500;
|
|
18
|
+
const DAIKIN64_BIT_MARK = 350;
|
|
19
|
+
const DAIKIN64_ONE_SPACE = 954;
|
|
20
|
+
const DAIKIN64_ZERO_SPACE = 382;
|
|
21
|
+
const DAIKIN64_GAP = 20300;
|
|
22
|
+
const DAIKIN64_DEFAULT_MESSAGE_GAP = 100000;
|
|
23
|
+
const DAIKIN64_BITS = 64;
|
|
24
|
+
const DAIKIN64_CHECKSUM_OFFSET = 60;
|
|
25
|
+
const DAIKIN64_TOLERANCE = 30;
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Protocol values
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export const Daikin64Mode = {
|
|
30
|
+
Dry: 0b0001,
|
|
31
|
+
Cool: 0b0010,
|
|
32
|
+
Fan: 0b0100,
|
|
33
|
+
Heat: 0b1000,
|
|
34
|
+
};
|
|
35
|
+
export const Daikin64Fan = {
|
|
36
|
+
Auto: 0b0001,
|
|
37
|
+
High: 0b0010,
|
|
38
|
+
Med: 0b0100,
|
|
39
|
+
Low: 0b1000,
|
|
40
|
+
Quiet: 0b1001,
|
|
41
|
+
Turbo: 0b0011,
|
|
42
|
+
};
|
|
43
|
+
const DAIKIN64_MIN_TEMP = 16;
|
|
44
|
+
const DAIKIN64_MAX_TEMP = 30;
|
|
45
|
+
// Known good default state: 0x7C16161607204216
|
|
46
|
+
const DAIKIN64_DEFAULT_STATE = 0x7c16161607204216n;
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Bit packing helpers (little-endian bitfield layout)
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
function setBits(value, offset, size, bits) {
|
|
51
|
+
const mask = ((1n << BigInt(size)) - 1n) << BigInt(offset);
|
|
52
|
+
return (value & ~mask) | ((BigInt(bits) & ((1n << BigInt(size)) - 1n)) << BigInt(offset));
|
|
53
|
+
}
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Checksum
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
function calcChecksum(state) {
|
|
58
|
+
return sumNibbles64(state, DAIKIN64_CHECKSUM_OFFSET);
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// State → raw uint64
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
/**
|
|
64
|
+
* Build the raw 64-bit Daikin64 value from a state object.
|
|
65
|
+
* Fields not present in the state use the known-good defaults.
|
|
66
|
+
*/
|
|
67
|
+
export function buildDaikin64Raw(state) {
|
|
68
|
+
let raw = DAIKIN64_DEFAULT_STATE;
|
|
69
|
+
if (state.mode !== undefined) {
|
|
70
|
+
raw = setBits(raw, 8, 4, state.mode);
|
|
71
|
+
}
|
|
72
|
+
if (state.fan !== undefined) {
|
|
73
|
+
raw = setBits(raw, 12, 4, state.fan);
|
|
74
|
+
}
|
|
75
|
+
if (state.clock !== undefined) {
|
|
76
|
+
let mins = state.clock;
|
|
77
|
+
if (mins >= 24 * 60)
|
|
78
|
+
mins = 0;
|
|
79
|
+
raw = setBits(raw, 16, 8, uint8ToBcd(mins % 60));
|
|
80
|
+
raw = setBits(raw, 24, 8, uint8ToBcd(Math.trunc(mins / 60)));
|
|
81
|
+
}
|
|
82
|
+
if (state.onTime !== undefined) {
|
|
83
|
+
let mins = state.onTime;
|
|
84
|
+
if (mins >= 24 * 60)
|
|
85
|
+
mins = 0;
|
|
86
|
+
raw = setBits(raw, 38, 1, (mins % 60) >= 30 ? 1 : 0); // OnHalfHour
|
|
87
|
+
raw = setBits(raw, 32, 6, uint8ToBcd(Math.trunc(mins / 60))); // OnHours
|
|
88
|
+
}
|
|
89
|
+
if (state.onTimerEnabled !== undefined) {
|
|
90
|
+
raw = setBits(raw, 39, 1, state.onTimerEnabled ? 1 : 0);
|
|
91
|
+
}
|
|
92
|
+
if (state.offTime !== undefined) {
|
|
93
|
+
let mins = state.offTime;
|
|
94
|
+
if (mins >= 24 * 60)
|
|
95
|
+
mins = 0;
|
|
96
|
+
raw = setBits(raw, 46, 1, (mins % 60) >= 30 ? 1 : 0); // OffHalfHour
|
|
97
|
+
raw = setBits(raw, 40, 6, uint8ToBcd(Math.trunc(mins / 60))); // OffHours
|
|
98
|
+
}
|
|
99
|
+
if (state.offTimerEnabled !== undefined) {
|
|
100
|
+
raw = setBits(raw, 47, 1, state.offTimerEnabled ? 1 : 0);
|
|
101
|
+
}
|
|
102
|
+
if (state.temp !== undefined) {
|
|
103
|
+
const degrees = Math.min(Math.max(state.temp, DAIKIN64_MIN_TEMP), DAIKIN64_MAX_TEMP);
|
|
104
|
+
raw = setBits(raw, 48, 8, uint8ToBcd(degrees));
|
|
105
|
+
}
|
|
106
|
+
if (state.swingVertical !== undefined) {
|
|
107
|
+
raw = setBits(raw, 56, 1, state.swingVertical ? 1 : 0);
|
|
108
|
+
}
|
|
109
|
+
if (state.sleep !== undefined) {
|
|
110
|
+
raw = setBits(raw, 57, 1, state.sleep ? 1 : 0);
|
|
111
|
+
}
|
|
112
|
+
if (state.power !== undefined) {
|
|
113
|
+
raw = setBits(raw, 59, 1, state.power ? 1 : 0);
|
|
114
|
+
}
|
|
115
|
+
// Compute and set checksum (bits 60–63)
|
|
116
|
+
raw = setBits(raw, DAIKIN64_CHECKSUM_OFFSET, 4, calcChecksum(raw));
|
|
117
|
+
return raw;
|
|
118
|
+
}
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// Public API
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
/**
|
|
123
|
+
* Encode a Daikin64 AC state into raw IR timings.
|
|
124
|
+
*
|
|
125
|
+
* @param state The desired AC state.
|
|
126
|
+
* @param repeat Number of times to repeat the message (default 0).
|
|
127
|
+
* @returns Flat array of alternating mark/space durations in microseconds.
|
|
128
|
+
*/
|
|
129
|
+
export function sendDaikin64(state, repeat = 0) {
|
|
130
|
+
const data = buildDaikin64Raw(state);
|
|
131
|
+
return encodeDaikin64Raw(data, repeat);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Encode a raw 64-bit Daikin64 value into IR timings.
|
|
135
|
+
* Useful when you already have the packed uint64 (e.g. from `buildDaikin64Raw`).
|
|
136
|
+
*
|
|
137
|
+
* Matches IRremoteESP8266 `IRsend::sendDaikin64`.
|
|
138
|
+
*/
|
|
139
|
+
export function encodeDaikin64Raw(data, repeat = 0) {
|
|
140
|
+
const result = [];
|
|
141
|
+
for (let r = 0; r <= repeat; r++) {
|
|
142
|
+
// Leader: 2x (mark + space)
|
|
143
|
+
for (let i = 0; i < 2; i++) {
|
|
144
|
+
result.push(DAIKIN64_LDR_MARK);
|
|
145
|
+
result.push(DAIKIN64_LDR_SPACE);
|
|
146
|
+
}
|
|
147
|
+
// Header + Data + Footer #1
|
|
148
|
+
const frame = sendGeneric({
|
|
149
|
+
headerMark: DAIKIN64_HDR_MARK,
|
|
150
|
+
headerSpace: DAIKIN64_HDR_SPACE,
|
|
151
|
+
oneMark: DAIKIN64_BIT_MARK,
|
|
152
|
+
oneSpace: DAIKIN64_ONE_SPACE,
|
|
153
|
+
zeroMark: DAIKIN64_BIT_MARK,
|
|
154
|
+
zeroSpace: DAIKIN64_ZERO_SPACE,
|
|
155
|
+
footerMark: DAIKIN64_BIT_MARK,
|
|
156
|
+
gap: DAIKIN64_GAP,
|
|
157
|
+
data,
|
|
158
|
+
nbits: DAIKIN64_BITS,
|
|
159
|
+
msbFirst: false,
|
|
160
|
+
});
|
|
161
|
+
for (let i = 0; i < frame.length; i++)
|
|
162
|
+
result.push(frame[i]);
|
|
163
|
+
// Footer #2
|
|
164
|
+
result.push(DAIKIN64_HDR_MARK);
|
|
165
|
+
result.push(DAIKIN64_DEFAULT_MESSAGE_GAP);
|
|
166
|
+
}
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
// Decode API
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
/**
|
|
173
|
+
* Try to skip the leader section (2x mark+space pairs + footer mark + gap).
|
|
174
|
+
* Returns the new offset past the leader, or the original offset if no leader.
|
|
175
|
+
*/
|
|
176
|
+
function skipLeader(timings, offset) {
|
|
177
|
+
// The leader consists of 2 pairs of (LDR_MARK, LDR_SPACE).
|
|
178
|
+
// We match these as 2 x matchGeneric with 0 data bits.
|
|
179
|
+
let pos = offset;
|
|
180
|
+
for (let i = 0; i < 2; i++) {
|
|
181
|
+
const result = matchGeneric(timings, pos, timings.length - pos, 0, DAIKIN64_LDR_MARK, DAIKIN64_LDR_SPACE, // header mark, header space
|
|
182
|
+
0, 0, // oneMark, oneSpace (unused, 0 bits)
|
|
183
|
+
0, 0, // zeroMark, zeroSpace (unused)
|
|
184
|
+
0, 0, // no footer
|
|
185
|
+
true, DAIKIN64_TOLERANCE);
|
|
186
|
+
if (!result)
|
|
187
|
+
return offset; // Leader not found, return original offset
|
|
188
|
+
pos += result.used;
|
|
189
|
+
}
|
|
190
|
+
return pos;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Decode raw IR timings as a Daikin64 message.
|
|
194
|
+
*
|
|
195
|
+
* The leader (2x mark+space pairs) is optional -- hardware captures may miss it.
|
|
196
|
+
*
|
|
197
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
198
|
+
* @param offset Starting index in the timings array (default 0).
|
|
199
|
+
* @returns Decoded state (same shape as encode input), or null on mismatch.
|
|
200
|
+
*/
|
|
201
|
+
export function decodeDaikin64(timings, offset = 0, headerOptional = false) {
|
|
202
|
+
// Skip leader if present.
|
|
203
|
+
let pos = skipLeader(timings, offset);
|
|
204
|
+
// Match main frame: header + 64 bits (LSB-first) + footer + gap.
|
|
205
|
+
const frame = matchGeneric(timings, pos, timings.length - pos, DAIKIN64_BITS, DAIKIN64_HDR_MARK, DAIKIN64_HDR_SPACE, DAIKIN64_BIT_MARK, DAIKIN64_ONE_SPACE, DAIKIN64_BIT_MARK, DAIKIN64_ZERO_SPACE, DAIKIN64_BIT_MARK, DAIKIN64_GAP, true, DAIKIN64_TOLERANCE, undefined, false, // atLeast, tol, excess, msbFirst=false
|
|
206
|
+
headerOptional);
|
|
207
|
+
if (!frame)
|
|
208
|
+
return null;
|
|
209
|
+
const raw = frame.data;
|
|
210
|
+
// Validate nibble checksum (bits 60-63).
|
|
211
|
+
const expectedChecksum = sumNibbles64(raw, DAIKIN64_CHECKSUM_OFFSET);
|
|
212
|
+
const actualChecksum = Number((raw >> 60n) & 0xfn);
|
|
213
|
+
if (actualChecksum !== expectedChecksum)
|
|
214
|
+
return null;
|
|
215
|
+
// Extract fields from the 64-bit value (inverse of buildDaikin64Raw).
|
|
216
|
+
const getBits = (off, size) => Number((raw >> BigInt(off)) & ((1n << BigInt(size)) - 1n));
|
|
217
|
+
const mode = getBits(8, 4);
|
|
218
|
+
const fan = getBits(12, 4);
|
|
219
|
+
// Clock: BCD minutes (bits 16-23) + BCD hours (bits 24-31)
|
|
220
|
+
const clockMinBcd = getBits(16, 8);
|
|
221
|
+
const clockHourBcd = getBits(24, 8);
|
|
222
|
+
const clock = bcdToUint8(clockHourBcd) * 60 + bcdToUint8(clockMinBcd);
|
|
223
|
+
// On timer: BCD hours (bits 32-37, 6 bits) + half-hour flag (bit 38) + enabled (bit 39)
|
|
224
|
+
const onHoursBcd = getBits(32, 6);
|
|
225
|
+
const onHalfHour = getBits(38, 1);
|
|
226
|
+
const onTimerEnabled = !!getBits(39, 1);
|
|
227
|
+
const onTime = bcdToUint8(onHoursBcd) * 60 + (onHalfHour ? 30 : 0);
|
|
228
|
+
// Off timer: BCD hours (bits 40-45, 6 bits) + half-hour flag (bit 46) + enabled (bit 47)
|
|
229
|
+
const offHoursBcd = getBits(40, 6);
|
|
230
|
+
const offHalfHour = getBits(46, 1);
|
|
231
|
+
const offTimerEnabled = !!getBits(47, 1);
|
|
232
|
+
const offTime = bcdToUint8(offHoursBcd) * 60 + (offHalfHour ? 30 : 0);
|
|
233
|
+
// Temp: BCD (bits 48-55)
|
|
234
|
+
const tempBcd = getBits(48, 8);
|
|
235
|
+
const temp = bcdToUint8(tempBcd);
|
|
236
|
+
const swingVertical = !!getBits(56, 1);
|
|
237
|
+
const sleep = !!getBits(57, 1);
|
|
238
|
+
const power = !!getBits(59, 1);
|
|
239
|
+
return {
|
|
240
|
+
power,
|
|
241
|
+
temp,
|
|
242
|
+
mode,
|
|
243
|
+
fan,
|
|
244
|
+
swingVertical,
|
|
245
|
+
sleep,
|
|
246
|
+
clock,
|
|
247
|
+
onTimerEnabled,
|
|
248
|
+
onTime,
|
|
249
|
+
offTimerEnabled,
|
|
250
|
+
offTime,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=daikin64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daikin64.js","sourceRoot":"","sources":["../../../src/protocols/daikin64.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for Daikin AC protocols (used by IRDaikinESP, Daikin152,
|
|
3
|
+
* Daikin160, Daikin176, Daikin216, etc.).
|
|
4
|
+
*
|
|
5
|
+
* Ported from IRremoteESP8266 `ir_Daikin.h`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DaikinMode: {
|
|
8
|
+
readonly Auto: 0;
|
|
9
|
+
readonly Dry: 2;
|
|
10
|
+
readonly Cool: 3;
|
|
11
|
+
readonly Heat: 4;
|
|
12
|
+
readonly Fan: 6;
|
|
13
|
+
};
|
|
14
|
+
export type DaikinModeValue = (typeof DaikinMode)[keyof typeof DaikinMode];
|
|
15
|
+
export declare const DaikinFan: {
|
|
16
|
+
readonly Auto: 10;
|
|
17
|
+
readonly Quiet: 11;
|
|
18
|
+
readonly Min: 1;
|
|
19
|
+
readonly Med: 3;
|
|
20
|
+
readonly Max: 5;
|
|
21
|
+
};
|
|
22
|
+
export type DaikinFanValue = (typeof DaikinFan)[keyof typeof DaikinFan] | 1 | 2 | 3 | 4 | 5;
|
|
23
|
+
export declare const DAIKIN_SWING_ON = 15;
|
|
24
|
+
export declare const DAIKIN_SWING_OFF = 0;
|
|
25
|
+
export declare const DAIKIN_MIN_TEMP = 10;
|
|
26
|
+
export declare const DAIKIN_MAX_TEMP = 32;
|
|
27
|
+
export declare const DAIKIN2_MIN_COOL_TEMP = 18;
|
|
28
|
+
//# sourceMappingURL=daikin_common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daikin_common.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin_common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAM3E,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAM5F,eAAO,MAAM,eAAe,KAAS,CAAC;AACtC,eAAO,MAAM,gBAAgB,IAAS,CAAC;AAMvC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,qBAAqB,KAAK,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for Daikin AC protocols (used by IRDaikinESP, Daikin152,
|
|
3
|
+
* Daikin160, Daikin176, Daikin216, etc.).
|
|
4
|
+
*
|
|
5
|
+
* Ported from IRremoteESP8266 `ir_Daikin.h`.
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Operating modes (shared across most Daikin byte-array protocols)
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
export const DaikinMode = {
|
|
11
|
+
Auto: 0b000,
|
|
12
|
+
Dry: 0b010,
|
|
13
|
+
Cool: 0b011,
|
|
14
|
+
Heat: 0b100,
|
|
15
|
+
Fan: 0b110,
|
|
16
|
+
};
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Fan speeds (shared across most Daikin byte-array protocols)
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
export const DaikinFan = {
|
|
21
|
+
Auto: 0b1010, // 0xA
|
|
22
|
+
Quiet: 0b1011, // 0xB
|
|
23
|
+
Min: 1,
|
|
24
|
+
Med: 3,
|
|
25
|
+
Max: 5,
|
|
26
|
+
};
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Swing
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
export const DAIKIN_SWING_ON = 0b1111;
|
|
31
|
+
export const DAIKIN_SWING_OFF = 0b0000;
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Temperature limits
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
export const DAIKIN_MIN_TEMP = 10;
|
|
36
|
+
export const DAIKIN_MAX_TEMP = 32;
|
|
37
|
+
export const DAIKIN2_MIN_COOL_TEMP = 18;
|
|
38
|
+
//# sourceMappingURL=daikin_common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daikin_common.js","sourceRoot":"","sources":["../../../src/protocols/daikin_common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;CACF,CAAC;AAIX,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM,EAAI,MAAM;IACtB,KAAK,EAAE,MAAM,EAAG,MAAM;IACtB,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;CACE,CAAC;AAIX,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NEC (Renesas) IR protocol encoder.
|
|
3
|
+
*
|
|
4
|
+
* Ported from IRremoteESP8266 `ir_NEC.cpp` / `ir_NEC.h`.
|
|
5
|
+
*
|
|
6
|
+
* @see http://www.sbprojects.net/knowledge/ir/nec.php
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Encode a NEC address + command into a raw 32-bit data value suitable for
|
|
10
|
+
* {@link sendNEC}.
|
|
11
|
+
*
|
|
12
|
+
* Supports both normal NEC (8-bit address) and extended NEC (16-bit address).
|
|
13
|
+
*
|
|
14
|
+
* Matches IRremoteESP8266 `IRsend::encodeNEC`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function encodeNEC(address: number, command: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* Generate raw IR timings for a NEC message.
|
|
19
|
+
*
|
|
20
|
+
* @param data Raw NEC data (use {@link encodeNEC} to build from address + command).
|
|
21
|
+
* @param nbits Number of data bits (default 32).
|
|
22
|
+
* @param repeat Number of repeat frames to append (default 0).
|
|
23
|
+
* @returns Flat array of alternating mark/space durations in microseconds.
|
|
24
|
+
*
|
|
25
|
+
* Matches IRremoteESP8266 `IRsend::sendNEC`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function sendNEC(data: number | bigint, nbits?: number, repeat?: number): number[];
|
|
28
|
+
export interface NECDecodeResult {
|
|
29
|
+
/** Raw 32-bit NEC data (MSB-first). */
|
|
30
|
+
data: number;
|
|
31
|
+
/** Decoded device address. */
|
|
32
|
+
address: number;
|
|
33
|
+
/** Decoded command. */
|
|
34
|
+
command: number;
|
|
35
|
+
/** Whether this is a repeat frame. */
|
|
36
|
+
repeat: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Decode raw IR timings as a NEC message.
|
|
40
|
+
*
|
|
41
|
+
* Matches IRremoteESP8266 `IRrecv::decodeNEC`.
|
|
42
|
+
*
|
|
43
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
44
|
+
* @param offset Starting index in the timings array (default 0).
|
|
45
|
+
* @param nbits Expected number of data bits (default 32).
|
|
46
|
+
* @param strict If true, enforce NEC constraints (default true).
|
|
47
|
+
* @returns Decoded NEC result, or null if timings don't match.
|
|
48
|
+
*/
|
|
49
|
+
export declare function decodeNEC(timings: number[], offset?: number, nbits?: number, strict?: boolean, headerOptional?: boolean): NECDecodeResult | null;
|
|
50
|
+
//# sourceMappingURL=nec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nec.d.ts","sourceRoot":"","sources":["../../../src/protocols/nec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmCH;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAelE;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,KAAK,GAAE,MAAiB,EACxB,MAAM,GAAE,MAAU,GACjB,MAAM,EAAE,CAwCV;AAMD,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,KAAK,GAAE,MAAiB,EACxB,MAAM,GAAE,OAAc,EACtB,cAAc,GAAE,OAAe,GAC9B,eAAe,GAAG,IAAI,CAsExB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NEC (Renesas) IR protocol encoder.
|
|
3
|
+
*
|
|
4
|
+
* Ported from IRremoteESP8266 `ir_NEC.cpp` / `ir_NEC.h`.
|
|
5
|
+
*
|
|
6
|
+
* @see http://www.sbprojects.net/knowledge/ir/nec.php
|
|
7
|
+
*/
|
|
8
|
+
import { reverseBits, sendGeneric } from "../encode.js";
|
|
9
|
+
import { matchMark, matchSpace, matchAtLeast, matchGeneric, } from "../decode.js";
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Timing constants — must match ir_NEC.h exactly
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
const NEC_TICK = 560;
|
|
14
|
+
const NEC_HDR_MARK = 16 * NEC_TICK; // 8960
|
|
15
|
+
const NEC_HDR_SPACE = 8 * NEC_TICK; // 4480
|
|
16
|
+
const NEC_BIT_MARK = 1 * NEC_TICK; // 560
|
|
17
|
+
const NEC_ONE_SPACE = 3 * NEC_TICK; // 1680
|
|
18
|
+
const NEC_ZERO_SPACE = 1 * NEC_TICK; // 560
|
|
19
|
+
const NEC_RPT_SPACE = 4 * NEC_TICK; // 2240
|
|
20
|
+
const NEC_BITS = 32;
|
|
21
|
+
const NEC_MIN_COMMAND_LENGTH_TICKS = 193;
|
|
22
|
+
const NEC_MIN_COMMAND_LENGTH = NEC_MIN_COMMAND_LENGTH_TICKS * NEC_TICK; // 108080
|
|
23
|
+
const NEC_MIN_GAP = NEC_MIN_COMMAND_LENGTH -
|
|
24
|
+
(NEC_HDR_MARK +
|
|
25
|
+
NEC_HDR_SPACE +
|
|
26
|
+
NEC_BITS * (NEC_BIT_MARK + NEC_ONE_SPACE) +
|
|
27
|
+
NEC_BIT_MARK); // 22400
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Encode API
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Encode a NEC address + command into a raw 32-bit data value suitable for
|
|
33
|
+
* {@link sendNEC}.
|
|
34
|
+
*
|
|
35
|
+
* Supports both normal NEC (8-bit address) and extended NEC (16-bit address).
|
|
36
|
+
*
|
|
37
|
+
* Matches IRremoteESP8266 `IRsend::encodeNEC`.
|
|
38
|
+
*/
|
|
39
|
+
export function encodeNEC(address, command) {
|
|
40
|
+
command &= 0xff;
|
|
41
|
+
// NEC is LSB-first on the wire but sendNEC transmits MSB-first,
|
|
42
|
+
// so we pre-reverse the bits.
|
|
43
|
+
command = reverseBits(command, 8);
|
|
44
|
+
command = (command << 8) | (command ^ 0xff);
|
|
45
|
+
if (address > 0xff) {
|
|
46
|
+
// Extended NEC — 16-bit address, no inverted address byte.
|
|
47
|
+
address = reverseBits(address, 16);
|
|
48
|
+
return ((address << 16) + command) >>> 0;
|
|
49
|
+
}
|
|
50
|
+
// Normal NEC — 8-bit address + inverted address.
|
|
51
|
+
address = reverseBits(address, 8);
|
|
52
|
+
return (((address << 24) + ((address ^ 0xff) << 16) + command) >>> 0);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate raw IR timings for a NEC message.
|
|
56
|
+
*
|
|
57
|
+
* @param data Raw NEC data (use {@link encodeNEC} to build from address + command).
|
|
58
|
+
* @param nbits Number of data bits (default 32).
|
|
59
|
+
* @param repeat Number of repeat frames to append (default 0).
|
|
60
|
+
* @returns Flat array of alternating mark/space durations in microseconds.
|
|
61
|
+
*
|
|
62
|
+
* Matches IRremoteESP8266 `IRsend::sendNEC`.
|
|
63
|
+
*/
|
|
64
|
+
export function sendNEC(data, nbits = NEC_BITS, repeat = 0) {
|
|
65
|
+
const d = typeof data === "number" ? BigInt(data) : data;
|
|
66
|
+
// Initial command frame (no internal repeats).
|
|
67
|
+
const result = sendGeneric({
|
|
68
|
+
headerMark: NEC_HDR_MARK,
|
|
69
|
+
headerSpace: NEC_HDR_SPACE,
|
|
70
|
+
oneMark: NEC_BIT_MARK,
|
|
71
|
+
oneSpace: NEC_ONE_SPACE,
|
|
72
|
+
zeroMark: NEC_BIT_MARK,
|
|
73
|
+
zeroSpace: NEC_ZERO_SPACE,
|
|
74
|
+
footerMark: NEC_BIT_MARK,
|
|
75
|
+
gap: NEC_MIN_GAP,
|
|
76
|
+
mesgTime: NEC_MIN_COMMAND_LENGTH,
|
|
77
|
+
data: d,
|
|
78
|
+
nbits,
|
|
79
|
+
msbFirst: true,
|
|
80
|
+
});
|
|
81
|
+
// Optional repeat sequence — header mark + short repeat space + footer mark.
|
|
82
|
+
if (repeat > 0) {
|
|
83
|
+
const rpt = sendGeneric({
|
|
84
|
+
headerMark: NEC_HDR_MARK,
|
|
85
|
+
headerSpace: NEC_RPT_SPACE,
|
|
86
|
+
oneMark: 0,
|
|
87
|
+
oneSpace: 0,
|
|
88
|
+
zeroMark: 0,
|
|
89
|
+
zeroSpace: 0,
|
|
90
|
+
footerMark: NEC_BIT_MARK,
|
|
91
|
+
gap: NEC_MIN_GAP,
|
|
92
|
+
mesgTime: NEC_MIN_COMMAND_LENGTH,
|
|
93
|
+
data: 0n,
|
|
94
|
+
nbits: 0,
|
|
95
|
+
msbFirst: true,
|
|
96
|
+
repeat: repeat - 1,
|
|
97
|
+
});
|
|
98
|
+
for (let i = 0; i < rpt.length; i++)
|
|
99
|
+
result.push(rpt[i]);
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Decode raw IR timings as a NEC message.
|
|
105
|
+
*
|
|
106
|
+
* Matches IRremoteESP8266 `IRrecv::decodeNEC`.
|
|
107
|
+
*
|
|
108
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
109
|
+
* @param offset Starting index in the timings array (default 0).
|
|
110
|
+
* @param nbits Expected number of data bits (default 32).
|
|
111
|
+
* @param strict If true, enforce NEC constraints (default true).
|
|
112
|
+
* @returns Decoded NEC result, or null if timings don't match.
|
|
113
|
+
*/
|
|
114
|
+
export function decodeNEC(timings, offset = 0, nbits = NEC_BITS, strict = true, headerOptional = false) {
|
|
115
|
+
const remaining = timings.length - offset;
|
|
116
|
+
// Need at least 4 entries for a repeat frame.
|
|
117
|
+
if (remaining < 4)
|
|
118
|
+
return null;
|
|
119
|
+
if (strict && nbits !== NEC_BITS)
|
|
120
|
+
return null;
|
|
121
|
+
let pos = offset;
|
|
122
|
+
// 1. Match header mark.
|
|
123
|
+
const headerMarkFound = matchMark(timings[pos], NEC_HDR_MARK);
|
|
124
|
+
if (!headerMarkFound && !headerOptional)
|
|
125
|
+
return null;
|
|
126
|
+
if (headerMarkFound)
|
|
127
|
+
pos++;
|
|
128
|
+
// 2. Check for repeat: rptSpace + footerMark (+ optional gap).
|
|
129
|
+
// Only possible if header mark was found.
|
|
130
|
+
if (headerMarkFound && pos + 1 < timings.length &&
|
|
131
|
+
matchSpace(timings[pos], NEC_RPT_SPACE) &&
|
|
132
|
+
matchMark(timings[pos + 1], NEC_BIT_MARK)) {
|
|
133
|
+
if (pos + 2 < timings.length &&
|
|
134
|
+
!matchAtLeast(timings[pos + 2], NEC_MIN_GAP)) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
return { data: 0xFFFFFFFF, address: 0, command: 0, repeat: true };
|
|
138
|
+
}
|
|
139
|
+
// 3. Decode header space + data bits + footer via matchGeneric.
|
|
140
|
+
// If header mark was found, it's already consumed (pass headerMark = 0).
|
|
141
|
+
// If header was optional and missing, pass the full header to matchGeneric
|
|
142
|
+
// with headerOptional so it can skip both mark and space.
|
|
143
|
+
const result = matchGeneric(timings, pos, remaining - (pos - offset), nbits, headerMarkFound ? 0 : NEC_HDR_MARK, // skip if already consumed
|
|
144
|
+
NEC_HDR_SPACE, NEC_BIT_MARK, NEC_ONE_SPACE, NEC_BIT_MARK, NEC_ZERO_SPACE, NEC_BIT_MARK, NEC_MIN_GAP, true, // atLeast
|
|
145
|
+
undefined, undefined, undefined, // tolerance, excess, msbFirst defaults
|
|
146
|
+
!headerMarkFound && headerOptional);
|
|
147
|
+
if (!result)
|
|
148
|
+
return null;
|
|
149
|
+
const data = Number(result.data & 0xffffffffn);
|
|
150
|
+
// 4. Validate command (inverted complement in bits 7:0).
|
|
151
|
+
let command = (data >> 8) & 0xFF;
|
|
152
|
+
const commandInv = data & 0xFF;
|
|
153
|
+
if ((command ^ 0xFF) !== commandInv) {
|
|
154
|
+
if (strict)
|
|
155
|
+
return null;
|
|
156
|
+
command = 0;
|
|
157
|
+
}
|
|
158
|
+
// 5. Extract address — normal (8-bit) vs extended (16-bit).
|
|
159
|
+
const addrHi = (data >> 24) & 0xFF;
|
|
160
|
+
const addrLo = (data >> 16) & 0xFF;
|
|
161
|
+
let address;
|
|
162
|
+
if (addrHi === (addrLo ^ 0xFF)) {
|
|
163
|
+
address = reverseBits(addrHi, 8);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
address = reverseBits((data >> 16) & 0xFFFF, 16);
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
data,
|
|
170
|
+
address,
|
|
171
|
+
command: reverseBits(command, 8),
|
|
172
|
+
repeat: false,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=nec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nec.js","sourceRoot":"","sources":["../../../src/protocols/nec.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* irtxrx — Raw IR remote control frame encoder and decoder
|
|
3
|
+
*
|
|
4
|
+
* TX: state → flat arrays of alternating mark/space durations in microseconds.
|
|
5
|
+
* RX: raw timings → protocol identification + state extraction.
|
|
6
|
+
*/
|
|
7
|
+
export { reverseBits, encodeData, sendGeneric, sendGenericBytes, bcdToUint8, uint8ToBcd, sumBytes, sumNibbles64, } from "./encode.js";
|
|
8
|
+
export type { SendGenericOptions, SendGenericBytesOptions } from "./encode.js";
|
|
9
|
+
export { matchTiming, matchMark, matchSpace, matchAtLeast, matchData, matchGeneric, matchGenericBytes, kTolerance, kMarkExcess, } from "./decode.js";
|
|
10
|
+
export type { MatchDataResult, MatchGenericResult, MatchGenericBytesResult, } from "./decode.js";
|
|
11
|
+
export { encodeNEC, sendNEC, decodeNEC } from "./protocols/nec.js";
|
|
12
|
+
export type { NECDecodeResult } from "./protocols/nec.js";
|
|
13
|
+
export { sendDaikin64, encodeDaikin64Raw, buildDaikin64Raw, Daikin64Mode, Daikin64Fan, } from "./protocols/daikin64.js";
|
|
14
|
+
export type { Daikin64State } from "./protocols/daikin64.js";
|
|
15
|
+
export { sendDaikin152, encodeDaikin152Raw, buildDaikin152Raw, DaikinMode, DaikinFan, } from "./protocols/daikin152.js";
|
|
16
|
+
export type { Daikin152State } from "./protocols/daikin152.js";
|
|
17
|
+
export type { DaikinModeValue, DaikinFanValue } from "./protocols/daikin_common.js";
|
|
18
|
+
export { sendDaikin160, encodeDaikin160Raw, buildDaikin160Raw, Daikin160SwingV, } from "./protocols/daikin160.js";
|
|
19
|
+
export type { Daikin160State } from "./protocols/daikin160.js";
|
|
20
|
+
export { sendDaikin176, encodeDaikin176Raw, buildDaikin176Raw, Daikin176Mode, Daikin176SwingH, } from "./protocols/daikin176.js";
|
|
21
|
+
export type { Daikin176State } from "./protocols/daikin176.js";
|
|
22
|
+
export { sendDaikin216, encodeDaikin216Raw, buildDaikin216Raw, } from "./protocols/daikin216.js";
|
|
23
|
+
export type { Daikin216State } from "./protocols/daikin216.js";
|
|
24
|
+
export { sendDaikinESP, encodeDaikinESPRaw, buildDaikinESPRaw, } from "./protocols/daikin.js";
|
|
25
|
+
export type { DaikinESPState } from "./protocols/daikin.js";
|
|
26
|
+
export { sendDaikin128, encodeDaikin128Raw, buildDaikin128Raw, Daikin128Mode, Daikin128Fan, } from "./protocols/daikin128.js";
|
|
27
|
+
export type { Daikin128State } from "./protocols/daikin128.js";
|
|
28
|
+
export { sendDaikin2, encodeDaikin2Raw, buildDaikin2Raw, } from "./protocols/daikin2.js";
|
|
29
|
+
export type { Daikin2State } from "./protocols/daikin2.js";
|
|
30
|
+
export { sendDaikin312, encodeDaikin312Raw, buildDaikin312Raw, } from "./protocols/daikin312.js";
|
|
31
|
+
export type { Daikin312State } from "./protocols/daikin312.js";
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* irtxrx — Raw IR remote control frame encoder and decoder
|
|
3
|
+
*
|
|
4
|
+
* TX: state → flat arrays of alternating mark/space durations in microseconds.
|
|
5
|
+
* RX: raw timings → protocol identification + state extraction.
|
|
6
|
+
*/
|
|
7
|
+
export { reverseBits, encodeData, sendGeneric, sendGenericBytes, bcdToUint8, uint8ToBcd, sumBytes, sumNibbles64, } from "./encode.js";
|
|
8
|
+
export { matchTiming, matchMark, matchSpace, matchAtLeast, matchData, matchGeneric, matchGenericBytes, kTolerance, kMarkExcess, } from "./decode.js";
|
|
9
|
+
export { encodeNEC, sendNEC, decodeNEC } from "./protocols/nec.js";
|
|
10
|
+
export { sendDaikin64, encodeDaikin64Raw, buildDaikin64Raw, Daikin64Mode, Daikin64Fan, } from "./protocols/daikin64.js";
|
|
11
|
+
export { sendDaikin152, encodeDaikin152Raw, buildDaikin152Raw, DaikinMode, DaikinFan, } from "./protocols/daikin152.js";
|
|
12
|
+
export { sendDaikin160, encodeDaikin160Raw, buildDaikin160Raw, Daikin160SwingV, } from "./protocols/daikin160.js";
|
|
13
|
+
export { sendDaikin176, encodeDaikin176Raw, buildDaikin176Raw, Daikin176Mode, Daikin176SwingH, } from "./protocols/daikin176.js";
|
|
14
|
+
export { sendDaikin216, encodeDaikin216Raw, buildDaikin216Raw, } from "./protocols/daikin216.js";
|
|
15
|
+
export { sendDaikinESP, encodeDaikinESPRaw, buildDaikinESPRaw, } from "./protocols/daikin.js";
|
|
16
|
+
export { sendDaikin128, encodeDaikin128Raw, buildDaikin128Raw, Daikin128Mode, Daikin128Fan, } from "./protocols/daikin128.js";
|
|
17
|
+
export { sendDaikin2, encodeDaikin2Raw, buildDaikin2Raw, } from "./protocols/daikin2.js";
|
|
18
|
+
export { sendDaikin312, encodeDaikin312Raw, buildDaikin312Raw, } from "./protocols/daikin312.js";
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC"}
|