fantastic60: Implement simple controlling of RGB LED
This commit is contained in:
parent
7f0496bc81
commit
ce4722ef25
@ -52,7 +52,8 @@ SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c \
|
||||
backlight.c \
|
||||
ledmap.c
|
||||
ledmap.c \
|
||||
fantastic.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
@ -135,7 +136,7 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
KEYMAP_IN_EEPROM_ENABLE = yes # Read keymap from eeprom
|
||||
#KEYMAP_SECTION_ENABLE = yes # Fixed address keymap for keymap editor
|
||||
SOFTPWM_LED_ENABLE = yes # Enable SoftPWM to drive backlight
|
||||
FADING_LED_ENABLE = yes # Enable fading backlight
|
||||
#FADING_LED_ENABLE = yes # Enable fading backlight
|
||||
BREATHING_LED_ENABLE = yes # Enable breathing backlight
|
||||
LEDMAP_ENABLE = yes # Enable LED mapping
|
||||
LEDMAP_IN_EEPROM_ENABLE = yes # Read LED mapping from eeprom
|
||||
|
@ -52,7 +52,8 @@ SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c \
|
||||
backlight.c \
|
||||
ledmap.c
|
||||
ledmap.c \
|
||||
fantastic.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
|
@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include <avr/interrupt.h>
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6C4E
|
||||
@ -51,8 +52,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#else
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
#endif
|
||||
#define BACKLIGHT_CUSTOM
|
||||
|
||||
#define LED_COUNT 2
|
||||
/* number of leds */
|
||||
#define LED_COUNT 3
|
||||
|
||||
/* ledmap in eeprom */
|
||||
#define EECONFIG_LEDMAP_IN_EEPROM 8
|
||||
@ -95,8 +98,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_ONESHOT
|
||||
#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif
|
||||
|
69
keyboard/fantastic60/fantastic.c
Normal file
69
keyboard/fantastic60/fantastic.c
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
Copyright 2014 Kai Ryu <kai1103@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 "fantastic.h"
|
||||
|
||||
void shift_register_init(void)
|
||||
{
|
||||
SR_DDR |= (1<<SR_CLK_BIT | 1<<SR_DATA_BIT | 1<<SR_LATCH_BIT);
|
||||
SR_PORT &= ~(1<<SR_CLK_BIT | 1<<SR_DATA_BIT | 1<<SR_LATCH_BIT);
|
||||
}
|
||||
|
||||
void shift_register_write_byte(uint8_t byte)
|
||||
{
|
||||
uint8_t i = 7;
|
||||
do {
|
||||
shift_register_data((byte >> i) & 1);
|
||||
shift_register_clk();
|
||||
} while (i--);
|
||||
shift_register_latch();
|
||||
}
|
||||
|
||||
void shift_register_write_word(uint16_t word)
|
||||
{
|
||||
uint8_t i = 15;
|
||||
do {
|
||||
shift_register_data((word >> i) & 1);
|
||||
shift_register_clk();
|
||||
} while (i--);
|
||||
shift_register_latch();
|
||||
}
|
||||
|
||||
inline
|
||||
void shift_register_clk(void)
|
||||
{
|
||||
SR_PORT |= (1<<SR_CLK_BIT);
|
||||
SR_PORT &= ~(1<<SR_CLK_BIT);
|
||||
}
|
||||
|
||||
inline
|
||||
void shift_register_data(uint8_t bit)
|
||||
{
|
||||
if (bit) {
|
||||
SR_PORT |= (1<<SR_DATA_BIT);
|
||||
}
|
||||
else {
|
||||
SR_PORT &= ~(1<<SR_DATA_BIT);
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void shift_register_latch(void)
|
||||
{
|
||||
SR_PORT &= ~(1<<SR_LATCH_BIT);
|
||||
SR_PORT |= (1<<SR_LATCH_BIT);
|
||||
}
|
37
keyboard/fantastic60/fantastic.h
Normal file
37
keyboard/fantastic60/fantastic.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
Copyright 2014 Kai Ryu <kai1103@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 FANTASTIC_H
|
||||
#define FANTASTIC_H
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define SR_PORT PORTF
|
||||
#define SR_DDR DDRF
|
||||
#define SR_CLK_BIT PF6
|
||||
#define SR_DATA_BIT PF5
|
||||
#define SR_LATCH_BIT PF4
|
||||
|
||||
void shift_register_init(void);
|
||||
void shift_register_write_byte(uint8_t byte);
|
||||
void shift_register_write_word(uint16_t word);
|
||||
void shift_register_clk(void);
|
||||
void shift_register_data(uint8_t bit);
|
||||
void shift_register_latch(void);
|
||||
|
||||
#endif
|
@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "keymap_common.h"
|
||||
|
||||
/* translates key to keycode */
|
||||
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
|
||||
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
|
||||
{
|
||||
#ifndef KEYMAP_IN_EEPROM_ENABLE
|
||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
|
||||
|
@ -17,31 +17,38 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
#include "ledmap.h"
|
||||
#include "fantastic.h"
|
||||
|
||||
#ifdef LEDMAP_ENABLE
|
||||
|
||||
static const uint8_t ledmaps[LED_COUNT] PROGMEM = {
|
||||
static const uint16_t ledmaps[LED_COUNT] PROGMEM = {
|
||||
[0] = LEDMAP_CAPS_LOCK | LEDMAP_BACKLIGHT, // CapsLock
|
||||
[1] = LEDMAP_BACKLIGHT, // Backlight
|
||||
[2] = LEDMAP_BACKLIGHT, // RGB Light
|
||||
};
|
||||
|
||||
uint8_t ledmap_get_code(uint8_t index)
|
||||
ledmap_t ledmap_get_code(uint8_t index)
|
||||
{
|
||||
return pgm_read_byte(&ledmaps[index]);
|
||||
return (ledmap_t) { .code = pgm_read_word(&ledmaps[index]) };
|
||||
}
|
||||
|
||||
/* LED pin configration
|
||||
* CapsLock: PC7
|
||||
* NumLock: PE6
|
||||
* Logo: PC6
|
||||
* Backlight: PB7
|
||||
* CapsLock: PE6
|
||||
* Backlight: PF7
|
||||
* RGB R: PE2
|
||||
* RGB G: PC6
|
||||
* RGB B: PC7
|
||||
*/
|
||||
void ledmap_led_init(void)
|
||||
{
|
||||
DDRE |= (1<<PE6);
|
||||
PORTE |= (1<<PE6);
|
||||
DDRE |= (1<<PE6 | 1<<PE2);
|
||||
PORTE |= (1<<PE6 | 1<<PE2);
|
||||
DDRF |= (1<<PF7);
|
||||
PORTF &= ~(1<<PF7);
|
||||
PORTF |= (1<<PF7);
|
||||
DDRC |= (1<<PC7 | 1<<PC6);
|
||||
PORTF |= (1<<PC7 | 1<<PC6);
|
||||
shift_register_init();
|
||||
shift_register_write_word(0x0000);
|
||||
}
|
||||
|
||||
void ledmap_led_on(uint8_t index)
|
||||
@ -51,7 +58,12 @@ void ledmap_led_on(uint8_t index)
|
||||
PORTE &= ~(1<<PE6);
|
||||
break;
|
||||
case 1:
|
||||
PORTF |= (1<<PF7);
|
||||
PORTF &= ~(1<<PF7);
|
||||
break;
|
||||
case 2:
|
||||
PORTE &= ~(1<<PE2);
|
||||
PORTC &= ~(1<<PC7 | 1<<PC6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,7 +74,11 @@ void ledmap_led_off(uint8_t index)
|
||||
PORTE |= (1<<PE6);
|
||||
break;
|
||||
case 1:
|
||||
PORTF &= ~(1<<PF7);
|
||||
PORTF |= (1<<PF7);
|
||||
break;
|
||||
case 2:
|
||||
PORTE |= (1<<PE2);
|
||||
PORTC |= (1<<PC7 | 1<<PC6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user