浏览代码

Add support for backlight

led_matrix
Wraul 11 年前
父节点
当前提交
1eb8523e95
共有 13 个文件被更改,包括 213 次插入0 次删除
  1. 1
    0
      README.md
  2. 5
    0
      common.mk
  3. 21
    0
      common/action.c
  4. 18
    0
      common/action_code.h
  5. 77
    0
      common/backlight.c
  6. 41
    0
      common/backlight.h
  7. 7
    0
      common/command.c
  8. 4
    0
      common/eeconfig.c
  9. 5
    0
      common/eeconfig.h
  10. 5
    0
      common/keyboard.c
  11. 7
    0
      common/suspend.c
  12. 1
    0
      doc/build.md
  13. 21
    0
      doc/keymap.md

+ 1
- 0
README.md 查看文件

* Virtual DIP Switch - Configurations stored EEPROM(Boot Magic) * Virtual DIP Switch - Configurations stored EEPROM(Boot Magic)
* Locking CapsLock - Mechanical switch support for CapsLock * Locking CapsLock - Mechanical switch support for CapsLock
* Breathing Sleep LED - Sleep indicator with charm during USB suspend * Breathing Sleep LED - Sleep indicator with charm during USB suspend
* Backlight - Control backlight levels




Projects Projects

+ 5
- 0
common.mk 查看文件

OPT_DEFS += -DNO_SUSPEND_POWER_DOWN OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
endif endif


ifdef BACKLIGHT_ENABLE
SRC += $(COMMON_DIR)/backlight.c
OPT_DEFS += -DBACKLIGHT_ENABLE
endif



# Search Path # Search Path
VPATH += $(TOP_DIR)/common VPATH += $(TOP_DIR)/common

+ 21
- 0
common/action.c 查看文件

#include "mousekey.h" #include "mousekey.h"
#include "command.h" #include "command.h"
#include "led.h" #include "led.h"
#include "backlight.h"
#include "action_layer.h" #include "action_layer.h"
#include "action_tapping.h" #include "action_tapping.h"
#include "action_oneshot.h" #include "action_oneshot.h"
case ACT_MACRO: case ACT_MACRO:
action_macro_play(action_get_macro(record, action.func.id, action.func.opt)); action_macro_play(action_get_macro(record, action.func.id, action.func.opt));
break; break;
#endif
#ifdef BACKLIGHT_ENABLE
case ACT_BACKLIGHT:
if (!event.pressed) {
switch (action.backlight.id) {
case BACKLIGHT_INCREASE:
backlight_increase();
break;
case BACKLIGHT_DECREASE:
backlight_decrease();
break;
case BACKLIGHT_TOGGLE:
backlight_toggle();
break;
case BACKLIGHT_STEP:
backlight_step();
break;
}
}
break;
#endif #endif
case ACT_COMMAND: case ACT_COMMAND:
break; break;

+ 18
- 0
common/action_code.h 查看文件

