Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

搜索
查看: 79758|回复: 1068

[教程] VoodooPS2Controller v1.8.15     [复制链接]

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28166
贡献
0
技术
2134
活跃
1597

活动参与先锋 7周年庆典勋章 8周年庆典勋章

发表于 2014-2-26 07:41:31 |显示全部楼层
本帖最后由 lisai9093 于 2015-8-8 10:50 编辑

Reference: https://github.com/RehabMan/OS-X-Voodoo-PS2-Controller
http://www.tonymacx86.com/mavericks-laptop-support/114648-combined-u310-u410-mavericks-thread-22.html

前言:过了小半年Rehabman 终于更新了,这次的也特别给力:添加ACPI 支持。也就是说,即使不用ACPIBacklight 不设亮度快捷键也可以看到小太阳的现在,就像现在的音量一样。不过还是建议和ACPIBacklight 一起使用,避免一些不兼容的现象。另外Fn 键在我的机器上也可以被识别了,不过双击时好像有点问题,识别的不是很好,Rehabman 说可能和硬件有关,就先不搞了。

下载:



ACPI 功能键查找方法:
由于ACPI 功能键不在键盘Bus 上,所以必须借助DSDT 去查找功能键的位置(比如亮度调节)。

1. 首先添加 RMDT method,安装ACPIDebug.kext(上面有下载)。它们的用处是从DSDT 向OS X 的system.log 发送信息,这样我们就能看到是在执行哪里的DSDT 代码 ,从而分辨出亮度建的位置。
DSDT 最后添加:
  1. Device (RMDT)
  2.     {
  3.         Name (_HID, "RMD0000")
  4.         Name (RING, Package (0x0100) {})
  5.         Mutex (RTMX, 0x00)
  6.         Name (HEAD, Zero)
  7.         Name (TAIL, Zero)
  8.         Method (PUSH, 1, NotSerialized)
  9.         {
  10.             Acquire (RTMX, 0xFFFF)
  11.             Add (HEAD, One, Local0)
  12.             If (LGreaterEqual (Local0, SizeOf (RING)))
  13.             {
  14.                 Store (Zero, Local0)
  15.             }

  16.             If (LNotEqual (Local0, TAIL))
  17.             {
  18.                 Store (Arg0, Index (RING, HEAD))
  19.                 Store (Local0, HEAD)
  20.             }

  21.             Release (RTMX)
  22.         }

  23.         Method (FTCH, 0, NotSerialized)
  24.         {
  25.             Acquire (RTMX, 0xFFFF)
  26.             Store (Zero, Local0)
  27.             If (LNotEqual (HEAD, TAIL))
  28.             {
  29.                 Store (DerefOf (Index (RING, TAIL)), Local0)
  30.                 Increment (TAIL)
  31.                 If (LGreaterEqual (TAIL, SizeOf (RING)))
  32.                 {
  33.                     Store (Zero, TAIL)
  34.                 }
  35.             }

  36.             Release (RTMX)
  37.             Return (Local0)
  38.         }

  39.         Method (COUN, 0, NotSerialized)
  40.         {
  41.             Acquire (RTMX, 0xFFFF)
  42.             Subtract (HEAD, TAIL, Local0)
  43.             If (LLess (Local0, Zero))
  44.             {
  45.                 Add (Local0, SizeOf (RING), Local0)
  46.             }

  47.             Release (RTMX)
  48.             Return (Local0)
  49.         }

  50.         Method (P1, 1, NotSerialized)
  51.         {
  52.             PUSH (Arg0)
  53.         }

  54.         Method (P2, 2, Serialized)
  55.         {
  56.             Name (TEMP, Package (0x02) {})
  57.             Store (Arg0, Index (TEMP, Zero))
  58.             Store (Arg1, Index (TEMP, One))
  59.             PUSH (TEMP)
  60.         }

  61.         Method (P3, 3, Serialized)
  62.         {
  63.             Name (TEMP, Package (0x03) {})
  64.             Store (Arg0, Index (TEMP, Zero))
  65.             Store (Arg1, Index (TEMP, One))
  66.             Store (Arg2, Index (TEMP, 0x02))
  67.             PUSH (TEMP)
  68.         }

  69.         Method (P4, 4, Serialized)
  70.         {
  71.             Name (TEMP, Package (0x04) {})
  72.             Store (Arg0, Index (TEMP, Zero))
  73.             Store (Arg1, Index (TEMP, One))
  74.             Store (Arg2, Index (TEMP, 0x02))
  75.             Store (Arg3, Index (TEMP, 0x03))
  76.             PUSH (TEMP)
  77.         }

  78.         Method (P5, 5, Serialized)
  79.         {
  80.             Name (TEMP, Package (0x05) {})
  81.             Store (Arg0, Index (TEMP, Zero))
  82.             Store (Arg1, Index (TEMP, One))
  83.             Store (Arg2, Index (TEMP, 0x02))
  84.             Store (Arg3, Index (TEMP, 0x03))
  85.             Store (Arg4, Index (TEMP, 0x04))
  86.             PUSH (TEMP)
  87.         }

  88.         Method (P6, 6, Serialized)
  89.         {
  90.             Name (TEMP, Package (0x06) {})
  91.             Store (Arg0, Index (TEMP, Zero))
  92.             Store (Arg1, Index (TEMP, One))
  93.             Store (Arg2, Index (TEMP, 0x02))
  94.             Store (Arg3, Index (TEMP, 0x03))
  95.             Store (Arg4, Index (TEMP, 0x04))
  96.             Store (Arg5, Index (TEMP, 0x05))
  97.             PUSH (TEMP)
  98.         }

  99.         Method (P7, 7, Serialized)
  100.         {
  101.             Name (TEMP, Package (0x07) {})
  102.             Store (Arg0, Index (TEMP, Zero))
  103.             Store (Arg1, Index (TEMP, One))
  104.             Store (Arg2, Index (TEMP, 0x02))
  105.             Store (Arg3, Index (TEMP, 0x03))
  106.             Store (Arg4, Index (TEMP, 0x04))
  107.             Store (Arg5, Index (TEMP, 0x05))
  108.             Store (Arg6, Index (TEMP, 0x06))
  109.             PUSH (TEMP)
  110.         }
  111.     }
