You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					169 lines
				
				5.2 KiB
			
		
		
			
		
	
	
					169 lines
				
				5.2 KiB
			| 
								 
											11 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								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|
							 | 
						||
| 
								 | 
							
								    `-------------------------------------------------------------' `---' `---------------'
							 | 
						||
| 
								 | 
							
								*/
							 |