Add keyboard/mbed_onekey
authortmk <nobody@nowhere>
Sun, 15 Jun 2014 04:56:17 +0000 (13:56 +0900)
committertmk <nobody@nowhere>
Wed, 30 Jul 2014 05:07:43 +0000 (14:07 +0900)
common/debug.h
common/print.c
common/print.h
keyboard/mbed_onekey/HIDKeyboard.cpp [new file with mode: 0644]
keyboard/mbed_onekey/HIDKeyboard.h [new file with mode: 0644]
keyboard/mbed_onekey/Makefile [new file with mode: 0644]
keyboard/mbed_onekey/common.mk [new file with mode: 0644]
keyboard/mbed_onekey/gcc.mk [new file with mode: 0644]
keyboard/mbed_onekey/main.cpp [new file with mode: 0644]
keyboard/mbed_onekey/mbed.mk [new file with mode: 0644]

index 8aaa5ed915e2b62a9ada6ff3b9e6b628cc21122c..399b2d0a7c5f211feb5cb02ac366828bbb1ec47b 100644 (file)
@@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #define dprint(s)           do { if (debug_enable) print(s); } while (0)
 #define dprintln()          do { if (debug_enable) print_crlf(); } while (0)
-#define dprintf(fmt, ...)   do { if (debug_enable) __xprintf(PSTR(fmt), ##__VA_ARGS__); } while (0)
+#define dprintf(fmt, ...)   do { if (debug_enable) xprintf(fmt, ##__VA_ARGS__); } while (0)
 #define dmsg(s)             dprintf("%s at %s: %S\n", __FILE__, __LINE__, PSTR(s))
 
 /* DO NOT USE these anymore */
index 783bb4e9bb676a39b979be1405988b2e99991ce6..c13a29f3170d57799bf594c3511ee02b4f924217 100644 (file)
@@ -37,26 +37,4 @@ void print_set_sendchar(int8_t (*sendchar_func)(uint8_t))
     xdev_out(sendchar_func);
 }
 
-void print_S(const char *s)
-{
-    uint8_t c;
-    while (1) {
-        c = *s++;
-        if (!c) break;
-        if (c == '\n') sendchar('\r');
-        sendchar(c);
-    }
-}
-
-void print_lf(void)
-{
-    sendchar('\n');
-}
-
-void print_crlf(void)
-{
-    sendchar('\r');
-    sendchar('\n');
-}
-
 #endif
index 930e84be99d555871aec946f27cf2c49f909eb76..6a6771f7100acebe523bd9aeaeea2d977bc50255 100644 (file)
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "xprintf.h"
 #include "util.h"
 
 
-// this macro allows you to write print("some text") and
-// the string is automatically placed into flash memory :)
-// TODO: avoid collision with arduino/Print.h
-#ifndef __cplusplus
-#define print(s)                print_P(PSTR(s))
-#endif
-#define println(s)              print_P(PSTR(s "\n"))
 
-/* for old name */
-#define pdec(data)              print_dec(data)
-#define pdec16(data)            print_dec(data)
-#define phex(data)              print_hex8(data)
-#define phex16(data)            print_hex16(data)
-#define pbin(data)              print_bin8(data)
-#define pbin16(data)            print_bin16(data)
-#define pbin_reverse(data)      print_bin_reverse8(data)
-#define pbin_reverse16(data)    print_bin_reverse16(data)
 
-/* print value utility */
-#define print_val_dec(v)           xprintf(#v ": %u\n", v)
-#define print_val_decs(v)          xprintf(#v ": %d\n", v)
-#define print_val_hex8(v)          xprintf(#v ": %X\n", v)
-#define print_val_hex16(v)         xprintf(#v ": %02X\n", v)
-#define print_val_hex32(v)         xprintf(#v ": %04lX\n", v)
-#define print_val_bin8(v)          xprintf(#v ": %08b\n", v)
-#define print_val_bin16(v)         xprintf(#v ": %016b\n", v)
-#define print_val_bin32(v)         xprintf(#v ": %032lb\n", v)
-#define print_val_bin_reverse8(v)  xprintf(#v ": %08b\n", bitrev(v))
-#define print_val_bin_reverse16(v) xprintf(#v ": %016b\n", bitrev16(v))
-#define print_val_bin_reverse32(v) xprintf(#v ": %032lb\n", bitrev32(v))
+#ifndef NO_PRINT
 
 
+#ifdef __AVR__
+
+#include "xprintf.h"
 
