qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

frenchdev.c (2599B)


      1 #include "frenchdev.h"
      2 
      3 extern inline void frenchdev_board_led_on(void);
      4 extern inline void frenchdev_led_1_on(void);
      5 extern inline void frenchdev_led_2_on(void);
      6 extern inline void frenchdev_led_3_on(void);
      7 
      8 extern inline void frenchdev_board_led_off(void);
      9 extern inline void frenchdev_led_1_off(void);
     10 extern inline void frenchdev_led_2_off(void);
     11 extern inline void frenchdev_led_3_off(void);
     12 
     13 extern inline void frenchdev_led_all_on(void);
     14 extern inline void frenchdev_led_all_off(void);
     15 
     16 extern inline void frenchdev_led_1_set(uint8_t n);
     17 extern inline void frenchdev_led_2_set(uint8_t n);
     18 extern inline void frenchdev_led_3_set(uint8_t n);
     19 extern inline void frenchdev_led_set(uint8_t led, uint8_t n);
     20 
     21 extern inline void frenchdev_led_all_set(uint8_t n);
     22 
     23 bool i2c_initialized = 0;
     24 uint8_t mcp23018_status = 0x20;
     25 
     26 void matrix_init_kb(void) {
     27    // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
     28     TCCR1A = 0b10101001;  // set and configure fast PWM
     29     TCCR1B = 0b00001001;  // set and configure fast PWM
     30 
     31 
     32 
     33     // unused pins - D4, D5, E6
     34     // set as input with internal pull-ip enabled
     35     gpio_set_pin_input_high(D4);
     36     gpio_set_pin_input_high(D5);
     37     gpio_set_pin_input_high(E6);
     38 
     39     frenchdev_blink_all_leds();
     40     frenchdev_blink_all_leds();
     41     frenchdev_blink_all_leds();
     42     frenchdev_blink_all_leds();
     43 
     44     matrix_init_user();
     45 }
     46 
     47 void frenchdev_blink_all_leds(void)
     48 {
     49     frenchdev_led_all_off();
     50     frenchdev_led_all_set(LED_BRIGHTNESS_HI);
     51     frenchdev_led_1_on();
     52     wait_ms(50);
     53     frenchdev_led_2_on();
     54     wait_ms(50);
     55     frenchdev_led_3_on();
     56     wait_ms(50);
     57     frenchdev_led_1_off();
     58     wait_ms(50);
     59     frenchdev_led_2_off();
     60     wait_ms(50);
     61     frenchdev_led_3_off();
     62     frenchdev_led_all_off();
     63 }
     64 
     65 uint8_t init_mcp23018(void) {
     66     mcp23018_status = 0x20;
     67 
     68     // I2C subsystem
     69 
     70     // uint8_t sreg_prev;
     71     // sreg_prev=SREG;
     72     // cli();
     73     if (i2c_initialized == 0) {
     74         i2c_init();  // on pins D(1,0)
     75         i2c_initialized = true;;
     76         wait_ms(1000);
     77     }
     78 
     79     // set pin direction
     80     // - unused  : input  : 1
     81     // - input   : input  : 1
     82     // - driving : output : 0
     83     uint8_t data[] = {0b00000000, 0b00111111};
     84     mcp23018_status = i2c_write_register(I2C_ADDR, IODIRA, data, sizeof(data), I2C_TIMEOUT);
     85 
     86     if (!mcp23018_status) {
     87         // set pull-up
     88         // - unused  : on  : 1
     89         // - input   : on  : 1
     90         // - driving : off : 0
     91         mcp23018_status = i2c_write_register(I2C_ADDR, GPPUA, data, sizeof(data), I2C_TIMEOUT);
     92     }
     93 
     94     // SREG=sreg_prev;
     95 
     96     return mcp23018_status;
     97 }