复制代码
*或者在MaciASL 添加源:http://raw.github.com/RehabMan/OS-X-ACPI-Debug/master ,自动打补丁。


2. 查找DSDT 下的 Device (EC0),可以看到它下面有很多 _QXX method(如_Q26,_QE9)。亮度功能键就在它们当中!下面要做的就是在每个_QXX 下添加这两行,一个在开头,一个在结尾:
  1. \rmdt.p1("EC0._QXX enter") //开头
复制代码
  1. \rmdt.p1("EC0._QXX exit") //结尾
复制代码
例如:
  1. Method (_Q26, 0, NotSerialized)
  2.             {
  3.                 Store (0x26, P80H)
  4.                 Notify (BAT1, 0x80)
  5.                 Notify (ACAD, 0x80)
  6.             }
复制代码
修改后:
  1. Method (_Q26, 0, NotSerialized)
  2. {
  3. \rmdt.p1("EC0._Q26 enter")
  4. Store (0x26, P80H)
  5. Notify (BAT1, 0x80)
  6. Notify (ACAD, 0x80)
  7. \rmdt.p1("EC0._Q26 exit")
  8. }
复制代码
不过这个方法有点啰嗦,我猜测亮度调节可能会有一些特征,比如我的亮度调节是在_Q70 和_Q71:
  1. Method (_Q70, 0, NotSerialized)
  2.             {
  3.                 Store (0x70, P80H)
  4.                 If (LGreaterEqual (OSYS, 0x07D6))
  5.                 {
  6.                     Notify (^^^IGPU.DD02, 0x86)
  7.                 }
  8.             }

  9.             Method (_Q71, 0, NotSerialized)
  10.             {
  11.                 Store (0x71, P80H)
  12.                 If (LGreaterEqual (OSYS, 0x07D6))
  13.                 {
  14.                     Notify (^^^IGPU.DD02, 0x87)
  15.                 }
  16.             }
复制代码
可以看到都调用了IGPU.DD02,也就是显卡的亮度函数。这样的方法可能更快,不过准确性还有待确认。

3. 修改好DSDT,安装好ACPIDebug 之后就可以重启了。打开系统日志(Console),搜索ACPIDebug,按亮度键的时候日志里就会出现以下类似的信息:
  1. Feb 24 10:53:21 localhost kernel[0]: ACPIDebug: "EC0._Q70 enter"
  2. Feb 24 10:53:21 localhost kernel[0]: ACPIDebug: "EC0._Q70 exit"
