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,431 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core IR decoding engine.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors the decoding logic of IRremoteESP8266's IRrecv, but operates
|
|
6
|
+
* on plain timing arrays (in microseconds) instead of hardware capture buffers.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.kMarkExcess = exports.kTolerance = void 0;
|
|
10
|
+
exports.matchTiming = matchTiming;
|
|
11
|
+
exports.matchMark = matchMark;
|
|
12
|
+
exports.matchSpace = matchSpace;
|
|
13
|
+
exports.matchAtLeast = matchAtLeast;
|
|
14
|
+
exports.matchData = matchData;
|
|
15
|
+
exports.matchGeneric = matchGeneric;
|
|
16
|
+
exports.matchGenericBytes = matchGenericBytes;
|
|
17
|
+
exports.decode = decode;
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Constants
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/** Default percentage tolerance for timing matches (±25%). */
|
|
22
|
+
exports.kTolerance = 25;
|
|
23
|
+
/**
|
|
24
|
+
* Default mark excess in microseconds.
|
|
25
|
+
* Compensates for sensor lag: marks are captured too long, spaces too short.
|
|
26
|
+
* Set to 0 for ideal timings (encoder output); increase for real hardware.
|
|
27
|
+
*/
|
|
28
|
+
exports.kMarkExcess = 0;
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Tolerance bounds (internal)
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/** Lower bound: desired × (1 − tolerance%) − delta, clamped to 0. */
|
|
33
|
+
function ticksLow(usecs, tolerance, delta = 0) {
|
|
34
|
+
return Math.max(Math.floor(usecs * (1.0 - tolerance / 100.0) - delta), 0);
|
|
35
|
+
}
|
|
36
|
+
/** Upper bound: desired × (1 + tolerance%) + 1 + delta. */
|
|
37
|
+
function ticksHigh(usecs, tolerance, delta = 0) {
|
|
38
|
+
return Math.floor(usecs * (1.0 + tolerance / 100.0)) + 1 + delta;
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Match functions
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
/** Check if a measured timing is within tolerance of a desired value. */
|
|
44
|
+
function matchTiming(measured, desired, tolerance = exports.kTolerance, delta = 0) {
|
|
45
|
+
return measured >= ticksLow(desired, tolerance, delta) &&
|
|
46
|
+
measured <= ticksHigh(desired, tolerance, delta);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Match a mark (IR ON) timing.
|
|
50
|
+
* Adds excess to desired to compensate for marks being captured too long.
|
|
51
|
+
*/
|
|
52
|
+
function matchMark(measured, desired, tolerance = exports.kTolerance, excess = exports.kMarkExcess) {
|
|
53
|
+
return matchTiming(measured, desired + excess, tolerance);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Match a space (IR OFF) timing.
|
|
57
|
+
* Subtracts excess from desired to compensate for spaces being too short.
|
|
58
|
+
*/
|
|
59
|
+
function matchSpace(measured, desired, tolerance = exports.kTolerance, excess = exports.kMarkExcess) {
|
|
60
|
+
return matchTiming(measured, desired - excess, tolerance);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Match a timing that should be at least as long as desired.
|
|
64
|
+
* Used for trailing gaps which can be arbitrarily long.
|
|
65
|
+
*/
|
|
66
|
+
function matchAtLeast(measured, desired, tolerance = exports.kTolerance, delta = 0) {
|
|
67
|
+
if (measured === 0)
|
|
68
|
+
return true;
|
|
69
|
+
return measured >= ticksLow(desired, tolerance, delta);
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Bit-level reversal for bigint (internal)
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
function reverseBitsBigInt(input, nbits) {
|
|
75
|
+
if (nbits <= 1)
|
|
76
|
+
return input;
|
|
77
|
+
let output = 0n;
|
|
78
|
+
let inp = input;
|
|
79
|
+
for (let i = 0; i < nbits; i++) {
|
|
80
|
+
output = (output << 1n) | (inp & 1n);
|
|
81
|
+
inp >>= 1n;
|
|
82
|
+
}
|
|
83
|
+
return (inp << BigInt(nbits)) | output;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Decode `nbits` of data from mark/space pairs in a timing array.
|
|
87
|
+
*
|
|
88
|
+
* Inverse of `encodeData`. Matches IRremoteESP8266 `IRrecv::matchData`.
|
|
89
|
+
*/
|
|
90
|
+
function matchData(timings, offset, nbits, oneMark, oneSpace, zeroMark, zeroSpace, tolerance = exports.kTolerance, excess = exports.kMarkExcess, msbFirst = true, expectLastSpace = true) {
|
|
91
|
+
let data = 0n;
|
|
92
|
+
let pos = offset;
|
|
93
|
+
for (let i = 0; i < nbits; i++) {
|
|
94
|
+
if (pos >= timings.length) {
|
|
95
|
+
return { success: false, data: 0n, used: pos - offset };
|
|
96
|
+
}
|
|
97
|
+
const isLast = i === nbits - 1;
|
|
98
|
+
const mark = timings[pos];
|
|
99
|
+
if (isLast && !expectLastSpace) {
|
|
100
|
+
// Last bit without trailing space: match mark only.
|
|
101
|
+
if (matchMark(mark, oneMark, tolerance, excess)) {
|
|
102
|
+
data = (data << 1n) | 1n;
|
|
103
|
+
}
|
|
104
|
+
else if (matchMark(mark, zeroMark, tolerance, excess)) {
|
|
105
|
+
data = data << 1n;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
if (!msbFirst)
|
|
109
|
+
data = reverseBitsBigInt(data, i);
|
|
110
|
+
return { success: false, data, used: pos - offset };
|
|
111
|
+
}
|
|
112
|
+
pos++;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Normal bit: mark + space.
|
|
116
|
+
if (pos + 1 >= timings.length) {
|
|
117
|
+
return { success: false, data: 0n, used: pos - offset };
|
|
118
|
+
}
|
|
119
|
+
const space = timings[pos + 1];
|
|
120
|
+
if (matchMark(mark, oneMark, tolerance, excess) &&
|
|
121
|
+
matchSpace(space, oneSpace, tolerance, excess)) {
|
|
122
|
+
data = (data << 1n) | 1n;
|
|
123
|
+
}
|
|
124
|
+
else if (matchMark(mark, zeroMark, tolerance, excess) &&
|
|
125
|
+
matchSpace(space, zeroSpace, tolerance, excess)) {
|
|
126
|
+
data = data << 1n;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
if (!msbFirst)
|
|
130
|
+
data = reverseBitsBigInt(data, i);
|
|
131
|
+
return { success: false, data, used: pos - offset };
|
|
132
|
+
}
|
|
133
|
+
pos += 2;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (!msbFirst)
|
|
137
|
+
data = reverseBitsBigInt(data, nbits);
|
|
138
|
+
return { success: true, data, used: pos - offset };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Generic IR frame decoder for protocols with ≤ 64 data bits.
|
|
142
|
+
*
|
|
143
|
+
* Inverse of `sendGeneric`. Matches IRremoteESP8266 `IRrecv::matchGeneric`.
|
|
144
|
+
*
|
|
145
|
+
* @returns Decoded data and entries consumed, or null on mismatch.
|
|
146
|
+
*/
|
|
147
|
+
function matchGeneric(timings, offset, remaining, nbits, headerMark, headerSpace, oneMark, oneSpace, zeroMark, zeroSpace, footerMark, footerSpace, atLeast = true, tolerance = exports.kTolerance, excess = exports.kMarkExcess, msbFirst = true, headerOptional = false) {
|
|
148
|
+
let pos = offset;
|
|
149
|
+
const end = offset + remaining;
|
|
150
|
+
// Header — consume if present, fail if required but missing.
|
|
151
|
+
if (headerMark || headerSpace) {
|
|
152
|
+
let tmp = pos;
|
|
153
|
+
let found = true;
|
|
154
|
+
if (headerMark) {
|
|
155
|
+
if (tmp < end && matchMark(timings[tmp], headerMark, tolerance, excess))
|
|
156
|
+
tmp++;
|
|
157
|
+
else
|
|
158
|
+
found = false;
|
|
159
|
+
}
|
|
160
|
+
if (found && headerSpace) {
|
|
161
|
+
if (tmp < end && matchSpace(timings[tmp], headerSpace, tolerance, excess))
|
|
162
|
+
tmp++;
|
|
163
|
+
else
|
|
164
|
+
found = false;
|
|
165
|
+
}
|
|
166
|
+
if (found)
|
|
167
|
+
pos = tmp;
|
|
168
|
+
else if (!headerOptional)
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
// Data bits
|
|
172
|
+
const expectLastSpace = !!footerMark || (oneSpace !== zeroSpace);
|
|
173
|
+
const dataResult = matchData(timings, pos, nbits, oneMark, oneSpace, zeroMark, zeroSpace, tolerance, excess, msbFirst, expectLastSpace);
|
|
174
|
+
if (!dataResult.success)
|
|
175
|
+
return null;
|
|
176
|
+
pos += dataResult.used;
|
|
177
|
+
// Footer mark
|
|
178
|
+
if (footerMark) {
|
|
179
|
+
if (pos >= end)
|
|
180
|
+
return null;
|
|
181
|
+
if (!matchMark(timings[pos], footerMark, tolerance, excess))
|
|
182
|
+
return null;
|
|
183
|
+
pos++;
|
|
184
|
+
}
|
|
185
|
+
// Footer space
|
|
186
|
+
if (footerSpace && pos < end) {
|
|
187
|
+
if (atLeast) {
|
|
188
|
+
if (!matchAtLeast(timings[pos], footerSpace, tolerance))
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
if (!matchSpace(timings[pos], footerSpace, tolerance, excess))
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
pos++;
|
|
196
|
+
}
|
|
197
|
+
return { data: dataResult.data, used: pos - offset };
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Generic IR frame decoder for byte-array protocols (AC protocols).
|
|
201
|
+
*
|
|
202
|
+
* Inverse of `sendGenericBytes`. Decodes each byte individually (8 bits).
|
|
203
|
+
*
|
|
204
|
+
* @returns Decoded byte array and entries consumed, or null on mismatch.
|
|
205
|
+
*/
|
|
206
|
+
function matchGenericBytes(timings, offset, remaining, nbytes, headerMark, headerSpace, oneMark, oneSpace, zeroMark, zeroSpace, footerMark, footerSpace, atLeast = true, tolerance = exports.kTolerance, excess = exports.kMarkExcess, msbFirst = true, headerOptional = false) {
|
|
207
|
+
let pos = offset;
|
|
208
|
+
const end = offset + remaining;
|
|
209
|
+
// Header — consume if present, fail if required but missing.
|
|
210
|
+
if (headerMark || headerSpace) {
|
|
211
|
+
let tmp = pos;
|
|
212
|
+
let found = true;
|
|
213
|
+
if (headerMark) {
|
|
214
|
+
if (tmp < end && matchMark(timings[tmp], headerMark, tolerance, excess))
|
|
215
|
+
tmp++;
|
|
216
|
+
else
|
|
217
|
+
found = false;
|
|
218
|
+
}
|
|
219
|
+
if (found && headerSpace) {
|
|
220
|
+
if (tmp < end && matchSpace(timings[tmp], headerSpace, tolerance, excess))
|
|
221
|
+
tmp++;
|
|
222
|
+
else
|
|
223
|
+
found = false;
|
|
224
|
+
}
|
|
225
|
+
if (found)
|
|
226
|
+
pos = tmp;
|
|
227
|
+
else if (!headerOptional)
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
// Data bytes — decode each byte as 8 bits.
|
|
231
|
+
const data = new Uint8Array(nbytes);
|
|
232
|
+
const expectLastSpace = !!footerMark || (oneSpace !== zeroSpace);
|
|
233
|
+
for (let i = 0; i < nbytes; i++) {
|
|
234
|
+
const isLastByte = i === nbytes - 1;
|
|
235
|
+
const byteResult = matchData(timings, pos, 8, oneMark, oneSpace, zeroMark, zeroSpace, tolerance, excess, msbFirst, isLastByte ? expectLastSpace : true);
|
|
236
|
+
if (!byteResult.success)
|
|
237
|
+
return null;
|
|
238
|
+
data[i] = Number(byteResult.data & 0xffn);
|
|
239
|
+
pos += byteResult.used;
|
|
240
|
+
}
|
|
241
|
+
// Footer mark
|
|
242
|
+
if (footerMark) {
|
|
243
|
+
if (pos >= end)
|
|
244
|
+
return null;
|
|
245
|
+
if (!matchMark(timings[pos], footerMark, tolerance, excess))
|
|
246
|
+
return null;
|
|
247
|
+
pos++;
|
|
248
|
+
}
|
|
249
|
+
// Footer space
|
|
250
|
+
if (footerSpace && pos < end) {
|
|
251
|
+
if (atLeast) {
|
|
252
|
+
if (!matchAtLeast(timings[pos], footerSpace, tolerance))
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
if (!matchSpace(timings[pos], footerSpace, tolerance, excess))
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
pos++;
|
|
260
|
+
}
|
|
261
|
+
return { data, used: pos - offset };
|
|
262
|
+
}
|
|
263
|
+
// ---------------------------------------------------------------------------
|
|
264
|
+
// Unified decode dispatcher
|
|
265
|
+
// ---------------------------------------------------------------------------
|
|
266
|
+
// Import all protocol decoders lazily to avoid circular deps — they import
|
|
267
|
+
// from this file, so we re-export them through the registry pattern below.
|
|
268
|
+
const nec_js_1 = require("./protocols/nec.js");
|
|
269
|
+
const daikin64_js_1 = require("./protocols/daikin64.js");
|
|
270
|
+
const daikin128_js_1 = require("./protocols/daikin128.js");
|
|
271
|
+
const daikin152_js_1 = require("./protocols/daikin152.js");
|
|
272
|
+
const daikin160_js_1 = require("./protocols/daikin160.js");
|
|
273
|
+
const daikin176_js_1 = require("./protocols/daikin176.js");
|
|
274
|
+
const daikin216_js_1 = require("./protocols/daikin216.js");
|
|
275
|
+
const daikin_js_1 = require("./protocols/daikin.js");
|
|
276
|
+
const daikin2_js_1 = require("./protocols/daikin2.js");
|
|
277
|
+
const daikin312_js_1 = require("./protocols/daikin312.js");
|
|
278
|
+
const coolix_js_1 = require("./protocols/coolix.js");
|
|
279
|
+
/** Threshold for detecting inter-frame gaps (µs). Data spaces are <2000µs
|
|
280
|
+
* for all supported protocols; gaps are >3000µs. */
|
|
281
|
+
const GAP_THRESHOLD = 3000;
|
|
282
|
+
const PROTOCOL_REGISTRY = [
|
|
283
|
+
// AC protocols first (more common use case)
|
|
284
|
+
{
|
|
285
|
+
protocol: "coolix", brand: "coolix", type: "ac",
|
|
286
|
+
tryDecode(timings, offset, headerOptional) {
|
|
287
|
+
const state = (0, coolix_js_1.decodeCoolix)(timings, offset, headerOptional);
|
|
288
|
+
if (state)
|
|
289
|
+
return { protocol: "coolix", brand: "coolix", type: "ac", state, confidence: "checksum_valid" };
|
|
290
|
+
// Also try raw decode for command codes
|
|
291
|
+
const raw = (0, coolix_js_1.decodeCoolixRaw)(timings, offset, headerOptional);
|
|
292
|
+
if (raw)
|
|
293
|
+
return { protocol: "coolix", brand: "coolix", type: "ac", state: null, raw: raw.data, confidence: "checksum_valid" };
|
|
294
|
+
return null;
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
protocol: "daikin152", brand: "daikin", type: "ac",
|
|
299
|
+
tryDecode(timings, offset, ho) {
|
|
300
|
+
const s = (0, daikin152_js_1.decodeDaikin152)(timings, offset, ho);
|
|
301
|
+
return s ? { protocol: "daikin152", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
protocol: "daikin216", brand: "daikin", type: "ac",
|
|
306
|
+
tryDecode(timings, offset, ho) {
|
|
307
|
+
const s = (0, daikin216_js_1.decodeDaikin216)(timings, offset, ho);
|
|
308
|
+
return s ? { protocol: "daikin216", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
protocol: "daikin160", brand: "daikin", type: "ac",
|
|
313
|
+
tryDecode(timings, offset, ho) {
|
|
314
|
+
const s = (0, daikin160_js_1.decodeDaikin160)(timings, offset, ho);
|
|
315
|
+
return s ? { protocol: "daikin160", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
protocol: "daikin176", brand: "daikin", type: "ac",
|
|
320
|
+
tryDecode(timings, offset, ho) {
|
|
321
|
+
const s = (0, daikin176_js_1.decodeDaikin176)(timings, offset, ho);
|
|
322
|
+
return s ? { protocol: "daikin176", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
protocol: "daikin64", brand: "daikin", type: "ac",
|
|
327
|
+
tryDecode(timings, offset, ho) {
|
|
328
|
+
const s = (0, daikin64_js_1.decodeDaikin64)(timings, offset, ho);
|
|
329
|
+
return s ? { protocol: "daikin64", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
protocol: "daikin128", brand: "daikin", type: "ac",
|
|
334
|
+
tryDecode(timings, offset, ho) {
|
|
335
|
+
const s = (0, daikin128_js_1.decodeDaikin128)(timings, offset, ho);
|
|
336
|
+
return s ? { protocol: "daikin128", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
protocol: "daikin", brand: "daikin", type: "ac",
|
|
341
|
+
tryDecode(timings, offset, ho) {
|
|
342
|
+
const s = (0, daikin_js_1.decodeDaikinESP)(timings, offset, ho);
|
|
343
|
+
return s ? { protocol: "daikin", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
protocol: "daikin2", brand: "daikin", type: "ac",
|
|
348
|
+
tryDecode(timings, offset, ho) {
|
|
349
|
+
const s = (0, daikin2_js_1.decodeDaikin2)(timings, offset, ho);
|
|
350
|
+
return s ? { protocol: "daikin2", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
protocol: "daikin312", brand: "daikin", type: "ac",
|
|
355
|
+
tryDecode(timings, offset, ho) {
|
|
356
|
+
const s = (0, daikin312_js_1.decodeDaikin312)(timings, offset, ho);
|
|
357
|
+
return s ? { protocol: "daikin312", brand: "daikin", type: "ac", state: s, confidence: "checksum_valid" } : null;
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
// Simple protocols last
|
|
361
|
+
{
|
|
362
|
+
protocol: "nec", brand: "nec", type: "simple",
|
|
363
|
+
tryDecode(timings, offset, ho) {
|
|
364
|
+
const s = (0, nec_js_1.decodeNEC)(timings, offset, undefined, undefined, ho);
|
|
365
|
+
return s ? { protocol: "nec", brand: "nec", type: "simple", state: s, confidence: "timing_match" } : null;
|
|
366
|
+
},
|
|
367
|
+
},
|
|
368
|
+
];
|
|
369
|
+
/**
|
|
370
|
+
* Unified IR decode dispatcher.
|
|
371
|
+
*
|
|
372
|
+
* Uses a 3-tier strategy to handle real-world hardware captures where
|
|
373
|
+
* headers may be missing:
|
|
374
|
+
*
|
|
375
|
+
* 1. **Header match at offset 0** — fastest path, handles intact captures.
|
|
376
|
+
* 2. **Find repeat frame** — scan for inter-frame gaps, try after each gap
|
|
377
|
+
* with header required. Handles missing first-frame headers.
|
|
378
|
+
* 3. **Brute force, header optional** — try at offset 0 relying solely on
|
|
379
|
+
* checksum/parity validation. Handles single-frame headerless captures.
|
|
380
|
+
*
|
|
381
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
382
|
+
* @param options Optional hints to narrow the search.
|
|
383
|
+
* @returns The first matching protocol's decode result, or null.
|
|
384
|
+
*/
|
|
385
|
+
function decode(timings, options) {
|
|
386
|
+
const candidates = filterCandidates(options);
|
|
387
|
+
if (candidates.length === 0)
|
|
388
|
+
return null;
|
|
389
|
+
// Tier 1: header required at offset 0
|
|
390
|
+
for (const entry of candidates) {
|
|
391
|
+
const result = entry.tryDecode(timings, 0, false);
|
|
392
|
+
if (result)
|
|
393
|
+
return result;
|
|
394
|
+
}
|
|
395
|
+
// Tier 2: find repeat frames (scan for gaps, try after each)
|
|
396
|
+
for (let i = 1; i < timings.length - 1; i += 2) {
|
|
397
|
+
// Gaps are spaces (odd indices in a mark-start array), but hardware
|
|
398
|
+
// captures with missing headers may shift parity. Check all entries.
|
|
399
|
+
if (timings[i] >= GAP_THRESHOLD) {
|
|
400
|
+
const afterGap = i + 1;
|
|
401
|
+
if (afterGap >= timings.length)
|
|
402
|
+
continue;
|
|
403
|
+
for (const entry of candidates) {
|
|
404
|
+
const result = entry.tryDecode(timings, afterGap, false);
|
|
405
|
+
if (result)
|
|
406
|
+
return result;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Tier 3: brute force at offset 0, header optional
|
|
411
|
+
for (const entry of candidates) {
|
|
412
|
+
const result = entry.tryDecode(timings, 0, true);
|
|
413
|
+
if (result)
|
|
414
|
+
return result;
|
|
415
|
+
}
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
function filterCandidates(options) {
|
|
419
|
+
if (!options)
|
|
420
|
+
return PROTOCOL_REGISTRY;
|
|
421
|
+
return PROTOCOL_REGISTRY.filter((entry) => {
|
|
422
|
+
if (options.protocol && entry.protocol !== options.protocol)
|
|
423
|
+
return false;
|
|
424
|
+
if (options.brand && entry.brand !== options.brand)
|
|
425
|
+
return false;
|
|
426
|
+
if (options.type && entry.type !== options.type)
|
|
427
|
+
return false;
|
|
428
|
+
return true;
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core IR encoding engine.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the encoding logic of IRremoteESP8266's IRsend::sendGeneric /
|
|
5
|
+
* IRsend::sendData, but produces a plain timing array instead of driving
|
|
6
|
+
* hardware.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Reverse the least-significant `nbits` bits of `input`.
|
|
10
|
+
* Any higher bits are preserved above the reversed region.
|
|
11
|
+
*
|
|
12
|
+
* Matches IRremoteESP8266 `reverseBits(uint64_t, uint16_t)`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function reverseBits(input: number, nbits: number): number;
|
|
15
|
+
/** Convert a BCD-encoded byte to a plain integer. */
|
|
16
|
+
export declare function bcdToUint8(bcd: number): number;
|
|
17
|
+
/** Convert an integer (0–99) to BCD encoding. */
|
|
18
|
+
export declare function uint8ToBcd(integer: number): number;
|
|
19
|
+
/** Sum all bytes in a Uint8Array (or slice). Returns result & 0xFF. */
|
|
20
|
+
export declare function sumBytes(data: Uint8Array, start?: number, end?: number): number;
|
|
21
|
+
/** Sum all nibbles of a uint64 up to `nbits` bits. Returns result & 0xF. */
|
|
22
|
+
export declare function sumNibbles64(value: bigint, nbits: number): number;
|
|
23
|
+
/** Sum all nibbles (upper + lower) of each byte in a range. */
|
|
24
|
+
export declare function sumNibbles(data: Uint8Array, start: number, length: number, init?: number): number;
|
|
25
|
+
/**
|
|
26
|
+
* Encode `nbits` of `data` as mark/space pairs.
|
|
27
|
+
*
|
|
28
|
+
* Matches IRremoteESP8266 `IRsend::sendData`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function encodeData(oneMark: number, oneSpace: number, zeroMark: number, zeroSpace: number, data: bigint, nbits: number, msbFirst: boolean): number[];
|
|
31
|
+
export interface SendGenericOptions {
|
|
32
|
+
headerMark: number;
|
|
33
|
+
headerSpace: number;
|
|
34
|
+
oneMark: number;
|
|
35
|
+
oneSpace: number;
|
|
36
|
+
zeroMark: number;
|
|
37
|
+
zeroSpace: number;
|
|
38
|
+
footerMark: number;
|
|
39
|
+
gap: number;
|
|
40
|
+
/** Minimum total message time in µs. 0 = no minimum. */
|
|
41
|
+
mesgTime?: number;
|
|
42
|
+
data: bigint;
|
|
43
|
+
nbits: number;
|
|
44
|
+
msbFirst: boolean;
|
|
45
|
+
repeat?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generic IR protocol encoder.
|
|
49
|
+
*
|
|
50
|
+
* Produces a flat array of alternating mark (IR LED on) / space (IR LED off)
|
|
51
|
+
* durations in microseconds, matching the output of
|
|
52
|
+
* IRremoteESP8266's `IRsend::sendGeneric`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function sendGeneric(opts: SendGenericOptions): number[];
|
|
55
|
+
export interface SendGenericBytesOptions {
|
|
56
|
+
headerMark: number;
|
|
57
|
+
headerSpace: number;
|
|
58
|
+
oneMark: number;
|
|
59
|
+
oneSpace: number;
|
|
60
|
+
zeroMark: number;
|
|
61
|
+
zeroSpace: number;
|
|
62
|
+
footerMark: number;
|
|
63
|
+
gap: number;
|
|
64
|
+
data: Uint8Array;
|
|
65
|
+
msbFirst: boolean;
|
|
66
|
+
repeat?: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generic IR encoder for byte-array payloads (AC protocols).
|
|
70
|
+
*
|
|
71
|
+
* Encodes each byte individually (8 bits each) via `encodeData`, matching
|
|
72
|
+
* the `sendGeneric(uint8_t *dataptr, uint16_t nbytes, ...)` overload in
|
|
73
|
+
* IRremoteESP8266.
|
|
74
|
+
*/
|
|
75
|
+
export declare function sendGenericBytes(opts: SendGenericBytesOptions): number[];
|
|
76
|
+
//# sourceMappingURL=encode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAShE;AAMD,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGlD;AAMD,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,SAAI,EAAE,GAAG,SAAc,GAAG,MAAM,CAI/E;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,SAAI,GACxD,MAAM,CAKR;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,GAChB,MAAM,EAAE,CA+BV;AAMD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAqD9D;AAMD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,EAAE,CA0CxE"}
|