@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
80 lines • 3.88 kB
JavaScript
;
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