UNPKG

@ledgerhq/live-common

Version:
80 lines 3.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FlagMasks = exports.BatteryStatusTypes = void 0; const types_devices_1 = require("@ledgerhq/types-devices"); const errors_1 = require("@ledgerhq/errors"); const logs_1 = require("@ledgerhq/logs"); const _1 = require("."); var BatteryStatusTypes; (function (BatteryStatusTypes) { BatteryStatusTypes[BatteryStatusTypes["BATTERY_PERCENTAGE"] = 0] = "BATTERY_PERCENTAGE"; BatteryStatusTypes[BatteryStatusTypes["BATTERY_VOLTAGE"] = 1] = "BATTERY_VOLTAGE"; BatteryStatusTypes[BatteryStatusTypes["BATTERY_TEMPERATURE"] = 2] = "BATTERY_TEMPERATURE"; BatteryStatusTypes[BatteryStatusTypes["BATTERY_CURRENT"] = 3] = "BATTERY_CURRENT"; BatteryStatusTypes[BatteryStatusTypes["BATTERY_FLAGS"] = 4] = "BATTERY_FLAGS"; })(BatteryStatusTypes || (exports.BatteryStatusTypes = BatteryStatusTypes = {})); // Nb USB and BLE masks not used by implementation since we have // them from the model. var FlagMasks; (function (FlagMasks) { FlagMasks[FlagMasks["CHARGING"] = 1] = "CHARGING"; FlagMasks[FlagMasks["USB"] = 2] = "USB"; FlagMasks[FlagMasks["USB_POWERED"] = 8] = "USB_POWERED"; FlagMasks[FlagMasks["BLE"] = 4] = "BLE"; FlagMasks[FlagMasks["ISSUE_BATTERY"] = 128] = "ISSUE_BATTERY"; FlagMasks[FlagMasks["ISSUE_CHARGING"] = 16] = "ISSUE_CHARGING"; FlagMasks[FlagMasks["ISSUE_TEMPERATURE"] = 32] = "ISSUE_TEMPERATURE"; })(FlagMasks || (exports.FlagMasks = FlagMasks = {})); const getBatteryStatus = async (transport, statuses) => { const tracer = new logs_1.LocalTracer(_1.LOG_TYPE, { function: "getBatteryStatus", statuses, }); tracer.trace(`Starting`); const result = []; for (let i = 0; i < statuses.length; i++) { const res = await transport.send(0xe0, 0x10, 0x00, statuses[i]); const status = res.readUInt16BE(res.length - 2); if (status !== errors_1.StatusCodes.OK) { tracer.trace(`Error: status ${status}`, { status, res }); throw new errors_1.TransportStatusError(status); } switch (statuses[i]) { case BatteryStatusTypes.BATTERY_PERCENTAGE: { // Nb values greater that 100 would mean a bad case // to be assessed if we want to break the flow. const temp = res.readUInt8(0); result[i] = temp > 100 ? -1 : temp; break; } case BatteryStatusTypes.BATTERY_VOLTAGE: result[i] = res.readUInt16BE(0); break; case BatteryStatusTypes.BATTERY_TEMPERATURE: case BatteryStatusTypes.BATTERY_CURRENT: // Nb turn the usigned byte into a signed int to cover // negative values. Two's compliment. result[i] = (res.readUInt8() << 24) >> 24; break; case BatteryStatusTypes.BATTERY_FLAGS: { const flags = res.readUInt16BE(2); // Nb Ignoring the first two bytes const chargingUSB = !!(flags & FlagMasks.USB_POWERED); const chargingQi = !chargingUSB && !!(flags & FlagMasks.CHARGING); result[i] = { charging: chargingQi ? types_devices_1.ChargingModes.QI : chargingUSB ? types_devices_1.ChargingModes.USB : types_devices_1.ChargingModes.NONE, issueCharging: !!(flags & FlagMasks.ISSUE_CHARGING), issueTemperature: !!(flags & FlagMasks.ISSUE_TEMPERATURE), issueBattery: !!(flags & FlagMasks.ISSUE_BATTERY), }; break; } } } return result; }; exports.default = getBatteryStatus; //# sourceMappingURL=getBatteryStatus.js.map