v3.0 cleanse files
This commit is contained in:
		
							parent
							
								
									d2b9489a5e
								
							
						
					
					
						commit
						00350c180d
					
				
					 5 changed files with 240 additions and 284 deletions
				
			
		
							
								
								
									
										213
									
								
								adb.c
									
										
									
									
									
								
							
							
						
						
									
										213
									
								
								adb.c
									
										
									
									
									
								
							|  | @ -1,3 +1,39 @@ | |||
| /*
 | ||||
| Copyright (c) 2011 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 <util/delay.h> | ||||
| #include <avr/io.h> | ||||
|  | @ -191,3 +227,180 @@ static inline uint8_t wait_data_hi(uint8_t us) | |||
|     } | ||||
|     return us; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
| ADB Protocol | ||||
| ============ | ||||
| 
 | ||||
| Resources | ||||
| --------- | ||||
| ADB - The Untold Story: Space Aliens Ate My Mouse | ||||
|     http://developer.apple.com/legacy/mac/library/#technotes/hw/hw_01.html
 | ||||
| Apple IIgs Hardware Reference Second Edition [p80(Chapter6 p121)] | ||||
|     ftp://ftp.apple.asimov.net/pub/apple_II/documentation/Apple%20IIgs%20Hardware%20Reference.pdf
 | ||||
| ADB Keycode | ||||
|     http://72.0.193.250/Documentation/macppc/adbkeycodes/
 | ||||
|     http://m0115.web.fc2.com/m0115.jpg
 | ||||
|     [Inside Macintosh volume V, pages 191-192] | ||||
| ADB Signaling | ||||
|     http://kbdbabel.sourceforge.net/doc/kbd_signaling_pcxt_ps2_adb.pdf
 | ||||
| ADB Overview & History | ||||
|     http://en.wikipedia.org/wiki/Apple_Desktop_Bus
 | ||||
| Microchip Application Note: ADB device(with code for PIC16C) | ||||
|     http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011062
 | ||||
| AVR ATtiny2131 ADB to PS/2 converter(Japanese) | ||||
|     http://hp.vector.co.jp/authors/VA000177/html/KeyBoardA5DEA5CBA5A2II.html
 | ||||
| 
 | ||||
| 
 | ||||
| Pinouts | ||||
| ------- | ||||
|     ADB female socket from the front: | ||||
|     __________ | ||||
|     |        | <--- top | ||||
|     | 4o  o3 | | ||||
|     |2o    o1| | ||||
|     |   ==   | | ||||
|     |________| <--- bottom | ||||
|       |    |   <--- 4pins | ||||
| 
 | ||||
| 
 | ||||
|     ADB female socket from bottom: | ||||
| 
 | ||||
|     ========== <--- front | ||||
|     |        | | ||||
|     |        | | ||||
|     |2o    o1| | ||||
|     |4o    o3| | ||||
|     ---------- <--- back | ||||
| 
 | ||||
|     1: Data | ||||
|     2: Power SW(low when press Power key) | ||||
|     3: Vcc(5V) | ||||
|     4: GND | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| Commands | ||||
| -------- | ||||
|     ADB command is 1byte and consists of 4bit-address, 2bit-command | ||||
|     type and 2bit-register. The commands are always sent by Host. | ||||
| 
 | ||||
|     Command format: | ||||
|     7 6 5 4 3 2 1 0 | ||||
|     | | | |------------ address | ||||
|             | |-------- command type | ||||
|                 | |---- register | ||||
| 
 | ||||
|     bits                commands | ||||
|     ------------------------------------------------------ | ||||
|     - - - - 0 0 0 0     Send Request(reset all devices) | ||||
|     A A A A 0 0 0 1     Flush(reset a device) | ||||
|     - - - - 0 0 1 0     Reserved | ||||
|     - - - - 0 0 1 1     Reserved | ||||
|     - - - - 0 1 - -     Reserved | ||||
|     A A A A 1 0 R R     Listen(write to a device) | ||||
|     A A A A 1 1 R R     Talk(read from a device) | ||||
| 
 | ||||
|     The command to read keycodes from keyboard is 0x2C which | ||||
|     consist of keyboard address 2 and Talk against register 0.  | ||||
| 
 | ||||
|     Address: | ||||
|     2:  keyboard | ||||
|     3:  mice | ||||
| 
 | ||||
|     Registers: | ||||
|     0: application(keyobard uses this to store its data.) | ||||
|     1: application | ||||
|     2: application(keyboard uses this for LEDs and state of modifiers) | ||||
|     3: status and command | ||||
| 
 | ||||
| 
 | ||||
| Communication | ||||
| ------------- | ||||
|     This is a minimum information for keyboard communication. | ||||
|     See "Resources" for detail. | ||||
| 
 | ||||
|     Signaling: | ||||
| 
 | ||||
|     ~~~~____________~~||||||||||||__~~~~~_~~|||||||||||||||__~~~~ | ||||
| 
 | ||||
|         |800us     |  |7 Command 0|  |   |  |15-64  Data  0|Stopbit(0) | ||||
|         +Attention |              |  |   +Startbit(1) | ||||
|                    +Startbit(1)   |  +Tlt(140-260us) | ||||
|                                   +stopbit(0) | ||||
| 
 | ||||
|     Bit cells: | ||||
| 
 | ||||
|     bit0: ______~~~ | ||||
|           65    :35us | ||||
| 
 | ||||
|     bit1: ___~~~~~~ | ||||
|           35 :65us | ||||
| 
 | ||||
|     bit0 low time: 60-70% of bit cell(42-91us) | ||||
|     bit1 low time: 30-40% of bit cell(21-52us) | ||||
|     bit cell time: 70-130us | ||||
|     [from Apple IIgs Hardware Reference Second Edition] | ||||
| 
 | ||||
|     Criterion for bit0/1: | ||||
|     After 55us if line is low/high then bit is 0/1. | ||||
| 
 | ||||
|     Attention & start bit: | ||||
|     Host asserts low in 560-1040us then places start bit(1). | ||||
| 
 | ||||
|     Tlt(Stop to Start): | ||||
|     Bus stays high in 140-260us then device places start bit(1). | ||||
| 
 | ||||
|     Global reset: | ||||
|     Host asserts low in 2.8-5.2ms. All devices are forced to reset. | ||||
| 
 | ||||
|     Send request from device(Srq): | ||||
|     Device can request to send at commad(Global only?) stop bit. | ||||
|     keep low for 300us to request. | ||||
| 
 | ||||
| 
 | ||||
| Keyboard Data(Register0) | ||||
|     This 16bit data can contains two keycodes and two released flags. | ||||
|     First keycode is palced in upper byte. When one keyocode is sent, | ||||
|     lower byte is 0xFF. | ||||
|     Release flag is 1 when key is released. | ||||
| 
 | ||||
|     1514 . . . . . 8 7 6 . . . . . 0 | ||||
|      | | | | | | | | | +-+-+-+-+-+-+-   Keycode2 | ||||
|      | | | | | | | | +---------------   Released2(1 when the key is released) | ||||
|      | +-+-+-+-+-+-+-----------------   Keycode1 | ||||
|      +-------------------------------   Released1(1 when the key is released) | ||||
| 
 | ||||
|     Keycodes: | ||||
|     Scancode consists of 7bit keycode and 1bit release flag. | ||||
|     Device can send two keycodes at once. If just one keycode is sent | ||||
|     keycode1 contains it and keyocode2 is 0xFF. | ||||
| 
 | ||||
|     Power switch: | ||||
|     You can read the state from PSW line(active low) however | ||||
|     the switch has a special scancode 0x7F7F, so you can | ||||
|     also read from Data line. It uses 0xFFFF for release scancode. | ||||
| 
 | ||||
| Keyboard LEDs & state of keys(Register2) | ||||
|     This register hold current state of three LEDs and nine keys. | ||||
|     The state of LEDs can be changed by sending Listen command. | ||||
|      | ||||
|     1514 . . . . . . 7 6 5 . 3 2 1 0 | ||||
|      | | | | | | | | | | | | | | | +-   LED1(NumLock) | ||||
|      | | | | | | | | | | | | | | +---   LED2(CapsLock) | ||||
|      | | | | | | | | | | | | | +-----   LED3(ScrollLock) | ||||
|      | | | | | | | | | | +-+-+-------   Reserved | ||||
|      | | | | | | | | | +-------------   ScrollLock | ||||
|      | | | | | | | | +---------------   NumLock | ||||
|      | | | | | | | +-----------------   Apple/Command | ||||
|      | | | | | | +-------------------   Option | ||||
|      | | | | | +---------------------   Shift | ||||
|      | | | | +-----------------------   Control | ||||
|      | | | +-------------------------   Reset/Power | ||||
|      | | +---------------------------   CapsLock | ||||
|      | +-----------------------------   Delete | ||||
|      +-------------------------------   Reserved | ||||
| 
 | ||||
| END_OF_ADB | ||||
| */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tmk
						tmk