diff --git a/Debug/print/print.h b/Debug/print/print.h index 7d27ecd..73744a3 100644 --- a/Debug/print/print.h +++ b/Debug/print/print.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 by Jacob Alexander +/* Copyright (C) 2011-2013 by Jacob Alexander * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -27,8 +27,12 @@ // AVR Includes #include -// Project Includes -#include "usb_keyboard_debug.h" +// USB Includes +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) +#include "avr/usb_keyboard_debug.h" +#elif defined(_mk20dx128_) +#include "arm/usb_keyboard.h" +#endif diff --git a/Lib/MacroLib.h b/Lib/MacroLib.h new file mode 100644 index 0000000..9bf22a8 --- /dev/null +++ b/Lib/MacroLib.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2013 by Jacob Alexander + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +// This include file decides which set of compiler family include files to use on typical Macro modules. +// Additional includes should only be added to this file if they should be added to *all* Macro modules. + + +// ----- Includes ----- + +#ifndef __MACROLIB_H +#define __MACROLIB_H + +// ARM +#if defined(_mk20dx128_) + +#include +#include +#include + +#endif + + + +// AVR +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + +#include +#include + +#endif + + +#endif + diff --git a/Lib/MainLib.h b/Lib/MainLib.h new file mode 100644 index 0000000..9ccb7e3 --- /dev/null +++ b/Lib/MainLib.h @@ -0,0 +1,52 @@ +/* Copyright (C) 2013 by Jacob Alexander + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +// This include file decides which set of compiler family include files to use on typical Scan modules. +// Additional includes should only be added to this file if they should be added to *all* Scan modules. + + +// ----- Includes ----- + +#ifndef __MACROLIB_H +#define __MACROLIB_H + +// ARM +#if defined(_mk20dx128_) + +#include +#include + +#endif + + + +// AVR +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + +#include +#include + +#endif + + +#endif + diff --git a/Lib/ScanLib.h b/Lib/ScanLib.h new file mode 100644 index 0000000..5d6d6d6 --- /dev/null +++ b/Lib/ScanLib.h @@ -0,0 +1,54 @@ +/* Copyright (C) 2013 by Jacob Alexander + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +// This include file decides which set of compiler family include files to use on typical Scan modules. +// Additional includes should only be added to this file if they should be added to *all* Scan modules. + + +// ----- Includes ----- + +#ifndef __SCANLIB_H +#define __SCANLIB_H + +// ARM +#if defined(_mk20dx128_) + +#include +#include +#include + +#endif + + + +// AVR +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + +#include +#include +#include + +#endif + + +#endif + diff --git a/Lib/USBLib.h b/Lib/USBLib.h new file mode 100644 index 0000000..7ebd034 --- /dev/null +++ b/Lib/USBLib.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2013 by Jacob Alexander + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +// This include file decides which set of compiler family include files to use on typical Scan modules. +// Additional includes should only be added to this file if they should be added to *all* Scan modules. + + +// ----- Includes ----- + +#ifndef __MACROLIB_H +#define __MACROLIB_H + +// ARM +#if defined(_mk20dx128_) + +#include +#include + +#endif + + + +// AVR +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + +#include + +#endif + + +#endif + diff --git a/Macro/basic/macro.c b/Macro/basic/macro.c index bf04851..29c8090 100644 --- a/Macro/basic/macro.c +++ b/Macro/basic/macro.c @@ -21,9 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Macro/buffer/macro.c b/Macro/buffer/macro.c index eab23f3..e25b0c9 100644 --- a/Macro/buffer/macro.c +++ b/Macro/buffer/macro.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 by Jacob Alexander +/* Copyright (C) 2011-2013 by Jacob Alexander * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,9 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/BETKB/scan_loop.c b/Scan/BETKB/scan_loop.c index f473f6d..ee80f86 100644 --- a/Scan/BETKB/scan_loop.c +++ b/Scan/BETKB/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/EpsonQX-10/scan_loop.c b/Scan/EpsonQX-10/scan_loop.c index 9cd813b..d531ff5 100644 --- a/Scan/EpsonQX-10/scan_loop.c +++ b/Scan/EpsonQX-10/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/FACOM6684/scan_loop.c b/Scan/FACOM6684/scan_loop.c index 7babd64..57e3683 100644 --- a/Scan/FACOM6684/scan_loop.c +++ b/Scan/FACOM6684/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/HP150/scan_loop.c b/Scan/HP150/scan_loop.c index 40ba111..fa6b714 100644 --- a/Scan/HP150/scan_loop.c +++ b/Scan/HP150/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/Kaypro1/scan_loop.c b/Scan/Kaypro1/scan_loop.c index 97d0318..3ddceab 100644 --- a/Scan/Kaypro1/scan_loop.c +++ b/Scan/Kaypro1/scan_loop.c @@ -21,9 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/MicroSwitch8304/scan_loop.c b/Scan/MicroSwitch8304/scan_loop.c index fdacb6c..2b85480 100644 --- a/Scan/MicroSwitch8304/scan_loop.c +++ b/Scan/MicroSwitch8304/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/SonyNEWS/scan_loop.c b/Scan/SonyNEWS/scan_loop.c index 6cab58a..f2bd40d 100644 --- a/Scan/SonyNEWS/scan_loop.c +++ b/Scan/SonyNEWS/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/SonyOA-S3400/scan_loop.c b/Scan/SonyOA-S3400/scan_loop.c index c7dd71b..4165d3d 100644 --- a/Scan/SonyOA-S3400/scan_loop.c +++ b/Scan/SonyOA-S3400/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/Tandy1000/scan_loop.c b/Scan/Tandy1000/scan_loop.c index a906b13..0c411b3 100644 --- a/Scan/Tandy1000/scan_loop.c +++ b/Scan/Tandy1000/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/UnivacF3W9/scan_loop.c b/Scan/UnivacF3W9/scan_loop.c index cb417a6..697b1d1 100644 --- a/Scan/UnivacF3W9/scan_loop.c +++ b/Scan/UnivacF3W9/scan_loop.c @@ -21,10 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include -#include +// Compiler Includes +#include // Project Includes #include diff --git a/Scan/matrix/scan_loop.c b/Scan/matrix/scan_loop.c index 1b3912d..34b72ca 100644 --- a/Scan/matrix/scan_loop.c +++ b/Scan/matrix/scan_loop.c @@ -21,8 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include +// Compiler Includes +#include // Project Includes #include diff --git a/USB/pjrc/usb_keyboard_debug.c b/USB/pjrc/avr/usb_keyboard_debug.c similarity index 98% rename from USB/pjrc/usb_keyboard_debug.c rename to USB/pjrc/avr/usb_keyboard_debug.c index 1043e6a..fd9d573 100644 --- a/USB/pjrc/usb_keyboard_debug.c +++ b/USB/pjrc/avr/usb_keyboard_debug.c @@ -315,21 +315,6 @@ uint8_t usb_configured(void) return usb_configuration; } - -// perform a single keystroke -int8_t usb_keyboard_press(uint8_t key, uint8_t modifier) -{ - int8_t r; - - USBKeys_Modifiers = modifier; - USBKeys_Array[0] = key; - r = usb_keyboard_send(); - if (r) return r; - USBKeys_Modifiers = 0; - USBKeys_Array[0] = 0; - return usb_keyboard_send(); -} - // send the contents of USBKeys_Array and USBKeys_Modifiers int8_t usb_keyboard_send(void) { diff --git a/USB/pjrc/usb_keyboard_debug.h b/USB/pjrc/avr/usb_keyboard_debug.h similarity index 97% rename from USB/pjrc/usb_keyboard_debug.h rename to USB/pjrc/avr/usb_keyboard_debug.h index ffcf129..f592bc1 100644 --- a/USB/pjrc/usb_keyboard_debug.h +++ b/USB/pjrc/avr/usb_keyboard_debug.h @@ -7,7 +7,6 @@ void usb_init(void); // initialize everything uint8_t usb_configured(void); // is the USB port configured -int8_t usb_keyboard_press(uint8_t key, uint8_t modifier); int8_t usb_keyboard_send(void); diff --git a/USB/pjrc/setup.cmake b/USB/pjrc/setup.cmake index ae70a0a..90b23a1 100644 --- a/USB/pjrc/setup.cmake +++ b/USB/pjrc/setup.cmake @@ -1,6 +1,6 @@ ###| CMake Kiibohd Controller USB Module |### # -# Written by Jacob Alexander in 2011 for the Kiibohd Controller +# Written by Jacob Alexander in 2011-2013 for the Kiibohd Controller # # Released into the Public Domain # @@ -11,10 +11,27 @@ # Module C files # -set( USB_SRCS - usb_com.c - usb_keyboard_debug.c -) + +#| AVR Compiler +if ( ${COMPILER_FAMILY} MATCHES "avr" ) + + set( USB_SRCS + usb_com.c + avr/usb_keyboard_debug.c + ) + +#| ARM Compiler +elseif ( ${COMPILER_FAMILY} MATCHES "arm" ) + + set( USB_SRCS + usb_com.c + arm/usb_desc.c + arm/usb_dev.c + arm/usb_keyboard.c + arm/usb_mem.c + ) + +endif ( ${COMPILER_FAMILY} MATCHES "avr" ) ### diff --git a/USB/pjrc/usb_com.c b/USB/pjrc/usb_com.c index a0d5de2..f9ed08f 100644 --- a/USB/pjrc/usb_com.c +++ b/USB/pjrc/usb_com.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 by Jacob Alexander +/* Copyright (C) 2011-2013 by Jacob Alexander * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,13 +22,17 @@ // ----- Includes ----- // Compiler Includes -#include - -// AVR Includes +#include // Project Includes #include -#include "usb_keyboard_debug.h" + +// USB Includes +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) +#include "avr/usb_keyboard_debug.h" +#elif defined(_mk20dx128_) +#include "arm/usb_keyboard.h" +#endif // Local Includes #include "usb_com.h" diff --git a/USB/pjrc/usb_com.h b/USB/pjrc/usb_com.h index 432377f..db47095 100644 --- a/USB/pjrc/usb_com.h +++ b/USB/pjrc/usb_com.h @@ -24,8 +24,6 @@ // ----- Includes ----- -// AVR Includes - // Compiler Includes #include diff --git a/USB/pjrc/usb_keyboard.c b/USB/pjrc/usb_keyboard.c deleted file mode 100644 index 89b2e9b..0000000 --- a/USB/pjrc/usb_keyboard.c +++ /dev/null @@ -1,592 +0,0 @@ -/* USB Keyboard Example for Teensy USB Development Board - * http://www.pjrc.com/teensy/usb_keyboard.html - * Copyright (c) 2009 PJRC.COM, LLC - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -// Version 1.0: Initial Release -// Version 1.1: Add support for Teensy 2.0 - -#define USB_SERIAL_PRIVATE_INCLUDE -#include "usb_keyboard.h" - -/************************************************************************** - * - * Configurable Options - * - **************************************************************************/ - -// You can change these to give your code its own name. -#define STR_MANUFACTURER L"MfgName" -#define STR_PRODUCT L"Keyboard" - - -// Mac OS-X and Linux automatically load the correct drivers. On -// Windows, even though the driver is supplied by Microsoft, an -// INF file is needed to load the driver. These numbers need to -// match the INF file. -#define VENDOR_ID 0x16C0 -#define PRODUCT_ID 0x047C - - -// USB devices are supposed to implment a halt feature, which is -// rarely (if ever) used. If you comment this line out, the halt -// code will be removed, saving 102 bytes of space (gcc 4.3.0). -// This is not strictly USB compliant, but works with all major -// operating systems. -#define SUPPORT_ENDPOINT_HALT - - - -/************************************************************************** - * - * Endpoint Buffer Configuration - * - **************************************************************************/ - -#define ENDPOINT0_SIZE 32 - -#define KEYBOARD_INTERFACE 0 -#define KEYBOARD_ENDPOINT 3 -#define KEYBOARD_SIZE 8 -#define KEYBOARD_BUFFER EP_DOUBLE_BUFFER - -static const uint8_t PROGMEM endpoint_config_table[] = { - 0, - 0, - 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KEYBOARD_SIZE) | KEYBOARD_BUFFER, - 0 -}; - - -/************************************************************************** - * - * Descriptor Data - * - **************************************************************************/ - -// Descriptors are the data that your computer reads when it auto-detects -// this USB device (called "enumeration" in USB lingo). The most commonly -// changed items are editable at the top of this file. Changing things -// in here should only be done by those who've read chapter 9 of the USB -// spec and relevant portions of any USB class specifications! - - -static uint8_t PROGMEM device_descriptor[] = { - 18, // bLength - 1, // bDescriptorType - 0x00, 0x02, // bcdUSB - 0, // bDeviceClass - 0, // bDeviceSubClass - 0, // bDeviceProtocol - ENDPOINT0_SIZE, // bMaxPacketSize0 - LSB(VENDOR_ID), MSB(VENDOR_ID), // idVendor - LSB(PRODUCT_ID), MSB(PRODUCT_ID), // idProduct - 0x00, 0x01, // bcdDevice - 1, // iManufacturer - 2, // iProduct - 0, // iSerialNumber - 1 // bNumConfigurations -}; - -// Keyboard Protocol 1, HID 1.11 spec, Appendix B, page 59-60 -static uint8_t PROGMEM keyboard_hid_report_desc[] = { - 0x05, 0x01, // Usage Page (Generic Desktop), - 0x09, 0x06, // Usage (Keyboard), - 0xA1, 0x01, // Collection (Application), - 0x75, 0x01, // Report Size (1), - 0x95, 0x08, // Report Count (8), - 0x05, 0x07, // Usage Page (Key Codes), - 0x19, 0xE0, // Usage Minimum (224), - 0x29, 0xE7, // Usage Maximum (231), - 0x15, 0x00, // Logical Minimum (0), - 0x25, 0x01, // Logical Maximum (1), - 0x81, 0x02, // Input (Data, Variable, Absolute), ;Modifier byte - 0x95, 0x01, // Report Count (1), - 0x75, 0x08, // Report Size (8), - 0x81, 0x03, // Input (Constant), ;Reserved byte - 0x95, 0x05, // Report Count (5), - 0x75, 0x01, // Report Size (1), - 0x05, 0x08, // Usage Page (LEDs), - 0x19, 0x01, // Usage Minimum (1), - 0x29, 0x05, // Usage Maximum (5), - 0x91, 0x02, // Output (Data, Variable, Absolute), ;LED report - 0x95, 0x01, // Report Count (1), - 0x75, 0x03, // Report Size (3), - 0x91, 0x03, // Output (Constant), ;LED report padding - 0x95, 0x06, // Report Count (6), - 0x75, 0x08, // Report Size (8), - 0x15, 0x00, // Logical Minimum (0), - 0x25, 0x68, // Logical Maximum(104), - 0x05, 0x07, // Usage Page (Key Codes), - 0x19, 0x00, // Usage Minimum (0), - 0x29, 0x68, // Usage Maximum (104), - 0x81, 0x00, // Input (Data, Array), - 0xc0 // End Collection -}; - -#define CONFIG1_DESC_SIZE (9+9+9+7) -#define KEYBOARD_HID_DESC_OFFSET (9+9) -static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = { - // configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10 - 9, // bLength; - 2, // bDescriptorType; - LSB(CONFIG1_DESC_SIZE), // wTotalLength - MSB(CONFIG1_DESC_SIZE), - 1, // bNumInterfaces - 1, // bConfigurationValue - 0, // iConfiguration - 0xC0, // bmAttributes - 50, // bMaxPower - // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 - 9, // bLength - 4, // bDescriptorType - KEYBOARD_INTERFACE, // bInterfaceNumber - 0, // bAlternateSetting - 1, // bNumEndpoints - 0x03, // bInterfaceClass (0x03 = HID) - 0x01, // bInterfaceSubClass (0x01 = Boot) - 0x01, // bInterfaceProtocol (0x01 = Keyboard) - 0, // iInterface - // HID interface descriptor, HID 1.11 spec, section 6.2.1 - 9, // bLength - 0x21, // bDescriptorType - 0x11, 0x01, // bcdHID - 0, // bCountryCode - 1, // bNumDescriptors - 0x22, // bDescriptorType - sizeof(keyboard_hid_report_desc), // wDescriptorLength - 0, - // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 - 7, // bLength - 5, // bDescriptorType - KEYBOARD_ENDPOINT | 0x80, // bEndpointAddress - 0x03, // bmAttributes (0x03=intr) - KEYBOARD_SIZE, 0, // wMaxPacketSize - 1 // bInterval -}; - -// If you're desperate for a little extra code memory, these strings -// can be completely removed if iManufacturer, iProduct, iSerialNumber -// in the device desciptor are changed to zeros. -struct usb_string_descriptor_struct { - uint8_t bLength; - uint8_t bDescriptorType; - int16_t wString[]; -}; -static struct usb_string_descriptor_struct PROGMEM string0 = { - 4, - 3, - {0x0409} -}; -static struct usb_string_descriptor_struct PROGMEM string1 = { - sizeof(STR_MANUFACTURER), - 3, - STR_MANUFACTURER -}; -static struct usb_string_descriptor_struct PROGMEM string2 = { - sizeof(STR_PRODUCT), - 3, - STR_PRODUCT -}; - -// This table defines which descriptor data is sent for each specific -// request from the host (in wValue and wIndex). -static struct descriptor_list_struct { - uint16_t wValue; - uint16_t wIndex; - const uint8_t *addr; - uint8_t length; -} PROGMEM descriptor_list[] = { - {0x0100, 0x0000, device_descriptor, sizeof(device_descriptor)}, - {0x0200, 0x0000, config1_descriptor, sizeof(config1_descriptor)}, - {0x2200, KEYBOARD_INTERFACE, keyboard_hid_report_desc, sizeof(keyboard_hid_report_desc)}, - {0x2100, KEYBOARD_INTERFACE, config1_descriptor+KEYBOARD_HID_DESC_OFFSET, 9}, - {0x0300, 0x0000, (const uint8_t *)&string0, 4}, - {0x0301, 0x0409, (const uint8_t *)&string1, sizeof(STR_MANUFACTURER)}, - {0x0302, 0x0409, (const uint8_t *)&string2, sizeof(STR_PRODUCT)} -}; -#define NUM_DESC_LIST (sizeof(descriptor_list)/sizeof(struct descriptor_list_struct)) - - -/************************************************************************** - * - * Variables - these are the only non-stack RAM usage - * - **************************************************************************/ - -// zero when we are not configured, non-zero when enumerated -static volatile uint8_t usb_configuration=0; - -// which modifier keys are currently pressed -// 1=left ctrl, 2=left shift, 4=left alt, 8=left gui -// 16=right ctrl, 32=right shift, 64=right alt, 128=right gui -uint8_t keyboard_modifier_keys=0; - -// which keys are currently pressed, up to 6 keys may be down at once -uint8_t keyboard_keys[6]={0,0,0,0,0,0}; - -// protocol setting from the host. We use exactly the same report -// either way, so this variable only stores the setting since we -// are required to be able to report which setting is in use. -static uint8_t keyboard_protocol=1; - -// the idle configuration, how often we send the report to the -// host (ms * 4) even when it hasn't changed -static uint8_t keyboard_idle_config=125; - -// count until idle timeout -static uint8_t keyboard_idle_count=0; - -// 1=num lock, 2=caps lock, 4=scroll lock, 8=compose, 16=kana -volatile uint8_t keyboard_leds=0; - - -/************************************************************************** - * - * Public Functions - these are the API intended for the user - * - **************************************************************************/ - - -// initialize USB -void usb_init(void) -{ - HW_CONFIG(); - USB_FREEZE(); // enable USB - PLL_CONFIG(); // config PLL - while (!(PLLCSR & (1<= NUM_DESC_LIST) { - UECONX = (1< desc_length) len = desc_length; - do { - // wait for host ready for IN packet - do { - i = UEINTX; - } while (!(i & ((1<= 1 && i <= MAX_ENDPOINT) { - usb_send_in(); - UENUM = i; - if (bRequest == SET_FEATURE) { - UECONX = (1<> 8); - keyboard_idle_count = 0; - usb_send_in(); - return; - } - if (bRequest == HID_SET_PROTOCOL) { - keyboard_protocol = wValue; - usb_send_in(); - return; - } - } - } - } - UECONX = (1< - -void usb_init(void); // initialize everything -uint8_t usb_configured(void); // is the USB port configured - -int8_t usb_keyboard_press(uint8_t key, uint8_t modifier); -int8_t usb_keyboard_send(void); -extern uint8_t keyboard_modifier_keys; -extern uint8_t keyboard_keys[6]; -extern volatile uint8_t keyboard_leds; - -#endif - diff --git a/arm.cmake b/arm.cmake index 1b6a8ce..e5469b0 100644 --- a/arm.cmake +++ b/arm.cmake @@ -95,7 +95,7 @@ set( GENDEPFLAGS "-MMD" ) #| Compiler Flags -add_definitions( "-mcpu=${CPU} -DF_CPU=${F_CPU} -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS}" ) +add_definitions( "-mcpu=${CPU} -DF_CPU=${F_CPU} -D_${CHIP}_=1 -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}" ) #| Linker Flags diff --git a/avr.cmake b/avr.cmake index 7b0a178..1c50803 100644 --- a/avr.cmake +++ b/avr.cmake @@ -91,7 +91,7 @@ set( GENDEPFLAGS "-MMD -MP" ) #| Compiler Flags -add_definitions( "-mmcu=${MCU} -DF_CPU=${F_CPU} -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS}" ) +add_definitions( "-mmcu=${MCU} -DF_CPU=${F_CPU} -D_${MCU}_=1 -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}" ) #| Linker Flags @@ -102,7 +102,7 @@ set( LINKER_FLAGS "-mmcu=${MCU} -Wl,-Map=${TARGET}.map,--cref -Wl,--relax -Wl,-- set( HEX_FLAGS -O ${FORMAT} -R .eeprom -R .fuse -R .lock -R .signature ) -#| Eep Flags +#| Eep Flags (XXX, I've removed this target from the builds, but keeping the set line as a note) set( EEP_FLAGS -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ${FORMAT} ) diff --git a/main.c b/main.c index 1533443..55870e7 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 by Jacob Alexander +/* Copyright (C) 2011-2013 by Jacob Alexander * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,9 +21,8 @@ // ----- Includes ----- -// AVR Includes -#include -#include +// Compiler Includes +#include // Project Includes #include @@ -43,7 +42,9 @@ // ----- Macros ----- +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) +#endif @@ -63,6 +64,9 @@ volatile uint8_t sendKeypresses = 0; inline void pinSetup(void) { +// AVR +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + // For each pin, 0=input, 1=output #if defined(__AVR_AT90USB1286__) DDRA = 0x00; @@ -83,13 +87,37 @@ inline void pinSetup(void) PORTD = 0x00; PORTE = 0x00; PORTF = 0x00; + +// ARM +#elif defined(_mk20dx128_) + // TODO +#endif } -int main(void) + +inline void usbTimerSetup(void) { +// AVR +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + // Setup with 16 MHz clock CPU_PRESCALE( 0 ); + // Setup ISR Timer for flagging a kepress send to USB + // Set to 256 * 1024 (8 bit timer with Clock/1024 prescalar) timer + TCCR0A = 0x00; + TCCR0B = 0x03; + TIMSK0 = (1 << TOIE0); + +// ARM +#elif defined(_mk20dx128_) + // TODO +#endif +} + + +int main(void) +{ // Configuring Pins pinSetup(); init_errorLED(); @@ -98,10 +126,7 @@ int main(void) usb_setup(); // Setup ISR Timer for flagging a kepress send to USB - // Set to 256 * 1024 (8 bit timer with Clock/1024 prescalar) timer - TCCR0A = 0x00; - TCCR0B = 0x03; - TIMSK0 = (1 << TOIE0); + usbTimerSetup(); // Main Detection Loop uint8_t ledTimer = 15; // Enable LED for a short time @@ -146,7 +171,12 @@ int main(void) } } -// USB Keyboard Data Send Counter Interrupt + +// ----- Interrupts ----- + +// AVR - USB Keyboard Data Send Counter Interrupt +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + ISR( TIMER0_OVF_vect ) { sendKeypressCounter++; @@ -156,3 +186,8 @@ ISR( TIMER0_OVF_vect ) } } +// ARM - USB Keyboard Data Send Counter Interrupt +#elif defined(_mk20dx128_) + // TODO +#endif +