From 1406118c7123359cd66d589d22d6ecfa268e3a24 Mon Sep 17 00:00:00 2001 From: profet23 Date: Tue, 6 Sep 2016 21:59:23 -0400 Subject: [PATCH] Removing separate ergodox80 project. Created KEYMAP_80 in ez.h to support 80 key ergodoxes. Creating default_80 keymap as ez keymap. --- keyboards/ergodox/ez/ez.h | 41 + .../ez/keymaps/default_80/ergodox80.png | Bin 0 -> 20663 bytes .../ez/keymaps/default_80}/keymap.c | 8 +- .../ergodox/ez/keymaps/default_80/readme.md | 10 + keyboards/ergodox80/Makefile | 5 - keyboards/ergodox80/config.h | 31 - keyboards/ergodox80/ergodox80.c | 0 keyboards/ergodox80/ergodox80.h | 5 - keyboards/ergodox80/ergodox80/190hotfix.sh | 19 - keyboards/ergodox80/ergodox80/Makefile | 3 - keyboards/ergodox80/ergodox80/config.h | 65 -- keyboards/ergodox80/ergodox80/ergodox80.c | 85 --- keyboards/ergodox80/ergodox80/ergodox80.h | 122 --- keyboards/ergodox80/ergodox80/i2cmaster.h | 178 ----- keyboards/ergodox80/ergodox80/matrix.c | 382 ---------- keyboards/ergodox80/ergodox80/rules.mk | 76 -- keyboards/ergodox80/ergodox80/twimaster.c | 208 ----- .../ergodox80/util/compile_keymap.py | 710 ------------------ keyboards/ergodox80/ergodox80/util/readme.md | 3 - keyboards/ergodox80/readme.md | 6 - keyboards/ergodox80/rules.mk | 28 - 21 files changed, 55 insertions(+), 1930 deletions(-) create mode 100644 keyboards/ergodox/ez/keymaps/default_80/ergodox80.png rename keyboards/{ergodox80/keymaps/default => ergodox/ez/keymaps/default_80}/keymap.c (99%) create mode 100644 keyboards/ergodox/ez/keymaps/default_80/readme.md delete mode 100644 keyboards/ergodox80/Makefile delete mode 100644 keyboards/ergodox80/config.h delete mode 100644 keyboards/ergodox80/ergodox80.c delete mode 100644 keyboards/ergodox80/ergodox80.h delete mode 100755 keyboards/ergodox80/ergodox80/190hotfix.sh delete mode 100644 keyboards/ergodox80/ergodox80/Makefile delete mode 100644 keyboards/ergodox80/ergodox80/config.h delete mode 100644 keyboards/ergodox80/ergodox80/ergodox80.c delete mode 100644 keyboards/ergodox80/ergodox80/ergodox80.h delete mode 100644 keyboards/ergodox80/ergodox80/i2cmaster.h delete mode 100644 keyboards/ergodox80/ergodox80/matrix.c delete mode 100644 keyboards/ergodox80/ergodox80/rules.mk delete mode 100644 keyboards/ergodox80/ergodox80/twimaster.c delete mode 100644 keyboards/ergodox80/ergodox80/util/compile_keymap.py delete mode 100644 keyboards/ergodox80/ergodox80/util/readme.md delete mode 100644 keyboards/ergodox80/readme.md delete mode 100644 keyboards/ergodox80/rules.mk diff --git a/keyboards/ergodox/ez/ez.h b/keyboards/ergodox/ez/ez.h index db4ec867b..124bf850e 100644 --- a/keyboards/ergodox/ez/ez.h +++ b/keyboards/ergodox/ez/ez.h @@ -119,4 +119,45 @@ inline void ergodox_led_all_set(uint8_t n) { k0D, k1D, k2D, k3D, k4D, KC_NO } \ } +#define KEYMAP_80( \ + \ + /* left hand, spatial positions */ \ + k00,k01,k02,k03,k04,k05,k06, \ + k10,k11,k12,k13,k14,k15,k16, \ + k20,k21,k22,k23,k24,k25, \ + k30,k31,k32,k33,k34,k35,k36, \ + k40,k41,k42,k43,k44, \ + k55,k56, \ + k45,k46,k54, \ + k53,k52,k51, \ + \ + /* right hand, spatial positions */ \ + k07,k08,k09,k0A,k0B,k0C,k0D, \ + k17,k18,k19,k1A,k1B,k1C,k1D, \ + k28,k29,k2A,k2B,k2C,k2D, \ + k37,k38,k39,k3A,k3B,k3C,k3D, \ + k49,k4A,k4B,k4C,k4D, \ + k57,k58, \ + k59,k47,k48, \ + k5C,k5B,k5A ) \ + \ + /* matrix positions */ \ + { \ + { k00, k10, k20, k30, k40, KC_NO }, \ + { k01, k11, k21, k31, k41, k51 }, \ + { k02, k12, k22, k32, k42, k52 }, \ + { k03, k13, k23, k33, k43, k53 }, \ + { k04, k14, k24, k34, k44, k54 }, \ + { k05, k15, k25, k35, k45, k55 }, \ + { k06, k16, KC_NO, k36, k46, k56 }, \ + \ + { k07, k17, KC_NO, k37, k47, k57 }, \ + { k08, k18, k28, k38, k48, k58 }, \ + { k09, k19, k29, k39, k49, k59 }, \ + { k0A, k1A, k2A, k3A, k4A, k5A }, \ + { k0B, k1B, k2B, k3B, k4B, k5B }, \ + { k0C, k1C, k2C, k3C, k4C, k5C }, \ + { k0D, k1D, k2D, k3D, k4D, KC_NO } \ + } + #endif diff --git a/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png b/keyboards/ergodox/ez/keymaps/default_80/ergodox80.png new file mode 100644 index 0000000000000000000000000000000000000000..66b9752ebcc70543caac2ea7e1aa32cef4e120ae GIT binary patch literal 20663 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%0DBCwyR>A(jLt&rx(9T~2EWU9 z_+qE>XI_OaW$IhEu@pq7A%V1<$|yd32=gOxHbCaBGX_-h1Hsxmh0l z>LABPf(&4te1p%HN!B+r(wD_b@J-G%VA@~c15Eof8qU6(vDB;m>n$H(TP7ZqVv9h& zYf8E#TU)+p<)^9|U`Oh#*rg5AR&Z5=4(q!43gp&O;1Z()B5TsEzeEUqUV8jlTl$7= zK(G8+<^2~d4f2YJ>yFQtejZ(RDyif+sFwHW7dA_Y*$QmfFfND#+1+>%)C}GbnF|(U z0G3;40(Q$*1uQ+B=3*ex2vP_V1f4tw8oCEE8hU`S4FqHy4)bQom;cOeQMDmlLN04S OW_Y^#xvXmods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ - keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ -) - -#include "ergodox80/config.h" - - -#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/ergodox80/ergodox80.c b/keyboards/ergodox80/ergodox80.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/keyboards/ergodox80/ergodox80.h b/keyboards/ergodox80/ergodox80.h deleted file mode 100644 index ea40f4d45..000000000 --- a/keyboards/ergodox80/ergodox80.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_ -#define KEYBOARDS_ERGODOX_ERGODOX_H_ -#include "ergodox80.h" - -#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */ diff --git a/keyboards/ergodox80/ergodox80/190hotfix.sh b/keyboards/ergodox80/ergodox80/190hotfix.sh deleted file mode 100755 index bdc3adce2..000000000 --- a/keyboards/ergodox80/ergodox80/190hotfix.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#a tool to fix broken keymaps as a result of pull request #190 -#changing the declaration of matrix_scan_user() and matrix_init_user() -# -#This script will save a copy of the specified keymap as keymap.c.bak -#and then create a new keymap.c with the definion corrected. -#this script must be run from the ergodox_ez directory -if [ $# -ne 1 ]; then - echo $0: usage: ./190hotfix keymap_name - exit 1 -fi - -echo Saving backup as ./keymaps/$1/keymap.c.bak ... -mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak - -echo Modifying ./keymaps/$1/keymap.c ... -cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c - -echo Complete! diff --git a/keyboards/ergodox80/ergodox80/Makefile b/keyboards/ergodox80/ergodox80/Makefile deleted file mode 100644 index 191c6bb66..000000000 --- a/keyboards/ergodox80/ergodox80/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifndef MAKEFILE_INCLUDED - include ../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/ergodox80/ergodox80/config.h b/keyboards/ergodox80/ergodox80/config.h deleted file mode 100644 index 084a044ee..000000000 --- a/keyboards/ergodox80/ergodox80/config.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk - -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 ERGODOX_EZ_CONFIG_H -#define ERGODOX_EZ_CONFIG_H - -#include "../config.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x1307 -#define DEVICE_VER 0x0001 -#define MANUFACTURER ErgoDox EZ -#define PRODUCT ErgoDox EZ -#define DESCRIPTION QMK keyboard firmware for Ergodox EZ - -/* key matrix size */ -#define MATRIX_ROWS 14 -#define MATRIX_COLS 6 - -/* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 - -#define LED_BRIGHTNESS_LO 15 -#define LED_BRIGHTNESS_HI 255 - - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* - * 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 -//#define DEBUG_MATRIX_SCAN_RATE - -#endif diff --git a/keyboards/ergodox80/ergodox80/ergodox80.c b/keyboards/ergodox80/ergodox80/ergodox80.c deleted file mode 100644 index b21b1073b..000000000 --- a/keyboards/ergodox80/ergodox80/ergodox80.c +++ /dev/null @@ -1,85 +0,0 @@ -#include "ergodox80.h" -#include "i2cmaster.h" - -bool i2c_initialized = 0; -uint8_t mcp23018_status = 0x20; - -void matrix_init_kb(void) { - // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") - TCCR1A = 0b10101001; // set and configure fast PWM - TCCR1B = 0b00001001; // set and configure fast PWM - - // (tied to Vcc for hardware convenience) - DDRB &= ~(1<<4); // set B(4) as input - PORTB &= ~(1<<4); // set B(4) internal pull-up disabled - - // unused pins - C7, D4, D5, D7, E6 - // set as input with internal pull-ip enabled - DDRC &= ~(1<<7); - DDRD &= ~(1<<7 | 1<<5 | 1<<4); - DDRE &= ~(1<<6); - PORTC |= (1<<7); - PORTD |= (1<<7 | 1<<5 | 1<<4); - PORTE |= (1<<6); - - ergodox_blink_all_leds(); - - matrix_init_user(); -} - -void ergodox_blink_all_leds(void) -{ - ergodox_led_all_off(); - ergodox_led_all_set(LED_BRIGHTNESS_HI); - ergodox_right_led_1_on(); - _delay_ms(50); - ergodox_right_led_2_on(); - _delay_ms(50); - ergodox_right_led_3_on(); - _delay_ms(50); - ergodox_right_led_1_off(); - _delay_ms(50); - ergodox_right_led_2_off(); - _delay_ms(50); - ergodox_right_led_3_off(); - //ergodox_led_all_on(); - //_delay_ms(333); - ergodox_led_all_off(); -} - -uint8_t init_mcp23018(void) { - mcp23018_status = 0x20; - - // I2C subsystem - if (i2c_initialized == 0) { - i2c_init(); // on pins D(1,0) - i2c_initialized++; - _delay_ms(1000); - } - - // set pin direction - // - unused : input : 1 - // - input : input : 1 - // - driving : output : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - i2c_stop(); - - // set pull-up - // - unused : on : 1 - // - input : on : 1 - // - driving : off : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - -out: - i2c_stop(); - - return mcp23018_status; -} - - diff --git a/keyboards/ergodox80/ergodox80/ergodox80.h b/keyboards/ergodox80/ergodox80/ergodox80.h deleted file mode 100644 index 8012b0a74..000000000 --- a/keyboards/ergodox80/ergodox80/ergodox80.h +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef ERGODOX_EZ_H -#define ERGODOX_EZ_H - -#include "quantum.h" -#include -#include -#include "i2cmaster.h" -#include - -#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) -#define CPU_16MHz 0x00 - -// I2C aliases and register addresses (see "mcp23018.md") -#define I2C_ADDR 0b0100000 -#define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE ) -#define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ ) -#define IODIRA 0x00 // i/o direction register -#define IODIRB 0x01 -#define GPPUA 0x0C // GPIO pull-up resistor register -#define GPPUB 0x0D -#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT) -#define GPIOB 0x13 -#define OLATA 0x14 // output latch register -#define OLATB 0x15 - -extern uint8_t mcp23018_status; - -void init_ergodox(void); -void ergodox_blink_all_leds(void); -uint8_t init_mcp23018(void); -uint8_t ergodox_left_leds_update(void); - -#define LED_BRIGHTNESS_LO 15 -#define LED_BRIGHTNESS_HI 255 - - -inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); } -inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); } -inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); } -inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); } -inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); } - -inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); } -inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); } -inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); } -inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } -inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } - -inline void ergodox_led_all_on(void) -{ - ergodox_board_led_on(); - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); -} - -inline void ergodox_led_all_off(void) -{ - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); -} - -inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; } -inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; } -inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; } -inline void ergodox_right_led_set(uint8_t led, uint8_t n) { - (led == 1) ? (OCR1A = n) : - (led == 2) ? (OCR1B = n) : - (OCR1C = n); -} - -inline void ergodox_led_all_set(uint8_t n) -{ - ergodox_right_led_1_set(n); - ergodox_right_led_2_set(n); - ergodox_right_led_3_set(n); -} - -#define KEYMAP( \ - \ - /* left hand, spatial positions */ \ - k00,k01,k02,k03,k04,k05,k06, \ - k10,k11,k12,k13,k14,k15,k16, \ - k20,k21,k22,k23,k24,k25, \ - k30,k31,k32,k33,k34,k35,k36, \ - k40,k41,k42,k43,k44, \ - k55,k56, \ - k45,k46,k54, \ - k53,k52,k51, \ - \ - /* right hand, spatial positions */ \ - k07,k08,k09,k0A,k0B,k0C,k0D, \ - k17,k18,k19,k1A,k1B,k1C,k1D, \ - k28,k29,k2A,k2B,k2C,k2D, \ - k37,k38,k39,k3A,k3B,k3C,k3D, \ - k49,k4A,k4B,k4C,k4D, \ - k57,k58, \ - k59,k47,k48, \ - k5C,k5B,k5A ) \ - \ - /* matrix positions */ \ - { \ - { k00, k10, k20, k30, k40, KC_NO }, \ - { k01, k11, k21, k31, k41, k51 }, \ - { k02, k12, k22, k32, k42, k52 }, \ - { k03, k13, k23, k33, k43, k53 }, \ - { k04, k14, k24, k34, k44, k54 }, \ - { k05, k15, k25, k35, k45, k55 }, \ - { k06, k16, KC_NO, k36, k46, k56 }, \ - \ - { k07, k17, KC_NO, k37, k47, k57 }, \ - { k08, k18, k28, k38, k48, k58 }, \ - { k09, k19, k29, k39, k49, k59 }, \ - { k0A, k1A, k2A, k3A, k4A, k5A }, \ - { k0B, k1B, k2B, k3B, k4B, k5B }, \ - { k0C, k1C, k2C, k3C, k4C, k5C }, \ - { k0D, k1D, k2D, k3D, k4D, KC_NO } \ - } - -#endif diff --git a/keyboards/ergodox80/ergodox80/i2cmaster.h b/keyboards/ergodox80/ergodox80/i2cmaster.h deleted file mode 100644 index 3917b9e6c..000000000 --- a/keyboards/ergodox80/ergodox80/i2cmaster.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef _I2CMASTER_H -#define _I2CMASTER_H 1 -/************************************************************************* -* Title: C include file for the I2C master interface -* (i2cmaster.S or twimaster.c) -* Author: Peter Fleury http://jump.to/fleury -* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 -* Target: any AVR device -* Usage: see Doxygen manual -**************************************************************************/ - -#ifdef DOXYGEN -/** - @defgroup pfleury_ic2master I2C Master library - @code #include @endcode - - @brief I2C (TWI) Master Software Library - - Basic routines for communicating with I2C slave devices. This single master - implementation is limited to one bus master on the I2C bus. - - This I2c library is implemented as a compact assembler software implementation of the I2C protocol - which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). - Since the API for these two implementations is exactly the same, an application can be linked either against the - software I2C implementation or the hardware I2C implementation. - - Use 4.7k pull-up resistor on the SDA and SCL pin. - - Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module - i2cmaster.S to your target when using the software I2C implementation ! - - Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion. - - @note - The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted - to GNU assembler and AVR-GCC C call interface. - Replaced the incorrect quarter period delays found in AVR300 with - half period delays. - - @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury - - @par API Usage Example - The following code shows typical usage of this library, see example test_i2cmaster.c - - @code - - #include - - - #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet - - int main(void) - { - unsigned char ret; - - i2c_init(); // initialize I2C library - - // write 0x75 to EEPROM address 5 (Byte Write) - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - i2c_write(0x05); // write address = 5 - i2c_write(0x75); // write value 0x75 to EEPROM - i2c_stop(); // set stop conditon = release bus - - - // read previously written value back from EEPROM address 5 - i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode - - i2c_write(0x05); // write address = 5 - i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode - - ret = i2c_readNak(); // read one byte from EEPROM - i2c_stop(); - - for(;;); - } - @endcode - -*/ -#endif /* DOXYGEN */ - -/**@{*/ - -#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 -#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" -#endif - -#include - -/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_READ 1 - -/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */ -#define I2C_WRITE 0 - - -/** - @brief initialize the I2C master interace. Need to be called only once - @param void - @return none - */ -extern void i2c_init(void); - - -/** - @brief Terminates the data transfer and releases the I2C bus - @param void - @return none - */ -extern void i2c_stop(void); - - -/** - @brief Issues a start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_start(unsigned char addr); - - -/** - @brief Issues a repeated start condition and sends address and transfer direction - - @param addr address and transfer direction of I2C device - @retval 0 device accessible - @retval 1 failed to access device - */ -extern unsigned char i2c_rep_start(unsigned char addr); - - -/** - @brief Issues a start condition and sends address and transfer direction - - If device is busy, use ack polling to wait until device ready - @param addr address and transfer direction of I2C device - @return none - */ -extern void i2c_start_wait(unsigned char addr); - - -/** - @brief Send one byte to I2C device - @param data byte to be transfered - @retval 0 write successful - @retval 1 write failed - */ -extern unsigned char i2c_write(unsigned char data); - - -/** - @brief read one byte from the I2C device, request more data from device - @return byte read from I2C device - */ -extern unsigned char i2c_readAck(void); - -/** - @brief read one byte from the I2C device, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_readNak(void); - -/** - @brief read one byte from the I2C device - - Implemented as a macro, which calls either i2c_readAck or i2c_readNak - - @param ack 1 send ack, request more data from device
- 0 send nak, read is followed by a stop condition - @return byte read from I2C device - */ -extern unsigned char i2c_read(unsigned char ack); -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); - - -/**@}*/ -#endif diff --git a/keyboards/ergodox80/ergodox80/matrix.c b/keyboards/ergodox80/ergodox80/matrix.c deleted file mode 100644 index c352924b5..000000000 --- a/keyboards/ergodox80/ergodox80/matrix.c +++ /dev/null @@ -1,382 +0,0 @@ -/* - -Note for ErgoDox EZ customizers: Here be dragons! -This is not a file you want to be messing with. -All of the interesting stuff for you is under keymaps/ :) -Love, Erez - -Copyright 2013 Oleg Kostyuk - -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 "wait.h" -#include "action_layer.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "ergodox80.h" -#include "i2cmaster.h" -#ifdef DEBUG_MATRIX_SCAN_RATE -#include "timer.h" -#endif - -/* - * This constant define not debouncing time in msecs, but amount of matrix - * scan loops which should be made to get stable debounced results. - * - * On Ergodox matrix scan rate is relatively low, because of slow I2C. - * Now it's only 317 scans/second, or about 3.15 msec/scan. - * According to Cherry specs, debouncing time is 5 msec. - * - * And so, there is no sense to have DEBOUNCE higher than 2. - */ - -#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(uint8_t row); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - -static uint8_t mcp23018_reset_loop; - -#ifdef DEBUG_MATRIX_SCAN_RATE -uint32_t matrix_timer; -uint32_t matrix_scan_count; -#endif - - -__attribute__ ((weak)) -void matrix_init_user(void) {} - -__attribute__ ((weak)) -void matrix_scan_user(void) {} - -__attribute__ ((weak)) -void matrix_init_kb(void) { - matrix_init_user(); -} - -__attribute__ ((weak)) -void matrix_scan_kb(void) { - matrix_scan_user(); -} - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - // initialize row and col - - mcp23018_status = init_mcp23018(); - - - 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; - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_timer = timer_read32(); - matrix_scan_count = 0; -#endif - - matrix_init_kb(); - -} - -void matrix_power_up(void) { - mcp23018_status = init_mcp23018(); - - 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; - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_timer = timer_read32(); - matrix_scan_count = 0; -#endif - -} - -uint8_t matrix_scan(void) -{ - if (mcp23018_status) { // if there was an error - if (++mcp23018_reset_loop == 0) { - // since mcp23018_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 - print("trying to reset mcp23018\n"); - mcp23018_status = init_mcp23018(); - if (mcp23018_status) { - print("left side not responding\n"); - } else { - print("left side attached\n"); - ergodox_blink_all_leds(); - } - } - } - -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_scan_count++; - - uint32_t timer_now = timer_read32(); - if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) { - print("matrix scan frequency: "); - pdec(matrix_scan_count); - print("\n"); - - matrix_timer = timer_now; - matrix_scan_count = 0; - } -#endif - - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - wait_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(i); - 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) { - wait_us(1); - // this should be wait_ms(1) but has been left as-is at EZ's request - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } - } - - matrix_scan_quantum(); - - return 1; -} - -bool matrix_is_modified(void) -{ - if (debouncing) return false; - return true; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1< http://jump.to/fleury -* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 -* Target: any AVR device with hardware TWI -* Usage: API compatible with I2C Software Library i2cmaster.h -**************************************************************************/ -#include -#include - -#include - - -/* define CPU frequency in Mhz here if not defined in Makefile */ -#ifndef F_CPU -#define F_CPU 16000000UL -#endif - -/* I2C clock in Hz */ -#define SCL_CLOCK 400000L - - -/************************************************************************* - Initialization of the I2C bus interface. Need to be called only once -*************************************************************************/ -void i2c_init(void) -{ - /* initialize TWI clock - * minimal values in Bit Rate Register (TWBR) and minimal Prescaler - * bits in the TWI Status Register should give us maximal possible - * I2C bus speed - about 444 kHz - * - * for more details, see 20.5.2 in ATmega16/32 secification - */ - - TWSR = 0; /* no prescaler */ - TWBR = 10; /* must be >= 10 for stable operation */ - -}/* i2c_init */ - - -/************************************************************************* - Issues a start condition and sends address and transfer direction. - return 0 = device accessible, 1= failed to access device -*************************************************************************/ -unsigned char i2c_start(unsigned char address) -{ - uint8_t twst; - - // send START condition - TWCR = (1<= 0: - if section['name'] == 'layout_config': - config.update(loads("\n".join( - section['code_lines'] - ))) - elif section['sub_name'].startswith('layer'): - layer_name = section['sub_name'] - config['layer_lines'][layer_name] = section['code_lines'] - - reset_section() - - def amend_section(line_index, line): - section['end_line'] = line_index - section['code_lines'].append(line) - - config = DEFAULT_CONFIG.copy() - config.update({ - 'layer_lines': collections.OrderedDict(), - 'macro_ids': {'UM'}, - 'unicode_macros': {}, - }) - - section = {} - reset_section() - - with io.open(path, encoding="utf-8") as fh: - for i, line in enumerate(fh): - if line.startswith("#"): - start_section(i, line) - elif line.startswith(" "): - amend_section(i, line[4:]) - else: - # TODO: maybe parse description - pass - - end_section() - assert 'layout' in config - return config - -# header file parsing - -IF0_RE = re.compile(r""" - ^ - #if 0 - $.*? - #endif -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -COMMENT_RE = re.compile(r""" - /\* - .*? - \*/" -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def read_header_file(path): - with io.open(path, encoding="utf-8") as fh: - data = fh.read() - data, _ = COMMENT_RE.subn("", data) - data, _ = IF0_RE.subn("", data) - return data - - -def regex_partial(re_str_fmt, flags): - def partial(*args, **kwargs): - re_str = re_str_fmt.format(*args, **kwargs) - return re.compile(re_str, flags) - return partial - - -KEYDEF_REP = regex_partial(r""" - #define - \s - ( - (?:{}) # the prefixes - (?:\w+) # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_RE = re.compile(r""" - ( - enum - \s\w+\s - \{ - .*? # the enum content - \} - ; - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -ENUM_KEY_REP = regex_partial(r""" - ( - {} # the prefixes - \w+ # the key name - ) # capture group end -""", re.MULTILINE | re.DOTALL | re.VERBOSE) - - -def parse_keydefs(config, data): - prefix_options = "|".join(config['key_prefixes']) - keydef_re = KEYDEF_REP(prefix_options) - enum_key_re = ENUM_KEY_REP(prefix_options) - for match in keydef_re.finditer(data): - yield match.groups()[0] - - for enum_match in ENUM_RE.finditer(data): - enum = enum_match.groups()[0] - for key_match in enum_key_re.finditer(enum): - yield key_match.groups()[0] - - -def parse_valid_keys(config, out_path): - basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) - dirpaths = [] - subpaths = [] - while len(subpaths) < 6: - path = os.path.join(basepath, *subpaths) - dirpaths.append(path) - dirpaths.append(os.path.join(path, "tmk_core", "common")) - dirpaths.append(os.path.join(path, "quantum")) - subpaths.append('..') - - includes = set(config['keymaps_includes']) - includes.add("keycode.h") - - valid_keycodes = set() - for dirpath, include in it.product(dirpaths, includes): - include_path = os.path.join(dirpath, include) - if os.path.exists(include_path): - header_data = read_header_file(include_path) - valid_keycodes.update( - parse_keydefs(config, header_data) - ) - return valid_keycodes - - -# Keymap Parsing - -def iter_raw_codes(layer_lines, filler, separator): - filler_re = re.compile("[" + filler + " ]") - for line in layer_lines: - line, _ = filler_re.subn("", line.strip()) - if not line: - continue - codes = line.split(separator) - for code in codes[1:-1]: - yield code - - -def iter_indexed_codes(raw_codes, key_indexes): - key_rows = {} - key_indexes_flat = [] - - for row_index, key_indexes in enumerate(key_indexes): - for key_index in key_indexes: - key_rows[key_index] = row_index - key_indexes_flat.extend(key_indexes) - assert len(raw_codes) == len(key_indexes_flat) - for raw_code, key_index in zip(raw_codes, key_indexes_flat): - # we keep track of the row mostly for layout purposes - yield raw_code, key_index, key_rows[key_index] - - -LAYER_CHANGE_RE = re.compile(r""" - (DF|TG|MO)\(\d+\) -""", re.VERBOSE) - - -MACRO_RE = re.compile(r""" - M\(\w+\) -""", re.VERBOSE) - - -UNICODE_RE = re.compile(r""" - U[0-9A-F]{4} -""", re.VERBOSE) - - -NON_CODE = re.compile(r""" - ^[^A-Z0-9_]$ -""", re.VERBOSE) - - -def parse_uni_code(raw_code): - macro_id = "UC_" + ( - unicodedata.name(raw_code) - .replace(" ", "_") - .replace("-", "_") - ) - code = "M({})".format(macro_id) - uc_hex = "{:04X}".format(ord(raw_code)) - return code, macro_id, uc_hex - - -def parse_key_code(raw_code, key_prefixes, valid_keycodes): - if raw_code in valid_keycodes: - return raw_code - - for prefix in key_prefixes: - code = prefix + raw_code - if code in valid_keycodes: - return code - - -def parse_code(raw_code, key_prefixes, valid_keycodes): - if not raw_code: - return 'KC_TRNS', None, None - - if LAYER_CHANGE_RE.match(raw_code): - return raw_code, None, None - - if MACRO_RE.match(raw_code): - macro_id = raw_code[2:-1] - return raw_code, macro_id, None - - if UNICODE_RE.match(raw_code): - hex_code = raw_code[1:] - return parse_uni_code(chr(int(hex_code, 16))) - - if NON_CODE.match(raw_code): - return parse_uni_code(raw_code) - - code = parse_key_code(raw_code, key_prefixes, valid_keycodes) - return code, None, None - - -def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): - keymap = {} - raw_codes = list(iter_raw_codes( - layer_lines, config['filler'], config['separator'] - )) - indexed_codes = iter_indexed_codes(raw_codes, key_indexes) - key_prefixes = config['key_prefixes'] - for raw_code, key_index, row_index in indexed_codes: - code, macro_id, uc_hex = parse_code( - raw_code, key_prefixes, valid_keycodes - ) - # TODO: line numbers for invalid codes - err_msg = "Could not parse key '{}' on row {}".format( - raw_code, row_index - ) - assert code is not None, err_msg - # print(repr(raw_code), repr(code), macro_id, uc_hex) - if macro_id: - config['macro_ids'].add(macro_id) - if uc_hex: - config['unicode_macros'][macro_id] = uc_hex - keymap[key_index] = (code, row_index) - return keymap - - -def parse_keymaps(config, valid_keycodes): - keymaps = collections.OrderedDict() - key_indexes = config.get( - 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] - ) - # TODO: maybe validate key_indexes - - for layer_name, layer_lines, in config['layer_lines'].items(): - keymaps[layer_name] = parse_keymap( - config, key_indexes, layer_lines, valid_keycodes - ) - return keymaps - -# keymap.c output - -USERCODE = """ -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - -}; - -// Runs constantly in the background, in a loop. -void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - case L1: - ergodox_right_led_1_on(); - break; - case L2: - ergodox_right_led_2_on(); - break; - case L3: - ergodox_right_led_3_on(); - break; - case L4: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - break; - case L5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - break; - // case L6: - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - // case L7: - // ergodox_right_led_1_on(); - // ergodox_right_led_2_on(); - // ergodox_right_led_3_on(); - // break; - default: - ergodox_board_led_off(); - break; - } -}; -""" - -MACROCODE = """ -#define UC_MODE_WIN 0 -#define UC_MODE_LINUX 1 -#define UC_MODE_OSX 2 - -// TODO: allow default mode to be configured -static uint16_t unicode_mode = UC_MODE_WIN; - -uint16_t hextokeycode(uint8_t hex) {{ - if (hex == 0x0) {{ - return KC_P0; - }} - if (hex < 0xA) {{ - return KC_P1 + (hex - 0x1); - }} - return KC_A + (hex - 0xA); -}} - -void unicode_action_function(uint16_t hi, uint16_t lo) {{ - switch (unicode_mode) {{ - case UC_MODE_WIN: - register_code(KC_LALT); - - register_code(KC_PPLS); - unregister_code(KC_PPLS); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LALT); - break; - case UC_MODE_LINUX: - register_code(KC_LCTL); - register_code(KC_LSFT); - - register_code(KC_U); - unregister_code(KC_U); - - register_code(hextokeycode((hi & 0xF0) >> 4)); - unregister_code(hextokeycode((hi & 0xF0) >> 4)); - register_code(hextokeycode((hi & 0x0F))); - unregister_code(hextokeycode((hi & 0x0F))); - register_code(hextokeycode((lo & 0xF0) >> 4)); - unregister_code(hextokeycode((lo & 0xF0) >> 4)); - register_code(hextokeycode((lo & 0x0F))); - unregister_code(hextokeycode((lo & 0x0F))); - - unregister_code(KC_LCTL); - unregister_code(KC_LSFT); - break; - case UC_MODE_OSX: - break; - }} -}} - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ - if (!record->event.pressed) {{ - return MACRO_NONE; - }} - // MACRODOWN only works in this function - switch(id) {{ - case UM: - unicode_mode = (unicode_mode + 1) % 2; - break; -{macro_cases} -{unicode_macro_cases} - default: - break; - }} - return MACRO_NONE; -}}; -""" - - -UNICODE_MACRO_TEMPLATE = """ -case {macro_id}: - unicode_action_function(0x{hi:02x}, 0x{lo:02x}); - break; -""".strip() - - -def unicode_macro_cases(config): - for macro_id, uc_hex in config['unicode_macros'].items(): - hi = int(uc_hex, 16) >> 8 - lo = int(uc_hex, 16) & 0xFF - unimacro_keys = ", ".join( - "T({})".format( - "KP_" + digit if digit.isdigit() else digit - ) for digit in uc_hex - ) - yield UNICODE_MACRO_TEMPLATE.format( - macro_id=macro_id, hi=hi, lo=lo - ) - - -def iter_keymap_lines(keymap, row_indents=None): - col_widths = {} - col = 0 - # first pass, figure out the column widths - prev_row_index = None - for code, row_index in keymap.values(): - if row_index != prev_row_index: - col = 0 - if row_indents: - col = row_indents[row_index] - col_widths[col] = max(len(code), col_widths.get(col, 0)) - prev_row_index = row_index - col += 1 - - # second pass, yield the cell values - col = 0 - prev_row_index = None - for key_index in sorted(keymap): - code, row_index = keymap[key_index] - if row_index != prev_row_index: - col = 0 - yield "\n" - if row_indents: - for indent_col in range(row_indents[row_index]): - pad = " " * (col_widths[indent_col] - 4) - yield (" /*-*/" + pad) - col = row_indents[row_index] - else: - yield pad - yield " {}".format(code) - if key_index < len(keymap) - 1: - yield "," - # This will be yielded on the next iteration when - # we know that we're not at the end of a line. - pad = " " * (col_widths[col] - len(code)) - prev_row_index = row_index - col += 1 - - -def iter_keymap_parts(config, keymaps): - # includes - for include_path in config['keymaps_includes']: - yield '#include "{}"\n'.format(include_path) - - yield "\n" - - # definitions - for i, macro_id in enumerate(sorted(config['macro_ids'])): - yield "#define {} {}\n".format(macro_id, i) - - yield "\n" - - for i, layer_name in enumerate(config['layer_lines']): - yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) - - yield "\n" - - # keymaps - yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" - - for i, layer_name in enumerate(config['layer_lines']): - # comment - layer_lines = config['layer_lines'][layer_name] - prefixed_lines = " * " + " * ".join(layer_lines) - yield "/*\n{} */\n".format(prefixed_lines) - - # keymap codes - keymap = keymaps[layer_name] - row_indents = ROW_INDENTS.get(config['layout']) - keymap_lines = "".join(iter_keymap_lines(keymap, row_indents)) - yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) - - yield "};\n\n" - - # no idea what this is for - yield "const uint16_t PROGMEM fn_actions[] = {};\n" - - # macros - yield MACROCODE.format( - macro_cases="", - unicode_macro_cases="\n".join(unicode_macro_cases(config)), - ) - - # TODO: dynamically create blinking lights - yield USERCODE - - -def main(argv=sys.argv[1:]): - if not argv or '-h' in argv or '--help' in argv: - print(__doc__) - return 0 - - in_path = os.path.abspath(argv[0]) - if not os.path.exists(in_path): - print("No such file '{}'".format(in_path)) - return 1 - - if len(argv) > 1: - out_path = os.path.abspath(argv[1]) - else: - dirname = os.path.dirname(in_path) - out_path = os.path.join(dirname, "keymap.c") - - config = parse_config(in_path) - valid_keys = parse_valid_keys(config, out_path) - keymaps = parse_keymaps(config, valid_keys) - - with io.open(out_path, mode="w", encoding="utf-8") as fh: - for part in iter_keymap_parts(config, keymaps): - fh.write(part) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/keyboards/ergodox80/ergodox80/util/readme.md b/keyboards/ergodox80/ergodox80/util/readme.md deleted file mode 100644 index 26c5e5d99..000000000 --- a/keyboards/ergodox80/ergodox80/util/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# ErgoDox EZ Utilities - -The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option. diff --git a/keyboards/ergodox80/readme.md b/keyboards/ergodox80/readme.md deleted file mode 100644 index b5c09f922..000000000 --- a/keyboards/ergodox80/readme.md +++ /dev/null @@ -1,6 +0,0 @@ -# Ergodox 80 key support - -This is based on the ergodox-ez qmk firmware but is for ergodoxes with 80 keys. - - - diff --git a/keyboards/ergodox80/rules.mk b/keyboards/ergodox80/rules.mk deleted file mode 100644 index ac63d4eff..000000000 --- a/keyboards/ergodox80/rules.mk +++ /dev/null @@ -1,28 +0,0 @@ -#---------------------------------------------------------------------------- -# On command line: -# -# make = Make software. -# -# make clean = Clean out built project files. -# -# That's pretty much all you need. To compile, always go make clean, -# followed by make. -# -# For advanced users only: -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -#---------------------------------------------------------------------------- -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) -EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= no # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ -SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -MIDI_ENABLE ?= no # MIDI controls -UNICODE_ENABLE ?= yes # Unicode