📄 usb.c
字号:
/********************************************************************************/
/* 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 + -