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

📄 usb.c

📁 PS2和USB兼容的鼠标源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/********************************************************************************/
/* filename: usb.c                                                              */
/* version : v1.00                                                              */
/* created : hw-chen                                                            */
/* descript: HID MOUSE DESCRIPTOR DECLARATIONS                                  */
/********************************************************************************/
#include "m8c.h"        // part specific constants and macros
#include "dev.h"
#include "ps2.h"
#include "usb.h"

extern unsigned char led_timer;
unsigned char ctrl_toggle_bit;
unsigned char DATA_toggle_bit;
unsigned char ctrl_logic_bit=0x0;

#pragma interrupt_handler usb_endpoint_0_isr
#pragma interrupt_handler usb_endpoint_1_isr

st_usb_transmit usb_transmit;
char byte_count=0x0;


/********************************************************************************/
/* 状态描述符 */
/********************************************************************************/
const char get_interface_status_table[] =
{   0x00, 0x00 //* always return both bytes zero
};

/********************************************************************************/
/* 字符串描述符 ONE */
/********************************************************************************/
const char string_description_one[]=
{   0x12,
    DESCRIPTOR_STRING,
    'L',0x0,
    'o',0x0,
    'g',0x0,
    'i',0x0,
    't',0x0,
    'e',0x0,
    'c',0x0,
    'h',0x0,
};

/********************************************************************************/
/* 字符串描述符 TWO */
/********************************************************************************/
const char string_description_two[] =
{   0x2E,
    DESCRIPTOR_STRING,
    'U',0x0,
    'S',0x0,
    'B',0x0,
    '-',0x0,
    'P',0x0,
    'S',0x0,
    '/',0x0,
    '2',0x0,
    ' ',0x0,
    'O',0x0,
    'p',0x0,
    't',0x0,
    'i',0x0,
    'c',0x0,
    'a',0x0,
    'l',0x0,
    ' ',0x0,
    'M',0x0,
    'o',0x0,
    'u',0x0,
    's',0x0,
    'e',0x0,
};

/********************************************************************************/
/* 字符串描述符 THR */
/********************************************************************************/
const char string_description_thr[] =
{   0x10,
    DESCRIPTOR_STRING,
    '0',0x0,
    '1',0x0,
    '2',0x0,
    '3',0x0,
    '4',0x0,
    '5',0x0,
    '6',0x0
};

/********************************************************************************/
/* 字符串描述符 FOR */
/********************************************************************************/
const char string_description_for[] =
{   0x14,
    DESCRIPTOR_STRING,
    'H',0x0,
    'I',0x0,
    'D',0x0,
    ' ',0x0,
    'M',0x0,
    'o',0x0,
    'u',0x0,
    's',0x0,
    'e',0x0
};
/********************************************************************************/
/* 字符串描述符 FOR */
/********************************************************************************/
const char string_description_fiv[] =
{   0x32,
    DESCRIPTOR_STRING,
    'E',0x0,
    'n',0x0,
    'd',0x0,
    'P',0x0,
    'o',0x0,
    'i',0x0,
    'n',0x0,
    't',0x0,
    '1',0x0,
    ' ',0x0,
    'I',0x0,
    'n',0x0,
    't',0x0,
    'e',0x0,
    'r',0x0,
    'r',0x0,
    'u',0x0,
    'p',0x0,
    't',0x0,
    'P',0x0,
    'i',0x0,
    'p',0x0,
    'e',0x0
};

/********************************************************************************/
/* 字符串描述符,语言描述符 */
/********************************************************************************/
const char string_language_table[] =
{   0x04,                                   //* Length
    DESCRIPTOR_STRING,                      //* Type (3=string)
    0x09,                                   //* Language: English
    0x04                                    //* Sub-language: Default
};

