diff options
| -rw-r--r-- | keyboards/infinity_chibios/config.h | 4 | ||||
| -rw-r--r-- | keyboards/infinity_chibios/matrix.c | 51 | 
2 files changed, 50 insertions, 5 deletions
| diff --git a/keyboards/infinity_chibios/config.h b/keyboards/infinity_chibios/config.h index bd4becfc54..452cc2a9fb 100644 --- a/keyboards/infinity_chibios/config.h +++ b/keyboards/infinity_chibios/config.h @@ -52,8 +52,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  )  /* Keymap for Infinity prototype */ -#define INFINITY_PROTOTYPE +//#define INFINITY_PROTOTYPE +/* Keymap for Infinity 1.1a (first revision with LED support) */ +//#define INFINITY_LED  /*   * Feature disable options diff --git a/keyboards/infinity_chibios/matrix.c b/keyboards/infinity_chibios/matrix.c index 2c68ea83ab..62c165aa53 100644 --- a/keyboards/infinity_chibios/matrix.c +++ b/keyboards/infinity_chibios/matrix.c @@ -12,9 +12,12 @@   * Infinity Pinusage:   * Column pins are input with internal pull-down. Row pins are output and strobe with high.   * Key is high or 1 when it turns on. - * + *  INFINITY PRODUCTION (NO LED)   *     col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }   *     row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 } + *  INFINITY PRODUCTION (WITH LED) + *     col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 } + *     row: { PTC0, PTC1, PTC2, PTC3, PTC4, PTC5, PTC6, PTC7, PTD0 }   */  /* matrix state(1:on, 0:off) */  static matrix_row_t matrix[MATRIX_ROWS]; @@ -34,6 +37,18 @@ void matrix_init(void)      palSetPadMode(GPIOD, 6,  PAL_MODE_INPUT_PULLDOWN);      palSetPadMode(GPIOD, 7,  PAL_MODE_INPUT_PULLDOWN); +#ifdef INFINITY_LED +    /* Row(strobe) */ +    palSetPadMode(GPIOC, 0,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOC, 1,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOC, 2,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOC, 3,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOC, 4,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOC, 5,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOC, 6,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOC, 7,  PAL_MODE_OUTPUT_PUSHPULL); +    palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL); +#else      /* Row(strobe) */      palSetPadMode(GPIOB, 0,  PAL_MODE_OUTPUT_PUSHPULL);      palSetPadMode(GPIOB, 1,  PAL_MODE_OUTPUT_PUSHPULL); @@ -44,7 +59,7 @@ void matrix_init(void)      palSetPadMode(GPIOC, 4,  PAL_MODE_OUTPUT_PUSHPULL);      palSetPadMode(GPIOC, 5,  PAL_MODE_OUTPUT_PUSHPULL);      palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL); - +#endif      memset(matrix, 0, MATRIX_ROWS);      memset(matrix_debouncing, 0, MATRIX_ROWS);  } @@ -53,7 +68,20 @@ uint8_t matrix_scan(void)  {      for (int row = 0; row < MATRIX_ROWS; row++) {          matrix_row_t data = 0; - +    #ifdef INFINITY_LED +        // strobe row +        switch (row) { +            case 0: palSetPad(GPIOC, 0);    break; +            case 1: palSetPad(GPIOC, 1);    break; +            case 2: palSetPad(GPIOC, 2);    break; +            case 3: palSetPad(GPIOC, 3);    break; +            case 4: palSetPad(GPIOC, 4);    break; +            case 5: palSetPad(GPIOC, 5);    break; +            case 6: palSetPad(GPIOC, 6);    break; +            case 7: palSetPad(GPIOC, 7);    break; +            case 8: palSetPad(GPIOD, 0);    break; +        } +    #else          // strobe row          switch (row) {              case 0: palSetPad(GPIOB, 0);    break; @@ -66,12 +94,26 @@ uint8_t matrix_scan(void)              case 7: palSetPad(GPIOC, 5);    break;              case 8: palSetPad(GPIOD, 0);    break;          } +    #endif          wait_us(1); // need wait to settle pin state          // read col data          data = (palReadPort(GPIOD)>>1); - +    #ifdef INFINITY_LED +        // un-strobe row +        switch (row) { +            case 0: palClearPad(GPIOC, 0);    break; +            case 1: palClearPad(GPIOC, 1);    break; +            case 2: palClearPad(GPIOC, 2);    break; +            case 3: palClearPad(GPIOC, 3);    break; +            case 4: palClearPad(GPIOC, 4);    break; +            case 5: palClearPad(GPIOC, 5);    break; +            case 6: palClearPad(GPIOC, 6);    break; +            case 7: palClearPad(GPIOC, 7);    break; +            case 8: palClearPad(GPIOD, 0);    break; +        } +    #else          // un-strobe row          switch (row) {              case 0: palClearPad(GPIOB, 0);    break; @@ -84,6 +126,7 @@ uint8_t matrix_scan(void)              case 7: palClearPad(GPIOC, 5);    break;              case 8: palClearPad(GPIOD, 0);    break;          } +    #endif          if (matrix_debouncing[row] != data) {              matrix_debouncing[row] = data; | 