* 1100|opt | id(8) Macro play? * 1100|opt | id(8) Macro play?
* 1100|1111| id(8) Macro record? * 1100|1111| id(8) Macro record?
* *
* ACT_BACKLIGHT(1101):
* 1110|xxxx| id(8) Backlight commands
*
* ACT_COMMAND(1110): * ACT_COMMAND(1110):
* 1110|opt | id(8) Built-in Command exec * 1110|opt | id(8) Built-in Command exec
* *
ACT_LAYER_TAP1 = 0b1011, ACT_LAYER_TAP1 = 0b1011,
/* Extensions */ /* Extensions */
ACT_MACRO = 0b1100, ACT_MACRO = 0b1100,
ACT_BACKLIGHT = 0b1101,
ACT_COMMAND = 0b1110, ACT_COMMAND = 0b1110,
ACT_FUNCTION = 0b1111 ACT_FUNCTION = 0b1111
}; };
uint8_t page :2; uint8_t page :2;
uint8_t kind :4; uint8_t kind :4;
} usage; } usage;
struct action_backlight {
uint8_t id :8;
} backlight;
struct action_command { struct action_command {
uint8_t id :8; uint8_t id :8;
uint8_t opt :4; uint8_t opt :4;
/* /*
* Extensions * Extensions
*/ */
enum backlight_id {
BACKLIGHT_INCREASE = 0,
BACKLIGHT_DECREASE = 1,
BACKLIGHT_TOGGLE = 2,
BACKLIGHT_STEP = 3,
};
/* Macro */ /* Macro */
#define ACTION_MACRO(id) ACTION(ACT_MACRO, (id)) #define ACTION_MACRO(id) ACTION(ACT_MACRO, (id))
#define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id)) #define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id))
#define ACTION_MACRO_OPT(id, opt) ACTION(ACT_MACRO, (opt)<<8 | (id)) #define ACTION_MACRO_OPT(id, opt) ACTION(ACT_MACRO, (opt)<<8 | (id))
/* Backlight */
#define ACTION_BACKLIGHT_INCREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_INCREASE)
#define ACTION_BACKLIGHT_DECREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_DECREASE)
#define ACTION_BACKLIGHT_TOGGLE() ACTION(ACT_BACKLIGHT, BACKLIGHT_TOGGLE)
#define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP)
/* Command */ /* Command */
#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) #define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr))
/* Function */ /* Function */

+ 77
- 0
common/backlight.c 查看文件

/*
Copyright 2013 Mathias Andersson <[email protected]>

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 "backlight.h"
#include "eeconfig.h"
#include "debug.h"

backlight_config_t backlight_config;

void backlight_init(void)
{
/* check signature */
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
backlight_config.raw = eeconfig_read_backlight();
backlight_set(backlight_config.enable ? backlight_config.level : 0);
}

void backlight_increase(void)
{
if(backlight_config.level < BACKLIGHT_LEVELS)
{
backlight_config.level++;
backlight_config.enable = 1;
eeconfig_write_backlight(backlight_config.raw);
}
dprintf("backlight increase: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
}

void backlight_decrease(void)
{
if(backlight_config.level > 0)
{
backlight_config.level--;
backlight_config.enable = !!backlight_config.level;
eeconfig_write_backlight(backlight_config.raw);
}
dprintf("backlight decrease: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
}

void backlight_toggle(void)
{
backlight_config.enable ^= 1;
eeconfig_write_backlight(backlight_config.raw);
dprintf("backlight toggle: %u\n", backlight_config.enable);
backlight_set(backlight_config.enable ? backlight_config.level : 0);
}

void backlight_step(void)
{
backlight_config.level++;
if(backlight_config.level > BACKLIGHT_LEVELS)
{
backlight_config.level = 0;
}
backlight_config.enable = !!backlight_config.level;
eeconfig_write_backlight(backlight_config.raw);
dprintf("backlight step: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
}

+ 41
- 0
common/backlight.h 查看文件

/*
Copyright 2013 Mathias Andersson <[email protected]>

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 BACKLIGHT_H
#define BACKLIGHT_H

#include <stdint.h>
#include <stdbool.h>

typedef union {
uint8_t raw;
struct {
bool enable:1;
uint8_t level:7;
};
} backlight_config_t;

void backlight_init(void);

void backlight_increase(void);
void backlight_decrease(void);
void backlight_toggle(void);
void backlight_step(void);

void backlight_set(uint8_t level);

#endif

+ 7
- 0
common/command.c 查看文件

#include "sleep_led.h" #include "sleep_led.h"
#include "led.h" #include "led.h"
#include "command.h" #include "command.h"
#include "backlight.h"


#ifdef MOUSEKEY_ENABLE #ifdef MOUSEKEY_ENABLE
#include "mousekey.h" #include "mousekey.h"
print(".no_gui: "); print_dec(kc.no_gui); print("\n"); print(".no_gui: "); print_dec(kc.no_gui); print("\n");
print(".swap_grave_esc: "); print_dec(kc.swap_grave_esc); print("\n"); print(".swap_grave_esc: "); print_dec(kc.swap_grave_esc); print("\n");
print(".swap_backslash_backspace: "); print_dec(kc.swap_backslash_backspace); print("\n"); print(".swap_backslash_backspace: "); print_dec(kc.swap_backslash_backspace); print("\n");

backlight_config_t bc;
bc.raw = eeconfig_read_backlight();
print("backlight_config.raw: "); print_hex8(bc.raw); print("\n");
print(".enable: "); print_dec(bc.enable); print("\n");
print(".level: "); print_dec(bc.level); print("\n");
} }
#endif #endif



+ 4
- 0
common/eeconfig.c 查看文件

eeprom_write_byte(EECONFIG_DEFAULT_LAYER, 0); eeprom_write_byte(EECONFIG_DEFAULT_LAYER, 0);
eeprom_write_byte(EECONFIG_KEYMAP, 0); eeprom_write_byte(EECONFIG_KEYMAP, 0);
eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0); eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0);
eeprom_write_byte(EECONFIG_BACKLIGHT, 0);
} }


void eeconfig_enable(void) void eeconfig_enable(void)


uint8_t eeconfig_read_keymap(void) { return eeprom_read_byte(EECONFIG_KEYMAP); } uint8_t eeconfig_read_keymap(void) { return eeprom_read_byte(EECONFIG_KEYMAP); }
void eeconfig_write_keymap(uint8_t val) { eeprom_write_byte(EECONFIG_KEYMAP, val); } void eeconfig_write_keymap(uint8_t val) { eeprom_write_byte(EECONFIG_KEYMAP, val); }

uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); }
void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); }

+ 5
- 0
common/eeconfig.h 查看文件

#define EECONFIG_H #define EECONFIG_H


#include <stdint.h> #include <stdint.h>
#include <stdbool.h>




#define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEED #define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEED
#define EECONFIG_DEFAULT_LAYER (uint8_t *)3 #define EECONFIG_DEFAULT_LAYER (uint8_t *)3
#define EECONFIG_KEYMAP (uint8_t *)4 #define EECONFIG_KEYMAP (uint8_t *)4
#define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5 #define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5
#define EECONFIG_BACKLIGHT (uint8_t *)6




/* debug bit */ /* debug bit */
uint8_t eeconfig_read_keymap(void); uint8_t eeconfig_read_keymap(void);
void eeconfig_write_keymap(uint8_t val); void eeconfig_write_keymap(uint8_t val);


uint8_t eeconfig_read_backlight(void);
void eeconfig_write_backlight(uint8_t val);

#endif #endif

+ 5
- 0
common/keyboard.c 查看文件

#include "bootmagic.h" #include "bootmagic.h"
#include "eeconfig.h" #include "eeconfig.h"
#include "mousekey.h" #include "mousekey.h"
#include "backlight.h"




#ifdef MATRIX_HAS_GHOST #ifdef MATRIX_HAS_GHOST
#ifdef BOOTMAGIC_ENABLE #ifdef BOOTMAGIC_ENABLE
bootmagic(); bootmagic();
#endif #endif

#ifdef BACKLIGHT_ENABLE
backlight_init();
#endif
} }


/* /*

+ 7
- 0
common/suspend.c 查看文件

#include "suspend.h" #include "suspend.h"
#include "matrix.h" #include "matrix.h"
#include "action.h" #include "action.h"
#include "backlight.h"




void suspend_power_down(void) void suspend_power_down(void)
{ {
#ifdef BACKLIGHT_ENABLE
backlight_set(0);
#endif
#ifndef NO_SUSPEND_POWER_DOWN #ifndef NO_SUSPEND_POWER_DOWN
// Enable watchdog to wake from MCU sleep // Enable watchdog to wake from MCU sleep
cli(); cli();
// clear matrix and keyboard state // clear matrix and keyboard state
matrix_init(); matrix_init();
clear_keyboard(); clear_keyboard();
#ifdef BACKLIGHT_ENABLE
backlight_init();
#endif
} }


#ifndef NO_SUSPEND_POWER_DOWN #ifndef NO_SUSPEND_POWER_DOWN

+ 1
- 0
doc/build.md 查看文件

COMMAND_ENABLE = yes # Commands for debug and configuration COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA #NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
#BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality


### 3. Programmer ### 3. Programmer
Optional. Set proper command for your controller, bootloader and programmer. This command can be used with `make program`. Not needed if you use `FLIP`, `dfu-programmer` or `Teesy Loader`. Optional. Set proper command for your controller, bootloader and programmer. This command can be used with `make program`. Not needed if you use `FLIP`, `dfu-programmer` or `Teesy Loader`.

+ 21
- 0
doc/keymap.md 查看文件







### 2.5 Backlight Action
These actions control the backlight.

#### 2.5.1 Change backlight level
Increase backlight level.

ACTION_BACKLIGHT_INCREASE()

Decrease backlight level.

ACTION_BACKLIGHT_DECREASE()

Step through backlight levels.

ACTION_BACKLIGHT_STEP()

#### 2.5.2 Turn on / off backlight
Turn the backlight on and off without changing level.

ACTION_BACKLIGHT_TOGGLE()





## 3. Layer switching Example ## 3. Layer switching Example