?? 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 + -