📄 hiduser.lst
字号:
ARM COMPILER V2.53, hiduser 27/04/07 16:47:01 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE hiduser
OBJECT MODULE PLACED IN .\Obj\hiduser.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe hiduser.c THUMB DEBUG PRINT(.\LST\HIDUSER.LST) TABS(4) OBJECT(.\Obj\hiduser.
-obj)
stmt level source
1 /*----------------------------------------------------------------------------
2 * U S B - K e r n e l
3 *----------------------------------------------------------------------------
4 * Name: HIDUSER.C
5 * Purpose: HID Custom User Module
6 * Version: V1.10
7 *----------------------------------------------------------------------------
8 * This file is part of the uVision/ARM development tools.
9 * Copyright (c) 2005-2006 Keil Software. All rights reserved.
10 * This software may only be used under the terms of a valid, current,
11 * end user licence from KEIL for a compatible version of KEIL software
12 * development tools. Nothing else gives you the right to use it.
13 *---------------------------------------------------------------------------*/
14
15 #include "type.h"
16
17 #include "usb.h"
18 #include "hid.h"
19 #include "usbcfg.h"
20 #include "usbcore.h"
21 #include "hiduser.h"
22
23 #include "mouse.h"
24
25
26 BYTE HID_Protocol;
27 BYTE HID_IdleTime[HID_REPORT_NUM];
28
29
30 /*
31 * HID Get Report Request Callback
32 * Called automatically on HID Get Report Request
33 * Parameters: None (global SetupPacket and EP0Buf)
34 * Return Value: TRUE - Success, FALSE - Error
35 */
36
37 BOOL HID_GetReport (void) {
38 1 int i;
39 1
40 1 /* ReportID = SetupPacket.wValue.WB.L; */
41 1 switch (SetupPacket.wValue.WB.H) {
42 2 case HID_REPORT_INPUT:
43 2 GetMouseInReport();
44 2 for (i = 0; i < sizeof(MouseInReport); i++) {
45 3 EP0Buf[i] = MouseInReport[i];
46 3 }
47 2 break;
48 2 case HID_REPORT_OUTPUT:
49 2 return (FALSE); /* Not Supported */
50 2 case HID_REPORT_FEATURE:
51 2 /* EP0Buf[] = ...; */
52 2 /* break; */
53 2 return (FALSE); /* Not Supported */
54 2 }
55 1 return (TRUE);
56 1 }
57
58
ARM COMPILER V2.53, hiduser 27/04/07 16:47:01 PAGE 2
59 /*
60 * HID Set Report Request Callback
61 * Called automatically on HID Set Report Request
62 * Parameters: None (global SetupPacket and EP0Buf)
63 * Return Value: TRUE - Success, FALSE - Error
64 */
65
66 BOOL HID_SetReport (void) {
67 1
68 1 /* ReportID = SetupPacket.wValue.WB.L; */
69 1 switch (SetupPacket.wValue.WB.H) {
70 2 case HID_REPORT_INPUT:
71 2 return (FALSE); /* Not Supported */
72 2 case HID_REPORT_OUTPUT:
73 2 /* ... = EP0Buf[]; */
74 2 /* break; */
75 2 return (FALSE); /* Not Supported */
76 2 case HID_REPORT_FEATURE:
77 2 return (FALSE); /* Not Supported */
78 2 }
79 1 return (TRUE);
80 1 }
81
82
83 /*
84 * HID Get Idle Request Callback
85 * Called automatically on HID Get Idle Request
86 * Parameters: None (global SetupPacket and EP0Buf)
87 * Return Value: TRUE - Success, FALSE - Error
88 */
89
90 BOOL HID_GetIdle (void) {
91 1
92 1 EP0Buf[0] = HID_IdleTime[SetupPacket.wValue.WB.L];
93 1 return (TRUE);
94 1 }
95
96
97 /*
98 * HID Set Idle Request Callback
99 * Called automatically on HID Set Idle Request
100 * Parameters: None (global SetupPacket)
101 * Return Value: TRUE - Success, FALSE - Error
102 */
103
104 BOOL HID_SetIdle (void) {
105 1
106 1 HID_IdleTime[SetupPacket.wValue.WB.L] = SetupPacket.wValue.WB.H;
107 1
108 1 /* Idle Handling if needed */
109 1 /* ... */
110 1
111 1 return (TRUE);
112 1 }
113
114
115 /*
116 * HID Get Protocol Request Callback
117 * Called automatically on HID Get Protocol Request
118 * Parameters: None (global SetupPacket)
119 * Return Value: TRUE - Success, FALSE - Error
120 */
121
122 BOOL HID_GetProtocol (void) {
123 1
124 1 EP0Buf[0] = HID_Protocol;
ARM COMPILER V2.53, hiduser 27/04/07 16:47:01 PAGE 3
125 1 return (TRUE);
126 1 }
127
128
129 /*
130 * HID Set Protocol Request Callback
131 * Called automatically on HID Set Protocol Request
132 * Parameters: None (global SetupPacket)
133 * Return Value: TRUE - Success, FALSE - Error
134 */
135
136 BOOL HID_SetProtocol (void) {
137 1
138 1 HID_Protocol = SetupPacket.wValue.WB.L;
139 1
140 1 /* Protocol Handling if needed */
141 1 /* ... */
142 1
143 1 return (TRUE);
144 1 }
ARM COMPILER V2.53, hiduser 27/04/07 16:47:01 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN DATA (EP0Buf)
EXTERN DATA (SetupPacket)
EXTERN DATA (MouseInReport)
EXTERN CODE16 (GetMouseInReport?T)
*** PUBLICS:
PUBLIC HID_GetReport?T
PUBLIC HID_SetReport?T
PUBLIC HID_GetIdle?T
PUBLIC HID_SetIdle?T
PUBLIC HID_GetProtocol?T
PUBLIC HID_SetProtocol?T
PUBLIC HID_Protocol
PUBLIC HID_IdleTime
*** DATA SEGMENT '?DT0?hiduser':
00000000 HID_Protocol:
00000000 DS 1
00000001 HID_IdleTime:
00000001 DS 1
*** CODE SEGMENT '?PR?HID_GetReport?T?hiduser':
37: BOOL HID_GetReport (void) {
00000000 B500 PUSH {LR}
00000002 ; SCOPE-START
41: switch (SetupPacket.wValue.WB.H) {
00000002 4800 LDR R0,=SetupPacket + 0x3 ; SetupPacket+3
00000004 7800 LDRB R0,[R0,#0x0] ; SetupPacket+3
00000006 2802 CMP R0,#0x2
00000008 D011 BEQ L_3 ; T=0x0000002E
0000000A 2803 CMP R0,#0x3
0000000C D011 BEQ L_4 ; T=0x00000032
0000000E 2801 CMP R0,#0x1
00000010 D111 BNE L_1 ; T=0x00000036
42: case HID_REPORT_INPUT:
00000012 L_2:
43: GetMouseInReport();
00000012 F7FF BL GetMouseInReport?T ; T=0x0001 (1)
00000014 FFF5 BL GetMouseInReport?T ; T=0x0001 (2)
44: for (i = 0; i < sizeof(MouseInReport); i++) {
00000016 2000 MOV R0,#0x0
00000018 ---- Variable 'i' assigned to Register 'R0' ----
00000018 L_8:
45: EP0Buf[i] = MouseInReport[i];
00000018 1C02 MOV R2,R0 ; i
0000001A 4800 LDR R1,=MouseInReport ; MouseInReport
0000001C 5C89 LDRB R1,[R1,R2]
0000001E 1C03 MOV R3,R0 ; i
00000020 4800 LDR R2,=EP0Buf ; EP0Buf
00000022 54D1 STRB R1,[R2,R3]
46: }
00000024 3001 ADD R0,#0x1
00000026 1C01 MOV R1,R0 ; i
00000028 2904 CMP R1,#0x4 ; i
0000002A DBF5 BLT L_8 ; T=0x00000018
47: break;
0000002C E003 B L_1 ; T=0x00000036
48: case HID_REPORT_OUTPUT:
0000002E L_3:
49: return (FALSE); /* Not Supported */
0000002E 2000 MOV R0,#0x0
00000030 E002 B L_10 ; T=0x00000038
ARM COMPILER V2.53, hiduser 27/04/07 16:47:01 PAGE 5
50: case HID_REPORT_FEATURE:
00000032 L_4:
53: return (FALSE); /* Not Supported */
00000032 2000 MOV R0,#0x0
00000034 E000 B L_10 ; T=0x00000038
54: }
00000036 L_1:
55: return (TRUE);
00000036 2001 MOV R0,#0x1
00000038 ; SCOPE-END
56: }
00000038 L_10:
00000038 BC08 POP {R3}
0000003A 4718 BX R3
0000003C ENDP ; 'HID_GetReport?T'
*** CODE SEGMENT '?PR?HID_SetReport?T?hiduser':
69: switch (SetupPacket.wValue.WB.H) {
00000000 4800 LDR R0,=SetupPacket + 0x3 ; SetupPacket+3
00000002 7800 LDRB R0,[R0,#0x0] ; SetupPacket+3
00000004 2802 CMP R0,#0x2
00000006 D005 BEQ L_13 ; T=0x00000014
00000008 2803 CMP R0,#0x3
0000000A D005 BEQ L_14 ; T=0x00000018
0000000C 2801 CMP R0,#0x1
0000000E D105 BNE L_11 ; T=0x0000001C
70: case HID_REPORT_INPUT:
00000010 L_12:
71: return (FALSE); /* Not Supported */
00000010 2000 MOV R0,#0x0
00000012 E004 B L_15 ; T=0x0000001E
72: case HID_REPORT_OUTPUT:
00000014 L_13:
75: return (FALSE); /* Not Supported */
00000014 2000 MOV R0,#0x0
00000016 E002 B L_15 ; T=0x0000001E
76: case HID_REPORT_FEATURE:
00000018 L_14:
77: return (FALSE); /* Not Supported */
00000018 2000 MOV R0,#0x0
0000001A E000 B L_15 ; T=0x0000001E
78: }
0000001C L_11:
79: return (TRUE);
0000001C 2001 MOV R0,#0x1
80: }
0000001E L_15:
0000001E 4770 BX R14
00000020 ENDP ; 'HID_SetReport?T'
*** CODE SEGMENT '?PR?HID_GetIdle?T?hiduser':
92: EP0Buf[0] = HID_IdleTime[SetupPacket.wValue.WB.L];
00000000 4800 LDR R0,=SetupPacket + 0x2 ; SetupPacket+2
00000002 7800 LDRB R0,[R0,#0x0] ; SetupPacket+2
00000004 1C01 MOV R1,R0
00000006 4800 LDR R0,=HID_IdleTime ; HID_IdleTime
00000008 1840 ADD R0,R1 ; HID_IdleTime
0000000A 7801 LDRB R1,[R0,#0x0]
0000000C 4800 LDR R0,=EP0Buf ; EP0Buf
0000000E 7001 STRB R1,[R0,#0x0] ; EP0Buf
93: return (TRUE);
00000010 2001 MOV R0,#0x1
94: }
00000012 4770 BX R14
00000014 ENDP ; 'HID_GetIdle?T'
*** CODE SEGMENT '?PR?HID_SetIdle?T?hiduser':
106: HID_IdleTime[SetupPacket.wValue.WB.L] = SetupPacket.wValue.WB.H;
00000000 4800 LDR R0,=SetupPacket + 0x3 ; SetupPacket+3
ARM COMPILER V2.53, hiduser 27/04/07 16:47:01 PAGE 6
00000002 7801 LDRB R1,[R0,#0x0] ; SetupPacket+3
00000004 4800 LDR R0,=SetupPacket + 0x2 ; SetupPacket+2
00000006 7800 LDRB R0,[R0,#0x0] ; SetupPacket+2
00000008 1C02 MOV R2,R0
0000000A 4800 LDR R0,=HID_IdleTime ; HID_IdleTime
0000000C 1880 ADD R0,R2 ; HID_IdleTime
0000000E 7001 STRB R1,[R0,#0x0]
111: return (TRUE);
00000010 2001 MOV R0,#0x1
112: }
00000012 4770 BX R14
00000014 ENDP ; 'HID_SetIdle?T'
*** CODE SEGMENT '?PR?HID_GetProtocol?T?hiduser':
124: EP0Buf[0] = HID_Protocol;
00000000 4800 LDR R0,=HID_Protocol ; HID_Protocol
00000002 7801 LDRB R1,[R0,#0x0] ; HID_Protocol
00000004 4800 LDR R0,=EP0Buf ; EP0Buf
00000006 7001 STRB R1,[R0,#0x0] ; EP0Buf
125: return (TRUE);
00000008 2001 MOV R0,#0x1
126: }
0000000A 4770 BX R14
0000000C ENDP ; 'HID_GetProtocol?T'
*** CODE SEGMENT '?PR?HID_SetProtocol?T?hiduser':
138: HID_Protocol = SetupPacket.wValue.WB.L;
00000000 4800 LDR R0,=SetupPacket + 0x2 ; SetupPacket+2
00000002 7801 LDRB R1,[R0,#0x0] ; SetupPacket+2
00000004 4800 LDR R0,=HID_Protocol ; HID_Protocol
00000006 7001 STRB R1,[R0,#0x0] ; HID_Protocol
143: return (TRUE);
00000008 2001 MOV R0,#0x1
144: }
0000000A 4770 BX R14
0000000C ENDP ; 'HID_SetProtocol?T'
Module Information Static
----------------------------------
code size = ------
data size = 2
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -