Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.16 KB | None | 0 0
  1. #include <stdbool.h>
  2. #include <am335x_gpio.h>
  3. #include "wheel.h"
  4.  
  5. #define CHA_GPIO    AM335X_GPIO2
  6. #define CHA_PIN     1
  7. #define CHB_GPIO    AM335X_GPIO1
  8. #define CHB_PIN     29
  9.  
  10. static struct listener{
  11.     wheel_handler_t routine;
  12.     void* param;
  13. }  listener;
  14.  
  15. static void wheel_handler(void* param){
  16.     (void)param;
  17.     enum wheel_direction dir = WHEEL_RIGHT;
  18.     bool cha = am335x_gpio_get_state(CHA_GPIO, CHA_PIN);
  19.     bool chb = am335x_gpio_get_state(CHB_GPIO, CHB_PIN);
  20.     if (cha == chb) dir = WHEEL_LEFT;
  21.     if (listener.routine != 0){
  22.         listener.routine(dir, listener.param);
  23.     }
  24. }
  25.  
  26. void wheel_init(){
  27.     am335x_gpio_init(CHA_GPIO);
  28.     am335x_gpio_init(CHB_GPIO);
  29.  
  30.     am335x_gpio_setup_pin(CHA_GPIO, CHA_PIN, AM335X_GPIO_PULL_NONE, true);
  31.     am335x_gpio_setup_pin(CHB_GPIO, CHB_PIN, AM335X_GPIO_PULL_NONE, true);
  32.  
  33.     gpio_on_event(CHA_GPIO, CHA_PIN, GPIO_FALLING | GPIO_RISING | GPIO_DEBOUNCED, wheel_handler, 0);
  34. }
  35.  
  36. int wheel_on_event(wheel_handler_t, routine, void* param){
  37.     if (routine == 0){
  38.         listener.routine = 0;
  39.         listener.param = 0;
  40.         return 0;
  41.     }
  42.     if (listener.routine == 0){
  43.         listener.routine = routine;
  44.         listener.param = param;
  45.         return 0;
  46.     }
  47.     return -1;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement