summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usb-keyboardmouse/Makefile2
-rw-r--r--usb-keyboardmouse/usb-keyboardmouse.c75
2 files changed, 60 insertions, 17 deletions
diff --git a/usb-keyboardmouse/Makefile b/usb-keyboardmouse/Makefile
index 5e20ae0..af93709 100644
--- a/usb-keyboardmouse/Makefile
+++ b/usb-keyboardmouse/Makefile
@@ -36,6 +36,6 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
LUFA_OPTS += -D USB_MANUFACTURER="L\"equinox\""
LUFA_OPTS += -D USB_PRODUCT="L\"$(NAME)\""
-LUFA_COMPONENTS := USB USBCLASS
+LUFA_COMPONENTS := USB USBCLASS SERIAL
include ../include.mk
diff --git a/usb-keyboardmouse/usb-keyboardmouse.c b/usb-keyboardmouse/usb-keyboardmouse.c
index de796f5..649cb65 100644
--- a/usb-keyboardmouse/usb-keyboardmouse.c
+++ b/usb-keyboardmouse/usb-keyboardmouse.c
@@ -25,6 +25,7 @@
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <avr/power.h>
+#include <stdio.h>
#include "util.h"
#include "led.h"
@@ -37,6 +38,8 @@
www.lufa-lib.org
*/
#include <LUFA/Drivers/USB/USB.h>
+#include "LUFA/Drivers/Peripheral/Serial.h"
+#include <LUFA/Drivers/Misc/RingBuffer.h>
#include "lufa-descriptor-keyboardmouse.h"
static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
@@ -95,6 +98,11 @@ void EVENT_USB_Device_StartOfFrame(void)
}
/* end LUFA CDC-ACM specific definitions*/
+FILE serial_stream;
+static RingBuffer_t keyboard_buffer;
+static uint8_t keyboard_buffer_data[16];
+static RingBuffer_t mouse_buffer;
+static uint8_t mouse_buffer_data[16];
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
uint8_t* const ReportID,
@@ -102,19 +110,26 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
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;
+ if(!RingBuffer_IsEmpty(&keyboard_buffer)) {
+ uint8_t received_byte = RingBuffer_Remove(&keyboard_buffer);
+ switch(received_byte) {
+ case '1': KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_1_AND_EXCLAMATION; break;
+ case '2': KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_2_AND_AT; break;
+ case '3': KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_3_AND_HASHMARK; break;
+ case '4': KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_4_AND_DOLLAR; break;
+ case 'c': KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_CAPS_LOCK; break;
+ default: return 0; // no key has been pressed - just return
+ }
+ }
+// KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT;
*ReportSize = sizeof(USB_KeyboardReport_Data_t);
return false;
-*/
+
}
else
{
@@ -122,15 +137,17 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
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
-*/
+ if(!RingBuffer_IsEmpty(&mouse_buffer)) {
+ uint8_t received_byte = RingBuffer_Remove(&mouse_buffer);
+ switch(received_byte) {
+ case 'w': MouseReport->Y = -1; break; // UP
+ case 's': MouseReport->Y = 1; break; // DOWN
+ case 'a': MouseReport->X = -1; break; // LEFT
+ case 'd': MouseReport->X = 1; break; // RIGHT
+ case 'q': MouseReport->Button |= (1 << 0); break; // Button 1
+ case 'e': MouseReport->Button |= (1 << 1); break; // Button 2
+ }
+ }
*ReportSize = sizeof(USB_MouseReport_Data_t);
return true;
}
@@ -167,9 +184,35 @@ int main(void)
cpu_init();
led_init();
USB_Init();
+
+ Serial_Init(115200, false);
+ Serial_CreateStream(&serial_stream);
+ stdin = stdout = stderr = &serial_stream;
+ RingBuffer_InitBuffer(&keyboard_buffer, keyboard_buffer_data, sizeof(keyboard_buffer_data));
+ RingBuffer_InitBuffer(&mouse_buffer, mouse_buffer_data, sizeof(mouse_buffer_data));
+
sei();
for(;;) {
+ if(Serial_IsCharReceived()) {
+ int received_byte = fgetc(stdin);
+ switch(received_byte) {
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case 'c':
+ RingBuffer_Insert(&keyboard_buffer, (uint8_t)received_byte); break;
+ case 'w':
+ case 's':
+ case 'a':
+ case 'd':
+ case 'q':
+ case 'e':
+ RingBuffer_Insert(&mouse_buffer, (uint8_t)received_byte); break;
+ }
+ }
+
HID_Device_USBTask(&Keyboard_HID_Interface);
HID_Device_USBTask(&Mouse_HID_Interface);
USB_USBTask();