revised led controller code to allow for more options
unable to switch picture displays
This commit is contained in:
		
							parent
							
								
									a2ac883779
								
							
						
					
					
						commit
						dda858c437
					
				
					 4 changed files with 342 additions and 135 deletions
				
			
		| 
						 | 
				
			
			@ -98,8 +98,6 @@ enum macro_id {
 | 
			
		|||
 *          LED MAPPING 
 | 
			
		||||
 * ==================================*/
 | 
			
		||||
 | 
			
		||||
//TODO: ACTION_LED_LAYER which reads current layer and turns on appropriate LED
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
   Configuring led control can be done as
 | 
			
		||||
   1. full keyboard at a time - define led array, or
 | 
			
		||||
| 
						 | 
				
			
			@ -121,43 +119,50 @@ enum macro_id {
 | 
			
		|||
    array translates to row and column positions
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
//"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,
 | 
			
		||||
//LED Layer indicator (1 per layer 3-7)
 | 
			
		||||
const uint8_t led_single_layer[5] = {
 | 
			
		||||
  12,13,14,15,16
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
//LED Page 1 - All off
 | 
			
		||||
//LED Page 2 - All on
 | 
			
		||||
//LED Page 3 - _Nav
 | 
			
		||||
const uint8_t led_nav[33] = {
 | 
			
		||||
  11,12,13,14,15,16,17,18,21,22,23,24,25,
 | 
			
		||||
  28,                   37,38,41,42,45,
 | 
			
		||||
  46,47,48,            54,55,56,57,58,
 | 
			
		||||
     64,65,66,      71,
 | 
			
		||||
                                  84,85
 | 
			
		||||
};
 | 
			
		||||
//LED Page 4 - _Numpad
 | 
			
		||||
const uint8_t led_numpad[17] = {
 | 
			
		||||
  18,21,22,23,
 | 
			
		||||
  37,38,41,42,
 | 
			
		||||
  55,56,57,58,
 | 
			
		||||
  72,73,74,75,
 | 
			
		||||
           85
 | 
			
		||||
};
 | 
			
		||||
//LED Page 5 - _Media
 | 
			
		||||
const uint8_t led_media[12] = {
 | 
			
		||||
             23,24,25,
 | 
			
		||||
     38,
 | 
			
		||||
  55,56,57,
 | 
			
		||||
      73,74,75,
 | 
			
		||||
  83,          86
 | 
			
		||||
};
 | 
			
		||||
//LED Page 6 - _Game
 | 
			
		||||
const uint8_t led_game[5] = {
 | 
			
		||||
  //row 1
 | 
			
		||||
  11,
 | 
			
		||||
  //row 2
 | 
			
		||||
  //row 3
 | 
			
		||||
  32,
 | 
			
		||||
  //row 4
 | 
			
		||||
  47, 48,
 | 
			
		||||
  //row 5
 | 
			
		||||
  51
 | 
			
		||||
  //row 6
 | 
			
		||||
  //row 7
 | 
			
		||||
  //row 8
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uint16_t fn_actions[] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -172,17 +177,20 @@ const uint16_t fn_actions[] = {
 | 
			
		|||
/* custom action function */
 | 
			
		||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
 | 
			
		||||
  (void)opt;
 | 
			
		||||
  msg_t msg;
 | 
			
		||||
  switch(id) {
 | 
			
		||||
    case ACTION_LEDS_ALL:
 | 
			
		||||
      if(record->event.pressed) {
 | 
			
		||||
        // signal the LED controller thread
 | 
			
		||||
        chMBPost(&led_mailbox, 1, TIME_IMMEDIATE);
 | 
			
		||||
        msg=(TOGGLE_LED << 8) | 12;
 | 
			
		||||
        chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case ACTION_LEDS_GAME:
 | 
			
		||||
      if(record->event.pressed) {
 | 
			
		||||
        // signal the LED controller thread
 | 
			
		||||
        chMBPost(&led_mailbox, 2, TIME_IMMEDIATE);
 | 
			
		||||
        msg=(TOGGLE_LAYER_LEDS << 8) | 5;
 | 
			
		||||
        chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case ACTION_LED_1:
 | 
			
		||||
| 
						 | 
				
			
			@ -212,19 +220,22 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
			
		|||
 | 
			
		||||
// Runs just one time when the keyboard initializes.
 | 
			
		||||
void matrix_init_user(void) {
 | 
			
		||||
    uint8_t j;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
/* Write pages */
 | 
			
		||||
    write_led_page(3, led_nav, 33);
 | 
			
		||||
    chThdSleepMilliseconds(5);
 | 
			
		||||
    is31_write_data(2,(uint8_t *)(led_all+(9*j)),9);
 | 
			
		||||
    chThdSleepMilliseconds(5);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    write_led_page(4, led_numpad, 17);
 | 
			
		||||
    chThdSleepMilliseconds(5);
 | 
			
		||||
 | 
			
		||||
    write_led_page(5, led_media, 12);
 | 
			
		||||
    chThdSleepMilliseconds(5);
 | 
			
		||||
 | 
			
		||||
    write_led_page(6, led_game, 5);
 | 
			
		||||
    chThdSleepMilliseconds(5);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Runs constantly in the background, in a loop.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue