Dell G15 5530 键值映射全解
适用Dell-G15-5530以及大部分Dell-G系列/Alienware中搭载AWCC的机型
本文引用的底层 SDK 源码来自 alienfan-SDK_v2。 它是一套封装 AWCC WMI 通信的控制库:负责探测兼容机型、读写电源模式 / G 模式 / TCC 偏移、 读取传感器温度与风扇转速,上层工具通过
AlienFan_SDK::Control接口直接操作硬件。
1. 键值是怎么传进固件的
所有模式切换最终都落到 WMI 命名空间 root\WMI 下的 AWCCWmiMethodFunction 类。固件通过 ACPI 方法 \_SB.AMWW.WMAX 暴露这些 WMI 方法,底层数据通道是同一个。
与电源/散热相关的有三个方法族(括号内是对应的 ACPI 操作码):
| WMI 方法 | ACPI 操作码 | 用途 |
|---|---|---|
Thermal_Information | 0x14 | 读取:传感器温度、风扇转速、当前模式 |
Thermal_Control | 0x15 | 写入:切换模式、设置附加风扇转速 |
GameShiftStatus | 0x25 | 读取/写入:G 模式(Game Shift)状态 |
其中 Thermal_Control 的 ApplyThermalMode 子功能就是”切换模式”的入口,它的参数编码规则是:
arg2 = (thermalMode << 8) | 1
低字节 1 是”应用模式”这个子功能号,高字节就是要写入的模式键值。
在 SDK 源码里,这个
{ 子功能, 参数1, 参数2, 保留 }的字节结构被封装成一个 4 字节联合体ALIENFAN_INTERFACE:union ALIENFAN_INTERFACE { struct { byte sub, arg1, arg2, reserved; }; DWORD args; };
sub取1即 ApplyThermalMode,arg1即 thermalMode。所以SetPower(0xA1)实际发出的是Thermal_Control(0xA101)。
2. 核心键值映射表
综合固件 WMI 枚举定义与 G15 5530 实测,ApplyThermalMode 的 thermalMode 键值如下:
| 键值 (hex) | 十进制 | 枚举名 | 模式 |
|---|---|---|---|
0x00 | 0 | Custom | 自定义(手动) |
0x96 | 150 | Quiet | 静音 |
0x97 | 151 | Balanced | 平衡 |
0x98 | 152 | Performance | 性能 |
0x99 | 153 | FullSpeed | 全速 |
0xA0 | 160 | USTT_Balanced | 平衡 |
0xA1 | 161 | USTT_Performance | 性能 |
0xA2 | 162 | USTT_Cool | 冷却 |
0xA3 | 163 | USTT_Quiet | 静音 |
0xA4 | 164 | USTT_FullSpeed | 全速 |
0xA5 | 165 | USTT_BatterySaver | 电池节能 |
0xAB | 171 | G_Mode | G 模式 |
G15 5530 实际生效的档位
G15 5530 探测出的档位对应的硬编码中文名:
std::wstring PowerModeName(int index, int rawValue) {
switch (rawValue) {
case 0xa0: return L"平衡";
case 0xa1: return L"性能";
case 0xa3: return L"静音";
case 0xa5: return L"电池";
}
return Format(L"BIOS 档位 %d", index);
}
即 G15 5530 使用 0xA0~0xA5 这一组 USTT 键值空间,加上:
0x00→ 自定义(手动模式,即禁用 BIOS 自动调档)0xAB→ G 模式
3. 两组键值空间:0x960x99 与 0xA00xA5
0x99 与 0xA0表格里出现两组”静音/平衡/性能/全速”,这不是笔误,而是固件里并存着两套模式枚举:
| 键值空间 | 典型机型 | 备注 |
|---|---|---|
0x96~0x99 | 老款 Alienware(m 系列等) | 经典 Quiet/Balanced/Performance/FullSpeed |
0xA0~0xA5(USTT) | Dell G15 5530 / G16 等较新机型 | 多了 USTT_Cool 冷却 与 USTT_BatterySaver 电池节能 |
AWCC 的代码里对这两套空间用的是同一套处理逻辑,只是固件报告哪个、你就用哪个。第三方工具不要硬编码名称为下标,正确的做法是像 SDK 那样先枚举出固件支持的键值列表,再按需写入。
SDK 的探测逻辑(
alienfan-SDK.cpp)正是如此:powers.push_back(0); // 先加入 Manual 手动模式 while ((funcID = CallWMIMethod(getPowerID, fIndex)) > 0) { byte vkind = funcID & 0xff; if (funcID > 0x8f) { powers.push_back(vkind); // 高位 > 0x8f 视为电源模式,低字节即模式键值 } ... fIndex++; }注意还有一个特殊分支:
sysType为 1 的老接口(如 R7 台式机)会兜底补上1和2两个档位(Manual + 1 + 2,共 3 种)。
4. G 模式(0xAB)是个特例
G 模式(Game Shift)不只是往 Thermal_Control 写 0xAB,它是一个双通道操作:
开启 G 模式:
GameShiftStatus → {1, 0x01} (置位 G 模式状态)
Thermal_Control → {1, 0xAB} (把模式切到 G 模式)
关闭 G 模式:
GameShiftStatus → {1, 0x00} (复位 G 模式状态)
Thermal_Control → {1, 0xA0} (切回平衡模式)
这正是 ArchWiki 上 G15 5530 页面的 ACPI 实测(Linux 下用 acpi_call 模块):
# 开启
echo "\_SB.AMWW.WMAX 0 0x25 {1, 0x01, 0x00, 0x00}" > /proc/acpi/call
echo "\_SB.AMWW.WMAX 0 0x15 {1, 0xab, 0x00, 0x00}" > /proc/acpi/call
# 关闭
echo "\_SB.AMWW.WMAX 0 0x25 {1, 0x00, 0x00, 0x00}" > /proc/acpi/call
echo "\_SB.AMWW.WMAX 0 0x15 {1, 0xa0, 0x00, 0x00}" > /proc/acpi/call
注意操作码 0x15 = Thermal_Control、0x25 = GameShiftStatus,花括号里第一个数字是子功能号 1,第二个就是键值。
在 SDK 源码里,SetGMode(true) 的流程也验证了这一点——先 SetPower(0xAB) 把模式写进去,再调用 G 模式状态方法:
int Control::SetGMode(bool state) {
if (isGmode) {
if (state)
SetPower(0xab); // 先切到 G 模式档位
return CallWMIMethod(setGMode, state); // 再同步 GameShift 状态
}
return -1;
}
另外有两个值得注意的行为:
- G 模式关闭时要切回:工具提供的 CLI/GUI 在关闭 G 模式后,会把电源模式切回之前选中的档位(GUI 默认写死切回性能
0xA1)。 - 判断 G 模式是否开启:参考实现用”当前模式键值是否为
0xAB”来判断(GetGMode里return pm == 0xab),而不是读GameShiftStatus。
5. 使用示例
方案 A:用 SDK 配套的命令行工具 alienpower-cli
alienpower-cli list # 列出探测到的全部模式及原始键值
alienpower-cli power=1 # 按下标切换
alienpower-cli power=performance # 切到最后一个档位(最高/性能)
alienpower-cli gmode=toggle # G 模式开关
方案 B:用 PowerShell 直接调 WMI
# 连接 AWCC WMI 命名空间
$awcc = Get-CimInstance -Namespace root\WMI -ClassName AWCCWmiMethodFunction
# 读取当前模式(Thermal_Information, GetPower = 0x0b00)
$awcc.Thermal_Information(0x0b00)
# 切到性能模式(Thermal_Control, ApplyThermalMode = (0xA1<<8)|1 = 0xA101)
$awcc.Thermal_Control(0xA101)
方案 C:Python(pywin32)
import win32com.client
wmi = win32com.client.Dispatch("WbemScripting.SWbemLocator")
svc = wmi.ConnectServer(".", "root\\WMI")
obj = svc.Get("AWCCWmiMethodFunction")()
obj.Instance()
# 当前模式
print(obj.Thermal_Information(0x0b00).ReturnValue)
# 切到平衡模式
obj.Thermal_Control(0xA001)
# 切到 G 模式
obj.Thermal_Control(0xAB01)
注意:这些调用都需要管理员权限,因为 WMI 通道受系统权限保护。
6. 键值写入后到底发生了什么
Thermal_Control 写进去的不是一个”名字”,而是让固件把整条散热/供电策略切换到对应预设:
| 模式 | 典型效果 |
|---|---|
0x00 自定义 | 关闭 BIOS 自动调档,风扇交给软件/手动控制 |
0xA1 性能 | 放开功耗墙(PL1/PL2),风扇曲线激进,噪声高 |
0xA3 静音 | 压低风扇转速,优先安静,性能受限 |
0xA5 电池 | 限制 GPU/CPU 功耗,优先续航 |
0xAB G 模式 | 风扇拉满 + 性能释放,发热大户 |
这也是为什么 Dell 官方文档会提到:在静音模式或电池模式下,G15 5530 的 GPU 功耗可能被限制到 30W 左右——这不是故障,而是对应键值(0xA3 / 0xA5)背后的功耗策略在生效。
参考资料
- AWCC WMI 接口文档(WMI-AWCC-doc)—— AlexIII/tcc-g15:
ThermalMode枚举的权威来源 - Dell G15 5530 —— ArchWiki:ACPI 实测调用与 Fn 键映射
- Dell G15 5530 极端条件下 GPU 功耗受限 30W —— Dell 官方支持文档:键值与功耗策略的关系
- alienfan-SDK_v2 —— 底层 SDK 源码:封装 AWCC WMI 通信的控制库,配套
alienpower-cli(命令行)与alienpower-ui(图形界面)两个上层工具
本文档基于 G15 5530(Intel)实测与社区逆向资料整理,键值空间对同代 AWCC 机型(G16、部分 Alienware)通用。不同 BIOS 版本枚举结果可能不同,请以工具探测结果为准。