-#ifndef NO_PRINT
+
+// TODO: avoid collision with arduino/Print.h
+#ifndef __cplusplus
+#define print(s)    xputs(PSTR(s))
+#endif
+#define println(s)  xputs(PSTR(s "\n"))
 
 #ifdef __cplusplus
 extern "C" {
 #endif
-
 /* function pointer of sendchar to be used by print utility */
 void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
 
-/* print string stored in data memory(SRAM)
- *     print_S("hello world");
- * This consumes precious SRAM memory space for string.
- */
-void print_S(const char *s);
+#elif __arm__
 
-void print_lf(void);
-void print_crlf(void);
+#include "mbed.h"
+Serial ser(UART_TX, UART_RX);
+#define xprintf     ser.printf
+#define print(s)    xprintf(s)
+#define println(s)  xprintf(s "\n")
+/* TODO: to select output destinations: UART/USBSerial */
+#define print_set_sendchar(func)
 
+#endif /* __AVR__ */
 
-/* print string stored in program memory(FLASH)
- *     print_P(PSTR("hello world");
- * This consumes relatively abundant FLASH memory area not SRAM.
- */
-#define print_P(s)          xputs(s)
 
 /* decimal */
-#define print_dec(i)        xprintf("%u", i)
-#define print_decs(i)       xprintf("%d", i)
-
+#define print_dec(i)                xprintf("%u", i)
+#define print_decs(i)               xprintf("%d", i)
 /* hex */
-#define print_hex4(i)       xprintf("%X", i)
-#define print_hex8(i)       xprintf("%02X", i)
-#define print_hex16(i)      xprintf("%04X", i)
-#define print_hex32(i)      xprintf("%08lX", i)
-
+#define print_hex4(i)               xprintf("%X", i)
+#define print_hex8(i)               xprintf("%02X", i)
+#define print_hex16(i)              xprintf("%04X", i)
+#define print_hex32(i)              xprintf("%08lX", i)
 /* binary */
-#define print_bin4(i)       xprintf("%04b", i)
-#define print_bin8(i)       xprintf("%08b", i)
-#define print_bin16(i)      xprintf("%016b", i)
-#define print_bin32(i)      xprintf("%032lb", i)
-
-#define print_bin_reverse8(i)   xprintf("%08b", bitrev(i))
-#define print_bin_reverse16(i)  xprintf("%016b", bitrev16(i))
-#define print_bin_reverse32(i)  xprintf("%032lb", bitrev32(i))
-
-#ifdef __cplusplus
-}
-#endif
-
-#else
-
+#define print_bin4(i)               xprintf("%04b", i)
+#define print_bin8(i)               xprintf("%08b", i)
+#define print_bin16(i)              xprintf("%016b", i)
+#define print_bin32(i)              xprintf("%032lb", i)
+#define print_bin_reverse8(i)       xprintf("%08b", bitrev(i))
+#define print_bin_reverse16(i)      xprintf("%016b", bitrev16(i))
+#define print_bin_reverse32(i)      xprintf("%032lb", bitrev32(i))
+/* print value utility */
+#define print_val_dec(v)            xprintf(#v ": %u\n", v)
+#define print_val_decs(v)           xprintf(#v ": %d\n", v)
+#define print_val_hex8(v)           xprintf(#v ": %X\n", v)
+#define print_val_hex16(v)          xprintf(#v ": %02X\n", v)
+#define print_val_hex32(v)          xprintf(#v ": %04lX\n", v)
+#define print_val_bin8(v)           xprintf(#v ": %08b\n", v)
+#define print_val_bin16(v)          xprintf(#v ": %016b\n", v)
+#define print_val_bin32(v)          xprintf(#v ": %032lb\n", v)
+#define print_val_bin_reverse8(v)   xprintf(#v ": %08b\n", bitrev(v))
+#define print_val_bin_reverse16(v)  xprintf(#v ": %016b\n", bitrev16(v))
+#define print_val_bin_reverse32(v)  xprintf(#v ": %032lb\n", bitrev32(v))
+
+#else   /* NO_PRINT */
+
+#define xprintf
+#define print
+#define println
 #define print_set_sendchar(func)
-#define print_S(s)
-#define print_P(s)
 #define print_dec(data)
 #define print_decs(data)
 #define print_hex4(data)
@@ -132,8 +113,30 @@ void print_crlf(void);
 #define print_bin_reverse8(data)
 #define print_bin_reverse16(data)
 #define print_bin_reverse32(data)
-
-#endif
+#define print_val_dec(v)
+#define print_val_decs(v)
+#define print_val_hex8(v)
+#define print_val_hex16(v)
+#define print_val_hex32(v)
+#define print_val_bin8(v)
+#define print_val_bin16(v)
+#define print_val_bin32(v)
+#define print_val_bin_reverse8(v)
+#define print_val_bin_reverse16(v)
+#define print_val_bin_reverse32(v)
+
+#endif  /* NO_PRINT */
+
+
+/* Backward compatiblitly for old name */
+#define pdec(data)              print_dec(data)
+#define pdec16(data)            print_dec(data)
+#define phex(data)              print_hex8(data)
+#define phex16(data)            print_hex16(data)
+#define pbin(data)              print_bin8(data)
+#define pbin16(data)            print_bin16(data)
+#define pbin_reverse(data)      print_bin_reverse8(data)
+#define pbin_reverse16(data)    print_bin_reverse16(data)
 
 
 #endif
