Procházet zdrojové kódy

[Keyboard] Panc60 Refactor (#5559)

* remove unneeded uart setting

* use pragma once everywhere

* remove custom matrix support

* fixup readme

* set bootmagic to lite

* remove dependency on custom i2c code

* use the right header files and function calls
MechMerlin před 6 roky
rodič
revize
5c1ef2bddc

+ 0 - 2
keyboards/panc60/config.h

@@ -39,5 +39,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define NO_BACKLIGHT_CLOCK
 #define NO_BACKLIGHT_CLOCK
 #define BACKLIGHT_LEVELS 1
 #define BACKLIGHT_LEVELS 1
 #define RGBLIGHT_ANIMATIONS
 #define RGBLIGHT_ANIMATIONS
-
-#define NO_UART 1

+ 0 - 106
keyboards/panc60/i2c.c

@@ -1,106 +0,0 @@
-/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
-    uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
-    if (bitrate_div >= 16) {
-        bitrate_div = (bitrate_div - 16) / 2;
-    }
-    TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
-    // set pull-up resistors on I2C bus pins
-    PORTC |= 0b11;
-
-    i2c_set_bitrate(400);
-
-    // enable TWI (two-wire interface)
-    TWCR |= (1 << TWEN);
-
-    // enable TWI interrupt and slave address ACK
-    TWCR |= (1 << TWIE);
-    TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
-    // reset TWI control register
-    TWCR = 0;
-
-    // begin transmission and wait for it to end
-    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
-    while (!(TWCR & (1<<TWINT)));
-
-    // check if the start condition was successfully transmitted
-    if ((TWSR & 0xF8) != TW_START) {
-        return 1;
-    }
-
-    // transmit address and wait
-    TWDR = address;
-    TWCR = (1<<TWINT) | (1<<TWEN);
-    while (!(TWCR & (1<<TWINT)));
-
-    // check if the device has acknowledged the READ / WRITE mode
-    uint8_t twst = TW_STATUS & 0xF8;
-    if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
-        return 1;
-    }
-
-    return 0;
-}
-
-void i2c_stop(void) {
-    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
-    TWDR = data;
-
-    // transmit data and wait
-    TWCR = (1<<TWINT) | (1<<TWEN);
-    while (!(TWCR & (1<<TWINT)));
-
-    if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
-        return 1;
-    }
-
-    return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
-    if (i2c_start(address)) {
-        return 1;
-    }
-
-    for (uint16_t i = 0; i < length; i++) {
-        if (i2c_write(data[i])) {
-            return 1;
-        }
-    }
-
-    i2c_stop();
-
-    return 0;
-}

+ 0 - 27
keyboards/panc60/i2c.h

@@ -1,27 +0,0 @@
-/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@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/>.
-*/
-
-// Please do not modify this file
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif

+ 0 - 145
keyboards/panc60/matrix.c

@@ -1,145 +0,0 @@
-/*
-Copyright 2018 Jack Humbert <jack.humb@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 <avr/io.h>
-#include <util/delay.h>
-#include <string.h>
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-#   define DEBOUNCE	5
-#endif
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
-  matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
-  matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) { }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) { }
-
-// #define MATRIX_ROW_PINS { B3, B4, B5, B6, B7 }
-// #define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
-
-    // disables JTAG so we can use them as columns
-    MCUCSR = (1<<JTD);
-    MCUCSR = (1<<JTD);
-
-    // rows (output)
-    DDRB |= ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
-    PORTB |= ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
-
-    // cols (input)
-    DDRA &= ~((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
-    DDRC &= ~((1 << 7) | (1 << 6) | (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2));
-    DDRD &= ~((1 << 7));
-
-    // pull-up cols
-    PORTA |= ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
-    PORTC |= ((1 << 7) | (1 << 6) | (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2));
-    PORTD |= ((1 << 7));
-
-    // initialize matrix state: all keys off
-    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-        matrix[row] = 0x00;
-        matrix_debouncing[row] = 0x00;
-    }
-
-    matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
-
-    // actual matrix scan
-    for (uint8_t c = 0; c < MATRIX_ROWS; c++) {
-        switch (c) {
-          case 0:  PORTB &= ~(1 << 3); break;
-          case 1:  PORTB &= ~(1 << 4); break;
-          case 2:  PORTB &= ~(1 << 5); break;
-          case 3:  PORTB &= ~(1 << 6); break;
-          case 4:  PORTB &= ~(1 << 7); break;
-        }
-        _delay_us(5);
-
-        matrix_row_t current_row = (
-          (((PINA & (1 << 0)) ? 0 : 1 ) << 0)  |
-          (((PINA & (1 << 1)) ? 0 : 1 ) << 1)  |
-          (((PINA & (1 << 2)) ? 0 : 1 ) << 2)  |
-          (((PINA & (1 << 3)) ? 0 : 1 ) << 3)  |
-          (((PINA & (1 << 4)) ? 0 : 1 ) << 4)  |
-          (((PINA & (1 << 5)) ? 0 : 1 ) << 5)  |
-          (((PINA & (1 << 6)) ? 0 : 1 ) << 6)  |
-          (((PINA & (1 << 7)) ? 0 : 1 ) << 7)  |
-          (((PINC & (1 << 7)) ? 0 : 1 ) << 8)  |
-          (((PINC & (1 << 6)) ? 0 : 1 ) << 9)  |
-          (((PINC & (1 << 5)) ? 0 : 1 ) << 10) |
-          (((PINC & (1 << 4)) ? 0 : 1 ) << 11) |
-          (((PINC & (1 << 3)) ? 0 : 1 ) << 12) |
-          (((PINC & (1 << 2)) ? 0 : 1 ) << 13) |
-          (((PIND & (1 << 7)) ? 0 : 1 ) << 14)
-        );
-
-        switch (c) {
-          case 0:  PORTB |= (1 << 3); break;
-          case 1:  PORTB |= (1 << 4); break;
-          case 2:  PORTB |= (1 << 5); break;
-          case 3:  PORTB |= (1 << 6); break;
-          case 4:  PORTB |= (1 << 7); break;
-        }
-
-        if (matrix_debouncing[c] != current_row) {
-            matrix_debouncing[c] = current_row;
-            debouncing = DEBOUNCE;
-        }
-    }
-
-    if (debouncing) {
-        if (--debouncing) {
-            _delay_ms(1);
-        } else {
-            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-                matrix[i] = matrix_debouncing[i];
-            }
-        }
-    }
-
-    matrix_scan_quantum();
-
-    return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
-    return matrix[row];
-}
-
-void matrix_print(void) {
-}

+ 2 - 2
keyboards/panc60/panc60.c

@@ -24,7 +24,7 @@
 #include <avr/pgmspace.h>
 #include <avr/pgmspace.h>
 
 
 #include "action_layer.h"
 #include "action_layer.h"
-#include "i2c.h"
+#include "i2c_master.h"
 #include "quantum.h"
 #include "quantum.h"
 
 
 __attribute__ ((weak))
 __attribute__ ((weak))
@@ -44,7 +44,7 @@ void rgblight_set(void) {
     }
     }
 
 
     i2c_init();
     i2c_init();
-    i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
 }
 }
 #endif
 #endif
 
 

+ 1 - 4
keyboards/panc60/panc60.h

@@ -13,8 +13,7 @@
  * You should have received a copy of the GNU General Public License
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
  */
