IBM Terminal M-122 converter support
Code ported from TMK to QMK.
This commit is contained in:
		
							parent
							
								
									20892bf706
								
							
						
					
					
						commit
						bd5f323bec
					
				
					 15 changed files with 765 additions and 0 deletions
				
			
		
							
								
								
									
										3
									
								
								keyboards/converter/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								keyboards/converter/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					ifndef MAKEFILE_INCLUDED
 | 
				
			||||||
 | 
						include ../../Makefile
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
							
								
								
									
										1
									
								
								keyboards/converter/converter.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/converter/converter.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					#include "converter.h"
 | 
				
			||||||
							
								
								
									
										1
									
								
								keyboards/converter/converter.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/converter/converter.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
							
								
								
									
										3
									
								
								keyboards/converter/ibm_terminal/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								keyboards/converter/ibm_terminal/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					ifndef MAKEFILE_INCLUDED
 | 
				
			||||||
 | 
						include ../../../Makefile
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
							
								
								
									
										40
									
								
								keyboards/converter/ibm_terminal/README
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								keyboards/converter/ibm_terminal/README
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					Keyboard converter for IBM terminal keyboard
 | 
				
			||||||
 | 
					============================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is a port of TMK's converter/terminal_usb to QMK.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
 | 
				
			||||||
 | 
					I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source code: https://github.com/tmk/tmk_keyboard
 | 
				
			||||||
 | 
					Article: http://geekhack.org/index.php?topic=27272.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONNECTION
 | 
				
			||||||
 | 
					----------
 | 
				
			||||||
 | 
					Keyboard    ATMega32U4
 | 
				
			||||||
 | 
					----------------------
 | 
				
			||||||
 | 
					Data:       PD2
 | 
				
			||||||
 | 
					Clock:      PD5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD
 | 
				
			||||||
 | 
					-----
 | 
				
			||||||
 | 
					$ git clone https://github.com/tmk/tmk_keyboard.git
 | 
				
			||||||
 | 
					$ cd converter/terminal_usb
 | 
				
			||||||
 | 
					$ make 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RESOURCE
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
 | 
				
			||||||
 | 
					102keys(1392595): http://geekhack.org/index.php?topic=10737.0
 | 
				
			||||||
 | 
					122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
 | 
				
			||||||
 | 
					KbdBabel: http://www.kbdbabel.org/
 | 
				
			||||||
 | 
					RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
 | 
				
			||||||
 | 
					DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
 | 
				
			||||||
 | 
					WinAVR: http://winavr.sourceforge.net/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
							
								
								
									
										138
									
								
								keyboards/converter/ibm_terminal/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								keyboards/converter/ibm_terminal/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,138 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2012 Jun Wako <wakojun@gmail.com>
 | 
				
			||||||
 | 
					Copyright 2016 Priyadi Iman Nurcahyo <priyadi@priyadi.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VENDOR_ID       0xFEED
 | 
				
			||||||
 | 
					#define PRODUCT_ID      0x6535
 | 
				
			||||||
 | 
					#define DEVICE_VER      0x0100
 | 
				
			||||||
 | 
					#define MANUFACTURER    QMK
 | 
				
			||||||
 | 
					#define PRODUCT         IBM Terminal Keyboard
 | 
				
			||||||
 | 
					#define DESCRIPTION     USB converter for IBM Terminal Keyboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* matrix size */
 | 
				
			||||||
 | 
					#define MATRIX_ROWS 17  // keycode bit: 3-0
 | 
				
			||||||
 | 
					#define MATRIX_COLS 8   // keycode bit: 6-4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* legacy keymap support */
 | 
				
			||||||
 | 
					#define USE_LEGACY_KEYMAP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key combination for command */
 | 
				
			||||||
 | 
					#define IS_COMMAND() ( \
 | 
				
			||||||
 | 
					    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_RALT) | MOD_BIT(KC_RCTL)) \
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					 * PS/2 USART configuration for ATMega32U4
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef PS2_USE_USART
 | 
				
			||||||
 | 
					/* XCK for clock line */
 | 
				
			||||||
 | 
					#define PS2_CLOCK_PORT  PORTD
 | 
				
			||||||
 | 
					#define PS2_CLOCK_PIN   PIND
 | 
				
			||||||
 | 
					#define PS2_CLOCK_DDR   DDRD
 | 
				
			||||||
 | 
					#define PS2_CLOCK_BIT   5
 | 
				
			||||||
 | 
					/* RXD for data line */
 | 
				
			||||||
 | 
					#define PS2_DATA_PORT   PORTD
 | 
				
			||||||
 | 
					#define PS2_DATA_PIN    PIND
 | 
				
			||||||
 | 
					#define PS2_DATA_DDR    DDRD
 | 
				
			||||||
 | 
					#define PS2_DATA_BIT    2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
 | 
				
			||||||
 | 
					/* set DDR of CLOCK as input to be slave */
 | 
				
			||||||
 | 
					#define PS2_USART_INIT() do {   \
 | 
				
			||||||
 | 
					    PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);   \
 | 
				
			||||||
 | 
					    PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);     \
 | 
				
			||||||
 | 
					    UCSR1C = ((1 << UMSEL10) |  \
 | 
				
			||||||
 | 
					              (3 << UPM10)   |  \
 | 
				
			||||||
 | 
					              (0 << USBS1)   |  \
 | 
				
			||||||
 | 
					              (3 << UCSZ10)  |  \
 | 
				
			||||||
 | 
					              (0 << UCPOL1));   \
 | 
				
			||||||
 | 
					    UCSR1A = 0;                 \
 | 
				
			||||||
 | 
					    UBRR1H = 0;                 \
 | 
				
			||||||
 | 
					    UBRR1L = 0;                 \
 | 
				
			||||||
 | 
					} while (0)
 | 
				
			||||||
 | 
					#define PS2_USART_RX_INT_ON() do {  \
 | 
				
			||||||
 | 
					    UCSR1B = ((1 << RXCIE1) |       \
 | 
				
			||||||
 | 
					              (1 << RXEN1));        \
 | 
				
			||||||
 | 
					} while (0)
 | 
				
			||||||
 | 
					#define PS2_USART_RX_POLL_ON() do { \
 | 
				
			||||||
 | 
					    UCSR1B = (1 << RXEN1);          \
 | 
				
			||||||
 | 
					} while (0)
 | 
				
			||||||
 | 
					#define PS2_USART_OFF() do {    \
 | 
				
			||||||
 | 
					    UCSR1C = 0;                 \
 | 
				
			||||||
 | 
					    UCSR1B &= ~((1 << RXEN1) |  \
 | 
				
			||||||
 | 
					                (1 << TXEN1));  \
 | 
				
			||||||
 | 
					} while (0)
 | 
				
			||||||
 | 
					#define PS2_USART_RX_READY      (UCSR1A & (1<<RXC1))
 | 
				
			||||||
 | 
					#define PS2_USART_RX_DATA       UDR1
 | 
				
			||||||
 | 
					#define PS2_USART_ERROR         (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
 | 
				
			||||||
 | 
					#define PS2_USART_RX_VECT       USART1_RX_vect
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * PS/2 Interrupt configuration
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef PS2_USE_INT
 | 
				
			||||||
 | 
					/* uses INT1 for clock line(ATMega32U4) */
 | 
				
			||||||
 | 
					#define PS2_CLOCK_PORT  PORTD
 | 
				
			||||||
 | 
					#define PS2_CLOCK_PIN   PIND
 | 
				
			||||||
 | 
					#define PS2_CLOCK_DDR   DDRD
 | 
				
			||||||
 | 
					#define PS2_CLOCK_BIT   1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PS2_DATA_PORT   PORTD
 | 
				
			||||||
 | 
					#define PS2_DATA_PIN    PIND
 | 
				
			||||||
 | 
					#define PS2_DATA_DDR    DDRD
 | 
				
			||||||
 | 
					#define PS2_DATA_BIT    0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PS2_INT_INIT()  do {    \
 | 
				
			||||||
 | 
					    EICRA |= ((1<<ISC11) |      \
 | 
				
			||||||
 | 
					              (0<<ISC10));      \
 | 
				
			||||||
 | 
					} while (0)
 | 
				
			||||||
 | 
					#define PS2_INT_ON()  do {      \
 | 
				
			||||||
 | 
					    EIMSK |= (1<<INT1);         \
 | 
				
			||||||
 | 
					} while (0)
 | 
				
			||||||
 | 
					#define PS2_INT_OFF() do {      \
 | 
				
			||||||
 | 
					    EIMSK &= ~(1<<INT1);        \
 | 
				
			||||||
 | 
					} while (0)
 | 
				
			||||||
 | 
					#define PS2_INT_VECT    INT1_vect
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * PS/2 Busywait configuration
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef PS2_USE_BUSYWAIT
 | 
				
			||||||
 | 
					#define PS2_CLOCK_PORT  PORTD
 | 
				
			||||||
 | 
					#define PS2_CLOCK_PIN   PIND
 | 
				
			||||||
 | 
					#define PS2_CLOCK_DDR   DDRD
 | 
				
			||||||
 | 
					#define PS2_CLOCK_BIT   1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PS2_DATA_PORT   PORTD
 | 
				
			||||||
 | 
					#define PS2_DATA_PIN    PIND
 | 
				
			||||||
 | 
					#define PS2_DATA_DDR    DDRD
 | 
				
			||||||
 | 
					#define PS2_DATA_BIT    0
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										6
									
								
								keyboards/converter/ibm_terminal/ibm_terminal.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								keyboards/converter/ibm_terminal/ibm_terminal.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					#include "ibm_terminal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_init_kb(void) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    matrix_init_user();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										80
									
								
								keyboards/converter/ibm_terminal/ibm_terminal.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								keyboards/converter/ibm_terminal/ibm_terminal.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,80 @@
 | 
				
			||||||
 | 
					#ifndef IBM_TERMINAL_H
 | 
				
			||||||
 | 
					#define IBM_TERMINAL_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * IBM Terminal keyboard 6110345(122keys)/1392595(102keys)
 | 
				
			||||||
 | 
					 * http://geekhack.org/showthread.php?10737-What-Can-I-Do-With-a-Terminal-Model-M
 | 
				
			||||||
 | 
					 * http://www.seasip.info/VintagePC/ibm_1391406.html
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Keymap array:
 | 
				
			||||||
 | 
					 *     8 bytes
 | 
				
			||||||
 | 
					 *   +---------+
 | 
				
			||||||
 | 
					 *  0|         |
 | 
				
			||||||
 | 
					 *  :|         | 0x00-0x87
 | 
				
			||||||
 | 
					 *  ;|         |
 | 
				
			||||||
 | 
					 * 17|         |
 | 
				
			||||||
 | 
					 *   +---------+
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define KEYMAP( \
 | 
				
			||||||
 | 
					                  K08,K10,K18,K20,K28,K30,K38,K40,K48,K50,K57,K5F,                                         \
 | 
				
			||||||
 | 
					                  K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E,                                         \
 | 
				
			||||||
 | 
					                                                                                                           \
 | 
				
			||||||
 | 
					    K05,K06,  K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K5D,K66,  K67,K6E,K6F,  K76,K77,K7E,K84, \
 | 
				
			||||||
 | 
					    K04,K0C,  K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,    K5C,  K64,K65,K6D,  K6C,K75,K7D,K7C, \
 | 
				
			||||||
 | 
					    K03,K0B,  K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,    K53,K5A,      K63,      K6B,K73,K74,K7B, \
 | 
				
			||||||
 | 
					    K83,K0A,  K12,K13,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A,    K51,K59,  K61,K62,K6A,  K69,K72,K7A,K79, \
 | 
				
			||||||
 | 
					    K01,K09,  K11,    K19,            K29,                    K39,    K58,      K60,      K68,K70,K71,K78  \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_##K01, KC_NO,    KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
 | 
				
			||||||
 | 
					    { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
 | 
				
			||||||
 | 
					    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
 | 
				
			||||||
 | 
					    { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
 | 
				
			||||||
 | 
					    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
 | 
				
			||||||
 | 
					    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
 | 
				
			||||||
 | 
					    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
 | 
				
			||||||
 | 
					    { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
 | 
				
			||||||
 | 
					    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
 | 
				
			||||||
 | 
					    { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
 | 
				
			||||||
 | 
					    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
 | 
				
			||||||
 | 
					    { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
 | 
				
			||||||
 | 
					    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
 | 
				
			||||||
 | 
					    { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
 | 
				
			||||||
 | 
					    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
 | 
				
			||||||
 | 
					    { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_##K7E, KC_NO    }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_##K83, KC_##K84, KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * IBM Terminal keyboard 1399625, 101-key
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define KEYMAP_101( \
 | 
				
			||||||
 | 
					    K08,    K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E,  K57,K5F,K62,                   \
 | 
				
			||||||
 | 
					                                                                                             \
 | 
				
			||||||
 | 
					    K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66,  K67,K6E,K6F,  K76,K77,K7E,K84, \
 | 
				
			||||||
 | 
					    K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5C,  K64,K65,K6D,  K6C,K75,K7D,     \
 | 
				
			||||||
 | 
					    K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,    K5A,                K6B,K73,K74,K7C, \
 | 
				
			||||||
 | 
					    K12,    K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A,    K59,      K63,      K69,K72,K7A,     \
 | 
				
			||||||
 | 
					    K11,    K19,            K29,                K39,    K58,  K61,K60,K6A,  K70,    K71,K79  \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO   , KC_NO,    KC_NO   , KC_NO   , KC_NO   , KC_NO   , KC_##K07 }, \
 | 
				
			||||||
 | 
					    { KC_##K08, KC_NO   , KC_NO   , KC_NO   , KC_NO   , KC_##K0D, KC_##K0E, KC_##K0F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K11, KC_##K12, KC_NO   , KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_NO   , KC_##K52, KC_NO   , KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
 | 
				
			||||||
 | 
					    { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_NO   , KC_##K5E, KC_##K5F }, \
 | 
				
			||||||
 | 
					    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
 | 
				
			||||||
 | 
					    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K79, KC_##K7A, KC_NO   , KC_##K7C, KC_##K7D, KC_##K7E, KC_NO    }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO   , KC_##K84, KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										27
									
								
								keyboards/converter/ibm_terminal/keymaps/default/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								keyboards/converter/ibm_terminal/keymaps/default/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					# Build Options
 | 
				
			||||||
 | 
					#   change to "no" to disable the options, or define them in the Makefile in 
 | 
				
			||||||
 | 
					#   the appropriate keymap folder that will get included automatically
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
 | 
				
			||||||
 | 
					MOUSEKEY_ENABLE ?= yes        # Mouse keys(+4700)
 | 
				
			||||||
 | 
					EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
 | 
				
			||||||
 | 
					CONSOLE_ENABLE ?= no         # Console for debug(+400)
 | 
				
			||||||
 | 
					COMMAND_ENABLE ?= no         # Commands for debug and configuration
 | 
				
			||||||
 | 
					NKRO_ENABLE ?= yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
 | 
					BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality
 | 
				
			||||||
 | 
					MIDI_ENABLE ?= no            # MIDI controls
 | 
				
			||||||
 | 
					AUDIO_ENABLE ?= no           # Audio output on port C6
 | 
				
			||||||
 | 
					UNICODE_ENABLE ?= no         # Unicode
 | 
				
			||||||
 | 
					UNICODEMAP_ENABLE ?= yes
 | 
				
			||||||
 | 
					BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
				
			||||||
 | 
					RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
 | 
				
			||||||
 | 
					PS2_USE_USART ?= yes
 | 
				
			||||||
 | 
					API_SYSEX_ENABLE ?= no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
 | 
					SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifndef QUANTUM_DIR
 | 
				
			||||||
 | 
						include ../../../../../Makefile
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					#ifndef CONFIG_USER_H
 | 
				
			||||||
 | 
					#define CONFIG_USER_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../../config.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										123
									
								
								keyboards/converter/ibm_terminal/keymaps/default/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								keyboards/converter/ibm_terminal/keymaps/default/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,123 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2012 Jun Wako <wakojun@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 "keycode.h"
 | 
				
			||||||
 | 
					#include "print.h"
 | 
				
			||||||
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					#include "ibm_terminal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
 | 
				
			||||||
 | 
					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.
 | 
				
			||||||
 | 
					const uint8_t PROGMEM fn_keycode[] = {
 | 
				
			||||||
 | 
					    KC_NO,          // Fn0
 | 
				
			||||||
 | 
					    KC_NO,          // Fn1
 | 
				
			||||||
 | 
					    KC_NO,          // Fn2
 | 
				
			||||||
 | 
					    KC_NO,          // Fn3
 | 
				
			||||||
 | 
					    KC_NO,          // Fn4
 | 
				
			||||||
 | 
					    KC_NO,          // Fn5
 | 
				
			||||||
 | 
					    KC_NO,          // Fn6
 | 
				
			||||||
 | 
					    KC_NO           // Fn7
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    /* 0: default
 | 
				
			||||||
 | 
					     * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
 | 
				
			||||||
 | 
					     * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
 | 
				
			||||||
 | 
					     * `---'   `---------------' `---------------' `---------------' `-----------'
 | 
				
			||||||
 | 
					     * ,-----------------------------------------------------------. ,-----------. ,---------------.
 | 
				
			||||||
 | 
					     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  \|BS | |Ins|Hom|PgU| |NmL|  /|  *|  -|
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------| |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD| |  7|  8|  9|   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------| `-----------' |-----------|  +|
 | 
				
			||||||
 | 
					     * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  #|Retu|               |  4|  5|  6|   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|     ,---.     |---------------|
 | 
				
			||||||
 | 
					     * |Shif|  \|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift     |     |Up |     |  1|  2|  3|   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
 | 
				
			||||||
 | 
					     * |Ctrl|    |Alt |          Space              |Alt |    |Ctrl| |Lef|Dow|Rig| |      0|  .|   |
 | 
				
			||||||
 | 
					     * `----'    `---------------------------------------'    `----' `-----------' `---------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					    KEYMAP(
 | 
				
			||||||
 | 
					                     F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
 | 
				
			||||||
 | 
					                     F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PSCR,ESC,   GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, JYEN,BSPC,  INS, HOME,PGUP,  NLCK,PSLS,PAST,PMNS,
 | 
				
			||||||
 | 
					    SLCK,INT4,  TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,     BSLS,  DEL, END, PGDN,  P7,  P8,  P9,  PPLS,
 | 
				
			||||||
 | 
					    PAUS,INT5,  CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     NUHS,ENT,        UP,         P4,  P5,  P6,  PCMM,
 | 
				
			||||||
 | 
					    APP, INT6,  LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     RO,  RSFT,  LEFT,INT2,RGHT,  P1,  P2,  P3,  PENT,
 | 
				
			||||||
 | 
					    RGUI,LGUI,  LCTL,     LALT,               SPC,                          RALT,     RCTL,       DOWN,       NO,  P0,  PDOT,NO
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					    // pseudo ANSI
 | 
				
			||||||
 | 
					    KEYMAP(
 | 
				
			||||||
 | 
					                     F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
 | 
				
			||||||
 | 
					                     F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PSCR,ESC,   ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, NO,  BSPC,  INS, HOME,PGUP,  NLCK,PSLS,PAST,PMNS,
 | 
				
			||||||
 | 
					    SLCK,INT4,  TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,     NO,    DEL, END, PGDN,  P7,  P8,  P9,  PPLS,
 | 
				
			||||||
 | 
					    PAUS,INT5,  LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     BSLS,ENT,        UP,         P4,  P5,  P6,  PCMM,
 | 
				
			||||||
 | 
					    APP, INT6,  LSFT,LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     NO,  RSFT,  LEFT,INT2,RGHT,  P1,  P2,  P3,  PENT,
 | 
				
			||||||
 | 
					    RGUI,LGUI,  LCTL,     LALT,               SPC,                          LGUI,     GRV,        DOWN,       NO,  P0,  PDOT,NO
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 101-key keymaps
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					    /* 0: default
 | 
				
			||||||
 | 
					     * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
 | 
				
			||||||
 | 
					     * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
 | 
				
			||||||
 | 
					     * `---'   `---------------' `---------------' `---------------' `-----------'
 | 
				
			||||||
 | 
					     * ,-----------------------------------------------------------. ,-----------. ,---------------.
 | 
				
			||||||
 | 
					     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa| |Ins|Hom|PgU| |NmL|  /|  *|  -|
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------| |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD| |  7|  8|  9|   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------| `-----------' |-----------|  +|
 | 
				
			||||||
 | 
					     * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |               |  4|  5|  6|   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|     ,---.     |---------------|
 | 
				
			||||||
 | 
					     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift     |     |Up |     |  1|  2|  3|   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
 | 
				
			||||||
 | 
					     * |Ctrl|    |Alt |          Space              |Alt |    |Ctrl| |Lef|Dow|Rig| |      0|  .|   |
 | 
				
			||||||
 | 
					     * `----'    `---------------------------------------'    `----' `-----------' `---------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					    KEYMAP_101(
 | 
				
			||||||
 | 
					     ESC,       F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9, F10, F11, F12,     PSCR,SLCK, BRK,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     GRV,   1,   2,   3,   4,   5,   6,   7,   8,   9,   0,MINS, EQL,BSPC,      INS,HOME,PGUP,     NLCK,PSLS,PAST,PMNS,
 | 
				
			||||||
 | 
					     TAB,   Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,LBRC,RBRC,BSLS,      DEL, END,PGDN,       P7,  P8,  P9,
 | 
				
			||||||
 | 
					    CAPS,   A,   S,   D,   F,   G,   H,   J,   K,   L,SCLN,QUOT,      ENT,                           P4,  P5,  P6,PPLS,
 | 
				
			||||||
 | 
					    LSFT,        Z,   X,   C,   V,   B,   N,   M,COMM, DOT,SLSH,     RSFT,            UP,            P1,  P2,  P3,
 | 
				
			||||||
 | 
					    LCTL,     LALT,                SPC,                    RALT,     RCTL,     LEFT,DOWN,RGHT,       P0,     PDOT,PENT
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										33
									
								
								keyboards/converter/ibm_terminal/led.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								keyboards/converter/ibm_terminal/led.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,33 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2011 Jun Wako <wakojun@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 "ps2.h"
 | 
				
			||||||
 | 
					#include "led.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void led_set(uint8_t usb_led)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uint8_t ps2_led = 0;
 | 
				
			||||||
 | 
					    if (usb_led &  (1<<USB_LED_SCROLL_LOCK))
 | 
				
			||||||
 | 
					        ps2_led |= (1<<PS2_LED_SCROLL_LOCK);
 | 
				
			||||||
 | 
					    if (usb_led &  (1<<USB_LED_NUM_LOCK))
 | 
				
			||||||
 | 
					        ps2_led |= (1<<PS2_LED_NUM_LOCK);
 | 
				
			||||||
 | 
					    if (usb_led &  (1<<USB_LED_CAPS_LOCK))
 | 
				
			||||||
 | 
					        ps2_led |= (1<<PS2_LED_CAPS_LOCK);
 | 
				
			||||||
 | 
					    ps2_host_set_led(ps2_led);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										232
									
								
								keyboards/converter/ibm_terminal/matrix.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										232
									
								
								keyboards/converter/ibm_terminal/matrix.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,232 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2011 Jun Wako <wakojun@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 "debug.h"
 | 
				
			||||||
 | 
					#include "ps2.h"
 | 
				
			||||||
 | 
					#include "matrix.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define print_matrix_row(row)  print_bin_reverse8(matrix_get_row(row))
 | 
				
			||||||
 | 
					#define print_matrix_header()  print("\nr/c 01234567\n")
 | 
				
			||||||
 | 
					#define matrix_bitpop(i)       bitpop(matrix[i])
 | 
				
			||||||
 | 
					#define ROW_SHIFTER ((uint8_t)1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void matrix_make(uint8_t code);
 | 
				
			||||||
 | 
					static void matrix_break(uint8_t code);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Matrix Array usage:
 | 
				
			||||||
 | 
					 * 'Scan Code Set 3' is assigned into 17x8 cell matrix.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *    8bit wide
 | 
				
			||||||
 | 
					 *   +---------+
 | 
				
			||||||
 | 
					 *  0|         |
 | 
				
			||||||
 | 
					 *  :|         | 0x00-0x87
 | 
				
			||||||
 | 
					 *  ;|         |
 | 
				
			||||||
 | 
					 * 17|         |
 | 
				
			||||||
 | 
					 *   +---------+
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static uint8_t matrix[MATRIX_ROWS];
 | 
				
			||||||
 | 
					#define ROW(code)      (code>>3)
 | 
				
			||||||
 | 
					#define COL(code)      (code&0x07)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    debug_enable = true;
 | 
				
			||||||
 | 
					    //debug_matrix = true;
 | 
				
			||||||
 | 
					    //debug_keyboard = true;
 | 
				
			||||||
 | 
					    //debug_mouse = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ps2_host_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)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // scan code reading states
 | 
				
			||||||
 | 
					    static enum {
 | 
				
			||||||
 | 
					        RESET,
 | 
				
			||||||
 | 
					        RESET_RESPONSE,
 | 
				
			||||||
 | 
					        KBD_ID0,
 | 
				
			||||||
 | 
					        KBD_ID1,
 | 
				
			||||||
 | 
					        CONFIG,
 | 
				
			||||||
 | 
					        READY,
 | 
				
			||||||
 | 
					        F0,
 | 
				
			||||||
 | 
					    } state = RESET;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint8_t code;
 | 
				
			||||||
 | 
					    if ((code = ps2_host_recv())) {
 | 
				
			||||||
 | 
					        debug("r"); debug_hex(code); debug(" ");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (state) {
 | 
				
			||||||
 | 
					        case RESET:
 | 
				
			||||||
 | 
					            debug("wFF ");
 | 
				
			||||||
 | 
					            if (ps2_host_send(0xFF) == 0xFA) {
 | 
				
			||||||
 | 
					                debug("[ack]\nRESET_RESPONSE: ");
 | 
				
			||||||
 | 
					                state = RESET_RESPONSE;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case RESET_RESPONSE:
 | 
				
			||||||
 | 
					            if (code == 0xAA) {
 | 
				
			||||||
 | 
					                debug("[ok]\nKBD_ID: ");
 | 
				
			||||||
 | 
					                state = KBD_ID0;
 | 
				
			||||||
 | 
					            } else if (code) {
 | 
				
			||||||
 | 
					                debug("err\nRESET: ");
 | 
				
			||||||
 | 
					                state = RESET;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        // after reset receive keyboad ID(2 bytes)
 | 
				
			||||||
 | 
					        case KBD_ID0:
 | 
				
			||||||
 | 
					            if (code) {
 | 
				
			||||||
 | 
					                state = KBD_ID1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case KBD_ID1:
 | 
				
			||||||
 | 
					            if (code) {
 | 
				
			||||||
 | 
					                debug("\nCONFIG: ");
 | 
				
			||||||
 | 
					                state = CONFIG;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case CONFIG:
 | 
				
			||||||
 | 
					            debug("wF8 ");
 | 
				
			||||||
 | 
					            if (ps2_host_send(0xF8) == 0xFA) {
 | 
				
			||||||
 | 
					                debug("[ack]\nREADY\n");
 | 
				
			||||||
 | 
					                state = READY;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case READY:
 | 
				
			||||||
 | 
					            switch (code) {
 | 
				
			||||||
 | 
					                case 0x00:
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case 0xF0:
 | 
				
			||||||
 | 
					                    state = F0;
 | 
				
			||||||
 | 
					                    debug(" ");
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                default:    // normal key make
 | 
				
			||||||
 | 
					                    if (code < 0x88) {
 | 
				
			||||||
 | 
					                        matrix_make(code);
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        debug("unexpected scan code at READY: "); debug_hex(code); debug("\n");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    state = READY;
 | 
				
			||||||
 | 
					                    debug("\n");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case F0:    // Break code
 | 
				
			||||||
 | 
					            switch (code) {
 | 
				
			||||||
 | 
					                case 0x00:
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    if (code < 0x88) {
 | 
				
			||||||
 | 
					                        matrix_break(code);
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        debug("unexpected scan code at F0: "); debug_hex(code); debug("\n");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    state = READY;
 | 
				
			||||||
 | 
					                    debug("\n");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline
 | 
				
			||||||
 | 
					uint8_t matrix_get_row(uint8_t row)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return matrix[row];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline
 | 
				
			||||||
 | 
					static void matrix_make(uint8_t code)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (!matrix_is_on(ROW(code), COL(code))) {
 | 
				
			||||||
 | 
					        matrix[ROW(code)] |= 1<<COL(code);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline
 | 
				
			||||||
 | 
					static void matrix_break(uint8_t code)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (matrix_is_on(ROW(code), COL(code))) {
 | 
				
			||||||
 | 
					        matrix[ROW(code)] &= ~(1<<COL(code));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool matrix_is_on(uint8_t row, uint8_t col)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return (matrix_get_row(row) & (1<<col));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_print(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#if (MATRIX_COLS <= 8)
 | 
				
			||||||
 | 
					    print("r/c 01234567\n");
 | 
				
			||||||
 | 
					#elif (MATRIX_COLS <= 16)
 | 
				
			||||||
 | 
					    print("r/c 0123456789ABCDEF\n");
 | 
				
			||||||
 | 
					#elif (MATRIX_COLS <= 32)
 | 
				
			||||||
 | 
					    print("r/c 0123456789ABCDEF0123456789ABCDEF\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (MATRIX_COLS <= 8)
 | 
				
			||||||
 | 
					        xprintf("%02X: %08b%s\n", row, bitrev(matrix_get_row(row)),
 | 
				
			||||||
 | 
					#elif (MATRIX_COLS <= 16)
 | 
				
			||||||
 | 
					        xprintf("%02X: %016b%s\n", row, bitrev16(matrix_get_row(row)),
 | 
				
			||||||
 | 
					#elif (MATRIX_COLS <= 32)
 | 
				
			||||||
 | 
					        xprintf("%02X: %032b%s\n", row, bitrev32(matrix_get_row(row)),
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef MATRIX_HAS_GHOST
 | 
				
			||||||
 | 
					        matrix_has_ghost_in_row(row) ?  " <ghost" : ""
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef MATRIX_HAS_GHOST
 | 
				
			||||||
 | 
					__attribute__ ((weak))
 | 
				
			||||||
 | 
					bool matrix_has_ghost_in_row(uint8_t row)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    matrix_row_t matrix_row = matrix_get_row(row);
 | 
				
			||||||
 | 
					    // No ghost exists when less than 2 keys are down on the row
 | 
				
			||||||
 | 
					    if (((matrix_row - 1) & matrix_row) == 0)
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Ghost occurs when the row shares column line with other row
 | 
				
			||||||
 | 
					    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
 | 
				
			||||||
 | 
					        if (i != row && (matrix_get_row(i) & matrix_row))
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										72
									
								
								keyboards/converter/ibm_terminal/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								keyboards/converter/ibm_terminal/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,72 @@
 | 
				
			||||||
 | 
					# MCU name
 | 
				
			||||||
 | 
					MCU = atmega32u4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Processor frequency.
 | 
				
			||||||
 | 
					#     This will define a symbol, F_CPU, in all source code files equal to the
 | 
				
			||||||
 | 
					#     processor frequency in Hz. You can then use this symbol in your source code to
 | 
				
			||||||
 | 
					#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
 | 
				
			||||||
 | 
					#     automatically to create a 32-bit value in your source code.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     This will be an integer division of F_USB below, as it is sourced by
 | 
				
			||||||
 | 
					#     F_USB after it has run through any CPU prescalers. Note that this value
 | 
				
			||||||
 | 
					#     does not *change* the processor frequency - it should merely be updated to
 | 
				
			||||||
 | 
					#     reflect the processor speed set externally so that the code can use accurate
 | 
				
			||||||
 | 
					#     software delays.
 | 
				
			||||||
 | 
					F_CPU = 16000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# LUFA specific
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Target architecture (see library "Board Types" documentation).
 | 
				
			||||||
 | 
					ARCH = AVR8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Input clock frequency.
 | 
				
			||||||
 | 
					#     This will define a symbol, F_USB, in all source code files equal to the
 | 
				
			||||||
 | 
					#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
				
			||||||
 | 
					#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
				
			||||||
 | 
					#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
				
			||||||
 | 
					#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
 | 
				
			||||||
 | 
					#     at the end, this will be done automatically to create a 32-bit value in your
 | 
				
			||||||
 | 
					#     source code.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     If no clock division is performed on the input clock inside the AVR (via the
 | 
				
			||||||
 | 
					#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
 | 
				
			||||||
 | 
					F_USB = $(F_CPU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Interrupt driven control endpoint task(+60)
 | 
				
			||||||
 | 
					OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Boot Section Size in *bytes*
 | 
				
			||||||
 | 
					#   Teensy halfKay   512
 | 
				
			||||||
 | 
					#   Teensy++ halfKay 1024
 | 
				
			||||||
 | 
					#   Atmel DFU loader 4096
 | 
				
			||||||
 | 
					#   LUFA bootloader  4096
 | 
				
			||||||
 | 
					#   USBaspLoader     2048
 | 
				
			||||||
 | 
					OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Options
 | 
				
			||||||
 | 
					#   change to "no" to disable the options, or define them in the Makefile in 
 | 
				
			||||||
 | 
					#   the appropriate keymap folder that will get included automatically
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
 | 
				
			||||||
 | 
					MOUSEKEY_ENABLE ?= yes        # Mouse keys(+4700)
 | 
				
			||||||
 | 
					EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
 | 
				
			||||||
 | 
					CONSOLE_ENABLE ?= no         # Console for debug(+400)
 | 
				
			||||||
 | 
					COMMAND_ENABLE ?= no         # Commands for debug and configuration
 | 
				
			||||||
 | 
					NKRO_ENABLE ?= yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
 | 
					BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality
 | 
				
			||||||
 | 
					MIDI_ENABLE ?= no            # MIDI controls
 | 
				
			||||||
 | 
					AUDIO_ENABLE ?= no           # Audio output on port C6
 | 
				
			||||||
 | 
					UNICODE_ENABLE ?= no         # Unicode
 | 
				
			||||||
 | 
					UNICODEMAP_ENABLE ?= yes
 | 
				
			||||||
 | 
					BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
				
			||||||
 | 
					RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
 | 
				
			||||||
 | 
					PS2_USE_USART ?= yes
 | 
				
			||||||
 | 
					API_SYSEX_ENABLE ?= n
 | 
				
			||||||
 | 
					CUSTOM_MATRIX = yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
 | 
					SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SRC = matrix.c led.c
 | 
				
			||||||
							
								
								
									
										0
									
								
								keyboards/converter/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								keyboards/converter/rules.mk
									
										
									
									
									
										Normal file
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue