From: tmk Date: Thu, 14 Sep 2017 03:59:54 +0000 (+0900) Subject: onekey: Fix for V-USB of ATtiny85 and key scan X-Git-Url: https://git.gir.st/tmk_keyboard.git/commitdiff_plain/4dc2fb5b312e37f26670011708653296df100d8c onekey: Fix for V-USB of ATtiny85 and key scan --- diff --git a/keyboard/onekey/Makefile b/keyboard/onekey/Makefile index 26c9a637..bc89fffb 100644 --- a/keyboard/onekey/Makefile +++ b/keyboard/onekey/Makefile @@ -49,7 +49,7 @@ TARGET_DIR = . # project specific files SRC = keymap.c \ - matrix.c \ + onekey.c \ led.c CONFIG_H = config.h diff --git a/keyboard/onekey/Makefile.pjrc b/keyboard/onekey/Makefile.pjrc index ebf0710f..1266d7fa 100644 --- a/keyboard/onekey/Makefile.pjrc +++ b/keyboard/onekey/Makefile.pjrc @@ -49,7 +49,7 @@ TARGET_DIR = . # project specific files SRC = keymap.c \ - matrix.c \ + onekey.c \ led.c CONFIG_H = config.h diff --git a/keyboard/onekey/Makefile.vusb b/keyboard/onekey/Makefile.vusb index fb1fbdfe..1af3ebbd 100644 --- a/keyboard/onekey/Makefile.vusb +++ b/keyboard/onekey/Makefile.vusb @@ -9,7 +9,7 @@ TARGET_DIR = . # keyboard dependent files SRC = keymap.c \ - matrix.c \ + onekey.c \ led.c CONFIG_H = config.h @@ -18,7 +18,8 @@ CONFIG_H = config.h # MCU name, you MUST set this to match the board you are using # type "make clean" after changing this, so all files will be rebuilt #MCU = atmega168p -MCU = atmega328p +#MCU = atmega328p +MCU = attiny85 # Processor frequency. @@ -35,6 +36,11 @@ F_CPU = 12000000 #MOUSEKEY_ENABLE = yes # Mouse keys #EXTRAKEY_ENABLE = yes # Audio control and System control #NKRO_ENABLE = yes # USB Nkey Rollover +NO_UART = yes # No UART debug(V-USB) + +OPT_DEFS += -DNO_ACTION_TAPPING +OPT_DEFS += -DNO_ACTION_LAYER +OPT_DEFS += -DNO_ACTION_MACRO diff --git a/keyboard/onekey/README.md b/keyboard/onekey/README.md index 7413f388..4d8f0305 100644 --- a/keyboard/onekey/README.md +++ b/keyboard/onekey/README.md @@ -1,5 +1,5 @@ Onekey ====== -Just one key keyboard for example. It sends 'a' key if pins PB0 and PB1 are short-circuited. +Just one key keyboard for example. It sends 'a' key if pins PB0 and GND are short-circuited. https://github.com/tmk/tmk_keyboard/issues/56 diff --git a/keyboard/onekey/matrix.c b/keyboard/onekey/matrix.c deleted file mode 100644 index d78e47ec..00000000 --- a/keyboard/onekey/matrix.c +++ /dev/null @@ -1,133 +0,0 @@ -/* -Copyright 2012 Jun Wako - -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 . -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" - - -#ifndef DEBOUNCE -# define DEBOUNCE 5 -#endif -static uint8_t debouncing = DEBOUNCE; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -static matrix_row_t read_cols(void); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - - -void matrix_init(void) -{ - debug_enable = true; - debug_matrix = true; - debug_mouse = true; - // initialize row and col - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } -} - -uint8_t matrix_scan(void) -{ - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - _delay_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCE; - } - unselect_rows(); - } - - if (debouncing) { - if (--debouncing) { - _delay_ms(1); - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } - } - - return 1; -} - -inline -matrix_row_t matrix_get_row(uint8_t row) -{ - return matrix[row]; -} - -/* Column pin configuration - * col: 0 - * pin: B0 - */ -static void init_cols(void) -{ - // Input with pull-up(DDR:0, PORT:1) - DDRB &= ~(1<<0); - PORTB |= (1<<0); -} - -static matrix_row_t read_cols(void) -{ - return (PINB&(1<<0) ? 0 : (1<<0)); -} - -/* Row pin configuration - * row: 0 - * pin: B1 - */ -static void unselect_rows(void) -{ - // Hi-Z(DDR:0, PORT:0) to unselect - DDRB &= ~0b00000010; - PORTB &= ~0b00000010; -} - -static void select_row(uint8_t row) -{ - // Output low(DDR:1, PORT:0) to select - switch (row) { - case 0: - DDRB |= (1<<1); - PORTB &= ~(1<<1); - break; - } -} diff --git a/keyboard/onekey/onekey.c b/keyboard/onekey/onekey.c new file mode 100644 index 00000000..1595c76c --- /dev/null +++ b/keyboard/onekey/onekey.c @@ -0,0 +1,70 @@ +/* +Copyright 2017 Jun Wako + +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 . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include "debug.h" +#include "timer.h" +#include "matrix.h" + + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif +/* matrix state(1:on, 0:off) */ +static matrix_row_t row_debounced = 0; +static matrix_row_t row_debouncing = 0; +static bool debouncing = false; +static uint16_t debouncing_time = 0; + + +void matrix_init(void) +{ + debug_enable = true; + debug_matrix = true; + debug_mouse = true; + + // PB0: Input with pull-up(DDR:0, PORT:1) + DDRB &= ~(1<<0); + PORTB |= (1<<0); +} + +uint8_t matrix_scan(void) +{ + matrix_row_t r = (PINB&(1<<0) ? 0 : 1); + if (row_debouncing != r) { + row_debouncing = r; + debouncing = true; + debouncing_time = timer_read(); + } + + if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { + row_debounced = row_debouncing; + debouncing = false; + } + return 1; +} + +inline +matrix_row_t matrix_get_row(uint8_t row) +{ + return row_debounced; +} diff --git a/keyboard/onekey/usbconfig.h b/keyboard/onekey/usbconfig.h index d0ca4c71..e9b4f982 100644 --- a/keyboard/onekey/usbconfig.h +++ b/keyboard/onekey/usbconfig.h @@ -24,11 +24,11 @@ section at the end of this file). /* ---------------------------- Hardware Config ---------------------------- */ -#define USB_CFG_IOPORTNAME D +#define USB_CFG_IOPORTNAME B /* This is the port where the USB bus is connected. When you configure it to * "B", the registers PORTB, PINB and DDRB will be used. */ -#define USB_CFG_DMINUS_BIT 3 +#define USB_CFG_DMINUS_BIT 1 /* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. * This may be any bit in the port. */