logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

ps2_io.c (1161B)


  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. gpio_write_pin_low(PS2_CLOCK_PIN);
  19. gpio_set_pin_output(PS2_CLOCK_PIN);
  20. }
  21. void clock_hi(void) {
  22. gpio_set_pin_input_high(PS2_CLOCK_PIN);
  23. }
  24. bool clock_in(void) {
  25. gpio_set_pin_input_high(PS2_CLOCK_PIN);
  26. wait_us(1);
  27. return gpio_read_pin(PS2_CLOCK_PIN);
  28. }
  29. /*
  30. * Data
  31. */
  32. void data_init(void) {}
  33. void data_lo(void) {
  34. // Transition from input with pull-up to output low via Hi-Z instead of output high
  35. gpio_write_pin_low(PS2_DATA_PIN);
  36. gpio_set_pin_output(PS2_DATA_PIN);
  37. }
  38. void data_hi(void) {
  39. gpio_set_pin_input_high(PS2_DATA_PIN);
  40. }
  41. bool data_in(void) {
  42. gpio_set_pin_input_high(PS2_DATA_PIN);
  43. wait_us(1);
  44. return gpio_read_pin(PS2_DATA_PIN);
  45. }