/********************************************************************************/
/* HID描述符 */
/********************************************************************************/
const char HID_report_table[] =
{   0x05, 0x01,     //* USAGE_PAGE (Generic Desktop)	    05 01
    0x09, 0x02,     //* USAGE (Mouse)	                    09 02
    0xA1, 0x01,     //* COLLECTION (Application)	        A1 01
    0x09, 0x01,     //*   USAGE (Pointer)	                09 01
    0xA1, 0x00,     //*   COLLECTION (Physical)	            A1 00
    0x05, 0x09,     //*     USAGE_PAGE (Button)	            05 09
    0x19, 0x01,     //*     USAGE_MINIMUM (Button 1) 共有最大8个按键
    0x29, 0x08,     //*     USAGE_MAXIMUM (Button 8) 使用最大值8, 1表示左键,2表示右键,3表示中键,6表示小左键,7表示小右键
    0x15, 0x00,     //*     LOGICAL_MINIMUM (0)	     每个报告字段的数值范围
    0x25, 0x01,     //*     LOGICAL_MAXIMUM (1)
    0x95, 0x08,     //*     REPORT_COUNT (8)         共有8个报告字段
    0x75, 0x01,     //*     REPORT_SIZE (1)	         每个报告字段为1位
    0x81, 0x02,     //*     INPUT (Data,Var,Abs)	        81 02
    0x95, 0x00,     //*     REPORT_COUNT (0)	            95 00
    0x81, 0x03,     //*     INPUT (Data,Var,Abs)	        81 03
    0x05, 0x01,     //*     USAGE_PAGE (Generic Desktop)	05 01
    0x09, 0x30,     //*     USAGE (X)	                    09 30
    0x09, 0x31,     //*     USAGE (Y)	                    09 31
    0x09, 0x38,     //*     USAGE (Wheel)	                09 38
    0x15, 0x81,     //*     LOGICAL_MINIMUM (-127)	        15 81
    0x25, 0x7f,     //*     LOGICAL_MAXIMUM (127)	        25 7F
    0x75, 0x08,     //*     REPORT_SIZE (8)	                75 08
    0x95, 0x03,     //*     REPORT_COUNT (3)	            95 03
    0x81, 0x06,     //*     INPUT (Data,Var,Rel)	        81 06
    0x05, 0x0c,     //*     USAGE_PAGE (consumer device)	05 0C
    0x0a, 0x38, 0x02, 
    0x95, 0x01,     //*     REPORT_COUNT (1)         共有1个报告字段
    0x81, 0x06,
    0xc0,
    0xc0
};
const char descriptor_device[]=
{   0x12,	//* 设备描述符的字节数大小
    0x01,	//* 设备描述符类型编号
    0x00,	//* USB版本号低字节
    0x02,	//* USB版本号
    0x00,	//* USB分配的设备类代码
    0x00,	//* USB分配的子类代码
    0x00,	//* USB分配的设备协议代码
    0x08,	//* 端点0的最大包大小
    0x6d,	//* 厂商编号VID低字节
    0x04,	//* 厂商编号VID
    0x45,	//* 产品编号PID低字节
    0xc0,	//* 产品编号PID
    0x10,	//* 设备出厂编号低字节
    0x27,	//* 设备出厂编号
    0x01,	//* 设备厂商字符串的索引
    0x02,	//* 描述产品字符串的索引
    0x00,	//* 描述设备序列号字符串的索引
    0x01 	//* 可能的配置数量
};

///********************************************************************************/
///* 设备描述符 */
///********************************************************************************/
////const st_descript_device descriptor_device=
//const char descriptor_device[]=
//{   sizeof(st_descript_device),             //* 设备描述符的字节数大小
//    DESCRIPTOR_DEVICE,                      //* 设备描述符类型编号
//    0x10,                                   //* USB版本号低字节
//    0x01,                                   //* USB版本号
//    0x00,                                   //* USB分配的设备类代码
//    0x00,                                   //* USB分配的子类代码
//    0x00,                                   //* USB分配的设备协议代码
//    0x08,                                   //* 端点0的最大包大小
//    0xB4,                                   //* 厂商编号VID低字节
//    0x04,                                   //* 厂商编号VID
//    0x70,                                   //* 产品编号PID低字节
//    0x63,                                   //* 产品编号PID
//    0x01,                                   //* 设备出厂编号低字节
//    0x00,                                   //* 设备出厂编号
//    0x01,                                   //* 设备厂商字符串的索引
//    0x02,                                   //* 描述产品字符串的索引
//    0x00,                                   //* 描述设备序列号字符串的索引
//    0x01                                    //* 可能的配置数量
//};



