diff options
Diffstat (limited to 'Demos/Device/LowLevel/Mouse/Mouse.c')
-rw-r--r-- | Demos/Device/LowLevel/Mouse/Mouse.c | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.c b/Demos/Device/LowLevel/Mouse/Mouse.c index 6aa258a00..23df2a610 100644 --- a/Demos/Device/LowLevel/Mouse/Mouse.c +++ b/Demos/Device/LowLevel/Mouse/Mouse.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -33,7 +33,7 @@ * Main source file for the Mouse demo. This file contains the main tasks of the demo and * is responsible for the initial application hardware configuration. */ - + #include "Mouse.h" /** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot @@ -47,7 +47,7 @@ bool UsingReportProtocol = true; uint16_t IdleCount = HID_IDLE_CHANGESONLY; /** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle - * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request + * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request * the current idle period via a Get Idle HID class request, thus its value must be preserved. */ uint16_t IdleMSRemaining = 0; @@ -59,7 +59,7 @@ uint16_t IdleMSRemaining = 0; int main(void) { SetupHardware(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -110,7 +110,7 @@ void EVENT_USB_Device_Disconnect(void) /** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration * of the USB device after enumeration - the device endpoints are configured and the mouse reporting task started. - */ + */ void EVENT_USB_Device_ConfigurationChanged(void) { bool ConfigSuccess = true; @@ -123,7 +123,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) USB_Device_EnableSOFEvents(); /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Event handler for the USB_UnhandledControlRequest event. This is used to catch standard and class specific @@ -152,20 +152,20 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Clear the report data afterwards */ memset(&MouseReportData, 0, sizeof(MouseReportData)); } - + break; case REQ_GetProtocol: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + /* Write the current protocol flag to the host */ Endpoint_Write_Byte(UsingReportProtocol); - + Endpoint_ClearIN(); Endpoint_ClearStatusStage(); } - + break; case REQ_SetProtocol: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -176,7 +176,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Set or clear the flag depending on what the host indicates that the current Protocol should be */ UsingReportProtocol = (USB_ControlRequest.wValue != 0); } - + break; case REQ_SetIdle: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) @@ -187,13 +187,13 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Get idle period in MSB, must multiply by 4 to get the duration in milliseconds */ IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6); } - + break; case REQ_GetIdle: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - { + { Endpoint_ClearSETUP(); - + /* Write the current idle duration to the host, must be divided by 4 before sent to host */ Endpoint_Write_Byte(IdleCount >> 2); @@ -221,7 +221,7 @@ void CreateMouseReport(USB_MouseReport_Data_t* const ReportData) { uint8_t JoyStatus_LCL = Joystick_GetStatus(); uint8_t ButtonStatus_LCL = Buttons_GetStatus(); - + /* Clear the report contents */ memset(ReportData, 0, sizeof(USB_MouseReport_Data_t)); @@ -237,7 +237,7 @@ void CreateMouseReport(USB_MouseReport_Data_t* const ReportData) if (JoyStatus_LCL & JOY_PRESS) ReportData->Button = (1 << 0); - + if (ButtonStatus_LCL & BUTTONS_BUTTON1) ReportData->Button |= (1 << 1); } @@ -248,40 +248,40 @@ void SendNextReport(void) static USB_MouseReport_Data_t PrevMouseReportData; USB_MouseReport_Data_t MouseReportData; bool SendReport; - + /* Create the next mouse report for transmission to the host */ CreateMouseReport(&MouseReportData); - + /* Check to see if the report data has changed - if so a report MUST be sent */ SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0); - + /* Override the check if the Y or X values are non-zero - we want continuous movement while the joystick * is being held down (via continuous reports), otherwise the cursor will only move once per joystick toggle */ if ((MouseReportData.Y != 0) || (MouseReportData.X != 0)) SendReport = true; - + /* Check if the idle period is set and has elapsed */ if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining))) { /* Reset the idle time remaining counter */ IdleMSRemaining = IdleCount; - + /* Idle period is set and has elapsed, must send a report to the host */ SendReport = true; } - + /* Select the Mouse Report Endpoint */ Endpoint_SelectEndpoint(MOUSE_EPNUM); /* Check if Mouse Endpoint Ready for Read/Write and if we should send a new report */ if (Endpoint_IsReadWriteAllowed() && SendReport) - { + { /* Save the current report data for later comparison to check for changes */ PrevMouseReportData = MouseReportData; /* Write Mouse Report Data */ Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData)); - + /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); } @@ -293,7 +293,8 @@ void Mouse_Task(void) /* Device must be connected and configured for the task to run */ if (USB_DeviceState != DEVICE_STATE_Configured) return; - + /* Send the next mouse report to the host */ SendNextReport(); } + |