diff options
Diffstat (limited to 'keyboards/3w6/rev2')
-rw-r--r-- | keyboards/3w6/rev2/config.h | 48 | ||||
-rw-r--r-- | keyboards/3w6/rev2/info.json | 5 | ||||
-rw-r--r-- | keyboards/3w6/rev2/keymaps/default_pimoroni/config.h | 21 | ||||
-rw-r--r-- | keyboards/3w6/rev2/keymaps/default_pimoroni/keymap.c | 70 | ||||
-rw-r--r-- | keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c | 177 | ||||
-rw-r--r-- | keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.h | 35 | ||||
-rw-r--r-- | keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk | 4 | ||||
-rw-r--r-- | keyboards/3w6/rev2/matrix.c | 256 | ||||
-rw-r--r-- | keyboards/3w6/rev2/readme.md | 38 | ||||
-rw-r--r-- | keyboards/3w6/rev2/rev2.c | 34 | ||||
-rw-r--r-- | keyboards/3w6/rev2/rev2.h | 44 | ||||
-rw-r--r-- | keyboards/3w6/rev2/rules.mk | 25 |
12 files changed, 0 insertions, 757 deletions
diff --git a/keyboards/3w6/rev2/config.h b/keyboards/3w6/rev2/config.h deleted file mode 100644 index c9b8f8b58e..0000000000 --- a/keyboards/3w6/rev2/config.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2021 weteor - -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/>. -*/ - -#pragma once - -/* key matrix size */ -#define MATRIX_ROWS 8 -#define MATRIX_COLS 10 - -#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2) -#define MATRIX_COLS_PER_SIDE (MATRIX_COLS / 2) - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * - */ -#define MATRIX_ROW_PINS_L { B0, B1, B2, B4} -#define MATRIX_COL_PINS_L { B3, E6, F7, B6, B5 } - -#define MATRIX_ROW_PINS_R { P10, P11, P12, P05 } -#define MATRIX_COL_PINS_R { P06, P13, P14, P01, P00 } - - -/* COL2ROW, ROW2COL */ -#define DIODE_DIRECTION COL2ROW - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCE 5 diff --git a/keyboards/3w6/rev2/info.json b/keyboards/3w6/rev2/info.json deleted file mode 100644 index e557e4d307..0000000000 --- a/keyboards/3w6/rev2/info.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "usb": { - "device_version": "0.0.2" - } -} diff --git a/keyboards/3w6/rev2/keymaps/default_pimoroni/config.h b/keyboards/3w6/rev2/keymaps/default_pimoroni/config.h deleted file mode 100644 index 45c9d5154e..0000000000 --- a/keyboards/3w6/rev2/keymaps/default_pimoroni/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2021 weteor - * - * 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/>. - */ - -#pragma once - -#define PIMORONI_TRACKBALL_INVERT_Y -#define PIMORONI_TRACKBALL_ROTATE - diff --git a/keyboards/3w6/rev2/keymaps/default_pimoroni/keymap.c b/keyboards/3w6/rev2/keymaps/default_pimoroni/keymap.c deleted file mode 100644 index a5b8c6006a..0000000000 --- a/keyboards/3w6/rev2/keymaps/default_pimoroni/keymap.c +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2021 weteor - -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 QMK_KEYBOARD_H - -enum layers -{ - _ALPHA_QWERTY = 0, - _ALPHA_COLEMAK, - _SYM, - _NAV, - _NUM, - _CFG, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - -[_ALPHA_QWERTY] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, - LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), - - LCTL_T(KC_ESC), LT(_NUM,KC_SPC), LT(_NAV, KC_TAB), LT(_SYM, KC_BSPC), KC_ENT, LALT_T(KC_DEL) - ), - [_ALPHA_COLEMAK] = LAYOUT( - KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, - KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, - LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SCLN), - LCTL_T(KC_ENT), LT(_NUM,KC_SPC), LT(_NAV, KC_TAB), LT(_SYM, KC_BSPC), KC_ENT, LALT_T(KC_DEL) - ), - [_SYM] = LAYOUT( - KC_GRV , KC_CIRC, KC_AT, KC_DLR, KC_TILD, KC_AMPR, KC_EXLM, KC_PIPE, KC_UNDS, KC_HASH, - KC_SLSH, KC_LBRC, KC_LCBR, KC_LPRN, KC_EQL, KC_ASTR, KC_RPRN, KC_RCBR, KC_RBRC, KC_BSLS, - _______, KC_QUES, KC_PLUS, KC_PERC, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, XXXXXXX, _______, - XXXXXXX, MO(_CFG), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX - ), - [_NAV] = LAYOUT( - XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, KC_PGDN, KC_UP, KC_PGUP, KC_DEL, - KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MO(_CFG), XXXXXXX - ), - [_NUM] = LAYOUT( - XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PSLS, - XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_P0, KC_P4, KC_P5, KC_P6, KC_PDOT, - XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_PMNS, KC_P1, KC_P2, KC_P3, KC_PAST, - XXXXXXX, XXXXXXX, XXXXXXX, KC_PEQL, KC_PENT, XXXXXXX - ), - [_CFG] = LAYOUT( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,DF(_ALPHA_QWERTY), DF(_ALPHA_COLEMAK), - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX - ), -}; diff --git a/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c b/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c deleted file mode 100644 index c4f4a0441a..0000000000 --- a/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.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 "pimoroni_trackball.h" -#include "i2c_master.h" - -static uint8_t scrolling = 0; -static int16_t x_offset = 0; -static int16_t y_offset = 0; -static int16_t h_offset = 0; -static int16_t v_offset = 0; -static float precisionSpeed = 1; - -static uint16_t i2c_timeout_timer; - -#ifndef I2C_TIMEOUT -# define I2C_TIMEOUT 100 -#endif -#ifndef I2C_WAITCHECK -# define I2C_WAITCHECK 1000 -#endif -#ifndef MOUSE_DEBOUNCE -# define MOUSE_DEBOUNCE 5 -#endif - -void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) { - uint8_t data[] = {0x00, red, green, blue, white}; - i2c_transmit(TRACKBALL_WRITE, data, sizeof(data), I2C_TIMEOUT); -} - -int16_t mouse_offset(uint8_t positive, uint8_t negative, int16_t scale) { - int16_t offset = (int16_t)positive - (int16_t)negative; - int16_t magnitude = (int16_t)(scale * offset * offset * precisionSpeed); - return offset < 0 ? -magnitude : magnitude; -} - -void update_member(int8_t* member, int16_t* offset) { - if (*offset > 127) { - *member = 127; - *offset -= 127; - } else if (*offset < -127) { - *member = -127; - *offset += 127; - } else { - *member = *offset; - *offset = 0; - } -} - -__attribute__((weak)) void trackball_check_click(bool pressed, report_mouse_t* mouse) { - if (pressed) { - mouse->buttons |= MOUSE_BTN1; - } else { - mouse->buttons &= ~MOUSE_BTN1; - } -} - -bool process_record_kb(uint16_t keycode, keyrecord_t* record) { - if (true) { - xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); - } - - - if (!process_record_user(keycode, record)) { return false; } - -/* If Mousekeys is disabled, then use handle the mouse button - * keycodes. This makes things simpler, and allows usage of - * the keycodes in a consistent manner. But only do this if - * Mousekeys is not enable, so it's not handled twice. - */ -#ifndef MOUSEKEY_ENABLE - if (IS_MOUSEKEY_BUTTON(keycode)) { - report_mouse_t currentReport = pointing_device_get_report(); - if (record->event.pressed) { - currentReport.buttons |= 1 << (keycode - KC_MS_BTN1); - } else { - currentReport.buttons &= ~(1 << (keycode - KC_MS_BTN1)); - } - pointing_device_set_report(currentReport); - pointing_device_send(); - } -#endif - - return true; -} - -void trackball_register_button(bool pressed, enum mouse_buttons button) { - report_mouse_t currentReport = pointing_device_get_report(); - if (pressed) { - currentReport.buttons |= button; - } else { - currentReport.buttons &= ~button; - } - pointing_device_set_report(currentReport); -} - -float trackball_get_precision(void) { return precisionSpeed; } -void trackball_set_precision(float precision) { precisionSpeed = precision; } -bool trackball_is_scrolling(void) { return scrolling; } -void trackball_set_scrolling(bool scroll) { scrolling = scroll; } - - -__attribute__((weak)) void pointing_device_init(void) { trackball_set_rgbw(0x80, 0x00, 0x00, 0x00); } - -void pointing_device_task(void) { - static bool debounce; - static uint16_t debounce_timer; - uint8_t state[5] = {}; - if (timer_elapsed(i2c_timeout_timer) > I2C_WAITCHECK) { - if (i2c_readReg(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) { - if (!state[4] && !debounce) { - if (scrolling) { -#ifdef PIMORONI_TRACKBALL_INVERT_X - h_offset += mouse_offset(state[2], state[3], 1); -#else - h_offset -= mouse_offset(state[2], state[3], 1); -#endif -#ifdef PIMORONI_TRACKBALL_INVERT_Y - v_offset += mouse_offset(state[1], state[0], 1); -#else - v_offset -= mouse_offset(state[1], state[0], 1); -#endif - } else { -#ifdef PIMORONI_TRACKBALL_INVERT_X - x_offset -= mouse_offset(state[2], state[3], 5); -#else - x_offset += mouse_offset(state[2], state[3], 5); -#endif -#ifdef PIMORONI_TRACKBALL_INVERT_Y - y_offset -= mouse_offset(state[1], state[0], 5); -#else - y_offset += mouse_offset(state[1], state[0], 5); -#endif - } - } else { - if (state[4]) { - debounce = true; - debounce_timer = timer_read(); - } - } - } else { - i2c_timeout_timer = timer_read(); - } - } - - if (timer_elapsed(debounce_timer) > MOUSE_DEBOUNCE) debounce = false; - - report_mouse_t mouse = pointing_device_get_report(); - // trackball_check_click(state[4] & (1 << 7), &mouse); - -#ifndef PIMORONI_TRACKBALL_ROTATE - update_member(&mouse.x, &x_offset); - update_member(&mouse.y, &y_offset); - update_member(&mouse.h, &h_offset); - update_member(&mouse.v, &v_offset); -#else - update_member(&mouse.x, &y_offset); - update_member(&mouse.y, &x_offset); - update_member(&mouse.h, &v_offset); - update_member(&mouse.v, &h_offset); -#endif - pointing_device_set_report(mouse); - pointing_device_send(); -} diff --git a/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.h b/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.h deleted file mode 100644 index cfcd5a47a1..0000000000 --- a/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.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/>. - */ - -#pragma once - -#include "quantum.h" -#include "pointing_device.h" - -#ifndef TRACKBALL_ADDRESS -# define TRACKBALL_ADDRESS 0x0A -#endif -#define TRACKBALL_WRITE ((TRACKBALL_ADDRESS << 1) | I2C_WRITE) -#define TRACKBALL_READ ((TRACKBALL_ADDRESS << 1) | I2C_READ) - -void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white); -void trackball_check_click(bool pressed, report_mouse_t *mouse); -void trackball_register_button(bool pressed, enum mouse_buttons button); - -float trackball_get_precision(void); -void trackball_set_precision(float precision); -bool trackball_is_scrolling(void); -void trackball_set_scrolling(bool scroll);
\ No newline at end of file diff --git a/keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk b/keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk deleted file mode 100644 index 5b5f23fbce..0000000000 --- a/keyboards/3w6/rev2/keymaps/default_pimoroni/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -POINTING_DEVICE_ENABLE = yes -POINTING_DEVICE_DRIVER = custom -SRC += pimoroni_trackball.c -MOUSEKEY_ENABLE = no diff --git a/keyboards/3w6/rev2/matrix.c b/keyboards/3w6/rev2/matrix.c deleted file mode 100644 index c47c24e1dc..0000000000 --- a/keyboards/3w6/rev2/matrix.c +++ /dev/null @@ -1,256 +0,0 @@ -/* -Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com> - 2020 Pierre Chevalier <pierrechevalier83@gmail.com> - 2021 weteor - -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/>. -*/ - -/* - * This code was heavily inspired by the ergodox_ez keymap, and modernized - * to take advantage of the quantum.h microcontroller agnostics gpio control - * abstractions and use the macros defined in config.h for the wiring as opposed - * to repeating that information all over the place. - */ - -#include QMK_KEYBOARD_H -#include "i2c_master.h" - -extern i2c_status_t tca9555_status; -#define I2C_TIMEOUT 1000 - -// I2C address: -// All address pins of the tca9555 are connected to the ground -// | 0 | 1 | 0 | 0 | A2 | A1 | A0 | -// | 0 | 1 | 0 | 0 | 0 | 0 | 0 | -#define I2C_ADDR (0b0100000 << 1) - -// Register addresses -#define IODIRA 0x06 // i/o direction register -#define IODIRB 0x07 -#define IREGP0 0x00 // GPIO pull-up resistor register -#define IREGP1 0x01 -#define OREGP0 0x02 // general purpose i/o port register (write modifies OLAT) -#define OREGP1 0x03 - -bool i2c_initialized = 0; -i2c_status_t tca9555_status = I2C_ADDR; - -uint8_t init_tca9555(void) { - print("starting init"); - tca9555_status = I2C_ADDR; - - // I2C subsystem - if (i2c_initialized == 0) { - i2c_init(); // on pins D(1,0) - i2c_initialized = true; - wait_ms(I2C_TIMEOUT); - } - - // set pin direction - // - unused : input : 1 - // - input : input : 1 - // - driving : output : 0 - uint8_t conf[2] = { - // This means: read all pins of port 0 - 0b11111111, - // This means: we will write on pins 0 to 3 on port 1. read rest - 0b11110000, - }; - tca9555_status = i2c_writeReg(I2C_ADDR, IODIRA, conf, 2, I2C_TIMEOUT); - - return tca9555_status; -} - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; // debounced values - -static matrix_row_t read_cols(uint8_t row); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - -static uint8_t tca9555_reset_loop; - -void matrix_init_custom(void) { - // initialize row and col - - tca9555_status = init_tca9555(); - - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - } -} - -void matrix_power_up(void) { - tca9555_status = init_tca9555(); - - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - } -} - -// Reads and stores a row, returning -// whether a change occurred. -static inline bool store_matrix_row(matrix_row_t current_matrix[], uint8_t index) { - matrix_row_t temp = read_cols(index); - if (current_matrix[index] != temp) { - current_matrix[index] = temp; - return true; - } - return false; -} - -bool matrix_scan_custom(matrix_row_t current_matrix[]) { - if (tca9555_status) { // if there was an error - if (++tca9555_reset_loop == 0) { - // since tca9555_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans - // this will be approx bit more frequent than once per second - dprint("trying to reset tca9555\n"); - tca9555_status = init_tca9555(); - if (tca9555_status) { - dprint("right side not responding\n"); - } else { - dprint("right side attached\n"); - } - } - } - - bool changed = false; - for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) { - // select rows from left and right hands - uint8_t left_index = i; - uint8_t right_index = i + MATRIX_ROWS_PER_SIDE; - select_row(left_index); - select_row(right_index); - - // we don't need a 30us delay anymore, because selecting a - // left-hand row requires more than 30us for i2c. - - changed |= store_matrix_row(current_matrix, left_index); - changed |= store_matrix_row(current_matrix, right_index); - - unselect_rows(); - } - - return changed; -} - -static void init_cols(void) { - // init on tca9555 - // not needed, already done as part of init_tca9555() - - // init on mcu - pin_t matrix_col_pins_mcu[MATRIX_COLS_PER_SIDE] = MATRIX_COL_PINS_L; - for (int pin_index = 0; pin_index < MATRIX_COLS_PER_SIDE; pin_index++) { - pin_t pin = matrix_col_pins_mcu[pin_index]; - setPinInput(pin); - writePinHigh(pin); - } -} - -static matrix_row_t read_cols(uint8_t row) { - if (row < MATRIX_ROWS_PER_SIDE) { - pin_t matrix_col_pins_mcu[MATRIX_COLS_PER_SIDE] = MATRIX_COL_PINS_L; - matrix_row_t current_row_value = 0; - // For each col... - for (uint8_t col_index = 0; col_index < MATRIX_COLS_PER_SIDE; col_index++) { - // Select the col pin to read (active low) - uint8_t pin_state = readPin(matrix_col_pins_mcu[col_index]); - - // Populate the matrix row with the state of the col pin - current_row_value |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index); - } - return current_row_value; - } else { - if (tca9555_status) { // if there was an error - return 0; - } else { - uint8_t data = 0; - uint8_t port0 = 0; - tca9555_status = i2c_readReg(I2C_ADDR, IREGP0, &port0, 1, I2C_TIMEOUT); - if (tca9555_status) { // if there was an error - // do nothing - return 0; - } else { - port0 = ~port0; - // We read all the pins on GPIOA. - // The initial state was all ones and any depressed key at a given column for the currently selected row will have its bit flipped to zero. - // The return value is a row as represented in the generic matrix code were the rightmost bits represent the lower columns and zeroes represent non-depressed keys while ones represent depressed keys. - // the pins connected to eact columns are sequential, but in reverse order, and counting from zero down (col 5 -> GPIO04, col6 -> GPIO03 and so on). - data |= (port0 & 0x01) << 4; - data |= (port0 & 0x02) << 2; - data |= (port0 & 0x04); - data |= (port0 & 0x08) >> 2; - data |= (port0 & 0x10) >> 4; - - tca9555_status = I2C_STATUS_SUCCESS; - return data; - } - } - } -} - -static void unselect_rows(void) { - // no need to unselect on tca9555, because the select step sets all - // the other row bits high, and it's not changing to a different - // direction - - // unselect rows on microcontroller - pin_t matrix_row_pins_mcu[MATRIX_ROWS_PER_SIDE] = MATRIX_ROW_PINS_L; - for (int pin_index = 0; pin_index < MATRIX_ROWS_PER_SIDE; pin_index++) { - pin_t pin = matrix_row_pins_mcu[pin_index]; - setPinInput(pin); - writePinLow(pin); - } -} - -static void select_row(uint8_t row) { - uint8_t port1 = 0xff; - - if (row < MATRIX_ROWS_PER_SIDE) { - // select on atmega32u4 - pin_t matrix_row_pins_mcu[MATRIX_ROWS_PER_SIDE] = MATRIX_ROW_PINS_L; - pin_t pin = matrix_row_pins_mcu[row]; - setPinOutput(pin); - writePinLow(pin); - } else { - // select on tca9555 - if (tca9555_status) { // if there was an error - // do nothing - } else { - switch(row) { - case 4: port1 &= ~(1 << 0); break; - case 5: port1 &= ~(1 << 1); break; - case 6: port1 &= ~(1 << 2); break; - case 7: - port1 &= ~(1 << 3); - break; - default: break; - } - - tca9555_status = i2c_writeReg(I2C_ADDR, OREGP1, &port1, 1, I2C_TIMEOUT); - // Select the desired row by writing a byte for the entire GPIOB bus where only the bit representing the row we want to select is a zero (write instruction) and every other bit is a one. - // Note that the row - MATRIX_ROWS_PER_SIDE reflects the fact that being on the right hand, the columns are numbered from MATRIX_ROWS_PER_SIDE to MATRIX_ROWS, but the pins we want to write to are indexed from zero up on the GPIOB bus. - } - } -} diff --git a/keyboards/3w6/rev2/readme.md b/keyboards/3w6/rev2/readme.md deleted file mode 100644 index a17c2fd6be..0000000000 --- a/keyboards/3w6/rev2/readme.md +++ /dev/null @@ -1,38 +0,0 @@ -# 3W6 - -![3W6_rev2](https://raw.githubusercontent.com/weteor/3W6/main/images/3w6_rev2_2s.jpg) -![3W6_rev2](https://raw.githubusercontent.com/weteor/3W6/main/images/3w6_rev2_1s.jpg) - -The 3w6 is a low profile, split ortholinear keyboard with 36 keys. - -* Rev2: - - onboard microcontroller (ATMega32U4) - - USB-C connector Board <-> PC - - USB-C connectors between both split halfs - - choc spacing (18x17mm) - - aggressive pinky stagger - - support for Choc V1 switches - - files for midplate (1.6 to 2mm) - - support for [Pimoroni Trackball](https://shop.pimoroni.com/products/trackball-breakout) instead of outer thumb switch on right half, needs midplate - - mounting holes for [Tenting Puck](https://splitkb.com/collections/keyboard-parts/products/tenting-puck), only usable without mid or switchplate - ---- - -* Keyboard Maintainer: [weteor](https://github.com/weteor) -* Hardware Supported: - * 3w6 rev2 (with Pimoroni support) -* Hardware Availability: - * make one yourself: [Design and Productionfiles](https://github.com/weteor/3w6) - * maintainer is selling kits when available - ---- -To reach the bootloader, connect the board to the PC and push the reset button on left half. - -Make examples for this keyboard (after setting up your build environment): - - make 3w6/rev2:default - make 3w6/rev2:default_pimoroni - - --- - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/3w6/rev2/rev2.c b/keyboards/3w6/rev2/rev2.c deleted file mode 100644 index 224925111e..0000000000 --- a/keyboards/3w6/rev2/rev2.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2021 weteor - * - * 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 "rev2.h" - -#ifdef SWAP_HANDS_ENABLE -__attribute__ ((weak)) -const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { - // Left - {{4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}}, - {{4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}}, - {{4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}}, - {{4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}}, - // Right - {{4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, - {{4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, - {{4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, - {{4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}} -}; -#endif - diff --git a/keyboards/3w6/rev2/rev2.h b/keyboards/3w6/rev2/rev2.h deleted file mode 100644 index ba881ca431..0000000000 --- a/keyboards/3w6/rev2/rev2.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2021 weteor - * - * 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/>. - */ - -#pragma once - -#include "quantum.h" - -/* This is a shortcut to help you visually see your layout. - * - * The first section contains all of the arguments representing the physical - * layout of the board and position of the keys. - * - * The second converts the arguments into a two-dimensional array which - * represents the switch matrix. - */ -#define LAYOUT( \ - k00, k01, k02, k03, k04, k05, k06, k07, k08, k09,\ - k10, k11, k12, k13, k14, k15, k16, k17, k18, k19,\ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29,\ - k32, k33, k34, k35, k36, k37\ -) { \ - { k00, k01, k02, k03, k04 }, \ - { k10, k11, k12, k13, k14 }, \ - { k20, k21, k22, k23, k24 }, \ - { KC_NO, KC_NO, k32, k33, k34 }, \ - \ - { k05, k06, k07, k08, k09 }, \ - { k15, k16, k17, k18, k19 }, \ - { k25, k26, k27, k28, k29 }, \ - { k35, k36, k37, KC_NO, KC_NO }, \ -} diff --git a/keyboards/3w6/rev2/rules.mk b/keyboards/3w6/rev2/rules.mk deleted file mode 100644 index 8f2613f9d3..0000000000 --- a/keyboards/3w6/rev2/rules.mk +++ /dev/null @@ -1,25 +0,0 @@ -# MCU name -MCU = atmega32u4 - -# Bootloader selection -BOOTLOADER = atmel-dfu - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = no # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -UNICODE_ENABLE = yes -CUSTOM_MATRIX = lite -NO_USB_STARTUP_CHECK = yes -LTO_ENABLE = no - -SRC += matrix.c -QUANTUM_LIB_SRC += i2c_master.c |