root/headers/private/device/power_managment.h
/*
 * Copyright 2004-2011, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef POWER_MANAGMENT_H
#define POWER_MANAGMENT_H


#include <Drivers.h>


// io controls
enum {
        // ioctl response with kMagicFreqID
        IDENTIFY_DEVICE = B_DEVICE_OP_CODES_END + 20001,

        GET_BATTERY_INFO,
        GET_EXTENDED_BATTERY_INFO,
        WATCH_BATTERY,
        STOP_WATCHING_BATTERY
};


// ACPI Battery:
// magic id returned by IDENTIFY_DEVICE
const uint32 kMagicACPIBatteryID = 17822;


// Our known battery states
#define BATTERY_DISCHARGING             0x01
#define BATTERY_CHARGING                0x02
#define BATTERY_CRITICAL_STATE  0x04
#define BATTERY_NOT_CHARGING    0x08

#define BATTERY_MAX_STRING_LENGTH       32


typedef struct {
        uint32  state;
        uint32  current_rate;
        uint32  capacity;
        uint32  voltage;
} acpi_battery_info;


typedef struct {
        uint32  power_unit;
#define ACPI_BATTERY_UNIT_MW    0
#define ACPI_BATTERY_UNIT_MA    1
        uint32  design_capacity;
        uint32  last_full_charge;
        uint32  technology;
        uint32  design_voltage;
        uint32  design_capacity_warning;
        uint32  design_capacity_low;
        uint32  capacity_granularity_1;
        uint32  capacity_granularity_2;
        char    model_number[BATTERY_MAX_STRING_LENGTH];
        char    serial_number[BATTERY_MAX_STRING_LENGTH];
        char    type[BATTERY_MAX_STRING_LENGTH];
        char    oem_info[BATTERY_MAX_STRING_LENGTH];
        // ACPI 4.0 and later
        uint16  revision;
#define ACPI_BATTERY_REVISION_0         0
#define ACPI_BATTERY_REVISION_1         1
#define ACPI_BATTERY_REVISION_BIF       0xffff
        uint32  cycles;
        uint32  accuracy;
        uint32  max_sampling_time;
        uint32  min_sampling_time;
        uint32  max_average_interval;
        uint32  min_average_interval;
        // ACPI 6.0 and later
        uint32  swapping_capability;
#define ACPI_BATTERY_SWAPPING_NO        0
#define ACPI_BATTERY_SWAPPING_COLD      1
#define ACPI_BATTERY_SWAPPING_HOT       2
} acpi_extended_battery_info;


#endif