Android PowerSupply (三)power_supply_sys

2023-11-19

目录

Android PowerSupply (一)总概

Android PowerSupply (二)power_supply_core

Android PowerSupply (三)power_supply_sys

Android PowerSupply (四)ChargeIC SGM41511 IC driver调试

Android PowerSupply (五)ChargeIC SGM41511 IC简介

Android Healthd BartteryMonitor

通过power supply class类的加载 了解其过程

static int __init power_supply_class_init(void)
{
	power_supply_class = class_create(THIS_MODULE, "power_supply");
 //!< 注册powersupply类,路径  /sys/class/powersupply By: jixuan 2021年6月15日
	power_supply_class->dev_uevent = power_supply_uevent; 
 //!< uevent处理 By: jixuan 2021年6月15日
	power_supply_init_attrs(&power_supply_dev_type);
 //!< 伴随powersupply类创建的节点属性 By: jixuan 2021年6月15日
	return 0;
}
void power_supply_init_attrs(struct device_type *dev_type)
{
	int i;

	dev_type->groups = power_supply_attr_groups;

	for (i = 0; i < ARRAY_SIZE(power_supply_attrs); i++)
		__power_supply_attrs[i] = &power_supply_attrs[i].attr;
}
static const struct attribute_group *power_supply_attr_groups[] = {
	&power_supply_attr_group,
	NULL,
};
static struct attribute_group power_supply_attr_group = {
	.attrs = __power_supply_attrs,
	.is_visible = power_supply_attr_is_visible,
	 //!< 在实际新增加的powersupply中 会设置其可见性,仅展示所需要的proerty By: jixuan 2021年6月15日
};
/* Must be in the same order as POWER_SUPPLY_PROP_* */
//!< 顺序必须与枚举定义的类型顺序一致,是判断可见性的依据 By: jixuan 2021年6月15日
static struct device_attribute power_supply_attrs[] = {
	/* Properties of type `int' */
	POWER_SUPPLY_ATTR(status),
	POWER_SUPPLY_ATTR(charge_type),
	POWER_SUPPLY_ATTR(health),
	POWER_SUPPLY_ATTR(present),
	POWER_SUPPLY_ATTR(online)
	POWER_SUPPLY_ATTR(cycle_count),
	POWER_SUPPLY_ATTR(voltage_max),
	POWER_SUPPLY_ATTR(voltage_min)
	POWER_SUPPLY_ATTR(voltage_now),
	POWER_SUPPLY_ATTR(voltage_avg),
	POWER_SUPPLY_ATTR(voltage_ocv),
	POWER_SUPPLY_ATTR(voltage_boot),
	POWER_SUPPLY_ATTR(current_max),
	POWER_SUPPLY_ATTR(current_now),
	POWER_SUPPLY_ATTR(power_now),
	POWER_SUPPLY_ATTR(power_avg),
	POWER_SUPPLY_ATTR(charge_full)
	POWER_SUPPLY_ATTR(capacity)
	POWER_SUPPLY_ATTR(capacity_raw),
	POWER_SUPPLY_ATTR(temp),
	POWER_SUPPLY_ATTR(temp_max)
	POWER_SUPPLY_ATTR(battery_type),
	POWER_SUPPLY_ATTR(cycle_counts),
	......
	......
	 //!< power_supply 类中具有N多属性,仅展示部分,实际在init过程中会指明这些属性是否可见 By: jixuan 2021年6月15日
};
 //!< 通过POWR_SUPPLY_ATTR宏 定义show shore函数 By: jixuan 2021年6月15日
