logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

ergotaco.c (1802B)


  1. #include "ergotaco.h"
  2. bool i2c_initialized = 0;
  3. i2c_status_t mcp23018_status = 0x20;
  4. void matrix_init_kb(void) {
  5. // (tied to Vcc for hardware convenience)
  6. //gpio_set_pin_input(B4); // set B(4) as input, internal pull-up disabled
  7. // unused pins
  8. // set as input with internal pull-up enabled
  9. gpio_set_pin_input_high(B4);
  10. gpio_set_pin_input_high(B5);
  11. gpio_set_pin_input_high(B6);
  12. gpio_set_pin_input_high(B7);
  13. gpio_set_pin_input_high(C6);
  14. gpio_set_pin_input_high(C7);
  15. gpio_set_pin_input_high(D4);
  16. gpio_set_pin_input_high(D5);
  17. gpio_set_pin_input_high(D6);
  18. gpio_set_pin_input_high(D7);
  19. gpio_set_pin_input_high(E6);
  20. gpio_set_pin_input_high(D0);
  21. gpio_set_pin_input_high(D1);
  22. gpio_set_pin_input_high(D4);
  23. gpio_set_pin_input_high(D6);
  24. gpio_set_pin_input_high(D7);
  25. matrix_init_user();
  26. }
  27. uint8_t init_mcp23018(void) {
  28. print("starting init");
  29. mcp23018_status = 0x20;
  30. // I2C subsystem
  31. // uint8_t sreg_prev;
  32. // sreg_prev=SREG;
  33. // cli();
  34. if (i2c_initialized == 0) {
  35. i2c_init(); // on pins D(1,0)
  36. i2c_initialized = true;
  37. _delay_ms(1000);
  38. }
  39. // set pin direction
  40. // - unused : input : 1
  41. // - input : input : 1
  42. // - driving : output : 0
  43. uint8_t data[] = {0b00000000, 0b00111111};
  44. mcp23018_status = i2c_write_register(I2C_ADDR, IODIRA, data, sizeof(data), ERGODOX_EZ_I2C_TIMEOUT);
  45. if (!mcp23018_status) {
  46. // set pull-up
  47. // - unused : on : 1
  48. // - input : on : 1
  49. // - driving : off : 0
  50. mcp23018_status = i2c_write_register(I2C_ADDR, GPPUA, data, sizeof(data), ERGODOX_EZ_I2C_TIMEOUT);
  51. }
  52. // SREG=sreg_prev;
  53. //uprintf("Init %x\n", mcp23018_status);
  54. return mcp23018_status;
  55. }