linux-rockchip-电池相关

news2024/10/5 14:52:27

可以先安装d-feet,可以查看系统里所有的DBus连接

sudo apt-get install d-feet

在这里插入图片描述

查看电池的状态:

cat /sys/class/power_supply/BAT0/status

查看剩余电量百分比:

cat /sys/class/power_supply/BAT0/capacity

如果有多块电池,查看第二块电池的状态的命令中,上面的目录要改成BAT1等等。


参考来自:

https://www.ubuntukylin.com/news/1497-cn.html

在优麒麟系统的桌面应用中,电源管理工具(ukui-power-manager)能够监听系统事件和用户偏好设置,用来设置电源选项和屏保选项,比如设置显示器空闲多久进入睡眠和屏保采用的界面,同时还提供了显示电源相关的属性,功率,充放电统计等功能。相比台式机,笔记本电脑增加了电池相关的属性收集和显示。
ukui-power-manager主要包括了三个部分:

在这里插入图片描述

1、数据来源

这些界面的内容并不复杂,值得一探究竟的是界面上显示元素的数据来源。当笔记本接上电源电池开始充电,ukui-power-manager的界面能够显示充满电时间。我们就从这个time_to_full值获取的入口出发,来理解整个显示元素的数据来源。这个值是通过一个名称为gpm_stats_update_info_page_details的函数内部调用g_object_get函数获取的。g_object_get则是GObject提供的一个函数。

ukui-power-manager只是一个前端显示程序,在它后面存在一个程序,提供了诸如充放电时间这样的数据。这个后端程序就是upower,在upower中用来计算time_to_full的公式如下:

time_to_full = 3600 * ((energy_full - energy) / energy_rate);

不难理解,公式意思是满时的能量减去当前能量,得到的差值除以功率,再把结果转换成秒单位。那么这几个新引入的变量又从哪里获取的?满时能量按常理在运行时是不会改变的,功率可能有大有小,变化应该也不大。当前能量是通过sysfs_get_double这个函数的返回值获得,在这个函数内部打开了一个文件,然后从文件里获取到了数据。这个文件是由内核进行写操作的。至此,找到了界面上数据time_to_full的源头。

2、DBus和GObjec共同的作用
在这里插入图片描述

1)基本概念

DBus是一种进程间进行通信的机制,在桌面程序中大量地应用。它主要的概念就是总线,开发者注册进程到总线,然后就可以通过方法和信号进行通信。DBus底层是socket机制,提供了更高一层的接口,更方便了程序之间进行数据交换。GObject 是GTK+的一个程序库,提供使用 C 语言编写面向对象程序的方法。

2)作用

现在来看一看前端ukui-power-manager和upower的具体源代码,发现都使用了DBus这种通信框架。要想完全理解DBus又是一个不小的专题,这里只是管中窥豹,了解一些基本的用法。d-feet是一个非常有用的工具,可以查看系统里所有的DBus连接。终端敲入命令d-feet,可以看到有一个系统Bus叫做org.freedesktop.UPower,还可以看到一个会话Bus叫做org.ukui.PowerManager。于是这两个程序就可以通过Bus连接进行数据通信。

在这里插入图片描述
打开d-feet界面的org.ukui.PowerManager这个Bus连接,找到它提供的接口org.ukui.PowerManager.Backlight。找到方法SetBrightness并双击弹出输入参数界面,如下图所示,简单的输入79,点击运行发现屏幕背光亮度发生了调整。通过这种简单的方式,调用了DBus服务端提供的一个方法,把亮度调节到了79的百分比。

电源管理模块从程序上来说,主要分为下面三个部分:

ukui-power-backlight-helper —– 设置和获取亮度程序。
ukui-power-manager ————- 守护程序。(主要源文件:gpm-main.c)
ukui-power-statistics ——— 显示程序。(主要源文件:gpm-statistics.c)
下面这个图标和菜单选择就是 ukui-power-manager 这个程序提供的,注意到托盘图标,菜单项图标和文字是根据设备的当前状况进行动态更新。

在这里插入图片描述


优麒麟电源管理浅析 https://imcn.me/html/y2019/35674.html

1、优麒麟电源管理程序的组成和介绍

电源管理模块从程序上来说,主要分为下面三个部分:

