ps2_io.c 1.1 KB

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