qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

ps2_io.c (1161B)


      1 #include <stdbool.h>
      2 #include "ps2_io.h"
      3 #include "gpio.h"
      4 #include "wait.h"
      5 
      6 /* Check port settings for clock and data line */
      7 #if !(defined(PS2_CLOCK_PIN))
      8 #    error "PS/2 clock setting is required in config.h"
      9 #endif
     10 
     11 #if !(defined(PS2_DATA_PIN))
     12 #    error "PS/2 data setting is required in config.h"
     13 #endif
     14 
     15 /*
     16  * Clock
     17  */
     18 void clock_init(void) {}
     19 
     20 void clock_lo(void) {
     21     // Transition from input with pull-up to output low via Hi-Z instead of output high
     22     gpio_write_pin_low(PS2_CLOCK_PIN);
     23     gpio_set_pin_output(PS2_CLOCK_PIN);
     24 }
     25 
     26 void clock_hi(void) {
     27     gpio_set_pin_input_high(PS2_CLOCK_PIN);
     28 }
     29 
     30 bool clock_in(void) {
     31     gpio_set_pin_input_high(PS2_CLOCK_PIN);
     32     wait_us(1);
     33     return gpio_read_pin(PS2_CLOCK_PIN);
     34 }
     35 
     36 /*
     37  * Data
     38  */
     39 void data_init(void) {}
     40 
     41 void data_lo(void) {
     42     // Transition from input with pull-up to output low via Hi-Z instead of output high
     43     gpio_write_pin_low(PS2_DATA_PIN);
     44     gpio_set_pin_output(PS2_DATA_PIN);
     45 }
     46 
     47 void data_hi(void) {
     48     gpio_set_pin_input_high(PS2_DATA_PIN);
     49 }
     50 
     51 bool data_in(void) {
     52     gpio_set_pin_input_high(PS2_DATA_PIN);
     53     wait_us(1);
     54     return gpio_read_pin(PS2_DATA_PIN);
     55 }