-#ifndef PANC60_H
+#pragma once
-#define PANC60_H
 
 
 #include "quantum.h"
 #include "quantum.h"
 
 
@@ -67,5 +66,3 @@
 	{ K30,   KC_NO, K32,  K33,   K34,   K35,   K36,   K37,  K38,   K39,   K3A, K3B,   KC_NO, K3D,   K3E },   \
 	{ K30,   KC_NO, K32,  K33,   K34,   K35,   K36,   K37,  K38,   K39,   K3A, K3B,   KC_NO, K3D,   K3E },   \
 	{ KC_NO, K41,   K42,  KC_NO, KC_NO, KC_NO, KC_NO, K47,  KC_NO, KC_NO, K4A, KC_NO, K4C,   KC_NO, KC_NO }  \
 	{ KC_NO, K41,   K42,  KC_NO, KC_NO, KC_NO, KC_NO, K47,  KC_NO, KC_NO, K4A, KC_NO, K4C,   KC_NO, KC_NO }  \
 }
 }
-
-#endif

+ 5 - 3
keyboards/panc60/readme.md

@@ -14,6 +14,8 @@ Make example for this keyboard (after setting up your build environment):
 
 
 Flashing
 Flashing
 
 
+**Reset Key:** Hold down the key located at `K40`, commonly programmed as left control while plugging in the keyboard. You may also hold down the key located at `K00`, commonly programmed as the `Esc` key. 
+
 ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods. 
 ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods. 
 
 
 To put the panc60 into reset, hold left control while plugging in. 
 To put the panc60 into reset, hold left control while plugging in. 
@@ -36,9 +38,9 @@ macOS:
     ```
     ```
 3. Install the following packages:
 3. Install the following packages:
     ```
     ```
-    brew install python
+    brew install python3
-    brew install pyusb
+    pip3 install pyusb
-    brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+    brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
 
 
 4. Place your keyboard into reset. 
 4. Place your keyboard into reset. 
 5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file. 
 5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file. 

+ 2 - 3
keyboards/panc60/rules.mk

@@ -31,7 +31,7 @@ F_CPU = 12000000
 BOOTLOADER = bootloadHID
 BOOTLOADER = bootloadHID
 
 
 # build options
 # build options
-BOOTMAGIC_ENABLE = yes
+BOOTMAGIC_ENABLE = lite
 MOUSEKEY_ENABLE = yes
 MOUSEKEY_ENABLE = yes
 EXTRAKEY_ENABLE = yes
 EXTRAKEY_ENABLE = yes
 CONSOLE_ENABLE = yes
 CONSOLE_ENABLE = yes
@@ -43,8 +43,7 @@ RGBLIGHT_CUSTOM_DRIVER = yes
 OPT_DEFS = -DDEBUG_LEVEL=0
 OPT_DEFS = -DDEBUG_LEVEL=0
 
 
 # custom matrix setup
 # custom matrix setup
-CUSTOM_MATRIX = yes
+SRC = i2c_master.c
-SRC = matrix.c i2c.c
 
 
 # programming options
 # programming options
 PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
 PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex

+ 1 - 4
keyboards/panc60/usbconfig.h

@@ -8,8 +8,7 @@
  * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
  * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
  */
  */
 
 
-#ifndef __usbconfig_h_included__
+#pragma once
-#define __usbconfig_h_included__
 
 
 #include "config.h"
 #include "config.h"
 
 
@@ -392,5 +391,3 @@ section at the end of this file).
 /* #define USB_INTR_PENDING        EIFR */
 /* #define USB_INTR_PENDING        EIFR */
 #define USB_INTR_PENDING_BIT    INTF1
 #define USB_INTR_PENDING_BIT    INTF1
 #define USB_INTR_VECTOR         INT1_vect
 #define USB_INTR_VECTOR         INT1_vect
-
-#endif /* __usbconfig_h_included__ */