From d0ac03ec8b2af7334ac657dadcf0601d6f3469c0 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Sun, 12 Sep 2021 11:46:39 +1000 Subject: [PATCH] Remove unreferenced IBM4704, Sony NEWS, NeXT keyboard code. (#14380) --- tmk_core/protocol/ibm4704.c | 185 ----------------------------- tmk_core/protocol/ibm4704.h | 103 ---------------- tmk_core/protocol/news.c | 161 ------------------------- tmk_core/protocol/news.h | 48 -------- tmk_core/protocol/next_kbd.c | 219 ----------------------------------- tmk_core/protocol/next_kbd.h | 60 ---------- 6 files changed, 776 deletions(-) delete mode 100644 tmk_core/protocol/ibm4704.c delete mode 100644 tmk_core/protocol/ibm4704.h delete mode 100644 tmk_core/protocol/news.c delete mode 100644 tmk_core/protocol/news.h delete mode 100644 tmk_core/protocol/next_kbd.c delete mode 100644 tmk_core/protocol/next_kbd.h diff --git a/tmk_core/protocol/ibm4704.c b/tmk_core/protocol/ibm4704.c deleted file mode 100644 index a19443976e..0000000000 --- a/tmk_core/protocol/ibm4704.c +++ /dev/null @@ -1,185 +0,0 @@ -/* -Copyright 2010,2011,2012,2013 Jun WAKO -*/ -#include -#include -#include "debug.h" -#include "ring_buffer.h" -#include "ibm4704.h" - -#define WAIT(stat, us, err) \ - do { \ - if (!wait_##stat(us)) { \ - ibm4704_error = err; \ - goto ERROR; \ - } \ - } while (0) - -uint8_t ibm4704_error = 0; - -void ibm4704_init(void) { - inhibit(); // keep keyboard from sending - IBM4704_INT_INIT(); - IBM4704_INT_ON(); - idle(); // allow keyboard sending -} - -/* -Host to Keyboard ----------------- -Data bits are LSB first and Parity is odd. Clock has around 60us high and 30us low part. - - ____ __ __ __ __ __ __ __ __ __ ________ -Clock \______/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ - ^ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___ -Data ____|__/ X____X____X____X____X____X____X____X____X____X \___ - | Start 0 1 2 3 4 5 6 7 P Stop - Request by host - -Start bit: can be long as 300-350us. -Request: Host pulls Clock line down to request to send a command. -Timing: After Request keyboard pull up Data and down Clock line to low for start bit. - After request host release Clock line once Data line becomes hi. - Host writes a bit while Clock is hi and Keyboard reads while low. -Stop bit: Host releases or pulls up Data line to hi after 9th clock and waits for keyboard pull down the line to lo. -*/ -uint8_t ibm4704_send(uint8_t data) { - bool parity = true; // odd parity - ibm4704_error = 0; - - IBM4704_INT_OFF(); - - /* Request to send */ - idle(); - clock_lo(); - - /* wait for Start bit(Clock:lo/Data:hi) */ - WAIT(data_hi, 300, 0x30); - - /* Data bit */ - for (uint8_t i = 0; i < 8; i++) { - WAIT(clock_hi, 100, 0x40 + i); - if (data & (1 << i)) { - parity = !parity; - data_hi(); - } else { - data_lo(); - } - WAIT(clock_lo, 100, 0x48 + i); - } - - /* Parity bit */ - WAIT(clock_hi, 100, 0x34); - if (parity) { - data_hi(); - } else { - data_lo(); - } - WAIT(clock_lo, 100, 0x35); - - /* Stop bit */ - WAIT(clock_hi, 100, 0x34); - data_hi(); - - /* End */ - WAIT(data_lo, 100, 0x36); - - idle(); - IBM4704_INT_ON(); - return 0; -ERROR: - idle(); - if (ibm4704_error > 0x30) { - xprintf("S:%02X ", ibm4704_error); - } - IBM4704_INT_ON(); - return -1; -} - -/* wait forever to receive data */ -uint8_t ibm4704_recv_response(void) { - while (!rbuf_has_data()) { - _delay_ms(1); - } - return rbuf_dequeue(); -} - -uint8_t ibm4704_recv(void) { - if (rbuf_has_data()) { - return rbuf_dequeue(); - } else { - return -1; - } -} - -/* -Keyboard to Host ----------------- -Data bits are LSB first and Parity is odd. Clock has around 60us high and 30us low part. - - ____ __ __ __ __ __ __ __ __ __ _______ -Clock \_____/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ - ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ -Data ____/ X____X____X____X____X____X____X____X____X____X________ - Start 0 1 2 3 4 5 6 7 P Stop - -Start bit: can be long as 300-350us. -Inhibit: Pull Data line down to inhibit keyboard to send. -Timing: Host reads bit while Clock is hi.(rising edge) -Stop bit: Keyboard pulls down Data line to lo after 9th clock. -*/ -ISR(IBM4704_INT_VECT) { - static enum { BIT0, BIT1, BIT2, BIT3, BIT4, BIT5, BIT6, BIT7, PARITY, STOP } state = BIT0; - // LSB first - static uint8_t data = 0; - // Odd parity - static uint8_t parity = false; - - ibm4704_error = 0; - - switch (state) { - case BIT0: - case BIT1: - case BIT2: - case BIT3: - case BIT4: - case BIT5: - case BIT6: - case BIT7: - data >>= 1; - if (data_in()) { - data |= 0x80; - parity = !parity; - } - break; - case PARITY: - if (data_in()) { - parity = !parity; - } - if (!parity) goto ERROR; - break; - case STOP: - // Data:Low - WAIT(data_lo, 100, state); - if (!rbuf_enqueue(data)) { - print("rbuf: full\n"); - } - ibm4704_error = IBM4704_ERR_NONE; - goto DONE; - break; - default: - goto ERROR; - } - state++; - goto RETURN; -ERROR: - ibm4704_error = state; - while (ibm4704_send(0xFE)) _delay_ms(1); // resend - xprintf("R:%02X%02X\n", state, data); -DONE: - state = BIT0; - data = 0; - parity = false; -RETURN: - return; -} diff --git a/tmk_core/protocol/ibm4704.h b/tmk_core/protocol/ibm4704.h deleted file mode 100644 index 4f88d148b3..0000000000 --- a/tmk_core/protocol/ibm4704.h +++ /dev/null @@ -1,103 +0,0 @@ -/* -Copyright 2014 Jun WAKO -*/ - -#pragma once - -#define IBM4704_ERR_NONE 0 -#define IBM4704_ERR_PARITY 0x70 - -void ibm4704_init(void); -uint8_t ibm4704_send(uint8_t data); -uint8_t ibm4704_recv_response(void); -uint8_t ibm4704_recv(void); - -/* Check pin configuration */ -#if !(defined(IBM4704_CLOCK_PORT) && defined(IBM4704_CLOCK_PIN) && defined(IBM4704_CLOCK_DDR) && defined(IBM4704_CLOCK_BIT)) -# error "ibm4704 clock pin configuration is required in config.h" -#endif - -#if !(defined(IBM4704_DATA_PORT) && defined(IBM4704_DATA_PIN) && defined(IBM4704_DATA_DDR) && defined(IBM4704_DATA_BIT)) -# error "ibm4704 data pin configuration is required in config.h" -#endif - -/*-------------------------------------------------------------------- - * static functions - *------------------------------------------------------------------*/ -static inline void clock_lo(void) { - IBM4704_CLOCK_PORT &= ~(1 << IBM4704_CLOCK_BIT); - IBM4704_CLOCK_DDR |= (1 << IBM4704_CLOCK_BIT); -} -static inline void clock_hi(void) { - /* input with pull up */ - IBM4704_CLOCK_DDR &= ~(1 << IBM4704_CLOCK_BIT); - IBM4704_CLOCK_PORT |= (1 << IBM4704_CLOCK_BIT); -} -static inline bool clock_in(void) { - IBM4704_CLOCK_DDR &= ~(1 << IBM4704_CLOCK_BIT); - IBM4704_CLOCK_PORT |= (1 << IBM4704_CLOCK_BIT); - _delay_us(1); - return IBM4704_CLOCK_PIN & (1 << IBM4704_CLOCK_BIT); -} -static inline void data_lo(void) { - IBM4704_DATA_PORT &= ~(1 << IBM4704_DATA_BIT); - IBM4704_DATA_DDR |= (1 << IBM4704_DATA_BIT); -} -static inline void data_hi(void) { - /* input with pull up */ - IBM4704_DATA_DDR &= ~(1 << IBM4704_DATA_BIT); - IBM4704_DATA_PORT |= (1 << IBM4704_DATA_BIT); -} -static inline bool data_in(void) { - IBM4704_DATA_DDR &= ~(1 << IBM4704_DATA_BIT); - IBM4704_DATA_PORT |= (1 << IBM4704_DATA_BIT); - _delay_us(1); - return IBM4704_DATA_PIN & (1 << IBM4704_DATA_BIT); -} - -static inline uint16_t wait_clock_lo(uint16_t us) { - while (clock_in() && us) { - asm(""); - _delay_us(1); - us--; - } - return us; -} -static inline uint16_t wait_clock_hi(uint16_t us) { - while (!clock_in() && us) { - asm(""); - _delay_us(1); - us--; - } - return us; -} -static inline uint16_t wait_data_lo(uint16_t us) { - while (data_in() && us) { - asm(""); - _delay_us(1); - us--; - } - return us; -} -static inline uint16_t wait_data_hi(uint16_t us) { - while (!data_in() && us) { - asm(""); - _delay_us(1); - us--; - } - return us; -} - -/* idle state that device can send */ -static inline void idle(void) { - clock_hi(); - data_hi(); -} - -/* inhibit device to send - * keyboard checks Data line on start bit(Data:hi) and it stops sending if Data line is low. - */ -static inline void inhibit(void) { - clock_hi(); - data_lo(); -} diff --git a/tmk_core/protocol/news.c b/tmk_core/protocol/news.c deleted file mode 100644 index 4463e8dd42..0000000000 --- a/tmk_core/protocol/news.c +++ /dev/null @@ -1,161 +0,0 @@ -/* -Copyright 2012 Jun WAKO - -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 -#include -#include -#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| - `-------------------------------------------------------------' `---' `---------------' -*/ diff --git a/tmk_core/protocol/news.h b/tmk_core/protocol/news.h deleted file mode 100644 index 327a13856d..0000000000 --- a/tmk_core/protocol/news.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2012 Jun WAKO - -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. -*/ - -#pragma once - -/* - * Primitive PS/2 Library for AVR - */ - -/* host role */ -void news_init(void); -uint8_t news_recv(void); - -/* device role */ diff --git a/tmk_core/protocol/next_kbd.c b/tmk_core/protocol/next_kbd.c deleted file mode 100644 index 6f118e6172..0000000000 --- a/tmk_core/protocol/next_kbd.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - -NeXT non-ADB Keyboard Protocol - -Copyright 2013, Benjamin Gould (bgould@github.com) - -Based on: -TMK firmware code Copyright 2011,2012 Jun WAKO -Arduino code by "Ladyada" Limor Fried (http://ladyada.net/, http://adafruit.com/), released under BSD license - -Timing reference thanks to http://m0115.web.fc2.com/ (dead link), http://cfile7.uf.tistory.com/image/14448E464F410BF22380BB -Pinouts thanks to http://www.68k.org/~degs/nextkeyboard.html -Keycodes from http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-6/src/sys/arch/next68k/dev/ - -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 -#include -#include -#include -#include "next_kbd.h" -#include "debug.h" - -static inline void out_lo(void); -static inline void out_hi(void); -static inline void query(void); -static inline void reset(void); -static inline uint32_t response(void); - -/* The keyboard sends signal with 50us pulse width on OUT line - * while it seems to miss the 50us pulse on In line. - * next_kbd_set_leds() often fails to sync LED status with 50us - * but it works well with 51us(+1us) on TMK converter(ATMeaga32u2) at least. - * TODO: test on Teensy and Pro Micro configuration - */ -#define out_hi_delay(intervals) \ - do { \ - out_hi(); \ - _delay_us((NEXT_KBD_TIMING + 1) * intervals); \ - } while (0); -#define out_lo_delay(intervals) \ - do { \ - out_lo(); \ - _delay_us((NEXT_KBD_TIMING + 1) * intervals); \ - } while (0); -#define query_delay(intervals) \ - do { \ - query(); \ - _delay_us((NEXT_KBD_TIMING + 1) * intervals); \ - } while (0); -#define reset_delay(intervals) \ - do { \ - reset(); \ - _delay_us((NEXT_KBD_TIMING + 1) * intervals); \ - } while (0); - -void next_kbd_init(void) { - out_hi(); - NEXT_KBD_IN_DDR &= ~(1 << NEXT_KBD_IN_BIT); // KBD_IN to input - NEXT_KBD_IN_PORT |= (1 << NEXT_KBD_IN_BIT); // KBD_IN pull up - - query_delay(5); - reset_delay(8); - - query_delay(5); - reset_delay(8); -} - -void next_kbd_set_leds(bool left, bool right) { - cli(); - out_lo_delay(9); - - out_hi_delay(3); - out_lo_delay(1); - - if (left) { - out_hi_delay(1); - } else { - out_lo_delay(1); - } - - if (right) { - out_hi_delay(1); - } else { - out_lo_delay(1); - } - - out_lo_delay(7); - out_hi(); - sei(); -} - -#define NEXT_KBD_READ (NEXT_KBD_IN_PIN & (1 << NEXT_KBD_IN_BIT)) -uint32_t next_kbd_recv(void) { - // First check to make sure that the keyboard is actually connected; - // if not, just return - // TODO: reflect the status of the keyboard in a return code - if (!NEXT_KBD_READ) { - sei(); - return 0; - } - - query(); - uint32_t resp = response(); - - return resp; -} - -static inline uint32_t response(void) { - cli(); - - // try a 5ms read; this should be called after the query method has - // been run so if a key is pressed we should get a response within - // 5ms; if not then send a reset and exit - uint8_t i = 0; - uint32_t data = 0; - uint16_t reset_timeout = 50000; - while (NEXT_KBD_READ && reset_timeout) { - asm(""); - _delay_us(1); - reset_timeout--; - } - if (!reset_timeout) { - reset(); - sei(); - return 0; - } - _delay_us(NEXT_KBD_TIMING / 2); - for (; i < 22; i++) { - if (NEXT_KBD_READ) { - data |= ((uint32_t)1 << i); - /* Note: - * My testing with the ATmega32u4 showed that there might - * something wrong with the timing here; by the end of the - * second data byte some of the modifiers can get bumped out - * to the next bit over if we just cycle through the data - * based on the expected interval. There is a bit (i = 10) - * in the middle of the data that is always on followed by - * one that is always off - so we'll use that to reset our - * timing in case we've gotten ahead of the keyboard; - */ - if (i == 10) { - i++; - while (NEXT_KBD_READ) - ; - _delay_us(NEXT_KBD_TIMING / 2); - } - } else { - /* redundant - but I don't want to remove if it might screw - * up the timing - */ - data |= ((uint32_t)0 << i); - } - _delay_us(NEXT_KBD_TIMING); - } - - sei(); - - return data; -} - -static inline void out_lo(void) { - NEXT_KBD_OUT_PORT &= ~(1 << NEXT_KBD_OUT_BIT); - NEXT_KBD_OUT_DDR |= (1 << NEXT_KBD_OUT_BIT); -} - -static inline void out_hi(void) { - /* input with pull up */ - NEXT_KBD_OUT_DDR &= ~(1 << NEXT_KBD_OUT_BIT); - NEXT_KBD_OUT_PORT |= (1 << NEXT_KBD_OUT_BIT); -} - -static inline void query(void) { - out_lo_delay(5); - out_hi_delay(1); - out_lo_delay(3); - out_hi(); -} - -static inline void reset(void) { - out_lo_delay(1); - out_hi_delay(4); - out_lo_delay(1); - out_hi_delay(6); - out_lo_delay(10); - out_hi(); -} diff --git a/tmk_core/protocol/next_kbd.h b/tmk_core/protocol/next_kbd.h deleted file mode 100644 index 1249ebf392..0000000000 --- a/tmk_core/protocol/next_kbd.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -NeXT non-ADB Keyboard Protocol - -Copyright 2013, Benjamin Gould (bgould@github.com) - -Based on: -TMK firmware code Copyright 2011,2012 Jun WAKO -Arduino code by "Ladyada" Limor Fried (http://ladyada.net/, http://adafruit.com/), released under BSD license - -Timing reference thanks to http://m0115.web.fc2.com/ (dead link), http://cfile7.uf.tistory.com/image/14448E464F410BF22380BB -Pinouts thanks to http://www.68k.org/~degs/nextkeyboard.html -Keycodes from http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-6/src/sys/arch/next68k/dev/ - -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. - -*/ - -#pragma once - -#include - -#define NEXT_KBD_KMBUS_IDLE 0x300600 -#define NEXT_KBD_TIMING 50 - -extern uint8_t next_kbd_error; - -/* host role */ -void next_kbd_init(void); -void next_kbd_set_leds(bool left, bool right); -uint32_t next_kbd_recv(void);