Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdbool.h>
- #include <am335x_gpio.h>
- #include "wheel.h"
- #define CHA_GPIO AM335X_GPIO2
- #define CHA_PIN 1
- #define CHB_GPIO AM335X_GPIO1
- #define CHB_PIN 29
- static struct listener{
- wheel_handler_t routine;
- void* param;
- } listener;
- static void wheel_handler(void* param){
- (void)param;
- enum wheel_direction dir = WHEEL_RIGHT;
- bool cha = am335x_gpio_get_state(CHA_GPIO, CHA_PIN);
- bool chb = am335x_gpio_get_state(CHB_GPIO, CHB_PIN);
- if (cha == chb) dir = WHEEL_LEFT;
- if (listener.routine != 0){
- listener.routine(dir, listener.param);
- }
- }
- void wheel_init(){
- am335x_gpio_init(CHA_GPIO);
- am335x_gpio_init(CHB_GPIO);
- am335x_gpio_setup_pin(CHA_GPIO, CHA_PIN, AM335X_GPIO_PULL_NONE, true);
- am335x_gpio_setup_pin(CHB_GPIO, CHB_PIN, AM335X_GPIO_PULL_NONE, true);
- gpio_on_event(CHA_GPIO, CHA_PIN, GPIO_FALLING | GPIO_RISING | GPIO_DEBOUNCED, wheel_handler, 0);
- }
- int wheel_on_event(wheel_handler_t, routine, void* param){
- if (routine == 0){
- listener.routine = 0;
- listener.param = 0;
- return 0;
- }
- if (listener.routine == 0){
- listener.routine = routine;
- listener.param = param;
- return 0;
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement