Thu, 19 Oct 2023 17:32:16 +0200
Initial checkin, WiFi connects and SNTP timesync works.
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 | uint16_t ap_num = MAX_AP_NUM; ///< Scan counter. |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
17 | wifi_ap_record_t *accessp_records; ///< [MAX_AP_NUM] records array with scan results. |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
18 | 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
|
19 | 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
|
20 | 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
|
21 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
22 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
23 | wifi_scan_config_t scan_config = { ///< WiFi scanner configuration. |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
24 | .ssid = (uint8_t *)CONFIG_ESP_WIFI_SSID, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
25 | .bssid = 0, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
26 | .channel = 0, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
27 | .show_hidden = false |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
28 | }; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
29 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
30 | bool _wifi_ScanDone = false; ///< Scan ready |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
31 | bool _wifi_BetterAP = false; ///< If better AP available. |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
32 | 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
|
33 | uint16_t _wifi_Scanned = 0; ///< Total scanned APs. |
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 | extern char hostname[]; ///< Generated hostname |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
36 | |
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 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
39 | 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
|
40 | 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
|
41 | const int TASK_WIFI_REQUEST_STA_SCAN = BIT2; ///< When set, means a client requested a AP scan. |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
42 | const int TASK_WIFI_REQUEST_STA_STATUS = BIT3; ///< When set, means a client requested to update the connection status. |
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 | 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
|
45 | 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
|
46 | 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
|
47 | 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
|
48 | |
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 | * @brief Array with AP security names |
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 | 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
|
55 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
56 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
57 | /****************************************************************************/ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
58 | |
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 | bool ready_WiFi(void) |
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 | 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
|
63 | return true; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
64 | return false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
65 | } |
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 status_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_STATUS); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
72 | } |
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 | void request_WiFi(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 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT); |
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 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
81 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
82 | void scan_WiFi(void) |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
83 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
84 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_SCAN); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
85 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
86 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
87 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
88 | void disconnect_WiFi(void) |
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 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
91 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT); |
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 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
95 | static void print_servers(void) |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
96 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
97 | 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
|
98 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
99 | 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
|
100 | if (esp_sntp_getservername(i)){ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
101 | 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
|
102 | } else { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
103 | // 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
|
104 | char buff[64]; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
105 | 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
|
106 | 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
|
107 | 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
|
108 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
109 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
110 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
111 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
112 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
113 | 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
|
114 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
115 | switch (event_id) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
116 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
117 | case WIFI_EVENT_SCAN_DONE: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
118 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
119 | /* Get the results so the memory used is freed. */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
120 | ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&ap_num, accessp_records)); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
121 | ESP_LOGI(TAG, "Event wifi Scane done, %d records", ap_num); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
122 | _wifi_BetterAP = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
123 | for (int i = 0; i < ap_num; i++) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
124 | wifi_ap_record_t ap = accessp_records[i]; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
125 | ESP_LOGI(TAG, "AP:%d bssid:%02x:%02x:%02x:%02x:%02x:%02x ssid:%s ch:%d rssi:%d", |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
126 | i, ap.bssid[0], ap.bssid[1], ap.bssid[2], ap.bssid[3], ap.bssid[4], ap.bssid[5], |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
127 | ap.ssid, ap.primary, ap.rssi); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
128 | if (ap.rssi > CONFIG_ESP_WIFI_ROAMING_LEVEL && ap.rssi > (_wifi_RSSI + 3)) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
129 | _wifi_BetterAP = true; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
130 | ESP_LOGI(TAG, "AP:%d is a better AP", i); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
131 | } |
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_Scanned = ap_num; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
134 | _wifi_ScanDone = true; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
135 | if (_wifi_BetterAP) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
136 | ESP_LOGI(TAG, "Disconnect current AP"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
137 | disconnect_WiFi(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
138 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
139 | break; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
140 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
141 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
142 | case WIFI_EVENT_STA_START: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
143 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
144 | ESP_LOGI(TAG, "Event wifi START"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
145 | // 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
|
146 | 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
|
147 | esp_wifi_connect(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
148 | _wifi_BetterAP = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
149 | break; |
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 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
152 | case WIFI_EVENT_STA_CONNECTED: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
153 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
154 | 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
|
155 | wifi_ap_record_t ap_info; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
156 | 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
|
157 | 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
|
158 | 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
|
159 | if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
160 | wifi_state->STA_connected = true; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
161 | wifi_state->STA_rssi = ap_info.rssi; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
162 | wifi_state->STA_channel = ap_info.primary; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
163 | 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
|
164 | 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
|
165 | 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
|
166 | xSemaphoreGive(xSemaphoreWiFi); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
167 | } else { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
168 | 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
|
169 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
170 | print_servers(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
171 | _wifi_BetterAP = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
172 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
173 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
174 | break; |
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 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
177 | case WIFI_EVENT_STA_DISCONNECTED: |
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 | 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
|
180 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
181 | 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
|
182 | 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
|
183 | if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
184 | wifi_state->STA_connected = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
185 | wifi_state->STA_online = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
186 | wifi_state->STA_rssi = 0; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
187 | xSemaphoreGive(xSemaphoreWiFi); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
188 | } else { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
189 | 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
|
190 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
191 | _wifi_BetterAP = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
192 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
193 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); |
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 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
197 | default: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
198 | 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
|
199 | break; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
200 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
201 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
202 | |
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 | 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
|
206 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
207 | switch (event_id) { |
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 | case IP_EVENT_STA_GOT_IP: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
210 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
211 | 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
|
212 | if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
213 | wifi_state->STA_online = true; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
214 | 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
|
215 | 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
|
216 | 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
|
217 | xSemaphoreGive(xSemaphoreWiFi); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
218 | } else { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
219 | 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
|
220 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
221 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
222 | // ESP_LOGI(TAG, "Starting SNTP"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
223 | // esp_netif_sntp_start(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
224 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
225 | break; |
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 | case IP_EVENT_STA_LOST_IP: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
228 | ESP_LOGW(TAG, "Lost IP address"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
229 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
230 | if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
231 | wifi_state->STA_ip[0] = '\0'; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
232 | wifi_state->STA_nm[0] = '\0'; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
233 | wifi_state->STA_gw[0] = '\0'; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
234 | wifi_state->STA_online = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
235 | xSemaphoreGive(xSemaphoreWiFi); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
236 | } else { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
237 | 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
|
238 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
239 | break; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
240 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
241 | case IP_EVENT_AP_STAIPASSIGNED: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
242 | ESP_LOGI(TAG, "IP_EVENT_AP_STAIPASSIGNED"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
243 | break; |
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 | default: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
246 | 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
|
247 | break; |
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 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
250 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
251 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
252 | 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
|
253 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
254 | time_t now; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
255 | char strftime_buf[64]; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
256 | struct tm timeinfo; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
257 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
258 | 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
|
259 | int rc = sntp_get_sync_status(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
260 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
261 | if (rc == SNTP_SYNC_STATUS_COMPLETED) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
262 | time(&now); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
263 | localtime_r(&now, &timeinfo); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
264 | // System_TimeOk = true; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
265 | 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
|
266 | 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
|
267 | } else { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
268 | ESP_LOGI(TAG, "NTP unknown time sync event rc=%d", rc); |
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 | |
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 | void task_wifi( void * pvParameters ) |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
274 | { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
275 | ESP_LOGI(TAG, "Starting WiFi"); |
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 | /* 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
|
278 | xEventGroupWifi = xEventGroupCreate(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
279 | /* initialize the tcp stack */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
280 | ESP_ERROR_CHECK(esp_netif_init()); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
281 | 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
|
282 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
283 | 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
|
284 | ESP_ERROR_CHECK(esp_wifi_init(&cfg)); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
285 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
286 | 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
|
287 | assert(sta_netif); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
288 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
289 | /* |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
290 | * Setup SNTP configuration |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
291 | */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
292 | /** |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
293 | * 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
|
294 | * see following menuconfig options: |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
295 | * '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
|
296 | * 'LWIP_SNTP_DEBUG' - enable debugging messages |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
297 | * |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
298 | * 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
|
299 | * 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
|
300 | */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
301 | ESP_LOGI(TAG, "Initializing SNTP"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
302 | 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
|
303 | 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
|
304 | 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
|
305 | 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
|
306 | 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
|
307 | 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
|
308 | 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
|
309 | esp_netif_sntp_init(&config); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
310 | ESP_LOGI(TAG, "Starting SNTP"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
311 | esp_netif_sntp_start(); |
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 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
314 | /* |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
315 | * 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
|
316 | */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
317 | accessp_records = (wifi_ap_record_t*)malloc(sizeof(wifi_ap_record_t) * MAX_AP_NUM); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
318 | xSemaphoreWiFi = xSemaphoreCreateMutex(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
319 | wifi_state = malloc(sizeof(WIFI_State)); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
320 | memset(wifi_state, 0x00, sizeof(WIFI_State)); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
321 | |
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 | * init wifi as station |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
324 | */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
325 | 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
|
326 | 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
|
327 | 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
|
328 | 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
|
329 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
330 | wifi_config_t wifi_config = { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
331 | .sta = { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
332 | .ssid = CONFIG_ESP_WIFI_SSID, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
333 | .password = CONFIG_ESP_WIFI_PASSWORD, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
334 | #if CONFIG_WIFI_ALL_CHANNEL_SCAN |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
335 | .scan_method = WIFI_ALL_CHANNEL_SCAN, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
336 | #elif CONFIG_WIFI_FAST_SCAN |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
337 | .scan_method = WIFI_FAST_SCAN, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
338 | #endif |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
339 | .failure_retry_cnt = 3, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
340 | .sort_method = WIFI_CONNECT_AP_BY_SIGNAL, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
341 | .threshold.rssi = CONFIG_ESP_FAST_SCAN_MINIMUM_SIGNAL, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
342 | .threshold.authmode = WIFI_AUTH_WPA2_PSK, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
343 | }, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
344 | }; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
345 | 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
|
346 | 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
|
347 | ESP_ERROR_CHECK(esp_wifi_start()); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
348 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
349 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
350 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
351 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
352 | EventBits_t uxBits; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
353 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
354 | for(;;) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
355 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
356 | /* actions that can trigger: request a connection, a scan, or a disconnection */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
357 | uxBits = xEventGroupWaitBits(xEventGroupWifi, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
358 | TASK_WIFI_REQUEST_STA_CONNECT | TASK_WIFI_REQUEST_STA_DISCONNECT | TASK_WIFI_REQUEST_STA_SCAN | TASK_WIFI_REQUEST_STA_STATUS, |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
359 | pdFALSE, pdFALSE, portMAX_DELAY ); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
360 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
361 | if (uxBits & TASK_WIFI_REQUEST_STA_DISCONNECT) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
362 | /* |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
363 | * 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
|
364 | */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
365 | ESP_LOGI(TAG, "Request STA disconnect"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
366 | ESP_ERROR_CHECK(esp_wifi_disconnect()); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
367 | 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
|
368 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
369 | /* finally: release the scan request bit */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
370 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
371 | 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
|
372 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
373 | } 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
|
374 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
375 | ESP_LOGI(TAG, "Request STA connect"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
376 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_FAILED); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
377 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
378 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
379 | 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
|
380 | esp_err_t wifierror = esp_wifi_connect(); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
381 | if (wifierror != ESP_OK) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
382 | 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
|
383 | xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_FAILED); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
384 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
385 | 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
|
386 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
387 | } else if (uxBits & TASK_WIFI_REQUEST_STA_STATUS) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
388 | /* |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
389 | * Request WiFi update status, refresh the rssi. |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
390 | */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
391 | ESP_LOGD(TAG, "Request STA status"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
392 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_STATUS); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
393 | wifi_ap_record_t ap_info; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
394 | 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
|
395 | ESP_LOGI(TAG, "Event STA status, ssid:%s, bssid:" MACSTR ", rssi: %d", ap_info.ssid, MAC2STR(ap_info.bssid), ap_info.rssi); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
396 | _wifi_RSSI = ap_info.rssi; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
397 | _wifi_BetterAP = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
398 | if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
399 | wifi_state->STA_rssi = ap_info.rssi; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
400 | wifi_state->STA_channel = ap_info.primary; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
401 | 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
|
402 | 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
|
403 | xSemaphoreGive(xSemaphoreWiFi); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
404 | } else { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
405 | ESP_LOGE(TAG, "lock error TASK_WIFI_REQUEST_STA_STATUS"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
406 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
407 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
408 | } else if (uxBits & TASK_WIFI_REQUEST_STA_SCAN) { |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
409 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
410 | ESP_LOGI(TAG, "Request STA scan"); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
411 | xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_SCAN); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
412 | /* safe guard against overflow */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
413 | ap_num = MAX_AP_NUM; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
414 | _wifi_ScanDone = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
415 | _wifi_BetterAP = false; |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
416 | ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, false)); |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
417 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
418 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
419 | } /* for(;;) */ |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
420 | } |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
421 | |
913eb9ca40b1
Initial checkin, WiFi connects and SNTP timesync works.
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
422 |