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 }