📄 ch375.txt
字号:
/****************************************
** **
** 读取游戏手柄的数据,处理后转发 **
** **
/********************************************************************************************************
** **
** 北通野牛游戏手柄 设备描述符 **
** **
*********************************************************************************************************
** **
** 0x12 // bLength 描述符长度 = 12H **
** 0x01 // bDescriptorType 描述符类型 = 1H **
** 0x0001 // bcdUSB 设备版本号 = 你发行的版本的号 **
** 0x00 // bDeviceClass 类型代码 = 由USB指定 **
** 0x00 // bDeviceSubClass 子类型代码 = 由USB分配 **
** 0x00 // bDeviceProtocol 协议代码 = 由USB分配 **
** 0x08 // bMaxPacketSize0 端点0的容量 = 64(只能是 8,16,32,64) **
** 0x8f0e // idVendor 供应商ID(同USB协会分配,我就自己分配一份) **
** 0x0300 // idProduct 产品ID(由厂商分配) **
** 0x0701 // bcdDevice ( 设备出厂编号 ) **
** 0x01 // iManufacturer ( 厂商描述字符串索引, 用来在字符串索引中查找字符串 ) **
** 0x02 // iProduct ( 产品描述字符串索引, 用来在字符串索引中查找字符串 ) **
** 0x00 // iSerialNumber ( 设备序列号描述字符串索引, 用来在字符串索引中查找字符串 ) **
** 0x01 // bNumConfigurations ( 配置字符串的个数 ) **
** **
********************************************************************************************************/
/********************************************************************************************************
** **
** 北通野牛游戏手柄 配置描述符 **
** **
*********************************************************************************************************
** **
** 0x09 // bLength 描述符长度 = 9H **
** 0x02 // bDescriptorType 描述符类型 = 2H **
** 0x22 // wTotalLength **
** 0x09 + // 返回描述符串集的长度, 配置描述字符长度 **
** 0x09 + // 接口描述字符长度 **
** 0x09 + // HID描述字符长度 **
** 0x07 // 端点描述字符长度 **
** 0x00 **
** 0x01, // bNumInterfaces,支持接口数 **
** 0x01, // bConfigurationValue,配置值 **
** 0x00, // iConfiguration,配置字符串描述索相,0: 不使用 **
** // 如果使用,必须在字符串描述符中添加相应的字符串 **
** 0x80 USB_CONFIG_BUS_POWERED | // bmAttributes 设置的供电特性 **
** USB_CONFIG_REMOTE_WAKEUP // 总线供电 **
** // 有唤醒功能 **
** 0xfa // bMaxPower 设备从供电总线吸取的电流值 **
** **
********************************************************************************************************/
/********************************************************************************************************
** **
** 北通野牛游戏手柄 接口描述符 **
** **
*********************************************************************************************************
** **
** 0x09 // bLength 描述符长度 = 9H **
** 0x04 // bDescriptorType 描述符类型 = 4H **
** 0x00 // bInterfaceNumber ( 接口编号 ) **
** 0x00 // bAlternateSetting ( 可代替位置 ) **
** 0x01 // bNumEndpoints 使用端点(不含端点0) **
** 0x03 // bInterfaceClass **
** // USB 类 **
** // USB_DEVICE_CLASS_HUMAN_INTERFACE == 3 **
** // HID类 **
** 0x00 // bInterfaceSubClass **
** // 子类,没有. **
** 0x00 // bInterfaceProtocol **
** // 协议代码 **
** 0x00, // iInterface **
** // 字符串描述符索引,要使用该字符串必须在字符串描述符里添加相应的字符串 **
** **
********************************************************************************************************/
/********************************************************************************************************
** **
** 北通野牛游戏手柄 HID 描述符 **
** **
*********************************************************************************************************
** **
** 0x09 // bLength 描述符长度 = **
** 0x21 // bDescriptorType HID描述符类型 = 21H **
** 0x1001 // bcdHID HID版本号 **
** 0x21 // bCountryCode 国家代码 **
** 0x01 // bNumDescriptors 支持其它类描述符个数 **
** 0x22 // bDescriptorType 从属类描述类型 = 报告描述符22H **
** 0x6500 // wDescriptorLength 从属类描述的长度 **
** **
********************************************************************************************************/
/********************************************************************************************************
** **
** 北通野牛游戏手柄 端点描述符 **
** **
*********************************************************************************************************
** **
** 0x07 // bLength 端点描述符长度 **
** 0x05 // bDescriptorType 端点描述符类型 = 5H **
** 0x81 // bEndpointAddress 逻辑端点号 BIT.7 = DIR **
** // BIT.0..3 端点号 **
** // 这个值是用来把逻辑端点号换成物理端点号 **
** 0x03 // bmAttributes 端点属性 = 中断 **
** 0x0800 // wMaxPacketSize 端点容量 **
** 10 // 11ms // bInterval **
** // 传输间隔时间.只对中断端点有效 **
** **
********************************************************************************************************/
#include <reg52.h>
#include <stdio.h>
#include "CH375INC.H"
unsigned char volatile xdata CH375_CMD_PORT _at_ 0x0100; /* CH375命令端口的I/O地址 */
unsigned char volatile xdata CH375_DAT_PORT _at_ 0x0000; /* CH375数据端口的I/O地址 */
#define TURE 1
#define FALSE 0
#define REQUEST 0x55
#define RESPONSION 0xAA
#define OK 0x00
#define END 0xFF
#define light P1
sbit CH375_INT_WIRE = 0xB0^2; /* P3.2, INT0, 连接CH375的INT#引脚,用于查询中断状态 */
unsigned char endp_int = 0x81 ; //中断端点号
unsigned char endp6_mode = 0x80 ;
unsigned char endp7_mode = 0x80 ; //同步标志位初值
bit flag_output = 0 ; //串口输出标志位
unsigned int PreBTNV = 0x00 ; //前一次键值处理后存放
union BTN_Store //按键键值
{
struct
{ unsigned int head ;
unsigned char LRBTN ;
unsigned char UDBTN ;
unsigned char middle ;
unsigned int ABTN ;
unsigned char tail ;
}BTN_Value ;
unsigned char data_buf[8] ;
}USB_Data ;
void delay2us( void )
{
unsigned char i;
for( i=20 ; i!=0 ; i -- ) ;
}
void delay1us( void )
{
unsigned char i ;
for( i = 10; i != 0; i -- ) ;
}
void delayms( unsigned char delay )
{
unsigned char i ;
do
{ for( i=0 ; i!=250 ; i++ ){;}
for( i=0 ; i!=250 ; i++ ){;}
for( i=0 ; i!=150 ; i++ ){;}
}
while( --delay ) ;
}
void mInitSTDIO( void )
{
SCON = 0x50 ;
PCON = 0x80 ;
TMOD = 0x21 ;
TH0 = 0x00 ;
TL0 = 0x00 ;
TH1 = 0xF3 ; // 24MHz晶振, 9600bps
TL1 = 0xF3 ;
TF0 = 0 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -