VSF Documented
vsf_wifi.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_WIFI_H__
19#define __VSF_WIFI_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "./vsf_wifi_cfg.h"
24
25#if VSF_USE_WIFI == ENABLED
26
27#include "kernel/vsf_kernel.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33/*============================ MACROS ========================================*/
34
35/*
36 * Auth / cipher constants (kept stable across chips so the application can
37 * pass a single vsf_wifi_auth_cfg_t regardless of the underlying NIC).
38 */
39enum {
46};
47
48enum {
55};
56
57#define WIFI_LINK_FLAG_CONNECTED (1 << 0)
58#define WIFI_LINK_FLAG_AUTHORIZED (1 << 1)
59
60#define WIFI_SCAN_FLAG_PRIVACY (1 << 0)
61#define WIFI_SCAN_FLAG_WPS (1 << 1)
62#define WIFI_SCAN_FLAG_WPA (1 << 2)
63#define WIFI_SCAN_FLAG_WPA2 (1 << 3)
64
65/*
66 * Scratch op buffer size — caps how many ep0 register writes a parameterised
67 * chip op (set_channel / connect / disconnect ...) can issue. Static const
68 * scripts (e.g. the chip init table) are not bounded by this.
69 *
70 * Worst case today is RT28xx connect: 2 BSSID + 4 TX cfg + 4 RF + 1 RX filter
71 * = 11 ops. Default 16 leaves headroom.
72 */
73#ifndef VSF_WIFI_CFG_SCRATCH_OPS
74# define VSF_WIFI_CFG_SCRATCH_OPS 16
75#endif
76
77/* Maximum number of channels in a single active scan (2.4 GHz band). */
78#ifndef VSF_WIFI_CFG_SCAN_MAX_CHANNELS
79# define VSF_WIFI_CFG_SCAN_MAX_CHANNELS 14
80#endif
81
82/*============================ TYPES =========================================*/
83
84typedef struct vsf_wifi_t vsf_wifi_t;
87
88/*
89 * Asynchronous-completion callback. Invoked exactly once per async request
90 * (script / blob / single bus op). err == VSF_ERR_NONE on success.
91 */
92typedef void (*vsf_wifi_done_t)(vsf_wifi_t *wifi, vsf_err_t err);
93
94typedef struct vsf_wifi_scan_result_t {
103
104typedef struct vsf_wifi_link_info_t {
112
113typedef struct vsf_wifi_auth_cfg_t {
120
121/*
122 * One unit of register-access work — write `val` (LE32) to register `reg`.
123 *
124 * BBP / RF indirect writes are NOT a separate op type: chip backends pre-
125 * encode them (see RT_OP_BBP / RT_OP_RF in chip/rt28xx/vsf_wifi_rt28xx.c).
126 * This keeps the wifi state machine free of chip-specific knowledge.
127 */
128typedef struct vsf_wifi_op_t {
132
133/*
134 * Bulk register-block payload (firmware blob, calibration table, etc.).
135 * Each chunk is shipped via bus_ops->reg_block_write (or, when the bus
136 * lacks that primitive, decomposed into multiple reg_write calls by the
137 * generic layer). `data` MUST stay valid until the completion callback
138 * fires — pointing at .rodata is fine on every supported bus.
139 */
140typedef struct vsf_wifi_blob_t {
141 const uint8_t *data;
144 uint16_t chunk_size; /* hint; bus impl may override */
146
147/*============================ BUS OPS =======================================*
148 *
149 * Only the *most stable* bus primitives live in this vtable: single-register
150 * 32-bit write / read, plus an optional contiguous register-block write.
151 * These are guaranteed to be expressible on any addressable wifi NIC bus
152 * (USB ep0 vendor request, SDIO CMD52/CMD53, SPI register frame, MMIO).
153 *
154 * Higher-level concepts that vary across buses (bulk endpoint TX/RX, port
155 * reset, PHY interrupts, doorbells) are intentionally NOT abstracted here
156 * — those continue to live inside the bus driver until enough chip / bus
157 * combinations exist to draw a clean line.
158 *
159 * Concurrency contract: at most one bus_ops call may be in flight at any
160 * time. Issuing a second call before the previous `done` callback has
161 * fired is a programming error; the bus driver MAY return VSF_ERR_NOT_
162 * AVAILABLE in that case.
163 *==========================================================================*/
164
166 /* Single-register 32-bit write. REQUIRED.
167 *
168 * Returns VSF_ERR_NONE if the write was queued; completion is delivered
169 * later via `done`. `done` may be NULL for fire-and-forget. Synchronous
170 * errors (resource exhaustion, bus busy) are returned directly without
171 * invoking `done`.
172 */
174 vsf_wifi_done_t done);
175
176 /* Single-register 32-bit read. REQUIRED.
177 *
178 * `out` is written before `done` fires; caller must keep it valid until
179 * then. Same async / error semantics as reg_write.
180 */
182 vsf_wifi_done_t done);
183
184 /* Contiguous register-block write (firmware upload / calibration table
185 * / TX descriptor RAM). OPTIONAL — when NULL the generic layer falls
186 * back to a sequence of reg_write calls.
187 *
188 * `base` is the starting register/memory address; the bus implementation
189 * is free to fragment the payload internally (USB ep0 picks 64-byte
190 * vendor-request chunks, SDIO CMD53 picks block size, etc.). `data`
191 * must stay valid until `done` fires.
192 */
194 const uint8_t *data, uint32_t len,
195 vsf_wifi_done_t done);
196
197 /* Bus-layer ready notification. OPTIONAL — called when the wifi init
198 * chain completes successfully (before vsf_wifi_on_ready). The bus
199 * driver uses this to enable the data path (e.g. submit bulk RX URBs).
200 */
201 void (*on_ready)(vsf_wifi_t *wifi);
202};
203
204/*============================ CHIP DRIVER VTABLE ============================*
205 *
206 * All chip operations are async: the chip driver builds an op-script (static
207 * .rodata or wifi->scratch_ops) and submits it via vsf_wifi_run_script. The
208 * outer `done` callback fires when the entire script has been ACKed by the
209 * device. Returning VSF_ERR_NONE from these hooks means the script was
210 * successfully queued; actual completion arrives later via `done`.
211 *
212 * The wifi layer never calls bus_ops directly — it always goes through this
213 * chip vtable. Conversely the chip code only sees bus_ops, never the bus
214 * driver's private types.
215 *==========================================================================*/
216
218 const char *name;
219
220 /* Optional firmware uploader (rt2870.bin etc.). Invoked once before
221 * init() during attach. Pure ops can use vsf_wifi_run_script; bulk
222 * blob uploads call vsf_wifi_run_blob. Leave NULL when the chip needs
223 * no firmware. */
226 void (*fini) (vsf_wifi_t *wifi);
228 vsf_wifi_done_t done);
230 vsf_wifi_done_t done);
231 vsf_err_t (*set_mac_addr) (vsf_wifi_t *wifi, const uint8_t mac[6],
232 vsf_wifi_done_t done);
234 vsf_wifi_done_t done);
236 const vsf_wifi_auth_cfg_t *cfg,
237 vsf_wifi_done_t done);
239 const uint8_t bssid[6], const uint8_t *ssid,
240 uint8_t ssid_len, uint8_t channel,
241 vsf_wifi_done_t done);
244 vsf_wifi_link_info_t *info); /* sync */
245
246 /* Optional RX-frame parser used during scan. When non-NULL and the
247 * driver is currently scanning, the wifi layer routes incoming frames
248 * here instead of vsf_wifi_on_rx; the chip code extracts beacons /
249 * probe responses and emits vsf_wifi_on_scan_result(). */
250 void (*parse_rx) (vsf_wifi_t *wifi, uint8_t *frame, uint16_t len);
251};
252
253/*============================ APPLICATION CALLBACKS =========================*
254 *
255 * Weak hooks supplied by the application. All run in the bus driver's EDA
256 * context (not from ISR). Default no-op implementations live in vsf_wifi.c.
257 *==========================================================================*/
258
259extern void vsf_wifi_on_new (vsf_wifi_t *wifi);
260extern void vsf_wifi_on_del (vsf_wifi_t *wifi);
261extern void vsf_wifi_on_rx (vsf_wifi_t *wifi,
262 uint8_t *frame, uint16_t len);
263extern void vsf_wifi_on_ready (vsf_wifi_t *wifi);
264extern void vsf_wifi_on_scan_result(vsf_wifi_t *wifi,
265 const vsf_wifi_scan_result_t *result);
266extern void vsf_wifi_on_scan_done (vsf_wifi_t *wifi);
267extern void vsf_wifi_on_link_up (vsf_wifi_t *wifi,
268 const vsf_wifi_link_info_t *info);
269extern void vsf_wifi_on_link_down (vsf_wifi_t *wifi, uint8_t reason);
270
271/*============================ USER API ======================================*/
272
273/* Inspection. */
275const char * vsf_wifi_get_chip_name(vsf_wifi_t *wifi);
276bool vsf_wifi_is_ready (vsf_wifi_t *wifi);
277
278/* Mutation. Calls return VSF_ERR_NOT_READY before vsf_wifi_on_ready,
279 * VSF_ERR_NOT_AVAILABLE while a scan is in progress, and the chip driver's
280 * own error otherwise. All async — completion is signalled by either the
281 * relevant on_xxx callback or by the next observable side effect (RSSI,
282 * link_info, etc.). */
283void vsf_wifi_set_channel (vsf_wifi_t *wifi, uint8_t channel);
284vsf_err_t vsf_wifi_set_mac (vsf_wifi_t *wifi, const uint8_t mac[6]);
287 const vsf_wifi_auth_cfg_t *cfg);
288
289/*
290 * Active scan: hop through the supplied channel list, dwelling `dwell_ms`
291 * milliseconds on each channel. Beacon / probe-response frames are routed
292 * to the chip parser (drv->parse_rx) which feeds vsf_wifi_on_scan_result.
293 * vsf_wifi_on_scan_done() is fired exactly once when every channel has
294 * been visited. dwell_ms == 0 falls back to a sensible default (120 ms).
295 */
297 const uint8_t *channels,
298 uint8_t num_channels, uint16_t dwell_ms);
300
302 const uint8_t bssid[6],
303 const uint8_t *ssid, uint8_t ssid_len,
304 uint8_t channel);
308
309/*============================ BUS-LAYER API (used by USB shim, SDIO, ...) ==*
310 *
311 * These are exported so a bus driver can drive the wifi state machine.
312 * Application code does not call them directly.
313 *==========================================================================*/
314
315/*
316 * One-shot construction. After this call:
317 * - wifi->drv / wifi->bus_ops are bound;
318 * - all state fields are zero / cleared;
319 * - scan timer is initialised but not armed;
320 * - the wifi is NOT started yet (call vsf_wifi_start when ready).
321 *
322 * `post_eda` is the EDA on which the wifi layer will post follow-up events
323 * (scan-hop callbacks). Typically the bus driver passes its own EDA so
324 * that timer-driven hops are handled in the same context as bus completions.
325 */
326void vsf_wifi_init(vsf_wifi_t *wifi,
327 const vsf_wifi_chip_drv_t *drv,
328 const vsf_wifi_bus_ops_t *bus_ops,
329 vsf_eda_t *post_eda);
330
331/*
332 * Kick off the chip bring-up chain (firmware_load -> init -> set_rx_filter).
333 * On success vsf_wifi_on_ready fires when the chain finishes; on any error
334 * the bus driver's `on_attach_fail` (passed via vsf_wifi_set_attach_fail)
335 * is invoked so it can tear down the device.
336 *
337 * Must be called from the bus driver's EDA context, typically on
338 * VSF_EVT_INIT.
339 */
340void vsf_wifi_start(vsf_wifi_t *wifi);
341
342/*
343 * Bus driver tear-down. Cancels pending scans / scripts, marks the wifi
344 * as disconnecting so no further callbacks fire, and invokes the chip
345 * driver's fini hook. After this call the wifi struct can be freed.
346 */
347void vsf_wifi_fini(vsf_wifi_t *wifi);
348
349/*
350 * Set a callback that the wifi layer invokes when the bring-up chain or a
351 * scan reports an unrecoverable error. The bus driver typically removes
352 * the device interface from inside this hook. Default: NULL (errors are
353 * logged but otherwise ignored).
354 */
355typedef void (*vsf_wifi_attach_fail_t)(vsf_wifi_t *wifi, vsf_err_t err);
357
358/* Bus driver hands an inbound RX frame to the wifi layer; the layer routes
359 * it to drv->parse_rx (during scan) or vsf_wifi_on_rx (otherwise). */
360void vsf_wifi_on_rx_internal(vsf_wifi_t *wifi, uint8_t *frame, uint16_t len);
361
362/* Bus driver invokes this from its EDA when the wifi-posted scan-hop event
363 * lands; the wifi layer advances to the next channel or finishes the scan. */
365
366/* Custom EDA event used by vsf_wifi to trigger a scan hop on the bus EDA.
367 * The bus driver's evt-handler must dispatch this value to
368 * vsf_wifi_on_scan_hop_evt(). */
369#define VSF_WIFI_EVT_SCAN_HOP (VSF_EVT_USER + 0x40)
370
371/*============================ CHIP <-> WIFI INTERNAL API ====================*/
372
373/*
374 * Run a sequence of register writes asynchronously.
375 *
376 * ops : array of (reg, val) pairs. May point to .rodata or to
377 * wifi->scratch_ops. Caller MUST keep `ops` valid until
378 * `done` fires.
379 * count : number of ops to execute (must be > 0 for a real submission).
380 * done : completion callback (NULL = fire-and-forget).
381 *
382 * Returns VSF_ERR_NONE on accepted submission (completion via `done`),
383 * VSF_ERR_NOT_AVAILABLE when another script / blob is in flight, or a bus-
384 * level synchronous error otherwise.
385 */
387 const vsf_wifi_op_t *ops, uint16_t count,
388 vsf_wifi_done_t done);
389
390/*
391 * Stream a contiguous register-block payload. Internally calls
392 * bus_ops->reg_block_write when available; otherwise decomposes into
393 * ceil(len / 4) reg_write calls.
394 *
395 * Same concurrency rules as vsf_wifi_run_script: at most one script /
396 * blob in flight per wifi.
397 */
399 const vsf_wifi_blob_t *blob,
400 vsf_wifi_done_t done);
401
402/* Per-wifi scratch op buffer (shared by parameterised chip ops). */
404
405/*
406 * Firmware blob declared by chip/rt28xx/vsf_wifi_rt2870_firmware.c (weak
407 * stub). Link a strong override to ship the real rt2870.bin; the rt28xx
408 * chip driver uses size > 0 as the trigger to invoke run_blob during
409 * firmware_load.
410 */
411extern const uint8_t __rt2870_firmware_data[];
413
414#ifdef __cplusplus
415}
416#endif
417
418#endif // VSF_USE_WIFI
419#endif // __VSF_WIFI_H__
vsf_err_t
Definition __type.h:42
Definition vsf_eda.h:769
struct ieee80211_ext_chansw_ie data
Definition ieee80211.h:80
u8 bssid[ETH_ALEN]
Definition ieee80211.h:2
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
signed char int8_t
Definition stdint.h:4
Definition vsf_wifi.h:113
uint8_t pairwise_cipher
Definition vsf_wifi.h:115
uint8_t psk[32]
Definition vsf_wifi.h:117
uint8_t psk_len
Definition vsf_wifi.h:118
uint8_t group_cipher
Definition vsf_wifi.h:116
uint8_t auth_mode
Definition vsf_wifi.h:114
Definition vsf_wifi.h:140
const uint8_t * data
Definition vsf_wifi.h:141
uint16_t base_reg
Definition vsf_wifi.h:143
uint32_t len
Definition vsf_wifi.h:142
uint16_t chunk_size
Definition vsf_wifi.h:144
Definition vsf_wifi.h:165
vsf_err_t(* reg_block_write)(vsf_wifi_t *wifi, uint16_t base, const uint8_t *data, uint32_t len, vsf_wifi_done_t done)
Definition vsf_wifi.h:193
vsf_err_t(* reg_write)(vsf_wifi_t *wifi, uint16_t reg, uint32_t val, vsf_wifi_done_t done)
Definition vsf_wifi.h:173
void(* on_ready)(vsf_wifi_t *wifi)
Definition vsf_wifi.h:201
vsf_err_t(* reg_read)(vsf_wifi_t *wifi, uint16_t reg, uint32_t *out, vsf_wifi_done_t done)
Definition vsf_wifi.h:181
Definition vsf_wifi.h:217
vsf_err_t(* set_channel)(vsf_wifi_t *wifi, uint8_t channel, vsf_wifi_done_t done)
Definition vsf_wifi.h:227
vsf_err_t(* disconnect)(vsf_wifi_t *wifi, vsf_wifi_done_t done)
Definition vsf_wifi.h:242
void(* parse_rx)(vsf_wifi_t *wifi, uint8_t *frame, uint16_t len)
Definition vsf_wifi.h:250
vsf_err_t(* set_bssid)(vsf_wifi_t *wifi, const uint8_t bssid[6], vsf_wifi_done_t done)
Definition vsf_wifi.h:233
vsf_err_t(* get_link_info)(vsf_wifi_t *wifi, vsf_wifi_link_info_t *info)
Definition vsf_wifi.h:243
void(* fini)(vsf_wifi_t *wifi)
Definition vsf_wifi.h:226
vsf_err_t(* set_mac_addr)(vsf_wifi_t *wifi, const uint8_t mac[6], vsf_wifi_done_t done)
Definition vsf_wifi.h:231
const char * name
Definition vsf_wifi.h:218
vsf_err_t(* connect)(vsf_wifi_t *wifi, const uint8_t bssid[6], const uint8_t *ssid, uint8_t ssid_len, uint8_t channel, vsf_wifi_done_t done)
Definition vsf_wifi.h:238
vsf_err_t(* firmware_load)(vsf_wifi_t *wifi, vsf_wifi_done_t done)
Definition vsf_wifi.h:224
vsf_err_t(* init)(vsf_wifi_t *wifi, vsf_wifi_done_t done)
Definition vsf_wifi.h:225
vsf_err_t(* set_auth_mode)(vsf_wifi_t *wifi, const vsf_wifi_auth_cfg_t *cfg, vsf_wifi_done_t done)
Definition vsf_wifi.h:235
vsf_err_t(* set_rx_filter)(vsf_wifi_t *wifi, uint32_t mask, vsf_wifi_done_t done)
Definition vsf_wifi.h:229
Definition vsf_wifi.h:128
uint16_t reg
Definition vsf_wifi.h:129
uint32_t val
Definition vsf_wifi.h:130
Definition vsf_wifi.h:94
int8_t rssi
Definition vsf_wifi.h:99
uint8_t ssid[33]
Definition vsf_wifi.h:96
uint16_t capability
Definition vsf_wifi.h:100
uint8_t channel
Definition vsf_wifi.h:98
uint8_t bssid[6]
Definition vsf_wifi.h:95
uint8_t flags
Definition vsf_wifi.h:101
uint8_t ssid_len
Definition vsf_wifi.h:97
Definition vsf_wifi_priv.h:35
class vsf_$ * reg
bool vsf_wifi_is_ready(vsf_wifi_t *wifi)
Definition vsf_wifi.c:450
void vsf_wifi_on_del(vsf_wifi_t *wifi)
Definition vsf_wifi.c:51
void vsf_wifi_on_ready(vsf_wifi_t *wifi)
Definition vsf_wifi.c:58
const uint8_t __rt2870_firmware_data[]
Definition vsf_wifi_rt2870_firmware.c:64
vsf_err_t vsf_wifi_scan(vsf_wifi_t *wifi, const uint8_t *channels, uint8_t num_channels, uint16_t dwell_ms)
Definition vsf_wifi.c:500
vsf_err_t vsf_wifi_disconnect(vsf_wifi_t *wifi)
Definition vsf_wifi.c:553
vsf_wifi_op_t * vsf_wifi_get_scratch_ops(vsf_wifi_t *wifi)
Definition vsf_wifi.c:254
void vsf_wifi_on_rx_internal(vsf_wifi_t *wifi, uint8_t *frame, uint16_t len)
Definition vsf_wifi.c:365
@ WIFI_AUTH_WPA2_PSK
Definition vsf_wifi.h:43
@ WIFI_AUTH_WPA_WPA2_PSK
Definition vsf_wifi.h:44
@ WIFI_AUTH_WEP
Definition vsf_wifi.h:41
@ WIFI_AUTH_WPA2_ENTERPRISE
Definition vsf_wifi.h:45
@ WIFI_AUTH_WPA_PSK
Definition vsf_wifi.h:42
@ WIFI_AUTH_OPEN
Definition vsf_wifi.h:40
vsf_err_t vsf_wifi_set_bssid(vsf_wifi_t *wifi, const uint8_t bssid[6])
Definition vsf_wifi.c:485
void vsf_wifi_start(vsf_wifi_t *wifi)
Definition vsf_wifi.c:282
uint8_t vsf_wifi_get_channel(vsf_wifi_t *wifi)
Definition vsf_wifi.c:455
const char * vsf_wifi_get_chip_name(vsf_wifi_t *wifi)
Definition vsf_wifi.c:460
void vsf_wifi_on_link_down(vsf_wifi_t *wifi, uint8_t reason)
Definition vsf_wifi.c:73
void vsf_wifi_on_scan_hop_evt(vsf_wifi_t *wifi)
Definition vsf_wifi.c:436
@ WIFI_CIPHER_TKIP
Definition vsf_wifi.h:52
@ WIFI_CIPHER_TKIP_CCMP
Definition vsf_wifi.h:54
@ WIFI_CIPHER_CCMP
Definition vsf_wifi.h:53
@ WIFI_CIPHER_NONE
Definition vsf_wifi.h:49
@ WIFI_CIPHER_WEP40
Definition vsf_wifi.h:50
@ WIFI_CIPHER_WEP104
Definition vsf_wifi.h:51
vsf_err_t vsf_wifi_set_auth_mode(vsf_wifi_t *wifi, const vsf_wifi_auth_cfg_t *cfg)
Definition vsf_wifi.c:492
void vsf_wifi_on_rx(vsf_wifi_t *wifi, uint8_t *frame, uint16_t len)
Definition vsf_wifi.c:54
void vsf_wifi_set_channel(vsf_wifi_t *wifi, uint8_t channel)
Definition vsf_wifi.c:465
void vsf_wifi_fini(vsf_wifi_t *wifi)
Definition vsf_wifi.c:342
void vsf_wifi_on_link_up(vsf_wifi_t *wifi, const vsf_wifi_link_info_t *info)
Definition vsf_wifi.c:69
void vsf_wifi_on_scan_result(vsf_wifi_t *wifi, const vsf_wifi_scan_result_t *result)
Definition vsf_wifi.c:61
vsf_err_t vsf_wifi_get_link_info(vsf_wifi_t *wifi, vsf_wifi_link_info_t *info)
Definition vsf_wifi.c:560
vsf_err_t vsf_wifi_run_blob(vsf_wifi_t *wifi, const vsf_wifi_blob_t *blob, vsf_wifi_done_t done)
Definition vsf_wifi.c:212
void vsf_wifi_on_new(vsf_wifi_t *wifi)
Definition vsf_wifi.c:48
void vsf_wifi_on_scan_done(vsf_wifi_t *wifi)
Definition vsf_wifi.c:66
void vsf_wifi_set_attach_fail(vsf_wifi_t *wifi, vsf_wifi_attach_fail_t hook)
Definition vsf_wifi.c:277
void(* vsf_wifi_done_t)(vsf_wifi_t *wifi, vsf_err_t err)
Definition vsf_wifi.h:92
void vsf_wifi_init(vsf_wifi_t *wifi, const vsf_wifi_chip_drv_t *drv, const vsf_wifi_bus_ops_t *bus_ops, vsf_eda_t *post_eda)
Definition vsf_wifi.c:261
vsf_err_t vsf_wifi_connect(vsf_wifi_t *wifi, const uint8_t bssid[6], const uint8_t *ssid, uint8_t ssid_len, uint8_t channel)
Definition vsf_wifi.c:544
vsf_err_t vsf_wifi_run_script(vsf_wifi_t *wifi, const vsf_wifi_op_t *ops, uint16_t count, vsf_wifi_done_t done)
Definition vsf_wifi.c:134
vsf_err_t vsf_wifi_scan_stop(vsf_wifi_t *wifi)
Definition vsf_wifi.c:531
const uint32_t __rt2870_firmware_size
Definition vsf_wifi_rt2870_firmware.c:67
vsf_err_t vsf_wifi_set_mac(vsf_wifi_t *wifi, const uint8_t mac[6])
Definition vsf_wifi.c:478
void(* vsf_wifi_attach_fail_t)(vsf_wifi_t *wifi, vsf_err_t err)
Definition vsf_wifi.h:355
Generated from commit: vsfteam/vsf@3b461d0