searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Android Goldfish battery介绍

2023-12-06 05:35:00
13
0

Goldfish battery是android模拟器中虚拟的电池设备,在qemu中实现。android内核中加入的对应驱动程序。
涉及的相关代码文件为:
  $QEMU/hw/android/goldfish/battery.c
  $QEMU/hw/power_supply.h
  $KERNEL/drivers/power/goldfish_battery.c
设备属性:
  name: goldfish_battery
  Id: -1
  IrqCount: 1
  I/O Registers:
    0x00 INT_STATUS   R: 读取battery和A/C状态。
    0x04 INT_ENABLE   W: 开启和关闭IRQ。
    0x08 AC_ONLINE    R: 读取电源连接状态。
    0x0c STATUS       R: 读取电池状态(充电、未充电)。
    0x10 HEALTH       R: 读取电池健康状态(良好、过热等)。
    0x14 PRESENT      R: 是否存在电池,1存在,0不存在。
    0x18 CAPACITY     R: 读取电池充电百分比。
qemu的simple device上报电池的状态,并上报电池是否处于充电状态。Goldfish battery使用单个IRQ通知内核电池状态或是否充电中,当电池状态变化或充电状态变化时,内核执行IO_READ(INT_STATUS)命令,该命令返回2-bit的值:
  bit 0: 设置1,表示电池状态发生了变化。
  bit 1: 设置1,表示充电状态发生了变化。
寄存器状态位:
IO_READ(AC_ONLINE),返回1表示正在充电,返回0表示未充电。
IO_READ(CAPACITY)获得电池充电的百分比,范围是0-100。
IO_READ(STATUS) 返回下面状态值:

    0x00  UNKNOWN      电池状态未知。
    0x01  CHARGING     正在充电。
    0x02  DISCHARGING  正在断开充电。
    0x03  NOT_CHARGING 未充电。
IO_READ(HEALTH) 返回下面状态值:
    0x00  UNKNOWN         电池健康状态未知。
    0x01  GOOD            电池健康状态良好;
    0x02  OVERHEATING     电池过热。
    0x03  DEAD            电池死了。
    0x04  OVERVOLTAGE     电压过高。
    0x05  UNSPEC_FAILURE  电池出现未指明的故障。
内核可以使用IO_WRITE(INT_ENABLE, <flags>)选择在哪种状态下激发IRQ,<flags>是一个2-bit的INT_STATUS。

0条评论
作者已关闭评论
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
原创

Android Goldfish battery介绍

2023-12-06 05:35:00
13
0

Goldfish battery是android模拟器中虚拟的电池设备,在qemu中实现。android内核中加入的对应驱动程序。
涉及的相关代码文件为:
  $QEMU/hw/android/goldfish/battery.c
  $QEMU/hw/power_supply.h
  $KERNEL/drivers/power/goldfish_battery.c
设备属性:
  name: goldfish_battery
  Id: -1
  IrqCount: 1
  I/O Registers:
    0x00 INT_STATUS   R: 读取battery和A/C状态。
    0x04 INT_ENABLE   W: 开启和关闭IRQ。
    0x08 AC_ONLINE    R: 读取电源连接状态。
    0x0c STATUS       R: 读取电池状态(充电、未充电)。
    0x10 HEALTH       R: 读取电池健康状态(良好、过热等)。
    0x14 PRESENT      R: 是否存在电池,1存在,0不存在。
    0x18 CAPACITY     R: 读取电池充电百分比。
qemu的simple device上报电池的状态,并上报电池是否处于充电状态。Goldfish battery使用单个IRQ通知内核电池状态或是否充电中,当电池状态变化或充电状态变化时,内核执行IO_READ(INT_STATUS)命令,该命令返回2-bit的值:
  bit 0: 设置1,表示电池状态发生了变化。
  bit 1: 设置1,表示充电状态发生了变化。
寄存器状态位:
IO_READ(AC_ONLINE),返回1表示正在充电,返回0表示未充电。
IO_READ(CAPACITY)获得电池充电的百分比,范围是0-100。
IO_READ(STATUS) 返回下面状态值:

    0x00  UNKNOWN      电池状态未知。
    0x01  CHARGING     正在充电。
    0x02  DISCHARGING  正在断开充电。
    0x03  NOT_CHARGING 未充电。
IO_READ(HEALTH) 返回下面状态值:
    0x00  UNKNOWN         电池健康状态未知。
    0x01  GOOD            电池健康状态良好;
    0x02  OVERHEATING     电池过热。
    0x03  DEAD            电池死了。
    0x04  OVERVOLTAGE     电压过高。
    0x05  UNSPEC_FAILURE  电池出现未指明的故障。
内核可以使用IO_WRITE(INT_ENABLE, <flags>)选择在哪种状态下激发IRQ,<flags>是一个2-bit的INT_STATUS。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0