small code cleanup
This commit is contained in:
parent
b27fb216ef
commit
52f671c23e
3 changed files with 212 additions and 578 deletions
|
@ -1,385 +0,0 @@
|
||||||
flabbergast's TMK/ChibiOS port
|
|
||||||
==============================
|
|
||||||
2015/10/16
|
|
||||||
|
|
||||||
|
|
||||||
Build
|
|
||||||
-----
|
|
||||||
$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git
|
|
||||||
|
|
||||||
$ cd tmk_keyboard
|
|
||||||
$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
|
|
||||||
or
|
|
||||||
$ cd tmk_keyboard/tmk_core/tool/chibios
|
|
||||||
$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
|
|
||||||
|
|
||||||
$ cd tmk_keyboard/keyboard/infinity_chibios
|
|
||||||
$ make
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Chibios Configuration
|
|
||||||
---------------------
|
|
||||||
halconf.h: for HAL configuration
|
|
||||||
placed in project directory
|
|
||||||
read in chibios/os/hal/hal.mk
|
|
||||||
included in chibios/os/hal/include/hal.h
|
|
||||||
mcuconf.h: for MCU configuration
|
|
||||||
placed in project directory
|
|
||||||
included in halconf.h
|
|
||||||
|
|
||||||
|
|
||||||
Chibios Term
|
|
||||||
------------
|
|
||||||
PAL = Port Abstraction Layer
|
|
||||||
palWritePad
|
|
||||||
palReadPad
|
|
||||||
palSetPad
|
|
||||||
chibios/os/hal/include/pal.h
|
|
||||||
|
|
||||||
LLD = Low Level Driver
|
|
||||||
|
|
||||||
|
|
||||||
Makefile
|
|
||||||
--------
|
|
||||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
|
||||||
MCU_FAMILY = KINETIS
|
|
||||||
MCU_SERIES = KL2x
|
|
||||||
|
|
||||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
|
||||||
# or <this_dir>/ld/
|
|
||||||
MCU_LDSCRIPT = MKL26Z64
|
|
||||||
|
|
||||||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
|
||||||
MCU_STARTUP = kl2x
|
|
||||||
|
|
||||||
# Board: it should exist either in <chibios>/os/hal/boards/
|
|
||||||
# or <this_dir>/boards
|
|
||||||
BOARD = PJRC_TEENSY_LC
|
|
||||||
|
|
||||||
MCU = cortex-m0
|
|
||||||
|
|
||||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
|
||||||
ARMV = 6
|
|
||||||
|
|
||||||
|
|
||||||
halconf.h
|
|
||||||
---------
|
|
||||||
|
|
||||||
|
|
||||||
mcuconf.h
|
|
||||||
---------
|
|
||||||
|
|
||||||
|
|
||||||
chconf.h
|
|
||||||
--------
|
|
||||||
|
|
||||||
|
|
||||||
ld script
|
|
||||||
---------
|
|
||||||
--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld 2015-10-15 09:08:58.732904304 +0900
|
|
||||||
+++ ld/MKL26Z64.ld 2015-10-15 08:48:06.430215496 +0900
|
|
||||||
@@ -27,7 +27,8 @@
|
|
||||||
{
|
|
||||||
flash0 : org = 0x00000000, len = 0xc0
|
|
||||||
flashcfg : org = 0x00000400, len = 0x10
|
|
||||||
- flash : org = 0x00000410, len = 64k - 0x410
|
|
||||||
+ flash : org = 0x00000410, len = 62k - 0x410
|
|
||||||
+ eeprom_emu : org = 0x0000F800, len = 2k
|
|
||||||
ram : org = 0x1FFFF800, len = 8k
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -35,6 +36,10 @@
|
|
||||||
__ram_size__ = LENGTH(ram);
|
|
||||||
__ram_end__ = __ram_start__ + __ram_size__;
|
|
||||||
|
|
||||||
+__eeprom_workarea_start__ = ORIGIN(eeprom_emu);
|
|
||||||
+__eeprom_workarea_size__ = LENGTH(eeprom_emu);
|
|
||||||
+__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
|
|
||||||
+
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
. = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Configuration/Startup for Infinity 60%
|
|
||||||
--------------------------------------
|
|
||||||
Configuration:
|
|
||||||
|
|
||||||
|
|
||||||
Clock:
|
|
||||||
Inifinity
|
|
||||||
FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz
|
|
||||||
Clock dividor:
|
|
||||||
SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock
|
|
||||||
SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock
|
|
||||||
SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock
|
|
||||||
Internal reference clock:
|
|
||||||
MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL
|
|
||||||
MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable
|
|
||||||
FLL multipilication:
|
|
||||||
MCG_C4[DMX32] = 1
|
|
||||||
MCG_C4[DRST_DRS] = 01 FLL factor 1464 * 32.768kHz = 48MHz
|
|
||||||
|
|
||||||
chibios/os/hal/ports/KINETIS/K20x/hal_lld.c
|
|
||||||
k20x_clock_init(): called in __early_init() defined in board.c
|
|
||||||
disable watchdog and configure clock
|
|
||||||
|
|
||||||
configurable macros:
|
|
||||||
KINETIS_NO_INIT: whether init or not
|
|
||||||
KINETIS_MCG_MODE: clock mode
|
|
||||||
KINETIS_MCG_MODE_FEI
|
|
||||||
KINETIS_MCG_MODE_PEE
|
|
||||||
hal/ports/KINETIS/K20x/hal_lld.h
|
|
||||||
|
|
||||||
|
|
||||||
chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h
|
|
||||||
PALConfig pal_default_config
|
|
||||||
boardInit()
|
|
||||||
__early_init()
|
|
||||||
macro definitions for board infos, freq and mcu type
|
|
||||||
|
|
||||||
chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c
|
|
||||||
|
|
||||||
USB
|
|
||||||
|
|
||||||
|
|
||||||
Startup
|
|
||||||
-------
|
|
||||||
common/ports/ARMCMx/GCC/crt0_v[67]m.s
|
|
||||||
Reset_Handler: startup code
|
|
||||||
common/ports/ARMCMx/GCC/crt1.c
|
|
||||||
__core_init(): weak
|
|
||||||
__early_init(): weak
|
|
||||||
__late_init(): weak
|
|
||||||
__default_exit(): weak
|
|
||||||
called from Reset_Handler of crt0
|
|
||||||
common/ports/ARMCMx/GCC/vector.c
|
|
||||||
common/ports/ARMCMx/GCC/ld/*.ld
|
|
||||||
|
|
||||||
chibios/os/common/ports/ARMCMx/compilers/GCC/
|
|
||||||
├── crt0_v6m.s
|
|
||||||
├── crt0_v7m.s
|
|
||||||
├── crt1.c
|
|
||||||
├── ld
|
|
||||||
│ ├── MK20DX128BLDR3.ld
|
|
||||||
│ ├── MK20DX128BLDR4.ld
|
|
||||||
│ ├── MK20DX128.ld
|
|
||||||
│ ├── MK20DX256.ld
|
|
||||||
│ ├── MKL25Z128.ld
|
|
||||||
│ ├── MKL26Z128.ld
|
|
||||||
│ ├── MKL26Z64.ld
|
|
||||||
│ └── STM32L476xG.ld
|
|
||||||
├── mk
|
|
||||||
│ ├── startup_k20x5.mk
|
|
||||||
│ ├── startup_k20x7.mk
|
|
||||||
│ ├── startup_k20x.mk
|
|
||||||
│ ├── startup_kl2x.mk
|
|
||||||
│ └── startup_stm32l4xx.mk
|
|
||||||
├── rules.ld
|
|
||||||
├── rules.mk
|
|
||||||
└── vectors.c
|
|
||||||
|
|
||||||
chibios/os/hal/
|
|
||||||
├── boards
|
|
||||||
│ ├── FREESCALE_FREEDOM_K20D50M
|
|
||||||
│ │ ├── board.c
|
|
||||||
│ │ ├── board.h
|
|
||||||
│ │ └── board.mk
|
|
||||||
│ ├── MCHCK_K20
|
|
||||||
│ │ ├── board.c
|
|
||||||
│ │ ├── board.h
|
|
||||||
│ │ └── board.mk
|
|
||||||
│ ├── PJRC_TEENSY_3
|
|
||||||
│ │ ├── board.c
|
|
||||||
│ │ ├── board.h
|
|
||||||
│ │ └── board.mk
|
|
||||||
│ ├── PJRC_TEENSY_3_1
|
|
||||||
│ │ ├── board.c
|
|
||||||
│ │ ├── board.h
|
|
||||||
│ │ └── board.mk
|
|
||||||
│ ├── PJRC_TEENSY_LC
|
|
||||||
│ │ ├── board.c
|
|
||||||
│ │ ├── board.h
|
|
||||||
│ │ └── board.mk
|
|
||||||
│ ├── readme.txt
|
|
||||||
│ ├── simulator
|
|
||||||
│ │ ├── board.c
|
|
||||||
│ │ ├── board.h
|
|
||||||
│ │ └── board.mk
|
|
||||||
│ ├── ST_NUCLEO_F030R8
|
|
||||||
│ │ ├── board.c
|
|
||||||
│ │ ├── board.h
|
|
||||||
│ │ ├── board.mk
|
|
||||||
│ │ └── cfg
|
|
||||||
│ │ └── board.chcfg
|
|
||||||
├── hal.mk
|
|
||||||
├── include
|
|
||||||
│ ├── adc.h
|
|
||||||
│ ├── can.h
|
|
||||||
│ ├── dac.h
|
|
||||||
│ ├── ext.h
|
|
||||||
│ ├── gpt.h
|
|
||||||
│ ├── hal_channels.h
|
|
||||||
│ ├── hal_files.h
|
|
||||||
│ ├── hal.h
|
|
||||||
│ ├── hal_ioblock.h
|
|
||||||
│ ├── hal_mmcsd.h
|
|
||||||
│ ├── hal_queues.h
|
|
||||||
│ ├── hal_streams.h
|
|
||||||
│ ├── i2c.h
|
|
||||||
│ ├── i2s.h
|
|
||||||
│ ├── icu.h
|
|
||||||
│ ├── mac.h
|
|
||||||
│ ├── mii.h
|
|
||||||
│ ├── mmc_spi.h
|
|
||||||
│ ├── pal.h
|
|
||||||
│ ├── pwm.h
|
|
||||||
│ ├── rtc.h
|
|
||||||
│ ├── sdc.h
|
|
||||||
│ ├── serial.h
|
|
||||||
│ ├── serial_usb.h
|
|
||||||
│ ├── spi.h
|
|
||||||
│ ├── st.h
|
|
||||||
│ ├── uart.h
|
|
||||||
│ └── usb.h
|
|
||||||
├── lib
|
|
||||||
│ └── streams
|
|
||||||
│ ├── chprintf.c
|
|
||||||
│ ├── chprintf.h
|
|
||||||
│ ├── memstreams.c
|
|
||||||
│ ├── memstreams.h
|
|
||||||
│ ├── nullstreams.c
|
|
||||||
│ └── nullstreams.h
|
|
||||||
├── osal
|
|
||||||
│ ├── nil
|
|
||||||
│ │ ├── osal.c
|
|
||||||
│ │ ├── osal.h
|
|
||||||
│ │ └── osal.mk
|
|
||||||
│ ├── os-less
|
|
||||||
│ │ └── ARMCMx
|
|
||||||
│ │ ├── osal.c
|
|
||||||
│ │ ├── osal.h
|
|
||||||
│ │ └── osal.mk
|
|
||||||
│ └── rt
|
|
||||||
│ ├── osal.c
|
|
||||||
│ ├── osal.h
|
|
||||||
│ └── osal.mk
|
|
||||||
├── ports
|
|
||||||
│ ├── AVR
|
|
||||||
│ ├── common
|
|
||||||
│ │ └── ARMCMx
|
|
||||||
│ │ ├── mpu.h
|
|
||||||
│ │ ├── nvic.c
|
|
||||||
│ │ └── nvic.h
|
|
||||||
│ ├── KINETIS
|
|
||||||
│ │ ├── K20x
|
|
||||||
│ │ │ ├── hal_lld.c
|
|
||||||
│ │ │ ├── hal_lld.h
|
|
||||||
│ │ │ ├── kinetis_registry.h
|
|
||||||
│ │ │ ├── platform.dox
|
|
||||||
│ │ │ ├── platform.mk
|
|
||||||
│ │ │ ├── pwm_lld.c
|
|
||||||
│ │ │ ├── pwm_lld.h
|
|
||||||
│ │ │ ├── spi_lld.c
|
|
||||||
│ │ │ └── spi_lld.h
|
|
||||||
│ │ ├── KL2x
|
|
||||||
│ │ │ ├── hal_lld.c
|
|
||||||
│ │ │ ├── hal_lld.h
|
|
||||||
│ │ │ ├── kinetis_registry.h
|
|
||||||
│ │ │ ├── platform.mk
|
|
||||||
│ │ │ ├── pwm_lld.c
|
|
||||||
│ │ │ └── pwm_lld.h
|
|
||||||
│ │ ├── LLD
|
|
||||||
│ │ │ ├── adc_lld.c
|
|
||||||
│ │ │ ├── adc_lld.h
|
|
||||||
│ │ │ ├── ext_lld.c
|
|
||||||
│ │ │ ├── ext_lld.h
|
|
||||||
│ │ │ ├── gpt_lld.c
|
|
||||||
│ │ │ ├── gpt_lld.h
|
|
||||||
│ │ │ ├── i2c_lld.c
|
|
||||||
│ │ │ ├── i2c_lld.h
|
|
||||||
│ │ │ ├── pal_lld.c
|
|
||||||
│ │ │ ├── pal_lld.h
|
|
||||||
│ │ │ ├── serial_lld.c
|
|
||||||
│ │ │ ├── serial_lld.h
|
|
||||||
│ │ │ ├── st_lld.c
|
|
||||||
│ │ │ ├── st_lld.h
|
|
||||||
│ │ │ ├── usb_lld.c
|
|
||||||
│ │ │ └── usb_lld.h
|
|
||||||
│ │ └── README.md
|
|
||||||
│ ├── LPC
|
|
||||||
│ ├── simulator
|
|
||||||
│ └── STM32
|
|
||||||
├── src
|
|
||||||
│ ├── adc.c
|
|
||||||
│ ├── can.c
|
|
||||||
│ ├── dac.c
|
|
||||||
│ ├── ext.c
|
|
||||||
│ ├── gpt.c
|
|
||||||
│ ├── hal.c
|
|
||||||
│ ├── hal_mmcsd.c
|
|
||||||
│ ├── hal_queues.c
|
|
||||||
│ ├── i2c.c
|
|
||||||
│ ├── i2s.c
|
|
||||||
│ ├── icu.c
|
|
||||||
│ ├── mac.c
|
|
||||||
│ ├── mmc_spi.c
|
|
||||||
│ ├── pal.c
|
|
||||||
│ ├── pwm.c
|
|
||||||
│ ├── rtc.c
|
|
||||||
│ ├── sdc.c
|
|
||||||
│ ├── serial.c
|
|
||||||
│ ├── serial_usb.c
|
|
||||||
│ ├── spi.c
|
|
||||||
│ ├── st.c
|
|
||||||
│ ├── uart.c
|
|
||||||
│ └── usb.c
|
|
||||||
└── templates
|
|
||||||
├── adc_lld.c
|
|
||||||
├── adc_lld.h
|
|
||||||
├── can_lld.c
|
|
||||||
├── can_lld.h
|
|
||||||
├── dac_lld.c
|
|
||||||
├── dac_lld.h
|
|
||||||
├── ext_lld.c
|
|
||||||
├── ext_lld.h
|
|
||||||
├── gpt_lld.c
|
|
||||||
├── gpt_lld.h
|
|
||||||
├── halconf.h
|
|
||||||
├── hal_lld.c
|
|
||||||
├── hal_lld.h
|
|
||||||
├── i2c_lld.c
|
|
||||||
├── i2c_lld.h
|
|
||||||
├── i2s_lld.c
|
|
||||||
├── i2s_lld.h
|
|
||||||
├── icu_lld.c
|
|
||||||
├── icu_lld.h
|
|
||||||
├── mac_lld.c
|
|
||||||
├── mac_lld.h
|
|
||||||
├── mcuconf.h
|
|
||||||
├── osal
|
|
||||||
│ ├── osal.c
|
|
||||||
│ ├── osal.h
|
|
||||||
│ └── osal.mk
|
|
||||||
├── pal_lld.c
|
|
||||||
├── pal_lld.h
|
|
||||||
├── platform.mk
|
|
||||||
├── pwm_lld.c
|
|
||||||
├── pwm_lld.h
|
|
||||||
├── rtc_lld.c
|
|
||||||
├── rtc_lld.h
|
|
||||||
├── sdc_lld.c
|
|
||||||
├── sdc_lld.h
|
|
||||||
├── serial_lld.c
|
|
||||||
├── serial_lld.h
|
|
||||||
├── spi_lld.c
|
|
||||||
├── spi_lld.h
|
|
||||||
├── st_lld.c
|
|
||||||
├── st_lld.h
|
|
||||||
├── uart_lld.c
|
|
||||||
├── uart_lld.h
|
|
||||||
├── usb_lld.c
|
|
||||||
└── usb_lld.h
|
|
|
@ -72,8 +72,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define BREATHE_LED_ADDRESS CAPS_LOCK_LED_ADDRESS
|
#define BREATHE_LED_ADDRESS CAPS_LOCK_LED_ADDRESS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEBUG_ENABLED 1
|
|
||||||
|
|
||||||
/* =================
|
/* =================
|
||||||
* ChibiOS I2C setup
|
* ChibiOS I2C setup
|
||||||
* ================= */
|
* ================= */
|
||||||
|
@ -145,7 +143,6 @@ void is31_init(void) {
|
||||||
__builtin_memset(full_page,0,0xB4+1);
|
__builtin_memset(full_page,0,0xB4+1);
|
||||||
// zero function page, all registers (assuming full_page is all zeroes)
|
// zero function page, all registers (assuming full_page is all zeroes)
|
||||||
is31_write_data(IS31_FUNCTIONREG, full_page, 0xD + 1);
|
is31_write_data(IS31_FUNCTIONREG, full_page, 0xD + 1);
|
||||||
// disable hardware shutdown
|
|
||||||
palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
|
palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
|
||||||
palSetPad(GPIOB, 16);
|
palSetPad(GPIOB, 16);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
|
@ -182,7 +179,7 @@ static THD_FUNCTION(LEDthread, arg) {
|
||||||
uint8_t pwm_step_status, page_status;
|
uint8_t pwm_step_status, page_status;
|
||||||
|
|
||||||
//mailbox variables
|
//mailbox variables
|
||||||
uint8_t temp, msg_type, msg_led;
|
uint8_t temp, msg_type, msg_pin, msg_col, msg_led;
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
|
|
||||||
/* //control register variables
|
/* //control register variables
|
||||||
|
@ -199,14 +196,17 @@ page_status = 0; //start frame 0 (all off/on)
|
||||||
// (messages are queued (up to LED_MAILBOX_NUM_MSGS) if they can't
|
// (messages are queued (up to LED_MAILBOX_NUM_MSGS) if they can't
|
||||||
// be processed right away)
|
// be processed right away)
|
||||||
chMBFetch(&led_mailbox, &msg, TIME_INFINITE);
|
chMBFetch(&led_mailbox, &msg, TIME_INFINITE);
|
||||||
msg_type = (msg >> 8) & 0xFF; //first byte is msg type
|
msg_col = (msg >> 24) & 0xFF;//if needed
|
||||||
msg_led = (msg) & 0xFF; //second byte is action information
|
msg_pin = (msg >> 16) & 0XFF;//if needed (SET_FULL_ROW)
|
||||||
|
msg_type = (msg >> 8) & 0xFF; //second byte is msg type
|
||||||
|
msg_led = (msg) & 0xFF; //first byte is action information
|
||||||
|
|
||||||
xprintf("--------------------\n");
|
xprintf("--------------------\n");
|
||||||
chThdSleepMilliseconds(10);
|
|
||||||
xprintf("mailbox fetch\nmsg: %X\n", msg);
|
xprintf("mailbox fetch\nmsg: %X\n", msg);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(20);
|
||||||
xprintf("type: %X - led: %X\n", msg_type, msg_led);
|
xprintf("type: %X - pin: %X\n", msg_type, msg_pin);
|
||||||
|
chThdSleepMilliseconds(20);
|
||||||
|
xprintf("col: %X - led: %X\n", msg_col, msg_led);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
switch (msg_type){
|
switch (msg_type){
|
||||||
|
@ -214,8 +214,12 @@ page_status = 0; //start frame 0 (all off/on)
|
||||||
//TODO: lighting key led on keypress
|
//TODO: lighting key led on keypress
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//TODO: BLINK_ON/OFF_LED
|
case SET_FULL_ROW:
|
||||||
break;
|
//write full byte to pin address, msg_pin = pin #, msg_led = byte to write
|
||||||
|
//writes only to current page
|
||||||
|
xprintf("SET_FULL_ROW\n");
|
||||||
|
write_led_byte(page_status,msg_pin,msg_led);
|
||||||
|
break;
|
||||||
|
|
||||||
case OFF_LED:
|
case OFF_LED:
|
||||||
//on/off/toggle single led, msg_led = row/col of led
|
//on/off/toggle single led, msg_led = row/col of led
|
||||||
|
@ -255,6 +259,7 @@ page_status = 0; //start frame 0 (all off/on)
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
set_led_bit(7, control_register_word, msg_led, 6);
|
set_led_bit(7, control_register_word, msg_led, 6);
|
||||||
is31_write_data (7, control_register_word, 0x02);
|
is31_write_data (7, control_register_word, 0x02);
|
||||||
|
break;
|
||||||
|
|
||||||
case TOGGLE_ALL:
|
case TOGGLE_ALL:
|
||||||
xprintf("TOGGLE_ALL: %d\n", msg_led);
|
xprintf("TOGGLE_ALL: %d\n", msg_led);
|
||||||
|
@ -272,17 +277,12 @@ page_status = 0; //start frame 0 (all off/on)
|
||||||
|
|
||||||
if (page_status > 0) {
|
if (page_status > 0) {
|
||||||
is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, 0);
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, 0);
|
||||||
}
|
|
||||||
|
|
||||||
//maintain lock leds
|
page_status=0;
|
||||||
if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) {
|
|
||||||
set_lock_leds(USB_LED_NUM_LOCK, 1);
|
|
||||||
}
|
|
||||||
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
|
|
||||||
set_lock_leds(USB_LED_CAPS_LOCK, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
page_status=0;
|
//maintain lock leds
|
||||||
|
led_set(host_keyboard_leds());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOGGLE_BACKLIGHT:
|
case TOGGLE_BACKLIGHT:
|
||||||
|
@ -306,81 +306,75 @@ page_status = 0; //start frame 0 (all off/on)
|
||||||
|
|
||||||
case DISPLAY_PAGE://show single layer indicator or full map of layer
|
case DISPLAY_PAGE://show single layer indicator or full map of layer
|
||||||
//msg_led = page to toggle on
|
//msg_led = page to toggle on
|
||||||
xprintf("DISPLAY_PAGE");
|
xprintf("DISPLAY_PAGE\n");
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
if (page_status != msg_led) {
|
if (page_status != msg_led) {
|
||||||
xprintf(" - new page\n");
|
xprintf(" - new page\n");
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, msg_led);
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_PICTDISP, msg_led);
|
||||||
|
page_status = msg_led;
|
||||||
|
|
||||||
|
//maintain lock leds
|
||||||
|
led_set(host_keyboard_leds());
|
||||||
}
|
}
|
||||||
page_status = msg_led;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESET_PAGE:
|
case RESET_PAGE:
|
||||||
|
//led_msg = page to reset
|
||||||
xprintf("RESET_PAGE\n");
|
xprintf("RESET_PAGE\n");
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
//led_msg = page to reset
|
|
||||||
led_control_reg[0] = 0;
|
led_control_reg[0] = 0;
|
||||||
__builtin_memset(led_control_reg+1, 0, 0x12);
|
__builtin_memset(led_control_reg+1, 0, 0x12);
|
||||||
is31_write_data(msg_led, led_control_reg, 0x13);
|
is31_write_data(msg_led, led_control_reg, 0x13);
|
||||||
|
|
||||||
//maintain lock leds
|
|
||||||
if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) {
|
|
||||||
set_lock_leds(USB_LED_NUM_LOCK, 1);
|
|
||||||
}
|
|
||||||
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
|
|
||||||
set_lock_leds(USB_LED_CAPS_LOCK, 1);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOGGLE_NUM_LOCK:
|
case TOGGLE_NUM_LOCK:
|
||||||
//msg_led = 0 or 1, off/on
|
//msg_led = 0 or 1, off/on
|
||||||
xprintf("NUMLOCK: %d\n", msg_led);
|
xprintf("NUMLOCK: %d\n", msg_led);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
set_lock_leds(NUM_LOCK_LED_ADDRESS, msg_led);
|
set_lock_leds(NUM_LOCK_LED_ADDRESS, msg_led, page_status);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOGGLE_CAPS_LOCK:
|
case TOGGLE_CAPS_LOCK:
|
||||||
xprintf("CAPSLOCK: %d\n", msg_led);
|
xprintf("CAPSLOCK: %d\n", msg_led);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
//msg_led = 0 or 1, off/on
|
//msg_led = 0 or 1, off/on
|
||||||
set_lock_leds(CAPS_LOCK_LED_ADDRESS, msg_led);
|
set_lock_leds(CAPS_LOCK_LED_ADDRESS, msg_led, page_status);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//TODO: MODE_BREATH
|
//TODO: MODE_BREATH
|
||||||
case MODE_BREATH:
|
|
||||||
break;
|
|
||||||
case STEP_BRIGHTNESS:
|
case STEP_BRIGHTNESS:
|
||||||
xprintf("STEP_BACKLIGHT\n");
|
xprintf("STEP_BACKLIGHT\n");
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
//led_msg = step pwm up or down
|
//led_msg = step pwm up or down
|
||||||
switch (msg_led) {
|
switch (msg_led) {
|
||||||
case 0:
|
case 0:
|
||||||
if (pwm_step_status == 0) {
|
if (pwm_step_status == 0) {
|
||||||
pwm_step_status = 4;
|
pwm_step_status = 4;
|
||||||
} else {
|
} else {
|
||||||
pwm_step_status--;
|
pwm_step_status--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if (pwm_step_status == 4) {
|
if (pwm_step_status == 4) {
|
||||||
pwm_step_status = 0;
|
pwm_step_status = 0;
|
||||||
} else {
|
} else {
|
||||||
pwm_step_status++;
|
pwm_step_status++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//populate 8 byte rows to write on each pin
|
//populate 8 byte rows to write on each pin
|
||||||
//first byte is register address, every 0x10 9 bytes are A-register pwm pins
|
//first byte is register address, every 0x10 9 bytes are A-register pwm pins
|
||||||
__builtin_memset(pwm_register_array+1, pwm_levels[pwm_step_status], 8);
|
__builtin_memset(pwm_register_array+1, pwm_levels[pwm_step_status], 8);
|
||||||
|
|
||||||
for(i=0; i<8; i++) {
|
for(i=0; i<8; i++) {
|
||||||
pwm_register_array[0] = 0x24 + (i * 0x10);
|
pwm_register_array[0] = 0x24 + (i * 0x10);
|
||||||
is31_write_data(0,pwm_register_array,9);
|
is31_write_data(0,pwm_register_array,9);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* case LED_MSG_SLEEP_LED_ON:
|
/* case LED_MSG_SLEEP_LED_ON:
|
||||||
// save current settings
|
// save current settings
|
||||||
|
@ -415,103 +409,104 @@ page_status = 0; //start frame 0 (all off/on)
|
||||||
xprintf("--------------------\n");
|
xprintf("--------------------\n");
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
}
|
}
|
||||||
#if DEBUG_ENABLED
|
}
|
||||||
uint8_t j;
|
}
|
||||||
uint8_t pages[3]={0x00, 0x07};
|
|
||||||
//debugging code - print full led/blink/pwm registers on each frame
|
|
||||||
xprintf("----layer state----: %X\n", layer_state);
|
|
||||||
for(i=0;i<2;i++) {
|
|
||||||
xprintf("page: %d\n", pages[i]);
|
|
||||||
chThdSleepMilliseconds(2);
|
|
||||||
for(j=0;j<0x24;j++){
|
|
||||||
if(j > 0 && j % 9 == 0){
|
|
||||||
xprintf("\n");
|
|
||||||
}
|
|
||||||
switch (j) {
|
|
||||||
case 0:
|
|
||||||
xprintf("\n--on-off--\n");
|
|
||||||
chThdSleepMilliseconds(2);
|
|
||||||
break;
|
|
||||||
case 0x12:
|
|
||||||
xprintf("\n--blink--\n");
|
|
||||||
chThdSleepMilliseconds(2);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
is31_read_register(pages[i],j,&temp);
|
|
||||||
xprintf("%02X, ", temp);
|
|
||||||
chThdSleepMilliseconds(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
xprintf("\n--pwm--\n");
|
/* ==============================
|
||||||
chThdSleepMilliseconds(2);
|
* debug function
|
||||||
for(j=0x24;j<0xB4;j++) {
|
* ============================== */
|
||||||
is31_read_register(pages[i],j,&temp);
|
void print_debug(uint8_t page) {
|
||||||
xprintf("%02X, ", temp);
|
uint8_t j, debug_temp;
|
||||||
chThdSleepMilliseconds(2);
|
//debugging code - print full led/blink/pwm registers on each frame
|
||||||
if(j > 0x24 && (j-4) % 8 == 0){
|
xprintf("----layer state----: %X\n", layer_state);
|
||||||
xprintf("\n");
|
xprintf("page: %d\n", page);
|
||||||
}
|
chThdSleepMilliseconds(10);
|
||||||
}
|
for(j=0;j<0x24;j++){
|
||||||
xprintf("\n");
|
if(j > 0 && j % 9 == 0){
|
||||||
}
|
xprintf("\n");
|
||||||
|
}
|
||||||
//Function Register
|
switch (j) {
|
||||||
xprintf("\n--FUNCTION--\n");
|
case 0:
|
||||||
chThdSleepMilliseconds(2);
|
xprintf("\n--on-off--\n");
|
||||||
for(j=0;j<0x0D;j++) {
|
chThdSleepMilliseconds(10);
|
||||||
is31_read_register(0x0B,j,&temp);
|
break;
|
||||||
switch(j) {
|
case 0x12:
|
||||||
case 0:
|
xprintf("\n--blink--\n");
|
||||||
xprintf("Config %02X", temp);
|
chThdSleepMilliseconds(10);
|
||||||
chThdSleepMilliseconds(2);
|
break;
|
||||||
break;
|
}
|
||||||
case 1:
|
is31_read_register(page,j,&debug_temp);
|
||||||
xprintf(" - Pict %02X\n", temp);
|
xprintf("%02X, ", debug_temp);
|
||||||
chThdSleepMilliseconds(2);
|
chThdSleepMilliseconds(10);
|
||||||
break;
|
}
|
||||||
case 2:
|
|
||||||
xprintf("Auto1 %02X", temp);
|
xprintf("\n--pwm--\n");
|
||||||
chThdSleepMilliseconds(2);
|
chThdSleepMilliseconds(10);
|
||||||
break;
|
for(j=0x24;j<0xB4;j++) {
|
||||||
case 3:
|
is31_read_register(page,j,&debug_temp);
|
||||||
xprintf(" - Auto2 %02X\n", temp);
|
xprintf("%02X, ", debug_temp);
|
||||||
chThdSleepMilliseconds(2);
|
chThdSleepMilliseconds(10);
|
||||||
break;
|
if(j > 0x24 && (j-3) % 8 == 0){
|
||||||
case 5:
|
xprintf("\n");
|
||||||
xprintf("Disp %02X", temp);
|
}
|
||||||
chThdSleepMilliseconds(2);
|
}
|
||||||
break;
|
xprintf("\n");
|
||||||
case 6:
|
|
||||||
xprintf(" - Audio %02X\n", temp);
|
//Function Register
|
||||||
chThdSleepMilliseconds(2);
|
xprintf("\n--FUNCTION--\n");
|
||||||
break;
|
chThdSleepMilliseconds(10);
|
||||||
case 7:
|
for(j=0;j<0x0D;j++) {
|
||||||
xprintf("Frame %02X", temp);
|
is31_read_register(0x0B,j,&debug_temp);
|
||||||
chThdSleepMilliseconds(2);
|
switch(j) {
|
||||||
break;
|
case 0:
|
||||||
case 8:
|
xprintf("Config %02X", debug_temp);
|
||||||
xprintf(" - Breath1 %02X\n", temp);
|
chThdSleepMilliseconds(2);
|
||||||
chThdSleepMilliseconds(2);
|
break;
|
||||||
break;
|
case 1:
|
||||||
case 9:
|
xprintf(" - Pict %02X\n", debug_temp);
|
||||||
xprintf("Breath2 %02X - ", temp);
|
chThdSleepMilliseconds(2);
|
||||||
chThdSleepMilliseconds(2);
|
break;
|
||||||
break;
|
case 2:
|
||||||
case 10:
|
xprintf("Auto1 %02X", debug_temp);
|
||||||
xprintf(" - Shut %02X\n", temp);
|
chThdSleepMilliseconds(2);
|
||||||
chThdSleepMilliseconds(2);
|
break;
|
||||||
break;
|
case 3:
|
||||||
case 11:
|
xprintf(" - Auto2 %02X\n", debug_temp);
|
||||||
xprintf("AGC %02X", temp);
|
chThdSleepMilliseconds(2);
|
||||||
chThdSleepMilliseconds(2);
|
break;
|
||||||
break;
|
case 5:
|
||||||
case 12:
|
xprintf("Disp %02X", debug_temp);
|
||||||
xprintf(" - ADC %02X\n", temp);
|
chThdSleepMilliseconds(2);
|
||||||
chThdSleepMilliseconds(2);
|
break;
|
||||||
break;
|
case 6:
|
||||||
}
|
xprintf(" - Audio %02X\n", debug_temp);
|
||||||
|
chThdSleepMilliseconds(2);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
xprintf("Frame %02X", debug_temp);
|
||||||
|
chThdSleepMilliseconds(2);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
xprintf(" - Breath1 %02X\n", debug_temp);
|
||||||
|
chThdSleepMilliseconds(2);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
xprintf("Breath2 %02X - ", debug_temp);
|
||||||
|
chThdSleepMilliseconds(2);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
xprintf(" - Shut %02X\n", debug_temp);
|
||||||
|
chThdSleepMilliseconds(2);
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
xprintf("AGC %02X", debug_temp);
|
||||||
|
chThdSleepMilliseconds(2);
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
xprintf(" - ADC %02X\n", debug_temp);
|
||||||
|
chThdSleepMilliseconds(2);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,7 +518,7 @@ void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint
|
||||||
//returns 2 bytes led control register address and byte to write
|
//returns 2 bytes led control register address and byte to write
|
||||||
//0 - bit off, 1 - bit on, 2 - toggle bit
|
//0 - bit off, 1 - bit on, 2 - toggle bit
|
||||||
|
|
||||||
uint8_t control_reg_addr, column_bit, column_byte, temp, blink_on;
|
uint8_t control_reg_addr, column_bit, column_byte, bit_temp, blink_on;
|
||||||
|
|
||||||
//check for valid led address
|
//check for valid led address
|
||||||
if (led_addr < 0 || led_addr > 87 || led_addr % 10 > 8) {
|
if (led_addr < 0 || led_addr > 87 || led_addr % 10 > 8) {
|
||||||
|
@ -541,18 +536,28 @@ void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint
|
||||||
//first byte is led control register address 0x00
|
//first byte is led control register address 0x00
|
||||||
//msg_led tens column is pin#, ones column is bit position in 8-bit mask
|
//msg_led tens column is pin#, ones column is bit position in 8-bit mask
|
||||||
control_reg_addr = ((led_addr / 10) % 10 - 1 ) * 0x02;// A-register is every other byte
|
control_reg_addr = ((led_addr / 10) % 10 - 1 ) * 0x02;// A-register is every other byte
|
||||||
xprintf("pre-reg_addr: %X\n", control_reg_addr);
|
xprintf("pre-reg_addr: %2X\n", control_reg_addr);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
control_reg_addr += blink_on == 1 ? 0x12 : 0x00;//shift 12 bytes to blink register
|
control_reg_addr += blink_on == 1 ? 0x12 : 0x00;//shift 12 bytes to blink register
|
||||||
xprintf("blink-reg_addr: %X\n", control_reg_addr);
|
xprintf("blink-reg_addr: %2X\n", control_reg_addr);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
xprintf("page: %2X\n", page);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
|
||||||
|
is31_read_register(page, 0x06, &bit_temp);//maintain status of leds on this byte
|
||||||
|
xprintf("reg 06: %2X\n", bit_temp);
|
||||||
|
is31_read_register(page, 0x17, &bit_temp);//maintain status of leds on this byte
|
||||||
|
xprintf("reg 17: %2X\n", bit_temp);
|
||||||
|
is31_read_register(page, 0x18, &bit_temp);//maintain status of leds on this byte
|
||||||
|
xprintf("reg 18: %2X\n", bit_temp);
|
||||||
|
is31_read_register(page, 0x19, &bit_temp);//maintain status of leds on this byte
|
||||||
|
xprintf("reg 19: %2X\n", bit_temp);
|
||||||
|
is31_read_register(page, control_reg_addr, &bit_temp);//maintain status of leds on this byte
|
||||||
column_bit = 1<<(led_addr % 10 - 1);
|
column_bit = 1<<(led_addr % 10 - 1);
|
||||||
|
column_byte = bit_temp;
|
||||||
|
|
||||||
is31_read_register(page, control_reg_addr, &temp);//maintain status of leds on this byte
|
xprintf("column_byte read: %2X\n", column_byte);
|
||||||
column_byte = temp;
|
|
||||||
|
|
||||||
xprintf("column_byte read: %X\n", column_byte);
|
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
switch(action) {
|
switch(action) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -565,7 +570,7 @@ void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint
|
||||||
column_byte ^= column_bit;
|
column_byte ^= column_bit;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
xprintf("column_byte write: %X\n", column_byte);
|
xprintf("column_byte write: %2X\n", column_byte);
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
//return word to be written in register
|
//return word to be written in register
|
||||||
|
@ -574,47 +579,59 @@ void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint
|
||||||
}
|
}
|
||||||
|
|
||||||
void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte) {
|
void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte) {
|
||||||
uint8_t led_control_word[2] = {0};//register address and led on/off mask
|
uint8_t led_control_word[2] = {0};//register address and on/off byte
|
||||||
|
|
||||||
led_control_word[0] = (row - 1 ) * 0x02;// A-register is every other byte
|
led_control_word[0] = (row - 1 ) * 0x02;// A-register is every other byte
|
||||||
led_control_word[1] = led_byte;// A-register is every other byte
|
led_control_word[1] = led_byte;
|
||||||
is31_write_data(page, led_control_word, 0x13);
|
is31_write_data(page, led_control_word, 0x02);
|
||||||
}
|
}
|
||||||
|
|
||||||
void write_led_page (uint8_t page, uint8_t *user_led_array, uint8_t led_count) {
|
void write_led_page (uint8_t page, uint8_t *user_led_array, uint8_t led_count) {
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
uint8_t pin, col;
|
uint8_t pin, col;
|
||||||
uint8_t led_control_register[0x13] = {0};//led control register start address + 0x12 bytes
|
uint8_t led_control_register[0x13] = {0};//control register start address + 0x12 bytes
|
||||||
|
|
||||||
__builtin_memset(led_control_register,0,13);
|
__builtin_memset(led_control_register,0,13);
|
||||||
|
|
||||||
for(i=0;i<led_count;i++){
|
for(i=0;i<led_count;i++){
|
||||||
pin = ((user_led_array[i] / 10) % 10 - 1 ) * 2 + 1;// 1 byte shift for led register 0x00 address
|
// 1 byte shift for led register 0x00 address
|
||||||
|
pin = ((user_led_array[i] / 10) % 10 - 1 ) * 2 + 1;
|
||||||
col = user_led_array[i] % 10 - 1;
|
col = user_led_array[i] % 10 - 1;
|
||||||
|
|
||||||
led_control_register[pin] |= 1<<(col);
|
led_control_register[pin] |= 1<<(col);
|
||||||
}
|
}
|
||||||
|
|
||||||
is31_write_data(page, led_control_register, 0x13);
|
is31_write_data(page, led_control_register, 0x13);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_lock_leds(uint8_t led_addr, uint8_t led_action) {
|
void set_lock_leds(uint8_t led_addr, uint8_t led_action, uint8_t page) {
|
||||||
uint8_t page, temp;
|
uint8_t lock_temp;
|
||||||
uint8_t led_control_word[2] = {0};
|
uint8_t led_control_word[2] = {0};
|
||||||
|
|
||||||
//blink if all leds are on
|
xprintf("---set lock---\n");
|
||||||
//is31_read_register(0, 0x00, &temp);
|
chThdSleepMilliseconds(10);
|
||||||
//if (temp != 0x00) {
|
|
||||||
// set_led_bit(0,led_control_word,led_addr,(led_action | (1<<2))); //set blink bit
|
|
||||||
//} else {
|
|
||||||
// set_led_bit(0,led_control_word,led_addr,led_action);
|
|
||||||
//}
|
|
||||||
//is31_write_data(0, led_control_word, 0x02);
|
|
||||||
|
|
||||||
for(page=1; page<8; page++) {
|
//blink if all leds are on
|
||||||
set_led_bit(page,led_control_word,led_addr,led_action);
|
if (page == 0) {
|
||||||
is31_write_data(page, led_control_word, 0x02);
|
is31_read_register(0, 0x00, &lock_temp);
|
||||||
|
xprintf("AllOnReg: %2X\n", lock_temp);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
if (lock_temp == 0xFF) {
|
||||||
|
xprintf("AllOntrue\n");
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
led_action |= (1<<2); //set blink bit
|
||||||
|
} else {
|
||||||
|
xprintf("AllOnfalse\n");
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_led_bit(page,led_control_word,led_addr,led_action);
|
||||||
|
|
||||||
|
xprintf("led_word: %2X", led_control_word[0]);
|
||||||
|
xprintf("%X\n", led_control_word[1]);
|
||||||
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
is31_write_data(page, led_control_word, 0x02);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =====================
|
/* =====================
|
||||||
|
@ -639,11 +656,11 @@ void led_controller_init(void) {
|
||||||
/* initialise IS31 chip */
|
/* initialise IS31 chip */
|
||||||
is31_init();
|
is31_init();
|
||||||
|
|
||||||
//set Display Option Register so all pwm intensity is controlled from Frame 0
|
//set Display Option Register so all pwm intensity is controlled from page 0
|
||||||
//enable blink and set blink period to 0.27s x rate
|
//enable blink and set blink period to 0.27s x rate
|
||||||
is31_write_register(IS31_FUNCTIONREG, IS31_REG_DISPLAYOPT, IS31_REG_DISPLAYOPT_INTENSITY_SAME + S31_REG_DISPLAYOPT_BLINK_ENABLE + 5);
|
is31_write_register(IS31_FUNCTIONREG, IS31_REG_DISPLAYOPT, IS31_REG_DISPLAYOPT_INTENSITY_SAME + IS31_REG_DISPLAYOPT_BLINK_ENABLE + 4);
|
||||||
|
|
||||||
/* set full pwm on Frame 1 */
|
/* set full pwm on page 1 */
|
||||||
pwm_register_array[0] = 0;
|
pwm_register_array[0] = 0;
|
||||||
__builtin_memset(pwm_register_array+1, 0xFF, 8);
|
__builtin_memset(pwm_register_array+1, 0xFF, 8);
|
||||||
for(i=0; i<8; i++) {
|
for(i=0; i<8; i++) {
|
||||||
|
|
|
@ -31,6 +31,7 @@ msg_t is31_read_register(uint8_t page, uint8_t reg, uint8_t *result);
|
||||||
* ============================*/
|
* ============================*/
|
||||||
|
|
||||||
void led_controller_init(void);
|
void led_controller_init(void);
|
||||||
|
void print_debug (uint8_t page);
|
||||||
|
|
||||||
#define CAPS_LOCK_LED_ADDRESS 46 //pin matrix location
|
#define CAPS_LOCK_LED_ADDRESS 46 //pin matrix location
|
||||||
#define NUM_LOCK_LED_ADDRESS 85
|
#define NUM_LOCK_LED_ADDRESS 85
|
||||||
|
@ -58,7 +59,7 @@ void led_controller_init(void);
|
||||||
|
|
||||||
#define IS31_REG_DISPLAYOPT 0x05
|
#define IS31_REG_DISPLAYOPT 0x05
|
||||||
#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames
|
#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames
|
||||||
#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8
|
#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x08
|
||||||
// D2:D0 bits blink period time (*0.27s)
|
// D2:D0 bits blink period time (*0.27s)
|
||||||
|
|
||||||
#define IS31_REG_AUDIOSYNC 0x06
|
#define IS31_REG_AUDIOSYNC 0x06
|
||||||
|
@ -86,32 +87,33 @@ void led_controller_init(void);
|
||||||
#define IS31_TIMEOUT 10000 // needs to be long enough to write a whole page
|
#define IS31_TIMEOUT 10000 // needs to be long enough to write a whole page
|
||||||
|
|
||||||
/* ========================================
|
/* ========================================
|
||||||
* LED Thread related functions/definitions
|
* LED Thread related items
|
||||||
* ========================================*/
|
* ========================================*/
|
||||||
|
|
||||||
extern mailbox_t led_mailbox;
|
extern mailbox_t led_mailbox;
|
||||||
|
|
||||||
void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint8_t action);
|
void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint8_t action);
|
||||||
void set_lock_leds (uint8_t led_addr, uint8_t led_action);
|
void set_lock_leds (uint8_t led_addr, uint8_t led_action, uint8_t page);
|
||||||
void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte);
|
void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte);
|
||||||
void write_led_page (uint8_t page, uint8_t *led_array, uint8_t led_count);
|
void write_led_page (uint8_t page, uint8_t *led_array, uint8_t led_count);
|
||||||
|
|
||||||
// constants for signaling the LED controller thread
|
// constants for signaling the LED controller thread
|
||||||
enum led_msg_t {
|
enum led_msg_t {
|
||||||
KEY_LIGHT,
|
KEY_LIGHT,
|
||||||
BLINK_OFF_LED,
|
SET_FULL_ROW,
|
||||||
BLINK_ON_LED,
|
|
||||||
BLINK_TOGGLE_LED,
|
|
||||||
OFF_LED,
|
OFF_LED,
|
||||||
ON_LED,
|
ON_LED,
|
||||||
TOGGLE_LED,
|
TOGGLE_LED,
|
||||||
|
BLINK_OFF_LED,
|
||||||
|
BLINK_ON_LED,
|
||||||
|
BLINK_TOGGLE_LED,
|
||||||
TOGGLE_ALL,
|
TOGGLE_ALL,
|
||||||
TOGGLE_BACKLIGHT,
|
TOGGLE_BACKLIGHT,
|
||||||
DISPLAY_PAGE,
|
DISPLAY_PAGE,
|
||||||
RESET_PAGE,
|
RESET_PAGE,
|
||||||
TOGGLE_NUM_LOCK,
|
TOGGLE_NUM_LOCK,
|
||||||
TOGGLE_CAPS_LOCK,
|
TOGGLE_CAPS_LOCK,
|
||||||
MODE_BREATH,
|
TOGGLE_BREATH,
|
||||||
STEP_BRIGHTNESS
|
STEP_BRIGHTNESS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue