You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.1 KiB

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