From c5b6b62412d6d4df1f364ae7a6dca5488a1cd7f5 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sat, 16 Feb 2013 21:44:47 +0000 Subject: added keyoard mouse example git-svn-id: https://svn.spreadspace.org/avr/trunk@192 aa12f405-d877-488e-9caf-2d797e2a1cc7 --- usb-keyboardmouse/usb-keyboardmouse.c | 177 ++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 usb-keyboardmouse/usb-keyboardmouse.c (limited to 'usb-keyboardmouse/usb-keyboardmouse.c') diff --git a/usb-keyboardmouse/usb-keyboardmouse.c b/usb-keyboardmouse/usb-keyboardmouse.c new file mode 100644 index 0000000..de796f5 --- /dev/null +++ b/usb-keyboardmouse/usb-keyboardmouse.c @@ -0,0 +1,177 @@ +/* + * spreadspace avr utils + * + * + * Copyright (C) 2013 Christian Pointner + * + * This file is part of spreadspace avr utils. + * + * spreadspace avr utils is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * spreadspace avr utils is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with spreadspace avr utils. If not, see . + */ + + +#include +#include +#include +#include + +#include "util.h" +#include "led.h" + +/* + LUFA Library + Copyright (C) Dean Camera, 2012. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ +#include +#include "lufa-descriptor-keyboardmouse.h" + +static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)]; +static uint8_t PrevMouseHIDReportBuffer[sizeof(USB_MouseReport_Data_t)]; + +USB_ClassInfo_HID_Device_t Keyboard_HID_Interface = + { + .Config = + { + .InterfaceNumber = 0, + + .ReportINEndpointNumber = KEYBOARD_IN_EPNUM, + .ReportINEndpointSize = HID_EPSIZE, + .ReportINEndpointDoubleBank = false, + + .PrevReportINBuffer = PrevKeyboardHIDReportBuffer, + .PrevReportINBufferSize = sizeof(PrevKeyboardHIDReportBuffer), + }, + }; + +USB_ClassInfo_HID_Device_t Mouse_HID_Interface = + { + .Config = + { + .InterfaceNumber = 1, + + .ReportINEndpointNumber = MOUSE_IN_EPNUM, + .ReportINEndpointSize = HID_EPSIZE, + + .PrevReportINBuffer = PrevMouseHIDReportBuffer, + .PrevReportINBufferSize = sizeof(PrevMouseHIDReportBuffer), + }, + }; + + +void EVENT_USB_Device_ConfigurationChanged(void) +{ + HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface); + HID_Device_ConfigureEndpoints(&Mouse_HID_Interface); + + USB_Device_EnableSOFEvents(); +} + +/** Event handler for the library USB Control Request reception event. */ +void EVENT_USB_Device_ControlRequest(void) +{ + HID_Device_ProcessControlRequest(&Keyboard_HID_Interface); + HID_Device_ProcessControlRequest(&Mouse_HID_Interface); +} + +/** Event handler for the USB device Start Of Frame event. */ +void EVENT_USB_Device_StartOfFrame(void) +{ + HID_Device_MillisecondElapsed(&Keyboard_HID_Interface); + HID_Device_MillisecondElapsed(&Mouse_HID_Interface); +} +/* end LUFA CDC-ACM specific definitions*/ + + +bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, + uint8_t* const ReportID, + const uint8_t ReportType, + void* ReportData, + uint16_t* const ReportSize) +{ + if (HIDInterfaceInfo == &Keyboard_HID_Interface) { + USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; + + /* no key has been pressed - just return */ + return 0; + +/* + KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; + KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_A; + + *ReportSize = sizeof(USB_KeyboardReport_Data_t); + return false; +*/ + } + else + { + USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData; + + MouseReport->Y = 0; + MouseReport->X = 0; +/* + MouseReport->Y = -1; // UP + MouseReport->Y = 1; // DOWN + MouseReport->X = -1; // LEFT + MouseReport->X = 1; // RIGHT +*/ +/* + MouseReport->Button |= (1 << 0); // Button 1 +*/ + *ReportSize = sizeof(USB_MouseReport_Data_t); + return true; + } +} + +void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, + const uint8_t ReportID, + const uint8_t ReportType, + const void* ReportData, + const uint16_t ReportSize) +{ + if (HIDInterfaceInfo == &Keyboard_HID_Interface) + { + uint8_t* LEDReport = (uint8_t*)ReportData; + + /* if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK) */ + /* // do something */ + + if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK) + led_on(); + else + led_off(); + + /* if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK) */ + /* // do something */ + } +} + +int main(void) +{ + MCUSR &= ~(1 << WDRF); + wdt_disable(); + + cpu_init(); + led_init(); + USB_Init(); + sei(); + + for(;;) { + HID_Device_USBTask(&Keyboard_HID_Interface); + HID_Device_USBTask(&Mouse_HID_Interface); + USB_USBTask(); + } +} -- cgit v1.2.3