Escaping Huawei/Honor PC Manager

Background

Honor PC Manager—essentially the Honor-flavored sibling of Huawei PC Manager—is far heavier than it needs to be.

For my use case, the features I actually care about are basically:

  1. Battery charge limit
  2. Touchpad force sensitivity
  3. Automatic driver updates

The third one is tolerable because drivers can always be downloaded manually from the vendor website.

The first two, however, are extremely simple settings.

In a less enlightened universe, they might have been implemented as two or three tiny utilities that read or write a few hardware values.

But then the legendary Huawei/Honor engineering wisdom arrived.

Instead, we get a large background service that sits in memory all day, accompanied by a complicated plugin system and IPC infrastructure—all so it can eventually read or write a couple of values to the hardware.

A truly enterprise-grade solution to a problem that could almost fit inside a shell script.

The Lightweight Solution

Fortunately, we have greate reverse engineers.

And now we also have AI, which makes exploring undocumented hardware interfaces considerably easier.

For the features I need, there are much simpler alternatives.

These tools were tested on my Magicbook Pro 16 2026, and will probably work on multiple Huawei/Honor laptops. At this level, there is little technical reason to deliberately break compatibility between models for such simple operations.

Of course, one should never underestimate unknown Huawei engineering wisdom.

1. Battery Charge Limit

A small Windows CLI tool for configuring the battery charging thresholds:

https://github.com/AceDroidX/HuaweiBatteryControl

This lets you control the charge limits without keeping PC Manager running permanently in the background.

2. Touchpad Force Sensitivity

A Windows CLI tool for configuring Goodix Newton touchpad force sensitivity:

https://github.com/edimetia3d/GoodixNewtonTouchpad

Again, no giant management suite is required just to change one hardware parameter.

Technical Notes

From what I have found, PC Manager mainly communicates with the laptop hardware through two mechanisms.

1. Raw HID Communication

Some devices are controlled through raw HID operations—the Windows equivalent of working with hidraw devices on Linux.

The touchpad configuration appears to use this mechanism.

In other words, PC Manager sends relatively small HID commands to the device to read or change its configuration.

2. WMI Communication

Other features are exposed through WMI.

Examples include:

  • Keyboard backlight settings
  • Battery charging thresholds

These operations ultimately appear to modify values handled by the laptop's Embedded Controller (EC).

So behind the impressive PC Manager architecture, some features eventually reduce to something approximately equivalent to:

write value X to hardware field Y

The journey to get there is simply much more adventurous.

Useful Reverse-Engineering Projects

If you want to implement additional Huawei/Honor laptop features, these projects are useful references:

Huawei WMI

https://github.com/aymanbagabas/Huawei-WMI

Linux support and reverse engineering for Huawei laptop WMI interfaces.

Linux on HONOR MagicBook 14 Pro 2026

https://github.com/rs0x29a/Linux-on-HONOR-MagicBook-14-Pro-2026-AI_ZQC-P_M1010

Contains useful information about running Linux on newer Honor hardware and interacting with the platform.

HonorControl

https://github.com/ZachAR3/HonorControl

Another project implementing controls for Honor laptop hardware.

These repositories are also good material to give to an AI coding agent when investigating additional features.

Instead of reverse-engineering everything from zero, the agent can inspect the existing implementations, compare WMI methods, HID reports, ACPI behavior, and EC access patterns, and then build a small dedicated utility for the feature you actually need.

A surprisingly civilized use of AI: removing unnecessary vendor software.

EC Notes: MagicBook Pro 16

For the MagicBook Pro 16 model I tested, I found the following EC fields:

EC AddressMeaning
0x80Battery charge lower bound
0x81Battery charge upper bound
0x42Keyboard backlight duration, low 8 bits
0x43Keyboard backlight duration, high 8 bits

The keyboard backlight duration therefore appears to be stored as a 16-bit value across 0x42 and 0x43.

These values are hardware/model-specific observations, so they should not be assumed to be identical on every Huawei or Honor laptop.

Read more

Coroutine

从一般概念上说, 协程是特殊的函数调用: 被调用的函数可以在可控的位置被中断,然后在下一次调用时,继续从上次中断的位置继续执行。 本文主要通过Python的协程来介绍协程, 这是我唯一熟悉的一种协程实现. Classic Coroutine 下面的python代码很好的说明了协程的核心功能 def co_routine(): recv0 = yield 996 # hangs here after first coro.send assert recv0 == "Second" yield 711 # hangs here after second coro.send return def main(): coro = co_routine() # Create a new coroutine object value = coro.send(None)

By Edimetia3D

GDB with Python

这篇文章的主要应用场景是调试Python的C/C++ Extension 1. 同时使用pdb / gdb 进行调试. 通俗点说, 既可以break在 .py 文件中,也可以break在 .cc 文件中 2. 在gdb中不但可以获得常规的调试信息, 还可以获得python VM 的调试信息, 例如获得python的调用栈, 访问Python局部变量等. 这将会在调试exception时(如Segmentfalut)非常有用, 这种场景下, 定位 Python VM 正运行到哪一行代码往往可以提供一些直观的重要信息. 第一步: 编译源码以获得一些辅助数据. 我们并不真的需要使用从源码编译的Python, 但是一些调试相关的辅助文件需要从源码中获得, 包括 python-gdb.py及debug symbol等. 在 https://www.python.org/ftp/python/ 或 https://github.com/python/cpython

By Edimetia3D

Bazel Notes

这是一篇2019年左右的记录, 内容可能过时, 也不太全面 杂谈 Bazel是Google为Monorepo服务而开发的构建工具. 首先是巨大,当问题的规模变大,事情总是会变得更复杂. 而Google面对的"巨大Monorepo",应该是世间罕有的. 然后是Monorepo,这极大的影响了代码的组织风格.例如,你要写一个操作系统内核ProjectOS,还要写一个游戏ProjectGame.在传统的开发习惯中,这两个项目会组织到两个不同的Repo里,PorjectOS和ProjectGame之间无法直接相互引用,例如,你在ProjectOS里写了一个高级的数据结构,想要在Game里也使用,要么直接复制粘贴,要么是创建一个新的CommonRepo,把可公用的代码都放在Common里,然后两个项目各自引入Common作为依赖. 使用MonoRepo则不存在这个问题,Game可以直接依赖OS内的组件,按照Bazel的语法描述,就是在Game中可以直接使用@ProjectOS//path/to/package:AdvancedStruct.当然,你仍然可以选择重构一

By Edimetia3D

Unix related things

这是一篇2017年左右的记录, 仅用作分享 杂 * 在shell内能干的事,我们都可以比较简单地通过系统调用实现. * `称为反引号,^称为脱字符,常用来表示CTRL * windows的系统调用是不开放的,windows下只能直接使用windows.h里的windows API. * /dev目录下的设备是供用于程序直接使用的,主要由block,char,pipe,socket类型 * 并不是所有设备都能映射为这种形式 * /sys/device/目录称为sysfs,他下面存放了所有设备的信息.(不能直接从/dev获得任何设备信息) * udevadm info --query=all --name="/dev/sda1"可以用于查询/dev下某个设备对应的sysfs路径 权限系统 * 权限系统由两部分组成 * 文件属性:用于标注文件owner,所属组,以及权限的设定(默认只有owner和root可以修改权限设置) *

By Edimetia3D