1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
|
ARM GAS /tmp/ccE5JjBw.s page 1
1 .cpu cortex-m0
2 .eabi_attribute 20, 1
3 .eabi_attribute 21, 1
4 .eabi_attribute 23, 3
5 .eabi_attribute 24, 1
6 .eabi_attribute 25, 1
7 .eabi_attribute 26, 1
8 .eabi_attribute 30, 1
9 .eabi_attribute 34, 0
10 .eabi_attribute 18, 4
11 .file "usbd_hid.c"
12 .text
13 .Ltext0:
14 .cfi_sections .debug_frame
15 .section .text.USBD_HID_GetCfgDesc,"ax",%progbits
16 .align 1
17 .syntax unified
18 .code 16
19 .thumb_func
20 .fpu softvfp
22 USBD_HID_GetCfgDesc:
23 .LFB48:
24 .file 1 "Src/usbd_hid.c"
1:Src/usbd_hid.c **** /**
2:Src/usbd_hid.c **** ******************************************************************************
3:Src/usbd_hid.c **** * @file usbd_hid.c
4:Src/usbd_hid.c **** * @author MCD Application Team
5:Src/usbd_hid.c **** * @version V2.4.2
6:Src/usbd_hid.c **** * @date 11-December-2015
7:Src/usbd_hid.c **** * @brief This file provides the HID core functions.
8:Src/usbd_hid.c **** *
9:Src/usbd_hid.c **** * @verbatim
10:Src/usbd_hid.c **** *
11:Src/usbd_hid.c **** * ===================================================================
12:Src/usbd_hid.c **** * HID Class Description
13:Src/usbd_hid.c **** * ===================================================================
14:Src/usbd_hid.c **** * This module manages the HID class V1.11 following the "Device Class Definition
15:Src/usbd_hid.c **** * for Human Interface Devices (HID) Version 1.11 Jun 27, 2001".
16:Src/usbd_hid.c **** * This driver implements the following aspects of the specification:
17:Src/usbd_hid.c **** * - The Boot Interface Subclass
18:Src/usbd_hid.c **** * - The Mouse protocol
19:Src/usbd_hid.c **** * - Usage Page : Generic Desktop
20:Src/usbd_hid.c **** * - Usage : Joystick
21:Src/usbd_hid.c **** * - Collection : Application
22:Src/usbd_hid.c **** *
23:Src/usbd_hid.c **** * @note In HS mode and when the DMA is used, all variables and data structures
24:Src/usbd_hid.c **** * dealing with the DMA during the transaction process should be 32-bit aligned.
25:Src/usbd_hid.c **** *
26:Src/usbd_hid.c **** *
27:Src/usbd_hid.c **** * @endverbatim
28:Src/usbd_hid.c **** *
29:Src/usbd_hid.c **** ******************************************************************************
30:Src/usbd_hid.c **** * @attention
31:Src/usbd_hid.c **** *
32:Src/usbd_hid.c **** * <h2><center>© COPYRIGHT 2015 STMicroelectronics</center></h2>
33:Src/usbd_hid.c **** *
34:Src/usbd_hid.c **** * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
ARM GAS /tmp/ccE5JjBw.s page 2
35:Src/usbd_hid.c **** * You may not use this file except in compliance with the License.
36:Src/usbd_hid.c **** * You may obtain a copy of the License at:
37:Src/usbd_hid.c **** *
38:Src/usbd_hid.c **** * http://www.st.com/software_license_agreement_liberty_v2
39:Src/usbd_hid.c **** *
40:Src/usbd_hid.c **** * Unless required by applicable law or agreed to in writing, software
41:Src/usbd_hid.c **** * distributed under the License is distributed on an "AS IS" BASIS,
42:Src/usbd_hid.c **** * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43:Src/usbd_hid.c **** * See the License for the specific language governing permissions and
44:Src/usbd_hid.c **** * limitations under the License.
45:Src/usbd_hid.c **** *
46:Src/usbd_hid.c **** ******************************************************************************
47:Src/usbd_hid.c **** */
48:Src/usbd_hid.c ****
49:Src/usbd_hid.c **** /* Includes ------------------------------------------------------------------*/
50:Src/usbd_hid.c **** #include "usbd_hid.h"
51:Src/usbd_hid.c **** #include "usbd_desc.h"
52:Src/usbd_hid.c **** #include "usbd_ctlreq.h"
53:Src/usbd_hid.c ****
54:Src/usbd_hid.c ****
55:Src/usbd_hid.c **** /** @addtogroup STM32_USB_DEVICE_LIBRARY
56:Src/usbd_hid.c **** * @{
57:Src/usbd_hid.c **** */
58:Src/usbd_hid.c ****
59:Src/usbd_hid.c ****
60:Src/usbd_hid.c **** /** @defgroup USBD_HID
61:Src/usbd_hid.c **** * @brief usbd core module
62:Src/usbd_hid.c **** * @{
63:Src/usbd_hid.c **** */
64:Src/usbd_hid.c ****
65:Src/usbd_hid.c **** /** @defgroup USBD_HID_Private_TypesDefinitions
66:Src/usbd_hid.c **** * @{
67:Src/usbd_hid.c **** */
68:Src/usbd_hid.c **** /**
69:Src/usbd_hid.c **** * @}
70:Src/usbd_hid.c **** */
71:Src/usbd_hid.c ****
72:Src/usbd_hid.c ****
73:Src/usbd_hid.c **** /** @defgroup USBD_HID_Private_Defines
74:Src/usbd_hid.c **** * @{
75:Src/usbd_hid.c **** */
76:Src/usbd_hid.c ****
77:Src/usbd_hid.c **** /**
78:Src/usbd_hid.c **** * @}
79:Src/usbd_hid.c **** */
80:Src/usbd_hid.c ****
81:Src/usbd_hid.c ****
82:Src/usbd_hid.c **** /** @defgroup USBD_HID_Private_Macros
83:Src/usbd_hid.c **** * @{
84:Src/usbd_hid.c **** */
85:Src/usbd_hid.c **** /**
86:Src/usbd_hid.c **** * @}
87:Src/usbd_hid.c **** */
88:Src/usbd_hid.c ****
89:Src/usbd_hid.c ****
90:Src/usbd_hid.c ****
91:Src/usbd_hid.c ****
ARM GAS /tmp/ccE5JjBw.s page 3
92:Src/usbd_hid.c **** /** @defgroup USBD_HID_Private_FunctionPrototypes
93:Src/usbd_hid.c **** * @{
94:Src/usbd_hid.c **** */
95:Src/usbd_hid.c ****
96:Src/usbd_hid.c ****
97:Src/usbd_hid.c **** static uint8_t USBD_HID_Init (USBD_HandleTypeDef *pdev,
98:Src/usbd_hid.c **** uint8_t cfgidx);
99:Src/usbd_hid.c ****
100:Src/usbd_hid.c **** static uint8_t USBD_HID_DeInit (USBD_HandleTypeDef *pdev,
101:Src/usbd_hid.c **** uint8_t cfgidx);
102:Src/usbd_hid.c ****
103:Src/usbd_hid.c **** static uint8_t USBD_HID_Setup (USBD_HandleTypeDef *pdev,
104:Src/usbd_hid.c **** USBD_SetupReqTypedef *req);
105:Src/usbd_hid.c ****
106:Src/usbd_hid.c **** static uint8_t *USBD_HID_GetCfgDesc (uint16_t *length);
107:Src/usbd_hid.c ****
108:Src/usbd_hid.c **** static uint8_t *USBD_HID_GetDeviceQualifierDesc (uint16_t *length);
109:Src/usbd_hid.c ****
110:Src/usbd_hid.c **** static uint8_t USBD_HID_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
111:Src/usbd_hid.c ****
112:Src/usbd_hid.c ****
113:Src/usbd_hid.c **** static uint8_t USBD_HID_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum);
114:Src/usbd_hid.c **** /**
115:Src/usbd_hid.c **** * @}
116:Src/usbd_hid.c **** */
117:Src/usbd_hid.c ****
118:Src/usbd_hid.c **** /** @defgroup USBD_HID_Private_Variables
119:Src/usbd_hid.c **** * @{
120:Src/usbd_hid.c **** */
121:Src/usbd_hid.c ****
122:Src/usbd_hid.c **** USBD_ClassTypeDef USBD_HID =
123:Src/usbd_hid.c **** {
124:Src/usbd_hid.c **** USBD_HID_Init,
125:Src/usbd_hid.c **** USBD_HID_DeInit,
126:Src/usbd_hid.c **** USBD_HID_Setup,
127:Src/usbd_hid.c **** NULL, /*EP0_TxSent*/
128:Src/usbd_hid.c **** NULL, /*EP0_RxReady*/
129:Src/usbd_hid.c **** USBD_HID_DataIn, /*DataIn*/
130:Src/usbd_hid.c **** USBD_HID_DataOut, /*DataOut*/
131:Src/usbd_hid.c **** NULL, /*SOF */
132:Src/usbd_hid.c **** NULL,
133:Src/usbd_hid.c **** NULL,
134:Src/usbd_hid.c **** USBD_HID_GetCfgDesc,
135:Src/usbd_hid.c **** USBD_HID_GetCfgDesc,
136:Src/usbd_hid.c **** USBD_HID_GetCfgDesc,
137:Src/usbd_hid.c **** USBD_HID_GetDeviceQualifierDesc,
138:Src/usbd_hid.c **** };
139:Src/usbd_hid.c ****
140:Src/usbd_hid.c **** /* USB HID device Configuration Descriptor */
141:Src/usbd_hid.c **** __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END =
142:Src/usbd_hid.c **** {
143:Src/usbd_hid.c **** 0x09, /* bLength: Configuration Descriptor size */
144:Src/usbd_hid.c **** USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
145:Src/usbd_hid.c **** USB_HID_CONFIG_DESC_SIZ,
146:Src/usbd_hid.c **** /* wTotalLength: Bytes returned */
147:Src/usbd_hid.c **** 0x00,
148:Src/usbd_hid.c **** 0x01, /*bNumInterfaces: 1 interface*/
ARM GAS /tmp/ccE5JjBw.s page 4
149:Src/usbd_hid.c **** 0x01, /*bConfigurationValue: Configuration value*/
150:Src/usbd_hid.c **** 0x00, /*iConfiguration: Index of string descriptor describing
151:Src/usbd_hid.c **** the configuration*/
152:Src/usbd_hid.c **** 0xE0, /*bmAttributes: bus powered and Support Remote Wake-up */
153:Src/usbd_hid.c **** 0x32, /*MaxPower 100 mA: this current is used for detecting Vbus*/
154:Src/usbd_hid.c ****
155:Src/usbd_hid.c **** /************** Descriptor of Joystick Mouse interface ****************/
156:Src/usbd_hid.c **** /* 09 */
157:Src/usbd_hid.c **** 0x09, /*bLength: Interface Descriptor size*/
158:Src/usbd_hid.c **** USB_DESC_TYPE_INTERFACE,/*bDescriptorType: Interface descriptor type*/
159:Src/usbd_hid.c **** 0x00, /*bInterfaceNumber: Number of Interface*/
160:Src/usbd_hid.c **** 0x00, /*bAlternateSetting: Alternate setting*/
161:Src/usbd_hid.c **** HID_NUM_EP,
162:Src/usbd_hid.c ****
163:Src/usbd_hid.c **** 0x03, /*bInterfaceClass: HID*/
164:Src/usbd_hid.c ****
165:Src/usbd_hid.c **** 0x01, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/
166:Src/usbd_hid.c **** 0x01, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
167:Src/usbd_hid.c **** 0, /*iInterface: Index of string descriptor*/
168:Src/usbd_hid.c **** /******************** Descriptor of Joystick Mouse HID ********************/
169:Src/usbd_hid.c **** /* 18 */
170:Src/usbd_hid.c **** 0x09, /*bLength: HID Descriptor size*/
171:Src/usbd_hid.c **** HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
172:Src/usbd_hid.c **** 0x11, /*bcdHID: HID Class Spec release number*/
173:Src/usbd_hid.c **** 0x01,
174:Src/usbd_hid.c **** 0x00, /*bCountryCode: Hardware target country*/
175:Src/usbd_hid.c **** 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/
176:Src/usbd_hid.c **** 0x22, /*bDescriptorType*/
177:Src/usbd_hid.c **** HID_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
178:Src/usbd_hid.c **** 0x00,
179:Src/usbd_hid.c **** /******************** Descriptor of Mouse endpoint ********************/
180:Src/usbd_hid.c **** /* 27 */
181:Src/usbd_hid.c **** 0x07, /*bLength: Endpoint Descriptor size*/
182:Src/usbd_hid.c **** USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/
183:Src/usbd_hid.c ****
184:Src/usbd_hid.c **** HID_EPIN_ADDR, /*bEndpointAddress: Endpoint Address (IN)*/
185:Src/usbd_hid.c **** 0x03, /*bmAttributes: Interrupt endpoint*/
186:Src/usbd_hid.c **** HID_EPIN_SIZE, /*wMaxPacketSize: 4 Byte max */
187:Src/usbd_hid.c **** 0x00,
188:Src/usbd_hid.c **** HID_FS_BINTERVAL, /*bInterval: Polling Interval (10 ms)*/
189:Src/usbd_hid.c **** /* 34 */
190:Src/usbd_hid.c **** #if HID_LED_SUPPORT
191:Src/usbd_hid.c **** 0x07, /*bLength: Endpoint Descriptor size*/
192:Src/usbd_hid.c **** USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/
193:Src/usbd_hid.c ****
194:Src/usbd_hid.c **** HID_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (IN)*/
195:Src/usbd_hid.c **** 0x03, /*bmAttributes: Interrupt endpoint*/
196:Src/usbd_hid.c **** HID_EPOUT_SIZE, /*wMaxPacketSize: 4 Byte max */
197:Src/usbd_hid.c **** 0x00,
198:Src/usbd_hid.c **** HID_FS_BINTERVAL, /*bInterval: Polling Interval (10 ms)*/
199:Src/usbd_hid.c **** #endif
200:Src/usbd_hid.c **** /* 41 */
201:Src/usbd_hid.c ****
202:Src/usbd_hid.c **** } ;
203:Src/usbd_hid.c ****
204:Src/usbd_hid.c **** /* USB HID device Configuration Descriptor */
205:Src/usbd_hid.c **** __ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END =
ARM GAS /tmp/ccE5JjBw.s page 5
206:Src/usbd_hid.c **** {
207:Src/usbd_hid.c **** /* 18 */
208:Src/usbd_hid.c **** 0x09, /*bLength: HID Descriptor size*/
209:Src/usbd_hid.c **** HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
210:Src/usbd_hid.c **** 0x11, /*bcdHID: HID Class Spec release number*/
211:Src/usbd_hid.c **** 0x01,
212:Src/usbd_hid.c **** 0x00, /*bCountryCode: Hardware target country*/
213:Src/usbd_hid.c **** 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/
214:Src/usbd_hid.c **** 0x22, /*bDescriptorType*/
215:Src/usbd_hid.c **** HID_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
216:Src/usbd_hid.c **** 0x00,
217:Src/usbd_hid.c **** };
218:Src/usbd_hid.c ****
219:Src/usbd_hid.c **** /* USB Standard Device Descriptor */
220:Src/usbd_hid.c **** __ALIGN_BEGIN static uint8_t USBD_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END
221:Src/usbd_hid.c **** {
222:Src/usbd_hid.c **** USB_LEN_DEV_QUALIFIER_DESC,
223:Src/usbd_hid.c **** USB_DESC_TYPE_DEVICE_QUALIFIER,
224:Src/usbd_hid.c **** 0x00,
225:Src/usbd_hid.c **** 0x02,
226:Src/usbd_hid.c **** 0x00,
227:Src/usbd_hid.c **** 0x00,
228:Src/usbd_hid.c **** 0x00,
229:Src/usbd_hid.c **** 0x40,
230:Src/usbd_hid.c **** 0x01,
231:Src/usbd_hid.c **** 0x00,
232:Src/usbd_hid.c **** };
233:Src/usbd_hid.c ****
234:Src/usbd_hid.c **** __ALIGN_BEGIN static uint8_t HID_ReportDesc[HID_REPORT_DESC_SIZE] __ALIGN_END =
235:Src/usbd_hid.c **** {
236:Src/usbd_hid.c **** //copy from arduino code https://github.com/arduino-libraries/Keyboard/blob/master/src/Keyb
237:Src/usbd_hid.c ****
238:Src/usbd_hid.c **** 0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
239:Src/usbd_hid.c **** 0x09, 0x06, // Usage (Keyboard)
240:Src/usbd_hid.c **** 0xA1, 0x01, // Collection (Application)
241:Src/usbd_hid.c ****
242:Src/usbd_hid.c **** 0x85, 0x01, // Report ID (1)
243:Src/usbd_hid.c ****
244:Src/usbd_hid.c **** 0x05, 0x07, // Usage Page (Kbrd/Keypad)
245:Src/usbd_hid.c **** 0x19, 0xE0, // Usage Minimum (0xE0)
246:Src/usbd_hid.c **** 0x29, 0xE7, // Usage Maximum (0xE7)
247:Src/usbd_hid.c ****
248:Src/usbd_hid.c **** // it seam we missed the shit ctrl etc .. here
249:Src/usbd_hid.c **** 0x15, 0x00, // Logical Minimum (0)
250:Src/usbd_hid.c **** 0x25, 0x01, // Logical Maximum (1)
251:Src/usbd_hid.c **** 0x75, 0x01, // Report Size (1)
252:Src/usbd_hid.c **** 0x95, 0x08, // Report Count (8)
253:Src/usbd_hid.c **** 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position
254:Src/usbd_hid.c **** 0x95, 0x01, // Report Count (1)
255:Src/usbd_hid.c **** 0x75, 0x08, // Report Size (8)
256:Src/usbd_hid.c **** 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Positio
257:Src/usbd_hid.c **** #if HID_LED_SUPPORT
258:Src/usbd_hid.c **** // --------------------- output report for LED
259:Src/usbd_hid.c **** 0x95, 0x05, // REPORT_COUNT (5)
260:Src/usbd_hid.c **** 0x75, 0x01, // REPORT_SIZE (1)
261:Src/usbd_hid.c **** 0x05, 0x08, // USAGE_PAGE (LEDs)
262:Src/usbd_hid.c **** 0x19, 0x01, // USAGE_MINIMUM (Num Lock)
ARM GAS /tmp/ccE5JjBw.s page 6
263:Src/usbd_hid.c **** 0x29, 0x05, // USAGE_MAXIMUM (Kana)
264:Src/usbd_hid.c **** 0x91, 0x02, // OUTPUT (Data,Var,Abs)
265:Src/usbd_hid.c **** 0x95, 0x01, // REPORT_COUNT (1)
266:Src/usbd_hid.c **** 0x75, 0x03, // REPORT_SIZE (3)
267:Src/usbd_hid.c **** 0x91, 0x03, // OUTPUT (Cnst,Var,Abs)
268:Src/usbd_hid.c **** #endif
269:Src/usbd_hid.c **** 0x95, 0x06, // Report Count (6)
270:Src/usbd_hid.c **** 0x75, 0x08, // Report Size (8)
271:Src/usbd_hid.c **** 0x15, 0x00, // Logical Minimum (0)
272:Src/usbd_hid.c **** 0x25, 0x65, // Logical Maximum (101)
273:Src/usbd_hid.c **** 0x05, 0x07, // Usage Page (Kbrd/Keypad)
274:Src/usbd_hid.c **** 0x19, 0x00, // Usage Minimum (0x00)
275:Src/usbd_hid.c **** 0x29, 0x65, // Usage Maximum (0x65)
276:Src/usbd_hid.c **** 0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Positi
277:Src/usbd_hid.c **** 0xC0, // End Collection
278:Src/usbd_hid.c ****
279:Src/usbd_hid.c **** // 47 bytes
280:Src/usbd_hid.c **** #if HID_MEDIA_REPORT
281:Src/usbd_hid.c **** //help from http://www.microchip.com/forums/m618147.aspx
282:Src/usbd_hid.c **** // this way of describing and sending media control is convenient
283:Src/usbd_hid.c **** // short descriptor that permit all kidn meda by sending "usage" code
284:Src/usbd_hid.c **** // see usb hid spec for full list
285:Src/usbd_hid.c **** // it is possible to define one media key per bit it requires more space
286:Src/usbd_hid.c **** // for descripotor and report ending is tighlyu couple to decriptor
287:Src/usbd_hid.c **** // so it is not as convenient
288:Src/usbd_hid.c **** // one such working code can be find here https://github.com/markwj/hidmedia/blob/master/hi
289:Src/usbd_hid.c **** //
290:Src/usbd_hid.c ****
291:Src/usbd_hid.c **** 0x05, 0x0C, // Usage Page (Consumer)
292:Src/usbd_hid.c **** 0x09, 0x01, // Usage (Consumer Control)
293:Src/usbd_hid.c **** 0xA1, 0x01, // Collection (Application)
294:Src/usbd_hid.c **** 0x85, HID_MEDIA_REPORT, // Report ID (VOLUME_REPORT )
295:Src/usbd_hid.c **** 0x19, 0x00, // Usage Minimum (Unassigned)
296:Src/usbd_hid.c **** 0x2A, 0x3C, 0x02, // Usage Maximum (AC Format)
297:Src/usbd_hid.c **** 0x15, 0x00, // Logical Minimum (0)
298:Src/usbd_hid.c **** 0x26, 0x3C, 0x02, // Logical Maximum (572)
299:Src/usbd_hid.c **** 0x95, 0x01, // Report Count (1)
300:Src/usbd_hid.c **** 0x75, 0x10, // Report Size (16)
301:Src/usbd_hid.c **** 0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Positi
302:Src/usbd_hid.c **** 0xC0, // End Collection
303:Src/usbd_hid.c ****
304:Src/usbd_hid.c **** // how to format the 3 byte report
305:Src/usbd_hid.c **** // byte 0 report ID = 0x02 (VOLUME_REPORT)
306:Src/usbd_hid.c **** // byte 1 media code for ex VOL_UP 0xE9 , VOL_DONW 0xEA ... etc
307:Src/usbd_hid.c **** // byte 2 0x00
308:Src/usbd_hid.c **** // a second report with 0 code shal be send to avoid "key repaeat"
309:Src/usbd_hid.c ****
310:Src/usbd_hid.c **** // 25 bytes
311:Src/usbd_hid.c **** #endif
312:Src/usbd_hid.c **** };
313:Src/usbd_hid.c ****
314:Src/usbd_hid.c **** uint32_t nOutData;
315:Src/usbd_hid.c **** uint8_t OutDataBuffer[HID_EPOUT_SIZE]; // local copy for user (usb fly at same time)
316:Src/usbd_hid.c **** uint8_t OutData[HID_EPOUT_SIZE]; // live usb buffer
317:Src/usbd_hid.c ****
318:Src/usbd_hid.c **** #ifdef DEBUG
319:Src/usbd_hid.c ****
ARM GAS /tmp/ccE5JjBw.s page 7
320:Src/usbd_hid.c **** uint8_t OutDataLog[8*HID_EPOUT_SIZE];
321:Src/usbd_hid.c **** #endif
322:Src/usbd_hid.c **** /**
323:Src/usbd_hid.c **** * @}
324:Src/usbd_hid.c **** */
325:Src/usbd_hid.c ****
326:Src/usbd_hid.c **** /** @defgroup USBD_HID_Private_Functions
327:Src/usbd_hid.c **** * @{
328:Src/usbd_hid.c **** */
329:Src/usbd_hid.c ****
330:Src/usbd_hid.c **** /**
331:Src/usbd_hid.c **** * @brief USBD_HID_Init
332:Src/usbd_hid.c **** * Initialize the HID interface
333:Src/usbd_hid.c **** * @param pdev: device instance
334:Src/usbd_hid.c **** * @param cfgidx: Configuration index
335:Src/usbd_hid.c **** * @retval status
336:Src/usbd_hid.c **** */
337:Src/usbd_hid.c **** static uint8_t USBD_HID_Init (USBD_HandleTypeDef *pdev,
338:Src/usbd_hid.c **** uint8_t cfgidx)
339:Src/usbd_hid.c **** {
340:Src/usbd_hid.c **** uint8_t ret = 0;
341:Src/usbd_hid.c ****
342:Src/usbd_hid.c **** /* Open EP IN */
343:Src/usbd_hid.c **** USBD_LL_OpenEP(pdev,
344:Src/usbd_hid.c **** HID_EPIN_ADDR,
345:Src/usbd_hid.c **** USBD_EP_TYPE_INTR,
346:Src/usbd_hid.c **** HID_EPIN_SIZE);
347:Src/usbd_hid.c **** #if HID_LED_SUPPORT
348:Src/usbd_hid.c **** USBD_LL_OpenEP(pdev,
349:Src/usbd_hid.c **** HID_EPOUT_ADDR,
350:Src/usbd_hid.c **** USBD_EP_TYPE_INTR,
351:Src/usbd_hid.c **** HID_EPOUT_SIZE);
352:Src/usbd_hid.c **** #endif
353:Src/usbd_hid.c ****
354:Src/usbd_hid.c **** pdev->pClassData = USBD_malloc(sizeof (USBD_HID_HandleTypeDef));
355:Src/usbd_hid.c ****
356:Src/usbd_hid.c **** if(pdev->pClassData == NULL)
357:Src/usbd_hid.c **** {
358:Src/usbd_hid.c **** ret = 1;
359:Src/usbd_hid.c **** }
360:Src/usbd_hid.c **** else
361:Src/usbd_hid.c **** {
362:Src/usbd_hid.c **** #if HID_LED_SUPPORT
363:Src/usbd_hid.c **** USBD_LL_PrepareReceive(pdev, HID_EPOUT_ADDR, OutData, HID_EPOUT_SIZE);
364:Src/usbd_hid.c **** #endif
365:Src/usbd_hid.c **** ((USBD_HID_HandleTypeDef *)pdev->pClassData)->state = HID_IDLE;
366:Src/usbd_hid.c ****
367:Src/usbd_hid.c **** }
368:Src/usbd_hid.c **** return ret;
369:Src/usbd_hid.c **** }
370:Src/usbd_hid.c ****
371:Src/usbd_hid.c **** /**
372:Src/usbd_hid.c **** * @brief USBD_HID_Init
373:Src/usbd_hid.c **** * DeInitialize the HID layer
374:Src/usbd_hid.c **** * @param pdev: device instance
375:Src/usbd_hid.c **** * @param cfgidx: Configuration index
376:Src/usbd_hid.c **** * @retval status
ARM GAS /tmp/ccE5JjBw.s page 8
377:Src/usbd_hid.c **** */
378:Src/usbd_hid.c **** static uint8_t USBD_HID_DeInit (USBD_HandleTypeDef *pdev,
379:Src/usbd_hid.c **** uint8_t cfgidx)
380:Src/usbd_hid.c **** {
381:Src/usbd_hid.c **** /* Close HID EPs */
382:Src/usbd_hid.c **** USBD_LL_CloseEP(pdev,
383:Src/usbd_hid.c **** HID_EPIN_ADDR);
384:Src/usbd_hid.c ****
385:Src/usbd_hid.c **** USBD_LL_CloseEP(pdev,
386:Src/usbd_hid.c **** HID_EPOUT_ADDR);
387:Src/usbd_hid.c ****
388:Src/usbd_hid.c **** /* FRee allocated memory */
389:Src/usbd_hid.c **** if(pdev->pClassData != NULL)
390:Src/usbd_hid.c **** {
391:Src/usbd_hid.c **** USBD_free(pdev->pClassData);
392:Src/usbd_hid.c **** pdev->pClassData = NULL;
393:Src/usbd_hid.c **** }
394:Src/usbd_hid.c ****
395:Src/usbd_hid.c **** return USBD_OK;
396:Src/usbd_hid.c **** }
397:Src/usbd_hid.c ****
398:Src/usbd_hid.c **** /**
399:Src/usbd_hid.c **** * @brief USBD_HID_Setup
400:Src/usbd_hid.c **** * Handle the HID specific requests
401:Src/usbd_hid.c **** * @param pdev: instance
402:Src/usbd_hid.c **** * @param req: usb requests
403:Src/usbd_hid.c **** * @retval status
404:Src/usbd_hid.c **** */
405:Src/usbd_hid.c **** static uint8_t USBD_HID_Setup (USBD_HandleTypeDef *pdev,
406:Src/usbd_hid.c **** USBD_SetupReqTypedef *req)
407:Src/usbd_hid.c **** {
408:Src/usbd_hid.c **** uint16_t len = 0;
409:Src/usbd_hid.c **** uint8_t *pbuf = NULL;
410:Src/usbd_hid.c **** USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*) pdev->pClassData;
411:Src/usbd_hid.c ****
412:Src/usbd_hid.c **** switch (req->bmRequest & USB_REQ_TYPE_MASK)
413:Src/usbd_hid.c **** {
414:Src/usbd_hid.c **** case USB_REQ_TYPE_CLASS :
415:Src/usbd_hid.c **** switch (req->bRequest)
416:Src/usbd_hid.c **** {
417:Src/usbd_hid.c ****
418:Src/usbd_hid.c ****
419:Src/usbd_hid.c **** case HID_REQ_SET_PROTOCOL:
420:Src/usbd_hid.c **** hhid->Protocol = (uint8_t)(req->wValue);
421:Src/usbd_hid.c **** break;
422:Src/usbd_hid.c ****
423:Src/usbd_hid.c **** case HID_REQ_GET_PROTOCOL:
424:Src/usbd_hid.c **** USBD_CtlSendData (pdev,
425:Src/usbd_hid.c **** (uint8_t *)&hhid->Protocol,
426:Src/usbd_hid.c **** 1);
427:Src/usbd_hid.c **** break;
428:Src/usbd_hid.c ****
429:Src/usbd_hid.c **** case HID_REQ_SET_IDLE:
430:Src/usbd_hid.c **** hhid->IdleState = (uint8_t)(req->wValue >> 8);
431:Src/usbd_hid.c **** break;
432:Src/usbd_hid.c ****
433:Src/usbd_hid.c **** case HID_REQ_GET_IDLE:
ARM GAS /tmp/ccE5JjBw.s page 9
434:Src/usbd_hid.c **** USBD_CtlSendData (pdev,
435:Src/usbd_hid.c **** (uint8_t *)&hhid->IdleState,
436:Src/usbd_hid.c **** 1);
437:Src/usbd_hid.c **** break;
438:Src/usbd_hid.c ****
439:Src/usbd_hid.c **** default:
440:Src/usbd_hid.c **** USBD_CtlError (pdev, req);
441:Src/usbd_hid.c **** return USBD_FAIL;
442:Src/usbd_hid.c **** }
443:Src/usbd_hid.c **** break;
444:Src/usbd_hid.c ****
445:Src/usbd_hid.c **** case USB_REQ_TYPE_STANDARD:
446:Src/usbd_hid.c **** switch (req->bRequest)
447:Src/usbd_hid.c **** {
448:Src/usbd_hid.c **** case USB_REQ_GET_DESCRIPTOR:
449:Src/usbd_hid.c **** if( req->wValue >> 8 == HID_REPORT_DESC)
450:Src/usbd_hid.c **** {
451:Src/usbd_hid.c **** len = MIN(HID_REPORT_DESC_SIZE , req->wLength);
452:Src/usbd_hid.c **** pbuf = HID_ReportDesc;
453:Src/usbd_hid.c **** }
454:Src/usbd_hid.c **** else if( req->wValue >> 8 == HID_DESCRIPTOR_TYPE)
455:Src/usbd_hid.c **** {
456:Src/usbd_hid.c **** pbuf = USBD_HID_Desc;
457:Src/usbd_hid.c **** len = MIN(USB_HID_DESC_SIZ , req->wLength);
458:Src/usbd_hid.c **** }
459:Src/usbd_hid.c ****
460:Src/usbd_hid.c **** USBD_CtlSendData (pdev,
461:Src/usbd_hid.c **** pbuf,
462:Src/usbd_hid.c **** len);
463:Src/usbd_hid.c ****
464:Src/usbd_hid.c **** break;
465:Src/usbd_hid.c ****
466:Src/usbd_hid.c **** case USB_REQ_GET_INTERFACE :
467:Src/usbd_hid.c **** USBD_CtlSendData (pdev,
468:Src/usbd_hid.c **** (uint8_t *)&hhid->AltSetting,
469:Src/usbd_hid.c **** 1);
470:Src/usbd_hid.c **** break;
471:Src/usbd_hid.c ****
472:Src/usbd_hid.c **** case USB_REQ_SET_INTERFACE :
473:Src/usbd_hid.c **** hhid->AltSetting = (uint8_t)(req->wValue);
474:Src/usbd_hid.c **** break;
475:Src/usbd_hid.c **** }
476:Src/usbd_hid.c **** }
477:Src/usbd_hid.c **** return USBD_OK;
478:Src/usbd_hid.c **** }
479:Src/usbd_hid.c ****
480:Src/usbd_hid.c **** /**
481:Src/usbd_hid.c **** * @brief USBD_HID_SendReport
482:Src/usbd_hid.c **** * Send HID Report
483:Src/usbd_hid.c **** * @param pdev: device instance
484:Src/usbd_hid.c **** * @param buff: pointer to report
485:Src/usbd_hid.c **** * @retval status
486:Src/usbd_hid.c **** */
487:Src/usbd_hid.c **** uint8_t USBD_HID_SendReport (USBD_HandleTypeDef *pdev,
488:Src/usbd_hid.c **** uint8_t *report,
489:Src/usbd_hid.c **** uint16_t len)
490:Src/usbd_hid.c **** {
ARM GAS /tmp/ccE5JjBw.s page 10
491:Src/usbd_hid.c **** USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*)pdev->pClassData;
492:Src/usbd_hid.c ****
493:Src/usbd_hid.c **** if (pdev->dev_state == USBD_STATE_CONFIGURED )
494:Src/usbd_hid.c **** {
495:Src/usbd_hid.c **** if(hhid->state == HID_IDLE)
496:Src/usbd_hid.c **** {
497:Src/usbd_hid.c **** hhid->state = HID_BUSY;
498:Src/usbd_hid.c **** USBD_LL_Transmit (pdev,
499:Src/usbd_hid.c **** HID_EPIN_ADDR,
500:Src/usbd_hid.c **** report,
501:Src/usbd_hid.c **** len);
502:Src/usbd_hid.c **** }
503:Src/usbd_hid.c **** }
504:Src/usbd_hid.c **** return USBD_OK;
505:Src/usbd_hid.c **** }
506:Src/usbd_hid.c ****
507:Src/usbd_hid.c **** /**
508:Src/usbd_hid.c **** * @brief USBD_HID_GetPollingInterval
509:Src/usbd_hid.c **** * return polling interval from endpoint descriptor
510:Src/usbd_hid.c **** * @param pdev: device instance
511:Src/usbd_hid.c **** * @retval polling interval
512:Src/usbd_hid.c **** */
513:Src/usbd_hid.c **** uint32_t USBD_HID_GetPollingInterval (USBD_HandleTypeDef *pdev)
514:Src/usbd_hid.c **** {
515:Src/usbd_hid.c **** uint32_t polling_interval = 0;
516:Src/usbd_hid.c ****
517:Src/usbd_hid.c **** /* HIGH-speed endpoints */
518:Src/usbd_hid.c **** if(pdev->dev_speed == USBD_SPEED_HIGH)
519:Src/usbd_hid.c **** {
520:Src/usbd_hid.c **** /* Sets the data transfer polling interval for high speed transfers.
521:Src/usbd_hid.c **** Values between 1..16 are allowed. Values correspond to interval
522:Src/usbd_hid.c **** of 2 ^ (bInterval-1). This option (8 ms, corresponds to HID_HS_BINTERVAL */
523:Src/usbd_hid.c **** polling_interval = (((1 <<(HID_HS_BINTERVAL - 1)))/8);
524:Src/usbd_hid.c **** }
525:Src/usbd_hid.c **** else /* LOW and FULL-speed endpoints */
526:Src/usbd_hid.c **** {
527:Src/usbd_hid.c **** /* Sets the data transfer polling interval for low and full
528:Src/usbd_hid.c **** speed transfers */
529:Src/usbd_hid.c **** polling_interval = HID_FS_BINTERVAL;
530:Src/usbd_hid.c **** }
531:Src/usbd_hid.c ****
532:Src/usbd_hid.c **** return ((uint32_t)(polling_interval));
533:Src/usbd_hid.c **** }
534:Src/usbd_hid.c ****
535:Src/usbd_hid.c **** /**
536:Src/usbd_hid.c **** * @brief USBD_HID_GetCfgDesc
537:Src/usbd_hid.c **** * return configuration descriptor
538:Src/usbd_hid.c **** * @param speed : current device speed
539:Src/usbd_hid.c **** * @param length : pointer data length
540:Src/usbd_hid.c **** * @retval pointer to descriptor buffer
541:Src/usbd_hid.c **** */
542:Src/usbd_hid.c **** static uint8_t *USBD_HID_GetCfgDesc (uint16_t *length)
543:Src/usbd_hid.c **** {
25 .loc 1 543 0
26 .cfi_startproc
27 @ args = 0, pretend = 0, frame = 0
28 @ frame_needed = 0, uses_anonymous_args = 0
ARM GAS /tmp/ccE5JjBw.s page 11
29 @ link register save eliminated.
30 .LVL0:
544:Src/usbd_hid.c **** *length = sizeof (USBD_HID_CfgDesc);
31 .loc 1 544 0
32 0000 2223 movs r3, #34
33 0002 0380 strh r3, [r0]
545:Src/usbd_hid.c **** return USBD_HID_CfgDesc;
546:Src/usbd_hid.c **** }
34 .loc 1 546 0
35 0004 0048 ldr r0, .L2
36 .LVL1:
37 @ sp needed
38 0006 7047 bx lr
39 .L3:
40 .align 2
41 .L2:
42 0008 00000000 .word .LANCHOR0
43 .cfi_endproc
44 .LFE48:
46 .section .text.USBD_HID_DataIn,"ax",%progbits
47 .align 1
48 .syntax unified
49 .code 16
50 .thumb_func
51 .fpu softvfp
53 USBD_HID_DataIn:
54 .LFB49:
547:Src/usbd_hid.c ****
548:Src/usbd_hid.c ****
549:Src/usbd_hid.c **** /**
550:Src/usbd_hid.c **** * @brief USBD_HID_DataIn
551:Src/usbd_hid.c **** * handle data IN Stage
552:Src/usbd_hid.c **** * @param pdev: device instance
553:Src/usbd_hid.c **** * @param epnum: endpoint index
554:Src/usbd_hid.c **** * @retval status
555:Src/usbd_hid.c **** */
556:Src/usbd_hid.c **** static uint8_t USBD_HID_DataIn (USBD_HandleTypeDef *pdev,
557:Src/usbd_hid.c **** uint8_t epnum)
558:Src/usbd_hid.c **** {
55 .loc 1 558 0
56 .cfi_startproc
57 @ args = 0, pretend = 0, frame = 0
58 @ frame_needed = 0, uses_anonymous_args = 0
59 @ link register save eliminated.
60 .LVL2:
559:Src/usbd_hid.c ****
560:Src/usbd_hid.c **** /* Ensure that the FIFO is empty before a new transfer, this condition could
561:Src/usbd_hid.c **** be caused by a new transfer before the end of the previous transfer */
562:Src/usbd_hid.c **** ((USBD_HID_HandleTypeDef *)pdev->pClassData)->state = HID_IDLE;
61 .loc 1 562 0
62 0000 8623 movs r3, #134
63 0002 9B00 lsls r3, r3, #2
64 0004 C358 ldr r3, [r0, r3]
65 0006 0022 movs r2, #0
66 0008 1A73 strb r2, [r3, #12]
563:Src/usbd_hid.c **** return USBD_OK;
564:Src/usbd_hid.c **** }
ARM GAS /tmp/ccE5JjBw.s page 12
67 .loc 1 564 0
68 000a 0020 movs r0, #0
69 .LVL3:
70 @ sp needed
71 000c 7047 bx lr
72 .cfi_endproc
73 .LFE49:
75 .section .text.USBD_HID_GetDeviceQualifierDesc,"ax",%progbits
76 .align 1
77 .syntax unified
78 .code 16
79 .thumb_func
80 .fpu softvfp
82 USBD_HID_GetDeviceQualifierDesc:
83 .LFB52:
565:Src/usbd_hid.c ****
566:Src/usbd_hid.c ****
567:Src/usbd_hid.c **** __weak void USBD_HID_GetReport(uint8_t * OutData, int len){
568:Src/usbd_hid.c **** /** default do ntohing */
569:Src/usbd_hid.c **** }
570:Src/usbd_hid.c ****
571:Src/usbd_hid.c **** static uint8_t USBD_HID_DataOut (USBD_HandleTypeDef *pdev,
572:Src/usbd_hid.c **** uint8_t epnum)
573:Src/usbd_hid.c **** {
574:Src/usbd_hid.c **** int len;
575:Src/usbd_hid.c ****
576:Src/usbd_hid.c **** #ifdef DEBUG
577:Src/usbd_hid.c **** memcpy(OutDataLog+((nOutData)%8)*8,OutData,8);
578:Src/usbd_hid.c **** #endif
579:Src/usbd_hid.c **** nOutData++;
580:Src/usbd_hid.c **** // data cpy so we can be ready for next usb out and used received data safely
581:Src/usbd_hid.c **** len = USBD_LL_GetRxDataSize (pdev, epnum);
582:Src/usbd_hid.c **** memcpy(OutDataBuffer,OutData, len);
583:Src/usbd_hid.c **** USBD_LL_PrepareReceive(pdev, HID_EPOUT_ADDR, OutData, HID_EPOUT_SIZE);
584:Src/usbd_hid.c **** USBD_HID_GetReport(OutDataBuffer, len);
585:Src/usbd_hid.c **** return USBD_OK;
586:Src/usbd_hid.c **** }
587:Src/usbd_hid.c ****
588:Src/usbd_hid.c ****
589:Src/usbd_hid.c **** /**
590:Src/usbd_hid.c **** * @brief DeviceQualifierDescriptor
591:Src/usbd_hid.c **** * return Device Qualifier descriptor
592:Src/usbd_hid.c **** * @param length : pointer data length
593:Src/usbd_hid.c **** * @retval pointer to descriptor buffer
594:Src/usbd_hid.c **** */
595:Src/usbd_hid.c **** static uint8_t *USBD_HID_GetDeviceQualifierDesc (uint16_t *length)
596:Src/usbd_hid.c **** {
84 .loc 1 596 0
85 .cfi_startproc
86 @ args = 0, pretend = 0, frame = 0
87 @ frame_needed = 0, uses_anonymous_args = 0
88 @ link register save eliminated.
89 .LVL4:
597:Src/usbd_hid.c **** *length = sizeof (USBD_HID_DeviceQualifierDesc);
90 .loc 1 597 0
91 0000 0A23 movs r3, #10
92 0002 0380 strh r3, [r0]
ARM GAS /tmp/ccE5JjBw.s page 13
598:Src/usbd_hid.c **** return USBD_HID_DeviceQualifierDesc;
599:Src/usbd_hid.c **** }
93 .loc 1 599 0
94 0004 0048 ldr r0, .L6
95 .LVL5:
96 @ sp needed
97 0006 7047 bx lr
98 .L7:
99 .align 2
100 .L6:
101 0008 00000000 .word .LANCHOR1
102 .cfi_endproc
103 .LFE52:
105 .section .text.USBD_HID_Setup,"ax",%progbits
106 .align 1
107 .syntax unified
108 .code 16
109 .thumb_func
110 .fpu softvfp
112 USBD_HID_Setup:
113 .LFB45:
407:Src/usbd_hid.c **** uint16_t len = 0;
114 .loc 1 407 0
115 .cfi_startproc
116 @ args = 0, pretend = 0, frame = 0
117 @ frame_needed = 0, uses_anonymous_args = 0
118 .LVL6:
119 0000 10B5 push {r4, lr}
120 .LCFI0:
121 .cfi_def_cfa_offset 8
122 .cfi_offset 4, -8
123 .cfi_offset 14, -4
124 .LVL7:
410:Src/usbd_hid.c ****
125 .loc 1 410 0
126 0002 8623 movs r3, #134
127 0004 9B00 lsls r3, r3, #2
128 0006 C458 ldr r4, [r0, r3]
129 .LVL8:
412:Src/usbd_hid.c **** {
130 .loc 1 412 0
131 0008 0A78 ldrb r2, [r1]
132 000a B93B subs r3, r3, #185
133 000c FF3B subs r3, r3, #255
134 000e 1340 ands r3, r2
135 0010 24D0 beq .L10
136 0012 202B cmp r3, #32
137 0014 52D1 bne .L28
415:Src/usbd_hid.c **** {
138 .loc 1 415 0
139 0016 4B78 ldrb r3, [r1, #1]
140 0018 032B cmp r3, #3
141 001a 10D0 beq .L13
142 001c 07D9 bls .L30
143 001e 0A2B cmp r3, #10
144 0020 13D0 beq .L16
145 0022 0B2B cmp r3, #11
ARM GAS /tmp/ccE5JjBw.s page 14
146 0024 16D1 bne .L12
420:Src/usbd_hid.c **** break;
147 .loc 1 420 0
148 0026 8B78 ldrb r3, [r1, #2]
149 0028 2360 str r3, [r4]
477:Src/usbd_hid.c **** }
150 .loc 1 477 0
151 002a 0020 movs r0, #0
152 .LVL9:
421:Src/usbd_hid.c ****
153 .loc 1 421 0
154 002c 47E0 b .L9
155 .LVL10:
156 .L30:
415:Src/usbd_hid.c **** {
157 .loc 1 415 0
158 002e 022B cmp r3, #2
159 0030 10D1 bne .L12
435:Src/usbd_hid.c **** 1);
160 .loc 1 435 0
161 0032 211D adds r1, r4, #4
162 .LVL11:
434:Src/usbd_hid.c **** (uint8_t *)&hhid->IdleState,
163 .loc 1 434 0
164 0034 0122 movs r2, #1
165 0036 FFF7FEFF bl USBD_CtlSendData
166 .LVL12:
477:Src/usbd_hid.c **** }
167 .loc 1 477 0
168 003a 0020 movs r0, #0
437:Src/usbd_hid.c ****
169 .loc 1 437 0
170 003c 3FE0 b .L9
171 .LVL13:
172 .L13:
424:Src/usbd_hid.c **** (uint8_t *)&hhid->Protocol,
173 .loc 1 424 0
174 003e 0122 movs r2, #1
175 0040 2100 movs r1, r4
176 .LVL14:
177 0042 FFF7FEFF bl USBD_CtlSendData
178 .LVL15:
477:Src/usbd_hid.c **** }
179 .loc 1 477 0
180 0046 0020 movs r0, #0
427:Src/usbd_hid.c ****
181 .loc 1 427 0
182 0048 39E0 b .L9
183 .LVL16:
184 .L16:
430:Src/usbd_hid.c **** break;
185 .loc 1 430 0
186 004a 4B88 ldrh r3, [r1, #2]
187 004c 1B0A lsrs r3, r3, #8
188 004e 6360 str r3, [r4, #4]
477:Src/usbd_hid.c **** }
189 .loc 1 477 0
ARM GAS /tmp/ccE5JjBw.s page 15
190 0050 0020 movs r0, #0
191 .LVL17:
431:Src/usbd_hid.c ****
192 .loc 1 431 0
193 0052 34E0 b .L9
194 .LVL18:
195 .L12:
440:Src/usbd_hid.c **** return USBD_FAIL;
196 .loc 1 440 0
197 0054 FFF7FEFF bl USBD_CtlError
198 .LVL19:
441:Src/usbd_hid.c **** }
199 .loc 1 441 0
200 0058 0220 movs r0, #2
201 005a 30E0 b .L9
202 .LVL20:
203 .L10:
446:Src/usbd_hid.c **** {
204 .loc 1 446 0
205 005c 4B78 ldrb r3, [r1, #1]
206 005e 0A2B cmp r3, #10
207 0060 21D0 beq .L18
208 0062 0B2B cmp r3, #11
209 0064 26D0 beq .L19
210 0066 062B cmp r3, #6
211 0068 01D0 beq .L31
477:Src/usbd_hid.c **** }
212 .loc 1 477 0
213 006a 0020 movs r0, #0
214 .LVL21:
215 006c 27E0 b .L9
216 .LVL22:
217 .L31:
449:Src/usbd_hid.c **** {
218 .loc 1 449 0
219 006e 4B88 ldrh r3, [r1, #2]
220 0070 1B0A lsrs r3, r3, #8
221 0072 222B cmp r3, #34
222 0074 07D0 beq .L32
454:Src/usbd_hid.c **** {
223 .loc 1 454 0
224 0076 212B cmp r3, #33
225 0078 0DD0 beq .L33
409:Src/usbd_hid.c **** USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*) pdev->pClassData;
226 .loc 1 409 0
227 007a 0021 movs r1, #0
228 .LVL23:
408:Src/usbd_hid.c **** uint8_t *pbuf = NULL;
229 .loc 1 408 0
230 007c 0022 movs r2, #0
231 .LVL24:
232 .L23:
460:Src/usbd_hid.c **** pbuf,
233 .loc 1 460 0
234 007e FFF7FEFF bl USBD_CtlSendData
235 .LVL25:
477:Src/usbd_hid.c **** }
ARM GAS /tmp/ccE5JjBw.s page 16
236 .loc 1 477 0
237 0082 0020 movs r0, #0
464:Src/usbd_hid.c ****
238 .loc 1 464 0
239 0084 1BE0 b .L9
240 .LVL26:
241 .L32:
451:Src/usbd_hid.c **** pbuf = HID_ReportDesc;
242 .loc 1 451 0
243 0086 CB88 ldrh r3, [r1, #6]
244 0088 1A1C adds r2, r3, #0
245 008a 482B cmp r3, #72
246 008c 00D9 bls .L22
247 008e 4822 movs r2, #72
248 .L22:
249 0090 92B2 uxth r2, r2
250 .LVL27:
452:Src/usbd_hid.c **** }
251 .loc 1 452 0
252 0092 0B49 ldr r1, .L34
253 .LVL28:
254 0094 F3E7 b .L23
255 .LVL29:
256 .L33:
457:Src/usbd_hid.c **** }
257 .loc 1 457 0
258 0096 CB88 ldrh r3, [r1, #6]
259 0098 1A1C adds r2, r3, #0
260 009a 092B cmp r3, #9
261 009c 00D9 bls .L24
262 009e 0922 movs r2, #9
263 .L24:
264 00a0 92B2 uxth r2, r2
265 .LVL30:
456:Src/usbd_hid.c **** len = MIN(USB_HID_DESC_SIZ , req->wLength);
266 .loc 1 456 0
267 00a2 0849 ldr r1, .L34+4
268 .LVL31:
269 00a4 EBE7 b .L23
270 .LVL32:
271 .L18:
468:Src/usbd_hid.c **** 1);
272 .loc 1 468 0
273 00a6 2100 movs r1, r4
274 .LVL33:
275 00a8 0831 adds r1, r1, #8
467:Src/usbd_hid.c **** (uint8_t *)&hhid->AltSetting,
276 .loc 1 467 0
277 00aa 0122 movs r2, #1
278 00ac FFF7FEFF bl USBD_CtlSendData
279 .LVL34:
477:Src/usbd_hid.c **** }
280 .loc 1 477 0
281 00b0 0020 movs r0, #0
470:Src/usbd_hid.c ****
282 .loc 1 470 0
283 00b2 04E0 b .L9
ARM GAS /tmp/ccE5JjBw.s page 17
284 .LVL35:
285 .L19:
473:Src/usbd_hid.c **** break;
286 .loc 1 473 0
287 00b4 8B78 ldrb r3, [r1, #2]
288 00b6 A360 str r3, [r4, #8]
477:Src/usbd_hid.c **** }
289 .loc 1 477 0
290 00b8 0020 movs r0, #0
291 .LVL36:
474:Src/usbd_hid.c **** }
292 .loc 1 474 0
293 00ba 00E0 b .L9
294 .LVL37:
295 .L28:
477:Src/usbd_hid.c **** }
296 .loc 1 477 0
297 00bc 0020 movs r0, #0
298 .LVL38:
299 .L9:
478:Src/usbd_hid.c ****
300 .loc 1 478 0
301 @ sp needed
302 .LVL39:
303 00be 10BD pop {r4, pc}
304 .L35:
305 .align 2
306 .L34:
307 00c0 00000000 .word .LANCHOR2
308 00c4 00000000 .word .LANCHOR3
309 .cfi_endproc
310 .LFE45:
312 .section .text.USBD_HID_DeInit,"ax",%progbits
313 .align 1
314 .syntax unified
315 .code 16
316 .thumb_func
317 .fpu softvfp
319 USBD_HID_DeInit:
320 .LFB44:
380:Src/usbd_hid.c **** /* Close HID EPs */
321 .loc 1 380 0
322 .cfi_startproc
323 @ args = 0, pretend = 0, frame = 0
324 @ frame_needed = 0, uses_anonymous_args = 0
325 .LVL40:
326 0000 10B5 push {r4, lr}
327 .LCFI1:
328 .cfi_def_cfa_offset 8
329 .cfi_offset 4, -8
330 .cfi_offset 14, -4
331 0002 0400 movs r4, r0
382:Src/usbd_hid.c **** HID_EPIN_ADDR);
332 .loc 1 382 0
333 0004 8121 movs r1, #129
334 .LVL41:
335 0006 FFF7FEFF bl USBD_LL_CloseEP
ARM GAS /tmp/ccE5JjBw.s page 18
336 .LVL42:
385:Src/usbd_hid.c **** HID_EPOUT_ADDR);
337 .loc 1 385 0
338 000a 0121 movs r1, #1
339 000c 2000 movs r0, r4
340 000e FFF7FEFF bl USBD_LL_CloseEP
341 .LVL43:
389:Src/usbd_hid.c **** {
342 .loc 1 389 0
343 0012 8623 movs r3, #134
344 0014 9B00 lsls r3, r3, #2
345 0016 E058 ldr r0, [r4, r3]
346 0018 0028 cmp r0, #0
347 001a 05D0 beq .L37
391:Src/usbd_hid.c **** pdev->pClassData = NULL;
348 .loc 1 391 0
349 001c FFF7FEFF bl free
350 .LVL44:
392:Src/usbd_hid.c **** }
351 .loc 1 392 0
352 0020 8623 movs r3, #134
353 0022 9B00 lsls r3, r3, #2
354 0024 0022 movs r2, #0
355 0026 E250 str r2, [r4, r3]
356 .L37:
396:Src/usbd_hid.c ****
357 .loc 1 396 0
358 0028 0020 movs r0, #0
359 @ sp needed
360 .LVL45:
361 002a 10BD pop {r4, pc}
362 .cfi_endproc
363 .LFE44:
365 .section .text.USBD_HID_Init,"ax",%progbits
366 .align 1
367 .syntax unified
368 .code 16
369 .thumb_func
370 .fpu softvfp
372 USBD_HID_Init:
373 .LFB43:
339:Src/usbd_hid.c **** uint8_t ret = 0;
374 .loc 1 339 0
375 .cfi_startproc
376 @ args = 0, pretend = 0, frame = 0
377 @ frame_needed = 0, uses_anonymous_args = 0
378 .LVL46:
379 0000 10B5 push {r4, lr}
380 .LCFI2:
381 .cfi_def_cfa_offset 8
382 .cfi_offset 4, -8
383 .cfi_offset 14, -4
384 0002 0400 movs r4, r0
385 .LVL47:
343:Src/usbd_hid.c **** HID_EPIN_ADDR,
386 .loc 1 343 0
387 0004 1023 movs r3, #16
ARM GAS /tmp/ccE5JjBw.s page 19
388 0006 0322 movs r2, #3
389 0008 8121 movs r1, #129
390 .LVL48:
391 000a FFF7FEFF bl USBD_LL_OpenEP
392 .LVL49:
354:Src/usbd_hid.c ****
393 .loc 1 354 0
394 000e 1020 movs r0, #16
395 0010 FFF7FEFF bl malloc
396 .LVL50:
397 0014 8623 movs r3, #134
398 0016 9B00 lsls r3, r3, #2
399 0018 E050 str r0, [r4, r3]
356:Src/usbd_hid.c **** {
400 .loc 1 356 0
401 001a 0028 cmp r0, #0
402 001c 03D0 beq .L40
365:Src/usbd_hid.c ****
403 .loc 1 365 0
404 001e 0023 movs r3, #0
405 0020 0373 strb r3, [r0, #12]
340:Src/usbd_hid.c ****
406 .loc 1 340 0
407 0022 0020 movs r0, #0
408 .L39:
409 .LVL51:
369:Src/usbd_hid.c ****
410 .loc 1 369 0
411 @ sp needed
412 .LVL52:
413 0024 10BD pop {r4, pc}
414 .LVL53:
415 .L40:
358:Src/usbd_hid.c **** }
416 .loc 1 358 0
417 0026 0120 movs r0, #1
418 0028 FCE7 b .L39
419 .cfi_endproc
420 .LFE43:
422 .section .text.USBD_HID_SendReport,"ax",%progbits
423 .align 1
424 .global USBD_HID_SendReport
425 .syntax unified
426 .code 16
427 .thumb_func
428 .fpu softvfp
430 USBD_HID_SendReport:
431 .LFB46:
490:Src/usbd_hid.c **** USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*)pdev->pClassData;
432 .loc 1 490 0
433 .cfi_startproc
434 @ args = 0, pretend = 0, frame = 0
435 @ frame_needed = 0, uses_anonymous_args = 0
436 .LVL54:
437 0000 70B5 push {r4, r5, r6, lr}
438 .LCFI3:
439 .cfi_def_cfa_offset 16
ARM GAS /tmp/ccE5JjBw.s page 20
440 .cfi_offset 4, -16
441 .cfi_offset 5, -12
442 .cfi_offset 6, -8
443 .cfi_offset 14, -4
491:Src/usbd_hid.c ****
444 .loc 1 491 0
445 0002 8624 movs r4, #134
446 0004 A400 lsls r4, r4, #2
447 0006 0559 ldr r5, [r0, r4]
448 .LVL55:
493:Src/usbd_hid.c **** {
449 .loc 1 493 0
450 0008 1C3C subs r4, r4, #28
451 000a 045D ldrb r4, [r0, r4]
452 000c 032C cmp r4, #3
453 000e 01D0 beq .L43
454 .LVL56:
455 .L42:
505:Src/usbd_hid.c ****
456 .loc 1 505 0
457 0010 0020 movs r0, #0
458 @ sp needed
459 .LVL57:
460 0012 70BD pop {r4, r5, r6, pc}
461 .LVL58:
462 .L43:
495:Src/usbd_hid.c **** {
463 .loc 1 495 0
464 0014 2B7B ldrb r3, [r5, #12]
465 0016 002B cmp r3, #0
466 0018 FAD1 bne .L42
497:Src/usbd_hid.c **** USBD_LL_Transmit (pdev,
467 .loc 1 497 0
468 001a 0133 adds r3, r3, #1
469 001c 2B73 strb r3, [r5, #12]
498:Src/usbd_hid.c **** HID_EPIN_ADDR,
470 .loc 1 498 0
471 001e 1300 movs r3, r2
472 0020 0A00 movs r2, r1
473 .LVL59:
474 0022 8121 movs r1, #129
475 .LVL60:
476 0024 FFF7FEFF bl USBD_LL_Transmit
477 .LVL61:
478 0028 F2E7 b .L42
479 .cfi_endproc
480 .LFE46:
482 .section .text.USBD_HID_GetPollingInterval,"ax",%progbits
483 .align 1
484 .global USBD_HID_GetPollingInterval
485 .syntax unified
486 .code 16
487 .thumb_func
488 .fpu softvfp
490 USBD_HID_GetPollingInterval:
491 .LFB47:
514:Src/usbd_hid.c **** uint32_t polling_interval = 0;
ARM GAS /tmp/ccE5JjBw.s page 21
492 .loc 1 514 0
493 .cfi_startproc
494 @ args = 0, pretend = 0, frame = 0
495 @ frame_needed = 0, uses_anonymous_args = 0
496 @ link register save eliminated.
497 .LVL62:
518:Src/usbd_hid.c **** {
498 .loc 1 518 0
499 0000 037C ldrb r3, [r0, #16]
500 0002 002B cmp r3, #0
501 0004 01D0 beq .L47
529:Src/usbd_hid.c **** }
502 .loc 1 529 0
503 0006 0A20 movs r0, #10
504 .LVL63:
505 .L44:
533:Src/usbd_hid.c ****
506 .loc 1 533 0
507 @ sp needed
508 0008 7047 bx lr
509 .LVL64:
510 .L47:
523:Src/usbd_hid.c **** }
511 .loc 1 523 0
512 000a 0820 movs r0, #8
513 .LVL65:
514 000c FCE7 b .L44
515 .cfi_endproc
516 .LFE47:
518 .section .text.USBD_HID_GetReport,"ax",%progbits
519 .align 1
520 .weak USBD_HID_GetReport
521 .syntax unified
522 .code 16
523 .thumb_func
524 .fpu softvfp
526 USBD_HID_GetReport:
527 .LFB50:
567:Src/usbd_hid.c **** /** default do ntohing */
528 .loc 1 567 0
529 .cfi_startproc
530 @ args = 0, pretend = 0, frame = 0
531 @ frame_needed = 0, uses_anonymous_args = 0
532 @ link register save eliminated.
533 .LVL66:
569:Src/usbd_hid.c ****
534 .loc 1 569 0
535 @ sp needed
536 0000 7047 bx lr
537 .cfi_endproc
538 .LFE50:
540 .section .text.USBD_HID_DataOut,"ax",%progbits
541 .align 1
542 .syntax unified
543 .code 16
544 .thumb_func
545 .fpu softvfp
ARM GAS /tmp/ccE5JjBw.s page 22
547 USBD_HID_DataOut:
548 .LFB51:
573:Src/usbd_hid.c **** int len;
549 .loc 1 573 0
550 .cfi_startproc
551 @ args = 0, pretend = 0, frame = 0
552 @ frame_needed = 0, uses_anonymous_args = 0
553 .LVL67:
554 0000 F8B5 push {r3, r4, r5, r6, r7, lr}
555 .LCFI4:
556 .cfi_def_cfa_offset 24
557 .cfi_offset 3, -24
558 .cfi_offset 4, -20
559 .cfi_offset 5, -16
560 .cfi_offset 6, -12
561 .cfi_offset 7, -8
562 .cfi_offset 14, -4
563 0002 0600 movs r6, r0
579:Src/usbd_hid.c **** // data cpy so we can be ready for next usb out and used received data safely
564 .loc 1 579 0
565 0004 0C4A ldr r2, .L50
566 0006 1368 ldr r3, [r2]
567 0008 0133 adds r3, r3, #1
568 000a 1360 str r3, [r2]
581:Src/usbd_hid.c **** memcpy(OutDataBuffer,OutData, len);
569 .loc 1 581 0
570 000c FFF7FEFF bl USBD_LL_GetRxDataSize
571 .LVL68:
572 0010 0500 movs r5, r0
573 .LVL69:
582:Src/usbd_hid.c **** USBD_LL_PrepareReceive(pdev, HID_EPOUT_ADDR, OutData, HID_EPOUT_SIZE);
574 .loc 1 582 0
575 0012 0A4C ldr r4, .L50+4
576 0014 0A4F ldr r7, .L50+8
577 0016 0200 movs r2, r0
578 0018 3900 movs r1, r7
579 001a 2000 movs r0, r4
580 .LVL70:
581 001c FFF7FEFF bl memcpy
582 .LVL71:
583:Src/usbd_hid.c **** USBD_HID_GetReport(OutDataBuffer, len);
583 .loc 1 583 0
584 0020 0823 movs r3, #8
585 0022 3A00 movs r2, r7
586 0024 0121 movs r1, #1
587 0026 3000 movs r0, r6
588 0028 FFF7FEFF bl USBD_LL_PrepareReceive
589 .LVL72:
584:Src/usbd_hid.c **** return USBD_OK;
590 .loc 1 584 0
591 002c 2900 movs r1, r5
592 002e 2000 movs r0, r4
593 0030 FFF7FEFF bl USBD_HID_GetReport
594 .LVL73:
586:Src/usbd_hid.c ****
595 .loc 1 586 0
596 0034 0020 movs r0, #0
ARM GAS /tmp/ccE5JjBw.s page 23
597 @ sp needed
598 .LVL74:
599 .LVL75:
600 0036 F8BD pop {r3, r4, r5, r6, r7, pc}
601 .L51:
602 .align 2
603 .L50:
604 0038 00000000 .word nOutData
605 003c 00000000 .word OutDataBuffer
606 0040 00000000 .word OutData
607 .cfi_endproc
608 .LFE51:
610 .comm OutData,8,4
611 .comm OutDataBuffer,8,4
612 .comm nOutData,4,4
613 .global USBD_HID
614 .section .data.HID_ReportDesc,"aw",%progbits
615 .align 2
616 .set .LANCHOR2,. + 0
619 HID_ReportDesc:
620 0000 05 .byte 5
621 0001 01 .byte 1
622 0002 09 .byte 9
623 0003 06 .byte 6
624 0004 A1 .byte -95
625 0005 01 .byte 1
626 0006 85 .byte -123
627 0007 01 .byte 1
628 0008 05 .byte 5
629 0009 07 .byte 7
630 000a 19 .byte 25
631 000b E0 .byte -32
632 000c 29 .byte 41
633 000d E7 .byte -25
634 000e 15 .byte 21
635 000f 00 .byte 0
636 0010 25 .byte 37
637 0011 01 .byte 1
638 0012 75 .byte 117
639 0013 01 .byte 1
640 0014 95 .byte -107
641 0015 08 .byte 8
642 0016 81 .byte -127
643 0017 02 .byte 2
644 0018 95 .byte -107
645 0019 01 .byte 1
646 001a 75 .byte 117
647 001b 08 .byte 8
648 001c 81 .byte -127
649 001d 03 .byte 3
650 001e 95 .byte -107
651 001f 06 .byte 6
652 0020 75 .byte 117
653 0021 08 .byte 8
654 0022 15 .byte 21
655 0023 00 .byte 0
656 0024 25 .byte 37
ARM GAS /tmp/ccE5JjBw.s page 24
657 0025 65 .byte 101
658 0026 05 .byte 5
659 0027 07 .byte 7
660 0028 19 .byte 25
661 0029 00 .byte 0
662 002a 29 .byte 41
663 002b 65 .byte 101
664 002c 81 .byte -127
665 002d 00 .byte 0
666 002e C0 .byte -64
667 002f 05 .byte 5
668 0030 0C .byte 12
669 0031 09 .byte 9
670 0032 01 .byte 1
671 0033 A1 .byte -95
672 0034 01 .byte 1
673 0035 85 .byte -123
674 0036 02 .byte 2
675 0037 19 .byte 25
676 0038 00 .byte 0
677 0039 2A .byte 42
678 003a 3C .byte 60
679 003b 02 .byte 2
680 003c 15 .byte 21
681 003d 00 .byte 0
682 003e 26 .byte 38
683 003f 3C .byte 60
684 0040 02 .byte 2
685 0041 95 .byte -107
686 0042 01 .byte 1
687 0043 75 .byte 117
688 0044 10 .byte 16
689 0045 81 .byte -127
690 0046 00 .byte 0
691 0047 C0 .byte -64
692 .section .data.USBD_HID,"aw",%progbits
693 .align 2
696 USBD_HID:
697 0000 00000000 .word USBD_HID_Init
698 0004 00000000 .word USBD_HID_DeInit
699 0008 00000000 .word USBD_HID_Setup
700 000c 00000000 .word 0
701 0010 00000000 .word 0
702 0014 00000000 .word USBD_HID_DataIn
703 0018 00000000 .word USBD_HID_DataOut
704 001c 00000000 .word 0
705 0020 00000000 .word 0
706 0024 00000000 .word 0
707 0028 00000000 .word USBD_HID_GetCfgDesc
708 002c 00000000 .word USBD_HID_GetCfgDesc
709 0030 00000000 .word USBD_HID_GetCfgDesc
710 0034 00000000 .word USBD_HID_GetDeviceQualifierDesc
711 .section .data.USBD_HID_CfgDesc,"aw",%progbits
712 .align 2
713 .set .LANCHOR0,. + 0
716 USBD_HID_CfgDesc:
717 0000 09 .byte 9
ARM GAS /tmp/ccE5JjBw.s page 25
718 0001 02 .byte 2
719 0002 22 .byte 34
720 0003 00 .byte 0
721 0004 01 .byte 1
722 0005 01 .byte 1
723 0006 00 .byte 0
724 0007 E0 .byte -32
725 0008 32 .byte 50
726 0009 09 .byte 9
727 000a 04 .byte 4
728 000b 00 .byte 0
729 000c 00 .byte 0
730 000d 01 .byte 1
731 000e 03 .byte 3
732 000f 01 .byte 1
733 0010 01 .byte 1
734 0011 00 .byte 0
735 0012 09 .byte 9
736 0013 21 .byte 33
737 0014 11 .byte 17
738 0015 01 .byte 1
739 0016 00 .byte 0
740 0017 01 .byte 1
741 0018 22 .byte 34
742 0019 48 .byte 72
743 001a 00 .byte 0
744 001b 07 .byte 7
745 001c 05 .byte 5
746 001d 81 .byte -127
747 001e 03 .byte 3
748 001f 10 .byte 16
749 0020 00 .byte 0
750 0021 0A .byte 10
751 .section .data.USBD_HID_Desc,"aw",%progbits
752 .align 2
753 .set .LANCHOR3,. + 0
756 USBD_HID_Desc:
757 0000 09 .byte 9
758 0001 21 .byte 33
759 0002 11 .byte 17
760 0003 01 .byte 1
761 0004 00 .byte 0
762 0005 01 .byte 1
763 0006 22 .byte 34
764 0007 48 .byte 72
765 0008 00 .byte 0
766 .section .data.USBD_HID_DeviceQualifierDesc,"aw",%progbits
767 .align 2
768 .set .LANCHOR1,. + 0
771 USBD_HID_DeviceQualifierDesc:
772 0000 0A .byte 10
773 0001 06 .byte 6
774 0002 00 .byte 0
775 0003 02 .byte 2
776 0004 00 .byte 0
777 0005 00 .byte 0
778 0006 00 .byte 0
ARM GAS /tmp/ccE5JjBw.s page 26
779 0007 40 .byte 64
780 0008 01 .byte 1
781 0009 00 .byte 0
782 .text
783 .Letext0:
784 .file 2 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/machin
785 .file 3 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/lo
786 .file 4 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/_t
787 .file 5 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/lib/gcc/arm-none-eabi/7.3.1/
788 .file 6 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/re
789 .file 7 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/_s
790 .file 8 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/stdlib
791 .file 9 "Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h"
792 .file 10 "Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h"
793 .file 11 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h"
794 .file 12 "Inc/usbd_hid.h"
795 .file 13 "Inc/usbd_desc.h"
796 .file 14 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h"
797 .file 15 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h"
798 .file 16 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h"
799 .file 17 "<built-in>"
ARM GAS /tmp/ccE5JjBw.s page 27
DEFINED SYMBOLS
*ABS*:0000000000000000 usbd_hid.c
/tmp/ccE5JjBw.s:16 .text.USBD_HID_GetCfgDesc:0000000000000000 $t
/tmp/ccE5JjBw.s:22 .text.USBD_HID_GetCfgDesc:0000000000000000 USBD_HID_GetCfgDesc
/tmp/ccE5JjBw.s:42 .text.USBD_HID_GetCfgDesc:0000000000000008 $d
/tmp/ccE5JjBw.s:47 .text.USBD_HID_DataIn:0000000000000000 $t
/tmp/ccE5JjBw.s:53 .text.USBD_HID_DataIn:0000000000000000 USBD_HID_DataIn
/tmp/ccE5JjBw.s:76 .text.USBD_HID_GetDeviceQualifierDesc:0000000000000000 $t
/tmp/ccE5JjBw.s:82 .text.USBD_HID_GetDeviceQualifierDesc:0000000000000000 USBD_HID_GetDeviceQualifierDesc
/tmp/ccE5JjBw.s:101 .text.USBD_HID_GetDeviceQualifierDesc:0000000000000008 $d
/tmp/ccE5JjBw.s:106 .text.USBD_HID_Setup:0000000000000000 $t
/tmp/ccE5JjBw.s:112 .text.USBD_HID_Setup:0000000000000000 USBD_HID_Setup
/tmp/ccE5JjBw.s:307 .text.USBD_HID_Setup:00000000000000c0 $d
/tmp/ccE5JjBw.s:313 .text.USBD_HID_DeInit:0000000000000000 $t
/tmp/ccE5JjBw.s:319 .text.USBD_HID_DeInit:0000000000000000 USBD_HID_DeInit
/tmp/ccE5JjBw.s:366 .text.USBD_HID_Init:0000000000000000 $t
/tmp/ccE5JjBw.s:372 .text.USBD_HID_Init:0000000000000000 USBD_HID_Init
/tmp/ccE5JjBw.s:423 .text.USBD_HID_SendReport:0000000000000000 $t
/tmp/ccE5JjBw.s:430 .text.USBD_HID_SendReport:0000000000000000 USBD_HID_SendReport
/tmp/ccE5JjBw.s:483 .text.USBD_HID_GetPollingInterval:0000000000000000 $t
/tmp/ccE5JjBw.s:490 .text.USBD_HID_GetPollingInterval:0000000000000000 USBD_HID_GetPollingInterval
/tmp/ccE5JjBw.s:519 .text.USBD_HID_GetReport:0000000000000000 $t
/tmp/ccE5JjBw.s:526 .text.USBD_HID_GetReport:0000000000000000 USBD_HID_GetReport
/tmp/ccE5JjBw.s:541 .text.USBD_HID_DataOut:0000000000000000 $t
/tmp/ccE5JjBw.s:547 .text.USBD_HID_DataOut:0000000000000000 USBD_HID_DataOut
/tmp/ccE5JjBw.s:604 .text.USBD_HID_DataOut:0000000000000038 $d
*COM*:0000000000000004 nOutData
*COM*:0000000000000008 OutDataBuffer
*COM*:0000000000000008 OutData
/tmp/ccE5JjBw.s:696 .data.USBD_HID:0000000000000000 USBD_HID
/tmp/ccE5JjBw.s:615 .data.HID_ReportDesc:0000000000000000 $d
/tmp/ccE5JjBw.s:619 .data.HID_ReportDesc:0000000000000000 HID_ReportDesc
/tmp/ccE5JjBw.s:693 .data.USBD_HID:0000000000000000 $d
/tmp/ccE5JjBw.s:712 .data.USBD_HID_CfgDesc:0000000000000000 $d
/tmp/ccE5JjBw.s:716 .data.USBD_HID_CfgDesc:0000000000000000 USBD_HID_CfgDesc
/tmp/ccE5JjBw.s:752 .data.USBD_HID_Desc:0000000000000000 $d
/tmp/ccE5JjBw.s:756 .data.USBD_HID_Desc:0000000000000000 USBD_HID_Desc
/tmp/ccE5JjBw.s:767 .data.USBD_HID_DeviceQualifierDesc:0000000000000000 $d
/tmp/ccE5JjBw.s:771 .data.USBD_HID_DeviceQualifierDesc:0000000000000000 USBD_HID_DeviceQualifierDesc
UNDEFINED SYMBOLS
USBD_CtlSendData
USBD_CtlError
USBD_LL_CloseEP
free
USBD_LL_OpenEP
malloc
USBD_LL_Transmit
USBD_LL_GetRxDataSize
memcpy
USBD_LL_PrepareReceive
|