PCps4手柄 pc通过什么通信

IT168产品报价中心
游戏机产品类别
您当前的位置:
类型:接口:连接:电商活动:
选择结果:
找到相关产品151款
对比 设备类型:PC游戏手柄接口类型:USB功能键数:十字方向键和1-4...硬件要求:PC机操作系统:Windows XP,Win...具体特性:人体工程学设计连接方式:无线&& (12)(0)对比 设备类型:电脑游戏手柄应用范围:适用平台:PC/PS...具体特性:完美识别360、智...连接方式:无线&& (11)(1)对比 设备类型:电脑游戏手柄接口类型:USB功能键数:二轴十按钮,八...硬件要求:IBM及其兼容机操作系统:Windows 9X/ME/2...具体特性:独立连发连接方式:有线&& (14)(2)对比 设备类型:Xbox360游戏手柄应用范围:全身游戏具体特性:这款Xbox 360手...应用技术:定制处理器和微...连接方式:无线&& (4)(1)对比 设备类型:电脑游戏手柄接口类型:USB1.1/2.0功能键数:4轴12按键硬件要求:IBM及其兼容机操作系统:Win98/2000/XP/2...具体特性:macro自定义键设...连接方式:有线&& (17)(3)对比 设备类型:PS3 游戏机手柄接口类型:USB(PS3)功能键数:4个功能按键,1个...硬件要求:索尼PS3 主机应用范围:所有类型游戏具体特性:采用2.4GHz无线...应用技术:震动技术;带有六...&& (1)(0)对比 设备类型:游戏手柄接口类型:USB1.1/2.0/3.0功能键数:D模式: 方向键...操作系统:安卓4.0以上、Wi...具体特性:1、BFM引擎(安...连接方式:无线&& (7)(0)对比 设备类型:电脑游戏手柄接口类型:USB1.1/2.0功能键数:方向键+8个常用...硬件要求:32位/64位/双核操作系统:Win98/2000/XP/2...具体特性:三档连发速度设...连接方式:有线&& (10)(0)对比 设备类型:PC游戏手柄接口类型:USB功能键数:十字方向键和1-4...硬件要求:PC机操作系统:Windows XP,Win...具体特性:人体工程学设计连接方式:有线&& (10)(0)对比 设备类型:PC游戏手柄接口类型:USB功能键数:十字方向键和1-4...硬件要求:PC机操作系统:Windows XP,Win...具体特性:人体工程学设计连接方式:有线&& (21)(1)对比 设备类型:Xbox360游戏手柄应用范围:全身游戏Kinect...具体特性:Natal项目是一个...应用技术:定制处理器和微...&& (52)(0)对比 设备类型:电脑游戏手柄接口类型:USB1.1/2.0功能键数:方向键+8个常用...硬件要求:32位/64位/双核操作系统:Win98/2000/XP/2...力回馈:支持具体特性:模拟双振动: 手...&& (23)(1)对比 设备类型:电脑游戏手柄操作系统:支持XP系统,VIS...具体特性:经典360外形架构...连接方式:有线&& (5)(1)对比 设备类型:游戏手柄接口类型:USB1.1或2.0功能键数:4轴12按键硬件要求:32位或64位处理...操作系统:Windows 98/2000...应用范围:PC及兼容机具体特性:使用温度范围:1...&& (12)(0)对比 设备类型:电脑游戏手柄功能键数:10具体特性:采用360构架;非...连接方式:有线&& (10)(2)对比 设备类型:电脑游戏手柄接口类型:USB1.1/2.0操作系统:Win98/2000/XP/2...应用范围:PC、PS3具体特性:1、无线2.4G技术...&& (17)(1)对比 设备类型:游戏手柄接口类型:USB操作系统:Win98/2000/XP/2...应用范围:XBOX360主机,PC...具体特性:XB360手柄功能与...连接方式:有线&& (16)(1)对比 设备类型:电脑游戏手柄接口类型:USB功能键数:2轴10按键操作系统:Windows98/ME/20...具体特性:具备按键连发功...连接方式:有线&& (6)(0)对比 设备类型:PS3 游戏机手柄接口类型:USB(PS3)功能键数:4个功能按键,1个...硬件要求:索尼PS3 主机应用范围:所有类型游戏具体特性:采用2.4GHz无线...应用技术:六轴感应系统&& (1)(0)对比 设备类型:电脑游戏手柄接口类型:USB功能键数:2轴10按键操作系统:兼容苹果机及其...具体特性:按键连发功能及...连接方式:有线&& (25)(3)对比 设备类型:Xbox360游戏手柄应用范围:全身游戏Kinect...具体特性:Natal项目是一个...应用技术:定制处理器和微...连&& (1)(0)对比 设备类型:电脑游戏手柄接口类型:USB功能键数:12个功能键操作系统:Windows 98/2000...力回馈:双振动力回馈引擎具体特性:带有双模拟摇杆;...应用技术:双马达设计&& (1)(1)对比 设备类型:双振动无线游戏...接口类型:采用2.4GHz 无线...功能键数:15个硬件要求:USB接口的PC操作系统:Windows XP\Vist...应用范围:PC具体特性:模拟真实的游戏...&& (22)(9)对比 设备类型:电脑游戏手柄接口类型:USB功能键数:数字模式:2轴10...操作系统:Windows98/ME/20...具体特性:搭配专用可编程...连接方式:有线&& (1)(1)对比 设备类型:游戏手柄接口类型:采用2.4GHz 无线...功能键数:12个硬件要求:CPU 32 bit以上...操作系统:win2000/XP/2003...具体特性:适合电脑配置:C...连接方式:无线&& (11)(0)
第1页 共7页 共151款
手柄品牌排行
手柄热门排行
手柄最新排行
说说我使用的感受
打开搜索页面速度慢 搜索不到自己想要的东西 想看到更多的产品相关信息 经常出现异常 其他将您对搜索的建议或者想法告诉我们吧,我们将随时倾听你的感受:)0/1000
泡泡网相关链接:PC机与单片机&DSP数据通信技术选编3(李朝青)【电子书籍下载 epub txt pdf doc 】
当前位置 &
PC机与单片机&DSP数据通信技术选编3
作者:李朝青
出版:北京航天航空大学出版社
PC机与单片机&DSP数据通信技术选编3本书是从年国内几十种期刊和2002年几个学术会议的论文中精选出187篇编辑而成的。其内容包括:PC机与单片机、PC机与DSP、分布式及网络、远程监控及自动抄表、DTMP及Modem芯片、电力线载波、光纤、CAN总线等通信技术以及USB&1394接口和纠错技术。这些论文均属对新器件、新技术的论述。其技术透明度较好。   该选编可供从事数据通信及单片机&DSP开发的科技人员和大、中专学生学习和参考。第1章 PC机与单片机数据通信技术1.1 以PC机为基础的信令监测器的设计21.2 利用PC并行口实现数据的快速获取和控制101.3 基于RS485总线的产品质量检测控制系统121.4 智能时栅位移传感器的通信接口电路设计171.5 RS485总线通信避障及其多主发送的研究211.6 一种基于CPLD ISA接口通信协议的实现261.7 用CPLD实现单片机与ISA总线并行通信311.8 PCI总线及其在某型导弹自动测试系统中的应用361.9 基于Windows Sockets的通信应用程序开发401.10 一种嵌入式实时智能通信模块的设计与实现431.11 利用PC机RS232串行通信口构成I2C总线接口491.12 单片机单总线技术551.13 80C196单片机与PC机的通信及绘图621.14 利用EPP并行接口协议实现高速数据通信661.15 LM92在远程温度监测系统中的应用731.16 一种脱机的因特网语音通信方式及其实现791.17 基于CAN总线的车辆单车试风微机控制系统831.18 基于CAN总线的分布式六维测力平台网络系统861.19 用于天文观测的CCD相机系统研究891.20 PSD813F2在FPGA配置中的应用951.21 80C196MC的外设事务服务器及其应用1001.22 在VC++中用ActiveX控件实现与单片机的串行通信1051.23 基于89C51单片机的数显游标卡尺智能测量系统1101.24 基于MCS单片机与PC机串行通信的电平转换1141.25 基于RS485总线的PC与多单片机间的串行通信1181.26 基于PXI总线的转子实验台远程监测系统设计1251.27 RS485串行通信编程需考虑的问题1291.28 基于Windows CE平台的串口通信编程1331.29 指纹门禁系统的设计与实现1371.30 电话传输心电信号的数字脉宽调制法1421.31 智能土壤渗吸速度测试仪的研制1461.32 数据采集与传输系统(2001年全国大学生电子设计竞赛一等奖)1521.33 单片机与PC手柄的通信1631.34 基于RS485总线的土工布渗透率测控系统1671.35 基于USB总线和89C51单片机的数据采集系统设计1731.36 一种简单的通用串行通信控制器1791.37 高性能单片机ADμC824及其在智能传感器中的应用1821.38 基于CN8980芯片组的HDSL2设备设计1871.39 一种通用的RS232/RS485转换器1961.40 PC机与单片机串行通信的Windows编程1991.41 矩阵键盘产生PC机键盘信号的应用设计2041.42 单片机系统与标准PC键盘的接口模块设计206第2章 PC机与DSP数据通信技术2.1 基于LabVIEW中DSP目标文件加载的实现2142.2 内嵌CAN控制器的TMS320LF2407的CAN通信实例2182.3 多路音频模拟接口芯片TLV320AIC10与DSP串行通信的设计与实现2222.4 基于TMS320C6211 DSP的多通道通信系统接口设计2282.5 基于DSP的指纹识别平台设计2332.6 基于DSP网络中的TCP/IP协议研究2372.7 基于CAN总线的多BLDCM监测控制系统2402.8 基于DSP的无刷直流电机无位置传感器控制2432.9 ADMC401与PC机串口的高速异步数据通信2462.10 基于新一代DSP的异步串行通信总线调试技术的开发2502.11 PC与TMS320C5402 DSP实现串行通信2562.12 变压器的故障分析系统2622.13 利用计算机并行口调试FPGA硬件系统2652.14 基于DSP的CAN总线智能系统设计2692.15 基于DSP和FPGA的嵌入式以太局域网设计2742.16 基于DSP的低频时码信号采集系统2802.17 基于DSP的多级通信系统的设计与实现2852.18 TMS320C80与PC机数据通信的实现2902.19 基于DSP的航向与姿态信息系统设计与实现2952.20 基于PCI总线的DSP高速图像处理平台2992.21 基于PCI总线的多DSP高速数据采集卡的研制3032.22 TMS320C54xx DSP的USB接口实现3082.23 利用Modem实现DSP与PC机的远程通信3132.24 基于TMS320VC5402的指纹识别系统3192.25 TMS320C32与PC机串行通信的软件实现方法3242.26 一种通过SPI接口协议实现DSP与其他设备通信的方法3282.27 TMS320LF2407A与PC多机串行通信的一种典型方法3322.28 基于McBSP的DSP多机通信实现方案3372.29 基于ITUT G.729a标准的数字电话仿真系统3422.30 利用VB 6.0实现PC机与DSP之间的串行数据通信3492.31 基于DSP的视频检测和远程控制系统设计3542.32 DSP/BIOS环境下的数据通信3592.33 基于DSP的串行通信在变频调速系统中的应用3632.34 DSP多通道缓冲串行口SPI方式的应用369第3章 分布式及网络通信系统3.1 一种E1与V.35信号转换的实现方法3743.2 W77E58在多级分布式系统中的应用3773.3 便携数据库管理系统的网络连接与安全3813.4 由Rabbit2000微处理器构成的网络消防报警系统3863.5 TM1300 DSP系统以太网接口的设计3893.6 基于DSP的网络通信程序设计3943.7 单总线协议转换器在分布式测控系统中的应用3993.8 RS485/RS422收发器在现场总线网络中的应用4043.9 基于分级通信模式的住宅小区自动电能计费系统的研制4103.10 基于CAN总线分布式控制系统智能节点的设计4163.11 移动自组织网络的关键技术和最新研究进展4223.12 基于ARM核的嵌入式系统开发平台4283.13 嵌入式系统在网络通信方面的应用4353.14 嵌入式以太网交换平台的设计与应用4393.15 TMS320LF2407在分布式的HEV动力总成控制系统中的应用研究4473.16 基于VC++的组合导航系统数据通信设计和实现4523.17 基于CAN总线构成的分布式清纱机控制系统4553.18 利用S7226实现变频器远程网络控制4583.19 基于DSP的神经网络实时仿真系统研究4623.20 基于DSP的分布式测控系统的设计与实现4683.21 基于嵌入式模块实现RS485与工业以太网的通信4733.22 基于RS485网络的64路同步数据采集系统4783.23 LonWorks网络远程监控的Java解决方案4813.24 RS422A/485通信网络设计4853.25 基于CAN总线的集散控制系统4913.26 网络化测量中接入技术的研究4983.27 基于Channel Bank和网关的IPCB网关的设计与实现5023.28 TM1300芯片的以太网通信接口的设计和实现5093.29 RS485在空调集中控制系统中的应用5143.30 嵌入式网络单片机测试系统5193.31 工业企业网中信息网络与控制网络集成的技术研究5233.32 基于SJA1000的DeviceNet通信节点控制器的设计5293.33 智能设备网络化的一种实现途径5333.34 基于RTL8019AS的嵌入式Internet系统接口设计539第4章 远程监控及自动抄表通信系统4.1 太阳能光伏电站远程监控系统的设计5464.2 基于Home Bus协议的电话远程监控模块的设计5494.3 基于SMS通信的直放站远程监控系统设计5544.4 基于RJ017的远程网桥的设计与实现5604.5 采用Delphi实现远程通信5654.6 基于CAN总线的自动抄表系统的设计5704.7 用AT89C2051实现电话远程控制家用电器5744.8 一种能跨变压器台区的电力远程抄表系统5784.9 水表集抄系统的低功耗设计582第5章 新型Modem芯片及通信技术5.1 73M2901芯片在嵌入式Modem中的应用5905.2 一种Modem通信编程的方法5975.3 Modem通信协议及其在单片机应用系统中的实现6025.4 HART调制解调器SYM20C15应用设计6095.5 一种移频Modem芯片AM7911的扩展6145.6 单片机如何控制Modem619第6章 DTMF及编/解码芯片通信技术6.1 基于MT8880的家庭自动报警终端的设计6246.2 智能化电话报警器的研制6306.3 电话信令收发器CMX860在信息终端中的应用6376.4 单片机来电显示器的设计与实现643第7章 电力线载波通信技术7.1 Lon Works电力线收发器及其在家用电器中的应用6487.2 一种电力线载波扩频通信芯片的设计与实现6527.3 基于电力线载波的智能小区自动抄表系统设计6587.4 基于正交频分复用调制的低压电力线高速数据通信6637.5 电力线Modem在音频传输系统中的应用669第8章 光纤通信技术8.1 LAMOST 高精度光纤定位单元关键技术研究6768.2 光纤FabryPerot干涉式温度的测量6808.3 一种新型自混合激光干涉光纤应变传感器6838.4 分布式光纤测温系统及其测温精度分析6878.5 光纤布喇格光栅传感器应用系统6948.6 PM5312通信控制器及在异步数字通信中的应用6998.7 光功率测试单元系统设计7068.8 一种小型智能光纤温控仪系统7108.9 基于激光强度调制的光纤探针式表面粗糙度测量的实验研究7168.10 双包层光纤激光器实验研究7208.11 光纤喇曼放大器的增益及其特性研究725第9章 CAN(控制局域网)总线技术及应用9.1 基于CAN总线的通信可靠性验证7329.2 微机灯光控制系统的设计7369.3 CAN总线仪表的开发设计7399.4 基于82527的CAN总线智能传感器节点设计7439.5 RS485与CAN总线收发器应用比较7499.6 基于82C250的类CSMA/CD协议在智能小区中的应用7539.7 CAN总线与 GPIB总线的集成7589.8 磁致伸缩位移传感器在液压轧机控制系统中的应用7629.9 DeviceNet现场总线从节点的应用开发767第10章 USB & 1394接口及通信技术10.1 通用串行总线原理及其外设接口设计77210.2 RS232接口转USB接口的通信方法78010.3 基于USB接口的便携式故障诊断系统78410.4 用CPLD实现USB高速传输78710.5 基于USB微处理器的数据采集系统设计79010.6 USB 20在高速数据采集系统中的应用79410.7 USB技术在第四代数控测井系统中的应用80110.8 USB接口在粮仓自动测温系统中的应用80510.9 一种基于USB接口的家庭网络适配器的设计81110.10 基于Linux的USB设备81610.11 USB接口的高速数据采集卡的设计与实现82010.12 基于USB的实时数据采集系统及其在MATLAB中的应用82610.13 智能仪器中数据高速传输的USB实现83210.14 AN2720SC在双机通信中的应用83810.15 RS485与USB接口转换卡的设计与实现84310.16 基于DSP的USB口数据采集分析系统84910.17 基于CPLD的串/并转换和高速USB通信设计85410.18 USB 20控制器CY7C68013的特点与应用86110.19 为嵌入式系统开发平台增加USB下载接口86710.20 用AN2131Q开发USB接口设备87110.21 基于 USB接口的高性能虚拟示波器87410.22 USB接口在指脉型血液参数检测系统中的应用87810.23 USB IP Core的VerilogHDL实现88510.24 一种新型USB接口现场数据采集的设计与实现89010.25 添加USB外部设备驱动程序89610.26 IEEE 1394与USB:双雄并立,竞争中共同成长90310.27 IEEE 1394与USB 20技术与市场应用90510.28 IEEE 1394技术及其在图像传输系统中的应用911第11章 数据通信的差错控制技术11.1 ATM信令适配的差错控制91611.2 单片机上软件实现循环冗余校验的方法92011.3 用汇编语言实现BCH解码校验算法92611.4 40位以内任意长度的CRC计算及校验的实现93011.5 一种纠错编码器的实现935
进入下载:
下载一: 下载二:
订阅微信二维码
站长工具:
实用工具:
Copyright &
all rights reserved查看: 1945|回复: 4
PS3、北通手柄什么的都能完美的模拟360手柄了(喜欢在电脑用手柄玩游戏的一定要看)
帖子主题积分
游民步兵, 积分 136, 距离下一级还需 364 积分
金钱290 ¥
魅力316 点
在线时间26 小时
SONY的PS3游戏主机配置的DS3(DUALSHOCK
3)手柄质量手感都不错,特别是喜欢PS系手柄玩实况足球的玩家来说就是不二的选择。DUALSHOCK
3本身包括蓝牙无线和USB有线的通信方式,但是都不是标准的数据格式,所以在电脑系统都识别不出来,就算识别出来了也不能动作。MotioninJoy这个软件就是起到这个桥梁的作用,把不标准PS3手柄数据转换成了WINDOWS能识别的设备。最酷的是它能一键模拟无线XBOX360手柄,用在最近几年出的新游戏上兼容性相当的好。只要标了“GAMES FOR WINDOWS”的游戏都能自动识别,不用做任何修改。个人认为有了这个软件PS3手柄在PC上的兼容性比X360原装手柄还要好了,因为老游戏你可以用老的模式(DXINPUT),新游戏可以用(XINPUT),实在不行的可以模拟键盘鼠标,如果这些都不能用的话,那这个游戏我就不知道是用什么来控制的了。
以上是作者的介绍。
除了PS3手柄之外,北通手柄、PS2手柄、还是路边摊十几块的手柄。(要是不支持你们手中的手柄,可以到他们的官网留言。他们计划支持更多的手柄,正在统计中)MotioinJoy都能让电脑系统把你的手柄识别为360手柄。除了模拟360手柄之外。还能让你的手柄模拟键盘鼠标、PS3/ps2手柄,很强大的说。。。
PS.这不是广告贴。。是真心的觉得好用放出来分享~以前用模拟补丁有些游戏不能完美模拟。。这个能让电脑系统直接识别为360手柄,进入游戏就能直接玩了,由于我等级比较低发不了连接。自己百度搜索MotioninJoy这个软件吧
帖子主题积分
金钱290 ¥
魅力316 点
在线时间26 小时
都没人需要吗???
帖子主题积分
24K纯豆豆腐
金钱29425 ¥
魅力13200 点
威望3369 点
居住地江苏省 无锡市
在线时间2080 小时
帖子主题积分
金钱290 ¥
魅力316 点
在线时间26 小时
元热豆腐 发表于
帖子主题积分
在线时间0 小时
好东西啊~下载试了几个游戏都完美支持。。一进游戏就能玩了。不用再设置什么了。很方便。。连战地3我以前用360模拟补丁都不能玩。这个居然进去就直接能用手柄玩了。。很强大。。我收下了
灌水之星勋章
颁发条件:上个月发贴量排行前5者获得。
2000威望值兑换。。。
Powered by2707人阅读
HID Human Input Device &&& 人工输入设备
& &&& 平衡板
IR&&&&&&&&&&&&&&&&&&&&&&&&& 红外传感器
Windows Driver Kit&&&&& &&& Windows驱动开发包
Wiimote &&&&&&&&&&&&&&&&&&& Wii控制手柄
Report&&&&&&&&&&&&&&&&&&&&& 报文
在本文中, Brian Peek演示了如何使用C#和VB.NET连接和使用任天堂控制手柄(Wiimote)。最终成果是一个可以在托管代码应用中方便使用的Wiimot托管代码API。
难度: 中级
时间: 1-3 小时
花费: 小于$50 (如果已经有Wiimote则免费)
硬件: , 一个兼容的PC蓝牙适配器
第0章 更新历史
(最新版本已经为1.6, 以下为1.6的更新记录。译者注)
新增对平衡板&重力中心&的计算(感谢Steven Battersby)
结构声明为[Serializable] (Caio建议)
电池(Battery)属性现在改为浮点型,能够反映电池剩余电量的百分比。
BatteryRaw为字节类型,原本用于保存电池属性。
WiimoteTest应用程序现在在启动时能够正确的读取扩展信息。
在Wiimote对象中新增HIIDevicePath属性,以显示HID设备路径。
写的时间延时由100毫秒改为50毫秒,这能够提高LED和滚轮的响应能力。
6/15/08 & Version 1.5.2,平衡板能够真正的工作了&&
6/12/08 & 将Version 1.5.1 从CodePlex删除...事实证明该版本对大多数用户存在太多的BUG(尽管对我而言一直不错),期待1.5.2的很快到来...
6/11/08 & Version 1.5.1在 上发布。修改了一个关于平衡板的BUG。更正:& 似乎很多人在使用该版本时发现仍然存在问题,原因是平衡板对响应时间的要求比较精确。等待1.5.2的到来&
6/9/08 & Version 1.5 在 上发布。支持 (平衡板)。
6/3/08 &Version 1.4 发布并提供下载。最重要的改进是支持多个Wiimote。
5/27/08 - Version 1.3发布并提供下载。改动量很大,一定要阅读内置的文档!
1/29/08 - Version 1.2.1.0发布并提供下载。唯一的改进是对IR3和IR4的支持,因为我遇到了很多关于它们的问题。
10/22/07 - Version 1.2.0.0发布并提供下载。修改了一些BUG并增加了新功能。源代码和二进制发布代码都在CodePlex上提供。同时提供了一个关于API使用的chm帮助文件。请留意库中包含的一个license文件详细描述的本软件的使用许可情况。使用许可对99%的用户没有任何变化,但由于我收到了大量的询问有关使用许可的电子邮件,因此附加了这个正式的说明。在正式发布中的docs目录下,readme.txt 和 license.txt有详细描述。
6/12/07 - Version 1.1.0.0发布并提供下载。 修改了几个错误,新增了一个可选的写方法,这可能对使用蓝牙协议栈/适配器有麻烦的用户有所帮助。增加了对Vista/XP x64 的支持, 以及一个Microsoft Robotics Studio服务版本。更多信息见包含的 readme.txt的信息。另外,在我的新文档中描述了如何使用MSRS服务创建一个Wiimote遥控车。
3/17/07 - Version 1.0.1.0发布并提供下载。 修正了API中关于校准数据的BUG。感谢James Darpinian 的指正!
第1章 简介
任天堂的Wii 控制手柄 (被称为Wiimote)是Wii系统中一个神奇的小控制器。它通过蓝牙系统与Wii连接, 因此能够与其它任何支持蓝牙的设备连接。
如果你仅仅关注于如何使用这个库文件,而不关心其实现细节,可以直接跳转到API应用章节(第7章)。
在阅读代码之前,有两个网站应当仔细的浏览一下。99%的Wiimote发送和接收数据的辨识工作由这两个网站完成。在网站上有对协议很详细的描述,我在此就不再重复。没有在这些网站上发贴的人们,本文中的功能根本不可能实现。
第2章 开始连接
这里可能是最关键的时刻,Wiimote不是能和地球上所有蓝牙设备和协议栈进行通信的, 如果下面几步不能通过,我也不能提供任何帮助。能够工作,或者不能,你只能进行祈祷了...
1.启动你的蓝牙软件并开始搜索设备。
2.按下Wiimote 的1 和 2 按键,会看到底部的LED开始闪烁。在完成之前不要松开按键。对于平衡板,打开下部的电池盖,按下一个红色的小的同步按钮。
3.Wiimotes应当在设备列表中显示为Nintendo RVL-CNT-01。 平衡板显示为 Nintendo RVL-WBC-01。如果没找到,重新启动并再试一下。
4.在向导中点击下一步。如果系统提示输入安全码或者PIN,不要输入或者选择跳过。
5.如果被要求选择Wiimote 使用何种服务,选择键盘/鼠标/HID服务其中的一种。
6.完成向导窗口。
这就可以了。底部的LED继续闪烁,而且设备显示在蓝牙设备列表中。运行源代码中的应用程序,你应该可以看到显示的数字变化,这标志着成功的连接了Wiimote设备。如果没有变化或者出现错误, 只能重新试一下。要是还不行, 很不幸,你可能使用的是一种不兼容的设备或协议栈。(这个过程确实需要多次尝试,可以参考附录中译者的连接方法作为参考。)
第3章 进入令人激动的HID和P/Invoke世界
当Wiimote可以与你的PC匹配,它被视为一种HID兼容设备。因此,为了连接该设备,我们必须使用HID和设备管理WIN32 API。不幸的是,目前的.NET运行环境中没有内置支持这些API,因此需要进入P/Invoke的领域。这些API在Windows驱动开发包(WDK)中定义, 如果希望看到原始的C头文件或阅读API文档,需要下载并安装最新的。
P/Invoke, 或许你已经有所了解,允许用户在.NET中直接调用Win32 API。这里的难点是找到合法的方法名称和格式定义,能够正确的将串行化数据并传递到Win32。对此是一个很好的资源,几乎所有本项目用到的方法都在此能找到。在本项目中,所有的P/Invoke方法在HIDImports类中定义。
与Wiimote通信的过程如下:
1.从Windows得到GUID和HID类定义。
2.得到HID类中所有设备的操作句柄。
3.在设备列表中进行遍历以得到每个设备的详细信息。
4.比较制造商ID和产品ID是否为已知的Wiimote制造商ID(VID)和产品ID(PID)。
5.在找到设备后,创建FileStream对设备进行读写操作。
6.清除设备列表。
&该步骤的实现代码如下(有省略)
' read/write handle to the devicePrivate mHandle As SafeFileHandle' a pretty .NET stream to read/write from/toPrivate mStream As FileStreamPrivate found As Boolean = FalsePrivate guid As GuidPrivate index As UInteger = 0' 1. get the GUID of the HID classHIDImports.HidD_GetHidGuid(guid)' 2. get a handle to all devices that are part of the HID classDim hDevInfo As IntPtr = HIDImports.SetupDiGetClassDevs(guid, Nothing, IntPtr.Zero, HIDImports.DIGCF_DEVICEINTERFACE) ' | HIDImports.DIGCF_PRESENT);' create a new interface data struct and initialize its sizeDim diData As HIDImports.SP_DEVICE_INTERFACE_DATA = New HIDImports.SP_DEVICE_INTERFACE_DATA()diData.cbSize = Marshal.SizeOf(diData)' 3. get a device interface to a single device (enumerate all devices)Do While HIDImports.SetupDiEnumDeviceInterfaces(hDevInfo, IntPtr.Zero, guid, index, diData)&&& ' create a detail struct and set its size&&& Dim diDetail As HIDImports.SP_DEVICE_INTERFACE_DETAIL_DATA = New HIDImports.SP_DEVICE_INTERFACE_DETAIL_DATA()&&& diDetail.cbSize = 5 'should be: (uint)Marshal.SizeOf(diDetail);, but that's the wrong size&&& Dim size As UInt32 = 0&&& ' get the buffer size for this device detail instance (returned in the size parameter)&&& HIDImports.SetupDiGetDeviceInterfaceDetail(hDevInfo, diData, IntPtr.Zero, 0, size, IntPtr.Zero)&&& ' actually get the detail struct&&& If HIDImports.SetupDiGetDeviceInterfaceDetail(hDevInfo, diData, diDetail, size, size, IntPtr.Zero) Then&&&&&&& ' open a read/write handle to our device using the DevicePath returned&&&&&&& mHandle = HIDImports.CreateFile(diDetail.DevicePath, FileAccess.ReadWrite, FileShare.ReadWrite, IntPtr.Zero, FileMode.Open, HIDImports.EFileAttributes.Overlapped, IntPtr.Zero)&&&&&&& ' 4. create an attributes struct and initialize the size&&&&&&& Dim attrib As HIDImports.HIDD_ATTRIBUTES = New HIDImports.HIDD_ATTRIBUTES()&&&&&&& attrib.Size = Marshal.SizeOf(attrib)&&&&&&& ' get the attributes of the current device&&&&&&& If HIDImports.HidD_GetAttributes(mHandle.DangerousGetHandle(), attrib) Then&&&&&&&&&&& ' if the vendor and product IDs match up&&&&&&&&&&& If attrib.VendorID = VID AndAlso attrib.ProductID = PID Then&&&&&&&&&&&&&&& ' 5. create a nice .NET FileStream wrapping the handle above&&&&&&&&&&&&&&& mStream = New FileStream(mHandle, FileAccess.ReadWrite, REPORT_LENGTH, True)&&&&&&&&&&& Else&&&&&&&&&&&&&&& mHandle.Close()&&&&&&&&&&& End If&&&&&&& End If&&& End If&&& ' move to the next device&&& index += 1Loop' 6. clean up our listHIDImports.SetupDiDestroyDeviceInfoList(hDevInfo)
// read/write handle to the deviceprivate SafeFileHandle mH// a pretty .NET stream to read/write from/toprivate FileStream mSbool found = false;Guint index = 0;// 1. get the GUID of the HID classHIDImports.HidD_GetHidGuid(out guid);// 2. get a handle to all devices that are part of the HID classIntPtr hDevInfo = HIDImports.SetupDiGetClassDevs(ref guid, null, IntPtr.Zero, HIDImports.DIGCF_DEVICEINTERFACE);// | HIDImports.DIGCF_PRESENT);// create a new interface data struct and initialize its sizeHIDImports.SP_DEVICE_INTERFACE_DATA diData = new HIDImports.SP_DEVICE_INTERFACE_DATA();diData.cbSize = Marshal.SizeOf(diData);// 3. get a device interface to a single device (enumerate all devices)while(HIDImports.SetupDiEnumDeviceInterfaces(hDevInfo, IntPtr.Zero, ref guid, index, ref diData)){&&& // create a detail struct and set its size&&& HIDImports.SP_DEVICE_INTERFACE_DETAIL_DATA diDetail = new HIDImports.SP_DEVICE_INTERFACE_DETAIL_DATA();&&& diDetail.cbSize = 5; //should be: (uint)Marshal.SizeOf(diDetail);, but that's the wrong size&&& UInt32 size = 0;&&& // get the buffer size for this device detail instance (returned in the size parameter)&&& HIDImports.SetupDiGetDeviceInterfaceDetail(hDevInfo, ref diData, IntPtr.Zero, 0, out size, IntPtr.Zero);&&& // actually get the detail struct&&& if(HIDImports.SetupDiGetDeviceInterfaceDetail(hDevInfo, ref diData, ref diDetail, size, out size, IntPtr.Zero))&&& {&&&&&&& // open a read/write handle to our device using the DevicePath returned&&&&&&& mHandle = HIDImports.CreateFile(diDetail.DevicePath, FileAccess.ReadWrite, FileShare.ReadWrite, IntPtr.Zero, FileMode.Open, HIDImports.EFileAttributes.Overlapped, IntPtr.Zero);&&&&&&& // 4. create an attributes struct and initialize the size&&&&&&& HIDImports.HIDD_ATTRIBUTES attrib = new HIDImports.HIDD_ATTRIBUTES();&&&&&&& attrib.Size = Marshal.SizeOf(attrib);&&&&&&& // get the attributes of the current device&&&&&&& if(HIDImports.HidD_GetAttributes(mHandle.DangerousGetHandle(), ref attrib))&&&&&&& {&&&&&&&&&&& // if the vendor and product IDs match up&&&&&&&&&&& if(attrib.VendorID == VID && attrib.ProductID == PID)&&&&&&&&&&& {&&&&&&&&&&&&&&& // 5. create a nice .NET FileStream wrapping the handle above&&&&&&&&&&&&&&& mStream = new FileStream(mHandle, FileAccess.ReadWrite, REPORT_LENGTH, true);&&&&&&&&&&& }&&&&&&&&&&& else&&&&&&&&&&&&&&& mHandle.Close();&&&&&&& }&&& }&&& // move to the next device&&& index++;}// 6. clean up our listHIDImports.SetupDiDestroyDeviceInfoList(hDevInfo);
第4章 CreateFile 和 SafeFileHandles
在看过上面的代码后,你可能注意到Wiimote的操作句柄是通过Win32的CreateFile方法打开的,而没有直接使用FileStream对象或者其它托管方式。这是由句柄创建方式的需要所决定的。diDetail结构中的 DevicePath 成员保存了一个非文件系统路径,Win32可以使用该句柄打开设备,而.NET仅允许文件系统路径,因此我们必须使用Win32方法。
同时你可能注意到我们使用了SafeFileHandle 对象包装CreateFile调用返回的句柄。SafeFileHandle对象包装了本地(非托管的)的Win32句柄,允许安全的管理本地类型,并在应用退出时干净的关闭这些句柄。当然可以使用更容易的IntPtr,但我发现对本地类型这种方式是更为干净的处理方式。
第5章 Wiimote I/O 和 HID 报文
在HID世界中,数据以报文的方式发送和接收。简要的说,报文就是一个已定义长度的数据缓冲区,它带有的头信息决定了报文的内容。Wiimote接收和发送多种报文,都是22字节长,在上面提到的网站中有详细的描述。考虑到其数量和复杂性,如果你希望了解Wiimote的报文和数据内容,我建议你自行阅读wikis中的相关资料。
现在我们得到了与Wiimote通信的 FileStream对象。因为报文会在同一时刻进行收发,所以必须采用异步I/O操作。在.NET中做到这点并不困难。在方法开始时进行一个异步读操作,并在缓冲区满后提供一个回调函数。在回调函数中,进行数据处理并重复调用该方法。
' sure, we could find this out the hard way using HID, but trust me, it's 22Private Const REPORT_LENGTH As Integer = 22' report bufferPrivate mBuff As Byte() = New Byte(REPORT_LENGTH - 1){}Private Sub BeginAsyncRead()&&& ' if the stream is valid and ready&&& If mStream.CanRead Then&&&&&&& ' create a read buffer of the report size&&&&&&& Dim buff As Byte() = New Byte(REPORT_LENGTH - 1){}&&&&&&& ' setup the read and the callback&&&&&&& mStream.BeginRead(buff, 0, REPORT_LENGTH, New AsyncCallback(AddressOf OnReadData), buff)&&& End IfEnd SubPrivate Sub OnReadData(ByVal ar As IAsyncResult)&&& ' grab the byte buffer&&& Dim buff As Byte() = CType(ar.AsyncState, Byte())&&& ' end the current read&&& mStream.EndRead(ar)&&& ' start reading again&&& BeginAsyncRead()& &&' handle data....End Sub
// sure, we could find this out the hard way using HID, but trust me, it's 22private const int REPORT_LENGTH = 22;// report bufferprivate byte[] mBuff = new byte[REPORT_LENGTH];private void BeginAsyncRead(){&&& // if the stream is valid and ready&&& if(mStream.CanRead)&&& {&&&&&&& // create a read buffer of the report size&&&&&&& byte[] buff = new byte[REPORT_LENGTH];&&&&&&& // setup the read and the callback&&&&&&& mStream.BeginRead(buff, 0, REPORT_LENGTH, new AsyncCallback(OnReadData), buff);&&& }}private void OnReadData(IAsyncResult ar){&&& // grab the byte buffer&&& byte[] buff = (byte[])ar.AsyncS&&& // end the current read&&& mStream.EndRead(ar);&&& // start reading again&&& BeginAsyncRead();&&& &&& // handle data....}
第6章 完成!
你可能不相信,但这些代码已经能够连接并与Wiimote通信。 接下来的代码包括解析接收的数据并向Wiimote发送格式正确的代码。正象上面提到的, 我没打算在此详细说明这些细节,网站上可以提供更好的说明。
向Wiimote发送命令的方式如下:
mStream.Write(mBuff, 0, REPORT_LENGTH)
mStream.Write(mBuff, 0, REPORT_LENGTH);
读取功能在上面的异步代码中完成。在收到22字节数据后, 调用OnReadData方法,然后正确的解析和使用这些数据。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:239638次
积分:3295
积分:3295
排名:第3859名
原创:66篇
译文:12篇
评论:201条
(1)(2)(1)(1)(1)(1)(1)(1)(2)(1)(1)(1)(3)(2)(2)(1)(1)(5)(1)(1)(1)(1)(2)(1)(2)(2)(2)(1)(2)(4)(4)(3)(2)(3)(5)(5)(4)(3)(1)

我要回帖

更多关于 pc游戏手柄 的文章

 

随机推荐