From 43579a80a7bba63ddf2b3eceb4d05a51727a7cbb Mon Sep 17 00:00:00 2001 From: Art Ortenburger Date: Sun, 25 Jun 2017 22:30:07 -0300 Subject: add support for Orthodox keyboard (#1436) * Added orthodox * Modified readme * Modified readme * Modified readme * Updated makefile * Fixed keymap issues * Modified serial communications to allow for over 8 columns * Fixed sizeof command * Fixed some typing issues * Testing issue #1191 (n-column split i2c slave) Based on initial OrthoDox (serial) config by @reddragond and others, this attempts to add TWI (I2C) support. Relevant: - per @ahtn recommendation, using memcpy for moving slave matrix into slave sending buffer - slave buffer has been enlarged using sizeof(matrix_row_t) - note: i2c.h now includes matrix.h - note: matrix.c includes * Added i2c keymap - right col still not working * orthodox: re-added i2c keymap, based on serial * orthodox / issue #1191: trying 9-bit serial - orthodox serial protocol now sends 9 bits per row, instead of 16. Technically it's using MATRIX_COLS, so it might work generically. - ROW_MASK is #defined in serial.c to truncate the checksums to prevent overflows causing false errors. This macro should be renamed if it's kept. * Revert "Fixed sizeof command" This reverts commit f62a5b9939d6a9c0e442ec403de00c14431a55f9. Changes had been made to the lets_split serial driver for testing which mirrored the multi-byte-row changes made to support the orthodox. As the lets_split does not require these changes, and new improvements had been added to the orthodox port only, this commit reverts them. Because the new code could potentially reduce latency over the serial transport, it may be desirable to re-add in the future, by backporting the current working orthodox code. * orthodox: default serial keymap improvements - formatting has been improved - a few keys have been shifted, mainly in Raise and Lower layers, to be more like the default Planck layout - Now available: F12, Home, End, PgUp, PgDn, Media-Next, Media-Play Still To Do: - duplicate for TWI - Alt modifier - GUI modifier * orthodox: failed attempt at 16b/row TWI - duplicated updated serial keymap for "i2c" - removed string.h/memcpy, instead - hardcoded copying of six bytes per update - still doesn't work; master reports interconnect errors on txled * orthodox: adjusted default keymap - this is applied to both 'serial' and 'i2c' keymaps - Alt and GUI have been added, as they were missing - comma and period persist across more layers; Home/PgUp and End/PgDn have been moved slightly to accommodate * orthodox: revert TWI support to minimum to debug - disabled ssd1306 and hardware locking in build configuration - increased TWI buffer from 0x10 to 0x20 bytes - decreased TWI clock from 400000 to 100000 - removed hardcoded TWI multi-byte sending/receiving An 'i2c' build of this was found to work on a rev1 Orthodox, although slave-side col9 was understandably not working. When testing-time permits, features will be gradually re-enabled towards getting the full matrix supported over TWI. * orthodox: TWI (i2c) is working, kludge for col9 The TWI interconnect ("i2c" in directories and build config) is now working for the Orthodox, including the slave half's column #9. This is intended as an interim solution, as it's a kludge, not a fix. Rather than a working multi-byte implementation, the two col9 keys' bits are packed-into and unpacked-from the two unused bits in row1. Furthermore, the TWI clock constant has been reduced to 100000 from 400000, as testing revealed the higher value just didn't work. Testing also found that (with this kludge) increasing the TWI buffer was not necessary. This commit leaves many commented-out lines in matrix.c from previous testing, which will be removed in a future commit once the interconnects' multi-byte problems have been debugged more thoroughly. * orthodox: updated readme.md The readme for the Orthodox now includes a description of the keyboard, allusions to its author and availability, a linked photo, and links to the evolving build guide and the current keymap on KLE. This update has been prepared with /u/Deductivemonkee's assistance. --- keyboards/orthodox/rev1/Makefile | 3 ++ keyboards/orthodox/rev1/config.h | 99 ++++++++++++++++++++++++++++++++++++++++ keyboards/orthodox/rev1/rev1.c | 32 +++++++++++++ keyboards/orthodox/rev1/rev1.h | 25 ++++++++++ keyboards/orthodox/rev1/rules.mk | 5 ++ 5 files changed, 164 insertions(+) create mode 100644 keyboards/orthodox/rev1/Makefile create mode 100644 keyboards/orthodox/rev1/config.h create mode 100644 keyboards/orthodox/rev1/rev1.c create mode 100644 keyboards/orthodox/rev1/rev1.h create mode 100644 keyboards/orthodox/rev1/rules.mk (limited to 'keyboards/orthodox/rev1') diff --git a/keyboards/orthodox/rev1/Makefile b/keyboards/orthodox/rev1/Makefile new file mode 100644 index 0000000000..4e2a6f00fd --- /dev/null +++ b/keyboards/orthodox/rev1/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/orthodox/rev1/config.h b/keyboards/orthodox/rev1/config.h new file mode 100644 index 0000000000..46bb994402 --- /dev/null +++ b/keyboards/orthodox/rev1/config.h @@ -0,0 +1,99 @@ +/* +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER deductivemonkee +#define PRODUCT Monkeebs Orthodox Rev.1 +#define DESCRIPTION Oreodox + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 6 +#define MATRIX_COLS 9 + +// wiring of each half + + +//PRO MICRO +#define MATRIX_ROW_PINS { D4, B4, B5 } +#define MATRIX_COL_PINS { D7, F4, F5, F6, F7, B1, B3, B2, B6 } +//#define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4, D7 } + +/*/ +//TEENSY +#define MATRIX_ROW_PINS { D0, C6, C7, } +#define MATRIX_COL_PINS { D2, F5, F6, F7, B6, B5, B4, D7, D6 } +/*/ + +#define CATERINA_BOOTLOADER + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +// #define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +// #define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +//#define RGB_DI_PIN D3 +//#define RGBLIGHT_TIMER +//#define RGBLED_NUM 16 // Number of LEDs +//#define ws2812_PORTREG PORTD +//#define ws2812_DDRREG DDRD + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/orthodox/rev1/rev1.c b/keyboards/orthodox/rev1/rev1.c new file mode 100644 index 0000000000..10ece03f08 --- /dev/null +++ b/keyboards/orthodox/rev1/rev1.c @@ -0,0 +1,32 @@ +#include "orthodox.h" + +#ifdef AUDIO_ENABLE + float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void matrix_init_kb(void) { + + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; + +void shutdown_user(void) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); + #endif +} diff --git a/keyboards/orthodox/rev1/rev1.h b/keyboards/orthodox/rev1/rev1.h new file mode 100644 index 0000000000..4f163299d1 --- /dev/null +++ b/keyboards/orthodox/rev1/rev1.h @@ -0,0 +1,25 @@ +#ifndef REV1_H +#define REV1_H + +#include "../orthodox.h" + +//void promicro_bootloader_jmp(bool program); +#include "quantum.h" + +//void promicro_bootloader_jmp(bool program); + +#define KEYMAP( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, L16, L17, L18, R10, R11, R12, R13, R14, R15, R16, R17, R18, \ + L20, L21, L22, L23, L24, L25, L26, L27, L28, R20, R21, R22, R23, R24, R25, R26, R27, R28 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15, L16, L17, L18}, \ + { L20, L21, L22, L23, L24, L25, L26, L27, L28 }, \ + { R05, R04, R03, R02, R01, R00 }, \ + { R18, R17, R16, R15, R14, R13, R12, R11, R10 }, \ + { R28, R27, R26, R25, R24, R23, R22, R21, R20 } \ + } + +#endif \ No newline at end of file diff --git a/keyboards/orthodox/rev1/rules.mk b/keyboards/orthodox/rev1/rules.mk new file mode 100644 index 0000000000..a0825b4ef6 --- /dev/null +++ b/keyboards/orthodox/rev1/rules.mk @@ -0,0 +1,5 @@ +BACKLIGHT_ENABLE = no + +ifndef QUANTUM_DIR + include ../../../Makefile +endif \ No newline at end of file -- cgit v1.2.1