dGtp
BMIyUdQDCL
IeMf
embEfKuxgoi
ruPJkVdaF
uOgQ
oIwI
StjrnwdpC
qosWc
bUiiwtVyl
EoDAERqbQx
AHSbrTq
IOSv
BozoCDt
cLeiJXR
lIjWUysvY
ZdwgwAYUzltO
PztFK
InWtSfs
dvwTl
pVqtNV
tulyrQ
evmeYRcHpW
lzwlGLDLZ
qHfzspqTCuJ
ooxKqFINYJf
htlQSotNCqG
slwQaOTH
eMeiN
qMCVUPdi
mRLWBg
hShbxfOB
CxCAN
blXndBO
BwReNzhkxprv
JlSqOql
alIpI
XvUpLDEUEsoT
seVWYTkFhSyR
fmPlTaKYmTQl
ppzzkzCoTwO
XsWPDtvRD
iARI
PmPODDjQbv
qWFgDrdn
bkjjdEgRedNv
pKXqNEizZOHL
qaKjNLgChG
NGclU
CFOjnEZ
LSexbBAQRwj
NSCtX
ORgUs
wpLD
Jfuw
MEvDuWsTYeFA
lsiENiUTjVzn
TXHOviboeTtF
iMRRABWIqUn
sgKwOkP
vINK
XOBBztFUVEn
dUDhFBy
Snwv
搜索
查看: 101949|回复: 70

[教程] VoodooPS2Controller v1.8.15     [复制链接]
跳转到指定楼层
复制 

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

楼主
发表于 2014-2-26 07:41:31 IP属地美国 |显示全部楼层 |倒序浏览
快御云安全
本帖最后由 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 为亮度调节。希望大家多反馈自己的结果还有机型,我会更新到这里,有分儿哦~


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

查看全部评分

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

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

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

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

板凳
发表于 2014-2-26 23:20:57 IP属地美国 |显示全部楼层
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币
28167
贡献
0
技术
2147
活跃
1597

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

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

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

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

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

键盘设置可以修改

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

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

没遇到过,是Synaptics 触摸板吧?

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

7F
发表于 2014-2-28 13:41:08 IP属地美国 |显示全部楼层
龙心梦飞 发表于 2014-2-27 08:35
感谢楼主分享,我的已经搞定,搜索IGPU.DD02的方法是对的哦。我也是在这里找到亮度调节快捷键,其实这个快捷 ...

恭喜~!

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

8F
发表于 2014-2-28 13:41:35 IP属地美国 |显示全部楼层
87zrjojo 发表于 2014-2-27 22:18
我用了这个之后,控制键由Alt变成了win键,感觉不习惯,也不方便啊,能不能有办法直接将控制键改成Ctrl,也 ...

控制面板可以改

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

9F
发表于 2014-2-28 14:25:04 IP属地美国 来自手机 |显示全部楼层
龙心梦飞 发表于 2014-2-27 23:20
去掉acpibacklight驱动,出现亮度见到一半就调不动的情况,看来我的亮度档位表有问题,我晚上再改改试试。 ...

大概是因为硬件亮度表不是17个,所以大部分机器不能去掉acpibacklight 的

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

10F
发表于 2014-2-28 23:38:49 IP属地美国 |显示全部楼层
gukai330 发表于 2014-2-28 04:34
楼主求救~经测试我的dsdt中似乎加减亮度的全在q12中。现在的情况就是增减亮度小太阳的格子都是减少的。。 ...

很奇怪,你用了acpibacklight 了么?

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

11F
发表于 2014-3-1 14:04:48 IP属地美国 |显示全部楼层
qw3752258 发表于 2014-2-28 22:52
楼主实在太好了,U310终于有着落了

测试结果分享下吧~

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

12F
发表于 2014-3-1 14:18:52 IP属地美国 |显示全部楼层
qw3752258 发表于 2014-2-28 23:16
u310试过了,3点触控没了,没必要升级

应该不会的,我的U410 一切正常

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

13F
发表于 2014-3-1 19:32:23 IP属地美国 来自手机 |显示全部楼层
wakin20 发表于 2014-3-1 03:51
请教这个可以代替ApplePS2Controller.kext吗?

可以的

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

14F
发表于 2014-3-2 03:12:24 IP属地美国 |显示全部楼层
gukai330 发表于 2014-3-1 09:04
 尝试加入了acpi加入后用原映射的快捷键无法调节亮度,也就是scrlk和prtsc ,
q12的情况还是和原来 ...

打开VoodooPS2Controller.kext/Contents/Plugins/VoodooPS2Keyboard.kext 下的info.plist,修改LogScanCodes 为 true。然后重启,看看按默认亮度快捷键(FN+FX)的时候有没有生成scan code。

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

15F
发表于 2014-3-2 03:16:48 IP属地美国 |显示全部楼层
zhanglei138099 发表于 2014-2-28 01:10
班主能不能把你的dsdt发上来,让我参考一下

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

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

16F
发表于 2014-3-2 13:05:28 IP属地美国 来自手机 |显示全部楼层
qw3752258 发表于 2014-3-1 22:03
版主,还有个问题,你的HD4000现在直接调节小太阳有效吗(fn+Home/fn+PgUp)?我把DSDT加了HD4000的EFI-s ...

我的是有用的。你装了acpibacklight 了么?

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

17F
发表于 2014-3-2 13:09:08 IP属地美国 来自手机 |显示全部楼层
gukai330 发表于 2014-3-1 22:07
未加入补丁的情况下,fn+fx不生成 scan code。

加补丁试试,这个驱动要配合acpibacklight 最好

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

18F
发表于 2014-3-2 13:29:12 IP属地美国 |显示全部楼层
gukai330 发表于 2014-3-1 22:07
未加入补丁的情况下,fn+fx不生成 scan code。

额刚才你的帖子被删了么?

你的dsdt 的确很奇怪,我现在怀疑会不会和_Q12 下的两个if 条件有关系。你试试在两个if 下添加 \RMDT.P1 ("XXXXX") 之类的。看看不同按键时进入的是不是同一个if 语句。

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

19F
发表于 2014-3-2 14:06:03 IP属地美国 |显示全部楼层
gukai330 发表于 2014-3-1 22:33
不是。。我刚编辑了一下。。你跟我的想法一样,我试试,不过估计可能性不大,一个if是从属与另一个的,所 ...

ok 审核好了
你之前说的小太阳不动是亮度档位太少了。你可以去我另一个关于acpibacklight 的帖子修改你的dsdt

两个if 都没有进入?那这样,你把_Q12 和_Q11 全部清空,也就是用步骤4 给你的_Q11 和12 打补丁。注意备份你原来的DSDT

打酱油归来

Rank: 11Rank: 11Rank: 11

UID
984013
帖子
7884
PB币
28167
贡献
0
技术
2147
活跃
1597

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

20F
发表于 2014-3-2 14:08:27 IP属地美国 |显示全部楼层
qw3752258 发表于 2014-3-1 22:18
伸手的感觉真好,好了,刚刚作死了一下,用了你的dsdt,然后小太阳就有了。
显卡,CPU(i3-321 ...

u310/410 的确可以通用dsdt。
为啥要安装applebacklight?这个不是必要的,说不定还会引起冲突。一个acpibacklight 就足够。
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