📄 usbmidi.lst
字号:
C51 COMPILER V7.06 USBMIDI 09/13/2007 00:45:44 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE USBMIDI
OBJECT MODULE PLACED IN UsbMidi.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE UsbMidi.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /******************************************************************
2 本程序只供学习使用,未经作者许可,不得用于其它任何用途
3 我的邮箱:computer-lov@tom.com
4 欢迎访问我的blog: http://computer00.21ic.org
5
6 USBMouse.C file
7
8 作者:Computer-lov
9 建立日期: 2007.03.20
10 修改日期: 2007.03.23
11 版本:V1.1
12 版权所有,盗版必究。
13 Copyright(C) Computer-lov 2007-2017
14 All rights reserved
15 *******************************************************************/
16
17 #include <AT89x52.H>
18 #include "USB.H"
19 #include "PDIUSBD12.H"
20 #include "My_type.h"
21 #include "UART.H"
22 #include "key.h"
23 #include "usbmidi.h"
24
25 #define USB_COMMAND_ADD 1
26 #define USB_DATA_ADD 0
27
28 //USB芯片连接引脚
29 #define USB_DATA P0
30 #define USB_A0 P3_5
31 #define USB_WR P3_6
32 #define USB_RD P3_7
33 #define USB_INT P3_2
34
35
36 #define ENDPOINT_NUMBER 2
37 #define MAX_CONTROL_DATA_SIZE 16
38
39
40 //控制传输时保存数据
41 CONTROL_DATA_BUFF Control_Data;
42
43 //缓冲
44 uint8 idata buffer[64];
45
46 //交换数据时用的指针
47 uint8 *pData;
48
49 uint8 idle; //空闲状态
50 uint8 protocol; //当前协议
51
52 //高低字节交换
53
54 #define SWAP16(x) ((((uint16)(x))<<8)|(((uint16)(x))>>8))
55
C51 COMPILER V7.06 USBMIDI 09/13/2007 00:45:44 PAGE 2
56 //取一个整数的低字节
57 #define LSB(x) ((uint8)(x))
58
59 //取一个整数的高字节
60 #define MSB(x) ((uint8)(((uint16)(x))>>8))
61
62 //字符串描述符所用的语言种类
63 code uint8 LANGUAGE_ID[4]={0x04,0x03,0x09,0x04};
64
65 //设备序列号
66 code uint8 device_serial_number[]=
67 {22,STRING_DESCRIPTOR,'2',0,'0',0,'0',0,'7',0,'-',0,'0',0,'9',0,'-',0,'1',0,'3',0};
68
69 //厂商字符串
70 code uint8 ManufacturerString[80]=
71 {80,STRING_DESCRIPTOR,0x35,0x75,0x11,0x81,0x08,0x57,0x08,0x57,0x84,0x76,0xB6,0x5B,
72 0x53,0x5F,'-',0x00,'-',0x00,'-',0x00,'-',0x00,'@',0,0x20,0x00,'H',0,'t',0,'t',0,
73 'p',0,':',0,'/',0,'/',0,'C',0,'o',0,'m',0,'p',0,'u',0,'t',0,'e',0,'r',0,'0',0,
74 '0',0,'.',0,'2',0,'1',0,'i',0,'c',0,'.',0,'o',0,'r',0,'g',0};
75
76 //产品字符串
77 code uint8 ProducterString[90]=
78 {90,STRING_DESCRIPTOR,0x35,0x75,0x11,0x81,0x08,0x57,0x08,0x57,0x5A,0x50,0x84,0x76,
79 'U',0,'S',0,'B',0,' ',0,'M',0,'I',0,'D',0,'I',0,0x2E,0x95,0xD8,0x76,'@',0,0x20,0x00,'H',
80 0,'t',0,'t',0,'p',0,':',0,'/',0,'/',0,'C',0,'o',0,'m',0,'p',0,'u',0,'t',0,'e',0,'r',
81 0,'0',0,'0',0,'.',0,'2',0,'1',0,'i',0,'c',0,'.',0,'o',0,'r',0,'g',0};
82
83
84 code DEVICE_DESCRIPTOR_STRUCT device_descriptor= //设备描述符
85 {
86 sizeof(DEVICE_DESCRIPTOR_STRUCT), //设备描述符的字节数大小
87 DEVICE_DESCRIPTOR, //设备描述符类型编号
88 0x1001, //USB版本号
89 0x00, //USB分配的设备类代码
90 0x00, //USB分配的子类代码
91 0x00, //USB分配的设备协议代码
92 0x10, //端点0的最大包大小
93 0x4444, //厂商编号VID,这里只是作为测试用,请使用自己的VID
94 0x8886, //产品编号PID,这里只是作为测试用,请使用自己的PID
95 0x0100, //设备出厂编号
96 0x01, //设备厂商字符串的索引
97 0x02, //描述产品字符串的索引
98 0x03, //描述设备序列号字符串的索引
99 0x01 //可能的配置数量
100 };
101
102 //定义配置,接口,端点等描述符结构体,因为它们是随配置描述符一起返回的
103 typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
104 {
105 CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
106 INTERFACE_DESCRIPTOR_STRUCT interface_descriptor;
107 CS_INTERFACE_DESCRIPTOR_STRUCT cs_interface_descriptor;
108 INTERFACE_DESCRIPTOR_STRUCT ms_interface_descriptor;
109 CS_MS_INTERFACE_DESCRIPTOR_STRUCT cs_ms_interface_descriptor;
110 MIDI_IN_JACK_DESCRIPTOR_STRUCT midi_in_jack_descriptor_em;
111 MIDI_IN_JACK_DESCRIPTOR_STRUCT midi_in_jack_descriptor_ex;
112 MIDI_OUT_JACK_DESCRIPTOR_STRUCT midi_out_jack_descriptor_em;
113 MIDI_OUT_JACK_DESCRIPTOR_STRUCT midi_out_jack_descriptor_ex;
114 ENDPOINT_DESCRIPTOR_STRUCT bulk_out_endpoint_descriptor;
115 CS_ENDPOINT_DESCRIPTOR_STRUCT bulk_out_cs_endpoint_descriptor;
116 ENDPOINT_DESCRIPTOR_STRUCT bulk_in_endpoint_descriptor;
117 CS_ENDPOINT_DESCRIPTOR_STRUCT bulk_in_cs_endpoint_descriptor;
C51 COMPILER V7.06 USBMIDI 09/13/2007 00:45:44 PAGE 3
118 }CON_INT_ENDP_DESCRIPTOR_STRUCT;
119
120 code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=
121 {
122 //configuration_descriptor //配置描述符
123 {
124 sizeof(CONFIGURATION_DESCRIPTOR_STRUCT), //配置描述符的字节数大小
125 CONFIGURATION_DESCRIPTOR, //配置描述符类型编号
126 SWAP16(sizeof(CON_INT_ENDP_DESCRIPTOR_STRUCT)), //配置,接口,端点描述符总长度
127 0x02, //只包含二个接口
128 0x02, //该配置的编号
129 0x00, //iConfiguration字段
130 0x80, //采用总线供电,不支持远程唤醒
131 0xC8 //从总线获取最大电流400mA
132 },
133 //interface_descritor //接口描述符:标准音频控制接口
134 {
135 sizeof(INTERFACE_DESCRIPTOR_STRUCT), //接口描述符的字节数大小
136 INTERFACE_DESCRIPTOR, //接口描述符类型编号
137 0x00, //接口编号为0
138 0x00, //该接口描述符的编号
139 0x00, //非0端点数量为0,没有端点
140 AUDIO, //音频设备(AUDIO)类
141 AUDIO_CONTROL, //使用的子类:音频控制(Audio Control)类
142 0x00, //未用
143 0x00 //未用
144 },
145 //class_specific_interface_descritor //类特殊接口描述符:类特
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -