at_device
at_device copied to clipboard
[BUG反馈]ESP32-C3 AT+CIPDNS无法解析DNS地址
文件:at_device/class/esp32/at_device_esp32.c 行数:104~128:
if (at_obj_exec_cmd(device->client, resp, "AT+CIPDNS?") < 0)
{
LOG_W("please check and update %s device firmware to support the \"AT+CIPDNS?\" cmd.", device->name);
goto __exit;
}
if (at_resp_parse_line_args(resp, 1, resp_dns, dns_server1) <= 0 &&
at_resp_parse_line_args(resp, 2, resp_dns, dns_server2) <= 0)
{
LOG_E("%s device prase \"AT+CIPDNS?\" cmd error.", device->name);
goto __exit;
}
/* set primary DNS server address */
if (rt_strlen(dns_server1) > 0 &&
rt_strncmp(dns_server1, AT_ERR_DNS_SERVER, rt_strlen(AT_ERR_DNS_SERVER)) != 0)
{
inet_aton(dns_server1, &ip_addr);
netdev_low_level_set_dns_server(netdev, 0, &ip_addr);
}
else
{
inet_aton(AT_DEF_DNS_SERVER, &ip_addr);
esp32_netdev_set_dns_server(netdev, 0, &ip_addr);
}
现象:执行AT+CIPDNS指令后,响应:
+CIPDNS:<enable>[,<"DNS IP1">][,<"DNS IP2">][,<"DNS IP3">]
OK
该响应是逗号分隔的格式,无法通过函数at_resp_parse_line_args里的vsscanf得到DNS地址,而是得到dns_server1[AT_ADDR_LEN] = 0,"192.168.1.1","8.8.8.8"这样的字符串。
接下来执行inet_aton(dns_server1, &ip_addr);时,无法正确转换DNS格式,导致此处的ip_addr为前一次的值。