main/task_wifi.c

Fri, 20 Oct 2023 15:57:56 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 20 Oct 2023 15:57:56 +0200
changeset 1
86b275481021
parent 0
913eb9ca40b1
permissions
-rw-r--r--

Added framework for the DCF77 transmitter. Added two debug LEDs.

0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /**
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * @file task_wifi.c
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 * @brief WiFi task. Connect to the known AP with the strongest signal.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 #include "dcf77tx.h"
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 #define MAX_AP_NUM 10
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 static const char *TAG = "task_wifi";
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 SemaphoreHandle_t xSemaphoreWiFi = NULL; ///< Semaphore WiFi task.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 EventGroupHandle_t xEventGroupWifi; ///< Events WiFi task.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 wifi_config_t *task_wifi_ConfigSTA = NULL; ///< Current STA configuration.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 WIFI_State *wifi_state = NULL; ///< Public state for other tasks.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 esp_netif_t *sta_netif = NULL; ///< Station interface
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20
1
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
21 //wifi_scan_config_t scan_config = { ///< WiFi scanner configuration.
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
22 // .ssid = (uint8_t *)CONFIG_ESP_WIFI_SSID,
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
23 // .bssid = 0,
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
24 // .channel = 0,
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
25 // .show_hidden = false
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
26 //};
0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27
1
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
28 bool System_TimeOk = false; ///< True if online and sntp sync.
0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29 int8_t _wifi_RSSI = -127; ///< Latest RSSI level.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 extern char hostname[]; ///< Generated hostname
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35 const int TASK_WIFI_REQUEST_STA_DISCONNECT = BIT0; ///< When set, means a client requested to disconnect from currently connected AP.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36 const int TASK_WIFI_REQUEST_STA_CONNECT = BIT1; ///< When set, means a client requested to connect to an access point.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
38 const int TASK_WIFI_HAS_IP = BIT4; ///< Indicate that we have an IP address
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
39 const int TASK_WIFI_STA_FAILED = BIT5; ///< Indicate that we could not get a connection to AP as station.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40 const int TASK_WIFI_STA_DISCONNECTED = BIT6; ///< Indicate that we are disconnected from an ap station.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41 const int TASK_WIFI_STA_CONNECTED = BIT7; ///< Indicate that we are connected to AP as station, flip of BIT5.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 /**
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 * @brief Array with AP security names
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48 const char *apsec[] = { "Open", "WEP", "WPA", "WPA2", "WPA WPA2", "Enterprise" };
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51 /****************************************************************************/
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54 bool ready_WiFi(void)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 if (wifi_state->STA_connected && wifi_state->STA_online)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 return true;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 return false;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 void request_WiFi(void)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 void disconnect_WiFi(void)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76 static void print_servers(void)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78 ESP_LOGI(TAG, "List of configured NTP servers:");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
79
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80 for (uint8_t i = 0; i < SNTP_MAX_SERVERS; ++i){
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81 if (esp_sntp_getservername(i)){
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82 ESP_LOGI(TAG, "server %d: %s", i, esp_sntp_getservername(i));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83 } else {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84 // we have either IPv4 or IPv6 address, let's print it
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85 char buff[64];
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 ip_addr_t const *ip = esp_sntp_getserver(i);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
87 if (ipaddr_ntoa_r(ip, buff, 64) != NULL)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88 ESP_LOGI(TAG, "server %d: %s", i, buff);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
90 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
92
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
93
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94 static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96 switch (event_id) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 case WIFI_EVENT_STA_START:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
100 ESP_LOGI(TAG, "Event wifi START");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101 // Set the configured hostname for the dhcp client.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, hostname));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103 esp_wifi_connect();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
105 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107 case WIFI_EVENT_STA_CONNECTED:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 wifi_event_sta_connected_t* event = (wifi_event_sta_connected_t*) event_data;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 wifi_ap_record_t ap_info;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 esp_wifi_sta_get_ap_info(&ap_info);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
112 ESP_LOGI(TAG, "Event STA connected, ssid:%s, bssid:" MACSTR ", channel:%d, rssi: %d, authmode:%s",
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
113 ap_info.ssid, MAC2STR(ap_info.bssid), event->channel, ap_info.rssi, apsec[event->authmode]);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 wifi_state->STA_connected = true;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116 wifi_state->STA_rssi = ap_info.rssi;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
117 wifi_state->STA_channel = ap_info.primary;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
118 sprintf(wifi_state->STA_ssid, "%s", ap_info.ssid);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119 snprintf(wifi_state->STA_bssid, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120 ap_info.bssid[0], ap_info.bssid[1], ap_info.bssid[2], ap_info.bssid[3], ap_info.bssid[4], ap_info.bssid[5]);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121 xSemaphoreGive(xSemaphoreWiFi);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 } else {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123 ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_CONNECTED");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125 print_servers();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 case WIFI_EVENT_STA_DISCONNECTED:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133 wifi_event_sta_disconnected_t* disconnected = (wifi_event_sta_disconnected_t*) event_data;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135 ESP_LOGI(TAG, "Event STA disconnected, ssid:%s, ssid_len:%d, bssid:" MACSTR ", reason:%d",
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 disconnected->ssid, disconnected->ssid_len, MAC2STR(disconnected->bssid), disconnected->reason);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
138 wifi_state->STA_connected = false;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139 wifi_state->STA_online = false;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 wifi_state->STA_rssi = 0;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141 xSemaphoreGive(xSemaphoreWiFi);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142 } else {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143 ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_DISCONNECTED");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144 }
1
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
145 System_TimeOk = false;
0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151 default:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 ESP_LOGW(TAG, "Unknown WiFi event %ld", event_id);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
153 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
154 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 static void got_ip_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161 switch (event_id) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163 case IP_EVENT_STA_GOT_IP:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165 ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167 wifi_state->STA_online = true;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168 snprintf(wifi_state->STA_ip, 16, IPSTR, IP2STR(&event->ip_info.ip));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169 snprintf(wifi_state->STA_nm, 16, IPSTR, IP2STR(&event->ip_info.netmask));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 snprintf(wifi_state->STA_gw, 16, IPSTR, IP2STR(&event->ip_info.gw));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171 xSemaphoreGive(xSemaphoreWiFi);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
172 } else {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
173 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_GOT_IP");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
175
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 // ESP_LOGI(TAG, "Starting SNTP");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177 // esp_netif_sntp_start();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
178
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181 case IP_EVENT_STA_LOST_IP:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182 ESP_LOGW(TAG, "Lost IP address");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
183 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185 wifi_state->STA_ip[0] = '\0';
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186 wifi_state->STA_nm[0] = '\0';
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 wifi_state->STA_gw[0] = '\0';
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 wifi_state->STA_online = false;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 xSemaphoreGive(xSemaphoreWiFi);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190 } else {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
191 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_LOST_IP");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192 }
1
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
193 System_TimeOk = false;
0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 case IP_EVENT_AP_STAIPASSIGNED:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 ESP_LOGI(TAG, "IP_EVENT_AP_STAIPASSIGNED");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200 default:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 ESP_LOGW(TAG, "Unknown IP event %ld", event_id);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 break;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 void time_sync_notification_cb(struct timeval *tv)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209 time_t now;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210 char strftime_buf[64];
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 struct tm timeinfo;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213 ESP_LOGI(TAG, "Notification of a time synchronization event");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 int rc = sntp_get_sync_status();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216 if (rc == SNTP_SYNC_STATUS_COMPLETED) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 time(&now);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218 localtime_r(&now, &timeinfo);
1
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
219 System_TimeOk = true;
0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220 strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221 ESP_LOGI(TAG, "NTP time is set: %s", strftime_buf);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 } else {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 ESP_LOGI(TAG, "NTP unknown time sync event rc=%d", rc);
1
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
224 System_TimeOk = false;
0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 void task_wifi( void * pvParameters )
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 ESP_LOGI(TAG, "Starting WiFi");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 /* event handler and event group for the wifi driver */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 xEventGroupWifi = xEventGroupCreate();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 /* initialize the tcp stack */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236 ESP_ERROR_CHECK(esp_netif_init());
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237 ESP_ERROR_CHECK(esp_event_loop_create_default());
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 ESP_ERROR_CHECK(esp_wifi_init(&cfg));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 sta_netif = esp_netif_create_default_wifi_sta();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 assert(sta_netif);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245 /*
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246 * Setup SNTP configuration
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248 /**
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 * NTP server address could be acquired via DHCP,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 * see following menuconfig options:
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 * 'LWIP_DHCP_GET_NTP_SRV' - enable STNP over DHCP
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 * 'LWIP_SNTP_DEBUG' - enable debugging messages
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253 *
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 * NOTE: This call should be made BEFORE esp acquires IP address from DHCP,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 * otherwise NTP option would be rejected by default.
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
256 */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 ESP_LOGI(TAG, "Initializing SNTP");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258 esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259 config.start = false; // start SNTP service explicitly (after connecting)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 config.server_from_dhcp = true; // accept NTP offers from DHCP server, if any (need to enable *before* connecting)
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 config.renew_servers_after_new_IP = true; // let esp-netif update configured SNTP server(s) after receiving DHCP lease
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 config.index_of_first_server = 1; // updates from server num 1, leaving server 0 (from DHCP) intact
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263 config.ip_event_to_renew = IP_EVENT_STA_GOT_IP;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 config.sync_cb = time_sync_notification_cb; // only if we need the notification function
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 esp_netif_sntp_init(&config);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 ESP_LOGI(TAG, "Starting SNTP");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 esp_netif_sntp_start();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 /*
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 * memory allocation of objects used by the task
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272 */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273 xSemaphoreWiFi = xSemaphoreCreateMutex();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 wifi_state = malloc(sizeof(WIFI_State));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 memset(wifi_state, 0x00, sizeof(WIFI_State));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277 /*
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 * init wifi as station
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279 */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 esp_event_handler_instance_t instance_any_id;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281 esp_event_handler_instance_t instance_got_ip;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 ESP_ERROR_CHECK( esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, &instance_any_id) );
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283 ESP_ERROR_CHECK( esp_event_handler_instance_register(IP_EVENT, ESP_EVENT_ANY_ID, &got_ip_event_handler, NULL, &instance_got_ip) );
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285 wifi_config_t wifi_config = {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286 .sta = {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287 .ssid = CONFIG_ESP_WIFI_SSID,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288 .password = CONFIG_ESP_WIFI_PASSWORD,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
289 .scan_method = WIFI_FAST_SCAN,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
290 .failure_retry_cnt = 3,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
291 .sort_method = WIFI_CONNECT_AP_BY_SIGNAL,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
292 .threshold.authmode = WIFI_AUTH_WPA2_PSK,
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
293 },
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
294 };
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
295 ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
296 ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
297 ESP_ERROR_CHECK(esp_wifi_start());
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
298
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
299 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
300 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
301 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
302 EventBits_t uxBits;
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
303
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
304 for(;;) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
305
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
306 /* actions that can trigger: request a connection, a scan, or a disconnection */
1
86b275481021 Added framework for the DCF77 transmitter. Added two debug LEDs.
Michiel Broek <mbroek@mbse.eu>
parents: 0
diff changeset
307 uxBits = xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT | TASK_WIFI_REQUEST_STA_DISCONNECT, pdFALSE, pdFALSE, portMAX_DELAY );
0
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
308
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
309 if (uxBits & TASK_WIFI_REQUEST_STA_DISCONNECT) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
310 /*
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
311 * user requested a disconnect, this will in effect disconnect the wifi
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
312 */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
313 ESP_LOGI(TAG, "Request STA disconnect");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
314 ESP_ERROR_CHECK(esp_wifi_disconnect());
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
315 xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED, pdFALSE, pdTRUE, portMAX_DELAY );
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
316
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
317 /* finally: release the scan request bit */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
318 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
319 ESP_LOGI(TAG, "Request STA disconnect is done");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
320
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
321 } else if (uxBits & TASK_WIFI_REQUEST_STA_CONNECT) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
322
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
323 ESP_LOGI(TAG, "Request STA connect");
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
324 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_FAILED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
325 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
326
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
327 ESP_LOGI(TAG, "Connecting to `%s'", CONFIG_ESP_WIFI_SSID);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
328 esp_err_t wifierror = esp_wifi_connect();
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
329 if (wifierror != ESP_OK) {
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
330 ESP_LOGE(TAG, "esp_wifi_connect() `%s' rc=%04x", CONFIG_ESP_WIFI_SSID, (int)wifierror);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
331 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_FAILED);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
332 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
333 uxBits = xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED | TASK_WIFI_STA_FAILED, pdFALSE, pdFALSE, 5000 / portTICK_PERIOD_MS);
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
334 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
335
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
336 } /* for(;;) */
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
337 }
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
338
913eb9ca40b1 Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
339

mercurial