summaryrefslogtreecommitdiff
path: root/sony_usb/news.c
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2012-01-06 01:37:33 +0900
committertmk <nobody@nowhere>2012-01-06 01:37:33 +0900
commit579991b927483da884b2f22d43e91bb8550cd534 (patch)
tree89bba950e5211d0eb51cadbf4f15c1b0bfe9709e /sony_usb/news.c
parent7386c761912530bbb53496002ab32d02c8a86833 (diff)
added SONY NEWS keyboard NWP-5461 support.
Diffstat (limited to 'sony_usb/news.c')
-rw-r--r--sony_usb/news.c168
1 files changed, 168 insertions, 0 deletions
diff --git a/sony_usb/news.c b/sony_usb/news.c
new file mode 100644
index 0000000000..d18b996f49
--- /dev/null
+++ b/sony_usb/news.c
@@ -0,0 +1,168 @@
+/*
+Copyright 2012 Jun WAKO <wakojun@gmail.com>
+
+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|
+ `-------------------------------------------------------------' `---' `---------------'
+*/