From c13c9806f957ebc675462737f4b328d3ab89e028 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Mon, 10 Jul 2023 17:29:22 +0800 Subject: [PATCH] update gpsd.c --- gpsd/booster/esp32.c | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 161 insertions(+), 0 deletions(-) diff --git a/gpsd/booster/esp32.c b/gpsd/booster/esp32.c new file mode 100644 index 0000000..58b3d6d --- /dev/null +++ b/gpsd/booster/esp32.c @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2022 Guo Wenxue + * Author: Guo Wenxue <guowenxue@gmail.com> + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GPL license. + */ + +#include "logger.h" +#include "esp32.h" + +int esp32_init_module(comport_t *comport) +{ + int rv; + char version[256] = {0}; + + if( !comport ) + return -1; + + rv = esp32_reset(comport); + if( rv < 0) + { + log_error("Reset ESP32 WiFi module failed: %d\n", rv); + return rv; + } + + esp32_set_echo(comport, DISABLE); + + esp32_set_sysstore(comport, ENABLE); + + rv = esp32_get_firmware(comport, version, sizeof(version)); + if( rv < 0) + { + log_error("Query ESP32 firmware version failed: %d\n", rv); + return rv; + } + + log_info("ESP32 firmware version:\n%s\n", version); + + return 0; +} + +int esp32_setup_softap(comport_t *comport, char *ssid, char *pwd) +{ + esp32_set_wmode(comport, MODE_SOFTAP, ENABLE); + + esp32_set_ipaddr(comport, MODE_SOFTAP, DEF_SOFTAP_IPADDR, DEF_SOFTAP_IPADDR); + + esp32_set_dhcp(comport, MODE_SOFTAP, ENABLE); + + esp32_set_softap(comport, ssid, pwd, 11, MODE_WPA2PSK); + + return 0; +} + +int esp32_join_network(comport_t *comport, char *ssid, char *pwd) +{ + int rv, status = 0; + int times=10; + char buf[128] = {0}; + + if( !comport ) + return -1; + + esp32_join_status(comport, &status, buf); + if( 2==status && !strcmp(buf, ssid) ) + { + log_info("ESP32 connected to \"%s\" already\n", ssid); + return 0; + } + + esp32_set_wmode(comport, MODE_STATION, ENABLE); + + esp32_set_dhcp(comport, MODE_STATION, ENABLE); + + rv = esp32_connect_ap(comport, ssid, pwd); + if( rv < 0 ) + { + log_error("connect to AP \"%s\" failed, rv=%d", ssid, rv); + return rv; + } + + while(times--) + { + rv = esp32_join_status(comport, &status, buf); + if( 2 == status ) + { + log_info("ESP32 connected to \"%s\" already\n", ssid); + return 0; + } + rv = -3; + } + + return rv; +} + + +int esp32_check_network(comport_t *comport) +{ + int rv, times=5; + char ip[IP_LEN] = {0}; + char gateway[IP_LEN] = {0}; + + memset(ip, 0, sizeof(ip)); + memset(gateway, 0, sizeof(gateway)); + rv = esp32_get_ipaddr(comport, MODE_STATION, ip, gateway); + if( rv<0 ) + return rv; + + if( !strlen(ip) || !strlen(gateway) ) + return -3; + + log_info("IP address: %s, netmask: %s\n", ip, gateway); + + while( times-- ) + { + if( !(rv=esp32_ping(comport, gateway, 5000)) ) + { + rv = 0; + break; + } + } + + return 0; +} + +int esp32_setup_tcp_server(comport_t *comport, int port) +{ + int rv; + + rv = esp32_set_socket_mux(comport, ENABLE); + if(rv<0) + return rv; + + rv = esp32_set_socket_clients(comport, 2); + if(rv<0) + return rv; + + rv = esp32_set_tcp_server(comport, port); + if(rv<0) + return rv; + + rv = esp32_set_socket_timeout(comport, 600); + if(rv<0) + return rv; + + return 0; +} + +int esp32_setup_tcp_client(comport_t *comport, char *host, int port) +{ + int rv; + + rv = esp32_set_tcp_client(comport, DISABLE, host, port); + if(rv<0) + return rv; + + + return 0; +} + -- Gitblit v1.9.1