phoenix.c (1770B)
1 #include <hal.h> 2 #include "usb_main.h" 3 #include "phoenix.h" 4 5 void bootmagic_scan(void) { 6 matrix_scan(); 7 wait_ms(5); 8 matrix_scan(); 9 10 if ((matrix_get_row(0) & 1) || (matrix_get_row(6) & 1)) { 11 palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL); 12 palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL); 13 palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL); 14 led1_off(); 15 led2_off(); 16 led3_off(); 17 18 led3_on(); 19 wait_ms(50); 20 led2_on(); 21 wait_ms(50); 22 led1_on(); 23 wait_ms(50); 24 25 led3_off(); 26 wait_ms(50); 27 led2_off(); 28 wait_ms(50); 29 led1_off(); 30 wait_ms(50); 31 32 bootloader_jump(); 33 } 34 } 35 36 void keyboard_pre_init_kb(void) { 37 palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL); 38 palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL); 39 palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL); 40 led1_off(); 41 led2_off(); 42 led3_off(); 43 44 keyboard_pre_init_user(); 45 } 46 47 void keyboard_post_init_kb(void) { 48 led1_on(); 49 wait_ms(50); 50 led2_on(); 51 wait_ms(50); 52 led3_on(); 53 wait_ms(50); 54 55 led1_off(); 56 wait_ms(50); 57 led2_off(); 58 wait_ms(50); 59 led3_off(); 60 wait_ms(50); 61 62 keyboard_post_init_user(); 63 } 64 65 void manipulate_led(uint32_t led, bool on) { 66 switch (led) { 67 case 1: 68 on ? led1_on() : led1_off(); 69 case 2: 70 on ? led2_on() : led2_off(); 71 case 3: 72 on ? led3_on() : led3_off(); 73 } 74 } 75 76 77 layer_state_t layer_state_set_kb(layer_state_t state) { 78 state = layer_state_set_user(state); 79 80 uint8_t layer = get_highest_layer(state); 81 manipulate_led(1, layer & 1); 82 manipulate_led(2, layer >> 1 & 1); 83 manipulate_led(3, layer >> 2 & 1); 84 return state; 85 }