diff --git a/keyboard/mbed_onekey/HIDKeyboard.cpp b/keyboard/mbed_onekey/HIDKeyboard.cpp
new file mode 100644 (file)
index 0000000..f40c2d2
--- /dev/null
@@ -0,0 +1,256 @@
+#include <stdint.h>
+#include "USBHID.h"
+#include "USBHID_Types.h"
+#include "USBDescriptor.h"
+#include "HIDKeyboard.h"
+
+#define DEFAULT_CONFIGURATION (1)
+
+
+HIDKeyboard::HIDKeyboard(uint16_t vendor_id, uint16_t product_id, uint16_t product_release): USBDevice(vendor_id, product_id, product_release)
+{
+    USBDevice::connect();
+}
+
+bool HIDKeyboard::sendReport(report_keyboard_t report) {
+    USBDevice::write(EP1IN, report.raw, sizeof(report), MAX_PACKET_SIZE_EP1);
+    return true;
+}
+
+bool HIDKeyboard::USBCallback_setConfiguration(uint8_t configuration) {
+    if (configuration != DEFAULT_CONFIGURATION) {
+        return false;
+    }
+
+    // Configure endpoints > 0
+    addEndpoint(EPINT_IN, MAX_PACKET_SIZE_EPINT);
+    //addEndpoint(EPINT_OUT, MAX_PACKET_SIZE_EPINT);
+
+    // We activate the endpoint to be able to recceive data
+    //readStart(EPINT_OUT, MAX_PACKET_SIZE_EPINT);
+    return true;
+}
+
+
+uint8_t * HIDKeyboard::stringImanufacturerDesc() {
+    static uint8_t stringImanufacturerDescriptor[] = {
+        0x18,                                            /*bLength*/
+        STRING_DESCRIPTOR,                               /*bDescriptorType 0x03*/
+        't',0,'m',0,'k',0,'-',0,'k',0,'b',0,'d',0,'.',0,'c',0,'o',0,'m',0   /*bString iManufacturer*/
+    };
+    return stringImanufacturerDescriptor;
+}
+
+uint8_t * HIDKeyboard::stringIproductDesc() {
+    static uint8_t stringIproductDescriptor[] = {
+        0x0a,                                                       /*bLength*/
+        STRING_DESCRIPTOR,                                          /*bDescriptorType 0x03*/
+        'm',0,'b',0,'e',0,'d',0                                     /*bString iProduct*/
+    };
+    return stringIproductDescriptor;
+}
+
+uint8_t * HIDKeyboard::stringIserialDesc() {
+    static uint8_t stringIserialDescriptor[] = {
+        0x04,                                                           /*bLength*/
+        STRING_DESCRIPTOR,                                              /*bDescriptorType 0x03*/
+        '0',0                                                           /*bString iSerial*/
+    };
+    return stringIserialDescriptor;
+}
+
+uint8_t * HIDKeyboard::reportDesc() {
+    static uint8_t reportDescriptor[] = {
+        USAGE_PAGE(1), 0x01,                    // Generic Desktop
+        USAGE(1), 0x06,                         // Keyboard
+        COLLECTION(1), 0x01,                    // Application
+
+        USAGE_PAGE(1), 0x07,                    // Key Codes
+        USAGE_MINIMUM(1), 0xE0,
+        USAGE_MAXIMUM(1), 0xE7,
+        LOGICAL_MINIMUM(1), 0x00,
+        LOGICAL_MAXIMUM(1), 0x01,
+        REPORT_SIZE(1), 0x01,
+        REPORT_COUNT(1), 0x08,
+        INPUT(1), 0x02,                         // Data, Variable, Absolute
+
+        REPORT_COUNT(1), 0x01,
+        REPORT_SIZE(1), 0x08,
+        INPUT(1), 0x01,                         // Constant
+
+        REPORT_COUNT(1), 0x05,
+        REPORT_SIZE(1), 0x01,
+        USAGE_PAGE(1), 0x08,                    // LEDs
+        USAGE_MINIMUM(1), 0x01,
+        USAGE_MAXIMUM(1), 0x05,
+        OUTPUT(1), 0x02,                        // Data, Variable, Absolute
+
+        REPORT_COUNT(1), 0x01,
+        REPORT_SIZE(1), 0x03,
+        OUTPUT(1), 0x01,                        // Constant
+
+
+        REPORT_COUNT(1), 0x06,
+        REPORT_SIZE(1), 0x08,
+        LOGICAL_MINIMUM(1), 0x00,
+        LOGICAL_MAXIMUM(1), 0xFF,
+        USAGE_PAGE(1), 0x07,                    // Key Codes
+        USAGE_MINIMUM(1), 0x00,
+        USAGE_MAXIMUM(1), 0xFF,
+        INPUT(1), 0x00,                         // Data, Array
+        END_COLLECTION(0),
+    };
+    reportLength = sizeof(reportDescriptor);
+    return reportDescriptor;
+}
+
+uint16_t HIDKeyboard::reportDescLength() {
+    reportDesc();
+    return reportLength;
+}
+
+#define TOTAL_DESCRIPTOR_LENGTH ((1 * CONFIGURATION_DESCRIPTOR_LENGTH) \
+                               + (1 * INTERFACE_DESCRIPTOR_LENGTH) \
+                               + (1 * HID_DESCRIPTOR_LENGTH) \
+                               + (1 * ENDPOINT_DESCRIPTOR_LENGTH))
+uint8_t * HIDKeyboard::configurationDesc() {
+    static uint8_t configurationDescriptor[] = {
+        CONFIGURATION_DESCRIPTOR_LENGTH,// bLength
+        CONFIGURATION_DESCRIPTOR,       // bDescriptorType
+        LSB(TOTAL_DESCRIPTOR_LENGTH),   // wTotalLength (LSB)
+        MSB(TOTAL_DESCRIPTOR_LENGTH),   // wTotalLength (MSB)
+        0x01,                           // bNumInterfaces
+        DEFAULT_CONFIGURATION,          // bConfigurationValue
+        0x00,                           // iConfiguration
+        C_RESERVED | C_REMOTE_WAKEUP,   // bmAttributes
+        C_POWER(100),                   // bMaxPowerHello World from Mbed
+
+        INTERFACE_DESCRIPTOR_LENGTH,    // bLength
+        INTERFACE_DESCRIPTOR,           // bDescriptorType
+        0x00,                           // bInterfaceNumber
+        0x00,                           // bAlternateSetting
+        0x01,                           // bNumEndpoints
+        HID_CLASS,                      // bInterfaceClass
+        1,                              // bInterfaceSubClass (boot)
+        1,                              // bInterfaceProtocol (keyboard)
+        0x00,                           // iInterface
+
+        HID_DESCRIPTOR_LENGTH,          // bLength
+        HID_DESCRIPTOR,                 // bDescriptorType
+        LSB(HID_VERSION_1_11),          // bcdHID (LSB)
+        MSB(HID_VERSION_1_11),          // bcdHID (MSB)
+        0x00,                           // bCountryCode
+        0x01,                           // bNumDescriptors
+        REPORT_DESCRIPTOR,              // bDescriptorType
+        (uint8_t)(LSB(reportDescLength())),  // wDescriptorLength (LSB)
+        (uint8_t)(MSB(reportDescLength())),  // wDescriptorLength (MSB)
+
+        ENDPOINT_DESCRIPTOR_LENGTH,     // bLength
+        ENDPOINT_DESCRIPTOR,            // bDescriptorType
+        PHY_TO_DESC(EP1IN),             // bEndpointAddress
+        E_INTERRUPT,                    // bmAttributes
+        LSB(MAX_PACKET_SIZE_EPINT),     // wMaxPacketSize (LSB)
+        MSB(MAX_PACKET_SIZE_EPINT),     // wMaxPacketSize (MSB)
+        1,                           // bInterval (milliseconds)
+    };
+    return configurationDescriptor;
+}
+
+#if 0
+uint8_t * HIDKeyboard::deviceDesc() {
+    static uint8_t deviceDescriptor[] = {
+        DEVICE_DESCRIPTOR_LENGTH,       /* bLength */
+        DEVICE_DESCRIPTOR,              /* bDescriptorType */
+        LSB(USB_VERSION_2_0),           /* bcdUSB (LSB) */
+        MSB(USB_VERSION_2_0),           /* bcdUSB (MSB) */
+        0x00,                           /* bDeviceClass */
+        0x00,                           /* bDeviceSubClass */
+        0x00,                           /* bDeviceprotocol */
+        MAX_PACKET_SIZE_EP0,            /* bMaxPacketSize0 */
+        (uint8_t)(LSB(0xfeed)),                 /* idVendor (LSB) */
+        (uint8_t)(MSB(0xfeed)),                 /* idVendor (MSB) */
+        (uint8_t)(LSB(0x1bed)),                /* idProduct (LSB) */
+        (uint8_t)(MSB(0x1bed)),                /* idProduct (MSB) */
+        (uint8_t)(LSB(0x0002)),           /* bcdDevice (LSB) */
+        (uint8_t)(MSB(0x0002)),           /* bcdDevice (MSB) */
+        0,    /* iManufacturer */
+        0,         /* iProduct */
+        0,          /* iSerialNumber */
+        0x01                            /* bNumConfigurations */
+    };
+    return deviceDescriptor;
+}
+#endif
+
+bool HIDKeyboard::USBCallback_request() {
+    bool success = false;
+    CONTROL_TRANSFER * transfer = getTransferPtr();
+    uint8_t *hidDescriptor;
+
+    // Process additional standard requests
+
+    if ((transfer->setup.bmRequestType.Type == STANDARD_TYPE))
+    {
+        switch (transfer->setup.bRequest)
+        {
+            case GET_DESCRIPTOR:
+                switch (DESCRIPTOR_TYPE(transfer->setup.wValue))
+                {
+                    case REPORT_DESCRIPTOR:
+                        if ((reportDesc() != NULL) \
+                            && (reportDescLength() != 0))
+                        {
+                            transfer->remaining = reportDescLength();
+                            transfer->ptr = reportDesc();
+                            transfer->direction = DEVICE_TO_HOST;
+                            success = true;
+                        }
+                        break;
+                    case HID_DESCRIPTOR:
+                            // Find the HID descriptor, after the configuration descriptor
+                            hidDescriptor = findDescriptor(HID_DESCRIPTOR);
+                            if (hidDescriptor != NULL)
+                            {
+                                transfer->remaining = HID_DESCRIPTOR_LENGTH;
+                                transfer->ptr = hidDescriptor;
+                                transfer->direction = DEVICE_TO_HOST;
+                                success = true;
+                            }
+                            break;
+                     
+                    default:
+                        break;
+                }
+                break;
+            default:
+                break;
+        }
+    }
+
+    // Process class-specific requests
+/*
+    if (transfer->setup.bmRequestType.Type == CLASS_TYPE)
+    {
+        switch (transfer->setup.bRequest)
+        {
+             case SET_REPORT:
+                // First byte will be used for report ID
+                //outputReport.data[0] = transfer->setup.wValue & 0xff;
+                //outputReport.length = transfer->setup.wLength + 1;
+                outputReport.length = transfer->setup.wLength;
+
+                //transfer->remaining = sizeof(outputReport.data) - 1;
+                //transfer->ptr = &outputReport.data[1];
+                transfer->remaining = sizeof(outputReport.data);
+                transfer->ptr = &outputReport.data[0];
+                transfer->direction = HOST_TO_DEVICE;
+                transfer->notify = true;
+                success = true;
+            default:
+                break;
+        }
+    }
+*/
+
+    return success;
+}
diff --git a/keyboard/mbed_onekey/HIDKeyboard.h b/keyboard/mbed_onekey/HIDKeyboard.h
new file mode 100644 (file)
index 0000000..b00c97b
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef HIDKEYBOARD_H
+
+#include "stdint.h"
+#include "stdbool.h"
+#include "USBHID.h"
+
+
+typedef union {
+    uint8_t raw[8];
+    struct {
+        uint8_t mods;
+        uint8_t reserved;
+        uint8_t keys[6];
+    };
+} __attribute__ ((packed)) report_keyboard_t;
+
+
+class HIDKeyboard : public USBDevice {
+public:
+    HIDKeyboard(uint16_t vendor_id = 0xFEED, uint16_t product_id = 0xabed, uint16_t product_release = 0x0001);
+
+    bool sendReport(report_keyboard_t report);
+protected:
+    uint16_t reportLength;
+    virtual bool USBCallback_setConfiguration(uint8_t configuration);
+    virtual uint8_t * stringImanufacturerDesc();
+    virtual uint8_t * stringIproductDesc();
+    virtual uint8_t * stringIserialDesc();
+    virtual uint16_t reportDescLength();
+    virtual uint8_t * reportDesc();
+    virtual uint8_t * configurationDesc();
+    //virtual uint8_t * deviceDesc();
+    virtual bool USBCallback_request();
+};
+
+#endif
diff --git a/keyboard/mbed_onekey/Makefile b/keyboard/mbed_onekey/Makefile
new file mode 100644 (file)
index 0000000..e194052
--- /dev/null
@@ -0,0 +1,29 @@
+# This file was automagically generated by mbed.org. For more information, 
+# see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded
+
+PROJECT = USBKeyboard_HelloWorld
+
+TMK_DIR = ../..
+MBED_DIR = ./mbed-sdk
+
+#VPATH += $(MBED_DIR):$(TMK_DIR)
+vpath %.s .:$(MBED_DIR):$(TMK_DIR)
+vpath %.c .:$(MBED_DIR):$(TMK_DIR)
+vpath %.cpp .:$(MBED_DIR):$(TMK_DIR)
+
+OBJDIR = ./build
+
+OBJECTS = \
+       $(OBJDIR)/./HIDKeyboard.o \
+       $(OBJDIR)/./main.o
+
+SYS_OBJECTS = 
+
+INCLUDE_PATHS = -I.
+
+LIBRARY_PATHS = 
+LIBRARIES = 
+
+include mbed.mk
+include common.mk
+include gcc.mk
diff --git a/keyboard/mbed_onekey/common.mk b/keyboard/mbed_onekey/common.mk
new file mode 100644 (file)
index 0000000..f21fce8
--- /dev/null
@@ -0,0 +1,19 @@
+COMMON_DIR = common
+OBJECTS += \
+#      $(COMMON_DIR)/host.o \
+#      $(COMMON_DIR)/keyboard.o \
+#      $(COMMON_DIR)/action.o \
+#      $(COMMON_DIR)/action_tapping.o \
+#      $(COMMON_DIR)/action_macro.o \
+#      $(COMMON_DIR)/action_layer.o \
+#      $(COMMON_DIR)/action_util.o \
+#      $(COMMON_DIR)/keymap.o \
+#      $(COMMON_DIR)/timer.o \
+       $(COMMON_DIR)/print.o \
+#      $(COMMON_DIR)/bootloader.o \
+#      $(COMMON_DIR)/suspend.o \
+       $(COMMON_DIR)/xprintf.o \
+       $(COMMON_DIR)/util.o
+
+INCLUDE_PATHS += \
+       -I$(TMK_DIR)/$(COMMON_DIR)
diff --git a/keyboard/mbed_onekey/gcc.mk b/keyboard/mbed_onekey/gcc.mk
new file mode 100644 (file)
index 0000000..e31527b
--- /dev/null
@@ -0,0 +1,79 @@
+############################################################################### 
+GCC_BIN = 
+AS      = $(GCC_BIN)arm-none-eabi-as
+CC      = $(GCC_BIN)arm-none-eabi-gcc
+CPP     = $(GCC_BIN)arm-none-eabi-g++
+LD      = $(GCC_BIN)arm-none-eabi-gcc
+OBJCOPY = $(GCC_BIN)arm-none-eabi-objcopy
+OBJDUMP = $(GCC_BIN)arm-none-eabi-objdump
+SIZE   = $(GCC_BIN)arm-none-eabi-size
+CHKSUM  = ~/Dropbox/MBED/tool/lpc-vector-checksum
+
+CPU = -mcpu=cortex-m0 -mthumb
+CC_FLAGS = $(CPU) -c -g -fno-common -fmessage-length=0 -Wall -fno-exceptions -ffunction-sections -fdata-sections 
+CC_FLAGS += -MMD -MP
+CC_SYMBOLS = -DTARGET_LPC11U35_401 -DTARGET_M0 -DTARGET_NXP -DTARGET_LPC11UXX -DTOOLCHAIN_GCC_ARM -DTOOLCHAIN_GCC -D__CORTEX_M0 -DARM_MATH_CM0 -DMBED_BUILD_TIMESTAMP=1399108688.49 -D__MBED__=1 
+
+LD_FLAGS = -mcpu=cortex-m0 -mthumb -Wl,--gc-sections --specs=nano.specs
+LD_FLAGS += -Wl,-Map=$(OBJDIR)/$(PROJECT).map,--cref
+LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
+
+ifeq ($(DEBUG), 1)
+  CC_FLAGS += -DDEBUG -O0
+else
+  CC_FLAGS += -DNDEBUG -Os
+endif
+
+all: $(OBJDIR)/$(PROJECT).bin $(OBJDIR)/$(PROJECT).hex size
+
+clean:
+       rm -f $(OBJDIR)/$(PROJECT).bin $(OBJDIR)/$(PROJECT).elf $(OBJDIR)/$(PROJECT).hex $(OBJDIR)/$(PROJECT).map $(OBJDIR)/$(PROJECT).lst $(OBJECTS) $(DEPS)
+       rm -fr $(OBJDIR)
+
+$(OBJDIR)/%.o: %.s
+       mkdir -p $(@D)
+       $(AS) $(CPU) -o $@ $<
+
+$(OBJDIR)/%.o: %.c
+       mkdir -p $(@D)
+       $(CC)  $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99   $(INCLUDE_PATHS) -o $@ $<
+
+$(OBJDIR)/%.o: %.cpp
+       mkdir -p $(@D)
+       $(CPP) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu++98 $(INCLUDE_PATHS) -o $@ $<
+
+
+$(OBJDIR)/$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS)
+       $(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ $^ $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS)
+       @echo ""
+       @echo "*****"
+       @echo "***** You must modify vector checksum value in *.bin and *.hex files."
+       @echo "*****"
+       @echo ""
+
+$(OBJDIR)/$(PROJECT).bin: $(OBJDIR)/$(PROJECT).elf
+       @$(OBJCOPY) -O binary $< $@
+       @echo "Writing vector checksum value into $@ ..."
+       @$(CHKSUM) $@
+       @echo
+
+$(OBJDIR)/$(PROJECT).hex: $(OBJDIR)/$(PROJECT).elf
+       @$(OBJCOPY) -O ihex $< $@
+
+$(OBJDIR)/$(PROJECT).lst: $(OBJDIR)/$(PROJECT).elf
+       @$(OBJDUMP) -Sdh $< > $@
+
+lst: $(OBJDIR)/$(PROJECT).lst
+
+size:
+       $(SIZE) $(OBJDIR)/$(PROJECT).elf
+
+prog:  $(OBJDIR)/$(PROJECT).bin
+       @echo "Program..."
+ifneq ($(shell mount | grep 'CRP DISABLD'),)
+       umount /dev/nxpisp >/dev/null 2>&1
+endif
+       dd if=$< of=/dev/nxpisp seek=4
+
+DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d)
+-include $(DEPS)
diff --git a/keyboard/mbed_onekey/main.cpp b/keyboard/mbed_onekey/main.cpp
new file mode 100644 (file)
index 0000000..581534e
--- /dev/null
@@ -0,0 +1,55 @@
+#include "mbed.h"\r
+#include "HIDKeyboard.h"\r
+#include "debug.h"\r
\r
+/*\r
+//#define DEBUG \r
+#ifdef DEBUG\r
+Serial ser(UART_TX, UART_RX);\r
+#define dprintf(fmt, ...)          ser.printf(fmt, ## __VA_ARGS__)\r
+#else\r
+#define dprintf(fmt, ...)\r
+#endif\r
+*/\r
+\r
+\r
+// button and LEDs\r
+DigitalIn isp(P0_1);\r
+DigitalOut led_red(P0_20);\r
+DigitalOut led_green(P0_21);\r
+\r
+//USBKeyboard\r
+HIDKeyboard keyboard;\r
\r
+\r
+int main(void) {\r
+    //isp.mode(PullUp);\r
+    //led_red = 0;\r
+    //led_green = 0;\r
+    debug_enable = true;\r
+    dprintf("HIDKeyboard:\n");\r
+    print("aaa");\r
+\r
+    report_keyboard_t report = { 2, 0, 4, }; //a\r
+    report_keyboard_t report_off = { 0 };\r
+    while (1) {\r
+        //keyboard.mediaControl(KEY_VOLUME_DOWN);\r
+        //keyboard.printf("Hello World from Mbed\r\n");\r
+        //keyboard.keyCode('s', KEY_CTRL);\r
+        //keyboard.keyCode(KEY_CAPS_LOCK);\r
+\r
+        //led_green = !led_green;\r
+        //leds = keyboard.lockStatus();\r
+        //ser.putc(ser.getc());\r
+\r
+        if (isp == 0) {\r
+            led_red = 0;    // on\r
+            keyboard.sendReport(report);\r
+        } else {\r
+            led_red = 1;    // off\r
+            keyboard.sendReport(report_off);\r
+        }\r
+        led_green = !led_green;\r
+        //wait(0.5);\r
+    }\r
+}\r
diff --git a/keyboard/mbed_onekey/mbed.mk b/keyboard/mbed_onekey/mbed.mk
new file mode 100644 (file)
index 0000000..962a05e
--- /dev/null
@@ -0,0 +1,92 @@
+OBJECTS += \
+       $(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/TOOLCHAIN_GCC_ARM/startup_LPC11xx.o \
+       $(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/cmsis_nvic.o \
+       $(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/system_LPC11Uxx.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/port_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/spi_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/analogin_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/gpio_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/gpio_irq_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/serial_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/i2c_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/pwmout_api.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/sleep.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/pinmap.o \
+       $(OBJDIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/us_ticker.o \
+       $(OBJDIR)/libraries/mbed/common/board.o \
+       $(OBJDIR)/libraries/mbed/common/mbed_interface.o \
+       $(OBJDIR)/libraries/mbed/common/exit.o \
+       $(OBJDIR)/libraries/mbed/common/rtc_time.o \
+       $(OBJDIR)/libraries/mbed/common/us_ticker_api.o \
+       $(OBJDIR)/libraries/mbed/common/pinmap_common.o \
+       $(OBJDIR)/libraries/mbed/common/error.o \
+       $(OBJDIR)/libraries/mbed/common/gpio.o \
+       $(OBJDIR)/libraries/mbed/common/semihost_api.o \
+       $(OBJDIR)/libraries/mbed/common/wait_api.o \
+       $(OBJDIR)/libraries/mbed/common/RawSerial.o \
+       $(OBJDIR)/libraries/mbed/common/Ticker.o \
+       $(OBJDIR)/libraries/mbed/common/FilePath.o \
+       $(OBJDIR)/libraries/mbed/common/I2C.o \
+       $(OBJDIR)/libraries/mbed/common/FileBase.o \
+       $(OBJDIR)/libraries/mbed/common/retarget.o \
+       $(OBJDIR)/libraries/mbed/common/Serial.o \
+       $(OBJDIR)/libraries/mbed/common/Stream.o \
+       $(OBJDIR)/libraries/mbed/common/FileSystemLike.o \
+       $(OBJDIR)/libraries/mbed/common/CallChain.o \
+       $(OBJDIR)/libraries/mbed/common/InterruptManager.o \
+       $(OBJDIR)/libraries/mbed/common/SerialBase.o \
+       $(OBJDIR)/libraries/mbed/common/BusInOut.o \
+       $(OBJDIR)/libraries/mbed/common/SPISlave.o \
+       $(OBJDIR)/libraries/mbed/common/I2CSlave.o \
+       $(OBJDIR)/libraries/mbed/common/FunctionPointer.o \
+       $(OBJDIR)/libraries/mbed/common/Timer.o \
+       $(OBJDIR)/libraries/mbed/common/SPI.o \
+       $(OBJDIR)/libraries/mbed/common/Timeout.o \
+       $(OBJDIR)/libraries/mbed/common/Ethernet.o \
+       $(OBJDIR)/libraries/mbed/common/TimerEvent.o \
+       $(OBJDIR)/libraries/mbed/common/CAN.o \
+       $(OBJDIR)/libraries/mbed/common/BusOut.o \
+       $(OBJDIR)/libraries/mbed/common/FileLike.o \
+       $(OBJDIR)/libraries/mbed/common/BusIn.o \
+       $(OBJDIR)/libraries/mbed/common/InterruptIn.o \
+       $(OBJDIR)/libraries/mbed/common/LocalFileSystem.o \
+       $(OBJDIR)/libraries/USBDevice/USBHID/USBMouse.o \
+       $(OBJDIR)/libraries/USBDevice/USBHID/USBHID.o \
+       $(OBJDIR)/libraries/USBDevice/USBHID/USBMouseKeyboard.o \
+       $(OBJDIR)/libraries/USBDevice/USBHID/USBKeyboard.o \
+       $(OBJDIR)/libraries/USBDevice/USBDevice/USBHAL_KL25Z.o \
+       $(OBJDIR)/libraries/USBDevice/USBDevice/USBDevice.o \
+       $(OBJDIR)/libraries/USBDevice/USBDevice/USBHAL_LPC17.o \
+       $(OBJDIR)/libraries/USBDevice/USBDevice/USBHAL_LPC40.o \
+       $(OBJDIR)/libraries/USBDevice/USBDevice/USBHAL_LPC11U.o \
+       $(OBJDIR)/libraries/USBDevice/USBDevice/USBHAL_STM32F4.o \
+       $(OBJDIR)/libraries/USBDevice/USBAudio/USBAudio.o \
+       $(OBJDIR)/libraries/USBDevice/USBSerial/USBSerial.o \
+       $(OBJDIR)/libraries/USBDevice/USBSerial/USBCDC.o \
+       $(OBJDIR)/libraries/USBDevice/USBMSD/USBMSD.o \
+       $(OBJDIR)/libraries/USBDevice/USBMIDI/USBMIDI.o
+
+INCLUDE_PATHS += \
+       -I$(MBED_DIR)/libraries/mbed/targets \
+       -I$(MBED_DIR)/libraries/mbed/targets/hal \
+       -I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_NXP \
+       -I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX \
+       -I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11UXX/TARGET_LPC11U35_401 \
+       -I$(MBED_DIR)/libraries/mbed/targets/cmsis \
+       -I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_NXP \
+       -I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX \
+       -I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/TOOLCHAIN_GCC_ARM \
+       -I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/TOOLCHAIN_GCC_ARM/TARGET_LPC11U35_401 \
+       -I$(MBED_DIR)/libraries/mbed \
+       -I$(MBED_DIR)/libraries/mbed/hal \
+       -I$(MBED_DIR)/libraries/mbed/api \
+       -I$(MBED_DIR)/libraries/mbed/common \
+       -I$(MBED_DIR)/libraries/USBDevice \
+       -I$(MBED_DIR)/libraries/USBDevice/USBHID \
+       -I$(MBED_DIR)/libraries/USBDevice/USBDevice \
+       -I$(MBED_DIR)/libraries/USBDevice/USBAudio \
+       -I$(MBED_DIR)/libraries/USBDevice/USBSerial \
+       -I$(MBED_DIR)/libraries/USBDevice/USBMSD \
+       -I$(MBED_DIR)/libraries/USBDevice/USBMIDI
+
+LINKER_SCRIPT = $(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/TOOLCHAIN_GCC_ARM/TARGET_LPC11U35_401/LPC11U35.ld
Imprint / Impressum