haiku/headers/private/device/power_managment.h
Jérôme Duval 96bad7685b PowerStatus: add state "Not charging"
some laptops decide to not charge a fast full battery to not consume a cycle.
In this discharging state, the current rate is zero, thus no time left can be computed.
We add a state "Not charging" to clearly differentiate and avoid user confusion.
PowerStatus was triggering low battery notifications, this is also fixed.

Change-Id: I4745c78eb0863ab01fe34cb065707d068cff0f0e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7300
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
2024-01-09 04:07:05 +00:00

82 lines
1.8 KiB
C

/*
* 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