3GO模拟飞行网|3GO Cyber Air Force

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18806|回复: 87

飞行控制面板DIY的软件硬件研究与分析

[复制链接]
发表于 2010-5-12 01:56:36 | 显示全部楼层 |阅读模式
http://blog.sina.com.cn/kissmepro

基本都在我的博客上,实际上没有出成品,只是做了相关的“研究与分析”。
刚接触这个领域(仅指DIY的软件和硬件,不包括外壳外观,没机床,SORRY)不久,
这方面还是个菜鸟,刚刚弄出点眉目,心里很高兴,
所以语言难免有猖狂骄傲等不当之处,纯属菜鸟的自恋情绪发作,望各位大虾谅解。

好了,我开始帖了。

评分

1

查看全部评分

 楼主| 发表于 2010-5-12 01:57:30 | 显示全部楼层
终于基本(是基本...)搞定了,虽然有些问题很奇怪,但核心问题已经基本清除了。好,那现在我来谈谈锁定Lock On控制面板DIY的软件硬件研究与分析。
    此文,仅仅是对控制面板DIY的研究,给大家搞下科普知识,使大家对这个玩意不再觉得神秘,并不代表作者打算或已经做出了成品,其实作者仅仅是在研究的过程中享受成功的喜悦罢了。涉及领域仅于电子硬件和软件设计方面。与控制面板的外壳,外观毫无关系。
    OK,接下来几天我将给大家讲下如何一步步认识控制面板是如何设计和工作的。
    先看下控制面板的基本要素:
4db86818h863dcbb566d8&690.jpeg

    1.输入,游戏能感应到的设备输入。
    2.输出,能感应到游戏数据的输出。
    3.接口,方便的设备与PC的接口,当然USB是首选。

明白这些后,我们来了解一下其它同类设备是怎么工作的。我有赛钛客X52摇杆,所以可以给大家做下分析。X52在安装完驱动后,在设备管理器中可以找到:

4db86818h863df0b7081c&690.jpeg
告诉大家,Saitek Magic Bus这个项会永远存在,即使你没有插入摇杆。你会奇怪,明明没有这个设备,为什么会有显示呢?说实话,我也搞不清,个人认为比较合理的解释是:它用了虚拟设备。实现设备是另一个(只有插上才显示),而实际设备工作时,会适时调用虚拟设备。那这些虚拟设备有哪种类型呢?除第一个外,其余三个可以在下面的子项中找到。
1.Root Enumerator.(不懂...难道是摇杆?)
2.HotKeyDevice.在人体学输入设备中找到。是一个“符合HID标准的用户控制设备”。从字面上理解是个热键功能设备。
3.Keyboard.键盘,没啥可多说的。
4.Mouse.鼠标,就是左手杆上的鼠标控制钮。
OK,看到这些后,就允许我来分析一下这几个设备分别的功能和作用。我有一句仅限本人用,且尚未成名言的名言:如果你想一件事想得有多复杂,你就必须用多复杂的方法去实现它。
既然这样,那么我们就把事情想简单一点。这些所谓的控制面板及相关外设,其实就是一个键盘,一个USB键盘,一个可以自定义按键功能的USB键盘,或许还是个可以自定义按键功能的,键鼠合一的USB套件。完了。就这么简单。那么我们可以解释这这个几设备的功能了。第1个,仍然不懂...,第二个,是用来自定义键盘的,所以叫HotKeyDevice,第三第四个就是键鼠合一。
OK,现在了解我们要做什么了吧,我们把需求再自己砍砍,最后,我们要做的可能只是一个USB键盘而已。那么这个事就简单了,去外面买个最便宜的USB键盘(本人在淘宝上搜索过,最便宜的也就30块钱左右,几乎可以和运费接近了...)。拆了,引出线,然后自己DIY个控制面板外壳(如上图),连上线。完事。
好吧,你也许会骂我是个骗子,不过我告诉你,如果你继续往下看,并且看完,那么当你再回过头来看时,你会发现,这确实是最省钱最有用的方案。
下面将由你来决定,是否趟入这个未知的炼狱之门...

[ 本帖最后由 bargain685LN 于 2010-5-12 16:39 编辑 ]
 楼主| 发表于 2010-5-12 01:58:57 | 显示全部楼层
好吧,既然你不愿意买个30块钱的键盘,那么你有第二个选项,选MJ16摇杆控制芯片。下面这张图是本人认为看过的中拍的最好看的了,在淘宝上的图片拍得都一般般。此图是从3GO一位模飞硬件DIY飞友那复制下来的(如有侵权一说望及时告知)。这个板子(指电路板)可在淘宝上搜到,具体使用可以咨询商家或3GO论坛里用过的人(对不起,我没用过),价格大于等于100。虽然体积比键盘小点,但比键盘贵了50块以上,怎么样,我说的没错吧。


4db86818h863eb7e8aa9b&690.jpeg

如果你觉得钱多没处花,这样还是不满足,那么你可以继续往下走,欢迎趟入地狱之门。
很负责任地告诉你,这钱花的可就不是一两百了。

[ 本帖最后由 bargain685LN 于 2010-5-12 16:40 编辑 ]
 楼主| 发表于 2010-5-12 01:59:33 | 显示全部楼层
如果你觉得上面的还是不能满足你的要求,那准备让我带你来接触单片机领域吧,先作个简单的自我介绍,我是个软件开发程序员,是的,软件,不是硬件,所以就单片机,我是个初学者,但至少可以给你一些有益的建议。
    单片机领域,USB是一个比较难的领域,但不必担心,每个领域都有一些专家,对于初学者来说,圈圈就是USB的专家,《圈圈教你玩USB》是一本介绍USB相关内容的书,30块钱左右,当然这不是必须的。我之所以引出这本书只是因为这本书设计了一个板子---USB学习板。这个板子有两个版本,板子全是红色的配套元件40RMB,注意,是没有底板,只有元件,除非你通过买书或其它手段得到底板,并自己焊接,显然这个方案很烂,但焊好的成品也是有卖的,100RMB左右,(我好像有见过80RMB的)。
    那么这个板子做什么用呢?很简单,它可以做一个USB键盘,光这个就能满足我们要求了...,当然,需要编程下载。下面我简单介绍一下这个板子的基本部件:
1.USB模块,此模块位于左上,由USB接口,6M晶振(可以看到6.000的那个铁帽),位于6M晶振下面的PDIUSBD12芯片,及外围元件。
2.下载及调试输出模块,此模块位于右上,由RS232的9线串口,位于串口下面的MAX202(或MAX232)芯片,及外围元件。
3.单片机MCU模块,中间最大那个,属中央处理器,我们写的程序就下载到这里面并执行的,右边是8个按键,应该够用了吧。
4.其它一个模块,我们用不上的模块,不介绍。
4db86818h8641a65d87c5&690.jpeg
    于是这事就没完了,你还需要使用串口来下载程序,如果你的是台式机,有RS232的串口(9口),那省心多了。如果你的是笔记本,并且没有转串口的接线,那么你需要一条USB转串口线,经历过单片机编程痛苦的我,强烈建议你不要买那种15到20块钱左右的转换线,很烂,本人就有一条。你一定要买一条Z-TEK的线,因为它的下载成功率很高,我买的是支持USB2的,>=50RMB。有人问,便宜些,下载成功率低会怎么样?......我开始也抱有这种想法,不过当你几次下载都不成功,最后狂按开关,导致6块钱一个的主芯片烧掉的时候,你就知道什么感觉了...

4db86818h8641ed170cfb&690.jpeg

    OK,这样一来,我们需要一个USB开发版成品100RMB+一条力特转USB串口线牌子货50RMB。除此之外,你还需要找到圈圈的USB键盘程序,网上找得到。还需要有一定的编程知识。去修改其中的参数。如何修改我后面会继续讲。光是这些,你觉得值吗?(当然,如果你恰好是学单片机的研究生,能省下不少材料费)
    如果你还不满足,请继续跟我走。

[ 本帖最后由 bargain685LN 于 2010-5-12 16:42 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2010-5-12 02:00:43 | 显示全部楼层
好吧,那让我们再想一想,我们需要的是什么。1,一个USB键盘,2,我希望我能控制这个键盘,比如自定义按键,比如显示数据,等等。恩,就是这样。因为我们需要这些,所以上面的选择并不能满足我们的要求。
    但是要做到这些并不容易,你需要做的第一件事是:读书。是的,不过既然我在此,还是让我来告诉你一些你必须知道但却很可能需要翻几天书才会知道的事吧。
1.我们要做的东东在《圈圈教你玩USB》上可以找到,包括下面几条,当然部分知识还得从我这得知。
2.键盘鼠标是属系统设备,它只能读,不能写,即你可以从键盘中得到指令,但不能给键盘发指令。
3.“符合HID标准的用户控制设备”可以做到即读又写。(大家明白第一章中HotKeyDevice的存在必要性了吧)
4.有两种方法可以实现键鼠合一,当然,也可以考虑键+其它合一。
    恩,就这些,因为这些实例在《圈圈教你玩USB》上都可以找到,所以我也不想从头学USB协议了,直接拿来用。可惜,这些实例程序基本都是要下载到单片机上运行的,怎么办?只好先学习一下,怎么组装单片机了...

    这一章我们来认识单片机,前面说过,你把事情想得有多复杂,你的学习就会有多复杂。所以我们只好把单片机来简单化。由于我想用书中的现有代码,所以我必须使用书中的现有电路。
    和软件一样,单片机由模块构成,模块由芯片和外围电路组成,外围电路就是那件在芯片周围,为芯片服务的小散件,什么电容电阻晶振之类的,外围电路是保证芯片正常工作的前提。初学者会担心,不知外围电路应该才能样才是正确的,其实很简单,有些外围电路可以在芯片的说明资料里找到,有些可以在网上找到,通常是比较固定的样子。你别问我为什么要用这个阻值的电阻,为什么要用这个容值的电容,为什么要用这个频率的晶振,我也不知道。有关USB学习板的模块前面也简单介绍过了,这里再认识一下:

1.MCU模块,这个模块的外围电路的最简方式是:接正,接负,接复位,接晶振,这样就可以工作了。芯片我们选择8051的STC89C52。MCU是程序中心,所有人为的指令都在这存储和运行。

4db86818h864f2322dcbd&690.jpeg

2.串口模块,作用是:连接电脑与单片机的通讯模块和负责下载程序到STC系列的芯片中。芯片通常选MAX232或MAX202,我用MAX202E。外围电路也很固定。这个模块可用于下载和调试,但对单片机系统的正常工作不是必须的,如果你有一个已经下载好并经过测试的芯片,这个模块你就可以丢掉了。

4db86818h864f23e5381a&690.jpeg

3.USB模块,作用是连接电脑USB,并负责USB协议的工作。USB模块可以比作网卡,MCU模块就如同系统,没有网卡,你不了网,有网卡,但没有系统,也一样什么都做不了。

4db86818h864f24e11913&690.jpeg

4.IO模块,I就是Input输入,O就是Output输入。输入就相当于我们的键盘鼠标控制面板,输出就相当于我们的显示器和指示灯。没有这个模块,你光买个主板(带CPU)回来,能做什么?

[ 本帖最后由 bargain685LN 于 2010-5-12 16:44 编辑 ]
 楼主| 发表于 2010-5-12 02:02:57 | 显示全部楼层
前一章中,我们之所以没有给出IO模块,是因为IO模块比较灵活,它更多是由我们来决定的。理论上,由上述模块,基本上可以实现一个USB键盘或鼠标或键鼠标合一的功能了。但这里我不得不中断一下,去思考另一个问题。即游戏数据的导出与通信问题。确切地讲,是如何讲游戏数据导出,并最终传到单片机上。
    说到这里,就要讲一个学习方法了,其实我原来也不知道,但我在查看赛钛客的产品论坛时发现了一个突破口,即飞行仪表的使用,需要修改Lock On的Config下的export子目录相关文件,这个文件,就是Lock On的数据导出接口。这里,我软件的功底就显示出来了。呵呵。
    分析export.lua可以得知,Lock On实际上将相关数据通过TCP向某个端口(可以自己改)发送数据,完了。恩,就这么简单。至于你想怎么拿这些数据做什么,那是你的事了,与游戏无关。于是我们找到了收取数据的途径。下一步就是找到把数据发到单片机上的途径了。
    不过这一点似乎不难,在《圈圈教你玩USB》中,就有一个例程,演示了PC的程序与HID自定义用户控制设备(单片机啦)通讯。基本上这个问题也是可以解决的。
    所以,我们只要做一个程序来搭个桥梁,既可以收到游戏的数据,又可以发送数据给单片机。这事就玩完了,看,事情其实并没有那么复杂。
4db86818h864fb5293b32&690.jpeg
    这方面我不必再买书了,读我就够了。来解析一下上图的文件功能。
1.ClientSocket和ServerSocket是与LockOn通讯的功能类,职能是ServerSocket建立监听,ClientSocket接收数据。
2.USBDevice是从圈圈的代码中提取的与单片机进行USB通讯功能模块,封装成类。
3.LuaFactor是Lua上层封装类,这样一来,以上两者通过lua脚本语言进行处理再发送,可以通过修改脚本来达到修改逻辑的目的。
4.其它要不是MFC自动生成的,就是和Lua链接库相关的文件,大家不必太关心是做什么用的。
这样一来,这个事就完成了。

    解决上面的问题后,我们需要来解决一个USB单片机的问题,就是我们倒底是做什么东东。USB键盘,恩,这是需要的,但我们没法给USB键盘发送指令。HID自定义用户控制设备,倒是可以接收我们的指令,不过做不了键盘呀,难道用两个USB口?说到底,我们想把东东做得更好些,还是需要寻找新的解决方案。
    这就是USB多设备整合方案。圈圈的书中有提到,有两种方法:1.单接口双报告,2.双接口。你可能看不懂,没关系,直接听我说就行了。经过测试,键盘和HID自定义整合的可行方案是双接口。我们照着改代码就行了。此外可以把键盘接口用第一种方案改成键鼠合一。这样就基本成了键鼠+HID自定义的USB设备。基本构成如下:
1.接口一:HID自定义设备。
2.接口二:键鼠合一的双报告设备。
    有人会问,为什么不放在一块呢?我测试过了,有问题,如果将HID和键盘放在同个接口,系统会认为是系统设备,前面说过了,这种设备是不能写入的。所以我们的HID自定义设备是不能和系统设备放一起的。
    经过这些研究分析后,思路基本明晰了。那么我们继续往下走,给大家说下实际的DIY了。不得不提的是,我不是牛人,不可能凭空做梦就能想出上面的解决方案,这些都是在DIY过程中测试得到的结论。但解说时,我先把解决方案给解析出来,让大家有一个明确的方向。然后我们再开始接触实际性的东东。



[ 本帖最后由 bargain685LN 于 2010-5-12 21:30 编辑 ]
发表于 2010-5-12 08:04:26 | 显示全部楼层
先顶,再慢慢研究下
发表于 2010-5-12 08:08:48 | 显示全部楼层
收藏之
发表于 2010-5-12 08:55:10 | 显示全部楼层
留个记号先。
发表于 2010-5-12 09:01:50 | 显示全部楼层
  很好的帖子   学习了
发表于 2010-5-12 10:54:53 | 显示全部楼层
LZ还是把 链接的东西弄到论坛里吧  别外链啥时候挂了 想找都找不到了 谢谢啦
发表于 2010-5-12 10:59:54 | 显示全部楼层
楼主你的学习进度好快啊
发表于 2010-5-12 11:20:16 | 显示全部楼层
发表于 2010-5-12 12:08:45 | 显示全部楼层
先留记号
 楼主| 发表于 2010-5-12 14:38:10 | 显示全部楼层
不是不想上传图片,而是老告诉我不支持的格式。唉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|3GO模拟飞行网|3GO Cyber Air Force ( 沪ICP备08002287号|沪ICP备14050587号 )

GMT+8, 2024-11-16 14:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表