- idle();
- _delay_us(5); // wait for line settles
-
- /* start bit */
- WAIT(clock_lo, 100, 0x11); // wait for keyboard to send
- WAIT(data_hi, 100, 0x12); // can be delayed that long
-
- WAIT(clock_hi, 100, 0x13); // first rising edge which can take longer
- /* data */
- for (uint8_t i = 0; i < 8; i++) {
- WAIT(clock_hi, 100, 0x20+i);
- //_delay_us(5);
- if (data_in()) {
- parity = !parity;
- data |= (1<<i);
- }
- WAIT(clock_lo, 150, 0x28+i);
- }