////const st_all_confiure all_confiure =
//const char all_confiure[] =
//{   sizeof(st_descript_configure),          //* 配置描述符的字节数大小
//    DESCRIPTOR_CONFIGURATION,               //* 配置描述符类型编号
//    0x22,                                   //* 总长度的低字节
//    0x00,                                   //* 总长度的高字节
//    0x01,                                   //* 只包含一个接口
//    0x01,                                   //* 该配置的编号
//    0x00,                                   //* configure_index字段
//    0xA0,                                   //* 采用总线供电,支持远程唤醒
//    0xC8,                                   //* 从总线获取最大电流400mA
//    sizeof(st_descript_interface),          //* 接口描述符的字节数大小
//    DESCRIPTOR_INTERFACE,                   //* 接口描述符类型编号
//    0x00,                                   //* 接口编号为0
//    0x00,                                   //* 该接口描述符的编号
//    ENDPOINT_NUMBER,                        //* 非0端点数量为1;/;,只使用端点主端点输入和输出
//    0x03,                                   //* 人机接口设备(HID)类
//    0x01,                                   //* 使用的子类:支持BIOS根启动Boot的子类
//    0x02,                                   //* 使用的协议:鼠标
//    0x00,                                   //* 接口描述符字符串索引
//    sizeof(st_descript_hid),                //* HID描述符的字节数大小
//    DESCRIPTOR_HID,                         //* HID描述符类型编号
//    0x10,                                   //* HID类协议版本号,LO为10
//    0x01,                                   //* HID类协议版本号,LO为1,所以为1.10
//    0x21,                                   //* 固件的国家地区代号,0x21为美国
//    NUM_SUB_DESCRIPTORS,                    //* 下级描述符的数量,为1个
//    DESCRIPTOR_REPORT,                      //* 下级描述符为报告描述符
//    sizeof(HID_report_table),               //* 下级描述符的长度的低字节
//    0x0,                                    //* 下级描述符的长度的高字节
//    sizeof(st_descript_endpoint),           //* 端点描述符的字节数大小
//    DESCRIPTOR_ENDPOINT,                    //* 端点描述符类型编号
//    0x81,                                   //* 端点号0x1,输入端点
//    ENDPOINT_TYPE_INTERRUPT,                //* 使用的传输类型:中断传输
//    0x04,                                   //* 该端点支持的最大包尺寸,0x4字节
//    0x00,
//    0x0A                                    //* 中断扫描时间:设置为10ms
//};
/********************************************************************************/
/* 所有描述符 */
/********************************************************************************/
const char all_confiure[] =
{   0x09,			//* 配置描述符的字节数大小
    DESCRIPTOR_CONFIGURATION, 	//* 配置描述符类型编号
    0x22,       		//* 总长度的低字节
    0x00,       		//* 总长度的高字节
    0x01,       		//* 只包含一个接口
    0x01,       		//* 该配置的编号
    0x00,       		//* configure_index字段
    0xa0,       		//* 采用总线供电,支持远程唤醒
    0x31,       		//* 从总线获取最大电流400mA
    0x09,       		//* 接口描述符的字节数大小
    DESCRIPTOR_INTERFACE,       //* 接口描述符类型编号
    0x00,       		//* 接口编号为0
    0x00,       		//* 该接口描述符的编号
    0x01,       		//* 非0端点数量为1;/;,只使用端点主端点输入和输出

⌨️ 快捷键说明

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