qmk_firmware

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

ps2_io.c (1169B)


      1 #include <stdbool.h>
      2 #include "ps2_io.h"
      3 
      4 // chibiOS headers
      5 #include "ch.h"
      6 #include "hal.h"
      7 #include "gpio.h"
      8 
      9 /* Check port settings for clock and data line */
     10 #if !(defined(PS2_CLOCK_PIN))
     11 #    error "PS/2 clock setting is required in config.h"
     12 #endif
     13 
     14 #if !(defined(PS2_DATA_PIN))
     15 #    error "PS/2 data setting is required in config.h"
     16 #endif
     17 
     18 /*
     19  * Clock
     20  */
     21 void clock_init(void) {}
     22 
     23 void clock_lo(void) {
     24     palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
     25     palWriteLine(PS2_CLOCK_PIN, PAL_LOW);
     26 }
     27 
     28 void clock_hi(void) {
     29     palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
     30     palWriteLine(PS2_CLOCK_PIN, PAL_HIGH);
     31 }
     32 
     33 bool clock_in(void) {
     34     palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_INPUT);
     35     return palReadLine(PS2_CLOCK_PIN);
     36 }
     37 
     38 /*
     39  * Data
     40  */
     41 void data_init(void) {}
     42 
     43 void data_lo(void) {
     44     palSetLineMode(PS2_DATA_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
     45     palWriteLine(PS2_DATA_PIN, PAL_LOW);
     46 }
     47 
     48 void data_hi(void) {
     49     palSetLineMode(PS2_DATA_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
     50     palWriteLine(PS2_DATA_PIN, PAL_HIGH);
     51 }
     52 
     53 bool data_in(void) {
     54     palSetLineMode(PS2_DATA_PIN, PAL_MODE_INPUT);
     55     return palReadLine(PS2_DATA_PIN);
     56 }