/*
 * Created by jiaqiang.ye@lnxall.com
 *
 * Simple GPIO module
 *
 * 2022/05/11
 */

#ifndef LNXALL_GPIO_H
#define LNXALL_GPIO_H 1
#ifdef __cplusplus
extern "C" {
#endif

#define WLOSANY_EM1000 "WLOSANY_EM1000"
#define BAU_B30_003 "BAU-B30-003"
#define WLOS_BAU_B30_003 "WLOSANY_BAU-B30-003"

struct lnxall_gpio {
    int gpio_num;             /* number of GPIO */
    int gpio_fd;              /* gpio file descriptor */
    int gpio_val;             /* gpio current value */
    unsigned short isout;     /* true if the GPIO works as output */
    unsigned short changed;   /* for GPIO input, indicates that the value has changed */
    //
};

#define LNXALL_GPIO_MAXNUM    256

struct lnxall_gpio * lnxall_gpios_init(int gnum);

int lnxall_gpio_open(struct lnxall_gpio * gpios, int gnum);

int lnxall_gpio_free(struct lnxall_gpio * gpios, int gnum);

int lnxall_gpio_poll(struct lnxall_gpio * gpios, int gnum, int timeo);

int lnxall_gpio_getval(struct lnxall_gpio * gpios, int gnum);

int lnxall_gpio_setval(struct lnxall_gpio * gpio, int val);

int lnxall_gpio_later_handle(struct lnxall_gpio *gpios, int gnum, const char *board_name);
int Reversal_flag;

#ifdef __cplusplus
};
#endif
#endif
