blob: 68904c79dc2c5457176aba26685373ea9080f555 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.hardware.powersource;
using zx;
type PowerType = strict enum : uint8 {
AC = 0;
BATTERY = 1;
};
const POWER_STATE_ONLINE uint8 = 0x1;
const POWER_STATE_DISCHARGING uint8 = 0x2;
const POWER_STATE_CHARGING uint8 = 0x4;
const POWER_STATE_CRITICAL uint8 = 0x8;
type SourceInfo = struct {
type PowerType;
state uint8;
};
type BatteryUnit = strict enum {
/// Milliwatts
MW = 0;
/// Milliamps
MA = 1;
};
type BatteryInfo = struct {
/// capacity unit. all voltage fields are in millivolts
unit BatteryUnit;
/// nominal capacity of a new battery
design_capacity uint32;
/// predicted battery capacity when fully charged
last_full_capacity uint32;
/// nominal voltage of a new battery
design_voltage uint32;
/// capacity when the device will generate a warning notification
capacity_warning uint32;
/// capacity when the device will generate a low battery notification
capacity_low uint32;
/// the smallest increment the battery is capable of measuring between the
/// low and warning capacities
capacity_granularity_low_warning uint32;
/// the smallest increment the battery is capable of measuring between the low
/// and warning capacities
capacity_granularity_warning_full uint32;
/// below fields are in units specified the `unit` field.
/// charging/discharging rate in the capacity unit. positive is charging,
/// negative is discharging
present_rate int32;
remaining_capacity uint32;
present_voltage uint32;
};
closed protocol Source {
/// Get device info.
strict GetPowerInfo() -> (struct {
status zx.Status;
info SourceInfo;
});
/// Get an event to receive state change notifications on. ZX_USER_SIGNAL_0 is
/// asserted when power_info_t.state is changed. It is deasserted when the
/// state is read via `GetPowerInfo`.
strict GetStateChangeEvent() -> (resource struct {
status zx.Status;
handle zx.Handle:<EVENT, zx.Rights.WAIT>;
});
/// Get battery info. Only supported if type == PowerType::BATTERY.
strict GetBatteryInfo() -> (struct {
status zx.Status;
info BatteryInfo;
});
};