复制代码
这里可以看到 _Q70 是我们要找的亮度调节,不同机器这个数字可能不一样,不能通用。

4. 再次修改DSDT,使 _QXX 通知 Voodoops2Controller,这样DSDT 和键盘驱动就能建立联络了。
这是Rehabman 的补丁:
  1. # Make EC-based brightness up/down work with RehabMan VoodooPS2 ACPI keyboard mechanism
  2. into method label _Q70 parent_label EC0 replace_content
  3. begin
  4.     // Dell code for brightness up\n
  5.     Notify (PS2K, 0x0206)\n
  6.     Notify (PS2K, 0x0286)\n
  7. end;

  8. into method label _Q71 parent_label EC0 replace_content
  9. begin
  10.     // Dell code for brightness down\n
  11.     Notify (PS2K, 0x0205)\n
  12.     Notify (PS2K, 0x0285)\n
  13. end;
复制代码
可以看到 _Q70 使亮度增加,_Q71 为减少。把这里的数字替换成上一步找到的数字,用MaciASL 打补丁即可。所有工作结束!

5. 如果和我一样有强迫症的话,记得清理下DSDT 和ACPIDebug~ GL

6* 联想 IdeaPad U310/410/430 ,_Q70 & _Q71 为亮度调节。希望大家多反馈自己的结果还有机型,我会更新到这里,有分儿哦~


附件: 你需要登录才可以下载或查看附件。没有帐号?注册

回帖推荐

qw3752258 发表于351楼  查看完整内容

我再来补充一下,这个可能是我猜的,建议直接从Q60~Q72开始找Fn按键,它和F1~F12是对应的,某些机型可能可能中间缺少Q64,Q65,那么只能另寻办法了
10

查看全部评分

Rank: 2Rank: 2

UID
2774792
帖子
403
PB币
3441
贡献
0
技术
14
活跃
1018
发表于 2014-2-26 07:44:52 |显示全部楼层
支持一下

求71狐狸尾巴当抱枕......外出南极洲旅游至今未归

UID
2881599
帖子
18661
PB币
94480
贡献
1
技术
23503
活跃
2821

热心会员 8周年庆典勋章

发表于 2014-2-26 07:56:29 |显示全部楼层
改动不小啊。。。

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28166
贡献
0
技术
2134
活跃
1597

活动参与先锋 7周年庆典勋章 8周年庆典勋章

发表于 2014-2-26 08:07:07 来自手机 |显示全部楼层
neycwby09 发表于 2014-2-25 16:56
改动不小啊。。。

对啊,所以之前才很期待。
Ps: 还有个功能没写,回头给加上

UID
2409498
帖子
27335
PB币
926
贡献
4
技术
1338
活跃
694
发表于 2014-2-26 10:19:42 |显示全部楼层

看来我要给dsdt小改动一下

Rank: 7Rank: 7Rank: 7

UID
2142404
帖子
1013
PB币
1066
贡献
0
技术
17
活跃
1077
发表于 2014-2-26 13:12:52 |显示全部楼层
提一个问题,那种wifi指示灯就在f12(wifi的快捷键)上,要从哪个地方控制。wifi开了灯还是黄色的(表示关了)。请大大提供个思路

黑苹果专用车

Rank: 7Rank: 7Rank: 7

UID
523723
帖子
1971
PB币
594
贡献
0
技术
201
活跃
541
发表于 2014-2-26 20:36:58 |显示全部楼层
这个对台式机来说太有用了。试试新版。多谢楼主了。
头像被屏蔽

Rank: 2Rank: 2

UID
2634665
帖子
416
PB币
917
贡献
0
技术
0
活跃
241
发表于 2014-2-26 20:39:40 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 7Rank: 7Rank: 7

UID
2115300
帖子
1048
PB币
4583
贡献
0
技术
175
活跃
590
发表于 2014-2-26 22:19:54 |显示全部楼层
支持一个~~~版主 以前用你的ACPIBacklight+DSDT驱动 修改的小太阳 用这个KEXT 会不会有什么不良反应?

Rank: 2Rank: 2

UID
1084424
帖子
270
PB币
304
贡献
0
技术
4
活跃
547

