1 | void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
|
2 | {
|
3 | if (USB_DeviceState != DEVICE_STATE_Configured)
|
4 | return;
|
5 |
|
6 | Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpointNumber);
|
7 |
|
8 | if (Endpoint_IsReadWriteAllowed())
|
9 | {
|
10 | uint8_t ReportINData[HIDInterfaceInfo->Config.PrevReportINBufferSize];
|
11 | uint8_t ReportID = 0;
|
12 | uint16_t ReportINSize = 0; //Standardmaeßig = 8
|
13 |
|
14 |
|
15 | /* diese Zeile hat etwas mit dem Datensenden zu tun. Soweit ich verstanden
|
16 | habe, wird hier aber nur 0 in jedes Byte von ReportINData geschrieben.*/
|
17 | memset(ReportINData, 0, sizeof(ReportINData));
|
18 |
|
19 |
|
20 | // Diese Zeile verstehe ich überhaupt nicht
|
21 | bool ForceSend = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, REPORT_ITEM_TYPE_In, ReportINData, &ReportINSize);
|
22 | // Das ist klar.
|
23 | bool StatesChanged = false;
|
24 | // Das verstehe ich auch nicht.
|
25 | bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));
|
26 |
|
27 |
|
28 | /*wenn ich das richtig verstanden habe, dann wird hier überprüft, ob Daten
|
29 | zum abholen bereit stehen. wenn ja, wird StatesChanged = 1 und die neuen
|
30 | Daten werden in ReportINData geschrieben.*/
|
31 | if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)
|
32 | {
|
33 | StatesChanged = (memcmp(ReportINData, HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize) != 0);
|
34 | memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, HIDInterfaceInfo->Config.PrevReportINBufferSize);
|
35 | }
|
36 |
|
37 |
|
38 | /*hier dürfte dann, wenn einmal daten empfangen wurden, immer wieder diese
|
39 | Daten wieder zurück geschickt werden, bis Neue kommen. Dann werden die neuen gesendet*/
|
40 | if (ReportINSize && (ForceSend || StatesChanged || IdlePeriodElapsed))
|
41 | {
|
42 | HIDInterfaceInfo->State.IdleMSRemaining = HIDInterfaceInfo->State.IdleCount;
|
43 |
|
44 | Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpointNumber);
|
45 |
|
46 | if (ReportID)
|
47 | Endpoint_Write_Byte(ReportID);
|
48 |
|
49 | Endpoint_Write_Stream_LE(ReportINData, ReportINSize, NO_STREAM_CALLBACK);
|
50 |
|
51 | Endpoint_ClearIN();
|
52 | }
|
53 | }
|
54 | }
|