| 94 | } |
| 95 | |
| 96 | static uint8_t keypad_read(const uint16_t pio, bool peek) { |
| 97 | uint16_t index = (pio >> 2) & 0x7F; |
| 98 | uint8_t bit_offset = (pio & 3) << 3; |
| 99 | uint8_t value = 0; |
| 100 | (void)peek; |
| 101 | |
| 102 | switch(index) { |
| 103 | case 0x00: |
| 104 | value = read8(keypad.control, bit_offset); |
| 105 | break; |
| 106 | case 0x01: |
| 107 | value = read8(keypad.size, bit_offset); |
| 108 | break; |
| 109 | case 0x02: |
| 110 | value = read8(keypad.status & keypad.enable, bit_offset); |
| 111 | break; |
| 112 | case 0x03: |
| 113 | value = read8(keypad.enable, bit_offset); |
| 114 | break; |
| 115 | case 0x04: case 0x05: case 0x06: case 0x07: |
| 116 | case 0x08: case 0x09: case 0x0A: case 0x0B: |
| 117 | value = read8(keypad.data[(pio - 0x10) >> 1 & 15], pio << 3 & 8); |
| 118 | break; |
| 119 | case 0x10: |
| 120 | value = read8(keypad.gpioEnable, bit_offset); |
| 121 | break; |
| 122 | case 0x11: /* GPIO status is always 0 */ |
| 123 | default: |
| 124 | break; |
| 125 | } |
| 126 | |
| 127 | /* return 0x00 if unimplemented or not in range */ |
| 128 | return value; |
| 129 | } |
| 130 | |
| 131 | /* Scan next row of keypad, if scanning is enabled */ |
| 132 | static void keypad_scan_event(enum sched_item_id id) { |
nothing calls this directly
no outgoing calls
no test coverage detected