aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards/bantam44/info.json
blob: 485d624f550a58d0477ab36503730e614502f694 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "keyboard_name": "Bantam-44",
  "url": "",
  "maintainer": "qmk",
  "width": 12,
  "height": 4,
  "layouts": {
    "LAYOUT": {
      "key_count": 44,
      "layout": [{"label":"K00", "x":0, "y":0}, {"label":"K01", "x":1, "y":0}, {"label":"K02", "x":2, "y":0}, {"label":"K03", "x":3, "y":0}, {"label":"K04", "x":4, "y":0}, {"label":"K05", "x":5, "y":0}, {"label":"K06", "x":6, "y":0}, {"label":"K07", "x":7, "y":0}, {"label":"K08", "x":8, "y":0}, {"label":"K09", "x":9, "y":0}, {"label":"K0A", "x":10, "y":0}, {"label":"K0B", "x":11, "y":0}, {"label":"K10", "x":0, "y":1, "w":1.5}, {"label":"K11", "x":1.5, "y":1}, {"label":"K12", "x":2.5, "y":1}, {"label":"K13", "x":3.5, "y":1}, {"label":"K14", "x":4.5, "y":1}, {"label":"K15", "x":5.5, "y":1}, {"label":"K16", "x":6.5, "y":1}, {"label":"K17", "x":7.5, "y":1}, {"label":"K18", "x":8.5, "y":1}, {"label":"K19", "x":9.5, "y":1}, {"label":"K1A", "x":10.5, "y":1, "w":1.5}, {"label":"K20", "x":0, "y":2}, {"label":"K21", "x":1, "y":2}, {"label":"K22", "x":2, "y":2}, {"label":"K23", "x":3, "y":2}, {"label":"K24", "x":4, "y":2}, {"label":"K25", "x":5, "y":2}, {"label":"K26", "x":6, "y":2}, {"label":"K27", "x":7, "y":2}, {"label":"K28", "x":8, "y":2}, {"label":"K29", "x":9, "y":2}, {"label":"K2A", "x":10, "y":2}, {"label":"K2B", "x":11, "y":2}, {"label":"K30", "x":0, "y":3, "w":1.25}, {"label":"K31", "x":1.25, "y":3, "w":1.25}, {"label":"K32", "x":2.5, "y":3, "w":1.25}, {"label":"K33", "x":3.75, "y":3, "w":1.25}, {"label":"K34", "x":5, "y":3, "w":2.75}, {"label":"K35", "x":7.75, "y":3, "w":1.25}, {"label":"K36", "x":9, "y":3}, {"label":"K37", "x":10, "y":3},PORTB |= (1<<5) | (1<<6);

    // initialize matrix state: all keys off
    for (
>++) _matrix0[i] = 0x00; for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00; matrix = _matrix0; matrix_prev = _matrix1; matrix_init_quantum(); } uint8_t matrix_scan(void) { matrix_row_t *tmp; tmp = matrix_prev; matrix_prev = matrix; matrix = tmp; uint8_t row, col; for (col = 0; col < MATRIX_COLS; col++) { SET_COL(col); for (row = 0; row < MATRIX_ROWS; row++) { //KEY_SELECT(row, col); SET_ROW(row); _delay_us(2); // Not sure this is needed. This just emulates HHKB controller's behaviour. if (matrix_prev[row] & (1<<col)) { KEY_HYS_ON(); } _delay_us(10); // NOTE: KEY_STATE is valid only in 20us after KEY_ENABLE. // If V-USB interrupts in this section we could lose 40us or so // and would read invalid value from KEY_STATE. uint8_t last = TIMER_RAW; KEY_ENABLE(); // Wait for KEY_STATE outputs its value. _delay_us(2); if (KEY_STATE()) { matrix[row] &= ~(1<<col); } else { matrix[row] |= (1<<col); } // Ignore if this code region execution time elapses more than 20us. // MEMO: 20[us] * (TIMER_RAW_FREQ / 1000000)[count per us] // MEMO: then change above using this rule: a/(b/c) = a*1/(b/c) = a*(c/b) if (TIMER_DIFF_RAW(TIMER_RAW, last) > 20/(1000000/TIMER_RAW_FREQ)) { matrix[row] = matrix_prev[row]; } _delay_us(5); KEY_HYS_OFF(); KEY_UNABLE(); // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE. // This takes 25us or more to make sure KEY_STATE returns to idle state. _delay_us(75); } if (matrix[row] ^ matrix_prev[row]) { matrix_last_modified = timer_read32(); } } matrix_scan_quantum(); return 1; } inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; } void matrix_print(void) { #if (MATRIX_COLS <= 8) print("r/c 01234567\n"); #elif (MATRIX_COLS <= 16) print("r/c 0123456789ABCDEF\n"); #elif (MATRIX_COLS <= 32) print("r/c 0123456789ABCDEF0123456789ABCDEF\n"); #endif for (uint8_t row = 0; row < MATRIX_ROWS; row++) { #if (MATRIX_COLS <= 8) xprintf("%02X: %08b%s\n", row, bitrev(matrix_get_row(row)), #elif (MATRIX_COLS <= 16) xprintf("%02X: %016b%s\n", row, bitrev16(matrix_get_row(row)), #elif (MATRIX_COLS <= 32) xprintf("%02X: %032b%s\n", row, bitrev32(matrix_get_row(row)), #endif #ifdef MATRIX_HAS_GHOST matrix_has_ghost_in_row(row) ? " <ghost" : "" #else "" #endif ); } }