#define POWER_SUPPLY_ATTR(_name)					\
{									\
	.attr = { .name = #_name },					\
	.show = power_supply_show_property,				\
	.store = power_supply_store_property,				\
}
 //!< 以 show函数为例 By: jixuan 2021年6月15日
static ssize_t power_supply_show_property(struct device *dev,
					  struct device_attribute *attr,
					  char *buf) {
	static char *type_text[] = {
		"Unknown", "Battery", "UPS", "Mains", "USB", "USB_DCP",
		"USB_CDP", "USB_ACA", "USB_HVDCP", "USB_HVDCP_3", "USB_PD",
		"Wireless", "USB_FLOAT", "BMS", "Parallel", "Main", "Wipower",
		"TYPEC", "TYPEC_UFP", "TYPEC_DFP"
	};
/*
	这里以 type为例, 类似的解析还有:
	status_text
	charge_type
	health_text
	technology_text
	scope_text
*/
	struct power_supply *psy = dev_get_drvdata(dev);
	const ptrdiff_t off = attr - power_supply_attrs;

    power_supply_get_property(psy, off, &value);

 //!< 核心函数调用,通过driver中注册的回调,获取当前powersupply的具体属性 By: jixuan 2021年6月15日
 

	else if (off == POWER_SUPPLY_PROP_TYPE ||
			off == POWER_SUPPLY_PROP_REAL_TYPE)
		return scnprintf(buf, PAGE_SIZE, "%s\n",
				type_text[value.intval]);
 //!< 以type为例,通过回调获取到返回的 num号,对应到上面定义的type类型的字符串 By: jixuan 2021年6月15日
 //!< 这里显然需要 确保 枚举的type种类和 上面定义的字符串顺序要一一对应 By: jixuan 2021年6月15日 、
 //!< 其他属性 和 type的解析类似 By: jixuan 2021年6月15日
}

所有的属性如下图这些,实际在驱动的解析过程中,会根据注册的powersupply有的存在的属性去设置其可见性,通过统一的show shore方法读写;

在sysfs中uevent的处理

int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
{
	struct power_supply *psy = dev_get_drvdata(dev);
	int ret = 0, j;
	char *prop_buf;
	char *attrname;

	dev_dbg(dev, "uevent\n");

	dev_dbg(dev, "POWER_SUPPLY_NAME=%s\n", psy->desc->name);

	ret = add_uevent_var(env, "POWER_SUPPLY_NAME=%s", psy->desc->name);

	prop_buf = (char *)get_zeroed_page(GFP_KERNEL);
	for (j = 0; j < psy->desc->num_properties; j++) {
		struct device_attribute *attr;
		char *line;
		attr = &power_supply_attrs[psy->desc->properties[j]];
		
		ret = power_supply_show_property(dev, attr, prop_buf);
 //!< 主动调用show property将获取的属性值转换为对应的字符串 By: jixuan 2021年6月15日

		line = strchr(prop_buf, '\n');
		attrname = kstruprdup(attr->attr.name, GFP_KERNEL);

		dev_dbg(dev, "prop %s=%s\n", attrname, prop_buf);
		ret = add_uevent_var(env, "POWER_SUPPLY_%s=%s", attrname, prop_buf);
		 //!< 添加uevent By: jixuan 2021年6月15日
	}

	return ret;
}

例如 barttery 类powersupply 通过uevent上报的信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android PowerSupply (三)power_supply_sys 的相关文章

  • px4报dangerously low battery! shutting system down.

    这两天用px4突然开始报dangerously low battery shutting system down xff0c 从px4 github项目上看到是因为telem接口中的tx和rx相连了 xff0c mavlink的消息从px4
  • Android PowerSupply (四)ChargeIC SGM41511 IC driver调试

    目录 Android PowerSupply 一 总概 Android PowerSupply 二 power supply core Android PowerSupply 三 power supply sys Android Power
  • Android PowerSupply (五)ChargeIC SGM41511 IC简介

    目录 Android PowerSupply 一 总概 Android PowerSupply 二 power supply core Android PowerSupply 三 power supply sys Android Power
  • 如何计算安卓手机电池的剩余时间? [复制]

    这个问题在这里已经有答案了 我正在 Android Studio 上开发电池健康应用程序 我想知道如何计算播放音乐或视频 浏览网站或待机的剩余时间 我见过很多这样的android应用程序 但看不到源代码 我想查看计算播放音乐或视频等剩余时间
  • 为特定应用打开miui省电模式

    我正在开发 VoIP 呼叫应用程序 并且当省电模式打开时 会错过通过 FCM 发送的呼叫MIUI 这种情况经常发生 我希望用户打开Battery saver activity对于我自己的应用程序 并且在省电模式中对该应用程序没有限制 For
  • Android 上电池放电的剩余时间

    我正在寻找一个代码来估计 猜测 Android 手机电池完全放电之前剩余的时间 我的搜索结果充满了可用的应用程序 而且常见的评论是计算它几乎没有用 不过我需要代码 任何帮助 即使是一个粗略的片段 都可以帮助您入门 您无法准确猜测电池还剩多少
  • 计算 iOS 中的电池寿命

    想知道除了苹果技术统计数据之外是否还有其他参考资料来计算电池寿命 我尝试比较一些现有的电池应用程序 剩余电池百分比 苹果的数据 但有时我没有得出相同的答案 另外还有使用 2G 电池 而不是 3G 的统计数据 我在 Apple 上没有看到任何
  • Android R 中的后台服务在省电模式下停止

    我编写了一个 Android 应用程序 通过更改电量来检查电池电量 并在电量达到特定值时发出警报 我在我的应用程序中使用了广播接收器和后台服务 它在所有 Android 版本中都能正常工作 但在 Android R 中 当打开省电模式时 服
  • 如何获取特定应用程序的电池和移动数据使用情况?

    背景 从某些 Android 版本 不记得是哪个 开始 Android 能够显示已安装应用程序的电池统计信息和移动数据使用情况 3G 以便用户意识到这一点并将能够思考应用程序是否应该保留 我正在谈论那些 问题 我在 Play 商店上看到过一
  • 在Java中获取电池电量

    我想制作一个 java 应用程序来显示我的 mac OS X 的当前电池电量 我读过了获取操作系统级别的系统信息 https stackoverflow com questions 25552 using java to get os le
  • Android M startActivity电池优化

    我正在开发一个应用程序 如果用户靠近某个地方 它应该提醒用户 当然 如果手机处于空闲状态 也必须这样做 现在有了 DOZE 我明白我必须将我的应用程序列入白名单 并且为了做到这一点 我看到我可以通过操作请求启动一个意图 这要归功于 Budd
  • 无法更改 Android 模拟器中的电池配置

    我试图在模拟器中将电池状态更改为容量和交流状态 但不起作用 我做了整个步骤 1 通过telnet连接到模拟器 2 尝试使用 power ac off 和 powercapacity 70 等命令3 每次我检查电量显示时 都会出现相同的配置
  • 在Android中,有没有办法获取电池电流? [复制]

    这个问题在这里已经有答案了 BatteryManager 类没有电流指标 http developer android com reference android os BatteryManager html http developer
  • 有没有一种方法可以在不读取 Linux 上的 proc/sys 文件的情况下获取电池信息(状态、插入等)?

    我想在linux上用C获取有关电池的信息 我don t想要阅读或解析any文件 是否有任何与 acpi 内核或任何其他模块的低级接口来获取我想要的信息 我已经在网上搜索过 但每个问题都会得到答案 parse proc foo bar 我真的
  • 为什么我的充电状态接收器总是返回 false?

    我试图检测用户何时插入 或拔出 设备进行充电 在我的接收器中 当我确定它是否已插入时 我总是得到 错误 的状态读数 这是我的代码 在清单中
  • Android 和 iOS 如何扫描蓝牙信标而不出现电池问题?

    如果我想在 Android 或 IOS 中开发自己的 iBeacon 服务 它必须实用 这意味着客户可以使用我的服务而不会出现电池短缺的情况 我认为即使 iBeacon 技术基于蓝牙低功耗 它仍然可能缺乏电池 这是因为应用程序必须始终运行才
  • android以编程方式打开电池设置

    我正在寻找一种从 Android 应用程序打开电池设置屏幕的方法 到目前为止我发现了两个意图 Intent ACTION POWER USAGE SUMMARY Settings ACTION BATTERY SAVER SETTINGS
  • 检测正在插入的设备

    我希望能够检测设备是否已插入 我希望能够像查询连接状态一样进行查询 这可能吗 或者我是否需要创建一个监听电池事件的广播接收器 显然是ACTION BATTERY CHANGED http developer android com refe
  • BatteryManager 健康值

    我想知道当我想要保持健康时从 BatteryManager 获得的价值 我得到一个 2 这是什么意思 谁能给我所有我能得到的值及其含义 这是我想要的代码 int health batteryIntent getIntExtra Batter
  • Windows Kernel32.BatteryLifePercent = 255

    我正在尝试构建一个 Java 应用程序 该应用程序读取笔记本电脑电池的状态 并在电池电量低时向用户发送通知 为了做到这一点 我将 jna 与 Kernel32 本机库一起使用 如该问题的第一个答案中所述 如何获取Windows系统中的剩余电

随机推荐

  • 存储类型auto,static,extern,register的区别 <转>

    变量和函数的属性包括数据类型和数据的存储类别 存储类别指数据在内存中存储方式 静态和动态 包含auto static register extern四种 内存中 具体点来说内存分为三块 静态区 堆区 栈区 外部变量和全局变量存放在静态区 局
  • 半监督学习——数据精馏(论文阅读)

    论文地址 https arxiv org pdf 1712 04440 pdf 1 论文与摘要 Data Distillation Towards Omni Supervised Learning 摘要 作者提出一种特殊的半监督学习方法 取
  • android 最新动态,浅谈Android动态页面(一)

    这是一个很微妙的东西 可能平时经常用到 但是没注意 我想对这个内容进行一个总结并提出一些看法 谈的是动态页面 不是动态布局 一 什么是动态页面 什么是动态页面 我认为是一种在开发时的设计思想 最终展示的页面会随着数据的改变而改变 或者说会根
  • OpenCV中如何读取URL图像文件

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 由来 最近知识星球收到的提问 觉得是一个很有趣的问题 就通过搜集整理归纳了一番 主要思想是通过URL解析来生成数据 转为图像 Mat对象 但是在Python语言与C 语言
  • Java基础学习总结(1)——equals方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 equals方法介绍 1 1 通过下面的例子掌握equals的用法 1 package cn galc test 2 3 public class TestEquals
  • 简单spring cloud服务升级实现

    1 升级原则 隔离性 v1升级到v2时 相互独立 互不不干扰 稳定性 服务不停止 完成升级 接口保持畅通 2 具体实现 2 1 eureka项目 搭建eureka 网上很多 就省略了 2 2 feign接口项目 2 2 1 依赖
  • React Hooks

    React Hooks 为什么使用 React Hook useState hook useReducer hook useEffect hook useRef hook useLayoutEffect hook useImperative
  • GPIO口的八种工作状态

    一直对GPIO的工作状态不是很熟悉 导致在设置IO状态时 经常会设置成推挽上拉 或者推挽下拉 开漏上拉等问题 虽然看起来没有影响MCU工作 但感觉这是一种无知的表现 现在总结下GPIO口的八种工作状态 其中四种输入状态 四种输出状态 一 输
  • (STM32笔记2)基于hc05的蓝牙实验

    实验任务 开机检测 HC05 蓝牙模块是否存在 如果检测不成功 则报错 检测成功之后 显示模块的主从状态 并显示模块是否处于连接状态 DS0 闪烁 提示程序运行正常 按 KEY0 按键 可以开启 关闭自动发送数据 通过蓝牙模块发送 按 KE
  • 简单工厂模式

    简单工厂模式 一 概念 从设计模式的类型上来说 简单工厂模式是属于创建型模式 又叫做静态工厂方法 StaticFactory Method 模式 但不属于23种GOF设计模式之一 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简
  • ASIC中带有MUX的时钟路径时序约束

    链接 https pan baidu com s 1BrAsabLYLGbvdXJB2LQwiA 提取码 mgrn
  • 回溯法详解

    一 回溯法 深度优先搜素 1 简单概述 回溯法思路的简单描述是 把问题的解空间转化成了图或者树的结构表示 然后使用深度优先搜索策略进行遍历 遍历的过程中记录和寻找所有可行解或者最优解 基本思想类同于 图的深度优先搜索 二叉树的后序遍历 分支
  • 旋转变换(一)旋转矩阵

    转自 https blog csdn net csxiaoshui article details 65446125 1 简介 计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换 在仿射变换中的基本变换包括平移 旋转 缩放 剪切
  • Kotlin核心编程(七)

    Kotlin核心编程 七 文章目录 Kotlin核心编程 七 多继承问题 接口实现多继承问题 getter和setter 内部类解决多继承问题 内部类和嵌套类 使 委托代替多继承 数据类 Pair和Triple 数据类的约定与使 多继承问题
  • Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象 即装饰者 动态扩展目标对象的功能 并且不会改变目标对象的结构 提供了一种比继承更灵活的替代方案 需要注意的是 装饰对象要与目标对象实现相同的接口 或继承相同的抽象类 另外装饰对象需要持有目标
  • mobaxterm无法连接vmware虚拟机服务器,network error:connection refused

    场景描述 电脑硬盘换了 重新安装vmware ubuntu mobaxterm 安装完ubuntu后 因为习惯了无UI的界面 所以关闭了ubuntu的桌面服务 有需要的同学可以通过sudo systemctl set default mul
  • 【Java基础】 使用POI解析excel时格式判定问题及解决方案

    写在前面 本文主要介绍在实际开发过程中使用POI工具类去解析Excel格式文件遇到的问题引发的思考 学习以及解决方案 仅供参考 有考虑不周的地方还请指正 问题描述 博主在做excel解析的时候 遇到了一个奇怪的现象 xlsx拓展名的文件使用
  • Struts2知识汇总二

    Struts2中的调试 在Struts2中可以使用
  • java8 stream流排序

    原文出处 https www cnblogs com kuanglongblogs p 11230250 html 很多情况下sql不好解决的多表查询 临时表分组 排序 尽量用java8新特性stream进行处理 使用java8新特性 下面
  • Android PowerSupply (三)power_supply_sys

    目录 Android PowerSupply 一 总概 Android PowerSupply 二 power supply core Android PowerSupply 三 power supply sys Android Power