ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_c6link_wifi.c
Go to the documentation of this file.
1
28
29#include "ra8_c6link_wifi.h"
30
31#include <stdint.h>
32
33#include "ra8_attributes.h"
34#include "ra8_c6link.h"
35#include "ra8_c6link_internal.h"
36
64
125
126RA8_PRIV ra8_err_t priv_c6link_take_resp(void* ctx, const void* msg_v)
127{
129 const Rpc* msg = (const Rpc*)msg_v;
130 int32_t resp = 0;
131
132 switch ((int32_t)msg->msg_id) {
133 case (int32_t)RPC_ID__Resp_WifiInit:
134 resp = (msg->resp_wifi_init != nullptr) ? msg->resp_wifi_init->resp : -1;
135 break;
136 case (int32_t)RPC_ID__Resp_SetWifiMode:
137 resp = (msg->resp_set_wifi_mode != nullptr) ? msg->resp_set_wifi_mode->resp : -1;
138 break;
139 case (int32_t)RPC_ID__Resp_WifiSetConfig:
140 resp = (msg->resp_wifi_set_config != nullptr) ? msg->resp_wifi_set_config->resp : -1;
141 break;
142 case (int32_t)RPC_ID__Resp_WifiStart:
143 resp = (msg->resp_wifi_start != nullptr) ? msg->resp_wifi_start->resp : -1;
144 break;
145 case (int32_t)RPC_ID__Resp_WifiStop:
146 resp = (msg->resp_wifi_stop != nullptr) ? msg->resp_wifi_stop->resp : -1;
147 break;
148 case (int32_t)RPC_ID__Resp_WifiDeinit:
149 resp = (msg->resp_wifi_deinit != nullptr) ? msg->resp_wifi_deinit->resp : -1;
150 break;
151 case (int32_t)RPC_ID__Resp_WifiConnect:
152 resp = (msg->resp_wifi_connect != nullptr) ? msg->resp_wifi_connect->resp : -1;
153 break;
154 case (int32_t)RPC_ID__Resp_WifiDisconnect:
155 resp = (msg->resp_wifi_disconnect != nullptr) ? msg->resp_wifi_disconnect->resp : -1;
156 break;
157 default:
158 resp = -1;
159 break;
160 }
161 return priv_c6link_resp(take->link, take->rpc_id, resp);
162}
163
191typedef struct ra8_c6link_bare_body {
192 RpcReqWifiStart start;
193 RpcReqWifiStop stop;
194 RpcReqWifiDeinit deinit;
195 RpcReqWifiConnect connect;
196 RpcReqWifiDisconnect disconnect;
198
222 uint32_t req_id,
223 uint32_t* resp_id)
224{
225 *resp_id = 0U;
226 switch ((int32_t)req_id) {
227 case (int32_t)RPC_ID__Req_WifiStart:
228 rpc__req__wifi_start__init(&body->start);
229 req->payload_case = RPC__PAYLOAD_REQ_WIFI_START;
230 req->req_wifi_start = &body->start;
231 *resp_id = (uint32_t)RPC_ID__Resp_WifiStart;
232 break;
233 case (int32_t)RPC_ID__Req_WifiStop:
234 rpc__req__wifi_stop__init(&body->stop);
235 req->payload_case = RPC__PAYLOAD_REQ_WIFI_STOP;
236 req->req_wifi_stop = &body->stop;
237 *resp_id = (uint32_t)RPC_ID__Resp_WifiStop;
238 break;
239 case (int32_t)RPC_ID__Req_WifiDeinit:
240 rpc__req__wifi_deinit__init(&body->deinit);
241 req->payload_case = RPC__PAYLOAD_REQ_WIFI_DEINIT;
242 req->req_wifi_deinit = &body->deinit;
243 *resp_id = (uint32_t)RPC_ID__Resp_WifiDeinit;
244 break;
245 case (int32_t)RPC_ID__Req_WifiConnect:
246 rpc__req__wifi_connect__init(&body->connect);
247 req->payload_case = RPC__PAYLOAD_REQ_WIFI_CONNECT;
248 req->req_wifi_connect = &body->connect;
249 *resp_id = (uint32_t)RPC_ID__Resp_WifiConnect;
250 break;
251 case (int32_t)RPC_ID__Req_WifiDisconnect:
252 rpc__req__wifi_disconnect__init(&body->disconnect);
253 req->payload_case = RPC__PAYLOAD_REQ_WIFI_DISCONNECT;
254 req->req_wifi_disconnect = &body->disconnect;
255 *resp_id = (uint32_t)RPC_ID__Resp_WifiDisconnect;
256 break;
257 default:
258 return false;
259 }
260 return true;
261}
262
264{
265 if (link == nullptr) {
266 return k_ra8_err_null_ptr;
267 }
268
269 Rpc req;
270 rpc__init(&req);
271 req.msg_type = RPC_TYPE__Req;
272 req.msg_id = (RpcId)req_id;
273
275 uint32_t resp_id = 0U;
276 if (!internal_c6link_wifi_bare_body(&req, &body, req_id, &resp_id)) {
278 }
279
280 ra8_c6link_take_ctx_t take = {.link = link, .out = nullptr, .rpc_id = req_id};
281 return priv_c6link_rpc_call(link, &req, resp_id, priv_c6link_take_resp, &take);
282}
283
305{
306 WifiInitConfig cfg;
307 wifi_init_config__init(&cfg);
308 cfg.static_rx_buf_num = (int32_t)k_ra8_c6link_wifi_static_rx;
309 cfg.dynamic_rx_buf_num = (int32_t)k_ra8_c6link_wifi_dynamic_rx;
310 cfg.tx_buf_type = (int32_t)k_ra8_c6link_wifi_tx_type;
311 cfg.static_tx_buf_num = (int32_t)k_ra8_c6link_wifi_static_tx;
312 cfg.dynamic_tx_buf_num = (int32_t)k_ra8_c6link_wifi_dynamic_tx;
313 cfg.rx_mgmt_buf_type = (int32_t)k_ra8_c6link_wifi_rx_mgmt_type;
314 cfg.rx_mgmt_buf_num = (int32_t)k_ra8_c6link_wifi_rx_mgmt_num;
315 cfg.ampdu_rx_enable = (int32_t)k_ra8_c6link_wifi_ampdu_on;
316 cfg.ampdu_tx_enable = (int32_t)k_ra8_c6link_wifi_ampdu_on;
317 cfg.nvs_enable = (int32_t)k_ra8_c6link_wifi_nvs_on;
318 cfg.rx_ba_win = (int32_t)k_ra8_c6link_wifi_ba_win;
319 cfg.beacon_max_len = (int32_t)k_ra8_c6link_wifi_beacon_max;
320 cfg.mgmt_sbuf_num = (int32_t)k_ra8_c6link_wifi_mgmt_sbuf;
321 cfg.feature_caps = (uint64_t)k_ra8_c6link_wifi_feature_caps;
322 cfg.sta_disconnected_pm = true;
323 cfg.espnow_max_encrypt_num = (int32_t)k_ra8_c6link_wifi_espnow_keys;
324 cfg.tx_hetb_queue_num = (int32_t)k_ra8_c6link_wifi_hetb_queues;
325 cfg.magic = (int32_t)k_ra8_c6link_wifi_magic;
326
327 RpcReqWifiInit body;
328 rpc__req__wifi_init__init(&body);
329 body.cfg = &cfg;
330
331 Rpc req;
332 rpc__init(&req);
333 req.msg_type = RPC_TYPE__Req;
334 req.msg_id = RPC_ID__Req_WifiInit;
335 req.payload_case = RPC__PAYLOAD_REQ_WIFI_INIT;
336 req.req_wifi_init = &body;
337
338 ra8_c6link_take_ctx_t take = {.link = link,
339 .out = nullptr,
340 .rpc_id = (uint32_t)RPC_ID__Req_WifiInit};
341 return priv_c6link_rpc_call(link,
342 &req,
343 (uint32_t)RPC_ID__Resp_WifiInit,
345 &take);
346}
347
366{
367 RpcReqSetMode body;
368 rpc__req__set_mode__init(&body);
369 body.mode = (int32_t)k_ra8_c6link_mode_sta;
370
371 Rpc req;
372 rpc__init(&req);
373 req.msg_type = RPC_TYPE__Req;
374 req.msg_id = RPC_ID__Req_SetWifiMode;
375 req.payload_case = RPC__PAYLOAD_REQ_SET_WIFI_MODE;
376 req.req_set_wifi_mode = &body;
377
378 ra8_c6link_take_ctx_t take = {.link = link,
379 .out = nullptr,
380 .rpc_id = (uint32_t)RPC_ID__Req_SetWifiMode};
381 return priv_c6link_rpc_call(link,
382 &req,
383 (uint32_t)RPC_ID__Resp_SetWifiMode,
385 &take);
386}
387
389{
390 if (link == nullptr) {
391 return k_ra8_err_null_ptr;
392 }
393 if (!ra8_c6link_is_open(link)) {
395 }
396
397 const ra8_err_t inited = internal_c6link_wifi_do_init(link);
398 if (inited != k_ra8_ok) {
399 return inited;
400 }
401 const ra8_err_t moded = internal_c6link_wifi_do_mode(link);
402 if (moded != k_ra8_ok) {
403 return moded;
404 }
405 return priv_c6link_bare_req(link, (uint32_t)RPC_ID__Req_WifiStart);
406}
407
409{
410 if (link == nullptr) {
411 return k_ra8_err_null_ptr;
412 }
413 if (!ra8_c6link_is_open(link)) {
415 }
416
417 const ra8_err_t stopped = priv_c6link_bare_req(link, (uint32_t)RPC_ID__Req_WifiStop);
418 const ra8_err_t deinit = priv_c6link_bare_req(link, (uint32_t)RPC_ID__Req_WifiDeinit);
419 return (stopped != k_ra8_ok) ? stopped : deinit;
420}
421
423{
424 if (link == nullptr) {
425 return k_ra8_err_null_ptr;
426 }
427 if (!ra8_c6link_is_open(link)) {
429 }
430 return priv_c6link_bare_req(link, (uint32_t)RPC_ID__Req_WifiDisconnect);
431}
Annotation-attribute framework macros for ra8-firmware.
#define RA8_PRIV
Module-private helper: shared across TUs but only inside one library.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
@ k_ra8_err_not_supported
Requested feature not compiled in, not wired, or not supported by this MCU variant.
Definition ra8_err.h:180
@ k_ra8_err_not_initialized
Module not initialized – _init() not yet called successfully.
Definition ra8_err.h:235
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
Definition ra8_err.h:478
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546