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,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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
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
|
+
// Bit utilities
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/**
|
|
12
|
+
* Reverse the least-significant `nbits` bits of `input`.
|
|
13
|
+
* Any higher bits are preserved above the reversed region.
|
|
14
|
+
*
|
|
15
|
+
* Matches IRremoteESP8266 `reverseBits(uint64_t, uint16_t)`.
|
|
16
|
+
*/
|
|
17
|
+
export function reverseBits(input, nbits) {
|
|
18
|
+
if (nbits <= 1)
|
|
19
|
+
return input;
|
|
20
|
+
let output = 0;
|
|
21
|
+
let inp = input;
|
|
22
|
+
for (let i = 0; i < nbits; i++) {
|
|
23
|
+
output = (output << 1) | (inp & 1);
|
|
24
|
+
inp >>>= 1;
|
|
25
|
+
}
|
|
26
|
+
return (inp << nbits) | output;
|
|
27
|
+
}
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// BCD utilities
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/** Convert a BCD-encoded byte to a plain integer. */
|
|
32
|
+
export function bcdToUint8(bcd) {
|
|
33
|
+
if (bcd > 0x99)
|
|
34
|
+
return 255;
|
|
35
|
+
return ((bcd >> 4) * 10) + (bcd & 0xf);
|
|
36
|
+
}
|
|
37
|
+
/** Convert an integer (0–99) to BCD encoding. */
|
|
38
|
+
export function uint8ToBcd(integer) {
|
|
39
|
+
if (integer > 99)
|
|
40
|
+
return 255;
|
|
41
|
+
return (Math.trunc(integer / 10) << 4) + (integer % 10);
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Checksum utilities
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/** Sum all bytes in a Uint8Array (or slice). Returns result & 0xFF. */
|
|
47
|
+
export function sumBytes(data, start = 0, end = data.length) {
|
|
48
|
+
let sum = 0;
|
|
49
|
+
for (let i = start; i < end; i++)
|
|
50
|
+
sum += data[i];
|
|
51
|
+
return sum & 0xff;
|
|
52
|
+
}
|
|
53
|
+
/** Sum all nibbles of a uint64 up to `nbits` bits. Returns result & 0xF. */
|
|
54
|
+
export function sumNibbles64(value, nbits) {
|
|
55
|
+
let data = value & ((1n << BigInt(nbits)) - 1n);
|
|
56
|
+
let result = 0;
|
|
57
|
+
for (; data; data >>= 4n)
|
|
58
|
+
result += Number(data & 0xfn);
|
|
59
|
+
return result & 0xf;
|
|
60
|
+
}
|
|
61
|
+
/** Sum all nibbles (upper + lower) of each byte in a range. */
|
|
62
|
+
export function sumNibbles(data, start, length, init = 0) {
|
|
63
|
+
let sum = init;
|
|
64
|
+
for (let i = start; i < start + length; i++)
|
|
65
|
+
sum += (data[i] >> 4) + (data[i] & 0xf);
|
|
66
|
+
return sum & 0xff;
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Data encoding
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
/**
|
|
72
|
+
* Encode `nbits` of `data` as mark/space pairs.
|
|
73
|
+
*
|
|
74
|
+
* Matches IRremoteESP8266 `IRsend::sendData`.
|
|
75
|
+
*/
|
|
76
|
+
export function encodeData(oneMark, oneSpace, zeroMark, zeroSpace, data, nbits, msbFirst) {
|
|
77
|
+
if (nbits === 0)
|
|
78
|
+
return [];
|
|
79
|
+
const timings = [];
|
|
80
|
+
if (msbFirst) {
|
|
81
|
+
// Send leading zeros for bits beyond 64.
|
|
82
|
+
let bits = nbits;
|
|
83
|
+
while (bits > 64) {
|
|
84
|
+
timings.push(zeroMark, zeroSpace);
|
|
85
|
+
bits--;
|
|
86
|
+
}
|
|
87
|
+
for (let i = bits - 1; i >= 0; i--) {
|
|
88
|
+
if (data & (1n << BigInt(i))) {
|
|
89
|
+
timings.push(oneMark, oneSpace);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
timings.push(zeroMark, zeroSpace);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
let d = data;
|
|
98
|
+
for (let i = 0; i < nbits; i++) {
|
|
99
|
+
if (d & 1n) {
|
|
100
|
+
timings.push(oneMark, oneSpace);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
timings.push(zeroMark, zeroSpace);
|
|
104
|
+
}
|
|
105
|
+
d >>= 1n;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return timings;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Generic IR protocol encoder.
|
|
112
|
+
*
|
|
113
|
+
* Produces a flat array of alternating mark (IR LED on) / space (IR LED off)
|
|
114
|
+
* durations in microseconds, matching the output of
|
|
115
|
+
* IRremoteESP8266's `IRsend::sendGeneric`.
|
|
116
|
+
*/
|
|
117
|
+
export function sendGeneric(opts) {
|
|
118
|
+
const { headerMark, headerSpace, oneMark, oneSpace, zeroMark, zeroSpace, footerMark, gap, mesgTime = 0, data, nbits, msbFirst, repeat = 0, } = opts;
|
|
119
|
+
const result = [];
|
|
120
|
+
for (let r = 0; r <= repeat; r++) {
|
|
121
|
+
const frame = [];
|
|
122
|
+
// Header
|
|
123
|
+
if (headerMark)
|
|
124
|
+
frame.push(headerMark);
|
|
125
|
+
if (headerSpace)
|
|
126
|
+
frame.push(headerSpace);
|
|
127
|
+
// Data bits
|
|
128
|
+
const bits = encodeData(oneMark, oneSpace, zeroMark, zeroSpace, data, nbits, msbFirst);
|
|
129
|
+
for (let i = 0; i < bits.length; i++)
|
|
130
|
+
frame.push(bits[i]);
|
|
131
|
+
// Footer mark
|
|
132
|
+
if (footerMark)
|
|
133
|
+
frame.push(footerMark);
|
|
134
|
+
// Gap — adjusted to meet minimum message time
|
|
135
|
+
let elapsed = 0;
|
|
136
|
+
for (let i = 0; i < frame.length; i++)
|
|
137
|
+
elapsed += frame[i];
|
|
138
|
+
const gapTime = elapsed >= mesgTime ? gap : Math.max(gap, mesgTime - elapsed);
|
|
139
|
+
frame.push(gapTime);
|
|
140
|
+
for (let i = 0; i < frame.length; i++)
|
|
141
|
+
result.push(frame[i]);
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Generic IR encoder for byte-array payloads (AC protocols).
|
|
147
|
+
*
|
|
148
|
+
* Encodes each byte individually (8 bits each) via `encodeData`, matching
|
|
149
|
+
* the `sendGeneric(uint8_t *dataptr, uint16_t nbytes, ...)` overload in
|
|
150
|
+
* IRremoteESP8266.
|
|
151
|
+
*/
|
|
152
|
+
export function sendGenericBytes(opts) {
|
|
153
|
+
const { headerMark, headerSpace, oneMark, oneSpace, zeroMark, zeroSpace, footerMark, gap, data, msbFirst, repeat = 0, } = opts;
|
|
154
|
+
const result = [];
|
|
155
|
+
for (let r = 0; r <= repeat; r++) {
|
|
156
|
+
// Header
|
|
157
|
+
if (headerMark)
|
|
158
|
+
result.push(headerMark);
|
|
159
|
+
if (headerSpace)
|
|
160
|
+
result.push(headerSpace);
|
|
161
|
+
// Data — encode each byte individually (8 bits)
|
|
162
|
+
for (let i = 0; i < data.length; i++) {
|
|
163
|
+
const bits = encodeData(oneMark, oneSpace, zeroMark, zeroSpace, BigInt(data[i]), 8, msbFirst);
|
|
164
|
+
for (let j = 0; j < bits.length; j++)
|
|
165
|
+
result.push(bits[j]);
|
|
166
|
+
}
|
|
167
|
+
// Footer
|
|
168
|
+
if (footerMark)
|
|
169
|
+
result.push(footerMark);
|
|
170
|
+
result.push(gap);
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=encode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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, decode, kTolerance, kMarkExcess, } from "./decode.js";
|
|
10
|
+
export type { MatchDataResult, MatchGenericResult, MatchGenericBytesResult, DecodeResult, DecodeOptions, ProtocolName, BrandName, ProtocolType, } 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, decodeDaikin64, Daikin64Mode, Daikin64Fan, } from "./protocols/daikin64.js";
|
|
14
|
+
export type { Daikin64State } from "./protocols/daikin64.js";
|
|
15
|
+
export { sendDaikin152, encodeDaikin152Raw, buildDaikin152Raw, decodeDaikin152, 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, decodeDaikin160, Daikin160SwingV, } from "./protocols/daikin160.js";
|
|
19
|
+
export type { Daikin160State } from "./protocols/daikin160.js";
|
|
20
|
+
export { sendDaikin176, encodeDaikin176Raw, buildDaikin176Raw, decodeDaikin176, Daikin176Mode, Daikin176SwingH, } from "./protocols/daikin176.js";
|
|
21
|
+
export type { Daikin176State } from "./protocols/daikin176.js";
|
|
22
|
+
export { sendDaikin216, encodeDaikin216Raw, buildDaikin216Raw, decodeDaikin216, } from "./protocols/daikin216.js";
|
|
23
|
+
export type { Daikin216State } from "./protocols/daikin216.js";
|
|
24
|
+
export { sendDaikinESP, encodeDaikinESPRaw, buildDaikinESPRaw, decodeDaikinESP, } from "./protocols/daikin.js";
|
|
25
|
+
export type { DaikinESPState } from "./protocols/daikin.js";
|
|
26
|
+
export { sendDaikin128, encodeDaikin128Raw, buildDaikin128Raw, decodeDaikin128, Daikin128Mode, Daikin128Fan, } from "./protocols/daikin128.js";
|
|
27
|
+
export type { Daikin128State } from "./protocols/daikin128.js";
|
|
28
|
+
export { sendDaikin2, encodeDaikin2Raw, buildDaikin2Raw, decodeDaikin2, } from "./protocols/daikin2.js";
|
|
29
|
+
export type { Daikin2State } from "./protocols/daikin2.js";
|
|
30
|
+
export { sendDaikin312, encodeDaikin312Raw, buildDaikin312Raw, decodeDaikin312, } from "./protocols/daikin312.js";
|
|
31
|
+
export type { Daikin312State } from "./protocols/daikin312.js";
|
|
32
|
+
export { buildCoolixRaw, encodeCoolixRaw, sendCoolix, decodeCoolixRaw, decodeCoolix, parseCoolixState, CoolixMode, CoolixFan, CoolixCommand, } from "./protocols/coolix.js";
|
|
33
|
+
export type { CoolixState, CoolixRawResult } from "./protocols/coolix.js";
|
|
34
|
+
//# 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,MAAM,EACN,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,GACb,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,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,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,EACf,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,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,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,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,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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, decode, kTolerance, kMarkExcess, } from "./decode.js";
|
|
9
|
+
export { encodeNEC, sendNEC, decodeNEC } from "./protocols/nec.js";
|
|
10
|
+
export { sendDaikin64, encodeDaikin64Raw, buildDaikin64Raw, decodeDaikin64, Daikin64Mode, Daikin64Fan, } from "./protocols/daikin64.js";
|
|
11
|
+
export { sendDaikin152, encodeDaikin152Raw, buildDaikin152Raw, decodeDaikin152, DaikinMode, DaikinFan, } from "./protocols/daikin152.js";
|
|
12
|
+
export { sendDaikin160, encodeDaikin160Raw, buildDaikin160Raw, decodeDaikin160, Daikin160SwingV, } from "./protocols/daikin160.js";
|
|
13
|
+
export { sendDaikin176, encodeDaikin176Raw, buildDaikin176Raw, decodeDaikin176, Daikin176Mode, Daikin176SwingH, } from "./protocols/daikin176.js";
|
|
14
|
+
export { sendDaikin216, encodeDaikin216Raw, buildDaikin216Raw, decodeDaikin216, } from "./protocols/daikin216.js";
|
|
15
|
+
export { sendDaikinESP, encodeDaikinESPRaw, buildDaikinESPRaw, decodeDaikinESP, } from "./protocols/daikin.js";
|
|
16
|
+
export { sendDaikin128, encodeDaikin128Raw, buildDaikin128Raw, decodeDaikin128, Daikin128Mode, Daikin128Fan, } from "./protocols/daikin128.js";
|
|
17
|
+
export { sendDaikin2, encodeDaikin2Raw, buildDaikin2Raw, decodeDaikin2, } from "./protocols/daikin2.js";
|
|
18
|
+
export { sendDaikin312, encodeDaikin312Raw, buildDaikin312Raw, decodeDaikin312, } from "./protocols/daikin312.js";
|
|
19
|
+
export { buildCoolixRaw, encodeCoolixRaw, sendCoolix, decodeCoolixRaw, decodeCoolix, parseCoolixState, CoolixMode, CoolixFan, CoolixCommand, } from "./protocols/coolix.js";
|
|
20
|
+
//# 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,MAAM,EACN,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AAWrB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,SAAS,GACV,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,aAAa,GACd,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coolix IR protocol encoder and decoder.
|
|
3
|
+
*
|
|
4
|
+
* Ported from IRremoteESP8266 `ir_Coolix.cpp` / `ir_Coolix.h`.
|
|
5
|
+
*
|
|
6
|
+
* Wire format: 24-bit data sent as 3 bytes MSB-first, each byte
|
|
7
|
+
* followed by its bitwise inverse (48 bits total on the wire).
|
|
8
|
+
*
|
|
9
|
+
* @see https://github.com/crankyoldgit/IRremoteESP8266/issues/484
|
|
10
|
+
*/
|
|
11
|
+
export declare const CoolixMode: {
|
|
12
|
+
readonly Cool: 0;
|
|
13
|
+
readonly Dry: 1;
|
|
14
|
+
readonly Auto: 2;
|
|
15
|
+
readonly Heat: 3;
|
|
16
|
+
/** Synthetic mode: encoded as Dry + special temp code on the wire. */
|
|
17
|
+
readonly Fan: 4;
|
|
18
|
+
};
|
|
19
|
+
export type CoolixModeValue = (typeof CoolixMode)[keyof typeof CoolixMode];
|
|
20
|
+
export declare const CoolixFan: {
|
|
21
|
+
readonly Auto0: 0;
|
|
22
|
+
readonly Max: 1;
|
|
23
|
+
readonly Med: 2;
|
|
24
|
+
readonly Min: 4;
|
|
25
|
+
readonly Auto: 5;
|
|
26
|
+
readonly ZoneFollow: 6;
|
|
27
|
+
readonly Fixed: 7;
|
|
28
|
+
};
|
|
29
|
+
export type CoolixFanValue = (typeof CoolixFan)[keyof typeof CoolixFan];
|
|
30
|
+
export declare const CoolixCommand: {
|
|
31
|
+
readonly Off: 11697120;
|
|
32
|
+
readonly Swing: 11693024;
|
|
33
|
+
readonly SwingH: 11924898;
|
|
34
|
+
readonly SwingV: 11669472;
|
|
35
|
+
readonly Sleep: 11722755;
|
|
36
|
+
readonly Turbo: 11924898;
|
|
37
|
+
readonly Led: 11924901;
|
|
38
|
+
readonly Clean: 11924906;
|
|
39
|
+
readonly CmdFan: 11714532;
|
|
40
|
+
};
|
|
41
|
+
export interface CoolixState {
|
|
42
|
+
/** Temperature in °C (17–30). Omit for Fan mode. */
|
|
43
|
+
temp?: number;
|
|
44
|
+
mode?: CoolixModeValue;
|
|
45
|
+
fan?: CoolixFanValue;
|
|
46
|
+
/** Sensor temperature 0–30°C. Omit to ignore. */
|
|
47
|
+
sensorTemp?: number;
|
|
48
|
+
zoneFollow?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build a raw 24-bit Coolix code from a state object.
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildCoolixRaw(state: CoolixState): number;
|
|
54
|
+
/**
|
|
55
|
+
* Encode a raw 24-bit Coolix code into IR timings.
|
|
56
|
+
*
|
|
57
|
+
* Each of the 3 data bytes is sent normal then inverted (MSB-first).
|
|
58
|
+
* Matches IRremoteESP8266 `IRsend::sendCOOLIX`.
|
|
59
|
+
*/
|
|
60
|
+
export declare function encodeCoolixRaw(data: number, repeat?: number): number[];
|
|
61
|
+
/**
|
|
62
|
+
* Encode a Coolix AC state into raw IR timings.
|
|
63
|
+
*/
|
|
64
|
+
export declare function sendCoolix(state: CoolixState, repeat?: number): number[];
|
|
65
|
+
export interface CoolixRawResult {
|
|
66
|
+
/** Raw 24-bit Coolix code. */
|
|
67
|
+
data: number;
|
|
68
|
+
/** Number of timing entries consumed. */
|
|
69
|
+
used: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Decode raw IR timings into a 24-bit Coolix code.
|
|
73
|
+
*
|
|
74
|
+
* Validates byte inversion parity for all 3 bytes.
|
|
75
|
+
*
|
|
76
|
+
* @returns Raw 24-bit code and entries consumed, or null on mismatch.
|
|
77
|
+
*/
|
|
78
|
+
export declare function decodeCoolixRaw(timings: number[], offset?: number, headerOptional?: boolean): CoolixRawResult | null;
|
|
79
|
+
/**
|
|
80
|
+
* Parse a raw 24-bit Coolix code into a state object.
|
|
81
|
+
*
|
|
82
|
+
* Returns null for command codes (Off, Swing, Turbo, etc.) since
|
|
83
|
+
* they don't encode AC state.
|
|
84
|
+
*/
|
|
85
|
+
export declare function parseCoolixState(data: number): CoolixState | null;
|
|
86
|
+
/**
|
|
87
|
+
* Decode raw IR timings as a Coolix AC state.
|
|
88
|
+
*
|
|
89
|
+
* Returns null if the timings don't match Coolix protocol, or if
|
|
90
|
+
* the decoded code is a command (Off, Swing, etc.) rather than a state frame.
|
|
91
|
+
* Use {@link decodeCoolixRaw} to decode command codes.
|
|
92
|
+
*
|
|
93
|
+
* @param timings Raw mark/space timing array in microseconds.
|
|
94
|
+
* @param offset Starting index in the timings array (default 0).
|
|
95
|
+
* @returns Decoded state (same shape as encode input), or null.
|
|
96
|
+
*/
|
|
97
|
+
export declare function decodeCoolix(timings: number[], offset?: number, headerOptional?: boolean): CoolixState | null;
|
|
98
|
+
//# sourceMappingURL=coolix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coolix.d.ts","sourceRoot":"","sources":["../../../src/protocols/coolix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqDH,eAAO,MAAM,UAAU;;;;;IAKrB,sEAAsE;;CAE9D,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAM3E,eAAO,MAAM,SAAS;;;;;;;;CAQZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAMxE,eAAO,MAAM,aAAa;;;;;;;;;;CAUhB,CAAC;AAmBX,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAUD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAuEzD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,EAAE,CA+B1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,EAAE,CAE3E;AAMD,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,eAAe,GAAG,IAAI,CA2DxB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAkCjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,WAAW,GAAG,IAAI,CAIpB"}
|