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