7周年庆典勋章

发表于 2014-2-26 22:32:06 |显示全部楼层
make
准备全新安装

鸣人

Rank: 15Rank: 15Rank: 15

UID
1834286
帖子
8195
PB币
2399
贡献
0
技术
134
活跃
1337

8周年庆典勋章

发表于 2014-2-26 22:39:25 |显示全部楼层
感谢分享,我要试试,希望能像其他快捷键那样搞定亮度调节fn快捷键出现小太阳

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28166
贡献
0
技术
2134
活跃
1597

活动参与先锋 7周年庆典勋章 8周年庆典勋章

发表于 2014-2-26 23:20:57 |显示全部楼层
yokor 发表于 2014-2-25 22:12
提一个问题,那种wifi指示灯就在f12(wifi的快捷键)上,要从哪个地方控制。wifi开了灯还是黄色的(表示关了 ...

你需要找到wifi的快捷键 的scan code 才行,这个选项在keyboard 下的info.plist 可以开启。
如果日志里没有显示这个按键的scan code,则需要按照步骤1-3 找到对应的ACPI 代码,然后通知Voodoops2。

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28166
贡献
0
技术
2134
活跃
1597

活动参与先锋 7周年庆典勋章 8周年庆典勋章

发表于 2014-2-26 23:22:04 |显示全部楼层
mojelly 发表于 2014-2-26 07:19
支持一个~~~版主 以前用你的ACPIBacklight+DSDT驱动 修改的小太阳 用这个KEXT 会不会有什么不良反应?

不会的,这个是更完善的驱动,就是为了配合以前的。如果不用acpibacklight 也许会出一些奇怪问题。

Rank: 7Rank: 7Rank: 7

UID
2115300
帖子
1048
PB币
4583
贡献
0
技术
175
活跃
590
发表于 2014-2-26 23:42:52 |显示全部楼层
lisai9093 发表于 2014-2-26 23:22
不会的,这个是更完善的驱动,就是为了配合以前的。如果不用acpibacklight 也许会出一些奇怪问题。

哦  谢版主 回复~ 我安装试试~

Rank: 7Rank: 7Rank: 7

UID
2142404
帖子
1013
PB币
1066
贡献
0
技术
17
活跃
1077
发表于 2014-2-27 10:00:52 |显示全部楼层
lisai9093 发表于 2014-2-26 23:20
你需要找到wifi的快捷键 的scan code 才行,这个选项在keyboard 下的info.plist 可以开启。
如果日志里没 ...

报告版主,扫不到scan code 是什么情况,之前就有几个键扫不出来。另外,苹果自己也没有wifi快捷键是么?

Rank: 11Rank: 11Rank: 11

UID
245936
帖子
3077
PB币
882
贡献
0
技术
283
活跃
1173

7周年庆典勋章 8周年庆典勋章

发表于 2014-2-27 15:53:46 |显示全部楼层
发现Windows键变成MAC的Command键了。想改过来,不知如何改?
头像被屏蔽

Rank: 7Rank: 7Rank: 7

UID
339943
帖子
1260
PB币
0
贡献
0
技术
100
活跃
699
发表于 2014-2-27 16:16:51 来自手机 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28166
贡献
0
技术
2134
活跃
1597

活动参与先锋 7周年庆典勋章 8周年庆典勋章

发表于 2014-2-27 17:14:33 来自手机 |显示全部楼层
gcafrk 发表于 2014-2-27 00:53
发现Windows键变成MAC的Command键了。想改过来,不知如何改?

键盘设置可以修改

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28166
贡献
0
技术
2134
活跃
1597

活动参与先锋 7周年庆典勋章 8周年庆典勋章

发表于 2014-2-27 17:15:46 来自手机 |显示全部楼层
chao_hl 发表于 2014-2-27 01:16
试了下,双至右键可用,但单击键盘上的右键却只闪一下右键菜单然后又立即消失,即键盘物理右键无法使用。等 ...

没遇到过,是Synaptics 触摸板吧?
头像被屏蔽

Rank: 7Rank: 7Rank: 7

UID
339943
帖子
1260
PB币
0
贡献
0
技术
100
活跃
699
发表于 2014-2-27 18:14:09 来自手机 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回顶部
Copyright (C) 2005-2019 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件