1 #ifndef INCLUDED_MPHALPORT_H
2 #define INCLUDED_MPHALPORT_H
3 
4 #include "shared/runtime/interrupt_char.h"
5 #include "py/ringbuf.h"
6 #include "py/mpconfig.h"
7 
8 typedef mp_uint_t cpu_stack_t;
9 
10 extern ringbuf_t stdin_ringbuf;
11 
12 extern void mp_hal_set_interrupt_char(int c);
13 
14 // This macro is used to implement PEP 475 to retry specified syscalls on EINTR
15 #define MP_HAL_RETRY_SYSCALL(ret, syscall, raise) \
16     {                                             \
17         for (;;) {                                \
18             MP_THREAD_GIL_EXIT();                 \
19             ret = syscall;                        \
20             MP_THREAD_GIL_ENTER();                \
21             if (ret == -1) {                      \
22                 int err = errno;                  \
23                 if (err == MP_EINTR) {            \
24                     mp_handle_pending(true);      \
25                     continue;                     \
26                 }                                 \
27                 raise;                            \
28             }                                     \
29             break;                                \
30         }                                         \
31     }
32 
33 #define RAISE_ERRNO(err_flag, error_val) \
34     {                                    \
35         if (err_flag == -1) {            \
36             mp_raise_OSError(error_val); \
37         }                                \
38     }
39 
40 #define mp_hal_delay_us_fast(us) mp_hal_delay_us(us)
41 
42 #include "aos_hal_gpio.h"
43 #include "py/obj.h"
44 
45 #ifdef CONFIG_GPIO_NUM
46 #define PY_GPIO_NUM_MAX CONFIG_GPIO_NUM
47 #else
48 #define PY_GPIO_NUM_MAX 64
49 #endif
50 
51 #define MP_HAL_PIN_FMT   "%u"
52 #define mp_hal_pin_obj_t mp_uint_t
53 
54 extern gpio_config_t mphal_gpio_config_obj_t[PY_GPIO_NUM_MAX];
55 
56 mp_hal_pin_obj_t machine_pin_get_id(mp_obj_t pin_in);
57 gpio_config_t mp_hal_pin_config_get(mp_hal_pin_obj_t pin_obj);
58 mp_int_t mp_hal_pin_low(mp_hal_pin_obj_t pin_obj);
59 mp_int_t mp_hal_pin_high(mp_hal_pin_obj_t pin_obj);
60 mp_int_t mp_hal_pin_config_set(mp_hal_pin_obj_t pin_obj, gpio_config_t config);
61 
62 #define mp_hal_get_pin_obj(o)    machine_pin_get_id(o)
63 #define mp_hal_pin_name(p)       (p)
64 #define mp_hal_pin_input(p)      mp_hal_pin_config_set((p), INPUT_PULL_UP)
65 #define mp_hal_pin_output(p)     mp_hal_pin_config_set((p), OUTPUT_PUSH_PULL)
66 #define mp_hal_pin_open_drain(p) mp_hal_pin_config_set((p), OUTPUT_OPEN_DRAIN_NO_PULL)
67 #define mp_hal_pin_od_low(p)     mp_hal_pin_low(p)
68 #define mp_hal_pin_od_high(p)    mp_hal_pin_high(p)
69 #define mp_hal_pin_write(p, v)   ((v) ? mp_hal_pin_high(p) : mp_hal_pin_low(p))
70 
71 #endif  // INCLUDED_MPHALPORT_H
72