forked from mirrors/qmk_firmware
161 lines
5.2 KiB
C
161 lines
5.2 KiB
C
/*
|
|
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 GND
|
|
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 FG
|
|
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 GND
|
|
6 NC
|
|
7 Mouse Data(from Mouse Ext connector)
|
|
8 NC
|
|
9 FG
|
|
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|
|
|
`-------------------------------------------------------------' `---' `---------------'
|
|
*/
|