From 80c3ff5fa03429f1e4ea15032f665ceb88c9b8c3 Mon Sep 17 00:00:00 2001 From: tmk Date: Wed, 18 Jun 2014 02:22:59 +0900 Subject: Fix build files for mbed --- tool/mbed/common.mk | 79 ++++++++++++++++++++++++++++++++++++++++++ tool/mbed/gcc.mk | 80 +++++++++++++++++++++++++++++++++++++++++++ tool/mbed/mbed.mk | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 258 insertions(+) create mode 100644 tool/mbed/common.mk create mode 100644 tool/mbed/gcc.mk create mode 100644 tool/mbed/mbed.mk (limited to 'tool') diff --git a/tool/mbed/common.mk b/tool/mbed/common.mk new file mode 100644 index 0000000000..1bd7d6edbe --- /dev/null +++ b/tool/mbed/common.mk @@ -0,0 +1,79 @@ +COMMON_DIR = common +OBJECTS += \ + $(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 + +ifdef KEYMAP_SECTION_ENABLE + $(error Not Supported) + OPT_DEFS += -DKEYMAP_SECTION_ENABLE + EXTRALDFLAGS = -Wl,-L$(TOP_DIR),-Tldscript_keymap_avr5.x +endif diff --git a/tool/mbed/gcc.mk b/tool/mbed/gcc.mk new file mode 100644 index 0000000000..0fc41fe275 --- /dev/null +++ b/tool/mbed/gcc.mk @@ -0,0 +1,80 @@ +############################################################################### +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/tool/mbed/mbed.mk b/tool/mbed/mbed.mk new file mode 100644 index 0000000000..0f12ee2af3 --- /dev/null +++ b/tool/mbed/mbed.mk @@ -0,0 +1,99 @@ +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 + +OBJECTS += \ + $(OBJDIR)/protocol/mbed/mbed_driver.o \ + $(OBJDIR)/protocol/mbed/HIDKeyboard.o \ + +INCLUDE_PATHS += \ + -I$(TMK_DIR)/protocol/mbed + +LINKER_SCRIPT = $(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC11UXX/TOOLCHAIN_GCC_ARM/TARGET_LPC11U35_401/LPC11U35.ld -- cgit v1.2.3 From 4c8e0fd0bd1712421f957ec5e0ca16fc6bbb3856 Mon Sep 17 00:00:00 2001 From: tmk Date: Thu, 19 Jun 2014 16:13:35 +0900 Subject: Port ps2_usb to mbed --- common/progmem.h | 1 + converter/ps2_usb/Makefile.mbed | 44 +++++++++++++++++++++++ converter/ps2_usb/config_mbed.h | 60 +++++++++++++++++++++++++++++++ converter/ps2_usb/keymap_common.c | 3 +- converter/ps2_usb/keymap_common.h | 1 - converter/ps2_usb/main.cpp | 46 ++++++++++++++++++++++++ converter/ps2_usb/matrix.c | 3 +- keyboard/mbed_onekey/Makefile | 2 +- protocol.mk | 1 + protocol/ps2.h | 65 ++++------------------------------ protocol/ps2_busywait.c | 16 +++++---- protocol/ps2_io.h | 15 ++++++++ protocol/ps2_io_avr.c | 74 +++++++++++++++++++++++++++++++++++++++ protocol/ps2_io_mbed.c | 60 +++++++++++++++++++++++++++++++ tool/mbed/common.mk | 42 +++++++++++----------- 15 files changed, 343 insertions(+), 90 deletions(-) create mode 100644 converter/ps2_usb/Makefile.mbed create mode 100644 converter/ps2_usb/config_mbed.h create mode 100644 converter/ps2_usb/main.cpp create mode 100644 protocol/ps2_io.h create mode 100644 protocol/ps2_io_avr.c create mode 100644 protocol/ps2_io_mbed.c (limited to 'tool') diff --git a/common/progmem.h b/common/progmem.h index 09aeb8b7c4..199b1bedfe 100644 --- a/common/progmem.h +++ b/common/progmem.h @@ -6,6 +6,7 @@ #elif defined(__arm__) # define PROGMEM # define pgm_read_byte(p) *(p) +# define pgm_read_word(p) *(p) #endif #endif diff --git a/converter/ps2_usb/Makefile.mbed b/converter/ps2_usb/Makefile.mbed new file mode 100644 index 0000000000..631f270f75 --- /dev/null +++ b/converter/ps2_usb/Makefile.mbed @@ -0,0 +1,44 @@ +PROJECT = ps2_usb + +TMK_DIR = ../.. +MBED_DIR = $(TMK_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)/protocol/ps2_busywait.o \ + $(OBJDIR)/protocol/ps2_io_mbed.o \ + $(OBJDIR)/./keymap_common.o \ + $(OBJDIR)/./matrix.o \ + $(OBJDIR)/./led.o \ + $(OBJDIR)/./main.o + +ifdef KEYMAP + OBJECTS := $(OBJDIR)/keymap_$(KEYMAP).o $(OBJECTS) +else + OBJECTS := $(OBJDIR)/keymap_plain.o $(OBJECTS) +endif + +CONFIG_H = config_mbed.h + +SYS_OBJECTS = + +INCLUDE_PATHS = -I. + +LIBRARY_PATHS = +LIBRARIES = + +# Build Options +# Comment out to disable +#BOOTMAGIC_ENABLE = yes +MOUSEKEY_ENABLE = yes + + +include $(TMK_DIR)/tool/mbed/mbed.mk +include $(TMK_DIR)/tool/mbed/common.mk +include $(TMK_DIR)/tool/mbed/gcc.mk diff --git a/converter/ps2_usb/config_mbed.h b/converter/ps2_usb/config_mbed.h new file mode 100644 index 0000000000..5819763e65 --- /dev/null +++ b/converter/ps2_usb/config_mbed.h @@ -0,0 +1,60 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_MBED_H +#define CONFIG_MBED_H + + +#if 0 +// duplicated name against mbed USBDeivce +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6512 +#endif +#define DEVICE_VER 0x0001 +#define MANUFACTURER t.m.k. +#define PRODUCT PS/2 keyboard converter +#define DESCRIPTION convert PS/2 keyboard to USB + + +/* matrix size */ +#define MATRIX_ROWS 32 // keycode bit: 3-0 +#define MATRIX_COLS 8 // keycode bit: 6-4 + + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \ + keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \ +) + + +/* + * PS/2 Busywait + */ +#ifdef PS2_USE_BUSYWAIT +# define PS2_CLOCK_PORT PORTD +# define PS2_CLOCK_PIN PIND +# define PS2_CLOCK_DDR DDRD +# define PS2_CLOCK_BIT 5 +# define PS2_DATA_PORT PORTD +# define PS2_DATA_PIN PIND +# define PS2_DATA_DDR DDRD +# define PS2_DATA_BIT 2 +#endif + + +#endif diff --git a/converter/ps2_usb/keymap_common.c b/converter/ps2_usb/keymap_common.c index 241d2e33b1..e344fb4167 100644 --- a/converter/ps2_usb/keymap_common.c +++ b/converter/ps2_usb/keymap_common.c @@ -15,10 +15,11 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "keymap_common.h" +#include "progmem.h" /* translates key to keycode */ -uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) +uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key) { return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); } diff --git a/converter/ps2_usb/keymap_common.h b/converter/ps2_usb/keymap_common.h index 216a8dc020..d783e01ded 100644 --- a/converter/ps2_usb/keymap_common.h +++ b/converter/ps2_usb/keymap_common.h @@ -19,7 +19,6 @@ along with this program. If not, see . #include #include -#include #include "keycode.h" #include "action.h" #include "action_macro.h" diff --git a/converter/ps2_usb/main.cpp b/converter/ps2_usb/main.cpp new file mode 100644 index 0000000000..860af149a0 --- /dev/null +++ b/converter/ps2_usb/main.cpp @@ -0,0 +1,46 @@ +#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); + keyboard_init(); + + //debug_enable = true; + xprintf("mbed_onekey ver.eee:\r\n"); + + + bool last_isp = isp; + while (1) { + keyboard_task(); + + //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); + } + } +} diff --git a/converter/ps2_usb/matrix.c b/converter/ps2_usb/matrix.c index 45344c0f75..45cf2a4a90 100644 --- a/converter/ps2_usb/matrix.c +++ b/converter/ps2_usb/matrix.c @@ -17,8 +17,6 @@ along with this program. If not, see . #include #include -#include -#include #include "action.h" #include "print.h" #include "util.h" @@ -189,6 +187,7 @@ uint8_t matrix_scan(void) } uint8_t code = ps2_host_recv(); + if (code) xprintf("%i\r\n", code); if (!ps2_error) { switch (state) { case INIT: diff --git a/keyboard/mbed_onekey/Makefile b/keyboard/mbed_onekey/Makefile index d0d1148ce2..2f7399ba02 100644 --- a/keyboard/mbed_onekey/Makefile +++ b/keyboard/mbed_onekey/Makefile @@ -1,7 +1,7 @@ PROJECT = mbed_onekey TMK_DIR = ../.. -MBED_DIR = ./mbed-sdk +MBED_DIR = $(TMK_DIR)/mbed-sdk #VPATH += $(MBED_DIR):$(TMK_DIR) vpath %.s .:$(MBED_DIR):$(TMK_DIR) diff --git a/protocol.mk b/protocol.mk index 7f561e62d6..ca435ba43c 100644 --- a/protocol.mk +++ b/protocol.mk @@ -9,6 +9,7 @@ endif ifdef PS2_USE_BUSYWAIT SRC += protocol/ps2_busywait.c + SRC += protocol/ps2_io_avr.c OPT_DEFS += -DPS2_USE_BUSYWAIT endif diff --git a/protocol/ps2.h b/protocol/ps2.h index 483eea7209..acde679cf4 100644 --- a/protocol/ps2.h +++ b/protocol/ps2.h @@ -39,8 +39,9 @@ POSSIBILITY OF SUCH DAMAGE. #define PS2_H #include -#include -#include +#include "wait.h" +#include "ps2_io.h" +#include "print.h" /* * Primitive PS/2 Library for AVR @@ -92,79 +93,27 @@ uint8_t ps2_host_recv(void); void ps2_host_set_led(uint8_t usb_led); -/* Check port settings for clock and data line */ -#if !(defined(PS2_CLOCK_PORT) && \ - defined(PS2_CLOCK_PIN) && \ - defined(PS2_CLOCK_DDR) && \ - defined(PS2_CLOCK_BIT)) -# error "PS/2 clock port setting is required in config.h" -#endif - -#if !(defined(PS2_DATA_PORT) && \ - defined(PS2_DATA_PIN) && \ - defined(PS2_DATA_DDR) && \ - defined(PS2_DATA_BIT)) -# error "PS/2 data port setting is required in config.h" -#endif - /*-------------------------------------------------------------------- * static functions *------------------------------------------------------------------*/ -static inline void clock_lo(void) -{ - PS2_CLOCK_PORT &= ~(1< -#include +#include "wait.h" #include "ps2.h" +#include "ps2_io.h" #include "debug.h" @@ -58,8 +59,11 @@ uint8_t ps2_error = PS2_ERR_NONE; void ps2_host_init(void) { + clock_init(); + data_init(); + // POR(150-2000ms) plus BAT(300-500ms) may take 2.5sec([3]p.20) - _delay_ms(2500); + wait_ms(2500); inhibit(); } @@ -71,7 +75,7 @@ uint8_t ps2_host_send(uint8_t data) /* terminate a transmission if we have */ inhibit(); - _delay_us(100); // 100us [4]p.13, [5]p.50 + wait_us(100); // 100us [4]p.13, [5]p.50 /* 'Request to Send' and Start bit */ data_lo(); @@ -80,7 +84,7 @@ uint8_t ps2_host_send(uint8_t data) /* Data bit */ for (uint8_t i = 0; i < 8; i++) { - _delay_us(15); + wait_us(15); if (data&(1< +#include + +/* Check port settings for clock and data line */ +#if !(defined(PS2_CLOCK_PORT) && \ + defined(PS2_CLOCK_PIN) && \ + defined(PS2_CLOCK_DDR) && \ + defined(PS2_CLOCK_BIT)) +# error "PS/2 clock port setting is required in config.h" +#endif + +#if !(defined(PS2_DATA_PORT) && \ + defined(PS2_DATA_PIN) && \ + defined(PS2_DATA_DDR) && \ + defined(PS2_DATA_BIT)) +# error "PS/2 data port setting is required in config.h" +#endif + + +/* + * Clock + */ +void clock_init(void) +{ +} + +void clock_lo(void) +{ + PS2_CLOCK_PORT &= ~(1< +#include "ps2_io.h" +#include "gpio_api.h" + + +static gpio_t clock; +static gpio_t data; + +/* + * Clock + */ +void clock_init(void) +{ + gpio_init(&clock, P0_9); + gpio_mode(&clock, OpenDrain|PullNone); +} + +void clock_lo(void) +{ + gpio_dir(&clock, PIN_OUTPUT); + gpio_write(&clock, 0); +} +void clock_hi(void) +{ + gpio_dir(&clock, PIN_OUTPUT); + gpio_write(&clock, 1); +} + +bool clock_in(void) +{ + gpio_dir(&clock, PIN_INPUT); + return gpio_read(&clock); +} + +/* + * Data + */ +void data_init(void) +{ + gpio_init(&data, P0_8); + gpio_mode(&data, OpenDrain|PullNone); +} + +void data_lo(void) +{ + gpio_dir(&data, PIN_OUTPUT); + gpio_write(&data, 0); +} + +void data_hi(void) +{ + gpio_dir(&data, PIN_OUTPUT); + gpio_write(&data, 1); +} + +bool data_in(void) +{ + gpio_dir(&data, PIN_INPUT); + return gpio_read(&data); +} diff --git a/tool/mbed/common.mk b/tool/mbed/common.mk index 1bd7d6edbe..93a927a3e8 100644 --- a/tool/mbed/common.mk +++ b/tool/mbed/common.mk @@ -1,21 +1,21 @@ -COMMON_DIR = common OBJECTS += \ - $(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 \ + $(OBJDIR)/common/action.o \ + $(OBJDIR)/common/action_tapping.o \ + $(OBJDIR)/common/action_macro.o \ + $(OBJDIR)/common/action_layer.o \ + $(OBJDIR)/common/action_util.o \ + $(OBJDIR)/common/host.o \ + $(OBJDIR)/common/keymap.o \ + $(OBJDIR)/common/keyboard.o \ + $(OBJDIR)/common/util.o \ + $(OBJDIR)/common/mbed/suspend.o \ + $(OBJDIR)/common/mbed/timer.o \ + $(OBJDIR)/common/mbed/xprintf.o \ + $(OBJDIR)/common/mbed/bootloader.o \ INCLUDE_PATHS += \ - -I$(TMK_DIR)/$(COMMON_DIR) + -I$(TMK_DIR)/common \ + -I$(TMK_DIR)/protocol CC_FLAGS += -include $(CONFIG_H) @@ -24,13 +24,13 @@ 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 + OBJECTS += $(OBJDIR)/common/bootmagic.o + OBJECTS += $(OBJDIR)/common/mbed/eeprom.o OPT_DEFS += -DBOOTMAGIC_ENABLE endif ifdef MOUSEKEY_ENABLE - OBJECTS += $(OBJDIR)/$(COMMON_DIR)/mousekey.o + OBJECTS += $(OBJDIR)/common/mousekey.o OPT_DEFS += -DMOUSEKEY_ENABLE OPT_DEFS += -DMOUSE_ENABLE endif @@ -50,7 +50,7 @@ endif ifdef COMMAND_ENABLE $(error Not Supported) - SRC += $(COMMON_DIR)/command.c + SRC += common/command.c OPT_DEFS += -DCOMMAND_ENABLE endif @@ -61,14 +61,14 @@ endif ifdef SLEEP_LED_ENABLE $(error Not Supported) - SRC += $(COMMON_DIR)/sleep_led.c + SRC += common/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 + SRC += common/backlight.c OPT_DEFS += -DBACKLIGHT_ENABLE endif -- cgit v1.2.3 From a9f5f201ad6b009675fdf16c4447033cc2ac0995 Mon Sep 17 00:00:00 2001 From: tmk Date: Fri, 20 Jun 2014 15:30:10 +0900 Subject: Add checksum tool for NXP LPC --- tool/mbed/gcc.mk | 2 +- tool/mbed/lpc-vector-checksum.c | 99 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 tool/mbed/lpc-vector-checksum.c (limited to 'tool') diff --git a/tool/mbed/gcc.mk b/tool/mbed/gcc.mk index 0fc41fe275..032f7c6cae 100644 --- a/tool/mbed/gcc.mk +++ b/tool/mbed/gcc.mk @@ -7,7 +7,7 @@ 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 +CHKSUM = $(TMK_DIR)/tool/mbed/lpc-vector-checksum CPU = -mcpu=cortex-m0 -mthumb diff --git a/tool/mbed/lpc-vector-checksum.c b/tool/mbed/lpc-vector-checksum.c new file mode 100644 index 0000000000..316a1253a0 --- /dev/null +++ b/tool/mbed/lpc-vector-checksum.c @@ -0,0 +1,99 @@ +/*************************************************************************** +* https://github.com/dhylands/projects/blob/master/lpc/lpc-vector-checksum/lpc-vector-checksum.c +* +* Copyright (c) 2012 by Dave Hylands +* All Rights Reserved +* +* Permission is granted to any individual or institution to use, copy, +* modify, or redistribute this file so long as it is not sold for profit, +* and that this copyright notice is retained. +* +*************************************************************************** +* +* This program calculates the vector checksum used in LPC17xx binary +* images. +* +* Usage: lpc-vector-checksum file +* +***************************************************************************/ + +#include +#include +#include +#include +#include + +/***************************************************************************/ +/** +* update_vector_checksum +* +* The algorithim is to write the checksum such that the checksum of the +* first 8 words is equal to zero. +* +* The LPC1768 uses little-endian, and this particular routine assumes +* that it's running on a little-endian architecture. +*/ +static int update_vector_checksum( const char *filename ) +{ + uint32_t sum; + uint32_t header[8]; + FILE *fs; + int i; + + if (( fs = fopen( filename, "r+b" )) == NULL ) + { + fprintf( stderr, "Unable to open '%s' for reading/writing (%d): %s\n", + filename, errno, strerror( errno )); + return 0; + } + + if ( fread( header, sizeof( header ), 1, fs ) != 1 ) + { + fprintf( stderr, "Failed to read header from '%s' (perhaps the file is too small?)", + filename ); + fclose( fs ); + return 0; + } + + sum = 0; + for ( i = 0; i < 7; i++ ) + { + sum += header[i]; + } + printf( "sum = 0x%08x, value to write = 0x%08x\n", sum, -sum ); + + /* write back the checksum to location 7 + * http://sigalrm.blogspot.jp/2011/10/cortex-m3-exception-vector-checksum.html + */ + fseek(fs, 0x1c, SEEK_SET); + sum = -sum; + fwrite(&sum, 4, 1, fs); + + fclose( fs ); + + return 1; +} + +/***************************************************************************/ +/** +* main +*/ +int main( int argc, char **argv ) +{ + int arg; + + if ( argc < 2) + { + fprintf( stderr, "Usage: lpc-vector-checksum file ...\n" ); + exit( 1 ); + } + + for ( arg = 1; arg < argc; arg++ ) + { + update_vector_checksum( argv[ arg ]); + } + + exit( 0 ); + return 0; +} + -- cgit v1.2.3