⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000028.htm

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -