Port ps2_usb to mbed
parent
80c3ff5fa0
commit
4c8e0fd0bd
@ -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
|
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef PS2_IO_H
|
||||||
|
#define PS2_IO_H
|
||||||
|
|
||||||
|
|
||||||
|
void clock_init(void);
|
||||||
|
void clock_lo(void);
|
||||||
|
void clock_hi(void);
|
||||||
|
bool clock_in(void);
|
||||||
|
|
||||||
|
void data_init(void);
|
||||||
|
void data_lo(void);
|
||||||
|
void data_hi(void);
|
||||||
|
bool data_in(void);
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,74 @@
|
|||||||
|
#include <stdbool.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
/* 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<<PS2_CLOCK_BIT);
|
||||||
|
PS2_CLOCK_DDR |= (1<<PS2_CLOCK_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clock_hi(void)
|
||||||
|
{
|
||||||
|
/* input with pull up */
|
||||||
|
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);
|
||||||
|
PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool clock_in(void)
|
||||||
|
{
|
||||||
|
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);
|
||||||
|
PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT);
|
||||||
|
_delay_us(1);
|
||||||
|
return PS2_CLOCK_PIN&(1<<PS2_CLOCK_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Data
|
||||||
|
*/
|
||||||
|
void data_init(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void data_lo(void)
|
||||||
|
{
|
||||||
|
PS2_DATA_PORT &= ~(1<<PS2_DATA_BIT);
|
||||||
|
PS2_DATA_DDR |= (1<<PS2_DATA_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void data_hi(void)
|
||||||
|
{
|
||||||
|
/* input with pull up */
|
||||||
|
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);
|
||||||
|
PS2_DATA_PORT |= (1<<PS2_DATA_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool data_in(void)
|
||||||
|
{
|
||||||
|
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);
|
||||||
|
PS2_DATA_PORT |= (1<<PS2_DATA_BIT);
|
||||||
|
_delay_us(1);
|
||||||
|
return PS2_DATA_PIN&(1<<PS2_DATA_BIT);
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
#include <stdbool.h>
|
||||||
|
#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);
|
||||||
|
}
|
Loading…
Reference in New Issue