ukui-power-backlight-helper —– 设置和获取亮度程序。
ukui-power-manager ————- 守护程序。(主要源文件:gpm-main.c)
ukui-power-statistics ——— 显示程序。(主要源文件:gpm-statistics.c)
下面这个图标和菜单选择就是 ukui-power-manager 这个程序提供的,注意到托盘图标,菜单项图标和文字是根据设备的当前状况进行动态更新。
在这里插入图片描述
点击“电源选项”可以方便调用控制面板的电源选项 ukui-control-center。控制中心实现了三组功能的设置。最上面一组是设置空闲多久显示器和计算机进入睡眠和笔记本盖子合上的动作,分为使用电源和使用电池两种情况。中间一组是按下电源物理键的动作,可以选择询问或者挂起等。最下面一组设置了托盘图标的显示策略,选择总是显示会在托盘一直存在一个程序图标,选择仅使用电池则只有电池存在才会显示托盘程序图标。
在这里插入图片描述
通过下面控制面板的滑动条就会调用 ukui-power-backlight-helper 程序,滑动条向右滑动可以增大屏幕亮度。背后其实是调用了 ukui-power-backlight-helper 程序。

2、优麒麟电源管理程序和其他程序的dbus交互

a、以笔记本盖子合上的过程作为例子来说明:

当笔记本盖子合上,org.freedesktop.UPower 这个后台程序发送回来lid_is_closed 属性改变的信号,ukui.power.manager 对这个信息做出反应。先判断是否允许盖子合上的功能。再获取gsettings的设置和是否使用电池,据此调用服务 org.freedesktop.login1 的功能函数,比如:suspend,hibernate,shutdown 等。

流程图如下:
在这里插入图片描述
b、还有其他的一些 dbus 进程交互。例如 upower 服务端,screensaver,login1 和 SessionManager。
在这里插入图片描述
以上就是对电源管理模块组成和交互的一些分析和理解,还有很多知识没有介绍到,有兴趣研究源码的可以到这个代码链接看看:
https://github.com/ukui/ukui-power-manager

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spark分布式内存计算框架——Spark SQL】15. Catalyst 优化器

第九章 Catalyst 优化器 在第四章【案例:电影评分数据分析】中,运行应用程序代码,通过WEB UI界面监控可以看出,无论使用DSL还是SQL,构建Job的DAG图一样的,性能是一样的,原因在于SparkSQL中引擎…

图卷积神经网络分类的pytorch实现

图神经网络(GNN)目前的主流实现方式就是节点之间的信息汇聚,也就是类似于卷积网络的邻域加权和,比如图卷积网络(GCN)、图注意力网络(GAT)等。下面根据GCN的实现原理使用Pytorch张量,和调用torch_geometric包,分别对Cora数据集进行…

Java函数式接口

3 函数式接口 3.1 函数式接口概述 函数式接口:有且仅有一个抽象方法的接口 Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口只有确保接口中有且仅有一个抽象方法, Java中的Lambda才能顺利地进行推导…

不容错过!飞桨深度学习与大模型产业应用专场24日等你来!

人工智能教父Hinton曾评价,“深度学习将无所不能”,从聊天机器人、自动驾驶到语音助手,深度学习早已在不知不觉中渗透进我们的生活,而AI大模型又是一项深度学习技术的新突破。深度学习、大模型作为人工智能发展的重要方向&#xf…

前端开发项目规范写法介绍

1. 基本原则 结构、样式、行为分离 尽量确保文档和模板只包含 HTML 结构,样式都放到样式表里,行为都放到脚本里。 缩进 统一两个空格缩进(总之缩进统一即可),不要使用 Tab 或者 Tab、空格混搭。 文件编码 使用不带 BOM 的 UTF-8 编码。 在 HTML中指定编码 <meta c…

C# 利用FluentFTP实现FTP上传下载功能

FTP作为日常工作学习中&#xff0c;非常重要的一个文件传输存储空间&#xff0c;想必大家都非常的熟悉了&#xff0c;那么如何快速的实现文件的上传下载功能呢&#xff0c;本文以一个简单的小例子&#xff0c;简述如何通过FluentFTP实现文件的上传和下载功能。仅供学习分享使用…

c++提高篇——queque容器

一、queque容器基本概念 Queue是一种先进先出(FIFO)的教据结构&#xff0c;它有两个出口 队列容器允许从一端新增元素&#xff0c;从另一端移除元素。队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列不允许有遍历行为队列中进数据。 queque容器可以形象化为生活中…

