Lines Matching +full:remote +full:- +full:mac +full:- +full:address

5  * SPDX-License-Identifier: Apache-2.0
73 cmd[sizeof(cmd) - 1] = '\0'; in esp_configure_hostname()
83 uint8_t flags = data->flags; in esp_mode_from_flags()
111 cmd[sizeof(cmd) - 2] = ('0' + mode); in esp_mode_switch()
125 uint8_t old_mode = data->mode; in esp_mode_switch_if_needed()
132 data->mode = new_mode; in esp_mode_switch_if_needed()
151 if (data->mode != esp_mode_from_flags(data)) { in esp_mode_switch_submit_if_needed()
152 k_work_submit_to_queue(&data->workq, &data->mode_switch_work); in esp_mode_switch_submit_if_needed()
189 k_sem_give(&dev->sem_response); in MODEM_CMD_DEFINE()
200 modem_cmd_handler_set_error(data, -EIO); in MODEM_CMD_DEFINE()
201 k_sem_give(&dev->sem_response); in MODEM_CMD_DEFINE()
216 modem_iface_uart_rx_wait(&data->mctx.iface, K_FOREVER); in esp_rx()
218 modem_cmd_handler_process(&data->mctx.cmd_handler, &data->mctx.iface); in esp_rx()
248 char *mac; in MODEM_CMD_DEFINE() local
251 mac = str_unquote(argv[0]); in MODEM_CMD_DEFINE()
252 err = net_bytes_from_str(dev->mac_addr, sizeof(dev->mac_addr), mac); in MODEM_CMD_DEFINE()
254 LOG_ERR("Failed to parse MAC address"); in MODEM_CMD_DEFINE()
263 return -EAGAIN; in esp_pull_quoted()
285 return -EAGAIN; in esp_pull_quoted()
306 return -EAGAIN; in esp_pull()
330 return -EBADMSG; in esp_pull_long()
337 /* with: CONFIG_WIFI_ESP_AT_SCAN_MAC_ADDRESS: +CWLAP:<ecn>,<ssid>,<rssi>,<mac>,<ch>*/
343 char cwlap_buf[sizeof("\"0\",\"\",-100,\"xx:xx:xx:xx:xx:xx\",12") + in MODEM_CMD_DIRECT_DEFINE()
347 char *mac; in MODEM_CMD_DIRECT_DEFINE() local
353 len = net_buf_linearize(cwlap_buf, sizeof(cwlap_buf) - 1, in MODEM_CMD_DIRECT_DEFINE()
354 data->rx_buf, 0, sizeof(cwlap_buf) - 1); in MODEM_CMD_DIRECT_DEFINE()
357 char *str = &cwlap_buf[sizeof("+CWJAP:(") - 1]; in MODEM_CMD_DIRECT_DEFINE()
383 return -EBADMSG; in MODEM_CMD_DIRECT_DEFINE()
392 err = esp_pull_quoted(&str, str_end, &mac); in MODEM_CMD_DIRECT_DEFINE()
398 if (net_bytes_from_str(res.mac, sizeof(res.mac), mac) < 0) { in MODEM_CMD_DIRECT_DEFINE()
399 LOG_ERR("Invalid MAC address"); in MODEM_CMD_DIRECT_DEFINE()
411 if (dev->scan_cb) { in MODEM_CMD_DIRECT_DEFINE()
412 dev->scan_cb(dev->net_iface, 0, &res); in MODEM_CMD_DIRECT_DEFINE()
415 return str - cwlap_buf; in MODEM_CMD_DIRECT_DEFINE()
423 struct wifi_iface_status *status = dev->wifi_status; in MODEM_CMD_DIRECT_DEFINE()
424 char cwjap_buf[sizeof("\"\",\"xx:xx:xx:xx:xx:xx\",12,-100") + in MODEM_CMD_DIRECT_DEFINE()
426 uint8_t flags = dev->flags; in MODEM_CMD_DIRECT_DEFINE()
433 len = net_buf_linearize(cwjap_buf, sizeof(cwjap_buf) - 1, in MODEM_CMD_DIRECT_DEFINE()
434 data->rx_buf, 0, sizeof(cwjap_buf) - 1); in MODEM_CMD_DIRECT_DEFINE()
437 char *str = &cwjap_buf[sizeof("+CWJAP:") - 1]; in MODEM_CMD_DIRECT_DEFINE()
440 status->band = WIFI_FREQ_BAND_2_4_GHZ; in MODEM_CMD_DIRECT_DEFINE()
441 status->iface_mode = WIFI_MODE_INFRA; in MODEM_CMD_DIRECT_DEFINE()
444 status->state = WIFI_STATE_COMPLETED; in MODEM_CMD_DIRECT_DEFINE()
446 status->state = WIFI_STATE_SCANNING; in MODEM_CMD_DIRECT_DEFINE()
448 status->state = WIFI_STATE_DISCONNECTED; in MODEM_CMD_DIRECT_DEFINE()
471 strncpy(status->ssid, ssid, sizeof(status->ssid)); in MODEM_CMD_DIRECT_DEFINE()
472 status->ssid_len = strnlen(status->ssid, sizeof(status->ssid)); in MODEM_CMD_DIRECT_DEFINE()
474 err = net_bytes_from_str(status->bssid, sizeof(status->bssid), bssid); in MODEM_CMD_DIRECT_DEFINE()
476 LOG_WRN("Invalid MAC address"); in MODEM_CMD_DIRECT_DEFINE()
477 memset(status->bssid, 0x0, sizeof(status->bssid)); in MODEM_CMD_DIRECT_DEFINE()
480 status->channel = strtol(channel, NULL, 10); in MODEM_CMD_DIRECT_DEFINE()
481 status->rssi = strtol(rssi, NULL, 10); in MODEM_CMD_DIRECT_DEFINE()
483 return str - cwjap_buf; in MODEM_CMD_DIRECT_DEFINE()
491 struct sockaddr_in *addrs = data->dns_addresses; in esp_dns_work()
519 struct sockaddr_in *addrs = dev->dns_addresses; in MODEM_CMD_DEFINE()
521 size_t num_servers = argc - 1; in MODEM_CMD_DEFINE()
537 LOG_ERR("Invalid DNS address: %s", in MODEM_CMD_DEFINE()
550 k_work_submit(&dev->dns_work); in MODEM_CMD_DEFINE()
572 wifi_mgmt_raise_connect_result_event(dev->net_iface, 0); in MODEM_CMD_DEFINE()
573 net_if_dormant_off(dev->net_iface); in MODEM_CMD_DEFINE()
586 for (int i = 0; i < ARRAY_SIZE(dev->sockets); i++) { in esp_mgmt_disconnect_work()
587 sock = &dev->sockets[i]; in esp_mgmt_disconnect_work()
598 net_if_ipv4_addr_rm(dev->net_iface, &dev->ip); in esp_mgmt_disconnect_work()
601 net_if_dormant_on(dev->net_iface); in esp_mgmt_disconnect_work()
603 wifi_mgmt_raise_disconnect_result_event(dev->net_iface, 0); in esp_mgmt_disconnect_work()
612 k_work_submit_to_queue(&dev->workq, &dev->disconnect_work); in MODEM_CMD_DEFINE()
632 net_addr_pton(AF_INET, ip, &dev->ip); in MODEM_CMD_DEFINE()
634 net_addr_pton(AF_INET, ip, &dev->gw); in MODEM_CMD_DEFINE()
636 net_addr_pton(AF_INET, ip, &dev->nm); in MODEM_CMD_DEFINE()
662 k_work_reschedule_for_queue(&dev->workq, &dev->ip_addr_work, in esp_ip_addr_work()
670 net_if_ipv4_addr_add(dev->net_iface, &dev->ip, NET_ADDR_MANUAL, 0); in esp_ip_addr_work()
672 net_if_ipv4_addr_add(dev->net_iface, &dev->ip, NET_ADDR_DHCP, 0); in esp_ip_addr_work()
674 net_if_ipv4_set_gw(dev->net_iface, &dev->gw); in esp_ip_addr_work()
675 net_if_ipv4_set_netmask_by_addr(dev->net_iface, &dev->ip, &dev->nm); in esp_ip_addr_work()
692 k_work_reschedule_for_queue(&dev->workq, &dev->ip_addr_work, in MODEM_CMD_DEFINE()
704 link_id = data->match_buf[0] - '0'; in MODEM_CMD_DEFINE()
725 link_id = data->match_buf[0] - '0'; in MODEM_CMD_DEFINE()
745 esp_socket_work_submit(sock, &sock->close_work); in MODEM_CMD_DEFINE()
758 #define MIN_IPD_LEN (sizeof("+IPD,I,0E") - 1)
759 #define MAX_IPD_LEN (sizeof("+IPD,I,4294967295,\"\",65535E") - 1) + NET_IPV4_ADDR_LEN
778 return -EAGAIN; in cmd_ipd_parse_hdr()
787 return -EBADMSG; in cmd_ipd_parse_hdr()
795 if (err == -EAGAIN && match_len >= MAX_IPD_LEN) { in cmd_ipd_parse_hdr()
797 return -EBADMSG; in cmd_ipd_parse_hdr()
805 if (err == -EAGAIN && match_len >= MAX_IPD_LEN) { in cmd_ipd_parse_hdr()
807 return -EBADMSG; in cmd_ipd_parse_hdr()
817 *data_offset = (str - ipd_buf); in cmd_ipd_parse_hdr()
818 return -ENOTCONN; in cmd_ipd_parse_hdr()
824 (struct sockaddr_in *) &(*sock)->context->remote; in cmd_ipd_parse_hdr()
830 if (err == -EAGAIN && match_len >= MAX_IPD_LEN) { in cmd_ipd_parse_hdr()
832 err = -EBADMSG; in cmd_ipd_parse_hdr()
839 if (err == -EAGAIN && match_len >= MAX_IPD_LEN) { in cmd_ipd_parse_hdr()
841 err = -EBADMSG; in cmd_ipd_parse_hdr()
846 err = net_addr_pton(AF_INET, remote_ip, &recv_addr->sin_addr); in cmd_ipd_parse_hdr()
848 LOG_ERR("Invalid IP address"); in cmd_ipd_parse_hdr()
849 err = -EBADMSG; in cmd_ipd_parse_hdr()
853 recv_addr->sin_family = AF_INET; in cmd_ipd_parse_hdr()
854 recv_addr->sin_port = htons(port); in cmd_ipd_parse_hdr()
857 *data_offset = (str - ipd_buf); in cmd_ipd_parse_hdr()
877 err = cmd_ipd_parse_hdr(dev, &sock, data->rx_buf, len, in MODEM_CMD_DIRECT_DEFINE()
880 if (err == -EAGAIN) { in MODEM_CMD_DIRECT_DEFINE()
881 return -EAGAIN; in MODEM_CMD_DIRECT_DEFINE()
892 esp_socket_work_submit(sock, &sock->recvdata_work); in MODEM_CMD_DIRECT_DEFINE()
898 if (data_offset + data_len > net_buf_frags_len(data->rx_buf)) { in MODEM_CMD_DIRECT_DEFINE()
899 ret = -EAGAIN; in MODEM_CMD_DIRECT_DEFINE()
903 esp_socket_rx(sock, data->rx_buf, data_offset, data_len); in MODEM_CMD_DIRECT_DEFINE()
933 k_sem_give(&dev->sem_if_ready); in MODEM_CMD_DEFINE()
936 if (net_if_is_carrier_ok(dev->net_iface)) { in MODEM_CMD_DEFINE()
937 net_if_dormant_on(dev->net_iface); in MODEM_CMD_DEFINE()
938 net_if_carrier_off(dev->net_iface); in MODEM_CMD_DEFINE()
943 wifi_mgmt_raise_connect_result_event(dev->net_iface, -1); in MODEM_CMD_DEFINE()
945 wifi_mgmt_raise_disconnect_result_event(dev->net_iface, 0); in MODEM_CMD_DEFINE()
948 dev->flags = 0; in MODEM_CMD_DEFINE()
949 dev->mode = 0; in MODEM_CMD_DEFINE()
952 net_if_ipv4_addr_rm(dev->net_iface, &dev->ip); in MODEM_CMD_DEFINE()
954 k_work_submit_to_queue(&dev->workq, &dev->init_work); in MODEM_CMD_DEFINE()
1020 struct wifi_iface_status *status = data->wifi_status; in esp_mgmt_iface_status_work()
1030 status->state = WIFI_STATE_UNKNOWN; in esp_mgmt_iface_status_work()
1033 k_sem_give(&data->wifi_status_sem); in esp_mgmt_iface_status_work()
1039 struct esp_data *data = dev->data; in esp_mgmt_iface_status()
1043 status->state = WIFI_STATE_UNKNOWN; in esp_mgmt_iface_status()
1044 status->band = WIFI_FREQ_BAND_UNKNOWN; in esp_mgmt_iface_status()
1045 status->iface_mode = WIFI_MODE_UNKNOWN; in esp_mgmt_iface_status()
1046 status->link_mode = WIFI_LINK_MODE_UNKNOWN; in esp_mgmt_iface_status()
1047 status->security = WIFI_SECURITY_TYPE_UNKNOWN; in esp_mgmt_iface_status()
1048 status->mfp = WIFI_MFP_UNKNOWN; in esp_mgmt_iface_status()
1050 if (!net_if_is_carrier_ok(data->net_iface)) { in esp_mgmt_iface_status()
1051 status->state = WIFI_STATE_INTERFACE_DISABLED; in esp_mgmt_iface_status()
1055 data->wifi_status = status; in esp_mgmt_iface_status()
1056 k_sem_init(&data->wifi_status_sem, 0, 1); in esp_mgmt_iface_status()
1058 k_work_submit_to_queue(&data->workq, &data->iface_status_work); in esp_mgmt_iface_status()
1060 k_sem_take(&data->wifi_status_sem, K_FOREVER); in esp_mgmt_iface_status()
1084 LOG_DBG("ESP Wi-Fi scan: cmd = %s", ESP_CMD_CWLAP); in esp_mgmt_scan_work()
1091 dev->scan_cb(dev->net_iface, 0, NULL); in esp_mgmt_scan_work()
1092 dev->scan_cb = NULL; in esp_mgmt_scan_work()
1099 struct esp_data *data = dev->data; in esp_mgmt_scan()
1103 if (data->scan_cb != NULL) { in esp_mgmt_scan()
1104 return -EINPROGRESS; in esp_mgmt_scan()
1107 if (!net_if_is_carrier_ok(data->net_iface)) { in esp_mgmt_scan()
1108 return -EIO; in esp_mgmt_scan()
1111 data->scan_cb = cb; in esp_mgmt_scan()
1113 k_work_submit_to_queue(&data->workq, &data->scan_work); in esp_mgmt_scan()
1123 modem_cmd_handler_set_error(data, -EIO); in MODEM_CMD_DEFINE()
1124 k_sem_give(&dev->sem_response); in MODEM_CMD_DEFINE()
1144 ret = esp_cmd_send(dev, cmds, ARRAY_SIZE(cmds), dev->conn_cmd, in esp_mgmt_connect_work()
1147 memset(dev->conn_cmd, 0, sizeof(dev->conn_cmd)); in esp_mgmt_connect_work()
1150 net_if_dormant_on(dev->net_iface); in esp_mgmt_connect_work()
1153 wifi_mgmt_raise_disconnect_result_event(dev->net_iface, in esp_mgmt_connect_work()
1156 wifi_mgmt_raise_connect_result_event(dev->net_iface, in esp_mgmt_connect_work()
1161 wifi_mgmt_raise_connect_result_event(dev->net_iface, 0); in esp_mgmt_connect_work()
1162 net_if_dormant_off(dev->net_iface); in esp_mgmt_connect_work()
1174 char *str_end = &data->conn_cmd[sizeof(data->conn_cmd)]; in esp_conn_cmd_append()
1175 char *str = &data->conn_cmd[*off]; in esp_conn_cmd_append()
1179 if (str_end - str < 1) { in esp_conn_cmd_append()
1180 return -ENOSPC; in esp_conn_cmd_append()
1187 *off = str - data->conn_cmd; in esp_conn_cmd_append()
1193 esp_conn_cmd_append(data, off, chunk, sizeof(chunk) - 1)
1198 char *str_end = &data->conn_cmd[sizeof(data->conn_cmd)]; in esp_conn_cmd_escape_and_append()
1199 char *str = &data->conn_cmd[*off]; in esp_conn_cmd_escape_and_append()
1207 if (str_end - str < 2) { in esp_conn_cmd_escape_and_append()
1208 return -ENOSPC; in esp_conn_cmd_escape_and_append()
1217 if (str_end - str < 1) { in esp_conn_cmd_escape_and_append()
1218 return -ENOSPC; in esp_conn_cmd_escape_and_append()
1225 *off = str - data->conn_cmd; in esp_conn_cmd_escape_and_append()
1233 struct esp_data *data = dev->data; in esp_mgmt_connect()
1237 if (!net_if_is_carrier_ok(data->net_iface) || in esp_mgmt_connect()
1238 !net_if_is_admin_up(data->net_iface)) { in esp_mgmt_connect()
1239 return -EIO; in esp_mgmt_connect()
1243 return -EALREADY; in esp_mgmt_connect()
1254 params->ssid, params->ssid_length); in esp_mgmt_connect()
1264 if (params->security == WIFI_SECURITY_TYPE_PSK) { in esp_mgmt_connect()
1266 params->psk, params->psk_length); in esp_mgmt_connect()
1277 k_work_submit_to_queue(&data->workq, &data->connect_work); in esp_mgmt_connect()
1284 struct esp_data *data = dev->data; in esp_mgmt_disconnect()
1297 struct esp_data *data = dev->data; in esp_mgmt_ap_enable()
1307 memcpy(&cmd[len], params->ssid, params->ssid_length); in esp_mgmt_ap_enable()
1308 len += params->ssid_length; in esp_mgmt_ap_enable()
1310 if (params->security == WIFI_SECURITY_TYPE_PSK) { in esp_mgmt_ap_enable()
1311 len += snprintk(&cmd[len], sizeof(cmd) - len, "\",\""); in esp_mgmt_ap_enable()
1312 memcpy(&cmd[len], params->psk, params->psk_length); in esp_mgmt_ap_enable()
1313 len += params->psk_length; in esp_mgmt_ap_enable()
1316 len += snprintk(&cmd[len], sizeof(cmd) - len, "\",\""); in esp_mgmt_ap_enable()
1319 snprintk(&cmd[len], sizeof(cmd) - len, "\",%d,%d", params->channel, in esp_mgmt_ap_enable()
1324 net_if_dormant_off(data->net_iface); in esp_mgmt_ap_enable()
1331 struct esp_data *data = dev->data; in esp_mgmt_ap_disable()
1334 net_if_dormant_on(data->net_iface); in esp_mgmt_ap_disable()
1393 ret = modem_cmd_handler_setup_cmds(&dev->mctx.iface, in esp_init_work()
1394 &dev->mctx.cmd_handler, setup_cmds, in esp_init_work()
1396 &dev->sem_response, in esp_init_work()
1422 ret = modem_cmd_handler_setup_cmds(&dev->mctx.iface, in esp_init_work()
1423 &dev->mctx.cmd_handler, in esp_init_work()
1426 &dev->sem_response, in esp_init_work()
1434 net_if_set_link_addr(dev->net_iface, dev->mac_addr, in esp_init_work()
1435 sizeof(dev->mac_addr), NET_LINK_ETHERNET); in esp_init_work()
1439 dev->mode = ESP_MODE_STA; in esp_init_work()
1448 LOG_INF("ESP Wi-Fi ready"); in esp_init_work()
1451 net_if_carrier_on(dev->net_iface); in esp_init_work()
1453 k_sem_give(&dev->sem_if_up); in esp_init_work()
1458 struct esp_data *data = dev->data; in esp_reset()
1459 int ret = -EAGAIN; in esp_reset()
1461 if (net_if_is_carrier_ok(data->net_iface)) { in esp_reset()
1462 net_if_carrier_off(data->net_iface); in esp_reset()
1466 const struct esp_config *config = dev->config; in esp_reset()
1468 gpio_pin_set_dt(&config->power, 0); in esp_reset()
1470 gpio_pin_set_dt(&config->power, 1); in esp_reset()
1472 const struct esp_config *config = dev->config; in esp_reset()
1474 gpio_pin_set_dt(&config->reset, 1); in esp_reset()
1476 gpio_pin_set_dt(&config->reset, 0); in esp_reset()
1480 ret = k_sem_take(&data->sem_if_ready, K_MSEC(CONFIG_WIFI_ESP_AT_RESET_TIMEOUT)); in esp_reset()
1485 while ((ret != 0) && retries--) { in esp_reset()
1486 ret = modem_cmd_send(&data->mctx.iface, &data->mctx.cmd_handler, in esp_reset()
1487 NULL, 0, "AT+RST", &data->sem_if_ready, in esp_reset()
1489 if (ret == 0 || ret != -ETIMEDOUT) { in esp_reset()
1496 return -EAGAIN; in esp_reset()
1501 ret = k_sem_take(&data->sem_if_up, ESP_INIT_TIMEOUT); in esp_reset()
1502 if (ret == -EAGAIN) { in esp_reset()
1553 const struct esp_config *config = dev->config; in esp_init()
1555 struct esp_data *data = dev->data; in esp_init()
1558 k_sem_init(&data->sem_tx_ready, 0, 1); in esp_init()
1559 k_sem_init(&data->sem_response, 0, 1); in esp_init()
1560 k_sem_init(&data->sem_if_ready, 0, 1); in esp_init()
1561 k_sem_init(&data->sem_if_up, 0, 1); in esp_init()
1563 k_work_init(&data->init_work, esp_init_work); in esp_init()
1564 k_work_init_delayable(&data->ip_addr_work, esp_ip_addr_work); in esp_init()
1565 k_work_init(&data->scan_work, esp_mgmt_scan_work); in esp_init()
1566 k_work_init(&data->connect_work, esp_mgmt_connect_work); in esp_init()
1567 k_work_init(&data->disconnect_work, esp_mgmt_disconnect_work); in esp_init()
1568 k_work_init(&data->iface_status_work, esp_mgmt_iface_status_work); in esp_init()
1569 k_work_init(&data->mode_switch_work, esp_mode_switch_work); in esp_init()
1571 k_work_init(&data->dns_work, esp_dns_work); in esp_init()
1577 k_work_queue_start(&data->workq, esp_workq_stack, in esp_init()
1581 k_thread_name_set(&data->workq.thread, "esp_workq"); in esp_init()
1585 .match_buf = &data->cmd_match_buf[0], in esp_init()
1586 .match_buf_len = sizeof(data->cmd_match_buf), in esp_init()
1597 ret = modem_cmd_handler_init(&data->mctx.cmd_handler, &data->cmd_handler_data, in esp_init()
1605 .rx_rb_buf = &data->iface_rb_buf[0], in esp_init()
1606 .rx_rb_buf_len = sizeof(data->iface_rb_buf), in esp_init()
1612 data->mctx.driver_data = data; in esp_init()
1613 ret = modem_context_register(&data->mctx); in esp_init()
1619 ret = modem_iface_uart_init(&data->mctx.iface, &data->iface_data, &uart_config); in esp_init()
1626 ret = gpio_pin_configure_dt(&config->power, GPIO_OUTPUT_INACTIVE); in esp_init()
1633 ret = gpio_pin_configure_dt(&config->reset, GPIO_OUTPUT_INACTIVE); in esp_init()
1650 data->net_iface = NET_IF_GET(Z_DEVICE_DT_DEV_ID(DT_DRV_INST(0)), 0); in esp_init()