// 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.power;
using zx;

enum PowerType : uint8 {
    AC = 0;
    BATTERY = 1;
};

const uint8 POWER_STATE_ONLINE = 0x1;
const uint8 POWER_STATE_DISCHARGING = 0x2;
const uint8 POWER_STATE_CHARGING = 0x4;
const uint8 POWER_STATE_CRITICAL = 0x8;

struct SourceInfo {
    PowerType type;
    uint8 state;
};

enum BatteryUnit {
    // Milliwatts
    MW = 0;
    // Milliamps
    MA = 1;
};

struct BatteryInfo {
    // capacity unit. all voltage fields are in millivolts
    BatteryUnit unit;
    // nominal capacity of a new battery
    uint32 design_capacity;
    // predicted battery capacity when fully charged
    uint32 last_full_capacity;
    // nominal voltage of a new battery
    uint32 design_voltage;
    // capacity when the device will generate a warning notification
    uint32 capacity_warning;
    // capacity when the device will generate a low battery notification
    uint32 capacity_low;
    // the smallest increment the battery is capable of measuring between the
    // low and warning capacities
    uint32 capacity_granularity_low_warning;
    // the smallest increment the battery is capable of measuring between the low
    // and warning capacities
    uint32 capacity_granularity_warning_full;

    // below fields are in units specified the `unit` field.
    // charging/discharging rate in the capacity unit. positive is charging,
    // negative is discharging
    int32 present_rate;
    uint32 remaining_capacity;
    uint32 present_voltage;
};

[Layout = "Simple"]
protocol Source {
    // Get device info.
    GetPowerInfo() -> (zx.status status, SourceInfo info);

    // 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`.
    GetStateChangeEvent() -> (zx.status status, handle<event> handle);

    // Get battery info. Only supported if type == PowerType::BATTERY.
    GetBatteryInfo() -> (zx.status status, BatteryInfo info);
};
