Moved led page arrays to keymap.c and added keymap header to define

individual led addresses
This commit is contained in:
jpetermans 2017-04-06 16:27:51 -07:00
parent 56be300757
commit af13e9a12d
3 changed files with 152 additions and 57 deletions

View File

@ -1,5 +1,6 @@
#include "infinity60.h" #include "infinity60.h"
#include "led_controller.h" #include "led_controller.h"
#include "keymap_jpetermans.h"
//Helpful Defines //Helpful Defines
#define _______ KC_TRNS #define _______ KC_TRNS
@ -86,6 +87,66 @@ enum function_id {
enum macro_id { enum macro_id {
ACTION_LEDS_ALL, ACTION_LEDS_ALL,
ACTION_LEDS_GAME ACTION_LEDS_GAME
//TODO: ACTION_LED_LAYER which reads current layer and turns on appropriate LED
};
/*
Configuring led control can be done
1. full keyboard at a time - define led array, or
2. individual - send specific led address (defined in keymap.h)
The arrays relate to the mcu's LED pages (8 available) desribed in led_controller.c
0x24 (pcb row 1) is first byte of PWM portion of LED page
0x34 (pcb row 2) is 17th byte of PWM portion of LED page
array translates to row and column positions
Infinity60 LED MAP
11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
28 31 32 33 34 35 36 37 38 41 42 43 44 45
46 47 48 51 52 53 54 55 56 57 58 61 62
63 64 65 66 67 68 71 72 73 74 75 76 77*
78 81 82 83 84 85 86 87
*Unused in Alphabet Layout
*/
//"WASD"
const uint8_t led_game[72] = {
0x24,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0x64,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x74,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x84,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x94,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
const uint8_t led_all[72] = {
0x24,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x34,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x44,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x54,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x64,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x74,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x84,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x94,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
}; };
const uint16_t fn_actions[] = { const uint16_t fn_actions[] = {
@ -94,13 +155,6 @@ const uint16_t fn_actions[] = {
[2] = ACTION_FUNCTION(ACTION_LEDS_ALL), [2] = ACTION_FUNCTION(ACTION_LEDS_ALL),
[3] = ACTION_FUNCTION(ACTION_LEDS_GAME) [3] = ACTION_FUNCTION(ACTION_LEDS_GAME)
/* [1] = ACTION_FUNCTION(ACTION_LEDS_GAME),
[4] = ACTION_USAGE_CONSUMER(0x1B4),
[5] = ACTION_USAGE_CONSUMER(0x196),
[6] = ACTION_USAGE_CONSUMER(0x1A6),
[7] = ACTION_USAGE_CONSUMER(0x1A0)
*/
}; };
/* custom action function */ /* custom action function */
@ -140,7 +194,19 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
// Runs just one time when the keyboard initializes. // Runs just one time when the keyboard initializes.
void matrix_init_user(void) { void matrix_init_user(void) {
uint8_t j;
led_controller_init(); led_controller_init();
//TODO: do pages need to be written at init or ok on demand?
/* Write pages */
for(j=0; j<8; j++) {
is31_write_data(1,(uint8_t *)(led_game+(9*j)),9);
chThdSleepMilliseconds(5);
is31_write_data(2,(uint8_t *)(led_all+(9*j)),9);
chThdSleepMilliseconds(5);
}
}; };
// Runs constantly in the background, in a loop. // Runs constantly in the background, in a loop.

View File

@ -0,0 +1,78 @@
/* LED layout mainly based on default Standard configuration
* ,-----------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ | ` |
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bksp|
* |-----------------------------------------------------------|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter |
* |-----------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
* |-----------------------------------------------------------'
* | LCtl|LGui|LAlt | Space | RAlt|RGui|RMenu|RCtl|
* `-----------------------------------------------------------'
*/
#define ADDR_LED_ESC 0x24
#define ADDR_LED_1 0x25
#define ADDR_LED_2 0x26
#define ADDR_LED_3 0x27
#define ADDR_LED_4 0x28
#define ADDR_LED_5 0x29
#define ADDR_LED_6 0x2A
#define ADDR_LED_7 0x2B
#define ADDR_LED_8 0x34
#define ADDR_LED_9 0x35
#define ADDR_LED_0 0x36
#define ADDR_LED_MINS 0x37
#define ADDR_LED_EQL 0x38
#define ADDR_LED_BSLS 0x39
//#define ADDR_LED_GRV 0x3A //not used by Alphabet layout
#define ADDR_LED_TAB 0x3B
#define ADDR_LED_Q 0x44
#define ADDR_LED_W 0x45
#define ADDR_LED_E 0x46
#define ADDR_LED_R 0x47
#define ADDR_LED_T 0x48
#define ADDR_LED_Y 0x49
#define ADDR_LED_U 0x4A
#define ADDR_LED_I 0x4B
#define ADDR_LED_O 0x54
#define ADDR_LED_P 0x55
#define ADDR_LED_LBRC 0x56
#define ADDR_LED_RBRC 0x57
#define ADDR_LED_BSPC 0x58
#define ADDR_LED_CAPS 0x59
#define ADDR_LED_A 0x5A
#define ADDR_LED_S 0x5B
#define ADDR_LED_D 0x64
#define ADDR_LED_F 0x65
#define ADDR_LED_G 0x66
#define ADDR_LED_H 0x67
#define ADDR_LED_J 0x68
#define ADDR_LED_K 0x69
#define ADDR_LED_L 0x6A
#define ADDR_LED_SCLN 0x6B
#define ADDR_LED_QUOT 0x74
#define ADDR_LED_ENT 0x75
#define ADDR_LED_LSFT 0x76
#define ADDR_LED_Z 0x77
#define ADDR_LED_X 0x78
#define ADDR_LED_C 0x79
#define ADDR_LED_V 0x7A
#define ADDR_LED_B 0x7B
#define ADDR_LED_N 0x84
#define ADDR_LED_M 0x85
#define ADDR_LED_COMM 0x86
#define ADDR_LED_DOT 0x87
#define ADDR_LED_SLSH 0x88
#define ADDR_LED_RSFT 0x89
//#define ADDR_LED_FN0 0x8A //not used by Alphabet layout
#define ADDR_LED_LCTL 0x8B
#define ADDR_LED_LGUI 0x94
#define ADDR_LED_LALT 0x95
#define ADDR_LED_SPC 0x96
#define ADDR_LED_RALT 0x97
#define ADDR_LED_RGUI 0x98
#define ADDR_LED_MENU 0x99
#define ADDR_LED_RCTL 0x9A

View File

@ -171,6 +171,7 @@ static THD_FUNCTION(LEDthread, arg) {
// process 'msg' here // process 'msg' here
switch(msg) { switch(msg) {
//TODO: make this generic and able to turn on/off any address and loop through all(or current) pages
case LED_MSG_CAPS_ON: case LED_MSG_CAPS_ON:
// turn caps on on pages 1 and 2 // turn caps on on pages 1 and 2
is31_write_register(0, CAPS_LOCK_LED_ADDRESS, 0xFF); is31_write_register(0, CAPS_LOCK_LED_ADDRESS, 0xFF);
@ -238,48 +239,6 @@ static THD_FUNCTION(LEDthread, arg) {
} }
} }
//These relate to the LED map above, row and column
//0x24 = first byte (CA1) of PWM page, 0x34 is 17th byte (CA2)
/* LED game mode */
const uint8_t led_game[72] = {
0x24,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0x64,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x74,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x84,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x94,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* ALL LEDs */
const uint8_t led_all[72] = {
0x24,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x34,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x44,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x54,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x64,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x74,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x84,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x94,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
/* ============= /* =============
* hook into TMK * hook into TMK
* ============= */ * ============= */
@ -315,14 +274,6 @@ void led_controller_init(void) {
is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL1, (3<<4)|3); is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL1, (3<<4)|3);
is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL2, IS31_REG_BREATHCTRL2_ENABLE|3); is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL2, IS31_REG_BREATHCTRL2_ENABLE|3);
/* Write pages */
for(i=0; i<8; i++) {
is31_write_data(1,(uint8_t *)(led_game+(9*i)),9);
chThdSleepMilliseconds(5);
is31_write_data(2,(uint8_t *)(led_all+(9*i)),9);
chThdSleepMilliseconds(5);
}
// clean up the capslock LED // clean up the capslock LED
is31_write_register(1, CAPS_LOCK_LED_ADDRESS, 0); is31_write_register(1, CAPS_LOCK_LED_ADDRESS, 0);
is31_write_register(2, CAPS_LOCK_LED_ADDRESS, 0); is31_write_register(2, CAPS_LOCK_LED_ADDRESS, 0);