projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Oops: Really disable building of Projects/Host/ClassDriver directory in the Projects...
[pub/USBasp.git]
/
Demos
/
Device
/
ClassDriver
/
Keyboard
/
Keyboard.c
diff --git
a/Demos/Device/ClassDriver/Keyboard/Keyboard.c
b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
index
ba0d239
..
e609d7a
100644
(file)
--- a/
Demos/Device/ClassDriver/Keyboard/Keyboard.c
+++ b/
Demos/Device/ClassDriver/Keyboard/Keyboard.c
@@
-37,6
+37,9
@@
\r
#include "Keyboard.h"
\r
\r
\r
#include "Keyboard.h"
\r
\r
+/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
\r
+uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
\r
+
\r
/** LUFA HID Class driver interface configuration and state information. This structure is
\r
* passed to all HID Class driver functions, so that multiple instances of the same class
\r
* within a device can be differentiated from one another.
\r
/** LUFA HID Class driver interface configuration and state information. This structure is
\r
* passed to all HID Class driver functions, so that multiple instances of the same class
\r
* within a device can be differentiated from one another.
\r
@@
-50,7
+53,8
@@
USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =
.ReportINEndpointNumber = KEYBOARD_EPNUM,
\r
.ReportINEndpointSize = KEYBOARD_EPSIZE,
\r
\r
.ReportINEndpointNumber = KEYBOARD_EPNUM,
\r
.ReportINEndpointSize = KEYBOARD_EPSIZE,
\r
\r
- .ReportINBufferSize = sizeof(USB_KeyboardReport_Data_t),
\r
+ .PrevReportINBuffer = PrevKeyboardHIDReportBuffer,
\r
+ .PrevReportINBufferSize = sizeof(PrevKeyboardHIDReportBuffer),
\r
},
\r
};
\r
\r
},
\r
};
\r
\r
@@
-85,46
+89,41
@@
void SetupHardware()
LEDs_Init();
\r
Buttons_Init();
\r
USB_Init();
\r
LEDs_Init();
\r
Buttons_Init();
\r
USB_Init();
\r
-
\r
- /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */
\r
- OCR0A = ((F_CPU / 64) / 1000);
\r
- TCCR0A = (1 << WGM01);
\r
- TCCR0B = ((1 << CS01) | (1 << CS00));
\r
- TIMSK0 = (1 << OCIE0A);
\r
}
\r
\r
/** Event handler for the library USB Connection event. */
\r
}
\r
\r
/** Event handler for the library USB Connection event. */
\r
-void EVENT_USB_Connect(void)
\r
+void EVENT_USB_
Device_
Connect(void)
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
\r
}
\r
\r
/** Event handler for the library USB Disconnection event. */
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
\r
}
\r
\r
/** Event handler for the library USB Disconnection event. */
\r
-void EVENT_USB_Disconnect(void)
\r
+void EVENT_USB_D
evice_D
isconnect(void)
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
\r
}
\r
\r
/** Event handler for the library USB Configuration Changed event. */
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
\r
}
\r
\r
/** Event handler for the library USB Configuration Changed event. */
\r
-void EVENT_USB_ConfigurationChanged(void)
\r
+void EVENT_USB_
Device_
ConfigurationChanged(void)
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);
\r
\r
if (!(HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface)))
\r
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);
\r
\r
if (!(HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface)))
\r
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
\r
+
\r
+ USB_Device_EnableSOFEvents();
\r
}
\r
\r
}
\r
\r
-/** Event handler for the library USB Unhandled Control
Packe
t event. */
\r
-void EVENT_USB_
UnhandledControlPacke
t(void)
\r
+/** Event handler for the library USB Unhandled Control
Reques
t event. */
\r
+void EVENT_USB_
Device_UnhandledControlReques
t(void)
\r
{
\r
{
\r
- HID_Device_ProcessControl
Packe
t(&Keyboard_HID_Interface);
\r
+ HID_Device_ProcessControl
Reques
t(&Keyboard_HID_Interface);
\r
}
\r
\r
}
\r
\r
-/**
ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when se
t. */
\r
-
ISR(TIMER0_COMPA_vect, ISR_BLOCK
)
\r
+/**
Event handler for the USB device Start Of Frame even
t. */
\r
+
void EVENT_USB_Device_StartOfFrame(void
)
\r
{
\r
{
\r
- if (Keyboard_HID_Interface.State.IdleMSRemaining)
\r
- Keyboard_HID_Interface.State.IdleMSRemaining--;
\r
+ HID_Device_MillisecondElapsed(&Keyboard_HID_Interface);
\r
}
\r
\r
/** HID class driver callback function for the creation of HID reports to the host.
\r
}
\r
\r
/** HID class driver callback function for the creation of HID reports to the host.
\r
@@
-132,10
+131,12
@@
ISR(TIMER0_COMPA_vect, ISR_BLOCK)
* \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
\r
* \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
\r
* \param[out] ReportData Pointer to a buffer where the created report should be stored
\r
* \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
\r
* \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID
\r
* \param[out] ReportData Pointer to a buffer where the created report should be stored
\r
+ * \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent
\r
*
\r
*
\r
- * \return
Number of bytes written in the report (or zero if no report i
s to be sent
\r
+ * \return
Boolean true to force the sending of the report, false to let the library determine if it need
s to be sent
\r
*/
\r
*/
\r
-uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID, void* ReportData)
\r
+bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,
\r
+ void* ReportData, uint16_t* ReportSize)
\r
{
\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
\r
\r
{
\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
\r
\r
@@
-157,8
+158,9
@@
uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
\r
if (ButtonStatus_LCL & BUTTONS_BUTTON1)
\r
KeyboardReport->KeyCode[0] = 0x09; // F
\r
\r
if (ButtonStatus_LCL & BUTTONS_BUTTON1)
\r
KeyboardReport->KeyCode[0] = 0x09; // F
\r
-
\r
- return sizeof(USB_KeyboardReport_Data_t);
\r
+
\r
+ *ReportSize = sizeof(USB_KeyboardReport_Data_t);
\r
+ return false;
\r
}
\r
\r
/** HID class driver callback function for the processing of HID reports from the host.
\r
}
\r
\r
/** HID class driver callback function for the processing of HID reports from the host.
\r