如何用cpp程序读写EC(嵌入式控制器)寄存器
How to read/write EC (embedded controller) register with a cpp program
我正试图编写一个程序,用笔记本电脑EC嵌入式控制器(IT8570E)的PWM驱动背光键盘。
为此,程序需要:-当用户按下Fn+F3/F4以增加/减少亮度时捕捉。-编辑EC寄存器值以修改PWM,从而修改亮度。
问题是:如何在c++脚本中读/写这个EC寄存器?我发现了一个可以做这种事情的程序,所以我想这是可能的(EC-probe.exehttps://github.com/hirschmann/nbfc/wiki)我想知道如何使用cpp。
EC寄存器是否包含在windows寄存器中?
(附言:如果你也知道如何捕捉用户按下组合键的时候,我会感兴趣的!)
注:最初笔记本电脑没有背光键盘,但有这样做的硬件接口。其他类似型号都有背光键盘,但是似乎对Fn-F3/Fn-F4组合做出反应的功能包含在BIOS/EC代码中。因为编辑bios看起来真的很困难,而且有风险,我正在研究写一个程序直接处理背光的可能性。
完整项目描述:https://www.bios-mods.com/forum/Thread-Asus-N71JQ-enable-backlit-keyboard
您可以使用EmbeddedController读取或写入EC寄存器。
#include <iostream>
#include <windows.h>
#include "ec.hpp"
int main()
{
EmbeddedController ec = EmbeddedController();
if (ec.driverFileExist && ec.driverLoaded)
{
ec.writeByte(0x30, 0xAA); // Write 0xAA to register 0x30
BYTE value = ec.readByte(0x30); // Read value of register 0x30
std::cout << std::hex << (INT)value;
ec.close(); // Close the resources
}
}
严格意义上,您无法在纯可移植的标准C++程序中读取寄存器(因为C++规范不知道寄存器)。阅读更多关于C++语言的信息,例如一些C++参考网站,一些C++编程简介,以及C++11的n3337标准。
但是,您可以使用asm
语句。它们以特定于实现的方式生成代码。
如果您使用GCC编译器,请阅读其关于将汇编语言与C结合使用的部分(其中大部分也适用于C++)。
如果您关心在Windows(或其他一些常见的操作系统,如Android、MacOSX、Linux)上访问键盘,则需要使用特定于操作系统的原语(不在C++标准范围内)。
对于Windows,请参阅WinAPI文档。
对于Linux,首先阅读其系统调用,例如syscalls(2)。
大多数操作系统都在抽象对硬件的访问。因为你的过程是孤立的。它正在用户模式下运行。
在x86 PC上,请注意SMM、BIOS和UEFI。它可能正在管理这样神奇的亮度键(或与操作系统内核交互)。
EC寄存器是否包含在windows寄存器中?
您可能会将键盘微控制器中的某些硬件处理器寄存器与Windows注册表混淆。尽管语音相似,但它们完全没有关系。
PS。https://github.com/hirschmann/nbfc是免费软件(GPLv3+许可证)。请深入研究它的源代码(可能有特定于操作系统的部分),并研究源代码(一些与Windows相关的代码,如nbfc/Windows/NbfcClient/AppSettings.cs,看起来像C#代码)。
- 本质:使用__128寄存器
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 使用英特尔 PIN 修改寄存器
- AVX 指令中寄存器和指针之间的客观差异
- 如何确定我的处理器有多少个 AVX 寄存器?
- 除非使用某些寄存器,否则函数挂钩会崩溃
- 寄存器上的管道计算
- 其中关于内存和寄存器的左值和右值
- 有没有办法强制C++编译器将变量存储在寄存器中?
- "变量":函数中函数作用域不允许初始化的自动或寄存器变量'naked'
- Atmel Studio:返回一个包含数组的寄存器
- 使用 googletest 测试嵌入式C++代码时处理外设寄存器的重复符号
- 移位寄存器74HC595输出电流
- 超过255的Modbus寄存器无法访问SimpleModbus
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 如何用cpp程序读写EC(嵌入式控制器)寄存器
- 如何访问内存映射的 USB 主控制器寄存器
- 记录微控制器外设配置寄存器设置
- 嵌入式应用程序写寄存器时出现分段错误