📄 00000028.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: Keyboy (峰清扬), 信区: Linux <BR>标 题: 2.2.x核心中PS改制手柄驱动的BUG <BR>发信站: BBS 水木清华站 (Fri Sep 29 14:41:13 2000) <BR> <BR> <BR>偶觉得PS改到并口的手柄是偶能找到的最价廉物美的外设,十来块一个,用坏 <BR>掉也不心痛//grin <BR> <BR>这两天在准备给PS改制手柄写win2000的WDM驱动(DirectPadPro不支持NT),到 <BR>处找资料,发现原来2.2.16的核心里已经有了类似ddpro的各类改制手柄驱动。 <BR>以前版本的核心有没有不清楚。 <BR> <BR>这两天研究了一下PS手柄的接口资料,发现内核中驱动PS手柄的部分有点问题。 <BR>先抄一段PS手柄接口的时序图: <BR> ____ <BR> SEL- |_________________________________________________ <BR> ______ _ _ _ _ _ _ _ _________________ <BR> CLK |_| |_| |_| |_| |_| |_| |_| |_| <BR> __________ <BR> CMD |___________________________________________ <BR> <BR> DAT -----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <BR> <BR> ACK- ----------------------------------------------|___|--- <BR>(资料来源:<A HREF="mailto:HFB03536@nifty-serve.or.jp)">HFB03536@nifty-serve.or.jp)</A> <BR> <BR>简单的说,读/写手柄的时候,需要通过并口发送低电平有效的SEL-信号,并交替 <BR>发送时钟脉冲的下降和上升信号,并在此时串行发送命令和读取响应,每一个字节 <BR>读完,需要等待由手柄发过来的ACK-信号,以确认发送成功。 <BR> <BR>2.2.16核心里做这些工作的代码是:(drivers/char/joy-console.c) <BR> <BR>static int js_psx_command(struct js_console_info *info, int b) <BR>{ <BR> int i, cmd, ret=0; <BR> <BR> cmd = (b&1)?JS_PSX_COMMAND:0; <BR> for (i=0; i<8; i++) { <BR> /* 降下CLK,并发送一位命令数据 */ <BR> JS_PAR_DATA_OUT(cmd | JS_PSX_POWER, info->port); <BR> /* 延迟数微秒, 形成CLK低电平 */ <BR> udelay(JS_PSX_DELAY); <BR> /* 读一位数据 */ <BR> ret |= ((JS_PAR_STATUS(info->port) ^ JS_PAR_STATUS_INVERT ) & <BR>info->psx) ? (1<<i) : 0; <BR> cmd = (b&1)?JS_PSX_COMMAND:0; <BR> /* 升起CLK */ <BR> JS_PAR_DATA_OUT(cmd | JS_PSX_CLOCK | JS_PSX_POWER, info->port); <BR> /* 延迟数微秒, 形成一个完整的时钟 */ <BR> udelay(JS_PSX_DELAY); <BR> b >>= 1; <BR> } <BR> return ret; <BR>} <BR> <BR>这里漏掉了一点,就是等待手柄送回的ACK-,而ACK-最长可能会延迟达100微秒之久, <BR>在这种情况下,很有可能得到错误的结果。事实上,内核文档中的 <BR>joystick-parport.txt里提到PS手柄的支持,说: <BR> <BR>2.3 Sony Playstation <BR>~~~~~~~~~~~~~~~~~~~~ <BR> <BR> WARNING: PSX support is experimental, and at the moment doesn't seem to <BR>work for most people. If you like adventure, you can try yourself. <BR>对比DirectPadPro在Win9x下很稳定的工作,也许和ACK-的关系很大吧.... <BR> <BR>-- <BR> <BR>We were moving mountains long before we know we could. <BR> <BR> <BR>※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.115.16.15] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -