diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | common/debug.c | 16 | ||||
-rw-r--r-- | common/debug_config.h | 2 | ||||
-rw-r--r-- | converter/ps2_usb/Makefile.vusb | 10 | ||||
-rw-r--r-- | protocol/vusb/usbdrv/usbdrv.c | 8 | ||||
-rw-r--r-- | protocol/vusb/usbdrv/usbdrv.h | 14 | ||||
-rw-r--r-- | protocol/vusb/vusb.c | 17 |
7 files changed, 47 insertions, 21 deletions
diff --git a/.gitignore b/.gitignore index c25d41d238..0fd85b5314 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ *.map *.sym tags +*~ diff --git a/common/debug.c b/common/debug.c index c4fa3a05b4..18613fc28b 100644 --- a/common/debug.c +++ b/common/debug.c @@ -1,12 +1,24 @@ #include <stdbool.h> #include "debug.h" +#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) -//debug_config_t debug_config = { .enable = false, .matrix = false }; debug_config_t debug_config = { +/* GCC Bug 10676 - Using unnamed fields in initializers + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10676 */ +#if GCC_VERSION >= 40600 .enable = false, .matrix = false, .keyboard = false, .mouse = false, + .reserved = 0 +#else + { + false, // .enable + false, // .matrix + false, // .keyboard + false, // .mouse + 0 // .reserved + } +#endif }; - diff --git a/common/debug_config.h b/common/debug_config.h index 43e4c5c554..28bc34cd57 100644 --- a/common/debug_config.h +++ b/common/debug_config.h @@ -27,7 +27,6 @@ extern "C" { /* NOTE: Not portable. Bit field order depends on implementation */ typedef union { - uint8_t raw; struct { bool enable:1; bool matrix:1; @@ -35,6 +34,7 @@ typedef union { bool mouse:1; uint8_t reserved:4; }; + uint8_t raw; } debug_config_t; extern debug_config_t debug_config; diff --git a/converter/ps2_usb/Makefile.vusb b/converter/ps2_usb/Makefile.vusb index 1bb44f8875..ddf1868459 100644 --- a/converter/ps2_usb/Makefile.vusb +++ b/converter/ps2_usb/Makefile.vusb @@ -8,10 +8,16 @@ TOP_DIR = ../.. TARGET_DIR = . # keyboard dependent files -SRC = keymap.c \ +SRC = keymap_common.c \ matrix.c \ led.c +ifdef KEYMAP + SRC := keymap_$(KEYMAP).c $(SRC) +else + SRC := keymap_plain.c $(SRC) +endif + # Use USART for PS/2. With V-USB INT and BUSYWAIT code is not useful. SRC += protocol/ps2_usart.c OPT_DEFS += -DPS2_USE_USART @@ -95,7 +101,7 @@ VPATH += $(TARGET_DIR) VPATH += $(TOP_DIR) -include $(TOP_DIR)/protocol/vusb.mk include $(TOP_DIR)/protocol.mk include $(TOP_DIR)/common.mk +include $(TOP_DIR)/protocol/vusb.mk include $(TOP_DIR)/rules.mk diff --git a/protocol/vusb/usbdrv/usbdrv.c b/protocol/vusb/usbdrv/usbdrv.c index 21ed554f86..2e8dd8756b 100644 --- a/protocol/vusb/usbdrv/usbdrv.c +++ b/protocol/vusb/usbdrv/usbdrv.c @@ -67,7 +67,7 @@ optimizing hints: #if USB_CFG_DESCR_PROPS_STRING_0 == 0 #undef USB_CFG_DESCR_PROPS_STRING_0 #define USB_CFG_DESCR_PROPS_STRING_0 sizeof(usbDescriptorString0) -PROGMEM char usbDescriptorString0[] = { /* language descriptor */ +const PROGMEM char usbDescriptorString0[] = { /* language descriptor */ 4, /* sizeof(usbDescriptorString0): length of descriptor in bytes */ 3, /* descriptor type */ 0x09, 0x04, /* language index (0x0409 = US-English) */ @@ -77,7 +77,7 @@ PROGMEM char usbDescriptorString0[] = { /* language descriptor */ #if USB_CFG_DESCR_PROPS_STRING_VENDOR == 0 && USB_CFG_VENDOR_NAME_LEN #undef USB_CFG_DESCR_PROPS_STRING_VENDOR #define USB_CFG_DESCR_PROPS_STRING_VENDOR sizeof(usbDescriptorStringVendor) -PROGMEM int usbDescriptorStringVendor[] = { +const PROGMEM int usbDescriptorStringVendor[] = { USB_STRING_DESCRIPTOR_HEADER(USB_CFG_VENDOR_NAME_LEN), USB_CFG_VENDOR_NAME }; @@ -86,7 +86,7 @@ PROGMEM int usbDescriptorStringVendor[] = { #if USB_CFG_DESCR_PROPS_STRING_PRODUCT == 0 && USB_CFG_DEVICE_NAME_LEN #undef USB_CFG_DESCR_PROPS_STRING_PRODUCT #define USB_CFG_DESCR_PROPS_STRING_PRODUCT sizeof(usbDescriptorStringDevice) -PROGMEM int usbDescriptorStringDevice[] = { +const PROGMEM int usbDescriptorStringDevice[] = { USB_STRING_DESCRIPTOR_HEADER(USB_CFG_DEVICE_NAME_LEN), USB_CFG_DEVICE_NAME }; @@ -108,7 +108,7 @@ PROGMEM int usbDescriptorStringSerialNumber[] = { #if USB_CFG_DESCR_PROPS_DEVICE == 0 #undef USB_CFG_DESCR_PROPS_DEVICE #define USB_CFG_DESCR_PROPS_DEVICE sizeof(usbDescriptorDevice) -PROGMEM char usbDescriptorDevice[] = { /* USB device descriptor */ +const PROGMEM char usbDescriptorDevice[] = { /* USB device descriptor */ 18, /* sizeof(usbDescriptorDevice): length of descriptor in bytes */ USBDESCR_DEVICE, /* descriptor type */ 0x10, 0x01, /* USB version supported */ diff --git a/protocol/vusb/usbdrv/usbdrv.h b/protocol/vusb/usbdrv/usbdrv.h index 3a78f307bf..42fe163720 100644 --- a/protocol/vusb/usbdrv/usbdrv.h +++ b/protocol/vusb/usbdrv/usbdrv.h @@ -452,43 +452,43 @@ extern #if !(USB_CFG_DESCR_PROPS_DEVICE & USB_PROP_IS_RAM) PROGMEM #endif -char usbDescriptorDevice[]; +const char usbDescriptorDevice[]; extern #if !(USB_CFG_DESCR_PROPS_CONFIGURATION & USB_PROP_IS_RAM) PROGMEM #endif -char usbDescriptorConfiguration[]; +const char usbDescriptorConfiguration[]; extern #if !(USB_CFG_DESCR_PROPS_HID_REPORT & USB_PROP_IS_RAM) PROGMEM #endif -char usbDescriptorHidReport[]; +const char usbDescriptorHidReport[]; extern #if !(USB_CFG_DESCR_PROPS_STRING_0 & USB_PROP_IS_RAM) PROGMEM #endif -char usbDescriptorString0[]; +const char usbDescriptorString0[]; extern #if !(USB_CFG_DESCR_PROPS_STRING_VENDOR & USB_PROP_IS_RAM) PROGMEM #endif -int usbDescriptorStringVendor[]; +const int usbDescriptorStringVendor[]; extern #if !(USB_CFG_DESCR_PROPS_STRING_PRODUCT & USB_PROP_IS_RAM) PROGMEM #endif -int usbDescriptorStringDevice[]; +const int usbDescriptorStringDevice[]; extern #if !(USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER & USB_PROP_IS_RAM) PROGMEM #endif -int usbDescriptorStringSerialNumber[]; +const int usbDescriptorStringSerialNumber[]; #endif /* __ASSEMBLER__ */ diff --git a/protocol/vusb/vusb.c b/protocol/vusb/vusb.c index 328885a9b5..7d0292ed17 100644 --- a/protocol/vusb/vusb.c +++ b/protocol/vusb/vusb.c @@ -35,6 +35,13 @@ static report_keyboard_t kbuf[KBUF_SIZE]; static uint8_t kbuf_head = 0; static uint8_t kbuf_tail = 0; +typedef struct { + uint8_t modifier; + uint8_t reserved; + uint8_t keycode[6]; +} keyboard_report_t; + +static keyboard_report_t keyboard_report; // sent to PC /* transfer keyboard report from buffer */ void vusb_transfer_keyboard(void) @@ -168,8 +175,8 @@ usbRequest_t *rq = (void *)data; if(rq->bRequest == USBRQ_HID_GET_REPORT){ debug("GET_REPORT:"); /* we only have one report type, so don't look at wValue */ - usbMsgPtr = (void *)keyboard_report; - return sizeof(*keyboard_report); + usbMsgPtr = (void *)&keyboard_report; + return sizeof(keyboard_report); }else if(rq->bRequest == USBRQ_HID_GET_IDLE){ debug("GET_IDLE: "); //debug_hex(vusb_idle_rate); @@ -232,7 +239,7 @@ uchar usbFunctionWrite(uchar *data, uchar len) * * from an example in HID spec appendix */ -PROGMEM uchar keyboard_hid_report[] = { +const PROGMEM uchar keyboard_hid_report[] = { 0x05, 0x01, // Usage Page (Generic Desktop), 0x09, 0x06, // Usage (Keyboard), 0xA1, 0x01, // Collection (Application), @@ -275,7 +282,7 @@ PROGMEM uchar keyboard_hid_report[] = { * http://www.keil.com/forum/15671/ * http://www.microsoft.com/whdc/device/input/wheel.mspx */ -PROGMEM uchar mouse_hid_report[] = { +const PROGMEM uchar mouse_hid_report[] = { /* mouse */ 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) @@ -358,7 +365,7 @@ PROGMEM uchar mouse_hid_report[] = { * contains: device, interface, HID and endpoint descriptors */ #if USB_CFG_DESCR_PROPS_CONFIGURATION -PROGMEM char usbDescriptorConfiguration[] = { /* USB configuration descriptor */ +const PROGMEM char usbDescriptorConfiguration[] = { /* USB configuration descriptor */ 9, /* sizeof(usbDescriptorConfiguration): length of descriptor in bytes */ USBDESCR_CONFIG, /* descriptor type */ 9 + (9 + 9 + 7) + (9 + 9 + 7), 0, |