# | |||||
# Makefile for PJRC Teensy | |||||
# | |||||
# Target file name (without extension). | |||||
TARGET = news_usb_pjrc | |||||
# Directory common source filess exist | |||||
COMMON_DIR = .. | |||||
# Directory keyboard dependent files exist | |||||
TARGET_DIR = . | |||||
# keyboard dependent files | |||||
SRC = main.c \ | |||||
keymap.c \ | |||||
matrix.c \ | |||||
led.c \ | |||||
news.c | |||||
CONFIG_H = config_pjrc.h | |||||
# MCU name, you MUST set this to match the board you are using | |||||
# type "make clean" after changing this, so all files will be rebuilt | |||||
#MCU = at90usb162 # Teensy 1.0 | |||||
MCU = atmega32u4 # Teensy 2.0 | |||||
#MCU = at90usb646 # Teensy++ 1.0 | |||||
#MCU = at90usb1286 # Teensy++ 2.0 | |||||
# Processor frequency. | |||||
# Normally the first thing your program should do is set the clock prescaler, | |||||
# so your program will run at the correct speed. You should also set this | |||||
# variable to same clock speed. The _delay_ms() macro uses this, and many | |||||
# examples use this variable to calculate timings. Do not add a "UL" here. | |||||
F_CPU = 16000000 | |||||
# Build Options | |||||
# *Comment out* to disable the options. | |||||
# | |||||
MOUSEKEY_ENABLE = yes # Mouse keys | |||||
EXTRAKEY_ENABLE = yes # Audio control and System control | |||||
NKRO_ENABLE = yes # USB Nkey Rollover | |||||
#---------------- Programming Options -------------------------- | |||||
PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex | |||||
include $(COMMON_DIR)/pjrc.mk | |||||
include $(COMMON_DIR)/common.mk |
/* | |||||
Copyright 2012 Jun Wako <[email protected]> | |||||
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_H | |||||
#define CONFIG_H | |||||
/* controller configuration */ | |||||
#include "controller_teensy.h" | |||||
#define VENDOR_ID 0xFEED | |||||
#define PRODUCT_ID 0x5021 | |||||
#define MANUFACTURER t.m.k. | |||||
#define PRODUCT SONY NEWS keyboard converter | |||||
#define DESCRIPTION converts SONY NEWS protocol into USB | |||||
/* matrix size */ | |||||
#define MATRIX_ROWS 16 // keycode bit: 3-0 | |||||
#define MATRIX_COLS 8 // keycode bit: 6-4 | |||||
/* key combination for command */ | |||||
#define IS_COMMAND() ( \ | |||||
keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT)) || \ | |||||
keyboard_report->mods == (MOD_BIT(KB_LCTRL) | MOD_BIT(KB_RSHIFT)) \ | |||||
) | |||||
/* mouse keys */ | |||||
#ifdef MOUSEKEY_ENABLE | |||||
# define MOUSEKEY_DELAY_TIME 255 | |||||
#endif | |||||
/* Asynchronous USART | |||||
* 8-data bit, non parity, 1-stop bit, no flow control | |||||
*/ | |||||
#ifdef __AVR_ATmega32U4__ | |||||
# define NEWS_KBD_RX_VECT USART1_RX_vect | |||||
# define NEWS_KBD_RX_DATA UDR1 | |||||
# define NEWS_KBD_RX_BAUD 9600 | |||||
# define NEWS_KBD_RX_UBBR ((F_CPU/(16UL*NEWS_KBD_RX_BAUD))-1) | |||||
# define NEWS_KBD_RX_INIT() do { \ | |||||
UBRR1L = (uint8_t) NEWS_KBD_RX_UBBR; \ | |||||
UBRR1H = (uint8_t) (NEWS_KBD_RX_UBBR>>8); \ | |||||
UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); \ | |||||
} while(0) | |||||
#else | |||||
# error "USART configuration is needed." | |||||
#endif | |||||
#endif |
/* | |||||
Copyright 2012 Jun Wako <[email protected]> | |||||
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/>. | |||||
*/ | |||||
#include <stdint.h> | |||||
#include <stdbool.h> | |||||
#include <avr/pgmspace.h> | |||||
#include "usb_keycodes.h" | |||||
#include "util.h" | |||||
#include "keymap.h" | |||||
// Following macros help you to define a keymap with the form of actual keyboard layout. | |||||
/* SONY NEWS NWP-5461 */ | |||||
#define KEYMAP( \ | |||||
K7A, K01,K02,K03,K04,K05, K06,K07,K08,K09,K0A, K68,K69, K64,K65,K52, \ | |||||
K0B,K0C,K0D,K0E,K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19, K6A, K4B,K4C,K4D,K4E, \ | |||||
K1A,K1B,K1C,K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27, K6B, K4F,K50,K51,K56, \ | |||||
K28,K29,K2A,K2B,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34, K35, K6C, K53,K54,K55,K5A, \ | |||||
K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K42, K6D, K57,K59,K58, \ | |||||
K43,K44,K45, K46, K47, K48,K49,K4A, K6E, K66,K5B,K5C,K5D \ | |||||
) { \ | |||||
{ KB_NO, KB_##K01, KB_##K02, KB_##K03, KB_##K04, KB_##K05, KB_##K06, KB_##K07 }, \ | |||||
{ KB_##K08, KB_##K09, KB_##K0A, KB_##K0B, KB_##K0C, KB_##K0D, KB_##K0E, KB_##K0F }, \ | |||||
{ KB_##K10, KB_##K11, KB_##K12, KB_##K13, KB_##K14, KB_##K15, KB_##K16, KB_##K17 }, \ | |||||
{ KB_##K18, KB_##K19, KB_##K1A, KB_##K1B, KB_##K1C, KB_##K1D, KB_##K1E, KB_##K1F }, \ | |||||
{ KB_##K20, KB_##K21, KB_##K22, KB_##K23, KB_##K24, KB_##K25, KB_##K26, KB_##K27 }, \ | |||||
{ KB_##K28, KB_##K29, KB_##K2A, KB_##K2B, KB_##K2C, KB_##K2D, KB_##K2E, KB_##K2F }, \ | |||||
{ KB_##K30, KB_##K31, KB_##K32, KB_##K33, KB_##K34, KB_##K35, KB_##K36, KB_##K37 }, \ | |||||
{ KB_##K38, KB_##K39, KB_##K3A, KB_##K3B, KB_##K3C, KB_##K3D, KB_##K3E, KB_##K3F }, \ | |||||
{ KB_##K40, KB_##K41, KB_##K42, KB_##K43, KB_##K44, KB_##K45, KB_##K46, KB_##K47 }, \ | |||||
{ KB_##K48, KB_##K49, KB_##K4A, KB_##K4B, KB_##K4C, KB_##K4D, KB_##K4E, KB_##K4F }, \ | |||||
{ KB_##K50, KB_##K51, KB_##K52, KB_##K53, KB_##K54, KB_##K55, KB_##K56, KB_##K57 }, \ | |||||
{ KB_##K58, KB_##K59, KB_##K5A, KB_##K5B, KB_##K5C, KB_##K5D, KB_NO, KB_NO }, \ | |||||
{ KB_NO, KB_NO, KB_NO, KB_NO, KB_##K64, KB_##K65, KB_##K66, KB_NO }, \ | |||||
{ KB_##K68, KB_##K69, KB_##K6A, KB_##K6B, KB_##K6C, KB_##K6D, KB_##K6E, KB_NO }, \ | |||||
{ KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, }, \ | |||||
{ KB_NO, KB_NO, KB_##K7A, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO } \ | |||||
} | |||||
// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed. | |||||
static const uint8_t PROGMEM fn_layer[] = { | |||||
0, // Fn0 | |||||
0, // Fn1 | |||||
0, // Fn2 | |||||
0, // Fn3 | |||||
0, // Fn4 | |||||
0, // Fn5 | |||||
0, // Fn6 | |||||
0 // Fn7 | |||||
}; | |||||
// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer. | |||||
// See layer.c for details. | |||||
static const uint8_t PROGMEM fn_keycode[] = { | |||||
KB_NO, // Fn0 | |||||
KB_NO, // Fn1 | |||||
KB_NO, // Fn2 | |||||
KB_NO, // Fn3 | |||||
KB_NO, // Fn4 | |||||
KB_NO, // Fn5 | |||||
KB_NO, // Fn6 | |||||
KB_NO // Fn7 | |||||
}; | |||||
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||
/* 0: default | |||||
* ,---. ,------------------------, ,------------------------. ,---------. | |||||
* |Pow| | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10| | F11| F12| ,-----------. | |||||
* `---' `------------------------' `------------------------' `---------' | *| /| +| | |||||
* ,-------------------------------------------------------------. ,---. ,---------------| | |||||
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS | |Hlp| | 7| 8| 9| -| | |||||
* |-------------------------------------------------------------| |---| |---------------| | |||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Del| | |Ins| | 4| 5| 6| ,| | |||||
* |---------------------------------------------------------' | |---| |---------------| | |||||
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `|Return| |Clr| | 1| 2| 3| | | |||||
* |-------------------------------------------------------------| |---| |-----------|Ent| | |||||
* |Shift | Z| X| C| V| B| N| M| ,| ,| /| |Shift | |PgU| | 0| .| Up| | | |||||
* |-------------------------------------------------------------| |---| |---------------| | |||||
* |Alt |Gui |Alt | Space | |Gui|App|Ctrl | |PgD| |Tab|Lef|Dow|Rig| | |||||
* `-------------------------------------------------------------' `---' `---------------' | |||||
*/ | |||||
KEYMAP( | |||||
PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PAST,PSLS,PPLS, | |||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,BSPC, HELP, P7, P8, P9, PMNS, | |||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,DEL, INS, P4, P5, P6, PCMM, | |||||
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,GRV, ENT, CLR, P1, P2, P3, PENT, | |||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RO, RSFT, PGUP, P0, PDOT,UP, | |||||
LCTL,LGUI,LALT, SPC, ERAS, RALT,RGUI,RCTL, PGDN, TAB, LEFT,DOWN,RGHT | |||||
), | |||||
}; | |||||
uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col) | |||||
{ | |||||
return pgm_read_byte(&keymaps[(layer)][(row)][(col)]); | |||||
} | |||||
uint8_t keymap_fn_layer(uint8_t fn_bits) | |||||
{ | |||||
return pgm_read_byte(&fn_layer[biton(fn_bits)]); | |||||
} | |||||
uint8_t keymap_fn_keycode(uint8_t fn_bits) | |||||
{ | |||||
return pgm_read_byte(&fn_keycode[(biton(fn_bits))]); | |||||
} |
/* | |||||
Copyright 2012 Jun Wako <[email protected]> | |||||
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/>. | |||||
*/ | |||||
#include "stdint.h" | |||||
#include "news.h" | |||||
#include "led.h" | |||||
void led_set(uint8_t usb_led) | |||||
{ | |||||
// not supported now | |||||
} |
/* | |||||
Copyright 2012 Jun Wako <[email protected]> | |||||
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/>. | |||||
*/ | |||||
#include <stdint.h> | |||||
#include <stdbool.h> | |||||
#include <avr/io.h> | |||||
#include <util/delay.h> | |||||
#include "print.h" | |||||
#include "util.h" | |||||
#include "news.h" | |||||
#include "matrix.h" | |||||
/* | |||||
* Matrix Array usage: | |||||
* | |||||
* ROW: 16 | |||||
* COL:8 | |||||
* | |||||
* 8bit wide | |||||
* +---------+ | |||||
* 0|00 ... 07| | |||||
* 1|08 ... 0F| | |||||
* :| ... | | |||||
* :| ... | | |||||
* E|70 ... 77| | |||||
* F|78 ... 7F| | |||||
* +---------+ | |||||
* | |||||
*/ | |||||
static uint8_t matrix[MATRIX_ROWS]; | |||||
#define ROW(code) ((code>>3)&0xF) | |||||
#define COL(code) (code&0x07) | |||||
static bool is_modified = false; | |||||
inline | |||||
uint8_t matrix_rows(void) | |||||
{ | |||||
return MATRIX_ROWS; | |||||
} | |||||
inline | |||||
uint8_t matrix_cols(void) | |||||
{ | |||||
return MATRIX_COLS; | |||||
} | |||||
void matrix_init(void) | |||||
{ | |||||
news_init(); | |||||
// initialize matrix state: all keys off | |||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; | |||||
return; | |||||
} | |||||
uint8_t matrix_scan(void) | |||||
{ | |||||
is_modified = false; | |||||
uint8_t code; | |||||
code = news_recv(); | |||||
if (code == 0) { | |||||
return 0; | |||||
} | |||||
phex(code); print(" "); | |||||
if (code&0x80) { | |||||
// break code | |||||
if (matrix_is_on(ROW(code), COL(code))) { | |||||
matrix[ROW(code)] &= ~(1<<COL(code)); | |||||
is_modified = true; | |||||
} | |||||
} else { | |||||
// make code | |||||
if (!matrix_is_on(ROW(code), COL(code))) { | |||||
matrix[ROW(code)] |= (1<<COL(code)); | |||||
is_modified = true; | |||||
} | |||||
} | |||||
return code; | |||||
} | |||||
bool matrix_is_modified(void) | |||||
{ | |||||
return is_modified; | |||||
} | |||||
inline | |||||
bool matrix_has_ghost(void) | |||||
{ | |||||
return false; | |||||
} | |||||
inline | |||||
bool matrix_is_on(uint8_t row, uint8_t col) | |||||
{ | |||||
return (matrix[row] & (1<<col)); | |||||
} | |||||
inline | |||||
uint8_t matrix_get_row(uint8_t row) | |||||
{ | |||||
return matrix[row]; | |||||
} | |||||
void matrix_print(void) | |||||
{ | |||||
print("\nr/c 01234567\n"); | |||||
for (uint8_t row = 0; row < matrix_rows(); row++) { | |||||
phex(row); print(": "); | |||||
pbin_reverse(matrix_get_row(row)); | |||||
print("\n"); | |||||
} | |||||
} | |||||
uint8_t matrix_key_count(void) | |||||
{ | |||||
uint8_t count = 0; | |||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { | |||||
count += bitpop(matrix[i]); | |||||
} | |||||
return count; | |||||
} |
/* | |||||
Copyright 2012 Jun WAKO <[email protected]> | |||||
This software is licensed with a Modified BSD License. | |||||
All of this is supposed to be Free Software, Open Source, DFSG-free, | |||||
GPL-compatible, and OK to use in both free and proprietary applications. | |||||
Additions and corrections to this file are welcome. | |||||
Redistribution and use in source and binary forms, with or without | |||||
modification, are permitted provided that the following conditions are met: | |||||
* Redistributions of source code must retain the above copyright | |||||
notice, this list of conditions and the following disclaimer. | |||||
* Redistributions in binary form must reproduce the above copyright | |||||
notice, this list of conditions and the following disclaimer in | |||||
the documentation and/or other materials provided with the | |||||
distribution. | |||||
* Neither the name of the copyright holders nor the names of | |||||
contributors may be used to endorse or promote products derived | |||||
from this software without specific prior written permission. | |||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
POSSIBILITY OF SUCH DAMAGE. | |||||
*/ | |||||
#include <stdbool.h> | |||||
#include <avr/io.h> | |||||
#include <avr/interrupt.h> | |||||
#include "news.h" | |||||
void news_init(void) | |||||
{ | |||||
NEWS_KBD_RX_INIT(); | |||||
} | |||||
// RX ring buffer | |||||
#define RBUF_SIZE 8 | |||||
static uint8_t rbuf[RBUF_SIZE]; | |||||
static uint8_t rbuf_head = 0; | |||||
static uint8_t rbuf_tail = 0; | |||||
uint8_t news_recv(void) | |||||
{ | |||||
uint8_t data = 0; | |||||
if (rbuf_head == rbuf_tail) { | |||||
return 0; | |||||
} | |||||
data = rbuf[rbuf_tail]; | |||||
rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE; | |||||
return data; | |||||
} | |||||
// USART RX complete interrupt | |||||
ISR(NEWS_KBD_RX_VECT) | |||||
{ | |||||
uint8_t next = (rbuf_head + 1) % RBUF_SIZE; | |||||
if (next != rbuf_tail) { | |||||
rbuf[rbuf_head] = NEWS_KBD_RX_DATA; | |||||
rbuf_head = next; | |||||
} | |||||
} | |||||
/* | |||||
SONY NEWS Keyboard Protocol | |||||
=========================== | |||||
Resources | |||||
--------- | |||||
Mouse protocol of NWA-5461(Japanese) | |||||
http://groups.google.com/group/fj.sys.news/browse_thread/thread/a01b3e3ac6ae5b2d | |||||
SONY NEWS Info(Japanese) | |||||
http://katsu.watanabe.name/doc/sonynews/ | |||||
Pinouts | |||||
------- | |||||
EIA 232 male connector from NWP-5461 | |||||
------------- | |||||
\ 1 2 3 4 5 / | |||||
\ 6 7 8 9 / | |||||
--------- | |||||
1 VCC | |||||
2 BZ(Speaker) | |||||
3 Keyboard Data(from keyboard MCU TxD) | |||||
4 NC | |||||
5 FG | |||||
6 Unknown Input(to keyboard MCU RxD via schmitt trigger) | |||||
7 Mouse Data(from Mouse Ext connector) | |||||
8 Unknown Input(to Keyboard MCU Input via diode and buffer) | |||||
9 GND | |||||
NOTE: Two LED on keyboard are controlled by pin 6,8? | |||||
EIA 232 male connector from NWP-411A | |||||
------------- | |||||
\ 1 2 3 4 5 / | |||||
\ 6 7 8 9 / | |||||
--------- | |||||
1 VCC | |||||
2 BZ(Speaker) | |||||
3 Keyboard Data(from keyboard MCU TxD) | |||||
4 NC | |||||
5 FG | |||||
6 NC | |||||
7 Mouse Data(from Mouse Ext connector) | |||||
8 NC | |||||
9 GND | |||||
NOTE: These are just from my guess and not confirmed. | |||||
Signaling | |||||
--------- | |||||
~~~~~~~~~~ ____XOO0X111X222X333X444X555X666X777~~~~ ~~~~~~~ | |||||
Idle Start LSB MSB Stop Idle | |||||
Idle: High | |||||
Start bit: Low | |||||
Stop bit: High | |||||
Bit order: LSB first | |||||
Baud rate: 9600 | |||||
Interface: TTL level(5V) UART | |||||
NOTE: This is observed on NWP-5461 with its DIP switch all OFF. | |||||
Format | |||||
------ | |||||
MSB LSB | |||||
7 6 5 4 3 2 1 0 bit | |||||
| | | | | | | | | |||||
| +-+-+-+-+-+-+-- scan code(00-7F) | |||||
+---------------- break flag: sets when released | |||||
Scan Codes | |||||
---------- | |||||
SONY NEWS NWP-5461 | |||||
,---. ,------------------------, ,------------------------. ,---------. | |||||
| 7A| | 01 | 02 | 03 | 04 | 05 | | 06 | 07 | 08 | 09 | 0A | | 68 | 69 | ,-----------. | |||||
`---' `------------------------' `------------------------' `---------' | 64| 65| 52| | |||||
,-------------------------------------------------------------. ,---. ,---------------| | |||||
| 0B| 0C| 0D| 0E| 0F| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19 | | 6A| | 4B| 4C| 4D| 4E| | |||||
|-------------------------------------------------------------| |---| |---------------| | |||||
| 1A | 1B| 1C| 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| | | 6B| | 4F| 50| 51| 56| | |||||
|---------------------------------------------------------' | |---| |---------------| | |||||
| 28 | 29| 2A| 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35 | | 6C| | 53| 54| 55| | | |||||
|-------------------------------------------------------------| |---| |-----------| 5A| | |||||
| 36 | 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 42 | | 6D| | 57| 59| 58| | | |||||
|-------------------------------------------------------------| |---| |---------------| | |||||
| 43 | 44 | 45 | 46 | 47 | 48| 49| 4A | | 6E| | 66| 5B| 5C| 5D| | |||||
`-------------------------------------------------------------' `---' `---------------' | |||||
*/ |
/* | |||||
Copyright 2012 Jun WAKO <[email protected]> | |||||
This software is licensed with a Modified BSD License. | |||||
All of this is supposed to be Free Software, Open Source, DFSG-free, | |||||
GPL-compatible, and OK to use in both free and proprietary applications. | |||||
Additions and corrections to this file are welcome. | |||||
Redistribution and use in source and binary forms, with or without | |||||
modification, are permitted provided that the following conditions are met: | |||||
* Redistributions of source code must retain the above copyright | |||||
notice, this list of conditions and the following disclaimer. | |||||
* Redistributions in binary form must reproduce the above copyright | |||||
notice, this list of conditions and the following disclaimer in | |||||
the documentation and/or other materials provided with the | |||||
distribution. | |||||
* Neither the name of the copyright holders nor the names of | |||||
contributors may be used to endorse or promote products derived | |||||
from this software without specific prior written permission. | |||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
POSSIBILITY OF SUCH DAMAGE. | |||||
*/ | |||||
#ifndef NEWS_H | |||||
#define NEWS_H | |||||
/* | |||||
* Primitive PS/2 Library for AVR | |||||
*/ | |||||
/* host role */ | |||||
void news_init(void); | |||||
uint8_t news_recv(void); | |||||
/* device role */ | |||||
#endif |
#define KB_APP KB_APPLICATION | #define KB_APP KB_APPLICATION | ||||
#define KB_NUHS KB_NONUS_HASH | #define KB_NUHS KB_NONUS_HASH | ||||
#define KB_NUBS KB_NONUS_BSLASH | #define KB_NUBS KB_NONUS_BSLASH | ||||
#define KB_ERAS KB_ALT_ERASE, | |||||
#define KB_CLR KB_CLEAR | |||||
/* for Japanese */ | /* for Japanese */ | ||||
#define KB_ZKHK KB_GRAVE | #define KB_ZKHK KB_GRAVE | ||||
#define KB_RO KB_INT1 | #define KB_RO KB_INT1 | ||||
#define KB_P9 KB_KP_9 | #define KB_P9 KB_KP_9 | ||||
#define KB_P0 KB_KP_0 | #define KB_P0 KB_KP_0 | ||||
#define KB_PDOT KB_KP_DOT | #define KB_PDOT KB_KP_DOT | ||||
#define KB_PCMM KB_KP_COMMA | |||||
#define KB_PSLS KB_KP_SLASH | #define KB_PSLS KB_KP_SLASH | ||||
#define KB_PAST KB_KP_ASTERISK | #define KB_PAST KB_KP_ASTERISK | ||||
#define KB_PMNS KB_KP_MINUS | #define KB_PMNS KB_KP_MINUS |