8#ifndef ZEPHYR_INCLUDE_DRIVERS_WIFI_ESP_AT_ESP_H_
9#define ZEPHYR_INCLUDE_DRIVERS_WIFI_ESP_AT_ESP_H_
18#include "modem_context.h"
19#include "modem_cmd_handler.h"
20#include "modem_iface_uart.h"
27#if defined(CONFIG_WIFI_ESP_AT_VERSION_1_7)
28#define _CWMODE "CWMODE_CUR"
29#define _CWSAP "CWSAP_CUR"
30#define _CWJAP "CWJAP_CUR"
31#define _CIPSTA "CIPSTA_CUR"
32#define _CIPSTAMAC "CIPSTAMAC_CUR"
33#define _CIPRECVDATA "+CIPRECVDATA,"
34#define _CIPRECVDATA_END ':'
36#define _CWMODE "CWMODE"
39#define _CIPSTA "CIPSTA"
40#define _CIPSTAMAC "CIPSTAMAC"
41#define _CIPRECVDATA "+CIPRECVDATA:"
42#define _CIPRECVDATA_END ','
51#if defined(CONFIG_WIFI_ESP_AT_PASSIVE_MODE)
52#if defined(CONFIG_WIFI_ESP_AT_VERSION_1_7)
53#define ESP_PROTO_PASSIVE(proto) (proto == IPPROTO_TCP)
55#define ESP_PROTO_PASSIVE(proto) \
56 (proto == IPPROTO_TCP || proto == IPPROTO_UDP)
59#define ESP_PROTO_PASSIVE(proto) 0
62#define ESP_BUS DT_BUS(DT_DRV_INST(0))
64#if DT_PROP(ESP_BUS, hw_flow_control) == 1
65#define _FLOW_CONTROL "3"
67#define _FLOW_CONTROL "0"
70#if DT_INST_NODE_HAS_PROP(0, target_speed)
71#define _UART_BAUD DT_INST_PROP(0, target_speed)
73#define _UART_BAUD DT_PROP(ESP_BUS, current_speed)
77 STRINGIFY(_UART_BAUD)",8,1,0,"_FLOW_CONTROL
79#define CONN_CMD_MAX_LEN (sizeof("AT+"_CWJAP"=\"\",\"\"") + \
80 WIFI_SSID_MAX_LEN + WIFI_PSK_MAX_LEN)
82#if defined(CONFIG_WIFI_ESP_AT_DNS_USE)
83#define ESP_MAX_DNS MIN(3, CONFIG_DNS_RESOLVER_MAX_SERVERS)
88#define ESP_MAX_SOCKETS 5
92#define CIPRECVDATA_MAX_LEN ESP_MTU
94#define INVALID_LINK_ID 255
96#define MDM_RING_BUF_SIZE CONFIG_WIFI_ESP_AT_MDM_RING_BUF_SIZE
97#define MDM_RECV_MAX_BUF CONFIG_WIFI_ESP_AT_MDM_RX_BUF_COUNT
98#define MDM_RECV_BUF_SIZE CONFIG_WIFI_ESP_AT_MDM_RX_BUF_SIZE
100#define ESP_CMD_TIMEOUT K_SECONDS(10)
101#define ESP_SCAN_TIMEOUT K_SECONDS(10)
102#define ESP_CONNECT_TIMEOUT K_SECONDS(20)
103#define ESP_INIT_TIMEOUT K_SECONDS(10)
105#define ESP_MODE_NONE 0
106#define ESP_MODE_STA 1
108#define ESP_MODE_STA_AP 3
110#define ESP_CMD_CWMODE(mode) \
111 "AT+"_CWMODE"="STRINGIFY(_CONCAT(ESP_MODE_, mode))
113#define ESP_CWDHCP_MODE_STATION "1"
114#if defined(CONFIG_WIFI_ESP_AT_VERSION_1_7)
115#define ESP_CWDHCP_MODE_SOFTAP "0"
117#define ESP_CWDHCP_MODE_SOFTAP "2"
120#if defined(CONFIG_WIFI_ESP_AT_VERSION_1_7)
121#define _ESP_CMD_DHCP_ENABLE(mode, enable) \
122 "AT+CWDHCP_CUR=" mode "," STRINGIFY(enable)
124#define _ESP_CMD_DHCP_ENABLE(mode, enable) \
125 "AT+CWDHCP=" STRINGIFY(enable) "," mode
128#define ESP_CMD_DHCP_ENABLE(mode, enable) \
129 _ESP_CMD_DHCP_ENABLE(_CONCAT(ESP_CWDHCP_MODE_, mode), enable)
131#define ESP_CMD_SET_IP(ip, gateway, mask) "AT+"_CIPSTA"=\"" \
132 ip "\",\"" gateway "\",\"" mask "\""
247 size_t offset,
size_t len);
282 clear_flags | set_flags);
319static inline void __esp_socket_work_submit(
struct esp_socket *sock,
334 __esp_socket_work_submit(sock,
work);
350 __esp_socket_work_submit(sock, &sock->
send_work);
389 const struct modem_cmd *handlers,
390 size_t handlers_len,
const char *buf,
393 return modem_cmd_send(&
data->mctx.iface, &
data->mctx.cmd_handler,
394 handlers, handlers_len, buf, &
data->sem_response,
atomic_t atomic_val_t
Definition: atomic.h:22
int atomic_t
Definition: atomic.h:21
static ALWAYS_INLINE atomic_val_t atomic_and(atomic_t *target, atomic_val_t value)
Definition: atomic_xtensa.h:111
static ALWAYS_INLINE bool atomic_cas(atomic_t *target, atomic_val_t oldval, atomic_val_t newval)
Definition: atomic_xtensa.h:42
static ALWAYS_INLINE atomic_val_t atomic_get(const atomic_t *target)
Definition: atomic_xtensa.h:16
static ALWAYS_INLINE atomic_val_t atomic_or(atomic_t *target, atomic_val_t value)
Definition: atomic_xtensa.h:99
ZTEST_BMEM int timeout
Definition: main.c:31
void esp_connect_work(struct k_work *work)
Definition: esp_offload.c:94
struct esp_socket * esp_socket_get(struct esp_data *data, struct net_context *context)
Definition: esp_socket.c:21
int esp_socket_put(struct esp_socket *sock)
Definition: esp_socket.c:45
static int esp_socket_queue_tx(struct esp_socket *sock, struct net_pkt *pkt)
Definition: esp.h:342
static enum net_ip_protocol esp_socket_ip_proto(struct esp_socket *sock)
Definition: esp.h:383
#define ESP_MAX_DNS
Definition: esp.h:85
void esp_recvdata_work(struct k_work *work)
Definition: esp_offload.c:480
#define ESP_MAX_SOCKETS
Definition: esp.h:88
static atomic_val_t esp_socket_flags_clear_and_set(struct esp_socket *sock, atomic_val_t clear_flags, atomic_val_t set_flags)
Definition: esp.h:277
static void esp_flags_set(struct esp_data *dev, uint8_t flags)
Definition: esp.h:363
struct esp_socket * esp_socket_ref(struct esp_socket *sock)
Definition: esp_socket.c:52
static int esp_cmd_send(struct esp_data *data, const struct modem_cmd *handlers, size_t handlers_len, const char *buf, k_timeout_t timeout)
Definition: esp.h:388
void esp_socket_workq_stop_and_flush(struct esp_socket *sock)
Definition: esp_socket.c:211
static bool esp_socket_flags_test_and_set(struct esp_socket *sock, atomic_val_t flags)
Definition: esp.h:297
static bool esp_flags_are_set(struct esp_data *dev, uint8_t flags)
Definition: esp.h:373
esp_data_flag
Definition: esp.h:184
@ EDF_STA_LOCK
Definition: esp.h:187
@ EDF_AP_ENABLED
Definition: esp.h:188
@ EDF_STA_CONNECTING
Definition: esp.h:185
@ EDF_STA_CONNECTED
Definition: esp.h:186
int esp_offload_init(struct net_if *iface)
Definition: esp_offload.c:639
void esp_send_work(struct k_work *work)
Definition: esp_offload.c:335
void esp_socket_unref(struct esp_socket *sock)
Definition: esp_socket.c:66
void esp_socket_rx(struct esp_socket *sock, struct net_buf *buf, size_t offset, size_t len)
Definition: esp_socket.c:146
static struct esp_data * esp_socket_to_dev(struct esp_socket *sock)
Definition: esp.h:314
static atomic_val_t esp_socket_flags_clear(struct esp_socket *sock, atomic_val_t flags)
Definition: esp.h:303
static bool esp_socket_flags_test_and_clear(struct esp_socket *sock, atomic_val_t flags)
Definition: esp.h:291
static enum net_sock_type esp_socket_type(struct esp_socket *sock)
Definition: esp.h:378
static atomic_val_t esp_socket_flags_update(struct esp_socket *sock, atomic_val_t value, atomic_val_t mask)
Definition: esp.h:263
static bool esp_socket_connected(struct esp_socket *sock)
Definition: esp.h:358
#define MDM_RING_BUF_SIZE
Definition: esp.h:96
static atomic_val_t esp_socket_flags_set(struct esp_socket *sock, atomic_val_t flags)
Definition: esp.h:285
#define CONN_CMD_MAX_LEN
Definition: esp.h:79
struct esp_data esp_driver_data
Definition: esp.c:68
void esp_close_work(struct k_work *work)
Definition: esp_offload.c:505
static void esp_flags_clear(struct esp_data *dev, uint8_t flags)
Definition: esp.h:368
static struct esp_socket * esp_socket_ref_from_link_id(struct esp_data *data, uint8_t link_id)
Definition: esp.h:253
#define MDM_RECV_BUF_SIZE
Definition: esp.h:98
esp_socket_flags
Definition: esp.h:136
@ ESP_SOCK_WORKQ_STOPPED
Definition: esp.h:141
@ ESP_SOCK_CLOSE_PENDING
Definition: esp.h:140
@ ESP_SOCK_CONNECTING
Definition: esp.h:138
@ ESP_SOCK_CONNECTED
Definition: esp.h:139
@ ESP_SOCK_IN_USE
Definition: esp.h:137
static int esp_socket_work_submit(struct esp_socket *sock, struct k_work *work)
Definition: esp.h:327
void esp_socket_init(struct esp_data *data)
Definition: esp_socket.c:80
void esp_socket_close(struct esp_socket *sock)
Definition: esp_socket.c:184
#define K_FOREVER
Generate infinite timeout delay.
Definition: kernel.h:1186
#define k_fifo_put(fifo, data)
Add an element to a FIFO queue.
Definition: kernel.h:2225
net_sock_type
Definition: net_ip.h:84
net_ip_protocol
Definition: net_ip.h:62
int k_mutex_unlock(struct k_mutex *mutex)
Unlock a mutex.
int k_mutex_lock(struct k_mutex *mutex, k_timeout_t timeout)
Lock a mutex.
void(* net_context_recv_cb_t)(struct net_context *context, struct net_pkt *pkt, union net_ip_header *ip_hdr, union net_proto_header *proto_hdr, int status, void *user_data)
Network data receive callback.
Definition: net_context.h:93
static enum net_sock_type net_context_get_type(struct net_context *context)
Get context type for this network context.
Definition: net_context.h:510
static uint16_t net_context_get_ip_proto(struct net_context *context)
Get context IP protocol for this network context.
Definition: net_context.h:601
void(* net_context_connect_cb_t)(struct net_context *context, int status, void *user_data)
Connection callback.
Definition: net_context.h:161
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition: util_macro.h:44
#define ARRAY_SIZE(array)
Number of elements in the given array.
Definition: util.h:92
#define CONTAINER_OF(ptr, type, field)
Get a pointer to a container structure from an element.
Definition: util.h:131
#define EBUSY
Definition: errno.h:55
int k_work_submit_to_queue(struct k_work_q *queue, struct k_work *work)
Submit a work item to a queue.
flags
Definition: http_parser.h:131
static ZTEST_BMEM volatile int ret
Definition: k_float_disable.c:28
Network context definitions.
Public API for network interface.
IPv6 and IPv4 definitions.
Network packet buffer descriptor API.
static struct k_work work[2]
Definition: main.c:16
__UINT8_TYPE__ uint8_t
Definition: stdint.h:58
struct net_if * net_iface
Definition: esp.h:193
struct k_sem sem_response
Definition: esp.h:235
struct esp_socket sockets[5]
Definition: esp.h:219
struct esp_socket * rx_sock
Definition: esp.h:220
scan_result_cb_t scan_cb
Definition: esp.h:231
struct k_work_q workq
Definition: esp.h:223
struct modem_context mctx
Definition: esp.h:208
struct modem_cmd_handler_data cmd_handler_data
Definition: esp.h:215
uint8_t mode
Definition: esp.h:196
struct in_addr nm
Definition: esp.h:203
uint8_t mac_addr[6]
Definition: esp.h:204
uint8_t cmd_match_buf[CONFIG_WIFI_ESP_AT_MDM_RX_BUF_SIZE]
Definition: esp.h:216
struct in_addr gw
Definition: esp.h:202
char conn_cmd[(sizeof("AT+"_CWJAP"=\"\",\"\"")+WIFI_SSID_MAX_LEN+WIFI_PSK_MAX_LEN)]
Definition: esp.h:198
struct k_work mode_switch_work
Definition: esp.h:228
struct k_work_delayable ip_addr_work
Definition: esp.h:225
struct k_work init_work
Definition: esp.h:224
struct k_work connect_work
Definition: esp.h:227
struct modem_iface_uart_data iface_data
Definition: esp.h:211
struct k_sem sem_if_ready
Definition: esp.h:236
struct k_work dns_work
Definition: esp.h:229
struct sockaddr_in dns_addresses[0]
Definition: esp.h:205
uint8_t flags
Definition: esp.h:195
struct k_work scan_work
Definition: esp.h:226
struct in_addr ip
Definition: esp.h:201
struct k_sem sem_tx_ready
Definition: esp.h:234
uint8_t iface_rb_buf[CONFIG_WIFI_ESP_AT_MDM_RING_BUF_SIZE]
Definition: esp.h:212
struct k_work recvdata_work
Definition: esp.h:167
atomic_t flags
Definition: esp.h:151
void * conn_user_data
Definition: esp.h:180
struct k_sem sem_data_ready
Definition: esp.h:159
net_context_connect_cb_t connect_cb
Definition: esp.h:176
struct net_context * context
Definition: esp.h:175
uint8_t idx
Definition: esp.h:149
void * recv_user_data
Definition: esp.h:181
struct k_mutex lock
Definition: esp.h:146
atomic_t refcount
Definition: esp.h:147
struct k_sem sem_free
Definition: esp.h:162
uint8_t link_id
Definition: esp.h:150
struct k_fifo tx_fifo
Definition: esp.h:172
struct k_work send_work
Definition: esp.h:168
net_context_recv_cb_t recv_cb
Definition: esp.h:177
struct k_work close_work
Definition: esp.h:169
struct sockaddr dst
Definition: esp.h:154
struct k_work connect_work
Definition: esp.h:166
Definition: kernel.h:2153
Definition: kernel.h:2680
Kernel timeout type.
Definition: sys_clock.h:65
A structure used to submit work after a delay.
Definition: kernel.h:3651
A structure used to hold work until it can be processed.
Definition: kernel.h:3770
A structure used to submit work.
Definition: kernel.h:3623
Network buffer representation.
Definition: buf.h:919
Definition: net_context.h:201
Network Interface structure.
Definition: net_if.h:468
Network packet.
Definition: net_pkt.h:62
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
WiFi L2 stack public header.
void(* scan_result_cb_t)(struct net_if *iface, int status, struct wifi_scan_result *entry)
Definition: wifi_mgmt.h:113