diff options
Diffstat (limited to 'cc3200/mods')
| -rw-r--r-- | cc3200/mods/modwlan.c | 24 | ||||
| -rw-r--r-- | cc3200/mods/pybsleep.c | 36 |
2 files changed, 45 insertions, 15 deletions
diff --git a/cc3200/mods/modwlan.c b/cc3200/mods/modwlan.c index 19d6dcae9..6aecaecc6 100644 --- a/cc3200/mods/modwlan.c +++ b/cc3200/mods/modwlan.c @@ -46,6 +46,7 @@ #include "mpexception.h" #include "mpcallback.h" #include "pybsleep.h" +#include "antenna.h" /****************************************************************************** @@ -1047,6 +1048,24 @@ STATIC mp_obj_t wlan_connections (mp_obj_t self_in) { } STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_connections_obj, wlan_connections); +#if MICROPY_HW_ANTENNA_DIVERSITY +/// \method antenna() +/// select the antenna type to use (internal or external) +STATIC mp_obj_t wlan_antenna (mp_obj_t self_in, mp_obj_t antenna_o) { + antenna_type_t _antenna = mp_obj_get_int(antenna_o); + + if (_antenna != ANTENNA_TYPE_INTERNAL && _antenna != ANTENNA_TYPE_EXTERNAL) { + // invalid antenna type + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments)); + } + + antenna_select (_antenna); + + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_2(wlan_antenna_obj, wlan_antenna); +#endif + STATIC const mp_map_elem_t wlan_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_connect), (mp_obj_t)&wlan_connect_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_scan), (mp_obj_t)&wlan_scan_obj }, @@ -1055,6 +1074,9 @@ STATIC const mp_map_elem_t wlan_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_ifconfig), (mp_obj_t)&wlan_ifconfig_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_info), (mp_obj_t)&wlan_info_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_connections), (mp_obj_t)&wlan_connections_obj }, +#if MICROPY_HW_ANTENNA_DIVERSITY + { MP_OBJ_NEW_QSTR(MP_QSTR_antenna), (mp_obj_t)&wlan_antenna_obj }, +#endif #if MICROPY_PORT_WLAN_URN { MP_OBJ_NEW_QSTR(MP_QSTR_urn), (mp_obj_t)&wlan_urn_obj }, #endif @@ -1070,6 +1092,8 @@ STATIC const mp_map_elem_t wlan_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_STA), MP_OBJ_NEW_SMALL_INT(ROLE_STA) }, { MP_OBJ_NEW_QSTR(MP_QSTR_AP), MP_OBJ_NEW_SMALL_INT(ROLE_AP) }, { MP_OBJ_NEW_QSTR(MP_QSTR_P2P), MP_OBJ_NEW_SMALL_INT(ROLE_P2P) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_INT_ANTENNA), MP_OBJ_NEW_SMALL_INT(ANTENNA_TYPE_INTERNAL) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_EXT_ANTENNA), MP_OBJ_NEW_SMALL_INT(ANTENNA_TYPE_EXTERNAL) }, }; STATIC MP_DEFINE_CONST_DICT(wlan_locals_dict, wlan_locals_dict_table); diff --git a/cc3200/mods/pybsleep.c b/cc3200/mods/pybsleep.c index ea35f3f77..a84c6aefd 100644 --- a/cc3200/mods/pybsleep.c +++ b/cc3200/mods/pybsleep.c @@ -136,7 +136,7 @@ STATIC NORETURN void pybsleep_suspend_enter (void); void pybsleep_suspend_exit (void); STATIC void pybsleep_obj_wakeup (void); STATIC void PRCMInterruptHandler (void); -STATIC void pybsleep_iopark (void); +STATIC void pybsleep_iopark (bool hibernate); STATIC bool setup_timer_lpds_wake (void); STATIC bool setup_timer_hibernate_wake (void); @@ -339,7 +339,7 @@ STATIC NORETURN void pybsleep_suspend_enter (void) { mperror_heartbeat_switch_off(); // park the gpio pins - pybsleep_iopark(); + pybsleep_iopark(false); // store the cpu registers sleep_store(); @@ -450,31 +450,29 @@ STATIC void pybsleep_obj_wakeup (void) { } } -STATIC void pybsleep_iopark (void) { +STATIC void pybsleep_iopark (bool hibernate) { mp_map_t *named_map = mp_obj_dict_get_map((mp_obj_t)&pin_cpu_pins_locals_dict); for (uint i = 0; i < named_map->used; i++) { pin_obj_t * pin = (pin_obj_t *)named_map->table[i].value; // skip the sflash pins since these are shared with the network processor switch (pin->pin_num) { - case PIN_11: - case PIN_12: - case PIN_13: - case PIN_14: #ifdef DEBUG - // also skip the JTAG pins + // skip the JTAG pins case PIN_16: case PIN_17: case PIN_19: case PIN_20: -#endif break; +#endif default: // enable a weak pull-down if the pin is unused if (!pin->isused) { MAP_PinConfigSet(pin->pin_num, pin->strength, PIN_TYPE_STD_PD); } - // make it an input - MAP_PinDirModeSet(pin->pin_num, PIN_DIR_MODE_IN); + if (hibernate) { + // make it an input + MAP_PinDirModeSet(pin->pin_num, PIN_DIR_MODE_IN); + } break; } } @@ -489,9 +487,17 @@ STATIC void pybsleep_iopark (void) { HWREG(0x4402E0F4) &= ~(0x3 << 8); HWREG(0x4402E0F4) |= (0x1 << 8); - // park the antenna selection pins - HWREG(0x4402E108) = 0x00000E61; - HWREG(0x4402E10C) = 0x00000E61; + // if the board has antenna diversity, only park the antenna + // selection pins when going into hibernation +#if MICROPY_HW_ANTENNA_DIVERSITY + if (hibernate) { +#endif + // park the antenna selection pins + HWREG(0x4402E108) = 0x00000E61; + HWREG(0x4402E10C) = 0x00000E61; +#if MICROPY_HW_ANTENNA_DIVERSITY + } +#endif } STATIC bool setup_timer_lpds_wake (void) { @@ -632,7 +638,7 @@ STATIC mp_obj_t pyb_sleep_hibernate (mp_obj_t self_in) { wlan_stop(SL_STOP_TIMEOUT); pybsleep_flash_powerdown(); // must be done just before entering hibernate mode - pybsleep_iopark(); + pybsleep_iopark(true); MAP_PRCMHibernateEnter(); return mp_const_none; } |
