#include #include "py/obj.h" #include "py/gc.h" #include "py/mphal.h" //#include "board.h" #include "p2.h" //#include "sdcard.h" #include "propeller2.h" //needs this too? #include "smartpins.h" //RJA for smartpin constants //pinw STATIC mp_obj_t p2_pinw(mp_obj_t pin_in, mp_obj_t pin_data) { int n=mp_obj_get_int(pin_in); int d=mp_obj_get_int(pin_data); _pinw(n,d); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_pinw_obj, p2_pinw); //pinl STATIC mp_obj_t p2_pinl(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); _pinl(n); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_pinl_obj, p2_pinl); //pinh STATIC mp_obj_t p2_pinh(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); _pinh(n); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_pinh_obj, p2_pinh); //pint STATIC mp_obj_t p2_pint(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); _pinnot(n); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_pint_obj, p2_pint); //pinf STATIC mp_obj_t p2_pinf(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); _pinf(n); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_pinf_obj, p2_pinf); //pinr STATIC mp_obj_t p2_pinr(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); int d=_pinr(n); return mp_obj_new_int(d); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_pinr_obj, p2_pinr); //pinstart STATIC mp_obj_t p2_pinstart(mp_uint_t n_args, const mp_obj_t *args) { int n=mp_obj_get_int(args[0]); int m=mp_obj_get_int(args[1]); int x=mp_obj_get_int(args[2]); int y=mp_obj_get_int(args[3]); //Start PinField smart pin(s): DIR=0, then WRPIN=Mode, WXPIN=Xval, WYPIN=Yval, then DIR=1. _pinf(n); _wrpin(n,m); _wxpin(n,x); _wypin(n,y); _pinh(n); //_pinstart(n,m,x,y); //not in the RISCVP2 version... return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(p2_pinstart_obj, 4, p2_pinstart); //pinclear STATIC mp_obj_t p2_pinclear(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); //Clear PinField smart pin(s): DIR=0, then WRPIN=0. _pinf(n); _wrpin(n,0); //_pinclear(n); //not in the RISCVP2 version... return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_pinclear_obj, p2_pinclear); //wrpin STATIC mp_obj_t p2_wrpin(mp_obj_t pin_in, mp_obj_t pin_data) { int n=mp_obj_get_int(pin_in); int d=mp_obj_get_int(pin_data); _wrpin(n,d); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_wrpin_obj, p2_wrpin); //wxpin STATIC mp_obj_t p2_wxpin(mp_obj_t pin_in, mp_obj_t pin_data) { int n=mp_obj_get_int(pin_in); int d=mp_obj_get_int(pin_data); _wxpin(n,d); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_wxpin_obj, p2_wxpin); //wypin STATIC mp_obj_t p2_wypin(mp_obj_t pin_in, mp_obj_t pin_data) { int n=mp_obj_get_int(pin_in); int d=mp_obj_get_int(pin_data); _wypin(n,d); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_wypin_obj, p2_wypin); //akpin STATIC mp_obj_t p2_akpin(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); _akpin(n); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_akpin_obj, p2_akpin); //rdpin STATIC mp_obj_t p2_rdpin(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); int d=_rdpin(n); return mp_obj_new_int(d); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_rdpin_obj, p2_rdpin); /* RJA: Not implemented in RISCVP2 //rqpin STATIC mp_obj_t p2_rqpin(mp_obj_t pin_in) { int n=mp_obj_get_int(pin_in); int d=_rqpin(n); return mp_obj_new_int(d); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_rqpin_obj, p2_rqpin); */ //clkfreq STATIC mp_obj_t p2_clkfreq() { int d=_clockfreq(); return mp_obj_new_int(d); } STATIC MP_DEFINE_CONST_FUN_OBJ_0(p2_clkfreq_obj, p2_clkfreq); void StartServoUs(int pin, int us) {//Start servo on provided pin# at given microseconds value int x=20000<<16; //20ms x+=_clockfreq()/1000000; //set 1us timing //enforce limits on servo position signalling if (us<600) us=600; if (us>2400) us=2400; _pinf(pin); _wrpin(pin,P_OE|P_PWM_SAWTOOTH); _wxpin(pin,x); _wypin(pin,us); _pinh(pin); } //start servo in degrees STATIC mp_obj_t p2_startservo(mp_obj_t n, mp_obj_t d) { int pin=mp_obj_get_int(n); int deg=mp_obj_get_int(d); int usecs=deg*10+600; StartServoUs(pin,usecs); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_startservo_obj, p2_startservo); void SetServoUs(int pin, int us) {//Sets servo on provided pin# at given microseconds value int x=20000<<16; //20ms x+=_clockfreq()/1000000; //set 1us timing //enforce limits on servo position signalling if (us<600) us=600; if (us>2400) us=2400; _wypin(pin,us); } //set servo in degrees STATIC mp_obj_t p2_setservo(mp_obj_t n, mp_obj_t d) { int pin=mp_obj_get_int(n); int deg=mp_obj_get_int(d); int usecs=deg*10+600; SetServoUs(pin,usecs); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_setservo_obj, p2_setservo); //start servo in microseconds STATIC mp_obj_t p2_startservous(mp_obj_t n, mp_obj_t u) { int pin=mp_obj_get_int(n); int us=mp_obj_get_int(u); SetServoUs(pin,us); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_startservous_obj, p2_startservous); //set servo in microseconds STATIC mp_obj_t p2_setservous(mp_obj_t n, mp_obj_t u) { int pin=mp_obj_get_int(n); int us=mp_obj_get_int(u); SetServoUs(pin,us); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_2(p2_setservous_obj, p2_setservous); //Stop servo is same as pinclear STATIC MP_DEFINE_CONST_FUN_OBJ_1(p2_stopservo_obj, p2_pinclear); STATIC const mp_rom_map_elem_t p2_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_p2) }, { MP_ROM_QSTR(MP_QSTR_pinw), MP_ROM_PTR(&p2_pinw_obj) }, { MP_ROM_QSTR(MP_QSTR_pinl), MP_ROM_PTR(&p2_pinl_obj) }, { MP_ROM_QSTR(MP_QSTR_pinh), MP_ROM_PTR(&p2_pinh_obj) }, { MP_ROM_QSTR(MP_QSTR_pint), MP_ROM_PTR(&p2_pint_obj) }, { MP_ROM_QSTR(MP_QSTR_pinf), MP_ROM_PTR(&p2_pinf_obj) }, { MP_ROM_QSTR(MP_QSTR_pinr), MP_ROM_PTR(&p2_pinr_obj) }, { MP_ROM_QSTR(MP_QSTR_pinstart), MP_ROM_PTR(&p2_pinstart_obj) }, { MP_ROM_QSTR(MP_QSTR_pinclear), MP_ROM_PTR(&p2_pinclear_obj) }, { MP_ROM_QSTR(MP_QSTR_wrpin), MP_ROM_PTR(&p2_wrpin_obj) }, { MP_ROM_QSTR(MP_QSTR_wxpin), MP_ROM_PTR(&p2_wxpin_obj) }, { MP_ROM_QSTR(MP_QSTR_wypin), MP_ROM_PTR(&p2_wypin_obj) }, { MP_ROM_QSTR(MP_QSTR_akpin), MP_ROM_PTR(&p2_akpin_obj) }, { MP_ROM_QSTR(MP_QSTR_rdpin), MP_ROM_PTR(&p2_rdpin_obj) }, //{ MP_ROM_QSTR(MP_QSTR_rqpin), MP_ROM_PTR(&p2_rqpin_obj) }, { MP_ROM_QSTR(MP_QSTR_clkfreq), MP_ROM_PTR(&p2_clkfreq_obj) }, { MP_ROM_QSTR(MP_QSTR_startservo), MP_ROM_PTR(&p2_startservo_obj) }, { MP_ROM_QSTR(MP_QSTR_startservous), MP_ROM_PTR(&p2_startservous_obj) }, { MP_ROM_QSTR(MP_QSTR_setservo), MP_ROM_PTR(&p2_setservo_obj) }, { MP_ROM_QSTR(MP_QSTR_setservous), MP_ROM_PTR(&p2_setservous_obj) }, { MP_ROM_QSTR(MP_QSTR_stopservo), MP_ROM_PTR(&p2_stopservo_obj) }, //Smart pin constants { MP_ROM_QSTR(MP_QSTR_P_TRUE_A), MP_ROM_INT(P_TRUE_A)}, //RJA: TOO BIG for 31 bit short int! { MP_ROM_QSTR(MP_QSTR_P_INVERT_A), MP_ROM_INT(P_INVERT_A)}, { MP_ROM_QSTR(MP_QSTR_P_LOCAL_A), MP_ROM_INT(P_LOCAL_A)}, { MP_ROM_QSTR(MP_QSTR_P_PLUS1_A), MP_ROM_INT(P_PLUS1_A) }, { MP_ROM_QSTR(MP_QSTR_P_PLUS2_A), MP_ROM_INT(P_PLUS2_A)}, { MP_ROM_QSTR(MP_QSTR_P_PLUS3_A), MP_ROM_INT(P_PLUS3_A)}, { MP_ROM_QSTR(MP_QSTR_P_OUTBIT_A), MP_ROM_INT(P_OUTBIT_A)}, { MP_ROM_QSTR(MP_QSTR_P_MINUS3_A), MP_ROM_INT(P_MINUS3_A)}, { MP_ROM_QSTR(MP_QSTR_P_MINUS2_A), MP_ROM_INT(P_MINUS2_A)}, { MP_ROM_QSTR(MP_QSTR_P_MINUS1_A), MP_ROM_INT(P_MINUS1_A)}, { MP_ROM_QSTR(MP_QSTR_P_TRUE_B), MP_ROM_INT(P_TRUE_B)}, { MP_ROM_QSTR(MP_QSTR_P_INVERT_B), MP_ROM_INT(P_INVERT_B)}, { MP_ROM_QSTR(MP_QSTR_P_LOCAL_B), MP_ROM_INT(P_LOCAL_B)}, { MP_ROM_QSTR(MP_QSTR_P_PLUS1_B), MP_ROM_INT(P_PLUS1_B) }, { MP_ROM_QSTR(MP_QSTR_P_PLUS2_B), MP_ROM_INT(P_PLUS2_B)}, { MP_ROM_QSTR(MP_QSTR_P_PLUS3_B), MP_ROM_INT(P_PLUS3_B)}, { MP_ROM_QSTR(MP_QSTR_P_OUTBIT_B), MP_ROM_INT(P_OUTBIT_B)}, { MP_ROM_QSTR(MP_QSTR_P_MINUS3_B), MP_ROM_INT(P_MINUS3_B)}, { MP_ROM_QSTR(MP_QSTR_P_MINUS2_B), MP_ROM_INT(P_MINUS2_B)}, { MP_ROM_QSTR(MP_QSTR_P_MINUS1_B), MP_ROM_INT(P_MINUS1_B)}, { MP_ROM_QSTR(MP_QSTR_P_PASS_AB), MP_ROM_INT(P_PASS_AB)}, { MP_ROM_QSTR(MP_QSTR_P_AND_AB), MP_ROM_INT(P_AND_AB)}, { MP_ROM_QSTR(MP_QSTR_P_OR_AB), MP_ROM_INT(P_OR_AB)}, { MP_ROM_QSTR(MP_QSTR_P_XOR_AB), MP_ROM_INT(P_XOR_AB)}, { MP_ROM_QSTR(MP_QSTR_P_FILT0_AB), MP_ROM_INT(P_FILT0_AB)}, { MP_ROM_QSTR(MP_QSTR_P_FILT1_AB), MP_ROM_INT(P_FILT1_AB)}, { MP_ROM_QSTR(MP_QSTR_P_FILT2_AB), MP_ROM_INT(P_FILT2_AB)}, { MP_ROM_QSTR(MP_QSTR_P_FILT3_AB), MP_ROM_INT(P_FILT3_AB)}, { MP_ROM_QSTR(MP_QSTR_P_LOGIC_A), MP_ROM_INT(P_LOGIC_A)}, { MP_ROM_QSTR(MP_QSTR_P_LOGIC_A_FB), MP_ROM_INT(P_LOGIC_A_FB)}, { MP_ROM_QSTR(MP_QSTR_P_LOGIC_B_FB), MP_ROM_INT(P_LOGIC_B_FB)}, { MP_ROM_QSTR(MP_QSTR_P_SCHMITT_A), MP_ROM_INT(P_SCHMITT_A)}, { MP_ROM_QSTR(MP_QSTR_P_SCHMITT_A_FB), MP_ROM_INT(P_SCHMITT_A_FB)}, { MP_ROM_QSTR(MP_QSTR_P_SCHMITT_B_FB), MP_ROM_INT(P_SCHMITT_B_FB)}, { MP_ROM_QSTR(MP_QSTR_P_COMPARE_AB), MP_ROM_INT(P_COMPARE_AB)}, { MP_ROM_QSTR(MP_QSTR_P_COMPARE_AB_FB), MP_ROM_INT(P_COMPARE_AB_FB)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_GIO), MP_ROM_INT(P_ADC_GIO)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_VIO), MP_ROM_INT(P_ADC_VIO)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_FLOAT), MP_ROM_INT(P_ADC_FLOAT)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_1X), MP_ROM_INT(P_ADC_1X)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_3X), MP_ROM_INT(P_ADC_3X)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_10X), MP_ROM_INT(P_ADC_10X)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_30X), MP_ROM_INT(P_ADC_30X)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_100X), MP_ROM_INT(P_ADC_100X)}, { MP_ROM_QSTR(MP_QSTR_P_DAC_990R_3V), MP_ROM_INT(P_DAC_990R_3V)}, { MP_ROM_QSTR(MP_QSTR_P_DAC_600R_2V), MP_ROM_INT(P_DAC_600R_2V)}, { MP_ROM_QSTR(MP_QSTR_P_DAC_124R_3V), MP_ROM_INT(P_DAC_124R_3V)}, { MP_ROM_QSTR(MP_QSTR_P_DAC_75R_2V), MP_ROM_INT(P_DAC_75R_2V)}, { MP_ROM_QSTR(MP_QSTR_P_LEVEL_A), MP_ROM_INT(P_LEVEL_A)}, { MP_ROM_QSTR(MP_QSTR_P_LEVEL_A_FBN), MP_ROM_INT(P_LEVEL_A_FBN)}, { MP_ROM_QSTR(MP_QSTR_P_LEVEL_B_FBP), MP_ROM_INT(P_LEVEL_B_FBP)}, { MP_ROM_QSTR(MP_QSTR_P_LEVEL_B_FBN), MP_ROM_INT(P_LEVEL_B_FBN)}, { MP_ROM_QSTR(MP_QSTR_P_ASYNC_IO), MP_ROM_INT(P_ASYNC_IO)}, { MP_ROM_QSTR(MP_QSTR_P_SYNC_IO), MP_ROM_INT(P_SYNC_IO)}, { MP_ROM_QSTR(MP_QSTR_P_TRUE_IN), MP_ROM_INT(P_TRUE_IN)}, { MP_ROM_QSTR(MP_QSTR_P_INVERT_IN), MP_ROM_INT(P_INVERT_IN)}, { MP_ROM_QSTR(MP_QSTR_P_TRUE_OUTPUT), MP_ROM_INT(P_TRUE_OUTPUT)}, { MP_ROM_QSTR(MP_QSTR_P_INVERT_OUTPUT), MP_ROM_INT(P_INVERT_OUTPUT)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_FAST), MP_ROM_INT(P_HIGH_FAST)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_1K5), MP_ROM_INT(P_HIGH_1K5)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_15K), MP_ROM_INT(P_HIGH_15K)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_150K), MP_ROM_INT(P_HIGH_150K)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_1MA), MP_ROM_INT(P_HIGH_1MA)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_100UA), MP_ROM_INT(P_HIGH_100UA)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_10UA), MP_ROM_INT(P_HIGH_10UA)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_FLOAT), MP_ROM_INT(P_HIGH_FLOAT)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_FAST), MP_ROM_INT(P_LOW_FAST)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_1K5), MP_ROM_INT(P_LOW_1K5)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_15K), MP_ROM_INT(P_LOW_15K)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_150K), MP_ROM_INT(P_LOW_150K)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_1MA), MP_ROM_INT(P_LOW_1MA)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_100UA), MP_ROM_INT(P_LOW_100UA)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_10UA), MP_ROM_INT(P_LOW_10UA)}, { MP_ROM_QSTR(MP_QSTR_P_LOW_FLOAT), MP_ROM_INT(P_LOW_FLOAT)}, { MP_ROM_QSTR(MP_QSTR_P_TT_00), MP_ROM_INT(P_TT_00)}, { MP_ROM_QSTR(MP_QSTR_P_TT_01), MP_ROM_INT(P_TT_01)}, { MP_ROM_QSTR(MP_QSTR_P_TT_10), MP_ROM_INT(P_TT_10)}, { MP_ROM_QSTR(MP_QSTR_P_TT_11), MP_ROM_INT(P_TT_11)}, { MP_ROM_QSTR(MP_QSTR_P_OE), MP_ROM_INT(P_OE)}, { MP_ROM_QSTR(MP_QSTR_P_CHANNEL), MP_ROM_INT(P_CHANNEL)}, { MP_ROM_QSTR(MP_QSTR_P_BITDAC), MP_ROM_INT(P_BITDAC)}, { MP_ROM_QSTR(MP_QSTR_P_NORMAL), MP_ROM_INT(P_NORMAL)}, { MP_ROM_QSTR(MP_QSTR_P_REPOSITORY), MP_ROM_INT(P_REPOSITORY)}, { MP_ROM_QSTR(MP_QSTR_P_DAC_NOISE), MP_ROM_INT(P_DAC_NOISE)}, { MP_ROM_QSTR(MP_QSTR_P_DAC_DITHER_RND), MP_ROM_INT(P_DAC_DITHER_RND)}, { MP_ROM_QSTR(MP_QSTR_P_DAC_DITHER_PWM), MP_ROM_INT(P_DAC_DITHER_PWM)}, { MP_ROM_QSTR(MP_QSTR_P_PULSE), MP_ROM_INT(P_PULSE)}, { MP_ROM_QSTR(MP_QSTR_P_TRANSITION), MP_ROM_INT(P_TRANSITION)}, { MP_ROM_QSTR(MP_QSTR_P_NCO_FREQ), MP_ROM_INT(P_NCO_FREQ)}, { MP_ROM_QSTR(MP_QSTR_P_NCO_DUTY), MP_ROM_INT(P_NCO_DUTY)}, { MP_ROM_QSTR(MP_QSTR_P_PWM_TRIANGLE), MP_ROM_INT(P_PWM_TRIANGLE)}, { MP_ROM_QSTR(MP_QSTR_P_PWM_SAWTOOTH), MP_ROM_INT(P_PWM_SAWTOOTH)}, { MP_ROM_QSTR(MP_QSTR_P_PWM_SMPS), MP_ROM_INT(P_PWM_SMPS)}, { MP_ROM_QSTR(MP_QSTR_P_QUADRATURE), MP_ROM_INT(P_QUADRATURE)}, { MP_ROM_QSTR(MP_QSTR_P_REG_UP), MP_ROM_INT(P_REG_UP)}, { MP_ROM_QSTR(MP_QSTR_P_REG_UP_DOWN), MP_ROM_INT(P_REG_UP_DOWN)}, { MP_ROM_QSTR(MP_QSTR_P_COUNT_RISES), MP_ROM_INT(P_COUNT_RISES)}, { MP_ROM_QSTR(MP_QSTR_P_COUNT_HIGHS), MP_ROM_INT(P_COUNT_HIGHS)}, { MP_ROM_QSTR(MP_QSTR_P_STATE_TICKS), MP_ROM_INT(P_STATE_TICKS)}, { MP_ROM_QSTR(MP_QSTR_P_HIGH_TICKS), MP_ROM_INT(P_HIGH_TICKS)}, { MP_ROM_QSTR(MP_QSTR_P_EVENTS_TICKS), MP_ROM_INT(P_EVENTS_TICKS)}, { MP_ROM_QSTR(MP_QSTR_P_PERIODS_TICKS), MP_ROM_INT(P_PERIODS_TICKS)}, { MP_ROM_QSTR(MP_QSTR_P_PERIODS_HIGHS), MP_ROM_INT(P_PERIODS_HIGHS)}, { MP_ROM_QSTR(MP_QSTR_P_COUNTER_TICKS), MP_ROM_INT(P_COUNTER_TICKS)}, { MP_ROM_QSTR(MP_QSTR_P_COUNTER_HIGHS), MP_ROM_INT(P_COUNTER_HIGHS)}, { MP_ROM_QSTR(MP_QSTR_P_COUNTER_PERIODS), MP_ROM_INT(P_COUNTER_PERIODS)}, { MP_ROM_QSTR(MP_QSTR_P_ADC), MP_ROM_INT(P_ADC)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_EXT), MP_ROM_INT(P_ADC_EXT)}, { MP_ROM_QSTR(MP_QSTR_P_ADC_SCOPE), MP_ROM_INT(P_ADC_SCOPE)}, { MP_ROM_QSTR(MP_QSTR_P_USB_PAIR), MP_ROM_INT(P_USB_PAIR)}, { MP_ROM_QSTR(MP_QSTR_P_SYNC_TX), MP_ROM_INT(P_SYNC_TX)}, { MP_ROM_QSTR(MP_QSTR_P_SYNC_RX), MP_ROM_INT(P_SYNC_RX)}, { MP_ROM_QSTR(MP_QSTR_P_ASYNC_TX), MP_ROM_INT(P_ASYNC_TX)}, { MP_ROM_QSTR(MP_QSTR_P_ASYNC_RX), MP_ROM_INT(P_ASYNC_RX)}, //#if MICROPY_HW_ENABLE_SDCARD // { MP_ROM_QSTR(MP_QSTR_SDCard), MP_ROM_PTR(&pyc_sdcard_type) }, //#endif }; STATIC MP_DEFINE_CONST_DICT(p2_module_globals, p2_module_globals_table); const mp_obj_module_t p2_module = { .base = { &mp_type_module }, .globals = (mp_obj_dict_t*)&p2_module_globals, };