1 | /* |
2 | * Generic GPIO ops |
3 | * |
4 | * Copyright (C) 2019 - 2020 Andy Green <andy@warmcat.com> |
5 | * |
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
7 | * of this software and associated documentation files (the "Software"), to |
8 | * deal in the Software without restriction, including without limitation the |
9 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
10 | * sell copies of the Software, and to permit persons to whom the Software is |
11 | * furnished to do so, subject to the following conditions: |
12 | * |
13 | * The above copyright notice and this permission notice shall be included in |
14 | * all copies or substantial portions of the Software. |
15 | * |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
21 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
22 | * IN THE SOFTWARE. |
23 | * |
24 | * This is like an abstract class for gpio, a real implementation provides |
25 | * functions for the ops that use the underlying OS gpio arrangements. |
26 | */ |
27 | |
28 | #if !defined(__LWS_GPIO_H__) |
29 | #define __LWS_GPIO_H__ |
30 | |
31 | typedef int _lws_plat_gpio_t; |
32 | |
33 | typedef enum { |
34 | LWSGGPIO_IRQ_NONE, |
35 | LWSGGPIO_IRQ_RISING, |
36 | LWSGGPIO_IRQ_FALLING, |
37 | LWSGGPIO_IRQ_CHANGE, |
38 | LWSGGPIO_IRQ_LOW, |
39 | LWSGGPIO_IRQ_HIGH |
40 | } lws_gpio_irq_t; |
41 | |
42 | enum { |
43 | LWSGGPIO_FL_READ = (1 << 0), |
44 | LWSGGPIO_FL_WRITE = (1 << 1), |
45 | LWSGGPIO_FL_PULLUP = (1 << 2), |
46 | LWSGGPIO_FL_PULLDOWN = (1 << 3), |
47 | LWSGGPIO_FL_START_LOW = (1 << 4), |
48 | }; |
49 | |
50 | typedef void (*lws_gpio_irq_cb_t)(void *arg); |
51 | |
52 | typedef struct lws_gpio_ops { |
53 | void (*mode)(_lws_plat_gpio_t gpio, int flags); |
54 | int (*read)(_lws_plat_gpio_t gpio); |
55 | void (*set)(_lws_plat_gpio_t gpio, int val); |
56 | int (*irq_mode)(_lws_plat_gpio_t gpio, lws_gpio_irq_t irq, |
57 | lws_gpio_irq_cb_t cb, void *arg); |
58 | } lws_gpio_ops_t; |
59 | |
60 | #endif |
61 | |