diff options
Diffstat (limited to 'keyboards/winkeyless')
-rw-r--r-- | keyboards/winkeyless/bface/backlight_ps2avrGB.c | 94 | ||||
-rw-r--r-- | keyboards/winkeyless/bface/backlight_ps2avrGB.h | 35 | ||||
-rw-r--r-- | keyboards/winkeyless/bface/bface.c | 94 | ||||
-rw-r--r-- | keyboards/winkeyless/bface/i2c.c | 104 | ||||
-rw-r--r-- | keyboards/winkeyless/bface/i2c.h | 25 | ||||
-rw-r--r-- | keyboards/winkeyless/bface/rules.mk | 2 |
6 files changed, 69 insertions, 285 deletions
diff --git a/keyboards/winkeyless/bface/backlight_ps2avrGB.c b/keyboards/winkeyless/bface/backlight_ps2avrGB.c deleted file mode 100644 index c0f642840..000000000 --- a/keyboards/winkeyless/bface/backlight_ps2avrGB.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright 2017 Sebastian Kaim - * - * 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/>. - */ - -#ifdef BACKLIGHT_ENABLE - -#include "backlight_ps2avrGB.h" -#define sbi(reg,bit) reg |= (_BV(bit)) -#define cbi(reg,bit) reg &= (~_BV(bit)) -#define PWM10 WGM10 -#define PWM11 WGM11 -#define COM1x1 COM1B1 -#define OCR1x OCR1B - -void backlight_init_ports(void) -{ -#if BACKLIGHT_ON_STATE == 0 - backlight_off(); -#else - backlight_on(); -#endif - - // setup pwm - // this bitmagic is sourced from the original firmware - /*TCCR1B = ((TCCR1B & ~0x07) | 0x03); - TCNT1H = 0; - TCNT1L = 0; - sbi(TIMSK, TOIE1); - OCR1BH = 0; - OCR1BL = 0; - cbi(TCCR1A,PWM11); - sbi(TCCR1A,PWM10); - sbi(TCCR1A,COM1B1); - cbi(TCCR1A,COM1B0);*/ - ICR1 = 0xFFFF; - - TCCR1A = _BV(COM1x1) | _BV(WGM11); // = 0b00001010; - TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; - - backlight_init(); -} - -void backlight_set(uint8_t level) -{ - if( level == 0 ) { - backlight_off(); - } - else { - backlight_on(); - /*uint8_t pwm = get_pwm_for_brightness(level); - set_backlight_pwm(pwm); - TCCR1A |= _BV(COM1x1); - OCR1x = (level >= 2) ? 0xFFFF : 0x00FF;*/ - } -} - -#define PWM_MAX 0xFF -uint8_t get_pwm_for_brightness(uint8_t level) -{ - // we need to cast up here to allow multiplication with 0xFF. We could also use floats, but this is probably a lot faster. - uint16_t brightness = (uint16_t)level * (uint16_t)PWM_MAX / (uint16_t)BACKLIGHT_LEVELS; - return (uint8_t)brightness; -} - -void backlight_on(void) -{ - //_SFR_IO8(0x12) |= _BV(0x4); - LED_PIN |= BACKLIGHT_PORT_NUM; -} - -void backlight_off(void) -{ - //_SFR_IO8(0x12) &= ~_BV(0x4); - LED_PIN &= ~BACKLIGHT_PORT_NUM; -} - -void set_backlight_pwm(uint8_t level) { - // this does not work (yet) - //OCR1B = level; -} - -#endif // BACKLIGHT_ENABLE diff --git a/keyboards/winkeyless/bface/backlight_ps2avrGB.h b/keyboards/winkeyless/bface/backlight_ps2avrGB.h deleted file mode 100644 index d5ca90399..000000000 --- a/keyboards/winkeyless/bface/backlight_ps2avrGB.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2017 Sebastian Kaim - * - * 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/>. - */ - - -#if defined(__AVR__) -#include <avr/pgmspace.h> -#include <avr/io.h> -#include <avr/interrupt.h> -#endif -#include <stddef.h> -#include <stdlib.h> -#include "backlight.h" - -#ifndef PS2AVRGB_BACKLIGHT_H -#define PS2AVRGB_BACKLIGHT_H - -uint8_t get_pwm_for_brightness(uint8_t level); -void set_backlight_pwm(uint8_t level); -void backlight_on(void); -void backlight_off(void); - -#endif diff --git a/keyboards/winkeyless/bface/bface.c b/keyboards/winkeyless/bface/bface.c index 8422a4a40..1c83be4b8 100644 --- a/keyboards/winkeyless/bface/bface.c +++ b/keyboards/winkeyless/bface/bface.c @@ -1,30 +1,23 @@ -/* -Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com> -Copyright 2018 Sebastian Kaim <sebb@sebb767.de> - -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 "bface.h" +/* Copyright 2019 MechMerlin + * + * 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 "rgblight.h" - -#include <avr/pgmspace.h> - -#include "action_layer.h" -#include "i2c.h" +#include "i2c_master.h" #include "quantum.h" +#ifdef RGBLIGHT_ENABLE extern rgblight_config_t rgblight_config; void rgblight_set(void) { @@ -37,10 +30,59 @@ void rgblight_set(void) { } i2c_init(); - i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM); + i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100); +} +#endif + +void matrix_init_kb(void) { +#ifdef RGBLIGHT_ENABLE + if (rgblight_config.enable) { + i2c_init(); + i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100); + } +#endif + // call user level keymaps, if any + matrix_init_user(); +} + +void matrix_scan_kb(void) { +#ifdef RGBLIGHT_ENABLE + rgblight_task(); +#endif + matrix_scan_user(); + /* Nothing else for now. */ } __attribute__ ((weak)) void matrix_scan_user(void) { - rgblight_task(); +} + +void backlight_init_ports(void) { + // initialize pins D0, D1, D4 and D6 as output + setPinOutput(D0); + setPinOutput(D1); + setPinOutput(D4); + setPinOutput(D6); + + // turn backlight LEDs on + writePinHigh(D0); + writePinHigh(D1); + writePinHigh(D4); + writePinHigh(D6); +} + +void backlight_set(uint8_t level) { + if (level == 0) { + // turn backlight LEDs off + writePinLow(D0); + writePinLow(D1); + writePinLow(D4); + writePinLow(D6); + } else { + // turn backlight LEDs on + writePinHigh(D0); + writePinHigh(D1); + writePinHigh(D4); + writePinHigh(D6); + } } diff --git a/keyboards/winkeyless/bface/i2c.c b/keyboards/winkeyless/bface/i2c.c deleted file mode 100644 index c27f3e3d1..000000000 --- a/keyboards/winkeyless/bface/i2c.c +++ /dev/null @@ -1,104 +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/>. -*/ - -#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; -} diff --git a/keyboards/winkeyless/bface/i2c.h b/keyboards/winkeyless/bface/i2c.h deleted file mode 100644 index 27c9d3d05..000000000 --- a/keyboards/winkeyless/bface/i2c.h +++ /dev/null @@ -1,25 +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/>. -*/ - -#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 diff --git a/keyboards/winkeyless/bface/rules.mk b/keyboards/winkeyless/bface/rules.mk index 49b012e52..b6d172f26 100644 --- a/keyboards/winkeyless/bface/rules.mk +++ b/keyboards/winkeyless/bface/rules.mk @@ -40,7 +40,7 @@ OPT_DEFS = -DDEBUG_LEVEL=0 OPT_DEFS += -DBOOTLOADER_SIZE=2048 # custom matrix setup -SRC = i2c.c backlight_ps2avrGB.c +SRC = i2c_master.c # programming options PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex |