@@ -108,11 +108,12 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_stop_scanning_networks_obj, wifi_rad
108108//| ...
109109//|
110110STATIC mp_obj_t wifi_radio_connect (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
111- enum { ARG_ssid , ARG_password , ARG_channel , ARG_timeout };
111+ enum { ARG_ssid , ARG_password , ARG_channel , ARG_bssid , ARG_timeout };
112112 static const mp_arg_t allowed_args [] = {
113113 { MP_QSTR_ssid , MP_ARG_REQUIRED | MP_ARG_OBJ },
114114 { MP_QSTR_password , MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
115115 { MP_QSTR_channel , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 0 } },
116+ { MP_QSTR_bssid , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
116117 { MP_QSTR_timeout , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_obj = mp_const_none } },
117118 };
118119
@@ -125,7 +126,6 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m
125126 timeout = mp_obj_get_float (args [ARG_timeout ].u_obj );
126127 }
127128
128-
129129 mp_buffer_info_t ssid ;
130130 mp_get_buffer_raise (args [ARG_ssid ].u_obj , & ssid , MP_BUFFER_READ );
131131
@@ -138,7 +138,19 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m
138138 }
139139 }
140140
141- wifi_radio_error_t error = common_hal_wifi_radio_connect (self , ssid .buf , ssid .len , password .buf , password .len , args [ARG_channel ].u_int , timeout );
141+ #define MAC_ADDRESS_LENGTH 6
142+
143+ mp_buffer_info_t bssid ;
144+ bssid .len = 0 ;
145+ // Should probably make sure bssid is just bytes and not something else too
146+ if (args [ARG_bssid ].u_obj != MP_OBJ_NULL ) {
147+ mp_get_buffer_raise (args [ARG_bssid ].u_obj , & bssid , MP_BUFFER_READ );
148+ if (bssid .len != MAC_ADDRESS_LENGTH ) {
149+ mp_raise_ValueError (translate ("Invalid BSSID" ));
150+ }
151+ }
152+
153+ wifi_radio_error_t error = common_hal_wifi_radio_connect (self , ssid .buf , ssid .len , password .buf , password .len , args [ARG_channel ].u_int , timeout , bssid .buf , bssid .len );
142154 if (error == WIFI_RADIO_ERROR_AUTH ) {
143155 mp_raise_ConnectionError (translate ("Authentication failure" ));
144156 } else if (error == WIFI_RADIO_ERROR_NO_AP_FOUND ) {
0 commit comments