projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added Doxygen documentation to the Audio class driver. Added new modules for each...
[pub/USBasp.git]
/
Demos
/
Device
/
Keyboard
/
Keyboard.c
diff --git
a/Demos/Device/Keyboard/Keyboard.c
b/Demos/Device/Keyboard/Keyboard.c
index
d8893bf
..
923dd71
100644
(file)
--- a/
Demos/Device/Keyboard/Keyboard.c
+++ b/
Demos/Device/Keyboard/Keyboard.c
@@
-28,9
+28,19
@@
arising out of or in connection with the use or performance of
\r
this software.
\r
*/
\r
arising out of or in connection with the use or performance of
\r
this software.
\r
*/
\r
-
\r
+
\r
+/** \file
\r
+ *
\r
+ * Main source file for the Keyboard demo. This file contains the main tasks of
\r
+ * the demo and is responsible for the initial application hardware configuration.
\r
+ */
\r
+
\r
#include "Keyboard.h"
\r
\r
#include "Keyboard.h"
\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
+ */
\r
USB_ClassInfo_HID_t Keyboard_HID_Interface =
\r
{
\r
.InterfaceNumber = 0,
\r
USB_ClassInfo_HID_t Keyboard_HID_Interface =
\r
{
\r
.InterfaceNumber = 0,
\r
@@
-41,11
+51,14
@@
USB_ClassInfo_HID_t Keyboard_HID_Interface =
.ReportOUTEndpointNumber = KEYBOARD_LEDS_EPNUM,
\r
.ReportOUTEndpointSize = KEYBOARD_EPSIZE,
\r
\r
.ReportOUTEndpointNumber = KEYBOARD_LEDS_EPNUM,
\r
.ReportOUTEndpointSize = KEYBOARD_EPSIZE,
\r
\r
- .Report
BufferSize
= sizeof(USB_KeyboardReport_Data_t),
\r
+ .Report
INBufferSize
= sizeof(USB_KeyboardReport_Data_t),
\r
\r
.IdleCount = 500,
\r
};
\r
\r
\r
.IdleCount = 500,
\r
};
\r
\r
+/** Main program entry point. This routine contains the overall program flow, including initial
\r
+ * setup of all components and the main program loop.
\r
+ */
\r
int main(void)
\r
{
\r
SetupHardware();
\r
int main(void)
\r
{
\r
SetupHardware();
\r
@@
-59,6
+72,7
@@
int main(void)
}
\r
}
\r
\r
}
\r
}
\r
\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */
\r
void SetupHardware()
\r
{
\r
/* Disable watchdog if enabled by bootloader/fuses */
\r
void SetupHardware()
\r
{
\r
/* Disable watchdog if enabled by bootloader/fuses */
\r
@@
-73,18
+87,27
@@
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
}
\r
\r
+/** Event handler for the library USB Connection event. */
\r
void EVENT_USB_Connect(void)
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
\r
}
\r
\r
void EVENT_USB_Connect(void)
\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
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
\r
}
\r
\r
void EVENT_USB_Disconnect(void)
\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
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);
\r
void EVENT_USB_ConfigurationChanged(void)
\r
{
\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);
\r
@@
-93,16
+116,26
@@
void EVENT_USB_ConfigurationChanged(void)
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
\r
}
\r
\r
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
\r
}
\r
\r
+/** Event handler for the library USB Unhandled Control Packet event. */
\r
void EVENT_USB_UnhandledControlPacket(void)
\r
{
\r
USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);
\r
}
\r
\r
void EVENT_USB_UnhandledControlPacket(void)
\r
{
\r
USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);
\r
}
\r
\r
-void EVENT_USB_StartOfFrame(void)
\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */
\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)
\r
{
\r
{
\r
- USB_HID_RegisterStartOfFrame(&Keyboard_HID_Interface);
\r
+ if (Keyboard_HID_Interface.IdleMSRemaining)
\r
+ Keyboard_HID_Interface.IdleMSRemaining--;
\r
}
\r
\r
}
\r
\r
+/** HID class driver callback function for the creation of HID reports to the host.
\r
+ *
\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
\r
+ * \param ReportData Pointer to a buffer where the created report should be stored
\r
+ *
\r
+ * \return Number of bytes written in the report (or zero if no report is to be sent
\r
+ */
\r
uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)
\r
{
\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
\r
uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)
\r
{
\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
\r
@@
-129,6
+162,12
@@
uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceI
return sizeof(USB_KeyboardReport_Data_t);
\r
}
\r
\r
return sizeof(USB_KeyboardReport_Data_t);
\r
}
\r
\r
+/** HID class driver callback function for the processing of HID reports from the host.
\r
+ *
\r
+ * \param HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
\r
+ * \param ReportData Pointer to a buffer where the created report has been stored
\r
+ * \param ReportSize Size in bytes of the received HID report
\r
+ */
\r
void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize)
\r
{
\r
uint8_t LEDMask = LEDS_NO_LEDS;
\r
void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData, uint16_t ReportSize)
\r
{
\r
uint8_t LEDMask = LEDS_NO_LEDS;
\r