$(COMMON_DIR)/action_layer.c \
$(COMMON_DIR)/action_util.c \
$(COMMON_DIR)/keymap.c \
- $(COMMON_DIR)/avr/timer.c \
$(COMMON_DIR)/print.c \
- $(COMMON_DIR)/bootloader.c \
- $(COMMON_DIR)/suspend.c \
+ $(COMMON_DIR)/util.c \
+ $(COMMON_DIR)/avr/suspend.c \
$(COMMON_DIR)/avr/xprintf.S \
- $(COMMON_DIR)/util.c
+ $(COMMON_DIR)/avr/timer.c \
+ $(COMMON_DIR)/avr/bootloader.c
# Option modules
ifdef BOOTMAGIC_ENABLE
SRC += $(COMMON_DIR)/bootmagic.c
- SRC += $(COMMON_DIR)/eeconfig.c
+ SRC += $(COMMON_DIR)/avr/eeconfig.c
OPT_DEFS += -DBOOTMAGIC_ENABLE
endif
-#include "suspend.h"
+#include <stdbool.h>
+#include <avr/sleep.h>
+#include <avr/wdt.h>
+#include <avr/interrupt.h>
#include "matrix.h"
#include "action.h"
#include "backlight.h"
+#include "suspend_avr.h"
+#include "suspend.h"
+
+
+#define wdt_intr_enable(value) \
+__asm__ __volatile__ ( \
+ "in __tmp_reg__,__SREG__" "\n\t" \
+ "cli" "\n\t" \
+ "wdr" "\n\t" \
+ "sts %0,%1" "\n\t" \
+ "out __SREG__,__tmp_reg__" "\n\t" \
+ "sts %0,%2" "\n\t" \
+ : /* no outputs */ \
+ : "M" (_SFR_MEM_ADDR(_WD_CONTROL_REG)), \
+ "r" (_BV(_WD_CHANGE_BIT) | _BV(WDE)), \
+ "r" ((uint8_t) ((value & 0x08 ? _WD_PS3_MASK : 0x00) | \
+ _BV(WDIE) | (value & 0x07)) ) \
+ : "r0" \
+)
void suspend_power_down(void)
--- /dev/null
+#ifndef SUSPEND_AVR_H
+#define SUSPEND_AVR_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/sleep.h>
+#include <avr/wdt.h>
+#include <avr/interrupt.h>
+
+
+#define wdt_intr_enable(value) \
+__asm__ __volatile__ ( \
+ "in __tmp_reg__,__SREG__" "\n\t" \
+ "cli" "\n\t" \
+ "wdr" "\n\t" \
+ "sts %0,%1" "\n\t" \
+ "out __SREG__,__tmp_reg__" "\n\t" \
+ "sts %0,%2" "\n\t" \
+ : /* no outputs */ \
+ : "M" (_SFR_MEM_ADDR(_WD_CONTROL_REG)), \
+ "r" (_BV(_WD_CHANGE_BIT) | _BV(WDE)), \
+ "r" ((uint8_t) ((value & 0x08 ? _WD_PS3_MASK : 0x00) | \
+ _BV(WDIE) | (value & 0x07)) ) \
+ : "r0" \
+)
+
+#endif
extern bool keyboard_nkro;
#endif
-uint8_t keyboard_idle;
-uint8_t keyboard_protocol;
+extern uint8_t keyboard_idle;
+extern uint8_t keyboard_protocol;
/* host driver */
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
-#include <util/delay.h>
#include "keyboard.h"
#include "matrix.h"
#include "keymap.h"
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <avr/pgmspace.h>
#include "keymap.h"
#include "report.h"
#include "keycode.h"
--- /dev/null
+#include "bootloader.h"
+
+
+void bootloader_jump(void) {}
--- /dev/null
+#include <stdbool.h>
+
+
+void suspend_power_down(void) {}
+bool suspend_wakeup_condition(void) { return true; }
+void suspend_wakeup_init(void) {}
--- /dev/null
+#include <cstdarg>
+//#include <stdarg.h>
+#include "mbed.h"
+#include "mbed/xprintf.h"
+
+
+#define STRING_STACK_LIMIT 120
+
+/* mbed Serial */
+Serial ser(UART_TX, UART_RX);
+
+/* TODO: Need small implementation for embedded */
+int xprintf(const char* format, ...)
+{
+ /* copy from mbed/common/RawSerial.cpp */
+ std::va_list arg;
+ va_start(arg, format);
+ int len = vsnprintf(NULL, 0, format, arg);
+ if (len < STRING_STACK_LIMIT) {
+ char temp[STRING_STACK_LIMIT];
+ vsprintf(temp, format, arg);
+ ser.puts(temp);
+ } else {
+ char *temp = new char[len + 1];
+ vsprintf(temp, format, arg);
+ ser.puts(temp);
+ delete[] temp;
+ }
+ va_end(arg);
+ return len;
+
+/* Fail: __builtin_va_arg_pack?
+ * https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Constructing-Calls.html#Constructing-Calls
+ void *arg = __builtin_apply_args();
+ void *ret = __builtin_apply((void*)(&(ser.printf)), arg, 100);
+ __builtin_return(ret)
+*/
+/* Fail: varargs can not be passed to printf
+ //int r = ser.printf("test %i\r\n", 123);
+ va_list arg;
+ va_start(arg, format);
+ int r = ser.printf(format, arg);
+ va_end(arg);
+ return r;
+*/
+}
--- /dev/null
+#ifndef XPRINTF_H
+#define XPRINTF_H
+
+//#define xprintf(format, ...) __xprintf(format, ##__VA_ARGS__)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int xprintf(const char *format, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
*/
#include <stdint.h>
-#include <util/delay.h>
#include "keycode.h"
#include "host.h"
#include "timer.h"
#endif
-uint8_t mk_delay;
-uint8_t mk_interval;
-uint8_t mk_max_speed;
-uint8_t mk_time_to_max;
-uint8_t mk_wheel_max_speed;
-uint8_t mk_wheel_time_to_max;
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern uint8_t mk_delay;
+extern uint8_t mk_interval;
+extern uint8_t mk_max_speed;
+extern uint8_t mk_time_to_max;
+extern uint8_t mk_wheel_max_speed;
+extern uint8_t mk_wheel_time_to_max;
void mousekey_task(void);
void mousekey_clear(void);
void mousekey_send(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif
--- /dev/null
+#ifndef PROGMEM_H
+#define PROGMEM_H 1
+
+#if defined(__AVR__)
+# include <avr/pgmspace.h>
+#elif defined(__arm__)
+# define PROGMEM
+# define pgm_read_byte(p) *(p)
+#endif
+
+#endif
#include <stdint.h>
#include <stdbool.h>
-#include <avr/sleep.h>
-#include <avr/wdt.h>
-#include <avr/interrupt.h>
-
-
-#define wdt_intr_enable(value) \
-__asm__ __volatile__ ( \
- "in __tmp_reg__,__SREG__" "\n\t" \
- "cli" "\n\t" \
- "wdr" "\n\t" \
- "sts %0,%1" "\n\t" \
- "out __SREG__,__tmp_reg__" "\n\t" \
- "sts %0,%2" "\n\t" \
- : /* no outputs */ \
- : "M" (_SFR_MEM_ADDR(_WD_CONTROL_REG)), \
- "r" (_BV(_WD_CHANGE_BIT) | _BV(WDE)), \
- "r" ((uint8_t) ((value & 0x08 ? _WD_PS3_MASK : 0x00) | \
- _BV(WDIE) | (value & 0x07)) ) \
- : "r0" \
-)
void suspend_power_down(void);
$(OBJDIR)/./mbed_driver.o \
$(OBJDIR)/./main.o
+CONFIG_H = config.h
+
SYS_OBJECTS =
INCLUDE_PATHS = -I.
LIBRARY_PATHS =
LIBRARIES =
+# Build Options
+# Comment out to disable
+#BOOTMAGIC_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+
+
include mbed.mk
include common.mk
include gcc.mk
COMMON_DIR = common
OBJECTS += \
- $(OBJDIR)/$(COMMON_DIR)/mbed/timer.o \
- $(OBJDIR)/$(COMMON_DIR)/mbed/xprintf.o \
$(OBJDIR)/$(COMMON_DIR)/action.o \
$(OBJDIR)/$(COMMON_DIR)/action_tapping.o \
$(OBJDIR)/$(COMMON_DIR)/action_macro.o \
$(OBJDIR)/$(COMMON_DIR)/action_layer.o \
$(OBJDIR)/$(COMMON_DIR)/action_util.o \
$(OBJDIR)/$(COMMON_DIR)/host.o \
+ $(OBJDIR)/$(COMMON_DIR)/keymap.o \
+ $(OBJDIR)/$(COMMON_DIR)/keyboard.o \
+ $(OBJDIR)/$(COMMON_DIR)/util.o \
+ $(OBJDIR)/$(COMMON_DIR)/mbed/suspend.o \
+ $(OBJDIR)/$(COMMON_DIR)/mbed/timer.o \
+ $(OBJDIR)/$(COMMON_DIR)/mbed/xprintf.o \
+ $(OBJDIR)/$(COMMON_DIR)/mbed/bootloader.o \
INCLUDE_PATHS += \
-I$(TMK_DIR)/$(COMMON_DIR)
+CC_FLAGS += -include $(CONFIG_H)
+
+
+
+# Option modules
+ifdef BOOTMAGIC_ENABLE
+ $(error Not Supported)
+ OBJECTS += $(OBJDIR)/$(COMMON_DIR)/bootmagic.o
+ OBJECTS += $(OBJDIR)/$(COMMON_DIR)/mbed/eeprom.o
+ OPT_DEFS += -DBOOTMAGIC_ENABLE
+endif
+
+ifdef MOUSEKEY_ENABLE
+ OBJECTS += $(OBJDIR)/$(COMMON_DIR)/mousekey.o
+ OPT_DEFS += -DMOUSEKEY_ENABLE
+ OPT_DEFS += -DMOUSE_ENABLE
+endif
+
+ifdef EXTRAKEY_ENABLE
+ $(error Not Supported)
+ OPT_DEFS += -DEXTRAKEY_ENABLE
+endif
+
+ifdef CONSOLE_ENABLE
+ $(error Not Supported)
+ OPT_DEFS += -DCONSOLE_ENABLE
+else
+ OPT_DEFS += -DNO_PRINT
+ OPT_DEFS += -DNO_DEBUG
+endif
+
+ifdef COMMAND_ENABLE
+ $(error Not Supported)
+ SRC += $(COMMON_DIR)/command.c
+ OPT_DEFS += -DCOMMAND_ENABLE
+endif
+
+ifdef NKRO_ENABLE
+ $(error Not Supported)
+ OPT_DEFS += -DNKRO_ENABLE
+endif
+ifdef SLEEP_LED_ENABLE
+ $(error Not Supported)
+ SRC += $(COMMON_DIR)/sleep_led.c
+ OPT_DEFS += -DSLEEP_LED_ENABLE
+ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+endif
+ifdef BACKLIGHT_ENABLE
+ $(error Not Supported)
+ SRC += $(COMMON_DIR)/backlight.c
+ OPT_DEFS += -DBACKLIGHT_ENABLE
+endif
-# $(OBJDIR)/$(COMMON_DIR)/keyboard.o \
-# $(OBJDIR)/$(COMMON_DIR)/keymap.o \
-# $(OBJDIR)/$(COMMON_DIR)/bootloader.o \
-# $(OBJDIR)/$(COMMON_DIR)/suspend.o \
+ifdef KEYMAP_SECTION_ENABLE
+ $(error Not Supported)
+ OPT_DEFS += -DKEYMAP_SECTION_ENABLE
+ EXTRALDFLAGS = -Wl,-L$(TOP_DIR),-Tldscript_keymap_avr5.x
+endif
--- /dev/null
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 1
+
+#endif
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 += $(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
-#include "mbed.h"\r
-#include "HIDKeyboard.h"\r
-#include "debug.h"\r
-#include "timer.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:\r\n");\r
-\r
- timer_init();\r
- xprintf("timer: %i\r\n", timer_read());\r
-\r
- report_keyboard_t report = { 2, 0, 4, }; //a\r
- report_keyboard_t report_off = { 0 };\r
-\r
- bool last_isp = isp;\r
- uint32_t last_timer;\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 (last_isp == isp) continue;\r
- if (isp == 0) {\r
- led_red = 0; // on\r
- xprintf("timer: %i\r\n", timer_read32());\r
- xprintf("diff: %i\r\n", timer_elapsed32(last_timer));\r
- //keyboard.sendReport(report);\r
- } else {\r
- led_red = 1; // off\r
- //keyboard.sendReport(report_off);\r
- }\r
- last_isp = isp;\r
- last_timer = timer_read();\r
- //led_green = !led_green;\r
- //wait(0.5);\r
- }\r
-}\r
+#include "mbed.h"
+#include "debug.h"
+#include "timer.h"
+#include "action.h"
+#include "keycode.h"
+#include "host.h"
+#include "host_driver.h"
+#include "mbed_driver.h"
+
+
+// Button and LEDs of LPC11U35 board
+DigitalIn isp(P0_1); // ISP button
+DigitalOut led_red(P0_20);
+DigitalOut led_green(P0_21);
+
+
+int main(void) {
+ isp.mode(PullUp);
+ led_red = 1;
+ led_green = 0;
+
+ timer_init();
+ host_set_driver(&mbed_driver);
+
+ //debug_enable = true;
+ xprintf("mbed_onekey ver.eee:\r\n");
+
+
+ bool last_isp = isp;
+ while (1) {
+ //led_green = !led_green;
+ if (last_isp == isp) continue;
+ last_isp = isp;
+ if (last_isp == 0) {
+ led_red = 0; // on
+ dprintf("timer: %i\r\n", timer_read());
+ register_code(KC_A);
+ } else {
+ led_red = 1; // off
+ unregister_code(KC_A);
+ }
+ }
+}
--- /dev/null
+#include "HIDKeyboard.h"
+#include "host.h"
+#include "host_driver.h"
+#include "mbed_driver.h"
+
+HIDKeyboard keyboard;
+
+
+/* Host driver */
+static uint8_t keyboard_leds(void);
+static void send_keyboard(report_keyboard_t *report);
+static void send_mouse(report_mouse_t *report);
+static void send_system(uint16_t data);
+static void send_consumer(uint16_t data);
+
+host_driver_t mbed_driver = {
+ keyboard_leds,
+ send_keyboard,
+ send_mouse,
+ send_system,
+ send_consumer
+};
+
+
+static uint8_t keyboard_leds(void)
+{
+ return 0;
+}
+static void send_keyboard(report_keyboard_t *report)
+{
+ keyboard.sendReport(*report);
+}
+static void send_mouse(report_mouse_t *report)
+{
+}
+static void send_system(uint16_t data)
+{
+}
+static void send_consumer(uint16_t data)
+{
+}
--- /dev/null
+#include "host_driver.h"
+
+extern host_driver_t mbed_driver;