文章编号:1579 .3081

『关闭窗口』

电子白菜倾情奉献:DX板USB接口全功略(3)(电子白菜)


这一章本来想和大家分析分析API部分的,但我拿起那段API,看的我实在脑抽筋,虽然我
算看的懂,但不知道如何表达出来。还是上传这个设备部分的代码device.c和对应的头文
件吧:
device.rar


这段代码完完全全地,不是我写的!!:)我想除非你会自己开发驱动程序,否则这
里的很多很多IO请求的定义你是完全看不懂的。既然我们只能用非非的驱动,那么我们就
只能用这段代码来打开设备了。
虽然说底层的比较难懂,但这里的一堆API还是比较好明白的。做过API串口的兄弟们
应该有所领悟,最终只要能用CreateFile打开设备的话,基本后面的事情就可以ReadFile
和WriteFile搞定。
不过这里CreateFile可不是那么爽,因为非非并没有给出他的USB设备的名字,整个程
序是利用设备的GUID来一层层打开,最后获取设备名,在CreateFile的,最头痛的还是这
个设备的设备名和设备IO名是不同的,结果还得开两个!!就是文件中的open_dev()和
open_file() 了,真是说多头痛,大家看周X的书178页以后的部分吧.
是了,还要多口说句,因为最后都是用CreatFile打开这个设备,也就是说其实这个设备
名是实实在在存在的,它跟驱动有点关系,98下和2000下的这两个设备名是不同的,上面的那
段程序最后所求的还是一个设备名(字符串)而已,你可以把这个设备名记下来,然后用的时
候就直接CreateFile算了,就不用这么麻烦一重重开设备:)

好了,废话少说,再来个PC机的EXE文件先:
dx_usb.rar


在USB没有连接的时候,界面上大部分东西都是不可用的。这里的没有连接,指的是软
件连接,因为D12有SOFECONNECT功能,能够实现软件连接USB的,在DX板上,先按9进入USB
界面后,按1就是连接了。详细请看前一章的固件部分,我已经在USB.C中设置好界面的
了。如果是第一次连接上,电脑会说找到新硬件的,要求装驱动,那么你装上就是了,如
没有意外,装上后软件应该能探测到有设备的,然后就会变成如下:






注意,图中一些线是我后期画上去的:)
这个时候,如果你的DX板喇叭连上了,就会很嘈的了。为什么?因为这个USB程序的中
断传输是用于采集当前环境亮度的。采集的AD部分和喇叭部分有共用,所以就会响了。如
果嫌嘈就把喇叭拔了吧。

大概说说软件的各部分吧,其实这东西写的很随意,代码不算优秀,不过还算有点严
谨罢了。比起网上飞来飞去万人皆知的非非DEMO软件,还算是有点原创性吧。
左上角当然写自己的名字搞搞名声咯,其实标题是以1秒的间隔在“作者:电子白菜”
和“USB实验程序”之间切换的。别以为我无聊开个定时器资源来混。其实这个定时器是用
来扫描设备是否已经连上的。我扫描的依据就是控制传输中的厂商请求的一个请求值,叫
获取版本号。只要软件能够成功获取一个非0xff的版本号,就当设备已经连上了。至于这
个版本号,上一篇文章已经说了,他是在我上传的固件代码中的protodma.c中的
get_firmware_version()的I值,你喜欢改为什么就什么,只要不改为0xff就可以了。
还是软件的图,向下看一下,有个什么控制传输栏框了个“读取版本号”的按键,其
实也就是刚才说的获取版本号咯。大家可以尝试在51程序上改了版本号后,再读取一次,
看看是不是你改的值:)
再往下看就是中断传输部分了,有8个键,其实是对应DX板上LCD的8个‘0’,按下了
其中一个,LCD上对应的0就变1。
然后看到的是‘当前光度和键值’光度用进度条表示,其值是0-255的,运行中用手档
着DX板的光敏电阻,进度条就会缩短。旁边还有个‘1’,其实就是DX板上边的键盘值来
的,要注意的是,在USB运行的时候,DX板上的键盘最底一行是不可用的,也就是*,0,#,EN
四个不能用,至于原因,下一章再说。总之运行中你按的键值都会传输到PC上并显示出
来,如果你按了DX板的c键,就不显示了,因为C键是退出USB连接。
再向下看咯,就是批量传输了,这里有个输入框,可以写16个字节,即8个汉字,也可
以混合输入的。你在这里敲的字符都会马上在DX的LCD上重显的。支持退格的,任你乱写乱
敲,反映速度绝对没问题!!



好了,看看右面部分了,噔噔噔。。就是读FLASH部分啦,这里用的还是USB的批量传
输,这个读FLASH就是读取DX板上的那个39040的,在地址栏写上你要读取的地址的开始
(from)和终止(to)地址,然后按读取,那么它就可以通过USB把FLASH的数据读出来了。这
里有一些附加功能,就是
1。读的过程中可以终止——按终止按键。
2。超时设置,输入的是秒数来的,如果你输入1,那么连续1秒都没有数据读出来,他就超
时了。你想调试这个超时很简单,只要设置好超时值,然后用仿真器在读FLASH的地方放个
断点~~~~呵呵;注意,如果超时值设定为0的话,那就是没有超时限制了。
3。十六进制输入,没打钩钩的时候地址值是十进制输入的,打了钩钩后就是十六进制了,
十六进制中输入值大小写通吃的。不过就不要0x字头。例如你写个0xff,那就说你错了,直
接写ff就是了。
4。输入地址值的保护,主要是防止你乱敲字符上去的。


其他的也就没什么了,还有个‘关闭设备’的按键,可以实现PC上关闭USB连接的。
如果大家调试通过了的话,基本就可以玩玩这个软件了,如果还没调通,没关系,可
以在论坛上发帖子问问,我会尽能力解答。
之后有机会的话,我还要改改程序,让它适应新DX板的MOTO屏的。改好后的程序再会
公布一次。
PC端的程序暂时卖个关子,不公布,主要是考虑到如果什么都公布清光,那就没人愿意买
DX板了,那丁丁就要揍我一顿咯:)其实代码还没好好规划,到时处理好后就会提供给已经购
买DX板的朋友们了.
这里还是要说一些题外话,就是有些朋友认为我是在帮丁丁卖广告,这个我不否认.但我
可没收过老丁的酬劳的,除了一个仿真器和DX板咯,呵呵:)我想如果单纯做无偿广告,我不会
这么辛苦写这么多字还公布代码,虽然说最底层代码是来自非非的,但事实上我自己也付出
了不少努力.我不是为帮卖广告而写程序的,用D12真正做点东西脱离非非那个框架是我一直
期望的.而看到老丁花了7千元买了个服务器为大家服务,我想他没收过虾坛朋友的一毛钱
吧.大家看看论坛左下部分的帖子页数吧.还一直逗留在600多页,别以为所有帖子旧了就进
数据库,因为太多人不负责任地天天灌水,要把帖子整理好并不是件轻松事情.我是其中一个
有权力整理帖子的人,但我做了一下,实在是疲劳轰炸,整理10页内容就已经让人头痛.而每
天的帖子还是以20页的速度在上升的,一星期不整理,就已经上升百页以上.唉,一时气愤,不
说了.
总之我希望论坛所有朋友都要有点责任心吧,在这个大家庭,大家就有力出力,无力有心
也行了.我只是尽我一个小版主的责任.能帮助大家学点东西,又能帮老丁赚点钱,没有什么
不好的,是吗?



(文章推荐人:午夜听风)

 

返回大虾论坛 返回首页