lifxlan
Version:
TypeScript library for controlling LIFX products over LAN
59 lines • 1.59 kB
JavaScript
export const NOOP = (_value) => { };
export function PromiseWithResolvers() {
let resolve = NOOP;
let reject = NOOP;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { resolve, reject, promise };
}
export function getRssiStatus(rssi) {
if (rssi === 200)
return 'none';
if (rssi < -80 || rssi === 4 || rssi === 5 || rssi === 6) {
return 'very bad';
}
if (rssi < -70 || (rssi >= 7 && rssi <= 11)) {
return 'somewhat bad';
}
if (rssi < -60 || (rssi >= 12 && rssi <= 16)) {
return 'alright';
}
if (rssi < 0 || rssi > 16) {
return 'good';
}
return 'none';
}
export function convertSignalToRssi(signal) {
return Math.floor(10 * Math.log10(signal) + 0.5);
}
export function convertTargetToSerialNumber(slice) {
if (slice.toHex) {
return slice.toHex();
}
let str = '';
const { length } = slice;
for (let i = 0; i < length; i++) {
const chunk = slice[i].toString(16);
if (chunk.length < 2) {
str += '0' + chunk;
}
else {
str += chunk;
}
}
return str;
}
export function convertSerialNumberToTarget(serialNumber) {
if (serialNumber.length !== 12) {
throw new Error('Invalid serial number');
}
const target = new Uint8Array(6);
for (let i = 0; i < 6; i++) {
const offset = 2 * i;
target[i] = parseInt(serialNumber.slice(offset, offset + 2), 16);
}
return target;
}
//# sourceMappingURL=core.js.map