Skip to content

Commit 1f8cab9

Browse files
authored
Wrap additional CYW43 functions (#3529)
1 parent 8047682 commit 1f8cab9

4 files changed

Lines changed: 58 additions & 0 deletions

File tree

‎cores/rp2040/freertos/freertos-lwip.cpp‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,16 @@ static void lwipThread(void *params) {
493493
*(r->ret) = __real_cyw43_wifi_leave(r->self, r->itf);
494494
break;
495495
}
496+
case __cyw43_ioctl: {
497+
__cyw43_ioctl_req *r = (__cyw43_ioctl_req *)w.req;
498+
*(r->ret) = __real_cyw43_ioctl(r->self, r->cmd, r->len, r->buf, r->iface);
499+
break;
500+
}
501+
case __cyw43_wifi_update_multicast_filter: {
502+
__cyw43_wifi_update_multicast_filter_req *r = (__cyw43_wifi_update_multicast_filter_req *)w.req;
503+
*(r->ret) = __real_cyw43_wifi_update_multicast_filter(r->self, r->addr, r->add);
504+
break;
505+
}
496506
#endif
497507
case __callback: {
498508
__callback_req *r = (__callback_req *)w.req;

‎cores/rp2040/lwip_wrap.cpp‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,32 @@ extern "C" {
11301130
#endif
11311131
return __real_cyw43_wifi_leave(self, itf);
11321132
}
1133+
1134+
int __real_cyw43_ioctl(cyw43_t *self, uint32_t cmd, size_t len, uint8_t *buf, uint32_t iface);
1135+
int __wrap_cyw43_ioctl(cyw43_t *self, uint32_t cmd, size_t len, uint8_t *buf, uint32_t iface) {
1136+
#ifdef __FREERTOS
1137+
if (!__isLWIPThread()) {
1138+
int ret;
1139+
__cyw43_ioctl_req req = { self, cmd, len, buf, iface, &ret };
1140+
__lwip(__cyw43_ioctl, &req);
1141+
return ret;
1142+
}
1143+
#endif
1144+
return __real_cyw43_ioctl(self, cmd, len, buf, iface);
1145+
}
1146+
1147+
int __real_cyw43_wifi_update_multicast_filter(cyw43_t *self, uint8_t *addr, bool add);
1148+
int __wrap_cyw43_wifi_update_multicast_filter(cyw43_t *self, uint8_t *addr, bool add) {
1149+
#ifdef __FREERTOS
1150+
if (!__isLWIPThread()) {
1151+
int ret;
1152+
__cyw43_wifi_update_multicast_filter_req req = { self, addr, add, &ret };
1153+
__lwip(__cyw43_wifi_update_multicast_filter, &req);
1154+
return ret;
1155+
}
1156+
#endif
1157+
return __real_cyw43_wifi_update_multicast_filter(self, addr, add);
1158+
}
11331159
#endif
11341160

11351161

‎cores/rp2040/lwip_wrap.h‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ typedef enum {
181181
#if defined(PICO_CYW43_SUPPORTED)
182182
__cyw43_wifi_join = 9500,
183183
__cyw43_wifi_leave,
184+
__cyw43_ioctl,
185+
__cyw43_wifi_update_multicast_filter,
184186
#endif
185187

186188
__callback = 10000,
@@ -269,6 +271,8 @@ extern void __real_netif_set_default(struct netif *netif);
269271
extern err_t __real_ethernet_input(struct pbuf *p, struct netif *netif);
270272
extern int __real_cyw43_wifi_join(cyw43_t *self, size_t ssid_len, const uint8_t *ssid, size_t key_len, const uint8_t *key, uint32_t auth_type, const uint8_t *bssid, uint32_t channel);
271273
extern int __real_cyw43_wifi_leave(cyw43_t *self, int itf);
274+
extern int __real_cyw43_ioctl(cyw43_t *self, uint32_t cmd, size_t len, uint8_t *buf, uint32_t iface);
275+
extern int __real_cyw43_wifi_update_multicast_filter(cyw43_t *self, uint8_t *addr, bool add);
272276

273277

274278
typedef struct {
@@ -730,6 +734,22 @@ typedef struct {
730734
int itf;
731735
int *ret;
732736
} __cyw43_wifi_leave_req;
737+
738+
typedef struct {
739+
cyw43_t *self;
740+
uint32_t cmd;
741+
size_t len;
742+
uint8_t *buf;
743+
uint32_t iface;
744+
int *ret;
745+
} __cyw43_ioctl_req;
746+
747+
typedef struct {
748+
cyw43_t *self;
749+
uint8_t *addr;
750+
bool add;
751+
int *ret;
752+
} __cyw43_wifi_update_multicast_filter_req;
733753
#endif
734754

735755
// Run a callback in the LWIP thread (i.e. for Ethernet device polling and packet reception)

‎lib/core_wrap.txt‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,7 @@
115115
-Wl,--wrap=cyw43_schedule_internal_poll_dispatch
116116
-Wl,--wrap=cyw43_wifi_join
117117
-Wl,--wrap=cyw43_wifi_leave
118+
-Wl,--wrap=cyw43_ioctl
119+
-Wl,--wrap=cyw43_wifi_update_multicast_filter
118120
-Wl,--wrap=cyw43_arch_gpio_put
119121
-Wl,--wrap=btstack_run_loop_async_context_get_instance

0 commit comments

Comments
 (0)