第一个Java程序(初识Java)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录1.Java概述1.1什么是Java1.2Java之父2.0第一个Java程序编译运行.class3.0程序如何跑起来的&#xff1f;3.1J…

39、基于51单片机声控光控灯人体感应路灯照明灯系统设计

摘 要 随着社会的不断进步&#xff0c;人们对低碳生活逐步认识和接受&#xff0c;并从很多方面开始关注&#xff0c;尤其是在环保上做出了很多努力。利用声音和光线的强弱来控制开关的断开或者闭合的电子产品来能够有效的降低能耗&#xff0c;节约能源。它不仅适用于住宅区的…

CMake构建静态库与动态库以及使用

CMake构建静态库与动态库一、任务二、准备工作三、编译共享库四、ADD_LIBRARY指令五、编译静态库5.1、SET_TARGET_PROPERTIES指令5.2、GET_TARGET_PROPERTY指令六、动态库版本号七、安装共享库和头文件八、使用外部共享库和头文件8.1、准备工作8.2、引入头文件搜索路径8.3、为 …

leetcode 11~20 学习经历

LeetCode 习题 11 - 2011. 盛最多水的容器12. 整数转罗马数字13. 罗马数字转整数14. 最长公共前缀15. 三数之和16. 最接近的三数之和17. 电话号码的字母组合18. 四数之和19. 删除链表的倒数第 N 个结点20. 有效的括号小结11. 盛最多水的容器 给定一个长度为 n 的整数数组 heigh…

【Servlet篇】Request请求转发详细解读

文章目录1. 前言2. 实战案例3. 特点1. 前言 请求转发是一种在服务器内部的资源跳转方式&#xff0c;如图&#xff1a; 上图的大致过程为&#xff0c;浏览器发送请求给服务器&#xff0c;服务器中 a 资源接收到请求&#xff0c;资源 a 处理完请求后将请求发送给资源 b&#xff…

cdr最新2023版本发布更新及CorelDraw功能介绍

CDR作为一款专业的平面设计软件&#xff0c;拥有着庞大的用户群体&#xff0c;而每年春天CorelDRAW新版本的发布也牵动着每一位小伙伴的心。CorelDraw2023近期刚刚发布本人就开始试用&#xff0c;感觉非常良好&#xff0c;特别给大家提出升级的N个理由!CorelDRAW2023最新版内置…

【基础算法】差分的应用(一维差分和二维差分)

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(一)

在最后一个例程中笔者精挑细选了一个较为综合性的项目实战&#xff0c;其中覆盖了很多知识点&#xff0c;也是从一个转产产品中所提炼出来的&#xff0c;所以非常贴近实战项目。 整个工程实现了用户通过对上位机PC端人机界面的操作&#xff0c;即可达到控制豌豆开发并行DAC输出…

Java---高级流

目录 一、转换流 &#xff08;1&#xff09;指定的字符集读写数据 二、序列化流和反序列化流 三、解压缩流和压缩流 &#xff08;1&#xff09;解压缩流 &#xff08;2&#xff09;压缩流 一&#xff1a;压缩文件 二&#xff1a;压缩文件夹 注&#xff1a;本文并未介绍J…

CVE-2023-24055 KeePass信息明文传输漏洞复现

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 如果文章中的漏洞出现敏感内容产生了部分影响&#xff0c;请及时联系作者&#xff0c;望谅解。 一、漏洞描述 漏洞简述 Kee…

STM32 SystemInit()函数学习总结

拿到程序后如何看系统时钟&#xff1f;User文件夹——system_stm32f4xx程序&#xff0c;先找systemcoreclock(系统时钟&#xff09;但是这里这么多个系统时钟应该如何选择?点击魔法棒&#xff0c;然后点击C/C可以看到define的是F40_41XXX.USE这一款 &#xff0c;对应着就找出了…

R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作技术应用第一章、理论篇以问题导入的方式&#xff0c;深入掌握原理基础什么是MaxEnt模型&#xff1f;MaxEnt模型的原理是什么&#xff1f;有哪些用途&#xff1f;MaxEnt运行需要哪些输入文件…

对云原生集群网络流量可观测性的一点思考

问题背景 在云原生技术的广泛普及和实施过程中&#xff0c;笔者接触到的很多用户需求里都涉及到对云原生集群的可观测性要求。 实现集群的可观测性&#xff0c;是进行集群安全防护的前提条件 。而在可观测性的需求中&#xff0c;集群中容器和容器之间网络流量的可观测性需求是…