@@ -108,11 +108,12 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_stop_scanning_networks_obj, wifi_rad
108
108
//| ...
109
109
//|
110
110
STATIC 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 };
112
112
static const mp_arg_t allowed_args [] = {
113
113
{ MP_QSTR_ssid , MP_ARG_REQUIRED | MP_ARG_OBJ },
114
114
{ MP_QSTR_password , MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
115
115
{ 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 } },
116
117
{ MP_QSTR_timeout , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_obj = mp_const_none } },
117
118
};
118
119
@@ -125,7 +126,6 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m
125
126
timeout = mp_obj_get_float (args [ARG_timeout ].u_obj );
126
127
}
127
128
128
-
129
129
mp_buffer_info_t ssid ;
130
130
mp_get_buffer_raise (args [ARG_ssid ].u_obj , & ssid , MP_BUFFER_READ );
131
131
@@ -138,7 +138,19 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m
138
138
}
139
139
}
140
140
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 );
142
154
if (error == WIFI_RADIO_ERROR_AUTH ) {
143
155
mp_raise_ConnectionError (translate ("Authentication failure" ));
144
156
} else if (error == WIFI_RADIO_ERROR_NO_AP_FOUND ) {
0 commit comments