From 1a1773d79d3a294ecef9d685efbb051e236f89bf Mon Sep 17 00:00:00 2001 From: kris Date: Wed, 15 Feb 2017 00:01:18 +0100 Subject: [PATCH 001/200] json-based configuration and web control panel (incl thingspeak) --- .cproject | 3 +- README.md | 22 +- components/bootwifi/README.md | 73 ------ components/bootwifi/bootwifi.c | 214 +++++++++--------- components/bootwifi/component.mk | 3 +- components/bootwifi/include/bootwifi.h | 2 - components/bootwifi/index.html | 237 ++++++++++++++++++++ components/bootwifi/select_wifi.html | 41 ---- components/net/thing_speak.c | 34 ++- components/oap_common/component.mk | 4 +- components/oap_common/include/oap_storage.h | 7 + components/oap_common/oap_storage.c | 139 +++++++++++- doc/{ => images}/ESP32-DevBoard.jpg | Bin doc/{ => images}/prototype.jpg | Bin doc/{ => images}/schema.jpg | Bin doc/images/sensor_settings.png | Bin 0 -> 100805 bytes main/Kconfig | 10 - main/main.c | 4 +- 18 files changed, 553 insertions(+), 240 deletions(-) delete mode 100644 components/bootwifi/README.md create mode 100644 components/bootwifi/index.html delete mode 100644 components/bootwifi/select_wifi.html rename doc/{ => images}/ESP32-DevBoard.jpg (100%) rename doc/{ => images}/prototype.jpg (100%) rename doc/{ => images}/schema.jpg (100%) create mode 100644 doc/images/sensor_settings.png diff --git a/.cproject b/.cproject index c350361..dc4eebf 100644 --- a/.cproject +++ b/.cproject @@ -23,6 +23,7 @@ diff --git a/README.md b/README.md index ea30f82..0591440 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ RGB Led (common kathode) + 3 resistors (330ohms+) Here. I draw it myself. -![Schema](doc/schema.jpg?raw=true) +![Schema](doc/images/schema.jpg?raw=true) Assembling is rather trivial. @@ -56,6 +56,17 @@ These assignments can be changed via 'make menuconfig'. LED B => 14 BUTTON => 35 + +### Power consumption + +Sensor requires 5V+ and consumes ~150mA up to ~170mA. During booting power consumption can be +slightly higher (~250mA), but it is still low enough to be powered directly from any decent +USB phone charger or from PC. + +Despite low voltage, if you are going to use sensor outdoor +or in any unfriendly environment (e.g. high humidity), please +take it under consideration during build, isolate all connections properly + and use appropriate case/enclosure (more on that soon). ## Building firmware @@ -92,8 +103,13 @@ After connecting to this network, open following url http://192.168.1.4 -and configure your local WiFi network access. Sensor will reboot and connect to the wifi. If there's a need to reconfigure wifi settings, reboot the device with a button pressed down - it will switch into AP mode. +and configure sensor settings using sensor control panel. +If there's a need to reconfigure wifi settings, reboot the device with a control button pressed down - +it will switch into AP mode. + +![Schema](doc/images/sensor_settings.png?raw=true) Happy DIY time! -![Schema](doc/prototype.jpg?raw=true) \ No newline at end of file +--- +![Schema](doc/images/prototype.jpg?raw=true) \ No newline at end of file diff --git a/components/bootwifi/README.md b/components/bootwifi/README.md deleted file mode 100644 index b6c8bfc..0000000 --- a/components/bootwifi/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# Bootwifi -It is common to want to start an ESP32 and have it connect to a WiFi environment but how -does one bootstrap it? To connect to a WiFi environment, we typically need to know the -SSID and password of the network to which we wish to connect. But without network connection -to the ESP32, how do we set it? This component provides a potential solution. - -The module exposes a function called `bootwifi` which, when called, will own the connection -of the device to the local WiFi environment. To do this, it looks in its flash storage to see -if it has previously been given an SSID/password pair. If it has, it attempts to connect to that -access point and join the network. - -However, let us assume that it has never been given that information. In this case it will become -an access point in its own right. Now you can connect to the ESP32 using your phone or other WiFi -device as it will appear as an access point against which we can connect. Once connected, we can -open a browser to it. In the browser page, we will be prompted for the SSID and password we wish -to subsequently use. This will be saved and used from then on. Now the device will connect to that -network. - -What if we take our ESP32 to a new environment where the previously saved access point is no longer -accessible or we simply just fail to connect? Again, we will fall back into being an access point -and the user will be able to supply new information. - -What if we want to change the access point to which the ESP32 connects even if that access point has -been previously saved and is still connectable? Simple, the ESP32 can check a GPIO pin at startup and, -if that pin is high (default low) then that can be used as a manual indication that we should become -an access point without even attempting to connect to the network. - -This code is supplied in the form of an ESP-IDF module. It depends on a partner module called `mongoose` -that provides a Web Server in order to server up the web pages. A build of `mongoose` is available -however, [Cesanta](https://www.cesanta.com/), the makers of Mongoose are still working on a formal -port to the ESP32 which is anticipated to be available before 2017 so we should really wait for that -to become available. - -##GPIO boot override -To enable the ability to specify a GPIO pin to override known station information, compile -the code with `-DBOOTWIFI_OVERRIDE_GPIO=` when `` is a GPIO pin number. If the -pin is high at startup, then it will override. The pin is configured as pull-down low so -it need not be artificially held low. The default is no override pin. - -##Future enhancements -There is always room for enhancements: - -* Improve the web page shown to the user - Right now it is pretty basic and ideally could be -dramatically improved. Features to be added include - - listing of available access points for selection -* Integrate SSL security. -* NeoPixel support for visualization of connection status: - - Green - connected - - Blue - being an access point - - Red - Connecting - - Flashing red - failed -* Ability to specify an IP address for static IP address connection to the access point. -* mDNS support when available. -* Component configuration options including: - - Network SSID to use when being an access point. - - Network password to use when being an access point (if any). - -##Design and implementation notes -The parameters for Bootwifi are stored in Non-Volatile Storage (NVS). The name space in NVS -is "bootwifi". The keys are: - -* version - The version of the protocol. -* connectionInfo - The details for connection. - -The form shown to the end user sends back a response as an HTTP POST to "/ssidSelected". -which contains the following form fields: - -* ssid -* password -* ip -* gw -* netmask - \ No newline at end of file diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 9bf5f43..25c84d9 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -16,15 +16,10 @@ * * You should have received a copy of the GNU General Public License * along with OpenAirProject-ESP32. If not, see . - * - * - * Bootwifi - Boot the WiFi environment. - * - * Compile with -DOAP_BTN_0_PIN= where is a GPIO pin number - * to use a GPIO override. - * See the README.md for full information. - * */ +#include +#include +#include #include #include #include @@ -43,26 +38,36 @@ #include "http_utils.h" #include "oap_storage.h" -extern const uint8_t select_wifi_html_start[] asm("_binary_select_wifi_html_start"); -extern const uint8_t select_wifi_html_end[] asm("_binary_select_wifi_html_end"); +/** + * based on https://github.com/nkolban/esp32-snippets/tree/master/networking/bootwifi + * + * Check stored wifi settings on startup and turn sensor into Access Point if there's no SSID defined. + * The same effect can be achieved by pressing down control button during startup. + * + * In AP mode, sensor creates OpenAirProject-XXXX network (default password: cleanair), + * where it listens at http://192.168.1.4:80 and exposes simple html/rest API to modify settings. + */ + +extern const uint8_t index_html_start[] asm("_binary_index_html_start"); +extern const uint8_t index_html_end[] asm("_binary_index_html_end"); -#define KEY_CONNECTION_INFO "connectionInfo" // Key used in NVS for connection info #define SSID_SIZE (32) // Maximum SSID size #define PASSWORD_SIZE (64) // Maximum password size +typedef uint8_t u8_t; +typedef uint16_t u16_t; + typedef struct { char ssid[SSID_SIZE]; char password[PASSWORD_SIZE]; tcpip_adapter_ip_info_t ipInfo; // Optional static IP information } oap_connection_info_t; -static bootwifi_callback_t g_callback = NULL; // Callback function to be invoked when we have finished. - static int g_mongooseStarted = 0; // Has the mongoose server started? static int g_mongooseStopRequest = 0; // Request to stop the mongoose server. // Forward declarations -static void saveConnectionInfo(oap_connection_info_t *pConnectionInfo); +static int is_station = 0; static void become_access_point(); static void restore_wifi_setup(); @@ -76,6 +81,42 @@ static void initialize_sntp(void) sntp_init(); } +static void handler_index(struct mg_connection *nc) { + size_t resp_size = index_html_end-index_html_start; + mg_send_head(nc, 200, resp_size, "Content-Type: text/html"); + mg_send(nc, index_html_start, resp_size); +} + +static void handler_get_config(struct mg_connection *nc, struct http_message *message) { + ESP_LOGD(tag, "handler_get_config"); + char* json = storage_get_config_str(); + if (json) { + mg_send_head(nc, 200, strlen(json), "Content-Type: application/json"); + mg_send(nc, json, strlen(json)); + free(json); + } else { + mg_http_send_error(nc, 500, "failed to load config"); + } +} + +static void handler_reboot(struct mg_connection *nc) { + mg_send_head(nc, 200, 0, "Content-Type: text/plain"); + ESP_LOGW(tag, "received reboot request!"); + esp_restart(); +} + +static void handler_set_config(struct mg_connection *nc, struct http_message *message) { + ESP_LOGD(tag, "handler_set_config"); + char *body = mgStrToStr(message->body); + if (storage_set_config_str(body) == ESP_OK) { + handler_get_config(nc, message); + //reboot_delayed(); + } else { + mg_http_send_error(nc, 500, "failed to store config"); + } + free(body); +} + /** * Handle mongoose events. These are mostly requests to process incoming * browser requests. The ones we handle are: @@ -85,75 +126,41 @@ static void initialize_sntp(void) */ static void mongoose_event_handler(struct mg_connection *nc, int ev, void *evData) { ESP_LOGV(tag, "- Event: %s", mongoose_eventToString(ev)); + uint8_t handled = 0; switch (ev) { case MG_EV_HTTP_REQUEST: { struct http_message *message = (struct http_message *) evData; + + //mg_str is not terminated with '\0' char *uri = mgStrToStr(message->uri); - ESP_LOGD(tag, " - uri: %s", uri); - - if (strcmp(uri, "/set") ==0 ) { - oap_connection_info_t connectionInfo; -//fix - saveConnectionInfo(&connectionInfo); - ESP_LOGD(tag, "- Set the new connection info to ssid: %s, password: %s", - connectionInfo.ssid, connectionInfo.password); - mg_send_head(nc, 200, 0, "Content-Type: text/plain"); - } if (strcmp(uri, "/") == 0) { - size_t resp_size = select_wifi_html_end-select_wifi_html_start; - - ESP_LOGI(tag, "size %d, start: %d, end:%d", resp_size, (int)select_wifi_html_start, (int)select_wifi_html_end); - - mg_send_head(nc, 200, resp_size, "Content-Type: text/html"); - mg_send(nc, select_wifi_html_start, resp_size); - } - // Handle /ssidSelected - // This is an incoming form with properties: - // * ssid - The ssid of the network to connect against. - // * password - the password to use to connect. - // * ip - Static IP address ... may be empty - // * gw - Static GW address ... may be empty - // * netmask - Static netmask ... may be empty - if(strcmp(uri, "/ssidSelected") == 0) { - // We have received a form page containing the details. The form body will - // contain: - // ssid=&password= - ESP_LOGD(tag, "- body: %.*s", message->body.len, message->body.p); - oap_connection_info_t connectionInfo; - mg_get_http_var(&message->body, "ssid", connectionInfo.ssid, SSID_SIZE); - mg_get_http_var(&message->body, "password", connectionInfo.password, PASSWORD_SIZE); - - char ipBuf[20]; - if (mg_get_http_var(&message->body, "ip", ipBuf, sizeof(ipBuf)) > 0) { - inet_pton(AF_INET, ipBuf, &connectionInfo.ipInfo.ip); - } else { - connectionInfo.ipInfo.ip.addr = 0; - } + char *method = mgStrToStr(message->method); - if (mg_get_http_var(&message->body, "gw", ipBuf, sizeof(ipBuf)) > 0) { - inet_pton(AF_INET, ipBuf, &connectionInfo.ipInfo.gw); - } - else { - connectionInfo.ipInfo.gw.addr = 0; - } + ESP_LOGD(tag, "%s %s", method, uri); - if (mg_get_http_var(&message->body, "netmask", ipBuf, sizeof(ipBuf)) > 0) { - inet_pton(AF_INET, ipBuf, &connectionInfo.ipInfo.netmask); - } - else { - connectionInfo.ipInfo.netmask.addr = 0; + if (strcmp(uri, "/") == 0) { + handler_index(nc); + handled = 1; + } + if (strcmp(uri, "/reboot") == 0) { + handler_reboot(nc); + handled = 1; + } + if(strcmp(uri, "/config") == 0) { + if (strcmp(method, "GET") == 0) { + handler_get_config(nc, message); + handled = 1; + } else if (strcmp(method, "POST") == 0) { + handler_set_config(nc, message); + handled = 1; } - - ESP_LOGD(tag, "ssid: %s, password: %s", connectionInfo.ssid, connectionInfo.password); - - mg_send_head(nc, 200, 0, "Content-Type: text/plain"); - saveConnectionInfo(&connectionInfo); - restore_wifi_setup(); } - else { + + if (!handled) { mg_send_head(nc, 404, 0, "Content-Type: text/plain"); } nc->flags |= MG_F_SEND_AND_CLOSE; free(uri); + free(method); break; } } @@ -190,11 +197,6 @@ static void mongooseTask(void *data) { mg_mgr_free(&mgr); g_mongooseStarted = 0; - // Since we HAVE ended mongoose, time to invoke the callback. - if (g_callback) { - g_callback(1); - } - ESP_LOGD(tag, "<< mongooseTask"); vTaskDelete(NULL); return; @@ -254,13 +256,13 @@ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress ESP_LOGI(tag, "**********************************************"); ESP_LOGI(tag, "* We are now an access point and you can point") - ESP_LOGI(tag, "* your browser to http://" IPSTR, IP2STR(&ip_info.ip)); + ESP_LOGI(tag, "* your browser to http://"IPSTR, IP2STR(&ip_info.ip)); ESP_LOGI(tag, "**********************************************"); // Start Mongoose ... if (!g_mongooseStarted) { g_mongooseStarted = 1; - xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 8000, NULL, 5, NULL, 0); + xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL, 0); } break; } // SYSTEM_EVENT_AP_START @@ -293,13 +295,6 @@ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress initialize_sntp(); g_mongooseStopRequest = 1; // Stop mongoose (if it is running). - // Invoke the callback if Mongoose has NOT been started ... otherwise - // we will invoke the callback when mongoose has ended. - if (!g_mongooseStarted) { - if (g_callback) { - g_callback(1); - } - } // Mongoose was NOT started break; } @@ -314,22 +309,45 @@ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress * Retrieve the connection info. A rc==0 means ok. */ static int getConnectionInfo(oap_connection_info_t *pConnectionInfo) { - size_t size = sizeof(oap_connection_info_t); - if (storage_get_blob(KEY_CONNECTION_INFO, pConnectionInfo, size) != ESP_OK) { - return -1; + memset(pConnectionInfo, 0, sizeof(oap_connection_info_t)); + ESP_LOGD(tag, "retrieve wifi config"); + cJSON* wifi = storage_get_config("wifi"); + if (!wifi) return ESP_FAIL; + cJSON* field; + if ((field = cJSON_GetObjectItem(wifi, "ssid"))) strcpy(pConnectionInfo->ssid, field->valuestring); + if ((field = cJSON_GetObjectItem(wifi, "password"))) strcpy(pConnectionInfo->password, field->valuestring); + + if ((field = cJSON_GetObjectItem(wifi, "ip"))) { + inet_pton(AF_INET, field->valuestring, &pConnectionInfo->ipInfo.ip); + } + if ((field = cJSON_GetObjectItem(wifi, "gw"))) { + inet_pton(AF_INET, field->valuestring, &pConnectionInfo->ipInfo.gw); + } + if ((field = cJSON_GetObjectItem(wifi, "netmask"))) { + inet_pton(AF_INET, field->valuestring, &pConnectionInfo->ipInfo.netmask); } + + ESP_LOGD(tag, "wifi.ssid: %s", pConnectionInfo->ssid); + ESP_LOGD(tag, "wifi.pass.lenght: [%d]", strlen(pConnectionInfo->password)); + + ESP_LOGD(tag, "wifi.ip:" IPSTR, IP2STR(&pConnectionInfo->ipInfo.ip)); + ESP_LOGD(tag, "wifi.gateway:" IPSTR, IP2STR(&pConnectionInfo->ipInfo.gw)); + ESP_LOGD(tag, "wifi.netmask:" IPSTR, IP2STR(&pConnectionInfo->ipInfo.netmask)); + if (strlen(pConnectionInfo->ssid) == 0) { ESP_LOGW(tag, "NULL ssid detected"); - return -1; + return ESP_FAIL; } + return ESP_OK; } -static void saveConnectionInfo(oap_connection_info_t *pConnectionInfo) { - storage_put_blob(KEY_CONNECTION_INFO, pConnectionInfo, sizeof(oap_connection_info_t)); -} +//static void saveConnectionInfo(oap_connection_info_t *pConnectionInfo) { +// storage_put_blob(KEY_CONNECTION_INFO, pConnectionInfo, sizeof(oap_connection_info_t)); +//} static void become_station(oap_connection_info_t *pConnectionInfo) { + is_station = 1; ESP_LOGD(tag, "- Connecting to access point \"%s\" ...", pConnectionInfo->ssid); assert(strlen(pConnectionInfo->ssid) > 0); @@ -353,6 +371,7 @@ static void become_station(oap_connection_info_t *pConnectionInfo) { } static void become_access_point() { + is_station = 0; ESP_LOGD(tag, "- Starting being an access point ..."); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); @@ -387,7 +406,7 @@ static void restore_wifi_setup() { ESP_LOGI(tag, "GPIO override detected"); become_access_point(); } else { - oap_connection_info_t connectionInfo; + oap_connection_info_t connectionInfo = {}; int rc = getConnectionInfo(&connectionInfo); if (rc == 0) { become_station(&connectionInfo); @@ -405,14 +424,9 @@ static void init_wifi() { ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); } -/** - * Main entry into bootWiFi - */ -void bootWiFi(bootwifi_callback_t callback) { +void bootWiFi() { ESP_LOGD(tag, ">> bootWiFi"); - g_callback = callback; - gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); @@ -421,4 +435,4 @@ void bootWiFi(bootwifi_callback_t callback) { restore_wifi_setup(); ESP_LOGD(tag, "<< bootWiFi"); -} // bootWiFi +} diff --git a/components/bootwifi/component.mk b/components/bootwifi/component.mk index 160a7c6..f8f5a2f 100644 --- a/components/bootwifi/component.mk +++ b/components/bootwifi/component.mk @@ -6,5 +6,4 @@ # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. # - -COMPONENT_EMBED_TXTFILES := select_wifi.html \ No newline at end of file +COMPONENT_EMBED_TXTFILES := index.html \ No newline at end of file diff --git a/components/bootwifi/include/bootwifi.h b/components/bootwifi/include/bootwifi.h index dc555b0..897aa07 100644 --- a/components/bootwifi/include/bootwifi.h +++ b/components/bootwifi/include/bootwifi.h @@ -23,8 +23,6 @@ #ifndef MAIN_BOOTWIFI_H_ #define MAIN_BOOTWIFI_H_ -typedef void (*bootwifi_callback_t)(int rc); void bootWiFi(); - #endif /* MAIN_BOOTWIFI_H_ */ diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html new file mode 100644 index 0000000..1984c5a --- /dev/null +++ b/components/bootwifi/index.html @@ -0,0 +1,237 @@ + + + + + OAP Sensor + + + +

OAP Sensor

+
+
+
+ WiFi + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ ThingSpeak Client + + + + + + + + + +
+ +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/components/bootwifi/select_wifi.html b/components/bootwifi/select_wifi.html deleted file mode 100644 index 0ce1746..0000000 --- a/components/bootwifi/select_wifi.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - -OAP Sensor - - -
-

OAP Sensor

-
- - - - - - - - - - - - - - - - - - - - - - - -
SSID (required)
Password (required)
IP address (optional)
Gateway address (optional)
Netmask (optional)
-

- -

-
-
- - \ No newline at end of file diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index 9da030a..7d0bd80 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -39,6 +39,7 @@ #include "thing_speak.h" #include "oap_common.h" +#include "oap_storage.h" #define OAP_THING_SPEAK_HOST "api.thingspeak.com" #define OAP_THING_SPEAK_PORT 80 @@ -46,6 +47,7 @@ static const char *TAG = "thingspk"; +static char* apikey = NULL; static xQueueHandle measurements_queue; static int post_data(oap_meas meas) { @@ -88,7 +90,7 @@ static int post_data(oap_meas meas) { freeaddrinfo(res); char payload[200]; - sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f", CONFIG_OAP_THING_SPEAK_API_KEY, + sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f", apikey, meas.pm.pm1_0, meas.pm.pm2_5, meas.pm.pm10, @@ -144,8 +146,34 @@ static void thing_speak_task() { } } +static int thing_speak_configure() { + cJSON* thingspeak = storage_get_config("thingspeak"); + if (!thingspeak) { + ESP_LOGI(TAG, "config not found"); + return ESP_FAIL; + } + + cJSON* field; + if (!(field = cJSON_GetObjectItem(thingspeak, "enabled")) || !field->valueint) { + ESP_LOGI(TAG, "client disabled"); + return ESP_FAIL; + } + + if ((field = cJSON_GetObjectItem(thingspeak, "apikey")) && field->valuestring) { + apikey = malloc(strlen(field->valuestring)+1); + strcpy(apikey,field->valuestring); + ESP_LOGI(TAG, "apikey: %s", apikey); + return ESP_OK; + } else { + ESP_LOGW(TAG, "apikey not configured"); + return ESP_FAIL; + } +} + void thing_speak_init(xQueueHandle _measurements_queue) { - measurements_queue = _measurements_queue; - xTaskCreate(&thing_speak_task, "thing_speak_task", 1024*10, NULL, 5, NULL); + if (thing_speak_configure() == ESP_OK) { + measurements_queue = _measurements_queue; + xTaskCreate(&thing_speak_task, "thing_speak_task", 1024*10, NULL, 5, NULL); + } } diff --git a/components/oap_common/component.mk b/components/oap_common/component.mk index e19e22a..35b4a87 100644 --- a/components/oap_common/component.mk +++ b/components/oap_common/component.mk @@ -5,4 +5,6 @@ # src/ directory, compile them and link them into lib(subdirectory_name).a # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. -# \ No newline at end of file +# + +COMPONENT_EMBED_TXTFILES := default_config.json \ No newline at end of file diff --git a/components/oap_common/include/oap_storage.h b/components/oap_common/include/oap_storage.h index 2b9929b..781d759 100644 --- a/components/oap_common/include/oap_storage.h +++ b/components/oap_common/include/oap_storage.h @@ -24,6 +24,7 @@ #define COMPONENTS_OAP_COMMON_INCLUDE_OAP_STORAGE_H_ #include +#include "cJSON.h" /* * Achtung! @@ -35,5 +36,11 @@ int storage_get_blob(const char* key, void* out_value, size_t length); void storage_put_blob(const char* key, void* value, size_t length); +int storage_set_config_str(const char* config); +char* storage_get_config_str(); + +cJSON* storage_get_config(const char* module); + +void storage_init(); #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_STORAGE_H_ */ diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 46d8ad3..82b6b78 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -20,11 +20,18 @@ * along with OpenAirProject-ESP32. If not, see . */ +#include +#include + #include #include #include #include #include +#include "cJSON.h" + +extern const uint8_t default_config_json_start[] asm("_binary_default_config_json_start"); +extern const uint8_t default_config_json_end[] asm("_binary_default_config_json_end"); static char* NAMESPACE = "OAP"; static char* TAG = "storage"; @@ -35,18 +42,51 @@ int storage_get_blob(const char* key, void* out_value, size_t length) { err = nvs_open(NAMESPACE, NVS_READWRITE, &handle); if (err != ESP_OK) { ESP_LOGE(TAG, "nvs_open: %x", err); - return -1; + return err; } err = nvs_get_blob(handle, key, out_value, &length); if (err != ESP_OK) { ESP_LOGD(TAG, "No connection record found (%d).", err); nvs_close(handle); - return -1; + return err; + } + if (err != ESP_OK) { + ESP_LOGE(TAG, "nvs_open: %x", err); + nvs_close(handle); + return err; + } + nvs_close(handle); + return ESP_OK; +} + +int storage_get_str(const char* key, char** out_value) { + nvs_handle handle; + esp_err_t err; + err = nvs_open(NAMESPACE, NVS_READWRITE, &handle); + if (err != ESP_OK) { + ESP_LOGE(TAG, "nvs_open: %x", err); + return err; + } + size_t length; + err = nvs_get_str(handle, key, 0, &length); + if (err != ESP_OK) { + ESP_LOGD(TAG, "No connection record found(1) (%d).", err); + nvs_close(handle); + return err; } + *out_value = malloc(length); + + err = nvs_get_str(handle, key, *out_value, &length); + if (err != ESP_OK) { + ESP_LOGD(TAG, "No connection record found(2) (%d).", err); + nvs_close(handle); + return err; + } + if (err != ESP_OK) { ESP_LOGE(TAG, "nvs_open: %x", err); nvs_close(handle); - return -1; + return err; } nvs_close(handle); return ESP_OK; @@ -60,3 +100,96 @@ void storage_put_blob(const char* key, void* value, size_t length) { nvs_close(handle); } +void storage_put_str(const char* key, char* value) { + nvs_handle handle; + ESP_ERROR_CHECK(nvs_open(NAMESPACE, NVS_READWRITE, &handle)); + ESP_ERROR_CHECK(nvs_set_str(handle, key, value)); + ESP_ERROR_CHECK(nvs_commit(handle)); + nvs_close(handle); +} + +//----------- config -------------- + +static cJSON* _config; + +cJSON* storage_get_config(const char* module) { + if (!_config) { + ESP_LOGE(TAG, "call storage_init_config() first!"); + abort(); + } + if (!module) { + return _config; + } else { + return cJSON_GetObjectItem(_config, module); + } +} + +int storage_set_config_str(const char* config) { + ESP_LOGD(TAG, "set config"); + cJSON *configJson = cJSON_Parse(config); + if (configJson) { + if (_config) cJSON_Delete(_config); + _config = configJson; + storage_put_str("config", config); + return ESP_OK; + } else { + ESP_LOGE(TAG, "malformed config, ignore"); + return ESP_FAIL; + } +} + +//free result after use +char* storage_get_config_str() { + return cJSON_Print(_config); +} + +static char* default_config() { + int len = default_config_json_end-default_config_json_start; + char *str = (char *) malloc(len + 1); + memcpy(str, default_config_json_start, len); + str[len] = 0; + return str; +} + +static void storage_init_config() { + char* str = NULL; + ESP_LOGD(TAG, "get config"); + + + int err; + if ((err = storage_get_str("config", &str)) != ESP_OK) { + if (str) free(str); + if (err == ESP_ERR_NVS_NOT_FOUND) { + ESP_LOGW(TAG,"config does not exist, create default"); + } else { + ESP_LOGE(TAG,"config corrupted, replace with default"); + } + } else { + _config = cJSON_Parse(str); + if (!_config) { + ESP_LOGE(TAG,"config is not a proper json, replace with default\n%s", str); + } else { + ESP_LOGI(TAG,"config\n%s",str); + } + free(str); + } + + if (!_config) { + str = default_config(); + _config = cJSON_Parse(str); + if (!_config) { + ESP_LOGE(TAG,"default config is not a proper json\n%s", str); + abort(); + } else { + ESP_LOGI(TAG,"config\n%s",str); + } + storage_set_config_str(str); + free(str); + } +} + +void storage_init() { + nvs_flash_init(); + storage_init_config(); +} + diff --git a/doc/ESP32-DevBoard.jpg b/doc/images/ESP32-DevBoard.jpg similarity index 100% rename from doc/ESP32-DevBoard.jpg rename to doc/images/ESP32-DevBoard.jpg diff --git a/doc/prototype.jpg b/doc/images/prototype.jpg similarity index 100% rename from doc/prototype.jpg rename to doc/images/prototype.jpg diff --git a/doc/schema.jpg b/doc/images/schema.jpg similarity index 100% rename from doc/schema.jpg rename to doc/images/schema.jpg diff --git a/doc/images/sensor_settings.png b/doc/images/sensor_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..b07a9b4b2c5ca4ff260aad89c40c1acf280c1cdd GIT binary patch literal 100805 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 z z9gLqZcR&0N2O!fvCF1&V(`xdUV)3Og6n?HjpCgo={r&Z7PTUiXEzDA|+vrzn&Bt@D zA`_|zVn)UlQfKgH!AOy{588BY9Iu%e!$a2Vr8sykm%voPrV)tCzmM_D16skv$j-iR zyRqIoRnV>;U8}>`wIiadnEfd;ZPdq-HkE#3U4;wJtZ3?@{+KnTOr~YK!_ANz;M=k< z5E`d09HJRCaPN|-WEPkdy0+vmXM99A5=YinY`z@}x%u`Brv_(_N{45iXsNPSK0rSZ zvU0lP77bV+!fj(b0nJkhUfg)hUhJgVuq`Czl;BeQG#xf!H}2-Qd$xPVEkQVNk61Mp z_>|DsHN-(}>s{aIrI7h2YmrpHvClP1Wqn zUPm$qCWy1}{Q-)IaP=8?%M~4KTQiRZdsotSB|LQ4KBbUlwOFi6@|G;dv8sXkNoTIU z?tYG6z$PC+Tqn!Uj?ijflggp01|e=Ba)vUP{qrQ-`C6Y zOj|#wOH#YSGZf?O2&Lh@j1_{=;ihkZiYP|=n<8Mw&GsnAQ@3B#@xx2;+x-naQ300I zS4#E#m#E$(3b1*Mj!dVpy5y^$WeLW`{TfsG-!?{vAE&-TIhhPdGwtulR!yK?HxMO2 z<-oV0_YY8s&Cgma!*MR)6}uMI=eLW_PMq5mlpDHD41a2Nx*q4m|K!6Px)xFU+|r2n zC~sG)ju{hYW0@;Tg?Uz~EiEwcG7JBL}b|z9ghHmm9 zO3t+=lqZwLiPNcBfQ)@@0h!AHSY zkf;82nnB_cQ~Ap;uY7`}_c8S~*bZ$9UzE|LLw@<6djcW1zemQ5aj+L>r{EF@^n_Ty z?I7;GAHx$=k?Upn7`xO{&pLEp1vTHPUcv-LVW~@xwt{gK)Q{A2VWZ+bk%;J6pAS~| z)3Hkqw0 zqv^FHcgs-2e(2b!W4a9K-y0fW&^%~neET~Vo%xhP$4f;VOrVx4URoDOBxT{M&boqp zOGE<~Qb(Y=ypD_BhwtdUL|X}evEYM$9OkGvnq5Dlwf=nS?OJ)d#f}wvAS_u8R*4u@ z2hkqrJEwk}20K*xUEjGO2zKmz-Yj_8)u;AHbv+;YSjRN$^zbZ6Q2WvF3zijC!g(sz z?fg7{8@?wu4X2+JRMEfdaRiAA?!mn^d}4DsX6ihU%#Z*rboE)river>#GnW6V~E>b z8$(lX64F(xEr}bKdt&JN9!+adgo||#wGb=b7%I|Eey_#u$4fd-Iuaglpg!2izvl0D zpyr4htaDZATT5_>?@U@6tbSF0^I^^<$yVDHwjfht=%)jgeOl;CV6!~mU#y6zpZidH zrk_UmPC<;*+V;~IHB;%dWR<6K0H@}zufCvo&a^NoZ_|%n1%XCSoM7C%t>a9B&F}B- zrTMXZBFH_j1$+FA^XV_9eFr1@*6DlJ_abCefsm#Ln&`jCDSaUTTIj56vnYT48TCuM zcq=5lziQ}7RiE8_7jSjvxhm`zDslvkhaL0luy7J#uagy3!?66eE!;N)3rPpKZ<=&} zs}fCZuvX-AB4dPe91c_A0XOg!OGauOtty}H3O;hsk_tOxl>02Z={Q^xKg!)a ze72I?6^8p0lb;X}d`NavfB0)IPd*C}IC7CE&?KN5JE#rD*y5nQaC!II*%4bG)6P+8 zRej{488(S>`(WP}D$KFahl0QLjN~tXjPZ(e`?oIc4hK`qb_k!pVV@wZfa}YIGj#))2e8ge^(gnq9<>;JMKMW__dh- z6@8K+z($}XCg%RniQLVmN*<7){=MS2#r|Bdf7j|?EBTMh{@?mXt+Lvi$A1I#7uemI z>e7^BqMxzagc^(w3jUlL=8w@THNYpg%wC}X(u=vhxKN?!cQC{z?WS?iSGTv*U{r%w zc8M(UKNv-g3e=f>i{p{~r$OIYwLv9-Qa1AsyZ-!yXVWJD8C0z3vJmfq6mYj43<8OP zT{dp$|6m3XHMskm!pZ)rDkskZV@)~3lj8r})c)}gCXjlV5B4UL|2bBfG7y2(?md9~ ziINL%fP9s@2218YEfjwvuDi|CZByIF6`!Euv|(cU)ABU#e3lawBJpxuB!!YqEDh=NR%?%LX@ zebT)7pDQW>l-?yz=?pu5h+5S>k;nB}h?+_QCt*O^zz3U_y9r=Fv!T(;NzW$fr)j!1 zW)g7fd!cF|hq$@VgAE>WPL~O1zc#(}_r3-@vhhEjX-FpKzWq=`3RbAr+ z%d@je#Ph?G=baqvJ{4F$&RUUk4e?vgG`IiNo8pA{5MeSqx_^j+?3ge~4S5c8BGGp*?uCZLfi@MLM z(#H05ZXSM{iH*sM(K+tQBXUs+RoVUGb!uXn_9K?K=w9(dBJso2%EMBb9TORO^}>Mo zmsoXbH5q+h9*yZ*8`Y-oMd@rbhw0!MkHc+*1l6k@*t4Y%&l9^}vpUZ??B<*bi{Dle z`DaIn?Noh(`dZns{@6P5yRG(AP701pvRC=)YxiTzWZx}zwCsY6Dv?9ZKX6Fy#FjC9 z(019Ic)li;XKZ6H+^9%~@j1i3v43!r@WYL%>4lFJj{NoU;~}D%IxertgoEXXYBS}( z%vpMQB7(d1h)(vr((uxBKkezZ<8`a=Eebc6cT=wv?cVMkJWdmL)o*!3NV~yIL3C~A zOV@ERmvXa^ z8Zok>xWm-dBRjVA(=Eh!u##dTHJzKR$A0wL&_RFPjJ&><->Eabjt_6BKdq>ayed@N zu%9n5SqI@RFYd68N5zB(^`%0FJ)=;=&Os1f2e~ly93H#0Vs|lB`{ku*FSX;yBRY90 z*F72$I)fcbQHE&2&XpJ*toM82c>d8rlVv^Y6AwJ`#o{Je#>=;rquSC74N>+L{jN7O zSOlJP;)YJh=3Z4D*EuN4h4D&Vk|&I6-8*_)(fB|WMa4F_1@*lCXpsG=uzTo0rJvOU zcC3|1cjd&B_7EZ!NYO2HHLE&Qsuz+R(m%l+Y*mL%)0j|6H{-Xj0k*okt1>^?H zicRkIl_C+9*f77NWm+dz8EdB@hvx-$v0}~^a$-(OG4!ONC~dmzN#Y01gCd6;2v~*D zekoW`E8M3nZF*G_ul(jIr zu_24$qmjdV$LqW{2^u`rW%gLN!FYb)%0Mu@TsyMrv0BoFs+o1{Zb*PyJbC2a=j-Rn zr86JKjIUkA<;4ftDE)-JFL8jRpa7R9e$vtH6xJBa66e1l=Z;GlVtjNssho2X# z%lO7}-5kNSNa4R#7e6`^h~fb`LbMN9i*zj)7gs@K34-tc1nO>_Xzw=WBC)&(nhQOh zvdx9GRL>YuI}F)7vCE|T96})yQ*y9DeR)Kgvgnum&_z#f~3*q#_D6PJ401X4~_(0bG2K) zEFg0-CAZan9jdIR)|r1LHBf8aaHs|k8uZrH&!{QSfoy&LOV%14VGUykThe+imd!=6 zkBT#^qiO0)y0w9U4%on+lqoHo?o8)XhaLXhkX7C^H9n-SenFM3ZyJGa6=Im2OBbk5e)7(~;;! zXI4OizE~r`UEiu&j6WSAwXeCk=S15<0 z?P9>BH}U1j&{QyM5U-(XBjF;RKLM z-IzOl%J^z_*$vNFThgBCDZ^S@?pq!lgUm?L{m)?HGlhE>f0~K4#ZFE1M2zRq(JdVD zhMn8U)H-j$NmE?inv+J^7E7M!e6P=0ULJcRQ1N|7?4wgehmNq|fDg%83hV zm)vJ?hPT1SL9DqKW@RYx=4irfWh~F>BMg7u+x=5Fm(qFa&ZdV)7j$7&icek=$x=Jj z2*WQ>uy40Fj94Iw!Q(ul%GizN0s9_XJ9eLl&Brqe4b5hz(%vW$(gY)|bNiOc2kycq z1$E3^B5W9&qkYR(L}005dzll`fIF)BXouKN%@dYJj=gN!$GVq-H)%d>V;+Fzs?w(n|8^$i#W-Za^p%zRl&yj!zh{{VbptJlav92vtzr+X5pzOAN^JFaOaH zZ_9bLbq-q`=dJz5nfBC0pyU;42bcMLJXl8V5iUgE#Q5zawsnFvD+z%XON-{oR|FTP zfd_vHeF8Ud@L&z!TopG)D7{e_#x=@?SFawB>iT|Gjs0pp%lY$-acRD%+L5wP{My*m zRPK0Q{;QtJ*G9zJ`2Pejf&r0-HF)&WM`TB@8mxHbToS+yN}^4+jz6|WSGO(>A`*GZ zw?3>&DoIVzYVLMpRbM3$4wdHe2HmvUNfhMxj|yp&X_={rT^IASve|U{G4bmhZU#`! z2n+Hhd2iA5cD0i?-|06f+f3SF4xgjquYsPU-dx$92RnO%<~)Xef=dmOlDMSi6*#aj zV(dyQBP1HjbKB4KeDxHL$TeSe8s)(SpRk=$6B%3ClV(K!^{$&$s{-UOu&WK7k$=_;Lh$~oQh^sIlAuHcrX(aKQzva1pb z?#$om;eCdGb>8R|uP8wIjS3N1B>L3}H9WS(F`Vp;N zNezl?>0xnJ=sTXjdjS|>F>7)7M$JvM>+a5DA>5=4SbpCYdhXJ@S+)qCJGxNa-omeq z3lp%_JoebWhFVg~Z6TFTyUPY?4<_@DJGer}&SBb0w0^t|n61gtZBWRn1i1$0hr_ov z_8r#W@XZn$t@Pe+HlYy?Q${*Lq>(>NNXI*LcKCXOZAktSlqde7@I1Q~Eezu=3`a2W-l&Qn|(M(*|eJc8=&MGLzVO13{yto6<-8=|@Z)w4nY2R(4mV z(!0dU2o}} z?UYzw+80Yhuo~iTEd{Y<<3;4_>Uv1PB;hh!_tq68t1DYVR%?Knx->F)@_)u(Nma5U9>|JL7)GMWAy7 zi@RPlAp4pSL{~Am-szzF;A?CAwk48>!i@5zu)b85sjDQL;cR{FwdFwkC#^@2@n@VP zQ~{6f&An+As7U$TXC~a=cXd>P^lJ9u#}BBY)WXy(6w7;`bdo2?n=9qpX*!s6=NB&Z zac`5iT9ds1@zIXcJY;wb4x###$J*HQ#=o!m0WM}kr&Es{%p2`6yR_=t=%QLwgEJpX z`G( zbvJJ?N)wcleqv!3Kca)bw8ZjEiERA)S&K+YwM*&Yd&@IGD*{EgLer2(qE$#Ueb>)n zPnWBMq~B>&az|g93J#rNZch@48C5=5$&J{maz^X+9aQ3~qjilu^mGj#dwx=JNCM5gtnn_ld8 zu*JsC7I=>L0s$|=5Y+a7PSaxc((>asJrI<``w;*(k}IZ3@kMZCl+*`Xl792lfwIYH zgcyMGf{Ri&C9edY7=Isg-GvN9)uZ~b=v|#e`>t%Ygz?w!$VUljCN_?YgI9G{v_TbK zMaNeS2OL=)DRo%Prf}pR`_uvoImEu79el+ghHNYRfi@xlQyDpE%DF7o9(UkHnZC6a zQ_VyOPoYP*{*G_#Y(3fOG_{H|D>0bCMZ!5OjHPtCW%)Z2a&K4Wp^%3e61weUVteb4 zdgf<@jftD8x$<~zB*1#u^1lq@PmC@ie)*dbk5 zc!!3;D1v))Qs27FlH#v@CYyPPZd?kFDC^lSM({7piyC*p4fHK@%Tndzp(=n0v4>l&F1I$MS_axNC4(;(aitv)q z2@>qLXG_cD+Nid52N+mM)vuS^DY}KbjEXpVmN(Y} z!d}or7~mDD@@eJ+Leq>a11Ap|Pt$v5O--|Nfn=+yzDoWN_`Tiv!VDsN#KbnUiCTj_ z3sbYYST~;iGqNh`7Td~~4UR-tonPUe<~(}y?dE-bW)Pb>4e2sw!kO_7Esm_#uhQMW z^M{Edz`mY^=R1GcyXh-O%cuLaf1G#q&Q^4OV_g0F+FPBQ=A3{A^f2E7CM6g%(T+`V zgc#OwQho}b9=6xnEkE$#Lqb*3UXGA)zA)7xgW;%gH}(N5@GDn^WpP z)O!fE4nDqC)VCIx4f6wy=A&+}@L)A$oi?rz9a`=LusL(s9PZ*BU~7MvfF~cXdqpYG zf$~%ms{nCx!jLz!T~}>yczxRWRBYq(gw}U~4)S|OwLbz=Ygxm7GAYV@&;_P|s`SOP z413K~*kX*?!FF$;cj}zfADRZ+)h8^SL4QaexWziB4L{{nkwX$KEflUfmE&4pOE2Sc zS(W6Aq@xINOY`^wM_sSymj-OT#iimIgVRH5Cxzy3aM>TUvb0@IkDm7;!fx3U_w zKUJYxRn+mn&+t%V0IHC`8M5sEs6wLv4k%HH+24yt?o=U#JBIh)EB+($0lx6>TK#J! zf6E8|xBgM9tV#g+b-K$9knQhOp<*dC_st|5qfQ=cEQ_xXJ&6wkkvbK7V5J%=s_U{`zUa)O~iR zpvi`e>*yWT$Y%+f3)MP^%hB;yGtd!?w|w z3cMuox~r1eYqn&Ye;W9L(nGw=SPSFbegS=rqIl_jsSl{G$dQ#t6q9Km6SqREKzpo} zA821-N2QE=EZMj1DV*NqovX9T*6se1j6SC&f43p8Cg+`v>$OU#{G#*E(cPLD(UP}# z&`h(gUFt#G7nxF ziQrciJ>~v44tUO4gN95(AivBfNh-j58{JsI!-xv zdzL>-BdYiou<&{38G@8mUL<+V2X;)b4MQwhjRK++IIHHsB#MH7C?hO1c?A8LvEN=O7*w|3Xxh$@BfQlHLvD zTTlEc_kf&{c7SY3x7aX_2wqM*8F^16eH$H?LWs9v6~8spF&8YPZ!gpqBGzfgo2k_UFSVzNR8>z@~r;lm3YLEL-qER?a{VyZ8-6u zZix67$Up-t3j+mytzO=582Sx#vOs*0BQR5)dYFHb5>=B}@(n8n*}5w`Zi|h>{v;2l zu7=3JQA{9ttPlbyAGZbaTE@DzAgQ2+cVvsh&E-;G*#}vX4R8w!!SvMnx94>~P8J&$ z39Gb)_!>C}^mSHy#jx_a)Z6_@F|!T(3}SO3xYlxEw2T9U+Lfs#mb%>AjL6|x_rV{4ik)yuJ2K+aeJAC zec$KdjA0Qz&^k4U*BnpMmzGc-u_}B!YIc-ry9q|lv#a^`n3s__)95im4KFS0bJRu> z3gLM^-NTw$)7LhmYK6||iZM{>d;%VcH~2_G1AC#6be8JP< zN){rjf?>&ptM^{4yVvpyEUs@<@Fl{uXPVxFqdXgqeI$Ojvr+x8Z*LRRRz3$3@a*e+ zyvXP7-~39nD=L)t#$dScAsC|0zeD{TARY>^jPD@^x3jxSTvR{jC8fS|B1D$~y*Jw& ziq=q~;LOrUz50gl6$@T(zFcNb^_ov1U$;GG7s9G3)wsx%-5QNwd|#5r3VP3{y|F&h z187mGSbw(Uyz-i7AN@BdmCRb@#gUfjQk9~qAxFG&9=Adac43FKWlK{3nw)EXRoN(H zCeVK|r!2C+d@nv`>a4w>u)>%$-qDgC^V*2B@_g9RR5#sx&N6Rlia4wmtdyO_O95nEE2q6m$6ssm`ti7f8Zm1bNZ>x}O| zAGr6$!o1rmGbcs$T|J#5%4WO7lnc?(JF;O{j@SK-F3pNj;e19+7(-kF_il*f>5tsGPxX-Um)!=R<5|Z@IxW6n@(CV)0>zEYk5#?y( zMhmYTeTuQWlsIv7$4l~>iv#~4cK!i;(qepE3H#Pa((;y$`cWZnSQDqZW=IQ(Fzt&( zddmQTr6}Ve+vE~ycY%d+O+`_@z_K^`TwgJji4C>_;QaymRh*AlA|cQY#f#`7fezmo z>Fdx?o|6#t;C^>EdQ<@Z2@~?!Z9o#N9%!g_B(jenk87>xIWAKwN?r{Hf9F%b=t@1Q zEDe?q@Z@1RFgoF_PiP`+Fm>K@DOCvmx`8u1MKZsg_?*3v#{)CrdUK~PkD(CB*#-FC zpl#WvL-z(=U#DUzmdlwJ90GX_TLc=WoQG>-q~C2&r!T9i4pyRK#Nc?&k=T44rCzj# zlc|aamWtekblV^GW`WA-D7F}&1fP_lT27{88T zaN@b0;FaU&Zas+hnD_m{xa342Rd=AxpD1j0Q(AP>@${MVbEWL&ZsoS!%Fj82yjHx{ zl_(Lmt!rd6mJvrKOV;-FyGj9BGbKL zJ9McsGUw*^xcVah9Ur;dHx-@RntUx$5{pF69jh}fN*9``E9eaDFHFNh51-@;kMP{m zuFgra96N$)Zye^8m*2=I%sv&$&Uc6wULQT_-5xkG67ZNpPIggf>5(O}DxSw99k3v! z*x2h)q3-zMy79=hn$DfDxW4#vMgDU|2bs@;MUCQo4B$x%qMHq}Vos%}SU1Vy4nfC4 z@1747prE@yVzUhe-oa|;-$~-Hm`LL8TMxL=a@#?Dz5e2ITNvQc)f+t5Oq?0~=Sh`^ z2MxQ1#`psp@Zs})oij{FwDJrs%~P53>CE;LS6f%Whc*N8ZsY^<2vHR-bzNT9kJF6R zIv%~4@5nM@aLThW_Q>(7(LSUZ8#BP) z=Gq_f*^FI|%Bzj@9nufANp;uABJpiM>nc~5Cpxs2dE1u+p5P!%(UyfTxH|uQgT{^t zt`>)jpQVlk2d9esA=w$ZI|Pf2l1&b)xcijs`fTZ;$6ucXSQ&*RTOuUjf%kLa(~Z@+ zulk{_dq-d8;fIwkv_2-{n+JUg;j*n%M@}3mmnvG&k(ago(nTvY9q56eTDT4y2C?0H zalj;`(p3~Q4;~-I4K?076>R^~r2rnCP3WVuakTF7cpWn;emWSI)-b$_dm9^dzVj57 z4&ID15qxDO!O9>~bRpQWF_q^OU#@+B3p5A1lAD`#N1}NgfvMBIxEkXHY7tr3wWm(QtCvyXX@d2yn!Zo zJ=e21Q-w|hjZ3cCXTAA^z-c%Djy%0>_vZ@(qCiZN9LmQ_YYAi?bOk1(@WuKuOC*Rn;%A*G` z)_2iy`lKE_ZFh-|iqv_&ntrLxvVsdkT$o*gAyWSGLt~^z+ANOm8^&fHyqRy;EgDg6 zX09yT1Xy*@!wKOln&q&(BPUg{laI=1b<1{`>YT^)6gL`47D^&*jS6fEp-`I-4!3qP zL8lx1jmun0;IZV6+hGcRloO#s7i7HPg2iQU2UO`{FyO{27=LJ6j{qv^nR&(N>m8;& zCTh}1`WCo0_bVely&KDc$#~aby1+BY&DDr2q<$P;ci+g<9-e;x-QfpU7W-cGz1LWr z`gneV{cLnnjrkwswD#~v{9eRWDvYP&!gL95_wd9RPAI*hikfFo7W`;629sOs#gF_Y zu&AA5N6Ea$#d3vj)3#=lQv{9TOa07QtJou4a#da%;R?x*ft*48{F zP@lo2R?beLi@Ep!ShkZC^)qYiC*zp9lOnljY>C%K69NRNY{P^kHz2-9JQjT4;WMqF z`Qirniw0XW=EIlIxUIfWcYHtVGv`^=lzKbA9daX{(8<&Y3Gd+I!<|IRX`h&1BT^lF z_S)H1tnGsfR;@k>irR=FuD>>e)%9xw{DJaj4IdGgmyK0SmNveVP_Hb#idDY+ zQ1TZDj$maq`nX|$tk&ja<%s>o3~@sLNr!-^DH6kx+M3vWadFO8&3>Qc!R=Vd=AgrR zL-YFc}`g5l%V?rA7^dD&9C z?Xy>*BZGNJommCO06UlBppW)i+|d>EjJ|*Cy@eHD6=uYNe;%&Q#(1j)H+jn#BU~t zNJ|=3t%cUkQpS`hiugdXY6_snN3!13{++V_V!)*}a~XEuxDX)vP;{xvyWY>Q zfMKQno+!34wT6cKW^n_vm*U!7FcKeg3SZ%5fA7e@QjB|bGkt%UOVXx&Fs+KSOG2smgkkpNDW z`x&4slLJ*u%3WJEJ+p^SGYg^p)_O8oF)$Zyo73azN#(SoRy1(d>)%g+y2w`|%tggM zYYd<Nb|h;JCy0Ic@hfk`T<~t%qE&_YB~UjVA?| z4pQl&`&GPmu?{Ta`LjP6AvbPCApD8(K>wd%2qc=!{z2~l)+6rP&UU^0ef|^}^FPU# zJB-VH!T#=d5_c|@p>eM?_UG$;@^T;hAGGnW`?!|?(J<{}ivNuH_vqZoZu9@R)$jj~ z0JftDvOgqYV08D{=f9uQ?eZ}|6E5EfN%8)Eya^0o{uQkzD{p>IqoTBFvBjtI2x4LK z`=$%DKv_=J_7@4VtDHgWDT);Ulc);>wY&*+X?I)MI|4!DJMq!C|N zMehJiyweqv1fSkN;N6`Ok$$=Vno(}P{!`{HdU)~hHLY_Y4{jlLdkrD&rE44U%nqGR z$yc|huqA?i?Bj$7TCy2oxwIoYlUA)#Z*QZ??ExZ%;t_#1kcbs@5r^4P-2$BcC8Zlgy1QEh1crtIhLW10h8h|M-itfAz1REUUF-ew zJnR33#bTIqo$H*l&))mD_x|n7<=u5}K5&IZOnp1YIpyP3*mxf95>t7yO!stG)N)N_ z7H1^op)4XJw@{zhd}wN{5Mq!Lt66qEUE_mEttxTz1M?WsJRGrto(!_9dL$R9UHQV= zCxL5h0$1eryOBfpbmz@0KkiPdN9X2Zm&N0sYQlRmC&lO2zT9ahiJq*%AT9c?k~Kak z?w-Et`m35Yl*E3v{vyf-eA3HK+_(l|cA$A&$JEa4ed6qE5AvQ177$S~@hVh#U*Aa&!9J zu8oLOke*ZQ`5IR9+1ogVXG`-s(CR-CZ0H42|8*TaKs{+Y zbul>&$p$_@#6vt^J*n$30GU;ts665E=FnsvVViT7``a&1k#)SDY3NcGzpJcaAwUQ&g}q%}PyC;^_@%gi{M0)f|;)dd3E z`E|y>%cAT%9}E}hRx8Uu*RYLCji_LizwqFDa$G;4C-S&T=UR`9%`##kryn)ZGn1De znALOhtOq$CFT5QSJJu1zuOUnYn~K4G!{_B0mRcRI5vx+=#lPnH^W52f2DiVem{a@k znj0UF&1_&4A#SS3K*?!h@3@@}bZ7hIrPahdMSV2=Cn#E9Uf(epKOyfHY*c8(oywkJ z<42CJBr1^!YDPJFd<|V6+2G=UK78f`({kCj{rY-5rlB8Xt=sjQ)e38Z5d-r?fZg9z zsVTN&AZ4F^*%nH-Q-`9686G{S=%?|v=O?OGcjW0Wnxjht($d4`WE@d>YLW*?u50H~ z(-yAD>zB;ER@ct&ma@2fO9YB6h%-bldgdUJXm+(!?ZF;8H*eAFNh^c%L#C_x*4NW6 zMlJa+%wJ#`@ad>64|cyvsO6%;M|7DSRaO(_YSOk-M>1C>j?I>0AzI&P{(8LG$@j@FItY0;McdoZ>0X$rfIs)Ogv8uKkV+yf}U} zHU!tj{_<}9%4EbMXBEcJJsM5TdZ@@-An=$s;e8igr{Ccc#VFtF~tDgbRI;zn3)>o86weFW0CE}V_a;eZaJB}I0mCZxs zXv<@Z3hiOGU9b280GYR;(byv&s1@+?u~PIKgIR$H1Je*yktwF{#k(k8OLZ%>v>AUxe| z(?w~$#LJAmQJX{4XNugj)ff4C`2Bnhj_*r&b$**ZX>}KbeIfQPUMQ+fPOW09+T?c5 zHJ1=Mt8-b+9rAiZLtL~XbH8}ayNrWJ--Q3{*wfh?CcoI(Q8o9Ih&AIYw`8+PyPdpI zfzG=MOobhalA*6uK3l!_=BGy?p}J41l5M@BYK|e(yIxTA<=i3_RbpoIZbmj#IkzI36@164%HqX5LVIs*RTHGNjPA*}$ zQ`9ns@Xk<`iyok?lq7qXfCSBW^P{QzTaOc{Wn-sh0BKys&#Y!kj62nb@5tub2`TUO|*21194+|ZX9QPV2OsY%{W(ke{7_*F;~h} zS>9J4Rn2Utf@Y(a9AI$_)-<^vRZQ&%M^6D0s9x&e zstL4wT@kfXz8vEbi@oB};n5Bfx$ja)b7Ji57?*?bz@w=jYZ)d~`Op_vT zK6g9e+-^8`3?4KpX)o<#W{|OxvG?7_dG*~#?$l(+*VsNAyeG2Z8++=97zIjT3%B|S z9tJNQ-8IwCG2i=!A4H_a`Qh#9;Q9ody)~evDX_Jb#g@gXaLGG~ZFEg*($cQL`ox?y zur;Foo0gYOOR|1sR@$DUfey{tVf^>anEu=gy+@;V<(i}s5ee?Z-jnx?HO)-V30-fn zeVC=!(?NT#Qw(iV%__%zR(^tPj&!eNmQ_bnGE1-7=ynQM^~rQYY}Y;dX!h1lw3D5h z^83!JggzbP&?7Qhgd`{6x@qWAT?JJmamvh>2<~xQ5M0|!>@a$7thPk`Tg+BUTm5-( zltWSP$oBYZgo&Bx%A0h|calCdUOC+F?Pl)OeqSD?+|Mx4^8au^z8*2F;fKe2fACaU zZ|qyD>9Pu&&%qT!f>P(}AR(xYUiTCYqKhevNz3yKt`W?&es*DUjx9KE78Y1F34Wes z`^dbjbIU>(tGfu+eS#}>0O9F4nU;g zO@{M#4~@Lc*?1ztrM3^BPym&i9;5vt>a)o)ql><8Q9$v(kA({Y~7S2 z$6--5iRNN@{d|nY$o`v@y2tvK?AxoAPpgswCJBwseL~9agsp4dbEa@0ja9LKR#e1q zvw{wrt2Vu(iNL6)#zobTM2Mo(@)ntQPEd=Qg*o5t?7Z4;7W{UxmGa`bS$cobc3Sd` zG?`@IT#WP2k%+UGP1Jqbq!K(Nb7l6@o~ck`0*DJ^z@3G0Zc*cqH->#{_uavwSc(Uq zY8HItlVS$6)eyXYVVnS#+6QDHx6z8D+4v|=77xj{GzuIK-B7kqifSU%($K=Uv7l~) z9+9yLu8L9!N1|}ViKpMmXoR8UoBa2dCf?5e8@gIwi=f)-}d2!-{8)E)A1Jh zv+LKirzQiO^60Jezvw*{uHum#NU^InEyXReMJg$G`Zau~6lBbqZ5gDJGHg07XtL$Ngq$}mH*B;^at473dK=v#F#p{ zUZZn+7TuX-(^R{3iXVA~D!j2SGS2l>vmSKVSE3OAdu1DmEf>lH@ZkCHNBZBaf4ZG) zaCUkI6Kb=xYmTtI;% zhl>@J!8pXPd54YeE>OU_?&WMC+^yf8y)?Szk-wR~PYd3@YYo2u158~bHdMmvsi5VS zv;nTT5r0vJal64S-f6oG>5KKnjq{8OFJ0mX zNcYlo6K)+ZKi7-L#3!%JG;4Ebm?}XsYYp!q>$VjxpyRfg1)!o#6mBWJ{gZ2?B%QZ0eI!{OG;-)f*-gk-PDG_xoaTIm=_{Qh% zbx)-3N18imW7V$V^(>yxwQNpMXhRXf7tqAN9GcM&{bb-PI04WI<}) zv<9f**^fD?T3(jL{o4sXTvT3Qad`8y`Y_LDd!sL?3q}JjNSH-n2+)vF{vuC^^dQ3X z5zE*!P$MB5lF3J)zT4dO6J<`Nnk>?@2cgNd8eMS@{(@y-WAOf|c31dd0s%Cl0PFqQ z1+?!8RM%D4G5q~Sn(uySRHq<+ZE z_}D8rXe2MHMF#_M_2oNSSIXE7K{o&@Eenm3y%wI$A13^Q!-g{4lFD5Y>Pd4`*KT&D zpLLc$4|pC2>YhA#ah)k$7{Y~6f>5^^K?nUi#B(?cMND)VBD_VqfA}5b4TR%-nUhtM zpK)%jsd4^UJG`5hJyd+darsMdn4)20%09(PRT6YAL{_GYES?9eom6l$8QI$Nyucrw z;I-bafybfGBlU&OoG18I-twzFedlHzf0EdHv?lPR%G46L1nB+By9$sD!~RM0zWjln zB$B4=%ZM`cHlC(CYYv`sMeznL{@Asr;}w}UQ*H72dlW5uu?_E6lv1!b)tu7``iDs~ z+HPimB|-_-XU7P+%r4?%>qzu|vowi4$w5!a#nzV#>PP-r8wr#$_q7Ip&?t(16%lS~ zvb@P{2E`2?(E_Yav(2lm;|B2nuvgyjfMTd7B+T>eFbZxWEimiEkEd!YsL(U{b8-#c znYv8b_wf1y05jSFPmPLY*xZrmTn7k7_pQC%KXo4wfkcc=o5zT6o&S}55OzYufog)8 ziJXDx-cLA_`+QMVu<-O7uGUDZi=&h=g5kYU-(Vt(dC5H+W)_#?1wS#VFOAEz7Nci}#@Q#kR_nZcb&NSDePpN<;L z+ksdkJm9k-WQFDq2DWPw6{~Jd&lhLoPRZLo1Iz^6H*G6G5wX2ni7F8B%#u$3MmI1@ zj|Uq;W3mL%tiu$2l|$epOtj96nH8vf_fbd+pN=;@fRHFX+8ZnueS@s&C)=%1R?TLx zHgg(mjbl7H6i{T#V)hZh;%+Q9dVFS|>B+q79$I{VIb&UGsQU!MdO?V>sRlQ^JF!C6 zBG&c(nE;VHZud4Hiuta26DKvXW1Nu?Q`sSIF){D$W}zkC-V{0@bK9UU1)tnnCPsX~+>GN(b&p5)2v%R83M zrGVL^=lCz1a~}vPCK_*exl7?`6t*pdEW`93uJ1%k(7;QoMkX2W}Et|8HH{_Soz>GSXZJMWV^T^%2qxU&r zE2ZTw(?B;s|KcMwgW>tO&b~hZ$$+-jJ$n0sOazP!iahgB=D$AHB9E9Pom(4$K7eze z6@aqR^^nYA!V9kz=DVCg!m4B_E7PzLO}g@Z(AEpd^&7o8SIb?`Q@QBhlHH?8lievKBBaCLn72jwww-&Ob>=aeCBQ*_hGa|+?0KBdm*G8(mPR6Q(dVe$B3z^L86Nl z3&z*%euE9JPmSE9z3*s8l0~!?30~COq3w(mu>W>WA@ejXaOtJ;1$~dF$Zr{e11PY! zkG=>;H)?t75FApWHXgJ;Enp-3sk(13>2||%$?X)^!vVczSaDduKz5J!^OyuDPfCu2 z<8?FC^22dH^XVB8&U86rVU47*-ki_W;6CQ9GC zyAgW5Eb-nBXpwummC(k|frok?6=B6)JYmxrY}@k$@v@i)urnNd0%=)IJ{-ixsw5+< z>PTlgk}4M}i5&%a+`sn7ry;Qh>ZL=^@)I{b;Z{5H$?Kuj(mK=GiyDj%4Id^KOctIl zxtX3BTbwe^=EmOEzhh7_!>(SaR~3ay7+N^s_e7$nQiv}m-4aBD>U^E21I#!o@G-cP z-YeeY+hs<}F;~w=O@?RyH)`M;lXja9ikn|Wtol>Zt z2zWGkiu5Ve-Y~avc7T&YdZPHzr988^;C)6eAU2j0UhwiOC(oc+)=x2% zeue59MiHiIp_Ca3?9R`QHzuhi!&IfJ$`rF~=?G2@)g2wBt1vMV!xPN<01KjerjcT= zTg7G5d;hu4`h)NIC{v2sx=`)`^Ft4v<--_w9Lq&))k%wVMPIa*1InO@d7Qx1+vnR7 zc}rA7%t1W=(K4zC8d?tO?iH}_8s&K~-k4_#b91X^j&~2XRh4geyER~faU+$*8e32` zUC8uB!^=Y=c)n}P!=bFL`kOSd8upGcRmB0v%pJA^NnHmCuq0vI8Oy?&#Ck%n4~6?| za2qyHRv5*d+)S?nnfL+41*mQ_t`J4Z+0+?4abepJ{dMgWim>U|G^1oU_Y#)ZLuVKF zq8l~X%IE{wWfFH6YltYd%oV`Zi32UiR;+pV)P-ro-G*z~yvGZx*b1xNnq;487kLIH zc2B|YyCG6s_rBvRa!DFl&|EsS?_R#Uz~bfIJmv{?@X>Vw+YdC9$YKcTc)>NCQ68RU zM}ZpkKW4;)DM}Qr;cC{sF$OF%<^4%XGHG?6iuHp{mYYwAtn(uba~!)3+&OO@B4i;xW&`6-X0E zC#nbXsd5GQFm0TCGr2Q;?1P)wGmYXLw=&bWkUDOH`t$d}S1>%FH2VWU(N~&YAKX*i zAj+RVdsDlTp;qzKFKKj^^KHTK=WmL|i?6{t@)LiwPy8#w9m~{8g4r9hSPv(7hJsXp z_UGcEP7$rv; zj@!RUbGbhLMvYC9NuAq?^Dsn0AD_)-H zm&D&{c*frIhKokDMp6iAIK#E>%Z3i65V$KtozW}m!p?Z|J9T+Uw-WEQGfooDg=K( zD7}Q2$1oPmF#dOSmh9z5JY~iE1EhNG<4c$7_VqkK`N^N43s=!^D!7T&>lRm0nBS+I z1W3>p+3!fkYoK}a zm(lmszYYY<$=5F%=|S>q#lL7C@PRUZ*xy6{`OU$~OZ)SGFY(ub`rl4mJ%j&;9jDT| zz59}Xiusp_8?)|+6p8$M&cEX&xfQMWih@cAJci=Q%cPZ4x_5uT&sMhpJIem06MoDk z6|lMwQ`75N6>NEgbz_UY+=BrF&ZB-2$3*spzKMehQVWGVXO_SFTv6t_O0-|ZJI zk3^R%`r{8F_6LR{`7HIHd!hm;E-{Zy%})9C;iFW*P*_hR|0BiBmr|USV?p=p!?}T> z{=dFP5=iQ0q~-PQ_js;Wp9J**ooRK`a-u0o^+^Ql)9Hn%0UftqeWTl%wsg@DXCkjL z&6JncS1(sX@#`VK|NVnm1sJjSeSybhhyGnOmlF4+ z2W`Bf?$~I+gV1E+p^1P3nOVI7m{no94v)HX9?QQL@^uBUQ;B)8soSGG?LoA0-g@X_ zyV=cR^rH_aRUwgAUmiF^v2*}gh`SB9K6g<+QI4gYEXTif&$Sy+10YnFfAHd2nog;a z{oyz76px1VK*FVUW+)xKX6e7x8&}?MH6IFKJ2;Arw3gD73svzAYsM+ltAn+Gtl@E@E9tN4o_EyN(Sc1tevl zC@oO*J$1NnE?38X=2r8nx{hcI3dvP#wSpFT-$2jhDI`RqK1qEcqYks-``K5$V4y>T z`^hUX@|Xajvx)xdejcrb^9{5HxdO;vD)q0TbvoS=g@_OND&wvn#ukZ3QZ*dLC{#|n zDNOV?d&o6+<|Y&e@(z=_md@{YeEC4zIqLds#cfw?V;^lP!l9Ra#(>ZbMBSI7Bz)^%n_IK_m@!;sQ)LyWYiwP683}L&6uS;tjfA zuXTu!M~2%P+olr@s1@~6QmwcYrv=(Zk z>MxXH$;a_nGLI(Q!6~ov-qa#V-(BnZYoEQfcwj8P*Z@@9OPVuk(G%9hlNAfJIJ%*} zdv04@Ft^O`pxYpEw;BkXKP`0#VqMyg;#-#=iiPgsB#ml~_19YsZ3V1$L=cE;jqO5j zsPG5--v9^R#v6SrNpkfNYVrVf5$J{OhpJxu(TM>pvO3BszRZariWl+F?={+E;I@dO zN}j^>5i@Sj@&V%H(n!4(wQ-TOZiB)4j6$#)^ES+WEmAQje#G zHj3R}8J}jHl1sMJec<*uFT}bh@Qr?wi+YZXdB4s}zDWSN%wjz5^+mD0M9Z2&*`Tgb z3?0M@iTM#n30{mpNa=3To4(EH`Bv)Xq^FEFRmx;edQI$keDB_=%Gz|<0N=vmb}c;T z^pW)IY0So}{64;&cs~kJ2XsEWbj0gb5jB&Pft=YIsFER9mEb;UlTKWMFdYj&x{_FH zOUCD^EweI2{31G$tiodmDe3@DjkhS8Rns{#R+${gWG>504o;k|5P4-5j>!{symj5p znBL=&Nx2DVv#!o5?UMvuS)#~n4h;pDsa@vErql1nw3~9t(q5i4MmBxqt2iz=d=mPO za3VqB)K5N<1@XwOk|znxLGCdJ9fPWQ_VAHoNX*D%$&^ah>B;^l;S0?&P3s%IRxN3@ zOOSSTXBWUu_O-lj+k$qfdYb(EOV&za9@(}E!OB?sETd12BnaXgfEFWyYsW)`oKsDu z;s&syPlrL?YplsGa}5GH^MfCeo|+Mg5@Y*ztG9exN4!kEeC>6#S0{R_AMXV_E;cnQ zNRm`Er?T zy`4T#>WVnnC&1!DTZVh;Bz_o?u?-7HVDgG9-94DWy-WDeYAQg6ZeT;}IjdbP z9D3Z>r%zWt<8jZr!Smy4Jrxd~wGD=7(U(r&MJ-^ahEeDVS&+{9*y}2Fy~V6cj@xnF z(z+`=qJI9Z&)XShTP`2J)N^RPPha2DkkPdA5pAuF;<4UR+>9DHsCFASO0E6boRtE) ztDCH}7p7y0zs>8Zp5E@YCNP_`JIPk+pr z>$2>Ge@|hG)1PDp#I_Rs%}3XI-y7^v2b*rgIxg~BkcE7+5CY)Xc*7-g`8ER5P{rh`Bm9sY1auQG%Ial@J!ppFIW-U z*e`9pbBD~3i_+M~6~CyJe9?fZG>M{JiNZLId6A~CFHJGerk|rdbFvRi2|VasGl%CY z@wQ+XI5}Kr?a!!+4^Q!9VK-=)W)b&e7|wt@1Z$xvqs=n_8P3JRCgGG zzltSHKL;=EKkUtOh!<9usmVWHA>)5P`;m1@or{=K^> z4#~of2Mwufqnjx&Fe&ck)=Eu@(=-^RyM)G&#WYUo^pgF`I5}}W#%7+R0Zv-v(#)D5 zjyra)J0I(C;rpOZ@|5w6e{1$f1fpnaipEC#a7wn3KTWVI+5*40{S-AhRvFbuI2NMC z^m9#zlca9t&b!fQU+E>VrBnnZ-KfR7|8&&|ktCP3PCJ!(>eC0_)sjs&>zDN4HA|YM z26}l)nCjg^8XD*SHs(MKt)u=`qbxlF+l9nEvu_04G7RR&jjAzN8#-`y>Yf(3xG_E~ ziOt;UpOZIV2=KC;nax8>o-kqEu18k0vfLIHu!IWL=2vv}3Stkr$nWjOhwX1Dt)o*C zYa=RCw0btEORymET3CFuaw+heBvy87c&BUU*De{8lGh)G{0Bvbs_b#qYsiRCm}n8sJJ@@8PAL(=Rs} z#j+_mMrsvqVdW1N7Kg*r1kS29Kn9Jh^>xeeOuiq(HpYP#;S(bjHFAB3jKj@>G{uIeWOQslI zs$4w*Tin4kCK7gW=y858S{>cM-ZwEWQ5)sJ)(9ak@SzSnk11rhRTlY0EFqZhuhvU{ z+_;4qz>Vwtea`u;@ML#cgF?xWVl!uZ0Bbj|h#VBr)HZGwO`oXz+0947f5!XnEd5j5 z)O$>Z4fg%1_Kj)7KhhFbZ`a_-JS`kQxi~@YOkj{IA*W_bKsCv(uvKF*PNI`Bk_{Fv z7kf5`5$J~^WO<;8aW=Tp6ZA@nGwX|+thb$fPP2ss`Gmrav<)tN(b#HC`3rt<2*WK| z{HNSkHCbUGFwybzAS_-biI`KBgSnM6zV3 zq`(e~&@eL?YR_X{XEAvhi@g^^|4eAw?+7;x&KMRc*xhMW)Xh%4y< zuit)vuny*hbB0=;EJSAq!}z)ErC)+kpB}n?m0@}7K`D?w`RUuEd*GgxPz!lB5?FYz zoMt@Ny7Y~v{*0<-l;GQw!^{ewQ`Z2HPDnXaOzPjNtniW(SFLqVq<$(k*nN5ynsrxs z%fn*&Ip&+k1v9wSu-(e7M8me;ID&Bf;nr)2ySYL!5Yf{Ll?PcI?btTXsogD8WP|2{ zUn{!W*Ea3ogk0fNP9X8B`+jB>$YPHq9oA!QUY8)$J&M%PK+X(CBGw;zkNAZP3wTsW zcqfWVCrc_Z@7-hCFB^l)@M-hi;I^CP&3S^YrZx5Wr{j7-K%!F${iZ?1qh-Z>HVLgf z^5lObo=_P>l};;Aj62J5s)&zp(#DSn>Z+%7@@1m@dEbj_7hD~T?hEdop6wo6@vL`@ zTMZsUJ#OrLZ;Z4Uf%Z|jHx*?U(SA|l(thG4kRH!oM!~c?1BC+tg(US|7v-I$#^GRh z4?)_2BK@et;p=3i(b1OF?^>}Q{Dr$)eTFH^UpfcAV+222t`+1>9=UV(pzViP)EC>8 z+Miqt*Juue6s&AF9YGiO^ZFX|ty7DHIfK4>)LWId-5_a%cl_I7 zZr*(cSVuqS82;W_?JwZ^cXa?1^b%i1XMcwRd>esX6~q+y&oDqi@4&y5;P0An2|#t0 z7$&YH$Nc$->zJNc|57@aqf-I*DV1W|y{q#2`!M(Ee{%j~i~jYSJK!$4W4rukn0KPr z(yrnbfBeG_0Q3K$Qu=R0@pAN}$A7-1Zzs{^@{_bgj^6+C`uP)IsZBhO-10V>v@Wkzb+M5Jg|gV>-Y12ol2_*fH-R^ zdiDI#!}Ooc03HH>W14~gtzd?#0QbJf+TZ1qzpvKikGnv}yf1D1@7MnR%b(LIO}#Ya zRnp4;h5G}qYyJ$F?_KC))n8A7?>^88y)^Z|WzwSlK=q_~>AiIRUth5>=kk&r&9S=b z-d?UU2|(}t!r%GU*smwTPzX3Fg*n0|zk=$6hQNGD3SZ{_=Txi%)!T+b`wai))d3_1 z3m>5F``?!QB_@At&i}UL|0gN&?F&^-Lm>uuWYlv1!x|~i)cW!NCDhZJ9Wp6{>v-co zH&db#0D|^StXC5M`VkQzk*v?i{&O7=Ut;A(B_pQ4ikI#sZ$YcwznZH7_mZzEAi;wn zO$tfB3ccL}pl#mu_BX!{1k6eF1?K_3^{>xv6$c2Caqa~EI*_>pFxUUR#NYbze>-vY zF#qp3{o6YDpJ4xE-27j2J55Z7gz6VPr?a6^XDSHr1kg5=d&Oz@E3wrEoWLgGG(n~f z21&h|qe@N48nmUqjz;9;>e_xmkbXGBuD9H3$F9)S833otwsrB3)p63##qw)dVGzVM zr@ZF4Sv{K;C?Gu&sNuYS!R2*qBex?EOgOcm^fO%nlj5%BVgHP&&wPVYD33*RTwS(1 z#I*}_vH28VW}0E?=ZtByPC(7ZRp{c~gNbN%QoP>#Qj%3ASt=vFwWIryVMAJWm`R3j5|t z=kg{E7QWP6^+H_v0VYlkYP{@iAd;|ko1#}~1t!K}kO);(ffrBr@ z8dlA)SvO6eJiQYc!Ao&kQ*FH%N?R+C6G0s~dLh{Ed(~Og~ zuu)y;ZGs}}lNf3^$#|}pjpJGj1lJk(<2;=SJRRLP7d^Kw8cuNs@GO}eR)QSTk=f)R{r&{(SO^cP#VGm!$UOO0?$`Exh>) zVYJlI43;~uZG!y3K@tK{&@mjN;~}aUfz#1(bG1z2e=KcMpjmF4L&G5c;1V67%|>5n z{}|^fIZw4&Nk`u^b6anu@9 zg2H(PY;m{omXzJ6Mp2ScLCLs?Fyjjaa=x7S-cn~tvDw1r)|A|DbB~fX-=HgIvJ497&x)V-W+85v087PH~Ir{;yv%bRdPVJu9pOqxENZ~F9arG4LA z_|l3QMnLZ>ZC1_0lGQg@PJjGnu^sSQK7-9KFpzutjji1)dnjY6|ERUdiJ8B6u+P1f zcAitqMy9;lEkWtIYl1b#ZO!l-A&@?X z2r0%Gg*+440#Dy}{FHedAuvHd)|%gvyB7QUuhsAfq{y)fEB8~E)I9sbcl<*20qRG6 z-4v87_@PRw`+Fmn>%uTk10w6H=d%Ug^ZoTAtD-_ zp=Hz^rq^%gPd&>w!Zc=Ra|bVUSqJZ{F-NG!l?+NSX~B+`h`ws~fR8iKXA_>xUa`yJRWSyl z08i$t`y{zX|Lmd6OK_D-@@6kNGnFuQlh=}k4YS`B+S28DEBIW~=rff@q{jS62ES=G z`BHUWny%VODRJm$f!D|qB&VtH`>=ufsjTi-a_s8@hF)0H!VRoMCD235$CR8T3@OoG zyRQyvSCjVMUZ|eW)~ZIf|05K)2yisRC5?4ReSuJ8k)$Hr0L~s*MYy+W)p;j=z<|e_ zGe)|D)#Mv_fYE`c<7vBXf9$};2rl_?Lf1UsNR}z5>FdL{?lTFKikwVL1F5G#h;Y7r z=D2!k&GLd&*o!9Wge#S}XZ!^*N>f0GH4k#+tBZbk9@b@*Q?QY3qhKlqewna6Z%6B7 zNQIxkR^RFtXk`-UEtr(x<2r1*z$~C~IQVHtZd$+Zs}<7LY)&wVorzl2?w08XAbx2% znI#-%{NdgWrllw*>UjGLL0%DqbQEhEX~DG}CKEC&4to@_R?owW$9Q4HNnxgp#kMpW&Zn*0kt6P!ZzFH}y`-i|8gSdU#%Fdij%_P}&0ug&{l z+dJgGpPC^t#E3q1)-4C0-q;%YSdW?m&&qLk)OuqZr>|eTICAq*55&8Cqu5@5#oR}U zuR5vJ0U0NjP|)IFitywy&_0xLr=S=h=wf#`?lTZsuf5G`Kxu|P%@&5}=^yEg>W_=I z^~q+ng*Nq*qQtUe4vWcL54N_sYt+^I>3pE|d~A;X`Yf-1o+*6bs9^Q=`w@N`Yd914 zDf*O|KUrhDiSguIea#hdNL$iz6)}*-GYq|s@|g*3mQNv88GJqZUsH7ZD@9M-#%GdEG8!l#l2es}5}L#U=cSD>uJ zh*WON9_n?Z?5gh{0e3~5rgFFQ?OOMzZ{|2C*b-FtticM8ofC3=3e79BEi_BGCkngl zT!b~wjyi4jQ^=r`Bk*nCYWb-XK|VA1{K%aQ0AO25Ix zW0P(@UN>2NWFy|(up1vj0;B#<)(ty>$ z_^3&onK!Q!xUfG`j0bty$eO~*l&vOg(<(?BGUt za`OX0n-7g~r-TgqGrL*9pS*39$e43B4f~5-&Few#d z4>|^9Bv&;@@HR4>3I_~bfmWPP5QJVO4%GDU5`GEy_YNlTezu|Dr7IUnG``_0-{Y3U z(9(c@Nv`9W;$cLy?On^GMQKU=Lh*6+`l8InJur~R(yotDQIFn#j2Zm!e&xd`9160? z+qo0?4IAJwS8H{Q>IlNH_i;H+YaK6PH3cf?K`L53k z<2QRowJgCL%#NH$2qMP2@2Pd*X1@im@r4?H;SaiuHIG_gC4i&>8S#{3ay5iJ zs5Od{?Po@{_Vfgw8&4>0npf_w9r&6Ba_vpWW07mbxG&x|2Vz58I*TM{osT(JT81Bv z{gCZ~fF8@QyidsA`RcAMw(8|EDc8w%PnGQLmV2gT#5nEPv1jo^rIb?(IlTeaX;oU* zG)|0RoTz34JM*5k$v7=sIMa)Kj6xrwlA8_0wD*Ou z1qq?Xv>C_YX3i#-x)>&KI1!K2TFgsJ+nG#9Ta8rd)Fzv)+Q;SYi8trg+lcNzkP!$Kb6-eh;Cn; z#AqMOEms5~(}_M`#RB;i)E>lGx=D@gP^7cLO zRMF4X;-D69#M*fENIe5-Z&T4~iK~vN9&|l{;x3xL$oQ>7nWn17T$uS;%maj&XD}bd z`fkDgOtc4uJ+8i!$OuEt+0unf4o_9s_lTcirf`I{uI&#Xie^a?FU z!ZvC8RDCnmSv)u}_a<@YW)Lh{j?tT`_()f-?C=Q*IM1^|PXhID5o!`^l*J zSJEm->@Tl2L^LC0#VQ_%Ltwl5R^PO&w`MUe{gyt%#5myjb)zQEx*4{%$<7nS1S=%9 zz~`DUX-ZvFn(J+sY4nkgDxnxF!#PNDaWuME`B=|kYUwNM+d!%P){r)CVA+CGQmD`{ zAv;9ShaTWqYBAZBo(-~u?}ijNb7w>Z_qU26iN|Ai|ICW$8O^9Bd#ExK14k0+CaVpT zp;!**gk2+LrnT;TwL0jjan2&tE!4GtZgx_&q+f9VhStzw&t{kK)vaU(40moU{m>1S zf{1RsT}>r-%8uj~g(+`>65W7>1}+^-M-_(CUYGpg;;nf-e#?ix$tmTy_iBnCjY3X0 z2|=jwhts7Fi8bN0yn`$#jLJNaZpFc(`Zp6Rl`^+^M$Rmwf2UpuV8<0%*~%g3Tq$J? z9A_z7>dC?hlA%`R@B&#pg%-nXjw3V+~Js^Qq5@>8_$_(jWB zf8A26yTkX7>+!CY9Soylxecg#+d93UKmu|5z; z%g3U}W|1eYoGtRgwg`%FfB&7c2 zF5rc%4x$ZQv8<+px+!@SP2wrlw)>->Th|nw`Iv@FG;@~-k7J(f601(IGwq8^vLrkp z!qHL1w@nD3#Elh}{~|^koHJ~iA0VVA9duX#~+XCn7-*~_stJ)mz_>7qKayGQynSC0MOmF z1;)9&gyT-wUe7AnN-|haW2B`2IOBk;&C6twDq%O{Vq8*Z!J<(_u7@o$Wh7f$Ig{y5 z;_FEM-X>JCYji}Z`J4kp#B8ztXmDd7kf8KKA6T9WUiBGiaZmZ8*xR|p4qHs8%O=X5 z^|hgT#!3RT^frN8oT^e3ue%z8b&8ea*i_Pf;vNfloTMspj-T+vB^>C;$iepQADd1T zb?e#w7x$BTVV3<${xp;g1&XMk-qcSk?;@OB_8Z^Y8v8(4jcvs8od<07^Eg(HaEk$- zlVb~-jhoX4_!`a|5_M4&m}%IA3cAUvmHEEX-j^vPNZ*8-zTUGGokm)3l;vZ#3LcUa zCtN&D29Y3E3$7O{0kZ*AZEqRcwo*q17tX&?g0RKrY3Ju@s& z$ke*D)oB_%Bhd9IZHq9Pm)99Q=laCn7cWT;E${GFTB%rJl=sig(jC4Mpet3sjLpeZ zTL8p{KsdlObuOEGFG}-VuP$W|tg=>hA)^~@KL6=ffIqcRQ=-jI1{ zn!LF?2C6O6jRz-nVp$OVqo12+KW_UBdIY_+Ng5s`jk#MG-JOODI^;PpSB!H{Xc;kG zdSBH+bYVId|B1YTNwBO<2EU>DyECQ?7S+)x5vc(^>)`e41Wol-tEM&W`^GMb(C+ag>Hm=D?A0 z(RTKnX;D$F^2_3s%N+{v9^0|**&$oGi%RwD|6pmI-2O;-!=~J{+skdMqj8s=G{;Lf zK?(uo=NoSM++MZ7dMTQS#Sh?~02#hDRadax2wu;4IzalFPhjJWfAJi3;9L7^DBA;u zxHf9`ChHxov(3&7pFPt{nzrA{G$qF0I0bWExTmExKTm*PwS1r8IeY%S5%*2pN)%3Q zRxlsSs2YFT_hGqH@u45$;Ux3Z0QJWv;MnAWSDv23P7L-H52^xs>=m1}#aZJ01LUB0 zKV--MurTW)D#}Ty(Aix`!Vn+tx$N~*61Rw)c-s#Ib$+~r_tTxi5T!RIvy%`<{koq* z(abU$=%?H~mT~`#m@rI%Ps*KJcy@T3qfVBPmJTiaR*Ag#qhgj4Ktm6raP&%s2tah8 z^zMWps1u|}#z;AqwZkcL9E@W=MdH}cEhIZ2cKy?bPXtw=*m0g4z9d1lC6R6$)Sd#$!7+zI;Ac(ju2mUvpPusfjgrhGp_ zuxfm?a*8!CTO|uO9x!2<)C;bU)tjbWEItR{J6TVr(EpVK&{h^@<|8q0F0VHjB3Eqk ztQ;F3@a-lVeE3xp^mT7ZVr+`~k{11C4XtSJKmE7d zZEslP8?q1AH9L#5sh9uVKsJmaz&1ipuOC_F?-m+OI)6o4!*))3mHSPC!>d16mt?QY z5bWSEQFtj-QtOj_5@6eQf-RJK%6TZ+Bppl+6mr%&>0x$*tWBKci5y3{gHxJMQ+-bZ zY_of($~zuYa%k{FEy?bRS!df+InJJr=P*TJG3f?_^xSsF3l-NuC1sLT(nZwj+!y_B zA?JsI%n=S~={ndwSwSGLP<6x(&>Ces6dU{9o3okbPxMc3%#*pf!VVAVOs`5u+@QT) z3BR+#Ba1mUtvBTHU6Un_t$2yzRdCMOHDUcg%cCGeDuLdNf zrN%%hLn#Q)2jmxa@tb^QhAp61MQ;=gAAx4QaiVdj5h)UzHCe^6F#AX=<$dHKK)K~5 z=-@QtPLw|HKf#ezB$zsv{D_{jUeB{dMx&No?rG{_m92O9qJ@tdz{P;%@7k*k;_Q6- ztpj3fFa3edR%hPNhl;(f;0a#u7wdMC&pUN%L)$mmg1V1p)(|t#CIillpnFE8>Pm*1r_ppbxIuhJx5^BNqM=w z1FetPwS>b&ZxKk0yQ&3APK29YFAQS&=l|9MC}(E|{y0!X{Rub97?Dj0m^wNBzjvtdU8b8E&aC`nD;F&&?-udZkRL zU(f+}n7Q~`WhdD_SnCygg`QWIAWG5lco8g%PtDb$t0i6UrFG5NrJg)~{YCr4d|}Ss z#xLe{W3=d~Nrb0dWn`ckkk`rFL&_tRoQFV`(!O|^`Z-J7#=kmis^I8urBE&JV)!iz z>U%^CsVn;&E?KkP?9-O~z`GC$HrcimBMY653Pxs9{-XoQ3<^$f=TCeF8)sFOa0Tmy z99`~??WrcsOEK5Xrylp6`psf(@HDj8VV5bocRP-k6ZI~u8S)RZ2iQ!TJ?+y(<0nC+VErPa@a`rdOtz zi~rAlf(l0!t0`nD808y);aS@`Nk>zcSXL*1X|XKOuI_$VM^kAY4%yz>txigu9j51c z1{bgLc7f;hm7=ygUbiMk*8%qK>C%01IkEuuiJG4eR9Qs{chb- zz^mc$iY#1-B`Zb9mNZ|{kQRI~y8_t7*A=l|i%Y+N_g*LM@VFiKS#IefEx7D3OrYuM=r4b<1Ei zW2yeiObXfaN^99c3o|xbnthhGGa=5;{~Z&*=EKD>`m6i)tOuqU>%1oJjbh57^_6Mq zY%z_EC&kE3F0TsZG%qhm${(0143+3cKU(i!bK^;}8f)Krkm@-yNVhhiG|!!He-_B39c!y8U~Yxk!c7LlwdaV;*fs^PWcOXAt1aNtNs%lsjfxy>WT z>OYxq!=JFqRfj)i){K;`%xgV`IDiWR*8LUdWDVX z8SfvROyl==vI8f`_uW#3(W7X*#`2;Gs^c;bhiNhFkIA#N$MPOaO&9Sll&t=~xn5+~ zBR#g+pltTQ{~+gJP%32%7$A=ub#K>mW37uDReei`bGPl9ou8{bsPtr{g}BZBtf~}o z1D4aDn(+T#f{xEE-MhufC8=trC~u5)pw*gob4oSpS#d6%k*??Xf_J&1vDQ>}z2=CR z{3rbXSh_qgS7(6d?!sWllHCJ z1xmooIlanLDArutQ4Ze!VtL;#U)V;!*6a@Qz~c@Qyuyxjy@U8H@<#p9zi*mbPE`|z znoQXeR{WpSF);>k!@x6C{+U1iW#gQYTcC$Gp{nFRt$y3C*kZxJyP~H_{&U<7M)@c2 zb|&gE?RWowl(PPeFvo8Z9W>Rfxc^}X3^qgxgZ~@e5PyIDkB$AaBT{?|>HR-s?EmwH zQJ9(FIU_z_F877xII z5?)%l3&%U33USxH0L|u|4JAHygQ$>vbObC7W5Ajf;j} z=4|VaeHhA5)(gpqu}Nh=kmy_IFW4)z5Z1A0BW<62Xr(IGj}^&wJ3+C5p@YDjSO4K1 zbK)?k0^8=ex4nye1uJ_IOzqs&G!qEcECMP9Q310OrD*Lm^(zddjX;V}?XuF9e}E(~ zK9@uKmO-rwD6_RMoMc7Ho;7e)==c%a|R@ z$KS+e8VyULX@an+4)4A#_*bN@b4w3k44R0W!vuY`Ggox8p=oj|@_jOY{=Q)=tVtOx zcA3ZLwwryY+yNwSoS@~#!KkJo1+}_E$nP^tqiZY%yztz=R8iW+Suj#7r^ZF2FK(?H zxb~!~kV=OEr`781jqQO?TVhdSy=JH;8P#70^4ukc4R5s~(HgIDxce4c98j)`i+8yR za|xHqOS`l(oGiW1nMHOE!5(kLAaRJKcwP{@FcBW5$y=e7*wSNqkntY!WmlrJB-4;c zOMx_z9(W9kyUTNBby4t{FYbL2Qco+2b4?`OQA6jn4^Nkg%Z#8-F932u>RG4W5#~El z>7Jzw@FLxU*A#p(%y#nRFUGV=sDB_izItFR+g^&JV@sqnhOb5W;+L6R@E_@doGUih zV{AXzko$w0Wg--R9c8bBZ^cW7qpQhYrJQM%d2@4X?AvkVwf?w%XcKp(qRxNRJh zMg@S%mh>KcHBz$LcLa6YH(1m>f@HSbdKxem88YT&NEbr;0)#^cZD~%_R%qnf^51^Ws(CVN-Q&T}Hx~H{HD6`?%Lx z-SmD$(%jw%!!NNWF*YV*sS3I?Xc1@A-olMR z_JTK-Z6w>d^ZMTz_)u$O6CRhGp58soH>LD(dLIo~#Jd#0;C~jSGe~98Chs$clF>_a zA`k+s9ca@2&Is z*}cq(mD)Q!2WjxRuUjg%Md1OLdlF(fmD1O8L#dyBQ&>{X~_ByfNIL^Sa@HGhIT2V_y zTx8o$^{Z33kZq)0l5EV+0VZ_!6ZZeY zmF9WFCtxxwEU*MEMAr`_5UL~4-~R~5%;ddw=~N2sm|^AV0;|TCQxao04amN8GX1P; zAD4`(*R-Gi8WESK(0;D|CSJh5B25$+dQXT~51kvHbSTXT&1g zTS>WeDC@_itYyZMy*}TG08X^g$bRh!)kS9)JeoEtn~;NMoz{juZkL?w$5flL0N?JoVKL@qgqmO_kYy9gMTAmJ4Op(nR56g9!yAds0 zkBB%5PweoE9lQ-KPsz9}ZWuDBP`d!jf~N;73k;q zbqtF@*=A!??#ErREiVCjAN)LvgZ7jbwL!Lo=5&9zwjCW6Z48(6NB$#P+DS+0#kdk} z%LIMjbWb1s6Pza<@k}x*{F-@=1>p6G5jrE)VXtq0dbLoJDrMob;4lg8sQ|5q588as zA!|1uU3%++@n=-n{vNN^cdPKk0TF0m$tum*gsZv%%QAj03yje?1KgWl??#;?=L_UZ z64ut&YeB6&`tJysOn8cV@rvxowGrYzKWVWXW!t*S4ID@P%ft)IG|A=qR})o^cjj8p zZ6`H1W^H_o+^5R+Hv>CUse1U2Iyzxxl5P^5xi<@yZ$;``Dh$@FpV%`C-%2&vaon-} z-4U?DlZS(jNb>CpAi5@OI=u0(OiCgH!kdL}eg^wu{Y^j0VZEo5XUy4j-k!g9Q&)EJ z_>Rv^x;Sar=>re2rkKMJTfNblpVh&a9tMz?FvL}_7v?m;cq`kXRE->CjJP8*n(RkB zx*Oisjp@~1N9r;!7Qn9pj}2^P-l%3CS^`Bky*}7a!?S0KTmow~BgMmw-0zF6Df(1! zW>V>W^ApN3Ahhr(Mdu+GzPWy^vJoM=-F_tNH$Xsp1;NY_1@Vh%u|9*}+A99@TIgjC%Ke=l(bJeJp4OEjd`V~zuUDvyv{^6121S zGE8!ePE7x);>)W^;Jgw71o9hr_btb%DL(CAw{;a4mH?c#LVjM*K36`)!^nj}n_&p1 ziZ3xyqJCnu)~A&N>+j0u5<}(KQNlWC{7=EecD*&wP0xeaSvVq#-7oSZP+LT8z~3&E zNGxG=`vYt-!es_UW%JdoTuNwK&Vn5Cgy|69VVBv@MD%U62ked*p-~1c$CE`Dgl&!7 zR2)@U*Z{$R(&d}PR6|EZXFNVS=G4C;K;SafA6f6uF1ng?R{h0RP4@3OU{EI@w&He&{=q58u|lymKT(&hbj+vMyRL z2uENl>^4fnG(U9$gKpqrV#1zy&$iaGp@Cmm>?)3D2bXmN(0%Tm zfSX=}>xJK-S|pK9c~;UilorDl}fU&T@5yAQ`5ZR_voy&)~b)xZ4cfMya+Z!mow z+ZT*`@f&ebnCyJlzMJ+%MfR+1icPG7h%|}oUb!F3O>;#eQ2DfY-FRnemP-IyShL1T ze7>_3xwd=4qVl8uxs!`v0L3k*@O2(8X0=l{OVORs@{Qtg@UlEE0m*BtOb5xiUdxL}a7ll6c>J?O(@wUya#w%^)I zO~uG`-)a^KcyX$#U;N5W?|QTYz!zGdSy?-Xxx_fs4DY=C;vbzOygryV1`m>_zZux_ zUGL#1&v8f}Iw6#2VD6jmY|3YGBjt@Qi1KhK3r~yx62C*<65Tm3 zawdHcU>2xd*4jwKNx_}|G^}1+b-eE&LbCbC^=V$$=6qb#%}xp}k}0gs+%xhv<(Boj z^wm|^%3)>qIB=~iS{6DadII0Y(5ly|xh|bVUKmvyIOhl%WnqZwlvSCdU4|&bs+gv# zZ2n7&s4$FZLIlAf8Rj{(61#)!y+3L4nUje$g3)sztHQaKEg;&7shAhX&&C3r0n>O?!HZ=!LB4+I_+yk4Sp>y{Qke{XzVU*TuG z>a#0Tbe|grBCt7wLAM{2?m6s?CK8WkT@Bo%h+vRR*%VqEn9y)VV!&f8{MuLU+Mwl} zOedAFZMY(+Qn?4dJyzmCCZ(j1DzYmdiQJ|O9fyFw@j98xNe5qQua@9VP|4!nM$)TT zlTkO+}5yv*^Y`q8{Pm`gf4z-wyk33jkiGXS{k z+1$WTqvaQd*4nv@79y{wI$wnthv5L{97A6n3e#n4AeP}*0Nb9^<8MqcF;;CAphBaq zi76vq=2|Y=WnRsPf+<(#hnBZlC#CGOWi<-qCibNIqt?Sj5KCG^9(fU3>gGt&@AVCO z%0u96tZj^ZS4jE8%k^ZU7mn z!(LCkhmoj2*E-E;-Fw+v(cUq)Wb)~}>_~KRIrqxnojKj%{8>l)czI}rG!>WS(LMgF z-ty4$^po!cx3MDM&yNJuv{P4`-!IJ7y-B>?;P>##M~FYbOs;9X<{#Q@)VW-|LunF) zAFkdilvVx4GP;aAZtSCJCgrG_q^kzmVsuMcdFhNz7>7pd~?Jvn)Q;Sy47BD7T*mUwc>t#fVP2{!452^$vezy}4 z8MHZ@kR53Ak-hss4pd!P3)x+^B;|>)!523Lt#>v$-#j`ChgGH6$iKcjl0fee&8ER* z{B6kAA)5)*lPHYH>*@(vS0;6DX3}{)5;oP18IS(0CZ+0f|68R$^+Z2m^O~T4?Oa*OnT$B1%7aaKSs_@UaLX|9&Wu0IiH`)xAuAY3Wot=U03h8LUV!K> z+DmCxm?uBfE58&}KP|8XH+MUd-fqkLK)fl*sTeeU9yfx!kyG00x(IzVBstXT96`h7 z_PYZSz~;ApD!93?$RXfTWt716VqY<1w%rRl3|%D-QjI1y%cBra$fOb)ySL#Q_qN4L+q^v zVQV?Ir&$=cBsJ-_F&vX~yd!~ASVzeCz@vcs$1UJ8& zC$=5cGa|KbpxN44;VSGQ0u$}O`+kr8hW%GgEk!bS>34Ng?;+W)sd?IY8ld{{>t{jL z&-o#S!CLsH6j)%~qpdt+q@!m!E_qh$oHsDowS1vDEkOczb;o$P4F4=T%I$rzA?#=4 z*$XwlhoFl0-0nmzHl1ZkCKZgWA%btJWw90R9XGdSu4L4nNcdz22n*ZA?WN*u*ABsL zE3S3dwWj=?ZpC+ue-CKc zDj)cl;QS7}?L%Ph(Z63l5n?jfvm7E8tbf1t*B||FsjtatIn;lD^zVNv=?GuQv_uD>6hf884Y|9wuLt|ten5d7t09mzef`v2xuv@mYPp)54$zuS=CZgosjg_x!PTGyZc|MtZfBQ)J!ulcUy zUq`~f-+%n;R)nQLJ)YseeOfCf#aw`u<{JO^#mz8e!8dCIy-)r;)Bf>-z!Z@8ffFh( z|NG*+w^}SmYb*bt2>rRspB%8e&mm@c1;)}o1<-oQ8i8f!{Hm9dhiDQ-H@fZUl?-hb zR`Qa1KvRrV+;3Knge$XFP3DOr*#1cVp+HoI+2|LuJy;2R*M3v7q>CyV>`)(#G07)7 z>?Q;-eoZ^A0Gy{d3*W&d=V1oP$Z=&dAAwT1k1UgA{FTlaroQf@`%q)!7Hi65*H^=( zE#6|dbl7oo(kC7sGA{Dzbf1^YpGH`cCdV2y!52N!agfqdi_gn}2w|!aw zs%9%XVj0Dj(W!B6mR&NhCRauXO8PTd)2aJ3gxq?Y%J67hlyB-Ajp*h=Kk8bYma%3{Eg?!lbp1>-}SFHX6buP$>QXggC+ErA~Eeg_%_m$!N4l05|e z`xN-%*xq`)Z!vM->r?EvmaEvku<9>a#%BAzdG(5u$!oteNE3++_#kRC@H%lrR+n&R z^XoAh$hoRR_v)-g*9{y-rhGN_T?# zCFRsYzlddt}_){P~@hIG^1@KIC z5F2D`!edDwI1ttN1sT?&RxhSa=HQ4E+)wbU>49xNq|$H;X;WZf8e-MgSUh#2IZLyc z)h$CFQp`9iU|QSXy!2$q)Gz+N=vui>wy_0J&D}asjEGt1app8rNkGqPr-b*L%Z&I; zHJ`AEYQK`PWdpW#sxW|=bqDoK9k(~Je6pqtYErMnp*V52LZD`FxxUW2OF@@{8}kjm zv+I!?UK_mxUS<`rQ?pwBX5P+q!QSyQ|7;-xy%**&%uf$z>Sfn5pgL)B_+%TWYbSdm zLv~|^1uwq5w!l_$>%(i~uaIebr(ES-+}QXTEtCeDaQ_LEPeId%sELixj*tCxtgR0Z z9Z%N-OKQ?8Nw+n203CW}Dj6y|oEaQ!GXqhEdpL=^$2T_&d7G*Cf+m!K5q3x0;l`+W zd3uWo2=?-qOf>E7ef|jW%%WBusAaHNV}x&&9CQ*RcJh+hJ4lNhyWV1Af;0O1Ahy*w zdn%g=F`+>-Q)DfSMJV*(Qt79T^cZf-1+@WTk{yuHZ{@6w`|12=y%@TP(x3sF=tD|d zcWd$x=VVjIg$@f-*30~(hQc@7##KW=AMYS>I@CQV!8Rd8aN<6@{$YtHR};Iz)LyBb z;UrJh@nD+q5zL^27QDGRy895{-mUh+qN}&z8(*|3+0F?T{ z%-^|25Z%DTgd{`0#)=c}SXbZdzC*+Y-Xu>j`P%c1qMFusHxQwk**g!sUE2!V5Ydyy zJ5tNd9Ch4^OIPLVI|h)WtvkUVzEZtVYvhT+NY%IV7A1Z%s*G9HC_BfdpC=d$e%Gj1ulgt;pO?(&cb)Zg+NsYV7dBKmo-)sq61j^Uo7;Q^~kYZZi*tktu0CKkj zO3#-g67Aw0v!Z!De-vB0v>nQCHCVu24D<+d#U2H1{zS9v9TtgQxYB*4?Xm1tw+|#) z4}qNfJ$#{^+$3&~C>s8d19<$*4fHsx_R9JpNxo<6B4h_f)DoNfCbYEJSXFa)Cpl%~ zRN_U#@0&rfQ6Ji^;@S_$W2P^{7Mj+MF|bgmos1eH+YCA3zHG7Yv8b6X4ubVWRka?e zzELl`@)Peki9X38u%npMtRL_xC&B0)fd|UpV_!M@DNNm+CyxACc3xt`FyqYHw&Tuf zWYOPr^Tb*{_d`x>=RQ+K^}V+NKjc}f!C>9;iG(3|dWFW8=!IDqW1gMawDp}4pI6^i zZA$!9_7vZ@VAbq2ijPi=F?V#ksby?55U6gxynE+fcXRtCe$Cl)XlK)U+(vhz5!-~c zUKgAq_swrQ#j4aw3-P5eUZ9BnwZY{V!2*xHSOZBzV}#?7$9av3eEf!i2h0|AYAX)C zKTW1^7PWR{T-(z3V?-id`BdKR#NMN?F8$|eok19k9rV7m>Ez3~^^XDkC5gDt0IbPo zsS-cduL5&b%gtN; zKB4dHx$^^RCkiiMj6#X>U4*~s`Ra<$3`0E>MIAaKxxFM?;G{(Bx7Mt%ztOdo!?2pSq+0Dek?DOb2@DGGB@yX3Nc7ibRD3y9 zTjndlvsX7-G|Q4#Hs59u%#Qn$()GtDCj{3N52*a+6nm%?NB3Pb2~rviZnpAw&zUwo zB|H2-Hu{96YsS?n3AE0+<#wABLNk7Bv+iSYuv1(A)^zM$@X*mJyk^duk z?sot$efU$UB+VL7XN0_YR}>d>O+=E+j2j+NK%`m?MXea-%%un{G}4@@*W}JAt7NYm zia6y0Y1qIZGf6f8fSXP5jFk0vu1fPvetXxMdP?Mb<*g4_>d~KmwN8|v7Gspec$v8o zf;v^(_OV>1#`RgdgTHD-G;0NoqfJaN?G_Xlu}WHDk4QH{)-OjQQeBR52-UzGHG^x? z9y39tYc+$LyND^NZmn5uw$=KksN)6wKIy$Mr`C~U_M`hTGMnAvy)o$tlFFqtU0m;)yz_rNc@SlmM*t4}!x3jvfCW6fZZDoA%a1>%lqCv?&Rgs-D|uSU)8t(O?c}9}DznYoiUXqGHyE zYX2V1rV7lz7yg4DlZU)cc-=<8WO2U$1wX13jcfTts~}+Mo;uFO>tglo;(gG}8XE)e zJhx&D?7=nQ6gr`nA}3#-p;j_$;~-jns6D`-w&nOef^1qZN|$qh9>iF)5O?NLw$9xq zUK6eaZryP|Akxj}Y|}}aBNI8<@D*R-a>kl`Pp?7&TW6Tf7D|rW<$$|0McdL8f>RwcxUygS0 zpLU7%MahYKOZ`Tb1{bEyaO29z8oC}13S+NDdO*Ji*$JPAh&w2$jjeG}wteO>Iokz+zaKbbEmR5t!c$C79y z@zbeQH>jH#EU`_HyVJ!CUNL)j$`cqcc{O*|p0XWK)H^9w*Idc5Nj%mKj%60r;OGAh zsSsH@QyH7;2D_LYm90JL|CMoDTYGjV5Ph1y^JdySv3Cam^jeWw=sB6hiQ?RWFe>#@ z;fIb>DP~l>c9|iSg`~X1HFRFyffQaHs>sJFo=5$hW0Ksc@~DQsLRj$(bI00XuDs z_;DO58A}ia0KFd_N=7*by?Nu;#?PIluE19^G3rNaGt_*O=?%-PV7CWQqob4IR`-fs z!4rV=ZFc5M`xF%08Zp4aN6ej1E446nec>IR(pVBPpww($c}f^vn%_Ut!m2gui{Y+d zxLD8T!TAqn6T1Ti_xIIc*lSm$Cxt-GA#eSDW{paHs@-AHy*Br+ zX2{H^$p%Jmg_)YafnB)uo?3Ulsxk?wJF$x&H6v)9HF7S91};2$a<7g`8udel)ccx{<}eWvOL$gtRUYChz~pFT+ho)(?cizuP(=}wU$^%Ruc z^E#}IKW5yNvKZ=NdP?K+KFxQ703CB{)+(lBH3bl5$h;jqaWFQ+_sCS7h%uI%1xC5Pi{5u{4_n78)}=R1~*QCD(%}_#QLiuT!bE6{Poj z%liXdnAYX}TQPeh{B_*vP}dX0)486js9YgT}4hZ>@! zV%_Ox3QXVbc-tp$kGTBs1fe}(c7d&o$w{AspB+pNv|Di=M6?q<%-6+KD$?G-vIGh1 zzLTdEK&TH2+Qf)p5-QM(Sgl~0#{Gpm@#EA8RZlHm23y)R%n z?VA$KU7K1&EC-juM@u`{XW!I-Jg;V}_`x65LN%uhK!3X^QrGEK<#i8a*N4mr0WOci zas+vA|JJgh1k8|`Q9H%*5AQ4Gg|oQ>IlmXGwrt!}X!yBOx;6m79}qHQ{w6)JM{L(k zuHyd44-nL0sya~(di-^B)n=MeJa^fx;g196QIFOU3`sD(tw4?Sy6L{G(%96OtgsWv z`}@#3-{Y&|@yQHHBP`p2J0pfR;(f&%+86hzvg~Pr)x`XWjXaL2#=b=Dj}dtiqEskfYNZ&jf3Q} zLg2gGgkr&ns!a=0r4_7ve4qf)UR^$cDnSUxt_oYsq2-Y_vM*C)S7)V{qI-?m2jBEq z!9_$|hX};IoOY2tt9?OqQ}Rfy%Z`$*nO_~&=z&B?epxnZH+i-V)JvvXX_$DC8Iobm zsAebnWh*laPcDC$XGrVSpXjfz52p!ea|2iVCvp%( zRhadoU}hpiLff#yj*?ex1<}k&a`yK2Zv%9fr{pa&jJ583+9Q+Q)o0b9~1lMPrP8o$r)mv+po%vh) zy0*mXz1H$PwjF9T3)G;H|GiuD8Tw$nye6j5mWenEk~S-<$H{NGVK!vP{yf5!IuN?E z3ci2fvx1*oTjaR-j(C3bM9oU?rmdDOFfim0lWyiZ-6_{ZjcCVq&>xxi-gi-X7ZnbT z>b7+geJS;XP)y%~s(O~?N&KxfSxGnQ4URWo8${zRxRO*ZkO--5)Z+uV;vC!@sCN6D zMzq9)@vTLEk9!8B5=e+iZ^7N}2_7GKom4u~rziI(6r2jmSndti=(X;8q?`HWy#7t= z@gidd7KiNLeGsK)8;KxR+Omp}FcH2|O0sfXbZvMo2RrZX<+85FPob#Z&yXwClnXl+ zX?4lkBtQn==E4C*s{Jti0;;|TO-1j?bstEzOt>epvm=`UP9jsvfEE#AcQ3?EYczY3 zW=`;Ds(D4X#_%Th#(B<%OL6yWA3q(yVsO;sNozE*19;RX%n9=u{s@E){?JdA9_YL9LkfFPGCScbP`dmbUsL_q{<_^yVMB|!ON6{Lh}F69 zls&#fcFM)0;k70knBaXb?gVsR3s)Q7{H#fj$A&*}zupdNlRVnvbT&@`NRe<0V|a zwM~oN&8{>w7mQLc#x{5{<@%Izyo!fJ*xw3T2YfV5pg$lQ>Dh>~Td@AR`a|tDS182B z<*vd?%@w!Jb9G04IIh}_wyj!JUeh{$WOy&-QuS#0kpel%EcdH4#BN-8-%(hiOF;cK zJ&1d79*)g8tM@KjjTpI~ZluG)Si9aEzL(tl+hyR5Czbg%F|eku`H3;U4Qz}pkxTj5 z305^b1!I(^8-X6@<~AwWM5a^g<_!5Jt300f<~Vu-pyZaN7#gaJ)z-+H66p`T zzIx86_r(U~Lwa>Y4c4i&zHwgJOd#S2WT*vk10H9wv^qiSj7Et49h6p9R%LpK%ghf# zWzM>;eDe#XkHzZR6lrlXMe%{{g?s%~;!Hdz?gBD9d(Z;c1ss*?Wa=}11JqWWCI}MA za?@=B$gy{<#+^B02DXUc_INveG$zBs!5Kz9dtUeoFLOIdZ{7Hvlh#+XXDxq&K!_0e zmA7iY#Kqe8II}t!WcMXJ0dBzUxA?3>AX$hOCQx-rR zFK-UZ-d1LH^vn3@U!s8|_DMt9xKdLCa2JIFMQ!uJ>@4i9y3Yo3p9T6it%%U{ziQUF z`r65!6n>r&CY^hXTh^E?>th>~l-)w8K4IYPH`+pvK2L(^aW_%P{w(nevLM=MwnQ&&bdb_QB zuXsoq(5iu}A9Qb(a1T?|6nKO6fWiUO0{j-b_xh&w;>Gt;IE9uyiZ<5MxWe+d+S_T@ z_p{niZ}0va8B$XQW+aB%j3|##Iia&Q)JC@m=#D)u3WuP3si3bEQ*zd_$(CDk zKnkYv^~$_wcHycfv}xEpDBPE|bdb+;dZte=4|=)=B=wnWzU?NCvZ}TbB-%-(xu3B~rVuUKMN} zQJcf(HzabZB&sdpiuLk-0F?`G?|h{4rFk35<24=mbWzM5xHB|CFDw_X^i}Lf4<%5t zS8dhG18ez7N0i67{ONGxdswZ-7;+5RkPJD(U*$M2ysp=1M3Bpjke0kP zLXg#|QQSmui@nu8q`ZNZ2KMq*@yFG;+`^uSEIx^^J{*=`w!j`N1YTN4#q^CR#+JM*tXKWeJjkU zHU=4BDG+Ehuz-&|ZY`rjt0)sB>oM!S1BDhb#E3i^aJjy54CB9Ul}$6OLC@+33j_yK zhECeYi|hz7GlOA)sxjano}sQR=IGn8Mp7Ea8OsMAX*0j~#N*V;f})GcXqZPaPPw-j zaTH)IY0qC?novlhM|#`_V8)}lE@w~DT^7qfpFprit%W4^$9^B?Im>}qHQ2V;HCeWl zw^`QKZ7wpy%TSGarm>7fDeJTWaWT(IHl^U}0`TpA~^Xau0rh~KZWff5|@pXdJrG!Lz(q%ejy&)tn+lU3v zo*x#v^@Z(+pT0*8s&pD((mAr=rB7xZ^6B$?IHPFA7agh?*0ym<;%qhG!B4(XnUm_b zc>cz1&=E(M;GZH6({+M@5{BNxU*`O(af_5G_InpNglqc>P#=?Byks-)5O->-ricK;|QPXJRz0%^3tny5tIVF-r zJT=pCEW7qqaOEf{kaXaQTv9&SD~lKQK4ORmJrO6Ikd|@~0%UGjk(>9r_B9&^Y77Yq zK;(DWs|TG2%;$^ZOQz5skUq6#rf>a~ag|eL`7h3O(tSRrL|{;7n6h>`?rze3fcn4+ z9eV;OX1%rtFx6M7L;iENr)+z@S_#X?9116W*)z-Or$XnHIQq4#%27<4%b<4NX`w2M zLHu3%`HVJeOYbC~rk0IR2*mJ`7vd3?o`2|XI#|Oyv;)DYLiWq09%cS|7PhL4?duX` zXNP|q#J{flbYG$@yN2$=?5+`u%dWM|#>~z<$UYehhMkxA0jyytgrz+^QlRXp)S3X~ z*((KdUca!O|xn|Sg0&gCkgWV^A4%;bPWez)N#VNNEuI6dE616Zh9 zc>~bUY@3!w^4B�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 literal 0 HcmV?d00001 diff --git a/main/Kconfig b/main/Kconfig index d098250..b13ccfb 100644 --- a/main/Kconfig +++ b/main/Kconfig @@ -1,15 +1,5 @@ menu "OAP Main" -menu "Publishing results" - -config OAP_THING_SPEAK_API_KEY - string "ThingSpeak API KEY" - default "" - help - API KEY for your channel obtained from ThingSpeak.com site - -endmenu - menu "PM Measurement" choice OAP_PM_SENSOR_MODE diff --git a/main/main.c b/main/main.c index 1021b96..c762bdc 100644 --- a/main/main.c +++ b/main/main.c @@ -39,6 +39,7 @@ #include "bmx280.h" #include "pmsx003.h" #include "pm_meter.h" +#include "oap_storage.h" static const char *TAG = "app"; @@ -148,8 +149,9 @@ void app_main() { vTaskDelay(1000 / portTICK_PERIOD_MS); + storage_init(); ESP_LOGI(TAG,"starting app..."); - nvs_flash_init(); + //wifi/mongoose requires plenty of mem, start it here bootWiFi(); //deprecated wifiInit(); From 9093d27deb8327e908c8579da86aa250b6d74b08 Mon Sep 17 00:00:00 2001 From: kris Date: Wed, 15 Feb 2017 15:46:55 +0100 Subject: [PATCH 002/200] mask wifi password --- README.md | 4 +- components/bootwifi/index.html | 1 - components/oap_common/oap_storage.c | 71 ++++++++++++++++++++++++----- 3 files changed, 62 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 0591440..4ecbb7c 100644 --- a/README.md +++ b/README.md @@ -107,9 +107,9 @@ and configure sensor settings using sensor control panel. If there's a need to reconfigure wifi settings, reboot the device with a control button pressed down - it will switch into AP mode. -![Schema](doc/images/sensor_settings.png?raw=true) +![Schema](doc/images/sensor_settings.png?raw=true =320x) Happy DIY time! --- -![Schema](doc/images/prototype.jpg?raw=true) \ No newline at end of file +![Schema](doc/images/prototype.jpg?raw=true =600x) \ No newline at end of file diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html index 1984c5a..549dbef 100644 --- a/components/bootwifi/index.html +++ b/components/bootwifi/index.html @@ -209,7 +209,6 @@ .catch(function (e, xhr, response) { alert('Could not save config\n(' + xhr.status + ' - ' + e.message + ')'); }); - }; oap.load = function () { diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 82b6b78..bbb99ef 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -35,6 +35,7 @@ extern const uint8_t default_config_json_end[] asm("_binary_default_config_json_ static char* NAMESPACE = "OAP"; static char* TAG = "storage"; +static char* PASSWORD_NOT_CHANGED = ""; int storage_get_blob(const char* key, void* out_value, size_t length) { nvs_handle handle; @@ -124,13 +125,65 @@ cJSON* storage_get_config(const char* module) { } } -int storage_set_config_str(const char* config) { +static void storage_set_config(cJSON *config) { + if (_config) cJSON_Delete(_config); + _config = config; + char* _configStr = cJSON_Print(_config); + storage_put_str("config", _configStr); + free(_configStr); +} + +/* + * returns entire config as a string. + * free result after use. + */ +char* storage_get_config_str() { + cJSON* copy = cJSON_Duplicate(_config, 1); + cJSON* wifi = cJSON_GetObjectItem(copy, "wifi"); + //replace existing password (security) + if (wifi && cJSON_GetObjectItem(wifi, "password")) { + cJSON_DeleteItemFromObject(wifi, "password"); + cJSON_AddStringToObject(wifi, "password", PASSWORD_NOT_CHANGED); + } + char* str = cJSON_Print(copy); + cJSON_Delete(copy); + return str; +} + +//static void set_str_value(cJSON* node, char* str) { +// if (!node) return; +// if (node->valuestring) free(node->valuestring); +// node->valuestring = malloc(strlen(str)+1); +// strcpy(node->valuestring, str); +//} + +/* + * deserialises json string and stores as a new config. + * it also checks password field if it that didn't change - it leaves the old value. + */ +int storage_set_config_str(const char* configStr) { ESP_LOGD(TAG, "set config"); - cJSON *configJson = cJSON_Parse(config); - if (configJson) { - if (_config) cJSON_Delete(_config); - _config = configJson; - storage_put_str("config", config); + +// char* c= storage_get_config_str(); +// ESP_LOGD(TAG, "current config: %s", c); +// free(c); + + cJSON *config = cJSON_Parse(configStr); + if (config) { + if (_config) { + cJSON* wifi = cJSON_GetObjectItem(config, "wifi"); + cJSON* passwordNode = cJSON_GetObjectItem(wifi, "password"); + if (passwordNode && strcmp(passwordNode->valuestring, PASSWORD_NOT_CHANGED) == 0) { + cJSON* _wifi = cJSON_GetObjectItem(_config, "wifi"); + cJSON* _passwordNode = cJSON_GetObjectItem(_wifi, "password"); + ESP_LOGD(TAG,"detected '%s' token, we need to keep old password (%s)", PASSWORD_NOT_CHANGED, _passwordNode->valuestring); + if (_passwordNode) { + cJSON_DeleteItemFromObject(wifi, "password"); + cJSON_AddStringToObject(wifi, "password", _passwordNode->valuestring); + } + } + } + storage_set_config(config); return ESP_OK; } else { ESP_LOGE(TAG, "malformed config, ignore"); @@ -138,10 +191,7 @@ int storage_set_config_str(const char* config) { } } -//free result after use -char* storage_get_config_str() { - return cJSON_Print(_config); -} + static char* default_config() { int len = default_config_json_end-default_config_json_start; @@ -155,7 +205,6 @@ static void storage_init_config() { char* str = NULL; ESP_LOGD(TAG, "get config"); - int err; if ((err = storage_get_str("config", &str)) != ESP_OK) { if (str) free(str); From f0128564599f16dc25145dfa12d7eea5cbeb5809 Mon Sep 17 00:00:00 2001 From: kris Date: Wed, 15 Feb 2017 19:54:58 +0100 Subject: [PATCH 003/200] enable web server in station mode --- components/bootwifi/bootwifi.c | 55 ++++++++++++---------- components/bootwifi/index.html | 58 ++++++++++++++++++++++-- components/oap_common/oap_storage.c | 1 + components/peripherals/include/rgb_led.h | 2 +- components/peripherals/rgb_led.c | 11 +++-- components/pmsx003/pmsx003.c | 8 ++-- main/main.c | 41 ++++++++++++++--- 7 files changed, 130 insertions(+), 46 deletions(-) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 25c84d9..f60e15d 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -54,14 +54,14 @@ extern const uint8_t index_html_end[] asm("_binary_index_html_end"); #define SSID_SIZE (32) // Maximum SSID size #define PASSWORD_SIZE (64) // Maximum password size -typedef uint8_t u8_t; -typedef uint16_t u16_t; - typedef struct { char ssid[SSID_SIZE]; char password[PASSWORD_SIZE]; tcpip_adapter_ip_info_t ipInfo; // Optional static IP information -} oap_connection_info_t; +} oc_wifi_t; + +typedef uint8_t u8_t; +typedef uint16_t u16_t; static int g_mongooseStarted = 0; // Has the mongoose server started? static int g_mongooseStopRequest = 0; // Request to stop the mongoose server. @@ -294,7 +294,14 @@ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress initialize_sntp(); - g_mongooseStopRequest = 1; // Stop mongoose (if it is running). + //g_mongooseStopRequest = 1; // Stop mongoose (if it is running). + + if (!g_mongooseStarted) + { + g_mongooseStarted = 1; + xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL, 0); + } + break; } @@ -308,33 +315,33 @@ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress /** * Retrieve the connection info. A rc==0 means ok. */ -static int getConnectionInfo(oap_connection_info_t *pConnectionInfo) { - memset(pConnectionInfo, 0, sizeof(oap_connection_info_t)); +static int get_config(oc_wifi_t *oc_wifi) { + memset(oc_wifi, 0, sizeof(oc_wifi_t)); ESP_LOGD(tag, "retrieve wifi config"); cJSON* wifi = storage_get_config("wifi"); if (!wifi) return ESP_FAIL; cJSON* field; - if ((field = cJSON_GetObjectItem(wifi, "ssid"))) strcpy(pConnectionInfo->ssid, field->valuestring); - if ((field = cJSON_GetObjectItem(wifi, "password"))) strcpy(pConnectionInfo->password, field->valuestring); + if ((field = cJSON_GetObjectItem(wifi, "ssid"))) strcpy(oc_wifi->ssid, field->valuestring); + if ((field = cJSON_GetObjectItem(wifi, "password"))) strcpy(oc_wifi->password, field->valuestring); if ((field = cJSON_GetObjectItem(wifi, "ip"))) { - inet_pton(AF_INET, field->valuestring, &pConnectionInfo->ipInfo.ip); + inet_pton(AF_INET, field->valuestring, &oc_wifi->ipInfo.ip); } if ((field = cJSON_GetObjectItem(wifi, "gw"))) { - inet_pton(AF_INET, field->valuestring, &pConnectionInfo->ipInfo.gw); + inet_pton(AF_INET, field->valuestring, &oc_wifi->ipInfo.gw); } if ((field = cJSON_GetObjectItem(wifi, "netmask"))) { - inet_pton(AF_INET, field->valuestring, &pConnectionInfo->ipInfo.netmask); + inet_pton(AF_INET, field->valuestring, &oc_wifi->ipInfo.netmask); } - ESP_LOGD(tag, "wifi.ssid: %s", pConnectionInfo->ssid); - ESP_LOGD(tag, "wifi.pass.lenght: [%d]", strlen(pConnectionInfo->password)); + ESP_LOGD(tag, "wifi.ssid: %s", oc_wifi->ssid); + ESP_LOGD(tag, "wifi.pass.lenght: [%d]", strlen(oc_wifi->password)); - ESP_LOGD(tag, "wifi.ip:" IPSTR, IP2STR(&pConnectionInfo->ipInfo.ip)); - ESP_LOGD(tag, "wifi.gateway:" IPSTR, IP2STR(&pConnectionInfo->ipInfo.gw)); - ESP_LOGD(tag, "wifi.netmask:" IPSTR, IP2STR(&pConnectionInfo->ipInfo.netmask)); + ESP_LOGD(tag, "wifi.ip:" IPSTR, IP2STR(&oc_wifi->ipInfo.ip)); + ESP_LOGD(tag, "wifi.gateway:" IPSTR, IP2STR(&oc_wifi->ipInfo.gw)); + ESP_LOGD(tag, "wifi.netmask:" IPSTR, IP2STR(&oc_wifi->ipInfo.netmask)); - if (strlen(pConnectionInfo->ssid) == 0) { + if (strlen(oc_wifi->ssid) == 0) { ESP_LOGW(tag, "NULL ssid detected"); return ESP_FAIL; } @@ -342,11 +349,11 @@ static int getConnectionInfo(oap_connection_info_t *pConnectionInfo) { return ESP_OK; } -//static void saveConnectionInfo(oap_connection_info_t *pConnectionInfo) { -// storage_put_blob(KEY_CONNECTION_INFO, pConnectionInfo, sizeof(oap_connection_info_t)); +//static void saveConnectionInfo(oc_wifi_t *pConnectionInfo) { +// storage_put_blob(KEY_CONNECTION_INFO, pConnectionInfo, sizeof(oc_wifi_t)); //} -static void become_station(oap_connection_info_t *pConnectionInfo) { +static void become_station(oc_wifi_t *pConnectionInfo) { is_station = 1; ESP_LOGD(tag, "- Connecting to access point \"%s\" ...", pConnectionInfo->ssid); assert(strlen(pConnectionInfo->ssid) > 0); @@ -406,10 +413,10 @@ static void restore_wifi_setup() { ESP_LOGI(tag, "GPIO override detected"); become_access_point(); } else { - oap_connection_info_t connectionInfo = {}; - int rc = getConnectionInfo(&connectionInfo); + oc_wifi_t oc_wifi = {}; + int rc = get_config(&oc_wifi); if (rc == 0) { - become_station(&connectionInfo); + become_station(&oc_wifi); } else { become_access_point(); } diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html index 549dbef..340f3a2 100644 --- a/components/bootwifi/index.html +++ b/components/bootwifi/index.html @@ -20,6 +20,7 @@ border:1px solid #999; } legend { + font-size:1.25em; padding:0.5em; } row { @@ -27,6 +28,7 @@ padding: 0.5em; } row label { + font-size: 0.8em; display: inline-block; width: 200px; } @@ -50,6 +52,13 @@ border:none; min-width:150px; } + + input[type=text],input[type=number] { + width:200px; + } + input.short { + width:120px; + } @@ -70,17 +79,56 @@ - + - + - + + + + +
+ Measurement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -171,7 +219,7 @@ if (isMultiSelect(el)) { val = getSelectValues(el); } else if (el.type === 'number' || (el.type === 'checkbox' && parseFloat(el.value))) { - val = parseFloat(el.value); + val = parseFloat(el.value) || 0; } else { val = el.value; } @@ -191,7 +239,7 @@ if (isCheckbox(el)) { el.checked = el.value == val; } else { - el.value = el.type === 'number' ? parseFloat(val) : val; + el.value = val; } } }); diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index bbb99ef..6a22774 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -218,6 +218,7 @@ static void storage_init_config() { if (!_config) { ESP_LOGE(TAG,"config is not a proper json, replace with default\n%s", str); } else { + //TODO here we should "merge" it with defaults - in case of new firmware ESP_LOGI(TAG,"config\n%s",str); } free(str); diff --git a/components/peripherals/include/rgb_led.h b/components/peripherals/include/rgb_led.h index e140541..20f17fa 100644 --- a/components/peripherals/include/rgb_led.h +++ b/components/peripherals/include/rgb_led.h @@ -40,6 +40,6 @@ typedef struct { uint32_t freq; } led_cmd; -void led_init(xQueueHandle cmd_queue); +void led_init(int enabled, xQueueHandle cmd_queue); #endif /* MAIN_LED_H_ */ diff --git a/components/peripherals/rgb_led.c b/components/peripherals/rgb_led.c index 4900bcd..dba3440 100644 --- a/components/peripherals/rgb_led.c +++ b/components/peripherals/rgb_led.c @@ -106,7 +106,7 @@ static void led_cycle() { } } -void led_init(xQueueHandle _cmd_queue) +void led_init(int enabled, xQueueHandle _cmd_queue) { cmd_queue = _cmd_queue; MAX_DUTY = pow(2,ledc_timer.bit_num)-1; @@ -133,9 +133,10 @@ void led_init(xQueueHandle _cmd_queue) ledc_channel_config(&ledc_channel); } - //initialize fade service. - ledc_fade_func_install(0); - - xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, 10, NULL); + if (enabled) { + //initialize fade service. + ledc_fade_func_install(0); + xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, 10, NULL); + } } diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 9306df0..40342b7 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -41,7 +41,7 @@ static const char* TAG = "pmsX003"; static int enabled = 0; -static int outdoor = 0; +static int indoor = 0; static QueueHandle_t samples; static void pms_init_uart(void) { @@ -83,7 +83,7 @@ static void pms_uart_read() if (!enabled) continue; if (len >= 24 && data[0]==0x42 && data[1]==0x4d) { //ESP_LOGI(TAG, "got frame of %d bytes", len); - pm_data pm = decodepm_data(data, outdoor ? 10 : 4); //atmospheric from 10th byte, standard from 4th + pm_data pm = decodepm_data(data, indoor ? 4 : 10); //atmospheric from 10th byte, standard from 4th if (!xQueueSend(samples, &pm, 100)) { ESP_LOGW(TAG, "sample queue overflow"); } @@ -99,8 +99,8 @@ void pms_enable(int _enabled) { gpio_set_level(CONFIG_OAP_PM_SENSOR_CONTROL_PIN, enabled); //low state = disabled, high state = enabled } -QueueHandle_t pms_init(int _outdoor) { - outdoor = _outdoor; +QueueHandle_t pms_init(int _indoor) { + indoor = _indoor; samples = xQueueCreate(1, sizeof(pm_data)); pms_init_gpio(); pms_enable(0); diff --git a/main/main.c b/main/main.c index c762bdc..9bdaa5e 100644 --- a/main/main.c +++ b/main/main.c @@ -61,6 +61,33 @@ static QueueHandle_t pm_queue; // ESP_LOGI(TAG, "timestamp: %ld", tv.tv_sec); //} +typedef struct { + int led; + int indoor; + int warmUpTime; + int measTime; + int measInterval; + int measStrategy; + int test; +} oc_sensor_config_t; + +static oc_sensor_config_t get_config() { + oc_sensor_config_t sensor_config = {}; + ESP_LOGD(TAG, "retrieve sensor config"); + cJSON* sensor = storage_get_config("sensor"); + cJSON* sconfig = cJSON_GetObjectItem(sensor, "config"); + cJSON* field; + + if ((field = cJSON_GetObjectItem(sconfig, "led"))) sensor_config.led = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "indoor"))) sensor_config.indoor = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "warmUpTime"))) sensor_config.warmUpTime = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "measTime"))) sensor_config.measTime = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "measInterval"))) sensor_config.measInterval = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "measStrategy"))) sensor_config.measStrategy = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "test"))) sensor_config.test = field->valueint; + return sensor_config; +} + static led_cmd led_state = { .color = {.v = {0,0,1}} //initial color (when no samples collected) }; @@ -80,16 +107,17 @@ static void update_led_color(led_mode mode, float r, float g, float b) { } static void pm_meter_trigger_task() { - pm_meter_init(pms_init(CONFIG_OAP_PM_SENSOR_OUTDOOR)); + oc_sensor_config_t sensor_config = get_config(); + + pm_meter_init(pms_init(sensor_config.indoor)); while (1) { - //TODO add semaphore update_led_mode(LED_PULSE); - pm_meter_start(CONFIG_OAP_PM_WARM_UP_TIME); - vTaskDelay(CONFIG_OAP_PM_MEAS_TIME * 1000 / portTICK_PERIOD_MS); + pm_meter_start(sensor_config.warmUpTime); + vTaskDelay(sensor_config.measTime * 1000 / portTICK_PERIOD_MS); pm_data pm = pm_meter_stop(); update_led_mode(LED_SET); xQueueSend(pm_queue, &pm, 1000 / portTICK_PERIOD_MS); //1sec - vTaskDelay((CONFIG_OAP_PM_MEAS_INTERVAL-CONFIG_OAP_PM_MEAS_TIME) * 1000 / portTICK_PERIOD_MS); + vTaskDelay((sensor_config.measInterval-sensor_config.measTime) * 1000 / portTICK_PERIOD_MS); } } @@ -102,7 +130,7 @@ static void main_task() { thing_speak_init(result_queue); QueueHandle_t env_queue = bmx280_init(); - led_init(led_queue); + led_init(get_config().led, led_queue); update_led(); gpio_num_t btn_gpio[] = {CONFIG_OAP_BTN_0_PIN}; @@ -152,7 +180,6 @@ void app_main() storage_init(); ESP_LOGI(TAG,"starting app..."); - //wifi/mongoose requires plenty of mem, start it here bootWiFi(); //deprecated wifiInit(); From 3b4dd5e31b343f2fcaa1bb5097b97035ba947d91 Mon Sep 17 00:00:00 2001 From: kris Date: Wed, 15 Feb 2017 22:45:58 +0100 Subject: [PATCH 004/200] new bme driver --- components/bmx280/bmx280.c | 50 +++- components/bmx280/i2c_bme280.c | 309 +++++++++++++++++++++ components/bmx280/i2c_bme280.h | 73 +++++ components/net/thing_speak.c | 5 +- components/oap_common/include/oap_common.h | 1 + main/main.c | 2 +- 6 files changed, 434 insertions(+), 6 deletions(-) create mode 100755 components/bmx280/i2c_bme280.c create mode 100755 components/bmx280/i2c_bme280.h diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index ff4c35d..b3cc616 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -29,6 +29,19 @@ #include "sdkconfig.h" #include "oap_common.h" #include "include/bmx280.h" +#include "i2c_bme280.h" + +#define BME280_W 0xEC +#define BME280_R 0xED +#define BME280_CHIP_ID_REG 0xD0 +#define BME280_CHIP_ID 0x60 + +#define BME280_REG_CTRL_HUM 0xF2 +#define BME280_REG_CTRL_MEAS 0xF4 +#define BME280_REG_CONFIG 0xF5 + +#define BME280_MODE_NORMAL 0x03 //reads sensors at set interval +#define BME280_MODE_FORCED 0x01 //reads sensors once when you write this register static char* TAG = "bmx280"; static QueueHandle_t samples_queue; @@ -152,12 +165,11 @@ static esp_err_t get_sensor_data(env_data* result) // Select control measurement register(0xF4) // Normal mode, temp and pressure over sampling rate = 1(0x27) - CONT_IF_OK(write_i2c_byte(0xF4, 0x27)); + CONT_IF_OK(write_i2c_byte(BME280_REG_CTRL_MEAS, 0x27)); // Select config register(0xF5) // Stand_by time = 1000 ms(0xA0) - - CONT_IF_OK(write_i2c_byte(0xF5, 0xA0)); + CONT_IF_OK(write_i2c_byte(BME280_REG_CONFIG, 0xA0)); vTaskDelay(10/portTICK_PERIOD_MS); // Read 8 bytes of data from register(0xF7) @@ -195,6 +207,7 @@ static esp_err_t get_sensor_data(env_data* result) return ESP_OK; } +/* static void bmx280_task() { env_data result = {}; @@ -223,8 +236,39 @@ QueueHandle_t bmx280_init() { conf.master.clk_speed = 100000; i2c_param_config(CONFIG_OAP_BMX280_I2C_NUM, &conf); i2c_driver_install(CONFIG_OAP_BMX280_I2C_NUM, I2C_MODE_MASTER, 0, 0, 0); + + uint8_t chipID; + read_i2c(BME280_CHIP_ID_REG,&chipID,1); + if (chipID == BME280_CHIP_ID) { + ESP_LOGI(TAG, "chip identified as BME280"); + } else { + ESP_LOGW(TAG, "chip identified itself as [%d]", chipID); + } + xTaskCreate(bmx280_task, "bmx280_task", 1024*2, NULL, 10, NULL); return samples_queue; } +*/ + +//--- new +static void bmx280_task() { + BME280_Init(BME280_MODE_FORCED); + while(1) { + BME280_readSensorData(); + env_data result = BME280_data(); + + ESP_LOGD(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.temp, result.pressure, result.humidity); + if (!xQueueSend(samples_queue, &result, 10000/portTICK_PERIOD_MS)) { + ESP_LOGW(TAG, "env queue overflow"); + } + + vTaskDelay(5000/portTICK_PERIOD_MS); + } +} +QueueHandle_t bmx280_init() { + samples_queue = xQueueCreate(1, sizeof(env_data)); + xTaskCreate(bmx280_task, "bmx280_task", 1024*2, NULL, 10, NULL); + return samples_queue; +} diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c new file mode 100755 index 0000000..2f090cc --- /dev/null +++ b/components/bmx280/i2c_bme280.c @@ -0,0 +1,309 @@ +/* +The driver for the temperature, pressure, & humidity sensor BME280 +Official repository: https://github.com/RyAndrew/esp8266_i2c_bme280 +Adapted From: https://github.com/CHERTS/esp8266-i2c_bmp180 +This driver depends on the I2C driver https://github.com/zarya/esp8266_i2c_driver/ + +The MIT License (MIT) + +Copyright (C) 2015 Andrew Rymarczyk + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +* This file is part of OpenAirProject-ESP32. +* +* OpenAirProject-ESP32 is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* OpenAirProject-ESP32 is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with OpenAirProject-ESP32. If not, see . +*/ + +#include +#include +#include + +#include "i2c_bme280.h" + +uint16_t calib_dig_T1; +int16_t calib_dig_T2; +int16_t calib_dig_T3; +uint16_t calib_dig_P1; +int16_t calib_dig_P2; +int16_t calib_dig_P3; +int16_t calib_dig_P4; +int16_t calib_dig_P5; +int16_t calib_dig_P6; +int16_t calib_dig_P7; +int16_t calib_dig_P8; +int16_t calib_dig_P9; +int8_t calib_dig_H1; +int16_t calib_dig_H2; +int8_t calib_dig_H3; +int16_t calib_dig_H4; +int16_t calib_dig_H5; +int8_t calib_dig_H6; + +uint8_t osrs_t = 1; //Temperature oversampling x 1 +uint8_t osrs_p = 1; //Pressure oversampling x 1 +uint8_t osrs_h = 1; //Humidity oversampling x 1 + +uint8_t t_sb = 4; //Tstandby, 5=1000ms, 4=500ms +uint8_t filter = 0; //Filter off +uint8_t spi3w_en = 0; //3-wire SPI Disable + +uint8_t BME280_OperationMode = BME280_MODE_NORMAL; + + +signed long int t_fine; +signed long int temp_act; +unsigned long int press_act, hum_act; + +static char* TAG = "i2c_bmx280"; + +static void BME280_writeConfigRegisters(void); +static void BME280_readCalibrationRegisters(void); + +#define CONT_IF_I2C_OK(log, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err:%s",log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); +#define CONT_IF_OK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) return rc; } while(0); + +static esp_err_t read_i2c(uint8_t address, uint8_t* data, int len) { + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + //set address + CONT_IF_I2C_OK("r1", i2c_master_start(cmd)); + CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (CONFIG_OAP_BMX280_ADDRESS << 1) | I2C_MASTER_WRITE, 1)); + CONT_IF_I2C_OK("r3", i2c_master_write_byte(cmd, address, 1)); + CONT_IF_I2C_OK("r4", i2c_master_stop(cmd)); + CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(CONFIG_OAP_BMX280_I2C_NUM, cmd, 1000/portTICK_PERIOD_MS)); + i2c_cmd_link_delete(cmd); + cmd = 0; + + //we need to read one byte per command (see below) + for (int i=0;i> 4) & 0x0F); + calib_dig_H6 = data[6]; +} + +bool BME280_sendI2cTriggerForcedRead(){ + uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | BME280_OperationMode; + write_i2c_byte(BME280_REG_CTRL_MEAS, ctrl_meas_reg); + vTaskDelay(10/portTICK_PERIOD_MS); // wait 10ms for worst case max sensor read time + return 1; +} + +static signed long int BME280_calibration_Temp(signed long int adc_T) +{ + signed long int var1, var2, T; + var1 = ((((adc_T >> 3) - ((signed long int)calib_dig_T1<<1))) * ((signed long int)calib_dig_T2)) >> 11; + var2 = (((((adc_T >> 4) - ((signed long int)calib_dig_T1)) * ((adc_T>>4) - ((signed long int)calib_dig_T1))) >> 12) * ((signed long int)calib_dig_T3)) >> 14; + + t_fine = var1 + var2; + T = (t_fine * 5 + 128) >> 8; + return T; +} + +static unsigned long int BME280_calibration_Press(signed long int adc_P) +{ + signed long int var1, var2; + unsigned long int P; + var1 = (((signed long int)t_fine)>>1) - (signed long int)64000; + var2 = (((var1>>2) * (var1>>2)) >> 11) * ((signed long int)calib_dig_P6); + var2 = var2 + ((var1*((signed long int)calib_dig_P5))<<1); + var2 = (var2>>2)+(((signed long int)calib_dig_P4)<<16); + var1 = (((calib_dig_P3 * (((var1>>2)*(var1>>2)) >> 13)) >>3) + ((((signed long int)calib_dig_P2) * var1)>>1))>>18; + var1 = ((((32768+var1))*((signed long int)calib_dig_P1))>>15); + if (var1 == 0){ + return 0; + } + P = (((unsigned long int)(((signed long int)1048576)-adc_P)-(var2>>12)))*3125; + if(P<0x80000000){ + P = (P << 1) / ((unsigned long int) var1); + }else{ + P = (P / (unsigned long int)var1) * 2; + } + var1 = (((signed long int)calib_dig_P9) * ((signed long int)(((P>>3) * (P>>3))>>13)))>>12; + var2 = (((signed long int)(P>>2)) * ((signed long int)calib_dig_P8))>>13; + P = (unsigned long int)((signed long int)P + ((var1 + var2 + calib_dig_P7) >> 4)); + return P; +} + +static unsigned long int BME280_calibration_Hum(signed long int adc_H) +{ + signed long int v_x1; + + v_x1 = (t_fine - ((signed long int)76800)); + v_x1 = (((((adc_H << 14) -(((signed long int)calib_dig_H4) << 20) - (((signed long int)calib_dig_H5) * v_x1)) + + ((signed long int)16384)) >> 15) * (((((((v_x1 * ((signed long int)calib_dig_H6)) >> 10) * + (((v_x1 * ((signed long int)calib_dig_H3)) >> 11) + ((signed long int) 32768))) >> 10) + (( signed long int)2097152)) * + ((signed long int) calib_dig_H2) + 8192) >> 14)); + v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((signed long int)calib_dig_H1)) >> 4)); + v_x1 = (v_x1 < 0 ? 0 : v_x1); + v_x1 = (v_x1 > 419430400 ? 419430400 : v_x1); + return (unsigned long int)(v_x1 >> 12); +} + +static env_data result = {}; + +bool BME280_sendI2cReadSensorData(){ + if(BME280_OperationMode == BME280_MODE_FORCED){ + if(!BME280_sendI2cTriggerForcedRead()){ + return 0; + } + } + uint8_t data[8]; + read_i2c(0xF7,data,8); + + unsigned long int hum_raw, temp_raw, pres_raw; + + //0xF7 - pressure + pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4); + //0xFA - temp + temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4); + //0xFD - humidity + hum_raw = (data[6] << 8) | data[7]; + + result.temp = BME280_calibration_Temp(temp_raw) / 100.0; //Celsius + result.pressure = BME280_calibration_Press(pres_raw) / 100.0; //hPA + result.humidity = BME280_calibration_Hum(hum_raw) / 1024.0; // pct + + return 1; +} + +void BME280_readSensorData(){ + BME280_sendI2cReadSensorData(); +} + +env_data BME280_data() { + return result; +} + +bool BME280_Init(uint8_t operationMode) +{ + i2c_config_t conf; + conf.mode = I2C_MODE_MASTER; + conf.sda_io_num = CONFIG_OAP_BMX280_I2C_SDA_PIN; + conf.scl_io_num = CONFIG_OAP_BMX280_I2C_SCL_PIN; + conf.sda_pullup_en = GPIO_PULLUP_ENABLE; + conf.scl_pullup_en = GPIO_PULLUP_ENABLE; + conf.master.clk_speed = 100000; + i2c_param_config(CONFIG_OAP_BMX280_I2C_NUM, &conf); + i2c_driver_install(CONFIG_OAP_BMX280_I2C_NUM, I2C_MODE_MASTER, 0, 0, 0); + + if(!BME280_verifyChipId()){ + return 0; + } + + BME280_OperationMode = operationMode; + + BME280_writeConfigRegisters(); + + BME280_readCalibrationRegisters(); + + return 1; +} + + diff --git a/components/bmx280/i2c_bme280.h b/components/bmx280/i2c_bme280.h new file mode 100755 index 0000000..efc17c9 --- /dev/null +++ b/components/bmx280/i2c_bme280.h @@ -0,0 +1,73 @@ +/* +The driver for the temperature, pressure, & humidity sensor BME280 +Official repository: https://github.com/RyAndrew/esp8266_i2c_bme280 +Adapted From: https://github.com/CHERTS/esp8266-i2c_bmp180 +This driver depends on the I2C driver https://github.com/zarya/esp8266_i2c_driver/ + +The MIT License (MIT) + +Copyright (C) 2015 Andrew Rymarczyk + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +* This file is part of OpenAirProject-ESP32. +* +* OpenAirProject-ESP32 is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* OpenAirProject-ESP32 is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with OpenAirProject-ESP32. If not, see . + +*/ + +#ifndef __I2C_BME280_H +#define __I2C_BME280_H + +#include +#include +#include "oap_common.h" + +#define BME280_W 0xEC +#define BME280_R 0xED +#define BME280_CHIP_ID_REG 0xD0 +#define BME280_CHIP_ID 0x60 + +#define BME280_REG_CTRL_HUM 0xF2 +#define BME280_REG_CTRL_MEAS 0xF4 +#define BME280_REG_CONFIG 0xF5 + +#define BME280_MODE_NORMAL 0x03 //reads sensors at set interval +#define BME280_MODE_FORCED 0x01 //reads sensors once when you write this register + +//#define BME280_DEBUG 1 //uncomment for debugging messages + +bool BME280_Init(uint8_t operationMode); + +void BME280_readSensorData(void); + +env_data BME280_data(); + +#endif diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index 7d0bd80..ffafb9c 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -90,12 +90,13 @@ static int post_data(oap_meas meas) { freeaddrinfo(res); char payload[200]; - sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f", apikey, + sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f&field6=%.2f", apikey, meas.pm.pm1_0, meas.pm.pm2_5, meas.pm.pm10, meas.env.temp, - meas.env.pressure); + meas.env.pressure, + meas.env.humidity); char request[512]; diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index 0cb44b2..c39d2ba 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -32,6 +32,7 @@ typedef struct { typedef struct { double temp; double pressure; + double humidity; } env_data; typedef struct { diff --git a/main/main.c b/main/main.c index 9bdaa5e..4c1bfdb 100644 --- a/main/main.c +++ b/main/main.c @@ -150,7 +150,7 @@ static void main_task() { gettimeofday(&time, NULL); if (xQueueReceive(env_queue, &env, 100)) { env_timestamp = time.tv_sec; - ESP_LOGI(TAG,"Temperature : %.2f C, Pressure: %.2f hPa", env.temp, env.pressure); + ESP_LOGI(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity: %.2f %%", env.temp, env.pressure, env.humidity); } pm_data pm; From b75c5f35604a9ed066dd3b047731f73385d51b45 Mon Sep 17 00:00:00 2001 From: kris Date: Wed, 15 Feb 2017 23:15:09 +0100 Subject: [PATCH 005/200] detect bmp/bme, but pressure for bmp is wrong --- components/bmx280/i2c_bme280.c | 36 ++++++++++++++++++++++++---------- components/bmx280/i2c_bme280.h | 9 +-------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c index 2f090cc..419c5fc 100755 --- a/components/bmx280/i2c_bme280.c +++ b/components/bmx280/i2c_bme280.c @@ -78,6 +78,18 @@ uint8_t spi3w_en = 0; //3-wire SPI Disable uint8_t BME280_OperationMode = BME280_MODE_NORMAL; +#define BME280_W 0xEC +#define BME280_R 0xED +#define BME280_CHIP_ID_REG 0xD0 +#define BME280_CHIP_ID 0x60 + +#define BME280_REG_CTRL_HUM 0xF2 +#define BME280_REG_CTRL_MEAS 0xF4 +#define BME280_REG_CONFIG 0xF5 + +#define BMP280_CHIP_ID1 (0x56) +#define BMP280_CHIP_ID2 (0x57) +#define BMP280_CHIP_ID3 (0x58) signed long int t_fine; signed long int temp_act; @@ -128,18 +140,22 @@ static esp_err_t write_i2c_byte(uint8_t address, uint8_t value) { return ESP_OK; } -bool BME280_verifyChipId(void){ +int BME280_verifyChipId(void){ uint8_t chipID; read_i2c(BME280_CHIP_ID_REG,&chipID,1); - - if (chipID != BME280_CHIP_ID ) { - #ifdef BME280_DEBUG - ESP_LOGD(TAG,"BME280: expected chip id 0x%X, found chip id 0x%X\r\n", BME280_CHIP_ID, chipID); - #endif - return 0; + switch (chipID) { + case BME280_CHIP_ID: + ESP_LOGI(TAG,"detected BME280 (0x%X)", chipID); + return ESP_OK; + case BMP280_CHIP_ID1: + case BMP280_CHIP_ID2: + case BMP280_CHIP_ID3: + ESP_LOGI(TAG,"detected BMP280 - no humidity data (0x%X)", chipID); + return ESP_OK; + default: + ESP_LOGW(TAG,"detected unknown chip (0x%X), disable env data", chipID); + return ESP_FAIL; } - - return 1; } void BME280_writeConfigRegisters(void){ @@ -293,7 +309,7 @@ bool BME280_Init(uint8_t operationMode) i2c_param_config(CONFIG_OAP_BMX280_I2C_NUM, &conf); i2c_driver_install(CONFIG_OAP_BMX280_I2C_NUM, I2C_MODE_MASTER, 0, 0, 0); - if(!BME280_verifyChipId()){ + if (BME280_verifyChipId() != ESP_OK) { return 0; } diff --git a/components/bmx280/i2c_bme280.h b/components/bmx280/i2c_bme280.h index efc17c9..01f0169 100755 --- a/components/bmx280/i2c_bme280.h +++ b/components/bmx280/i2c_bme280.h @@ -50,14 +50,7 @@ THE SOFTWARE. #include #include "oap_common.h" -#define BME280_W 0xEC -#define BME280_R 0xED -#define BME280_CHIP_ID_REG 0xD0 -#define BME280_CHIP_ID 0x60 - -#define BME280_REG_CTRL_HUM 0xF2 -#define BME280_REG_CTRL_MEAS 0xF4 -#define BME280_REG_CONFIG 0xF5 + #define BME280_MODE_NORMAL 0x03 //reads sensors at set interval #define BME280_MODE_FORCED 0x01 //reads sensors once when you write this register From e5c34e17bf0e91052a2373455a58761599ac6039 Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 16 Feb 2017 18:55:22 +0100 Subject: [PATCH 006/200] bme280 compatible driver + humidity measurement --- components/bmx280/bmx280.c | 233 ++----------------- components/bmx280/i2c_bme280.c | 388 ++++++++++++++----------------- components/bmx280/i2c_bme280.h | 38 +-- components/peripherals/rgb_led.c | 57 ++--- coredump.sh | 3 + doc/BST-BME280_DS001-10.pdf | Bin 0 -> 1937299 bytes doc/BST-BMP280-DS001-11.pdf | Bin 0 -> 1485419 bytes 7 files changed, 235 insertions(+), 484 deletions(-) create mode 100755 coredump.sh create mode 100644 doc/BST-BME280_DS001-10.pdf create mode 100644 doc/BST-BMP280-DS001-11.pdf diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index b3cc616..a2bea94 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -31,202 +31,31 @@ #include "include/bmx280.h" #include "i2c_bme280.h" -#define BME280_W 0xEC -#define BME280_R 0xED -#define BME280_CHIP_ID_REG 0xD0 -#define BME280_CHIP_ID 0x60 - -#define BME280_REG_CTRL_HUM 0xF2 -#define BME280_REG_CTRL_MEAS 0xF4 -#define BME280_REG_CONFIG 0xF5 - -#define BME280_MODE_NORMAL 0x03 //reads sensors at set interval -#define BME280_MODE_FORCED 0x01 //reads sensors once when you write this register - static char* TAG = "bmx280"; static QueueHandle_t samples_queue; -#define CONT_IF_I2C_OK(log, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err:%s",log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); -#define CONT_IF_OK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) return rc; } while(0); - -static esp_err_t read_i2c(uint8_t address, uint8_t* data, int len) { - i2c_cmd_handle_t cmd = i2c_cmd_link_create(); - //set address - CONT_IF_I2C_OK("r1", i2c_master_start(cmd)); - CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (CONFIG_OAP_BMX280_ADDRESS << 1) | I2C_MASTER_WRITE, 1)); - CONT_IF_I2C_OK("r3", i2c_master_write_byte(cmd, address, 1)); - CONT_IF_I2C_OK("r4", i2c_master_stop(cmd)); - CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(CONFIG_OAP_BMX280_I2C_NUM, cmd, 1000/portTICK_PERIOD_MS)); - i2c_cmd_link_delete(cmd); - cmd = 0; - - //we need to read one byte per command (see below) - for (int i=0;i 32767) - { - dig_T2 -= 65536; - } - int dig_T3 = data[5] * 256 + data[4]; - if(dig_T3 > 32767) - { - dig_T3 -= 65536; - } - // pressure coefficents - int dig_P1 = data[7] * 256 + data[6]; - int dig_P2 = data[9] * 256 + data[8]; - if(dig_P2 > 32767) - { - dig_P2 -= 65536; - } - int dig_P3 = data[11]* 256 + data[10]; - if(dig_P3 > 32767) - { - dig_P3 -= 65536; - } - int dig_P4 = data[13]* 256 + data[12]; - if(dig_P4 > 32767) - { - dig_P4 -= 65536; - } - int dig_P5 = data[15]* 256 + data[14]; - if(dig_P5 > 32767) - { - dig_P5 -= 65536; - } - int dig_P6 = data[17]* 256 + data[16]; - if(dig_P6 > 32767) - { - dig_P6 -= 65536; - } - int dig_P7 = data[19]* 256 + data[18]; - if(dig_P7 > 32767) - { - dig_P7 -= 65536; - } - int dig_P8 = data[21]* 256 + data[20]; - if(dig_P8 > 32767) - { - dig_P8 -= 65536; - } - int dig_P9 = data[23]* 256 + data[22]; - if(dig_P9 > 32767) - { - dig_P9 -= 65536; - } - - // Select control measurement register(0xF4) - // Normal mode, temp and pressure over sampling rate = 1(0x27) - CONT_IF_OK(write_i2c_byte(BME280_REG_CTRL_MEAS, 0x27)); - - // Select config register(0xF5) - // Stand_by time = 1000 ms(0xA0) - CONT_IF_OK(write_i2c_byte(BME280_REG_CONFIG, 0xA0)); - vTaskDelay(10/portTICK_PERIOD_MS); - - // Read 8 bytes of data from register(0xF7) - // pressure msb1, pressure msb, pressure lsb, temp msb1, temp msb, temp lsb, humidity lsb, humidity msb - - CONT_IF_OK(read_i2c(0xF7, data, 8)); - - // Convert pressure and temperature data to 19-bits - long adc_p = (((long)data[0] * 65536) + ((long)data[1] * 256) + (long)(data[2] & 0xF0)) / 16; - long adc_t = (((long)data[3] * 65536) + ((long)data[4] * 256) + (long)(data[5] & 0xF0)) / 16; - - // Temperature offset calculations - double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); - double var2 = ((((double)adc_t) / 131072.0 - ((double)dig_T1) / 8192.0) *(((double)adc_t)/131072.0 - ((double)dig_T1)/8192.0)) * ((double)dig_T3); - double t_fine = (long)(var1 + var2); - double cTemp = (var1 + var2) / 5120.0; - //double fTemp = cTemp * 1.8 + 32; - - // Pressure offset calculations - var1 = ((double)t_fine / 2.0) - 64000.0; - var2 = var1 * var1 * ((double)dig_P6) / 32768.0; - var2 = var2 + var1 * ((double)dig_P5) * 2.0; - var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0); - var1 = (((double) dig_P3) * var1 * var1 / 524288.0 + ((double) dig_P2) * var1) / 524288.0; - var1 = (1.0 + var1 / 32768.0) * ((double)dig_P1); - double p = 1048576.0 - (double)adc_p; - p = (p - (var2 / 4096.0)) * 6250.0 / var1; - var1 = ((double) dig_P9) * p * p / 2147483648.0; - var2 = p * ((double) dig_P8) / 32768.0; - double pressure = (p + (var1 + var2 + ((double)dig_P7)) / 16.0) / 100; - - result->temp = cTemp; - result->pressure = pressure; - - return ESP_OK; -} - -/* static void bmx280_task() { - env_data result = {}; - - while (1) { - if (get_sensor_data(&result) == ESP_OK) { - ESP_LOGD(TAG,"Temperature : %.2f C, Pressure: %.2f hPa", result.temp, result.pressure); - if (!xQueueSend(samples_queue, &result, 10000/portTICK_PERIOD_MS)) { - ESP_LOGW(TAG, "env queue overflow"); + // TODO strangely, if this is executed inside main task, LEDC fails to initialise properly PWM (and blinks in funny ways)... easy to reproduce. + if (BME280_init(BME280_MODE_NORMAL, CONFIG_OAP_BMX280_I2C_NUM, CONFIG_OAP_BMX280_ADDRESS) == ESP_OK) { + while(1) { + if (BME280_read() == ESP_OK) { + env_data result = BME280_last_result(); + ESP_LOGD(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.temp, result.pressure, result.humidity); + if (!xQueueSend(samples_queue, &result, 10000/portTICK_PERIOD_MS)) { + ESP_LOGW(TAG, "env queue overflow"); + } + } else { + ESP_LOGW(TAG, "Failed to read data"); } - } else { - ESP_LOGE(TAG, "error"); + vTaskDelay(5000/portTICK_PERIOD_MS); } - vTaskDelay(10000/portTICK_PERIOD_MS); + } else { + ESP_LOGE(TAG, "Failed to initialise"); } + vTaskDelete(NULL); } -QueueHandle_t bmx280_init() { - samples_queue = xQueueCreate(1, sizeof(env_data)); - +static void i2c_setup() { i2c_config_t conf; conf.mode = I2C_MODE_MASTER; conf.sda_io_num = CONFIG_OAP_BMX280_I2C_SDA_PIN; @@ -236,39 +65,11 @@ QueueHandle_t bmx280_init() { conf.master.clk_speed = 100000; i2c_param_config(CONFIG_OAP_BMX280_I2C_NUM, &conf); i2c_driver_install(CONFIG_OAP_BMX280_I2C_NUM, I2C_MODE_MASTER, 0, 0, 0); - - uint8_t chipID; - read_i2c(BME280_CHIP_ID_REG,&chipID,1); - if (chipID == BME280_CHIP_ID) { - ESP_LOGI(TAG, "chip identified as BME280"); - } else { - ESP_LOGW(TAG, "chip identified itself as [%d]", chipID); - } - - xTaskCreate(bmx280_task, "bmx280_task", 1024*2, NULL, 10, NULL); - return samples_queue; -} -*/ - -//--- new -static void bmx280_task() { - BME280_Init(BME280_MODE_FORCED); - while(1) { - BME280_readSensorData(); - env_data result = BME280_data(); - - ESP_LOGD(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.temp, result.pressure, result.humidity); - if (!xQueueSend(samples_queue, &result, 10000/portTICK_PERIOD_MS)) { - ESP_LOGW(TAG, "env queue overflow"); - } - - vTaskDelay(5000/portTICK_PERIOD_MS); - } } QueueHandle_t bmx280_init() { samples_queue = xQueueCreate(1, sizeof(env_data)); + i2c_setup(); xTaskCreate(bmx280_task, "bmx280_task", 1024*2, NULL, 10, NULL); return samples_queue; } - diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c index 419c5fc..01bf7ed 100755 --- a/components/bmx280/i2c_bme280.c +++ b/components/bmx280/i2c_bme280.c @@ -1,32 +1,4 @@ /* -The driver for the temperature, pressure, & humidity sensor BME280 -Official repository: https://github.com/RyAndrew/esp8266_i2c_bme280 -Adapted From: https://github.com/CHERTS/esp8266-i2c_bmp180 -This driver depends on the I2C driver https://github.com/zarya/esp8266_i2c_driver/ - -The MIT License (MIT) - -Copyright (C) 2015 Andrew Rymarczyk - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - * This file is part of OpenAirProject-ESP32. * * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify @@ -46,37 +18,16 @@ THE SOFTWARE. #include #include #include - #include "i2c_bme280.h" -uint16_t calib_dig_T1; -int16_t calib_dig_T2; -int16_t calib_dig_T3; -uint16_t calib_dig_P1; -int16_t calib_dig_P2; -int16_t calib_dig_P3; -int16_t calib_dig_P4; -int16_t calib_dig_P5; -int16_t calib_dig_P6; -int16_t calib_dig_P7; -int16_t calib_dig_P8; -int16_t calib_dig_P9; -int8_t calib_dig_H1; -int16_t calib_dig_H2; -int8_t calib_dig_H3; -int16_t calib_dig_H4; -int16_t calib_dig_H5; -int8_t calib_dig_H6; - -uint8_t osrs_t = 1; //Temperature oversampling x 1 -uint8_t osrs_p = 1; //Pressure oversampling x 1 -uint8_t osrs_h = 1; //Humidity oversampling x 1 - -uint8_t t_sb = 4; //Tstandby, 5=1000ms, 4=500ms -uint8_t filter = 0; //Filter off -uint8_t spi3w_en = 0; //3-wire SPI Disable - -uint8_t BME280_OperationMode = BME280_MODE_NORMAL; +/* + * this driver works fine for both BMP280 and BME280. + * BMP280 reports humidity = 0%. + */ + +typedef int64_t BME280_S64_t; +typedef uint32_t BME280_U32_t; +typedef int32_t BME280_S32_t; #define BME280_W 0xEC #define BME280_R 0xED @@ -91,26 +42,56 @@ uint8_t BME280_OperationMode = BME280_MODE_NORMAL; #define BMP280_CHIP_ID2 (0x57) #define BMP280_CHIP_ID3 (0x58) -signed long int t_fine; -signed long int temp_act; -unsigned long int press_act, hum_act; +static uint16_t dig_T1; +static int16_t dig_T2; +static int16_t dig_T3; +static uint16_t dig_P1; +static int16_t dig_P2; +static int16_t dig_P3; +static int16_t dig_P4; +static int16_t dig_P5; +static int16_t dig_P6; +static int16_t dig_P7; +static int16_t dig_P8; +static int16_t dig_P9; +static int8_t dig_H1; +static int16_t dig_H2; +static int8_t dig_H3; +static int16_t dig_H4; +static int16_t dig_H5; +static int8_t dig_H6; + +static uint8_t osrs_t = 1; //Temperature oversampling x 1 +static uint8_t osrs_p = 1; //Pressure oversampling x 1 +static uint8_t osrs_h = 1; //Humidity oversampling x 1 + +static uint8_t t_sb = 4; //Tstandby, 5=1000ms, 4=500ms +static uint8_t filter = 0; //Filter off +static uint8_t spi3w_en = 0; //3-wire SPI Disable + +static uint8_t operation_mode; +static uint8_t i2c_num; +static uint8_t device_addr; + +BME280_S32_t t_fine; +BME280_S32_t temp_act; +BME280_U32_t press_act, hum_act; static char* TAG = "i2c_bmx280"; -static void BME280_writeConfigRegisters(void); -static void BME280_readCalibrationRegisters(void); +static env_data result = {}; #define CONT_IF_I2C_OK(log, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err:%s",log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); #define CONT_IF_OK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) return rc; } while(0); -static esp_err_t read_i2c(uint8_t address, uint8_t* data, int len) { +static esp_err_t read_i2c(uint8_t reg, uint8_t* data, int len) { i2c_cmd_handle_t cmd = i2c_cmd_link_create(); //set address CONT_IF_I2C_OK("r1", i2c_master_start(cmd)); - CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (CONFIG_OAP_BMX280_ADDRESS << 1) | I2C_MASTER_WRITE, 1)); - CONT_IF_I2C_OK("r3", i2c_master_write_byte(cmd, address, 1)); + CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (device_addr << 1) | I2C_MASTER_WRITE, 1)); + CONT_IF_I2C_OK("r3", i2c_master_write_byte(cmd, reg, 1)); CONT_IF_I2C_OK("r4", i2c_master_stop(cmd)); - CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(CONFIG_OAP_BMX280_I2C_NUM, cmd, 1000/portTICK_PERIOD_MS)); + CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(i2c_num, cmd, 1000/portTICK_PERIOD_MS)); i2c_cmd_link_delete(cmd); cmd = 0; @@ -118,208 +99,199 @@ static esp_err_t read_i2c(uint8_t address, uint8_t* data, int len) { for (int i=0;i> 4) & 0x0F); - calib_dig_H6 = data[6]; -} + if (read_i2c(0xE1,data,7) != ESP_OK) return ESP_FAIL; -bool BME280_sendI2cTriggerForcedRead(){ - uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | BME280_OperationMode; - write_i2c_byte(BME280_REG_CTRL_MEAS, ctrl_meas_reg); - vTaskDelay(10/portTICK_PERIOD_MS); // wait 10ms for worst case max sensor read time - return 1; + dig_H2 = (data[1] << 8) | data[0]; + dig_H3 = data[2]; + dig_H4 = (data[3] << 4) | (0x0f & data[4]); + dig_H5 = (data[5] << 4) | ((data[4] >> 4) & 0x0F); + dig_H6 = data[6]; + return ESP_OK; } -static signed long int BME280_calibration_Temp(signed long int adc_T) -{ - signed long int var1, var2, T; - var1 = ((((adc_T >> 3) - ((signed long int)calib_dig_T1<<1))) * ((signed long int)calib_dig_T2)) >> 11; - var2 = (((((adc_T >> 4) - ((signed long int)calib_dig_T1)) * ((adc_T>>4) - ((signed long int)calib_dig_T1))) >> 12) * ((signed long int)calib_dig_T3)) >> 14; - - t_fine = var1 + var2; - T = (t_fine * 5 + 128) >> 8; - return T; +/** + * following compensate methods were taken directly from BME280 (BMP280) datasheet. + * float precision gives best accuracy. + */ + +// Returns temperature in DegC, double precision. Output value of “51.23” equals 51.23 DegC. +// t_fine carries fine temperature as global value +static double BME280_compensate_T_double(BME280_S32_t adc_T) { + double var1, var2, T; + var1 = (((double) adc_T) / 16384.0 - ((double)dig_T1)/1024.0) * ((double)dig_T2); + var2 = ((((double) adc_T) / 131072.0 - ((double)dig_T1)/8192.0) * + (((double)adc_T)/131072.0 - ((double) dig_T1)/8192.0)) * ((double)dig_T3); + t_fine = (BME280_S32_t) (var1 + var2); + T = (var1 + var2) / 5120.0; + return T; } - -static unsigned long int BME280_calibration_Press(signed long int adc_P) -{ - signed long int var1, var2; - unsigned long int P; - var1 = (((signed long int)t_fine)>>1) - (signed long int)64000; - var2 = (((var1>>2) * (var1>>2)) >> 11) * ((signed long int)calib_dig_P6); - var2 = var2 + ((var1*((signed long int)calib_dig_P5))<<1); - var2 = (var2>>2)+(((signed long int)calib_dig_P4)<<16); - var1 = (((calib_dig_P3 * (((var1>>2)*(var1>>2)) >> 13)) >>3) + ((((signed long int)calib_dig_P2) * var1)>>1))>>18; - var1 = ((((32768+var1))*((signed long int)calib_dig_P1))>>15); - if (var1 == 0){ - return 0; - } - P = (((unsigned long int)(((signed long int)1048576)-adc_P)-(var2>>12)))*3125; - if(P<0x80000000){ - P = (P << 1) / ((unsigned long int) var1); - }else{ - P = (P / (unsigned long int)var1) * 2; - } - var1 = (((signed long int)calib_dig_P9) * ((signed long int)(((P>>3) * (P>>3))>>13)))>>12; - var2 = (((signed long int)(P>>2)) * ((signed long int)calib_dig_P8))>>13; - P = (unsigned long int)((signed long int)P + ((var1 + var2 + calib_dig_P7) >> 4)); - return P; +// Returns pressure in Pa as double. Output value of “96386.2” equals 96386.2 Pa = 963.862 hPa +static double BME280_compensate_P_double(BME280_S32_t adc_P) { + double var1, var2, p; + var1 = ((double) t_fine / 2.0) - 64000.0; + var2 = var1 * var1 * ((double) dig_P6) / 32768.0; + var2 = var2 + var1 * ((double) dig_P5) * 2.0; + var2 = (var2 / 4.0) + (((double) dig_P4) * 65536.0); + var1 = (((double) dig_P3) * var1 * var1 / 524288.0 + + ((double) dig_P2) * var1) / 524288.0; + var1 = (1.0 + var1 / 32768.0) * ((double) dig_P1); + if (var1 == 0.0) { + return 0; // avoid exception caused by division by zero + } + p = 1048576.0 - (double)adc_P; + p = (p - (var2 / 4096.0)) * 6250.0 / var1; + var1 = ((double) dig_P9) * p * p / 2147483648.0; + var2 = p * ((double) dig_P8) / 32768.0; + p = p + (var1 + var2 + ((double) dig_P7)) / 16.0; + return p; } -static unsigned long int BME280_calibration_Hum(signed long int adc_H) -{ - signed long int v_x1; - - v_x1 = (t_fine - ((signed long int)76800)); - v_x1 = (((((adc_H << 14) -(((signed long int)calib_dig_H4) << 20) - (((signed long int)calib_dig_H5) * v_x1)) + - ((signed long int)16384)) >> 15) * (((((((v_x1 * ((signed long int)calib_dig_H6)) >> 10) * - (((v_x1 * ((signed long int)calib_dig_H3)) >> 11) + ((signed long int) 32768))) >> 10) + (( signed long int)2097152)) * - ((signed long int) calib_dig_H2) + 8192) >> 14)); - v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((signed long int)calib_dig_H1)) >> 4)); - v_x1 = (v_x1 < 0 ? 0 : v_x1); - v_x1 = (v_x1 > 419430400 ? 419430400 : v_x1); - return (unsigned long int)(v_x1 >> 12); +// Returns humidity in %rH as as double. Output value of “46.332” represents 46.332 %rH +static double BME280_compensate_H_double(BME280_S32_t adc_H) { + double var_H; + var_H = (((double)t_fine) - 76800.0); + var_H = (adc_H - (((double)dig_H4) * 64.0 + ((double)dig_H5) / 16384.0 * var_H)) * + (((double)dig_H2) / 65536.0 * (1.0 + ((double)dig_H6) / 67108864.0 * var_H * + (1.0 + ((double)dig_H3) / 67108864.0 * var_H))); + var_H = var_H * (1.0 - ((double)dig_H1) * var_H / 524288.0); + if (var_H > 100.0) + var_H = 100.0; + else if (var_H < 0.0) + var_H = 0.0; + return var_H; } -static env_data result = {}; - -bool BME280_sendI2cReadSensorData(){ - if(BME280_OperationMode == BME280_MODE_FORCED){ - if(!BME280_sendI2cTriggerForcedRead()){ - return 0; +esp_err_t BME280_read(){ + if(operation_mode == BME280_MODE_FORCED){ + if(trigger_force_read() != ESP_OK){ + return ESP_FAIL; } } uint8_t data[8]; - read_i2c(0xF7,data,8); - - unsigned long int hum_raw, temp_raw, pres_raw; + if (read_i2c(0xF7,data,8) != ESP_OK) { + return ESP_FAIL; + } //0xF7 - pressure - pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4); + BME280_S32_t pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4); //0xFA - temp - temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4); + BME280_S32_t temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4); //0xFD - humidity - hum_raw = (data[6] << 8) | data[7]; + BME280_S32_t hum_raw = (data[6] << 8) | data[7]; - result.temp = BME280_calibration_Temp(temp_raw) / 100.0; //Celsius - result.pressure = BME280_calibration_Press(pres_raw) / 100.0; //hPA - result.humidity = BME280_calibration_Hum(hum_raw) / 1024.0; // pct + result.temp = BME280_compensate_T_double(temp_raw); //Celsius + result.pressure = BME280_compensate_P_double(pres_raw) / 100.0; //hPA + result.humidity = BME280_compensate_H_double(hum_raw);// pct - return 1; + return ESP_OK; } -void BME280_readSensorData(){ - BME280_sendI2cReadSensorData(); +env_data BME280_last_result() { + return result; } -env_data BME280_data() { - return result; +esp_err_t BME280_verify_chip() { + uint8_t chipID = 0; + uint8_t attemp = 0; + while (attemp++ <= 5 || read_i2c(BME280_CHIP_ID_REG,&chipID,1) != ESP_OK) { + vTaskDelay(20/portTICK_PERIOD_MS); + } + + switch (chipID) { + case BME280_CHIP_ID: + ESP_LOGI(TAG,"detected BME280 (0x%X)", chipID); + return ESP_OK; + case BMP280_CHIP_ID1: + case BMP280_CHIP_ID2: + case BMP280_CHIP_ID3: + ESP_LOGI(TAG,"detected BMP280 - no humidity data (0x%X)", chipID); + return ESP_OK; + default: + ESP_LOGW(TAG,"detected unknown chip (0x%X), disable env data", chipID); + return ESP_FAIL; + } } -bool BME280_Init(uint8_t operationMode) +esp_err_t BME280_init(uint8_t _operation_mode, uint8_t _i2c_num, uint8_t _device_addr) { - i2c_config_t conf; - conf.mode = I2C_MODE_MASTER; - conf.sda_io_num = CONFIG_OAP_BMX280_I2C_SDA_PIN; - conf.scl_io_num = CONFIG_OAP_BMX280_I2C_SCL_PIN; - conf.sda_pullup_en = GPIO_PULLUP_ENABLE; - conf.scl_pullup_en = GPIO_PULLUP_ENABLE; - conf.master.clk_speed = 100000; - i2c_param_config(CONFIG_OAP_BMX280_I2C_NUM, &conf); - i2c_driver_install(CONFIG_OAP_BMX280_I2C_NUM, I2C_MODE_MASTER, 0, 0, 0); - - if (BME280_verifyChipId() != ESP_OK) { - return 0; + operation_mode = _operation_mode; + i2c_num = _i2c_num; + device_addr = _device_addr; + + if (BME280_verify_chip() != ESP_OK) { + return ESP_FAIL; } - BME280_OperationMode = operationMode; BME280_writeConfigRegisters(); BME280_readCalibrationRegisters(); - return 1; + return ESP_OK; } diff --git a/components/bmx280/i2c_bme280.h b/components/bmx280/i2c_bme280.h index 01f0169..51f071b 100755 --- a/components/bmx280/i2c_bme280.h +++ b/components/bmx280/i2c_bme280.h @@ -1,31 +1,4 @@ /* -The driver for the temperature, pressure, & humidity sensor BME280 -Official repository: https://github.com/RyAndrew/esp8266_i2c_bme280 -Adapted From: https://github.com/CHERTS/esp8266-i2c_bmp180 -This driver depends on the I2C driver https://github.com/zarya/esp8266_i2c_driver/ - -The MIT License (MIT) - -Copyright (C) 2015 Andrew Rymarczyk - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - * This file is part of OpenAirProject-ESP32. * * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify @@ -42,7 +15,6 @@ THE SOFTWARE. * along with OpenAirProject-ESP32. If not, see . */ - #ifndef __I2C_BME280_H #define __I2C_BME280_H @@ -50,17 +22,15 @@ THE SOFTWARE. #include #include "oap_common.h" - - #define BME280_MODE_NORMAL 0x03 //reads sensors at set interval #define BME280_MODE_FORCED 0x01 //reads sensors once when you write this register -//#define BME280_DEBUG 1 //uncomment for debugging messages +esp_err_t BME280_verify_chip(); -bool BME280_Init(uint8_t operationMode); +esp_err_t BME280_init(uint8_t operation_mode, uint8_t i2c_num, uint8_t device_addr); -void BME280_readSensorData(void); +esp_err_t BME280_read(); -env_data BME280_data(); +env_data BME280_last_result(); #endif diff --git a/components/peripherals/rgb_led.c b/components/peripherals/rgb_led.c index dba3440..1b2a39e 100644 --- a/components/peripherals/rgb_led.c +++ b/components/peripherals/rgb_led.c @@ -74,7 +74,37 @@ void fade_to_color(rgb color, int time) { } } +static void setup_ledc() { + MAX_DUTY = pow(2,ledc_timer.bit_num)-1; + ledc_timer_config(&ledc_timer); + + ledc_channel_config_t ledc_channel = { + .channel = -1, + .duty = -1, + .gpio_num = -1, + //GPIO INTR TYPE, as an example, we enable fade_end interrupt here. + .intr_type = LEDC_INTR_FADE_END, + //set LEDC mode, from ledc_mode_t + .speed_mode = speed_mode, + //set LEDC timer source, if different channel use one timer, + //the frequency and bit_num of these channels should be the same + .timer_sel = LEDC_TIMER_0 + }; + + for (int c = 0; c < 3; c++) { + ledc_channel.channel = c; //LEDC_CHANNEL_0 to LEDC_CHANNEL_2 + ledc_channel.gpio_num = led_gpio[c]; + ledc_channel.duty = 0; + gpio_intr_disable(led_gpio[c]); + ledc_channel_config(&ledc_channel); + } + //initialize fade service. + ledc_fade_func_install(0); +} + static void led_cycle() { + + rgb color = {.v={1,1,1}}; led_cmd cmd = { .mode = LED_SET, @@ -109,33 +139,8 @@ static void led_cycle() { void led_init(int enabled, xQueueHandle _cmd_queue) { cmd_queue = _cmd_queue; - MAX_DUTY = pow(2,ledc_timer.bit_num)-1; - ledc_timer_config(&ledc_timer); - - ledc_channel_config_t ledc_channel = { - .channel = -1, - .duty = -1, - .gpio_num = -1, - //GPIO INTR TYPE, as an example, we enable fade_end interrupt here. - .intr_type = LEDC_INTR_FADE_END, - //set LEDC mode, from ledc_mode_t - .speed_mode = speed_mode, - //set LEDC timer source, if different channel use one timer, - //the frequency and bit_num of these channels should be the same - .timer_sel = LEDC_TIMER_0 - }; - - for (int c = 0; c < 3; c++) { - ledc_channel.channel = c; //LEDC_CHANNEL_0 to LEDC_CHANNEL_2 - ledc_channel.gpio_num = led_gpio[c]; - ledc_channel.duty = 0; - gpio_intr_disable(led_gpio[c]); - ledc_channel_config(&ledc_channel); - } - if (enabled) { - //initialize fade service. - ledc_fade_func_install(0); + setup_ledc(); //this often conflicts with other i/o operations? e.g. bme280 init. xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, 10, NULL); } } diff --git a/coredump.sh b/coredump.sh new file mode 100755 index 0000000..0a2fb2f --- /dev/null +++ b/coredump.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +$IDF_PATH/components/espcoredump/espcoredump.py info_corefile -t b64 -c core.dat build/sensor-esp32.elf \ No newline at end of file diff --git a/doc/BST-BME280_DS001-10.pdf b/doc/BST-BME280_DS001-10.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b738d3f583b5e6b8c8f5d7a8081532f5b77dc00c GIT binary patch literal 1937299 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
SFb!EprWevV0iwLSqkCHxZx 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
j=F{?AgNw~q2%1NPAZ~!TR8<-<2eQFAPQ>+ zG$tBbWG`C;ETCt%3<#vBdCqY&I@sH0iJAD`olJl7>9eFsoxX8rmd9bP&BIDXp=$BF z^CW=vtwZO0T|a%|iS#tjbEF;i!hZX%J z2>lj6Yts9?g~L3al0Qn_QLz@>hfbL5y8xh;2_R3z&Vy;n*5LDlcyJ`bgX?E1&noqe zzK9FU%!SiVkjM7-ae)>-0$Q5M^XUmvL+DGmU>!P(g z)xg_t%|Kckf6$_2?ev8--9+&1Ed=k!#PZ(~51DPxyNj}F_Im_N*wb$iYzpEFN%?`k z+l%xqA8_~j4v0*7p_D^VhF+rX#H@GiPgggh2KGV)l0?qS^i9lqmjqD2jOB%5LrImo zMS@PM)FgKA5VV$zzD(WC&lTM4t4R9G==XJd1-RK}T(;Xw7>Yqig z!INpog#1*f^(&E|YBneBF=3w=ZPAJ^U{^I{R!I#%riWopcbCuq{hxc#|3?lL_Rf!k z)FuvRz*pK)f9YcxHuxCjSKngCD*#lEg%*G}+?5f$ak1dQaNVd{=%0AL{mW87&W96# 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 z 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 3iVtAdO$C@={2s5{~Q!rfwz&um@ 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≫xdM#Q8{Oxx($F_TP8hRBqbf>Q19T_QmfaQr`IWf%kH!&O@n&F$-Or zx5ECTkSi+K_sFQ>JvVi6Mlki9YbVZ@MDlK==;o{t|DSlwI#c6s{9f5g)~V-b5Yy1B^ZSoxK$yO_Zhb87uHH?A9<$1&-7Ehd+O{9X~s z!{d|RnaxSS`d)4>b3g3vw+1GFdOQ(6C^(i2`y~0W!41n_0m-WUouenV0+}QJc`}Ia zYZ?;J-Gn2`w`Yyo&*V;6;BM$1!0Wac4bZ6U429OG_G+q6!&4cn9=CB?=WqS!0}T~o zqtrL^Fr1ZQdiw?Z_)uo`b;|(tv9pqY_!nZ^k5@;f^U6mGDGca3KfO+T+O^nOq861b z?7{WPEnz4nOfkx)p8v+Q`Cu%6eBSdSP=VCw#zlX`L7pY-PkpFfa3Q%M@l>yPz}}ZG z7_!)1kG|FL%73q!vHs(i@xL{*|5>A9V`BIZyZC?CXf~>UaoAsjeZYSr@vFZyW~>;~ zk%A3BT}*-;w5|0K-p~T6&9@m+pGFoQgrP@#$nfIt#P2{>h(ARcCRkg51H#~ysTrbH zgewi1*DG>=*1haUl+|kQpgpx5VIS zeec~C>{qDJg_r2y&bX{pJYojF+<9tO*|cQrUoNnPy!Y^W-QRk@Ka4C*ZFxI&b6s4n z_V9WuF38JkFUBWDqWw{_4IlV=g&+F5Eg~;O~D+b;(2TTdr**1KH^?J9lm7aGM=XS?;Z$m z0{yVs?{f&fArU#ba)9<~uRLy@yP=9BR1MD}KG~+u_z3ggsd}K?8v`xy6IAjvSIiO7 zl1=OvENsrRX3#n6te9xyLy&kma3gC8y9C~4%x{UB zfFb&r1J9!P(~G|h5hlQ6BZ_<%;z8EU#*`#Wa7$i=5q66~88)#2RD(swOg9eLsb^@! zNA3Y*jXY3fHgHE4%`3WN(`a{)hr+qGLTb;$%Er z&cOe@*F$%>hU)^s0$y!OsHO_&YMqCvAdfR8&+fTG1St5qOukfa1j?f`%u%)yMM%m9 zU4=o_j~{sTZ%sFlNgZwSmGk6*X#N0X?h}WxnOtqJmh`tvF2!GlEllHPXgyh2u z%gem6+(*|7W{(x$=H3o6cTmi(B(%J!*{mgT0SB6#YIV^01ezj0^x5^TxA~wL)w&8* z;iG{-1xXc}urOF|;WB|aZk#5|E@yB)FFx1uX!J(^s1bC`6HWu%NP}BOxH+And>lM@{diA<)xl%& z+Bq&@D*+pHrdzZ+E&=iQ@F$&pz{s1~HR0Q>abtN#%kSr?+m<{&40f+#Lf$Xqxm+?^F4%&Kt#6)-tMEAe*?2r`eNK2c?A!--55PS;yDy2j zoK{yt-eZh=Kcmu?&Gm6uiGCukrE)yDtY^gA_TW73pFKmX1wn&v6qF;hTNeGYZD3zV z{`e`H@^HB*;^)Mb*SmfJ19f}f{;3lrFg=q~;k0Al_Pi*&=`;6B+qa8A;&7&PUPuVh z(i*XrjoLS@wQBB=mKxD<_n(dbe7%`|;K+{n3!WLQw%QV;EiFaseBJG)-z3NP)t-@= z2lAUm=$bDX@rogIbIjL+L6nI?A|4XzRv`=2Jc^u%Gk^Rak%kBBACaa&Z{++vdd-69 z!Q$Rzt8T+wcyjyHSMJFU=Sh^lXOG>Oxr!po8eQ~9r6Fexc^sHlMN9ZcrFpoy;&Uf` z*35(-dRrzx`zroNrGbP0t6yU>ago3RBm$~&s_Ose)`_v6_)l%l_T3m*zd*}D0!hLE zYz~|ddQo)9-#v zSk}L0_ycf=<3BP@I-V35#@)gYy<)pg=uu9LfVhT;)OwPB~h5wk=(8b zo!akg@0R�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

    9kh5D&qx!8b`aAg&%9jR%S9vcSi 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ª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

    %EBk*Zm0@ZL^t|9RVO(_79%fb?nav~_e8 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%0DA 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∓CW9zyMP_?1<{GtyW!;c$j|r3DJE}9;(@P<( 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 U5uENS6u-HN+W891!;(uIE} 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 z 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

    ejAhR_PiH((w>g+$ktG&~9L4V*S{ODfC7{+2X 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 z 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

    2Q{@q?bJED&m?hp!Ge`pjN<@G&6 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 v?GqW*1su!$u{WASa1oyA~zc83|u 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

    dR+~8(WSrp%OWmGQs^ilnQtV) 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

    Lk!Y+J<*V<|D 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�cVTM%up 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]+j1WuCe6a_~hAHyD@>&b*9Jd#K8Qiv$e|8 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 z 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�arfF2<^|23 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 literal 0 HcmV?d00001 From b8be5fde807968f39eed819f13d17f5142d2db4a Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 16 Feb 2017 21:02:25 +0100 Subject: [PATCH 007/200] change default AP IP to 192.168.1.1 improved control panel, menuconfig and other small fixes --- README.md | 13 ++++--- components/bootwifi/bootwifi.c | 68 ++++++++++++++++------------------ components/bootwifi/index.html | 35 ++++++++++++----- main/Kconfig | 61 ------------------------------ main/Kconfig.projbuild | 25 +++++++++++++ 5 files changed, 90 insertions(+), 112 deletions(-) delete mode 100644 main/Kconfig create mode 100644 main/Kconfig.projbuild diff --git a/README.md b/README.md index 4ecbb7c..1d35a32 100644 --- a/README.md +++ b/README.md @@ -97,15 +97,18 @@ That's it. After booting the sensor for the first time, it will switch into Access Point mode and be visible as ssid: OpenAirProject-XXXX - pass: cleanair + pass: cleanair //configurable via menuconfig After connecting to this network, open following url - http://192.168.1.4 + http://192.168.1.1 -and configure sensor settings using sensor control panel. -If there's a need to reconfigure wifi settings, reboot the device with a control button pressed down - -it will switch into AP mode. +and configure sensor settings using web control panel (most notably - your home wifi ssid/pass). +After rebooting sensor will connect to your wifi. Web control panel will still be available, but at IP that was specified or assigned to sensor by your router. + + +If there's a need to force sensor into Access Point mode again (e.g. when it can't connect to specified wifi), +reboot the device with a control button pressed down. ![Schema](doc/images/sensor_settings.png?raw=true =320x) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index f60e15d..4667232 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -1,7 +1,4 @@ /** - * Created on: Nov 25, 2016 - * Author: kolban - * * This file is part of OpenAirProject-ESP32. * * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify @@ -45,7 +42,7 @@ * The same effect can be achieved by pressing down control button during startup. * * In AP mode, sensor creates OpenAirProject-XXXX network (default password: cleanair), - * where it listens at http://192.168.1.4:80 and exposes simple html/rest API to modify settings. + * where it listens at http://192.168.1.1:80 and exposes simple html/rest API to modify settings. */ extern const uint8_t index_html_start[] asm("_binary_index_html_start"); @@ -54,6 +51,10 @@ extern const uint8_t index_html_end[] asm("_binary_index_html_end"); #define SSID_SIZE (32) // Maximum SSID size #define PASSWORD_SIZE (64) // Maximum password size +#define OAP_ACCESS_POINT_IP "192.168.1.1" +#define OAP_ACCESS_POINT_NETMASK "255.255.255.0" + + typedef struct { char ssid[SSID_SIZE]; char password[PASSWORD_SIZE]; @@ -202,6 +203,21 @@ static void mongooseTask(void *data) { return; } // mongooseTask +int set_access_point_ip() +{ + tcpip_adapter_ip_info_t info = {}; + inet_pton(AF_INET, OAP_ACCESS_POINT_IP, &info.ip); + inet_pton(AF_INET, OAP_ACCESS_POINT_NETMASK, &info.netmask); + inet_pton(AF_INET, OAP_ACCESS_POINT_IP, &info.gw); + + esp_err_t err; + + tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP); + err = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &info); + tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); + return err; +} + /** * An ESP32 WiFi event handler. @@ -226,38 +242,21 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { switch(event->event_id) { // When we have started being an access point, then start being a web server. case SYSTEM_EVENT_AP_START: { // Handle the AP start event + esp_err_t err; + if ((err=set_access_point_ip()) != ESP_OK) { + ESP_LOGW(tag, "failed to set ip address [err %x], use default", err); + } tcpip_adapter_ip_info_t ip_info; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip_info); //192.168.4.1 this is the default IP of all esp devices //http://www.esp8266.com/viewtopic.php?f=29&t=12124 - /* -from arduino-esp32 -bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet) -{ - - if(!WiFi.enableAP(true)) { - // enable AP failed - return false; - } - - tcpip_adapter_ip_info_t info; - info.ip.addr = static_cast(local_ip); - info.gw.addr = static_cast(gateway); - info.netmask.addr = static_cast(subnet); - tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP); - if(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &info)) { - return tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); - } - return false; -} - - */ ESP_LOGI(tag, "**********************************************"); - ESP_LOGI(tag, "* We are now an access point and you can point") - ESP_LOGI(tag, "* your browser to http://"IPSTR, IP2STR(&ip_info.ip)); + ESP_LOGI(tag, "* ACCESS POINT MODE") + ESP_LOGI(tag, "* point your browser to http://"IPSTR, IP2STR(&ip_info.ip)); ESP_LOGI(tag, "**********************************************"); + // Start Mongoose ... if (!g_mongooseStarted) { @@ -270,26 +269,21 @@ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress // If we fail to connect to an access point as a station, become an access point. case SYSTEM_EVENT_STA_DISCONNECTED: { ESP_LOGD(tag, "Station disconnected - reconnecting"); - /* * we cannot just switch to APi every time when wifi fails, in most cases we should try to reconnect. * although if the failure happened just after user configured wifi, there's a good chance * that he made a mistake and we should switch to AP. * * TODO remember successful connection to wifi and do not fallback to AP if we ever managed connect to wifi. - * */ - //become_access_point(); restore_wifi_setup(); break; - } // SYSTEM_EVENT_AP_START + } - // If we connected as a station then we are done and we can stop being a - // web server. case SYSTEM_EVENT_STA_GOT_IP: { ESP_LOGD(tag, "********************************************"); - ESP_LOGD(tag, "* We are now connected and ready to do work!") - ESP_LOGD(tag, "* - Our IP address is: " IPSTR, IP2STR(&event->event_info.got_ip.ip_info.ip)); + ESP_LOGD(tag, "* Connected with WIFI network") + ESP_LOGD(tag, "* Sensor IP address: " IPSTR, IP2STR(&event->event_info.got_ip.ip_info.ip)); ESP_LOGD(tag, "********************************************"); initialize_sntp(); @@ -386,7 +380,7 @@ static void become_access_point() { .ap = { .ssid="", .ssid_len=0, - .password="cleanair", //>= 8 chars + .password=CONFIG_OAP_AP_PASSWORD, //>= 8 chars .channel=0, .authmode=WIFI_AUTH_WPA_WPA2_PSK, .ssid_hidden=0, diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html index 340f3a2..5ca5ee6 100644 --- a/components/bootwifi/index.html +++ b/components/bootwifi/index.html @@ -3,6 +3,8 @@ OAP Sensor + + -

    +

    OpenAirProject Sensor

    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Æ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

    diff --git a/main/Kconfig b/main/Kconfig deleted file mode 100644 index b13ccfb..0000000 --- a/main/Kconfig +++ /dev/null @@ -1,61 +0,0 @@ -menu "OAP Main" - -menu "PM Measurement" - -choice OAP_PM_SENSOR_MODE - bool "used outdoor" - default OAP_PM_SENSOR_MODE_INDOOR - help - PMS sensor has two modes: atmospheric (outdoor) and standard (indoor). - Mode has to be set manually to properly compensate results. - - config OAP_PM_SENSOR_MODE_OUTDOOR - bool "Outdoor" - config OAP_PM_SENSOR_MODE_INDOOR - bool "Indoor" -endchoice - -config OAP_PM_SENSOR_OUTDOOR - int - default 0 if OAP_PM_SENSOR_MODE_INDOOR - default 1 if OAP_PM_SENSOR_MODE_OUTDOOR - -config OAP_PM_WARM_UP_TIME - int "PM sensor warm-up time (sec)" - default 10 - help - PM sensor starts sending results imediatelly after enabling it (set line), but due - to its mechanical construction first results are not reliable due to insufficient - air flow. We ignore samples sends during warm-up period (suggested values: 10-30 sec) - and let its working conditions to stabilise. - -config OAP_PM_MEAS_TIME - int "PM sensor measurement time (sec)" - default 30 - help - Time of a single measurments including warm-up time. Samples collected during this period (after warm-up) - are be used to compute average result. - -config OAP_PM_MEAS_INTERVAL - int "PM sensor measurement interval (sec)" - default 300 - help - Time between subsequent measurements - -config OAP_PM_SAMPLE_BUF_SIZE - int "PM sensor sample buffer size" - default 120 - help - Max number of samples that are stored during measurement period. PMSx003 sensor sends ~1 sample / sec. - If more samples are collected during measurement, older samples get overriden. - -config OAP_RESULT_BUFFER_SIZE - int "measurements buffer size" - default 1 - help - Buffer for data that cannot be immediately published because sensor is offline. - For some services that can accept only real-time data, this should be set to 1. - -endmenu - -endmenu \ No newline at end of file diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild new file mode 100644 index 0000000..55651ae --- /dev/null +++ b/main/Kconfig.projbuild @@ -0,0 +1,25 @@ +menu "OpenAirProject" + +config OAP_AP_PASSWORD + string "AccessPoint password" + default "cleanair" + help + Password to authenticate to WiFi Access Point when sensor runs in this mode. + Minimum 8 characters. + +config OAP_PM_SAMPLE_BUF_SIZE + int "PM sensor sample buffer size" + default 120 + help + Max number of samples that are stored during measurement period. PMSx003 sensor sends ~1 sample / sec. + If more samples are collected during measurement, older samples get overriden. + +config OAP_RESULT_BUFFER_SIZE + int "measurements buffer size" + default 1 + help + Buffer for data that cannot be immediately published because sensor is offline. + For some services that can accept only real-time data, this should be set to 1. + + +endmenu \ No newline at end of file From af875cbe2e30146bdd5f2bbfb5e547435c9162d9 Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 16 Feb 2017 21:32:50 +0100 Subject: [PATCH 008/200] fix led being 'too green' --- components/peripherals/rgb_led.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/peripherals/rgb_led.c b/components/peripherals/rgb_led.c index 1b2a39e..e6bc891 100644 --- a/components/peripherals/rgb_led.c +++ b/components/peripherals/rgb_led.c @@ -37,7 +37,6 @@ static xQueueHandle cmd_queue; static gpio_num_t led_gpio[] = {CONFIG_OAP_LED_R_PIN,CONFIG_OAP_LED_G_PIN,CONFIG_OAP_LED_B_PIN}; -#define BRIGHTNESS 1.0 #define DEFAULT_FREQ 1500; static ledc_mode_t speed_mode = LEDC_HIGH_SPEED_MODE; @@ -56,8 +55,13 @@ static ledc_timer_config_t ledc_timer = { static int MAX_DUTY = 0; static rgb LED_OFF = {.v={0,0,0}}; +//brightness for each of R/G/B. LED Green tends to be the brightest +//so if we use the same resistors we need to compensate for it to get proper orange. +//this probably should be configureble since it depends on particular LED and resistors. +static float brightness[] = {1.0f,0.3f,1.0f}; + static int calc_duty(rgb color, uint8_t c) { - return lroundf(MAX_DUTY * fminf(color.v[c] * BRIGHTNESS, 1.0)); + return lroundf(MAX_DUTY * fminf(color.v[c] * brightness[c], 1.0)); } void set_color(rgb color) { From ef64d7c6d770dff1db65cc3c094ec841ee8a5ffc Mon Sep 17 00:00:00 2001 From: kris Date: Sat, 18 Feb 2017 13:28:14 +0100 Subject: [PATCH 009/200] working example --- .cproject | 1 + components/awsiot/awsiot_rest.c | 336 ++++++++++++++++++ components/awsiot/component.mk | 10 + .../wifi.h => awsiot/include/awsiot_rest.h} | 14 +- components/awsiot/server_root_cert.pem | 27 ++ components/net/wifi.c | 102 ------ main/main.c | 6 +- 7 files changed, 386 insertions(+), 110 deletions(-) create mode 100644 components/awsiot/awsiot_rest.c create mode 100644 components/awsiot/component.mk rename components/{net/include/wifi.h => awsiot/include/awsiot_rest.h} (77%) create mode 100644 components/awsiot/server_root_cert.pem delete mode 100644 components/net/wifi.c diff --git a/.cproject b/.cproject index dc4eebf..f3b44f0 100644 --- a/.cproject +++ b/.cproject @@ -33,6 +33,7 @@ + diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c new file mode 100644 index 0000000..bb5ebb0 --- /dev/null +++ b/components/awsiot/awsiot_rest.c @@ -0,0 +1,336 @@ +/* + * aws_iot_rest.c + * + * Created on: Feb 18, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +/* HTTPS GET Example using plain mbedTLS sockets + * + * Contacts the howsmyssl.com API via TLS v1.2 and reads a JSON + * response. + * + * Adapted from the ssl_client1 example in mbedtls. + * + * Original Copyright (C) 2006-2016, ARM Limited, All Rights Reserved, Apache 2.0 License. + * Additions Copyright (C) Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD, Apache 2.0 License. + * + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_wifi.h" +#include "esp_event_loop.h" +#include "esp_log.h" +#include "esp_system.h" +#include "nvs_flash.h" + +#include "lwip/err.h" +#include "lwip/sockets.h" +#include "lwip/sys.h" +#include "lwip/netdb.h" +#include "lwip/dns.h" + +#include "mbedtls/platform.h" +#include "mbedtls/net.h" +#include "mbedtls/debug.h" +#include "mbedtls/ssl.h" +#include "mbedtls/entropy.h" +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/error.h" +#include "mbedtls/certs.h" + +#include "include/awsiot_rest.h"; + + +/* Constants that aren't configurable in menuconfig */ +#define WEB_SERVER "www.howsmyssl.com" +#define WEB_PORT "443" +#define WEB_URL "https://www.howsmyssl.com/a/check" + +static const char *TAG = "example"; + +static const char *REQUEST = "GET " WEB_URL " HTTP/1.1\n" + "Host: "WEB_SERVER"\n" + "User-Agent: esp-idf/1.0 esp32\n" + "\n"; + +/* Root cert for howsmyssl.com, taken from server_root_cert.pem + + The PEM file was extracted from the output of this command: + openssl s_client -showcerts -connect www.howsmyssl.com:443 = 0; countdown--) { + ESP_LOGI(TAG, "%d...", countdown); + vTaskDelay(1000 / portTICK_PERIOD_MS); + } + ESP_LOGI(TAG, "Starting again!"); + } +} + +void awsiot_init() +{ + xTaskCreate(&https_get_task, "https_get_task", 8192, NULL, 5, NULL); +} diff --git a/components/awsiot/component.mk b/components/awsiot/component.mk new file mode 100644 index 0000000..a485a4f --- /dev/null +++ b/components/awsiot/component.mk @@ -0,0 +1,10 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# + +COMPONENT_EMBED_TXTFILES := server_root_cert.pem \ No newline at end of file diff --git a/components/net/include/wifi.h b/components/awsiot/include/awsiot_rest.h similarity index 77% rename from components/net/include/wifi.h rename to components/awsiot/include/awsiot_rest.h index 9f0bbd1..a349698 100644 --- a/components/net/include/wifi.h +++ b/components/awsiot/include/awsiot_rest.h @@ -1,7 +1,7 @@ /* - * wifi.h + * awsiot_rest.h * - * Created on: Feb 3, 2017 + * Created on: Feb 18, 2017 * Author: kris * * This file is part of OpenAirProject-ESP32. @@ -20,9 +20,11 @@ * along with OpenAirProject-ESP32. If not, see . */ -#ifndef MAIN_WIFI_H_ -#define MAIN_WIFI_H_ +#ifndef COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ +#define COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ -void wifiInit(void); -#endif /* MAIN_WIFI_H_ */ + +void awsiot_init(); + +#endif /* COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ */ diff --git a/components/awsiot/server_root_cert.pem b/components/awsiot/server_root_cert.pem new file mode 100644 index 0000000..0002462 --- /dev/null +++ b/components/awsiot/server_root_cert.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== +-----END CERTIFICATE----- diff --git a/components/net/wifi.c b/components/net/wifi.c deleted file mode 100644 index cf1ba2a..0000000 --- a/components/net/wifi.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * wifi.c - * - * Created on: Feb 3, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ -#include "freertos/FreeRTOS.h" -#include "freertos/event_groups.h" -#include "esp_wifi.h" -#include "esp_system.h" -#include "esp_event.h" -#include "esp_event_loop.h" -#include "nvs_flash.h" -#include "driver/gpio.h" -#include "esp_log.h" -#include -#include "apps/sntp/sntp.h" - -static const char* TAG = "wifi"; - -#define WIFI_SSID "cosmos" -#define WIFI_PASS "heavysparrow746" - -/* FreeRTOS event group to signal when we are connected & ready to make a request */ -EventGroupHandle_t wifi_event_group; - -/* The event group allows multiple bits for each event, - but we only care about one event - are we connected - to the AP with an IP? */ -const int CONNECTED_BIT = BIT0; - - -static void initialize_sntp(void) -{ - ESP_LOGI(TAG, "Initializing SNTP"); - sntp_setoperatingmode(SNTP_OPMODE_POLL); - sntp_setservername(0, "pool.ntp.org"); - sntp_init(); -} - -static esp_err_t event_handler(void *ctx, system_event_t *event) -{ - switch(event->event_id) { - case SYSTEM_EVENT_STA_CONNECTED: - ESP_LOGI(TAG, "wifi connected"); - initialize_sntp(); - break; - case SYSTEM_EVENT_STA_START: - ESP_LOGI(TAG, "wifi connecting"); - esp_wifi_connect(); - break; - case SYSTEM_EVENT_STA_GOT_IP: - xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); - break; - case SYSTEM_EVENT_STA_DISCONNECTED: - /* This is a workaround as ESP32 WiFi libs don't currently - auto-reassociate. */ - ESP_LOGI(TAG, "wifi re-connecting"); - esp_wifi_connect(); - xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); - break; - default: - break; - } - return ESP_OK; -} - -void wifiInit(void) -{ - tcpip_adapter_init(); - wifi_event_group = xEventGroupCreate(); - ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); - ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) ); - wifi_config_t wifi_config = { - .sta = { - .ssid = WIFI_SSID, - .password = WIFI_PASS, - }, - }; - ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...", wifi_config.sta.ssid); - ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); - ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); - ESP_ERROR_CHECK( esp_wifi_start() ); -} - diff --git a/main/main.c b/main/main.c index 4c1bfdb..26205ea 100644 --- a/main/main.c +++ b/main/main.c @@ -40,6 +40,7 @@ #include "pmsx003.h" #include "pm_meter.h" #include "oap_storage.h" +#include "awsiot_rest.h" static const char *TAG = "app"; @@ -183,8 +184,9 @@ void app_main() //wifi/mongoose requires plenty of mem, start it here bootWiFi(); //deprecated wifiInit(); - xTaskCreate(main_task, "main_task", 1024*10, NULL, 10, NULL); - xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*8, NULL, 10, NULL); + awsiot_init(); + //xTaskCreate(main_task, "main_task", 1024*10, NULL, 10, NULL); + //xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*8, NULL, 10, NULL); while (1) { vTaskDelay(10000 / portTICK_PERIOD_MS); } From b767bf860d7becea62f8a6a4f203537f389f4f9e Mon Sep 17 00:00:00 2001 From: kris Date: Sat, 18 Feb 2017 14:43:06 +0100 Subject: [PATCH 010/200] working awsiot GET_SHADOW --- components/awsiot/awsiot_rest.c | 55 +++++++++++++++++++++----- components/awsiot/component.mk | 4 +- components/awsiot/server_root_cert.pem | 53 +++++++++++++------------ main/component.mk | 3 +- 4 files changed, 77 insertions(+), 38 deletions(-) diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index bb5ebb0..8b33c7a 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -69,15 +69,13 @@ #include "mbedtls/error.h" #include "mbedtls/certs.h" -#include "include/awsiot_rest.h"; +#include "include/awsiot_rest.h" +#define WEB_SERVER "a32on3oilq3poc.iot.eu-west-1.amazonaws.com" +#define WEB_PORT "8443" +#define WEB_URL "/things/pm_wro_2/shadow" -/* Constants that aren't configurable in menuconfig */ -#define WEB_SERVER "www.howsmyssl.com" -#define WEB_PORT "443" -#define WEB_URL "https://www.howsmyssl.com/a/check" - -static const char *TAG = "example"; +static const char *TAG = "awsiot"; static const char *REQUEST = "GET " WEB_URL " HTTP/1.1\n" "Host: "WEB_SERVER"\n" @@ -97,9 +95,16 @@ static const char *REQUEST = "GET " WEB_URL " HTTP/1.1\n" extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start"); extern const uint8_t server_root_cert_pem_end[] asm("_binary_server_root_cert_pem_end"); +extern const uint8_t b352220a79_certificate_pem_crt_start[] asm("_binary_b352220a79_certificate_pem_crt_start"); +extern const uint8_t b352220a79_certificate_pem_crt_end[] asm("_binary_b352220a79_certificate_pem_crt_end"); + +extern const uint8_t b352220a79_private_pem_key_start[] asm("_binary_b352220a79_private_pem_key_start"); +extern const uint8_t b352220a79_private_pem_key_end[] asm("_binary_b352220a79_private_pem_key_end"); + + #ifdef MBEDTLS_DEBUG_C -#define MBEDTLS_DEBUG_LEVEL 4 +#define MBEDTLS_DEBUG_LEVEL 1 /* mbedtls debug function that translates mbedTLS debug output to ESP_LOGx debug output. @@ -201,12 +206,15 @@ static void https_get_task(void *pvParameters) goto exit; } + + + /* MBEDTLS_SSL_VERIFY_OPTIONAL is bad for security, in this example it will print a warning if CA verification fails but it will continue to connect. You should consider using MBEDTLS_SSL_VERIFY_REQUIRED in your own code. */ - mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_OPTIONAL); + mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED); mbedtls_ssl_conf_ca_chain(&conf, &cacert, NULL); mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg); #ifdef MBEDTLS_DEBUG_C @@ -214,12 +222,37 @@ static void https_get_task(void *pvParameters) mbedtls_ssl_conf_dbg(&conf, mbedtls_debug, NULL); #endif + /* client certs */ + mbedtls_x509_crt clicert; + mbedtls_pk_context pkey; + + mbedtls_x509_crt_init( &clicert ); + mbedtls_pk_init( &pkey ); + + if ((ret = mbedtls_x509_crt_parse( &clicert, (const unsigned char *) b352220a79_certificate_pem_crt_start, + b352220a79_certificate_pem_crt_end-b352220a79_certificate_pem_crt_start )) != ESP_OK) { + ESP_LOGE(TAG, "mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + goto exit; + } + if ((ret = mbedtls_pk_parse_key( &pkey, (const unsigned char *) b352220a79_private_pem_key_start, + b352220a79_private_pem_key_end-b352220a79_private_pem_key_start, NULL, 0 )) != ESP_OK) { + ESP_LOGE(TAG, "mbedtls_pk_parse_key returned -0x%x\n\n", -ret); + goto exit; + } + + if( ( ret = mbedtls_ssl_conf_own_cert( &conf, &clicert, &pkey ) ) != ESP_OK) + { + ESP_LOGE(TAG, " failed\n ! mbedtls_ssl_conf_own_cert returned %d\n\n", ret ); + goto exit; + } + if ((ret = mbedtls_ssl_setup(&ssl, &conf)) != 0) { ESP_LOGE(TAG, "mbedtls_ssl_setup returned -0x%x\n\n", -ret); goto exit; } + while(1) { mbedtls_net_init(&server_fd); @@ -308,6 +341,8 @@ static void https_get_task(void *pvParameters) for(int i = 0; i < len; i++) { putchar(buf[i]); } + ret = ESP_OK; + break; } while(1); mbedtls_ssl_close_notify(&ssl); @@ -322,7 +357,7 @@ static void https_get_task(void *pvParameters) ESP_LOGE(TAG, "Last error was: -0x%x - %s", -ret, buf); } - for(int countdown = 10; countdown >= 0; countdown--) { + for(int countdown = 5; countdown >= 0; countdown--) { ESP_LOGI(TAG, "%d...", countdown); vTaskDelay(1000 / portTICK_PERIOD_MS); } diff --git a/components/awsiot/component.mk b/components/awsiot/component.mk index a485a4f..2195875 100644 --- a/components/awsiot/component.mk +++ b/components/awsiot/component.mk @@ -7,4 +7,6 @@ # please read the ESP-IDF documents if you need to do this. # -COMPONENT_EMBED_TXTFILES := server_root_cert.pem \ No newline at end of file +COMPONENT_EMBED_TXTFILES := server_root_cert.pem +COMPONENT_EMBED_TXTFILES += b352220a79_private.pem.key +COMPONENT_EMBED_TXTFILES += b352220a79_certificate.pem.crt \ No newline at end of file diff --git a/components/awsiot/server_root_cert.pem b/components/awsiot/server_root_cert.pem index 0002462..b9514c5 100644 --- a/components/awsiot/server_root_cert.pem +++ b/components/awsiot/server_root_cert.pem @@ -1,27 +1,28 @@ -----BEGIN CERTIFICATE----- -MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow -SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT -GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF -q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 -SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 -Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA -a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj -/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T -AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG -CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv -bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k -c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw -VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC -ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz -MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu -Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF -AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo -uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ -wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu -X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG -PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 -KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== ------END CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- \ No newline at end of file diff --git a/main/component.mk b/main/component.mk index 9bbc015..402d4bd 100644 --- a/main/component.mk +++ b/main/component.mk @@ -17,4 +17,5 @@ CFLAGS += -DCS_PLATFORM=CS_P_ESP32 \ -DMG_DISABLE_CGI=1 \ -DMG_DISABLE_FILESYSTEM=1 \ -DMG_LWIP=1 \ - -DMG_ENABLE_BROADCAST \ No newline at end of file + -DMG_ENABLE_BROADCAST \ + -DMBEDTLS_DEBUG_C=1 From 190a5361fcc0fc30b32582318f11a1a13ad2a1bd Mon Sep 17 00:00:00 2001 From: kris Date: Sat, 18 Feb 2017 17:13:50 +0100 Subject: [PATCH 011/200] config for awsiot --- .gitignore | 3 +- components/awsiot/awsiot.c | 110 ++++++++++++++++++ components/awsiot/awsiot_common.h | 34 ++++++ components/awsiot/awsiot_rest.c | 72 ++++++------ components/awsiot/{include => }/awsiot_rest.h | 5 +- components/awsiot/component.mk | 4 +- components/awsiot/include/awsiot.h | 30 +++++ ...ver_root_cert.pem => verisign_root_ca.pem} | 0 components/bootwifi/index.html | 52 +++++++-- components/net/include/thing_speak.h | 2 +- components/net/thing_speak.c | 13 ++- main/main.c | 23 +++- 12 files changed, 284 insertions(+), 64 deletions(-) create mode 100644 components/awsiot/awsiot.c create mode 100644 components/awsiot/awsiot_common.h rename components/awsiot/{include => }/awsiot_rest.h (88%) create mode 100644 components/awsiot/include/awsiot.h rename components/awsiot/{server_root_cert.pem => verisign_root_ca.pem} (100%) diff --git a/.gitignore b/.gitignore index 3f9f053..72cfe73 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ build/ sdkconfig sdkconfig.* .DS_Store -main/*.bak \ No newline at end of file +main/*.bak +core.dat \ No newline at end of file diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c new file mode 100644 index 0000000..f2f2a89 --- /dev/null +++ b/components/awsiot/awsiot.c @@ -0,0 +1,110 @@ +/* + * awsiot_client.c + * + * Created on: Feb 18, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_wifi.h" +#include "esp_event_loop.h" +#include "esp_log.h" +#include "esp_system.h" +#include "nvs_flash.h" +#include "awsiot_common.h" +#include "awsiot_rest.h" +#include "oap_storage.h" +#include "oap_common.h" + +QueueHandle_t input_queue; + +static const char *TAG = "awsiot"; + +static awsiot_config_t awsiot_config = {}; + +static void awsiot_task() { + + while (1) { + awsiot_update_shadow(awsiot_config, NULL); + vTaskDelay(5000); + } +} + +static void release(awsiot_config_t awsiot_config) { + if (awsiot_config.thingName) free(awsiot_config.thingName); + if (awsiot_config.cert) free(awsiot_config.cert); + if (awsiot_config.pkey) free(awsiot_config.pkey); +} + +static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { + cJSON* awsiot = storage_get_config("awsiot"); + if (!awsiot) { + ESP_LOGI(TAG, "config not found"); + return ESP_FAIL; + } + + cJSON* field; + if (!(field = cJSON_GetObjectItem(awsiot, "enabled")) || !field->valueint) { + ESP_LOGI(TAG, "client disabled"); + return ESP_FAIL; + } + + if ((field = cJSON_GetObjectItem(awsiot, "thingName")) && field->valuestring) { + awsiot_config->thingName = malloc(strlen(field->valuestring)+1); + strcpy(awsiot_config->thingName,field->valuestring); + ESP_LOGI(TAG, "thingName: %s", awsiot_config->thingName); + } else { + ESP_LOGW(TAG, "apikey not configured"); + return ESP_FAIL; + } + + if ((field = cJSON_GetObjectItem(awsiot, "cert")) && field->valuestring) { + awsiot_config->cert = malloc(strlen(field->valuestring)+1); + strcpy(awsiot_config->cert,field->valuestring); + } else { + ESP_LOGW(TAG, "cert not configured"); + return ESP_FAIL; + } + + if ((field = cJSON_GetObjectItem(awsiot, "pkey")) && field->valuestring) { + awsiot_config->pkey = malloc(strlen(field->valuestring)+1); + strcpy(awsiot_config->pkey,field->valuestring); + } else { + ESP_LOGW(TAG, "pkey not configured"); + return ESP_FAIL; + } + + return ESP_OK; +} + + +QueueHandle_t awsiot_init() +{ + if (awsiot_configure(&awsiot_config) == ESP_OK) { + input_queue = xQueueCreate(1, sizeof(oap_meas)); + xTaskCreate(&awsiot_task, "awsiot_task", 1024*10, NULL, 5, NULL); + return input_queue; + } else { + release(awsiot_config); + return NULL; + } +} diff --git a/components/awsiot/awsiot_common.h b/components/awsiot/awsiot_common.h new file mode 100644 index 0000000..5300a8f --- /dev/null +++ b/components/awsiot/awsiot_common.h @@ -0,0 +1,34 @@ +/* + * awsiot_common.h + * + * Created on: Feb 18, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_AWSIOT_AWSIOT_COMMON_H_ +#define COMPONENTS_AWSIOT_AWSIOT_COMMON_H_ + + +typedef struct { + char* thingName; + char* cert; + char* pkey; +} awsiot_config_t; + + +#endif /* COMPONENTS_AWSIOT_AWSIOT_COMMON_H_ */ diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 8b33c7a..4df1251 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -69,7 +69,7 @@ #include "mbedtls/error.h" #include "mbedtls/certs.h" -#include "include/awsiot_rest.h" +#include "awsiot_rest.h" #define WEB_SERVER "a32on3oilq3poc.iot.eu-west-1.amazonaws.com" #define WEB_PORT "8443" @@ -92,14 +92,8 @@ static const char *REQUEST = "GET " WEB_URL " HTTP/1.1\n" To embed it in the app binary, the PEM file is named in the component.mk COMPONENT_EMBED_TXTFILES variable. */ -extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start"); -extern const uint8_t server_root_cert_pem_end[] asm("_binary_server_root_cert_pem_end"); - -extern const uint8_t b352220a79_certificate_pem_crt_start[] asm("_binary_b352220a79_certificate_pem_crt_start"); -extern const uint8_t b352220a79_certificate_pem_crt_end[] asm("_binary_b352220a79_certificate_pem_crt_end"); - -extern const uint8_t b352220a79_private_pem_key_start[] asm("_binary_b352220a79_private_pem_key_start"); -extern const uint8_t b352220a79_private_pem_key_end[] asm("_binary_b352220a79_private_pem_key_end"); +extern const uint8_t verisign_root_ca_pem_start[] asm("_binary_verisign_root_ca_pem_start"); +extern const uint8_t verisign_root_ca_pem_end[] asm("_binary_verisign_root_ca_pem_end"); #ifdef MBEDTLS_DEBUG_C @@ -148,7 +142,9 @@ static void mbedtls_debug(void *ctx, int level, #endif -static void https_get_task(void *pvParameters) + + +esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload) { char buf[512]; int ret, flags, len; @@ -169,30 +165,30 @@ static void https_get_task(void *pvParameters) mbedtls_entropy_init(&entropy); if((ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, - NULL, 0)) != 0) + NULL, 0)) != ESP_OK) { ESP_LOGE(TAG, "mbedtls_ctr_drbg_seed returned %d", ret); - abort(); + return ret; } ESP_LOGI(TAG, "Loading the CA root certificate..."); - ret = mbedtls_x509_crt_parse(&cacert, server_root_cert_pem_start, - server_root_cert_pem_end-server_root_cert_pem_start); + ret = mbedtls_x509_crt_parse(&cacert, verisign_root_ca_pem_start, + verisign_root_ca_pem_end-verisign_root_ca_pem_start); if(ret < 0) { - ESP_LOGE(TAG, "mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); - abort(); + ESP_LOGE(TAG, "mbedtls_x509_crt_parse returned -0x%x", -ret); + return ret; } ESP_LOGI(TAG, "Setting hostname for TLS session..."); /* Hostname set here should match CN in server certificate */ - if((ret = mbedtls_ssl_set_hostname(&ssl, WEB_SERVER)) != 0) + if((ret = mbedtls_ssl_set_hostname(&ssl, WEB_SERVER)) != ESP_OK) { ESP_LOGE(TAG, "mbedtls_ssl_set_hostname returned -0x%x", -ret); - abort(); + return ret; } ESP_LOGI(TAG, "Setting up the SSL/TLS structure..."); @@ -229,31 +225,31 @@ static void https_get_task(void *pvParameters) mbedtls_x509_crt_init( &clicert ); mbedtls_pk_init( &pkey ); - if ((ret = mbedtls_x509_crt_parse( &clicert, (const unsigned char *) b352220a79_certificate_pem_crt_start, - b352220a79_certificate_pem_crt_end-b352220a79_certificate_pem_crt_start )) != ESP_OK) { - ESP_LOGE(TAG, "mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + //requires 0 at the end? + if ((ret = mbedtls_x509_crt_parse( &clicert, (unsigned char*)awsiot_config.cert, strlen(awsiot_config.cert)+1)) != ESP_OK) { + ESP_LOGE(TAG, "cannot parse AWS Thing certificate (-0x%x)", -ret); goto exit; } - if ((ret = mbedtls_pk_parse_key( &pkey, (const unsigned char *) b352220a79_private_pem_key_start, - b352220a79_private_pem_key_end-b352220a79_private_pem_key_start, NULL, 0 )) != ESP_OK) { - ESP_LOGE(TAG, "mbedtls_pk_parse_key returned -0x%x\n\n", -ret); + //requires 0 at the end? + if ((ret = mbedtls_pk_parse_key( &pkey, (unsigned char*)awsiot_config.pkey, strlen(awsiot_config.pkey)+1, NULL, 0 )) != ESP_OK) { + ESP_LOGE(TAG, "cannot parse AWS Thing private key (-0x%x)", -ret); goto exit; } if( ( ret = mbedtls_ssl_conf_own_cert( &conf, &clicert, &pkey ) ) != ESP_OK) { - ESP_LOGE(TAG, " failed\n ! mbedtls_ssl_conf_own_cert returned %d\n\n", ret ); + ESP_LOGE(TAG, "mbedtls_ssl_conf_own_cert returned %d", ret ); goto exit; } if ((ret = mbedtls_ssl_setup(&ssl, &conf)) != 0) { - ESP_LOGE(TAG, "mbedtls_ssl_setup returned -0x%x\n\n", -ret); + ESP_LOGE(TAG, "mbedtls_ssl_setup returned -0x%x", -ret); goto exit; } + // making request - while(1) { mbedtls_net_init(&server_fd); ESP_LOGI(TAG, "Connecting to %s:%s...", WEB_SERVER, WEB_PORT); @@ -351,21 +347,23 @@ static void https_get_task(void *pvParameters) mbedtls_ssl_session_reset(&ssl); mbedtls_net_free(&server_fd); + if(ret != 0) { mbedtls_strerror(ret, buf, 100); ESP_LOGE(TAG, "Last error was: -0x%x - %s", -ret, buf); } + return ret; - for(int countdown = 5; countdown >= 0; countdown--) { - ESP_LOGI(TAG, "%d...", countdown); - vTaskDelay(1000 / portTICK_PERIOD_MS); - } - ESP_LOGI(TAG, "Starting again!"); - } } -void awsiot_init() -{ - xTaskCreate(&https_get_task, "https_get_task", 8192, NULL, 5, NULL); -} +//QueueHandle_t awsiot_init() +//{ +// if (awsiot_configure() == ESP_OK) { +// input_queue = xQueueCreate(1, sizeof(oap_meas)); +// xTaskCreate(&https_get_task, "https_get_task", 1024*10, NULL, 5, NULL); +// return input_queue; +// } else { +// return NULL; +// } +//} diff --git a/components/awsiot/include/awsiot_rest.h b/components/awsiot/awsiot_rest.h similarity index 88% rename from components/awsiot/include/awsiot_rest.h rename to components/awsiot/awsiot_rest.h index a349698..3870d68 100644 --- a/components/awsiot/include/awsiot_rest.h +++ b/components/awsiot/awsiot_rest.h @@ -23,8 +23,9 @@ #ifndef COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ #define COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ +#include "awsiot_common.h" +#include "cJSON.h" - -void awsiot_init(); +esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload); #endif /* COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ */ diff --git a/components/awsiot/component.mk b/components/awsiot/component.mk index 2195875..78c0f71 100644 --- a/components/awsiot/component.mk +++ b/components/awsiot/component.mk @@ -7,6 +7,4 @@ # please read the ESP-IDF documents if you need to do this. # -COMPONENT_EMBED_TXTFILES := server_root_cert.pem -COMPONENT_EMBED_TXTFILES += b352220a79_private.pem.key -COMPONENT_EMBED_TXTFILES += b352220a79_certificate.pem.crt \ No newline at end of file +COMPONENT_EMBED_TXTFILES := verisign_root_ca.pem \ No newline at end of file diff --git a/components/awsiot/include/awsiot.h b/components/awsiot/include/awsiot.h new file mode 100644 index 0000000..3992dab --- /dev/null +++ b/components/awsiot/include/awsiot.h @@ -0,0 +1,30 @@ +/* + * awsiot_client.h + * + * Created on: Feb 18, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_AWSIOT_INCLUDE_AWSIOT_H_ +#define COMPONENTS_AWSIOT_INCLUDE_AWSIOT_H_ + +QueueHandle_t awsiot_init(); + + + +#endif /* COMPONENTS_AWSIOT_INCLUDE_AWSIOT_H_ */ diff --git a/components/awsiot/server_root_cert.pem b/components/awsiot/verisign_root_ca.pem similarity index 100% rename from components/awsiot/server_root_cert.pem rename to components/awsiot/verisign_root_ca.pem diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html index 5ca5ee6..dc8d6b2 100644 --- a/components/bootwifi/index.html +++ b/components/bootwifi/index.html @@ -14,9 +14,6 @@ font-family:"Helvetica Neue",Arial; font-size:18px; } - textarea { - font-family: "Courier New"; - } fieldset { margin: 1em 0; border:1px solid #999; @@ -34,6 +31,10 @@ display: inline-block; width: 200px; } + row.vert label { + display:block; + padding-bottom:0.5em; + } .header { background: #673ab7; padding:0.5em 0.5em; @@ -68,6 +69,16 @@ input.short { width:120px; } + input, textarea { + border:1px solid #aaa; + } + textarea { + font-family: "Courier New"; + font-size:11px; + width: 445px; + height: 340px; + white-space: nowrap; + } .logo64-grey { display: inline-block; width: 64px; @@ -86,12 +97,12 @@

    OpenAirProject Sensor
    WiFi - + - + @@ -150,15 +161,38 @@

    OpenAirProject Sensor
    - ThingSpeak Client + AWS IoT - + + + + + + + + + + + + + + + + + +
    + +
    + ThingSpeak Client + + + - - + +
    diff --git a/components/net/include/thing_speak.h b/components/net/include/thing_speak.h index f19eca2..d86f4e4 100644 --- a/components/net/include/thing_speak.h +++ b/components/net/include/thing_speak.h @@ -23,6 +23,6 @@ #ifndef MAIN_HTTP_H_ #define MAIN_HTTP_H_ -void thing_speak_init(); +QueueHandle_t thing_speak_init(); #endif /* MAIN_HTTP_H_ */ diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index ffafb9c..0ad2eeb 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -48,7 +48,7 @@ static const char *TAG = "thingspk"; static char* apikey = NULL; -static xQueueHandle measurements_queue; +static QueueHandle_t input_queue; static int post_data(oap_meas meas) { const struct addrinfo hints = { @@ -135,9 +135,9 @@ static int post_data(oap_meas meas) { static void thing_speak_task() { oap_meas meas; while (1) { - if(xQueuePeek(measurements_queue, &meas, 1000)) { + if(xQueuePeek(input_queue, &meas, 1000)) { if (post_data(meas)) { - xQueueReceive(measurements_queue, &meas, 1000); + xQueueReceive(input_queue, &meas, 1000); ESP_LOGI(TAG, "data sent successfully"); } else { ESP_LOGW(TAG, "data post failed"); @@ -171,10 +171,13 @@ static int thing_speak_configure() { } } -void thing_speak_init(xQueueHandle _measurements_queue) +QueueHandle_t thing_speak_init() { if (thing_speak_configure() == ESP_OK) { - measurements_queue = _measurements_queue; + input_queue = xQueueCreate(1, sizeof(oap_meas)); xTaskCreate(&thing_speak_task, "thing_speak_task", 1024*10, NULL, 5, NULL); + return input_queue; + } else { + return NULL; } } diff --git a/main/main.c b/main/main.c index 26205ea..e85658c 100644 --- a/main/main.c +++ b/main/main.c @@ -40,11 +40,11 @@ #include "pmsx003.h" #include "pm_meter.h" #include "oap_storage.h" -#include "awsiot_rest.h" +#include "awsiot.h" static const char *TAG = "app"; -static QueueHandle_t result_queue; +//static QueueHandle_t result_queue; static QueueHandle_t led_queue; static QueueHandle_t pm_queue; @@ -126,10 +126,12 @@ static void main_task() { pm_queue = xQueueCreate(1, sizeof(pm_data)); //buffer up to 100 measurements - result_queue = xQueueCreate(CONFIG_OAP_RESULT_BUFFER_SIZE, sizeof(oap_meas)); + //result_queue = xQueueCreate(CONFIG_OAP_RESULT_BUFFER_SIZE, sizeof(oap_meas)); led_queue = xQueueCreate(10, sizeof(led_cmd)); - thing_speak_init(result_queue); + QueueHandle_t thing_speak_queue = thing_speak_init(); + QueueHandle_t awsiot_queue = awsiot_init(); + QueueHandle_t env_queue = bmx280_init(); led_init(get_config().led, led_queue); update_led(); @@ -167,8 +169,17 @@ static void main_task() { .env = env, //TODO allow null, check last timestamp .local_time = time.tv_sec }; - if (!xQueueSend(result_queue, &meas, 1)) { - ESP_LOGE(TAG,"result queue overflow"); + + //broadcast + if (thing_speak_queue) { + if (!xQueueSend(thing_speak_queue, &meas, 1)) { + ESP_LOGW(TAG,"thing_speak_queue queue overflow"); + } + } + if (awsiot_queue) { + if (!xQueueSend(awsiot_queue, &meas, 1)) { + ESP_LOGW(TAG,"awsiot_queue queue overflow"); + } } } } From ca48be715ac60f597d143c4e8f1ce35a42977466 Mon Sep 17 00:00:00 2001 From: kris Date: Wed, 22 Feb 2017 22:44:50 +0100 Subject: [PATCH 012/200] post works, but ssl_free fails --- components/awsiot/awsiot.c | 70 ++++- components/awsiot/awsiot_rest.c | 311 ++++++++++++--------- components/awsiot/awsiot_rest.h | 3 +- components/oap_common/include/oap_common.h | 13 + components/oap_common/oap_common.c | 41 +++ components/pmsx003/pmsx003.c | 2 +- main/main.c | 40 +-- main/pm_meter.c | 22 +- 8 files changed, 320 insertions(+), 182 deletions(-) create mode 100644 components/oap_common/oap_common.c diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index f2f2a89..746906a 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -34,18 +34,78 @@ #include "awsiot_rest.h" #include "oap_storage.h" #include "oap_common.h" +#include "cJSON.h" + QueueHandle_t input_queue; static const char *TAG = "awsiot"; static awsiot_config_t awsiot_config = {}; +static oap_sensor_config_t sensor_config; static void awsiot_task() { + oap_meas meas; + int updated = 0; while (1) { - awsiot_update_shadow(awsiot_config, NULL); - vTaskDelay(5000); + if(xQueuePeek(input_queue, &meas, 1000)) { + + cJSON* shadow = cJSON_CreateObject(); + cJSON* state = cJSON_CreateObject(); + cJSON* reported = cJSON_CreateObject(); + cJSON* results = cJSON_CreateObject(); + cJSON* config = cJSON_CreateObject(); + cJSON* pm = cJSON_CreateObject(); + cJSON* weather = cJSON_CreateObject(); + + + cJSON_AddItemToObject(shadow, "state", state); + cJSON_AddItemToObject(state, "reported", reported); + cJSON_AddItemToObject(reported, "results", results); + cJSON_AddItemToObject(reported, "config", config); + + cJSON_AddItemToObject(results, "pm", pm); + cJSON_AddItemToObject(results, "weather", weather); + + if (meas.local_time) { + cJSON_AddNumberToObject(reported, "localTime", meas.local_time); + } else { + ESP_LOGW(TAG, "localTime not set, skip"); + } + + if (!updated) { + //send it only once. of course if we want two-way configuration, we need versioning + cJSON_AddBoolToObject(config, "indoor", sensor_config.indoor); + cJSON_AddNumberToObject(config, "test", sensor_config.test); + } + + cJSON_AddNumberToObject(pm, "pm1_0", meas.pm.pm1_0); + cJSON_AddNumberToObject(pm, "pm2_5", meas.pm.pm2_5); + cJSON_AddNumberToObject(pm, "pm10", meas.pm.pm10); + + cJSON_AddNumberToObject(weather, "temp", meas.env.temp); + cJSON_AddNumberToObject(weather, "pressure", meas.env.pressure); + cJSON_AddNumberToObject(weather, "humidity", meas.env.humidity); + + char *body = cJSON_Print(shadow); + + cJSON_Delete(shadow); + + ESP_LOGD(TAG, "shadow update: %s", body); + + esp_err_t res = awsiot_update_shadow(awsiot_config, body); + free(body); + + if (res == ESP_OK) { + ESP_LOGI(TAG, "data sent successfully"); + xQueueReceive(input_queue, &meas, 1000); + updated = 1; + } else { + ESP_LOGW(TAG, "data post failed"); + vTaskDelay(5000 / portTICK_PERIOD_MS); + } + } } } @@ -96,12 +156,12 @@ static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { return ESP_OK; } - -QueueHandle_t awsiot_init() +QueueHandle_t awsiot_init(oap_sensor_config_t _sensor_config) { if (awsiot_configure(&awsiot_config) == ESP_OK) { + sensor_config = _sensor_config; input_queue = xQueueCreate(1, sizeof(oap_meas)); - xTaskCreate(&awsiot_task, "awsiot_task", 1024*10, NULL, 5, NULL); + xTaskCreate(&awsiot_task, "awsiot_task", 1024*20, NULL, 5, NULL); return input_queue; } else { release(awsiot_config); diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 4df1251..37d827a 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -77,10 +77,6 @@ static const char *TAG = "awsiot"; -static const char *REQUEST = "GET " WEB_URL " HTTP/1.1\n" - "Host: "WEB_SERVER"\n" - "User-Agent: esp-idf/1.0 esp32\n" - "\n"; /* Root cert for howsmyssl.com, taken from server_root_cert.pem @@ -142,28 +138,153 @@ static void mbedtls_debug(void *ctx, int level, #endif +static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { + char buf[1024]; + int len,flags; + esp_err_t ret; + mbedtls_net_context server_fd; + mbedtls_net_init(&server_fd); -esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload) + + + ESP_LOGI(TAG, "Connecting to %s:%s...", WEB_SERVER, WEB_PORT); + + if ((ret = mbedtls_net_connect(&server_fd, WEB_SERVER, + WEB_PORT, MBEDTLS_NET_PROTO_TCP)) != ESP_OK) + { + ESP_LOGE(TAG, "mbedtls_net_connect returned -%x", -ret); + goto request_complete; + } + + ESP_LOGI(TAG, "Connected."); + + mbedtls_ssl_set_bio(&ssl_ctx, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL); + + ESP_LOGI(TAG, "Performing the SSL/TLS handshake..."); + + while ((ret = mbedtls_ssl_handshake(&ssl_ctx)) != ESP_OK) + { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) + { + ESP_LOGE(TAG, "mbedtls_ssl_handshake returned -0x%x", -ret); + goto request_complete; + } + } + + ESP_LOGI(TAG, "Verifying peer X.509 certificate..."); + + if ((flags = mbedtls_ssl_get_verify_result(&ssl_ctx)) != ESP_OK) + { + ESP_LOGW(TAG, "Failed to verify peer certificate!"); + bzero(buf, sizeof(buf)); + mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); + ESP_LOGW(TAG, "verification info: %s", buf); + goto request_complete; + } + else { + ESP_LOGI(TAG, "Certificate verified."); + } + + ESP_LOGI(TAG, "Writing HTTP request..."); + + char request[1024]; + + sprintf(request, "POST %s HTTP/1.1\n" + "Host: %s\n" + "Content-Type: application/json\n" + "Connection: close\n" + "Content-Length: %d\n" + "\r\n%s", WEB_URL, WEB_SERVER, strlen(body), body); + + while((ret = mbedtls_ssl_write(&ssl_ctx, (unsigned char*)request, strlen(request))) <= 0) + { + if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) + { + ESP_LOGE(TAG, "mbedtls_ssl_write returned -0x%x", -ret); + goto request_complete; + } + } + + len = ret; + ESP_LOGI(TAG, "%d bytes written", len); + ESP_LOGI(TAG, "Reading HTTP response..."); + + // leaving response unread causes crash. + // I guess non-blocking read func is being invoked despite destroyed ssl context + // goto request_complete; + + + struct timeval timeout = {.tv_sec = 1}; + setsockopt(server_fd.fd , SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(struct timeval)); + + do + { + len = sizeof(buf) - 1; + bzero(buf, sizeof(buf)); + ret = mbedtls_ssl_read(&ssl_ctx, (unsigned char *)buf, len); + + if(ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { + ESP_LOGD(TAG, "ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE"); + continue; + } + + if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { + ret = 0; + break; + } + + if(ret < 0) + { + ESP_LOGE(TAG, "mbedtls_ssl_read returned -0x%x", -ret); + break; + } + + if(ret == 0) + { + ESP_LOGI(TAG, "connection closed"); + break; + } + + len = ret; + ESP_LOGI(TAG, "%d bytes read", len); + /* Print response directly to stdout as it is read */ + for(int i = 0; i < len; i++) { + putchar(buf[i]); + } + } while(1); + + request_complete: + ESP_LOGD(TAG,"mbedtls_ssl_close_notify"); + mbedtls_ssl_close_notify(&ssl_ctx); + + ESP_LOGD(TAG,"mbedtls_net_free"); + mbedtls_net_free(&server_fd); + return ret; +} + + +esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { - char buf[512]; - int ret, flags, len; + int ret; mbedtls_entropy_context entropy; mbedtls_ctr_drbg_context ctr_drbg; - mbedtls_ssl_context ssl; + mbedtls_ssl_context ssl_ctx; + mbedtls_ssl_config ssl_conf; mbedtls_x509_crt cacert; - mbedtls_ssl_config conf; - mbedtls_net_context server_fd; + mbedtls_x509_crt clicert; + mbedtls_pk_context pkey; - mbedtls_ssl_init(&ssl); mbedtls_x509_crt_init(&cacert); - mbedtls_ctr_drbg_init(&ctr_drbg); - ESP_LOGI(TAG, "Seeding the random number generator"); - - mbedtls_ssl_config_init(&conf); + mbedtls_x509_crt_init(&clicert); + mbedtls_pk_init(&pkey); + mbedtls_ssl_init(&ssl_ctx); + mbedtls_ssl_config_init(&ssl_conf); + mbedtls_ctr_drbg_init(&ctr_drbg); mbedtls_entropy_init(&entropy); + if((ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, NULL, 0)) != ESP_OK) { @@ -171,8 +292,7 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload) return ret; } - ESP_LOGI(TAG, "Loading the CA root certificate..."); - + ESP_LOGD(TAG, "Loading the CA root certificate..."); ret = mbedtls_x509_crt_parse(&cacert, verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); @@ -183,9 +303,8 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload) } ESP_LOGI(TAG, "Setting hostname for TLS session..."); - /* Hostname set here should match CN in server certificate */ - if((ret = mbedtls_ssl_set_hostname(&ssl, WEB_SERVER)) != ESP_OK) + if((ret = mbedtls_ssl_set_hostname(&ssl_ctx, WEB_SERVER)) != ESP_OK) { ESP_LOGE(TAG, "mbedtls_ssl_set_hostname returned -0x%x", -ret); return ret; @@ -193,7 +312,7 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload) ESP_LOGI(TAG, "Setting up the SSL/TLS structure..."); - if((ret = mbedtls_ssl_config_defaults(&conf, + if((ret = mbedtls_ssl_config_defaults(&ssl_conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) @@ -202,29 +321,20 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload) goto exit; } - - + //mbedtls_ssl_conf_read_timeout(&ssl_conf, 1000); /* MBEDTLS_SSL_VERIFY_OPTIONAL is bad for security, in this example it will print a warning if CA verification fails but it will continue to connect. - You should consider using MBEDTLS_SSL_VERIFY_REQUIRED in your own code. */ - mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED); - mbedtls_ssl_conf_ca_chain(&conf, &cacert, NULL); - mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg); + mbedtls_ssl_conf_authmode(&ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); + mbedtls_ssl_conf_ca_chain(&ssl_conf, &cacert, NULL); + mbedtls_ssl_conf_rng(&ssl_conf, mbedtls_ctr_drbg_random, &ctr_drbg); #ifdef MBEDTLS_DEBUG_C mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL); - mbedtls_ssl_conf_dbg(&conf, mbedtls_debug, NULL); + mbedtls_ssl_conf_dbg(&ssl_conf, mbedtls_debug, NULL); #endif - /* client certs */ - mbedtls_x509_crt clicert; - mbedtls_pk_context pkey; - - mbedtls_x509_crt_init( &clicert ); - mbedtls_pk_init( &pkey ); - //requires 0 at the end? if ((ret = mbedtls_x509_crt_parse( &clicert, (unsigned char*)awsiot_config.cert, strlen(awsiot_config.cert)+1)) != ESP_OK) { ESP_LOGE(TAG, "cannot parse AWS Thing certificate (-0x%x)", -ret); @@ -236,134 +346,59 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload) goto exit; } - if( ( ret = mbedtls_ssl_conf_own_cert( &conf, &clicert, &pkey ) ) != ESP_OK) + if( ( ret = mbedtls_ssl_conf_own_cert( &ssl_conf, &clicert, &pkey ) ) != ESP_OK) { ESP_LOGE(TAG, "mbedtls_ssl_conf_own_cert returned %d", ret ); goto exit; } - if ((ret = mbedtls_ssl_setup(&ssl, &conf)) != 0) + if ((ret = mbedtls_ssl_setup(&ssl_ctx, &ssl_conf)) != ESP_OK) { ESP_LOGE(TAG, "mbedtls_ssl_setup returned -0x%x", -ret); goto exit; } - // making request - mbedtls_net_init(&server_fd); + ret = make_request(ssl_ctx, body); - ESP_LOGI(TAG, "Connecting to %s:%s...", WEB_SERVER, WEB_PORT); - if ((ret = mbedtls_net_connect(&server_fd, WEB_SERVER, - WEB_PORT, MBEDTLS_NET_PROTO_TCP)) != 0) - { - ESP_LOGE(TAG, "mbedtls_net_connect returned -%x", -ret); - goto exit; - } - - ESP_LOGI(TAG, "Connected."); - - mbedtls_ssl_set_bio(&ssl, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL); + exit: + if(ret != 0) + { - ESP_LOGI(TAG, "Performing the SSL/TLS handshake..."); + ESP_LOGD(TAG,"mbedtls_strerror"); + char buf[100] = {}; + mbedtls_strerror(ret, buf, 100); + ESP_LOGE(TAG, "Last error was: -0x%x - %s", -ret, buf); + } - while ((ret = mbedtls_ssl_handshake(&ssl)) != 0) - { - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) - { - ESP_LOGE(TAG, "mbedtls_ssl_handshake returned -0x%x", -ret); - goto exit; - } - } + //ESP_LOGD(TAG,"mbedtls_ssl_session_reset"); + //this fails if response wasn't fully read! + //mbedtls_ssl_session_reset(&ssl_ctx); //reset for reuse. - ESP_LOGI(TAG, "Verifying peer X.509 certificate..."); - - if ((flags = mbedtls_ssl_get_verify_result(&ssl)) != 0) - { - /* In real life, we probably want to close connection if ret != 0 */ - ESP_LOGW(TAG, "Failed to verify peer certificate!"); - bzero(buf, sizeof(buf)); - mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); - ESP_LOGW(TAG, "verification info: %s", buf); - } - else { - ESP_LOGI(TAG, "Certificate verified."); - } + //free for good + ESP_LOGD(TAG,"mbedtls_x509_crt_free (cacert)"); + mbedtls_x509_crt_free(&cacert); - ESP_LOGI(TAG, "Writing HTTP request..."); + ESP_LOGD(TAG,"mbedtls_x509_crt_free (clicert)"); + mbedtls_x509_crt_free(&clicert); - while((ret = mbedtls_ssl_write(&ssl, (const unsigned char *)REQUEST, strlen(REQUEST))) <= 0) - { - if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) - { - ESP_LOGE(TAG, "mbedtls_ssl_write returned -0x%x", -ret); - goto exit; - } - } + ESP_LOGD(TAG,"mbedtls_pk_free"); + mbedtls_pk_free(&pkey); - len = ret; - ESP_LOGI(TAG, "%d bytes written", len); - ESP_LOGI(TAG, "Reading HTTP response..."); + ESP_LOGD(TAG,"mbedtls_entropy_free"); + mbedtls_entropy_free(&entropy); - do - { - len = sizeof(buf) - 1; - bzero(buf, sizeof(buf)); - ret = mbedtls_ssl_read(&ssl, (unsigned char *)buf, len); - - if(ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) - continue; - - if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { - ret = 0; - break; - } - - if(ret < 0) - { - ESP_LOGE(TAG, "mbedtls_ssl_read returned -0x%x", -ret); - break; - } - - if(ret == 0) - { - ESP_LOGI(TAG, "connection closed"); - break; - } - - len = ret; - ESP_LOGI(TAG, "%d bytes read", len); - /* Print response directly to stdout as it is read */ - for(int i = 0; i < len; i++) { - putchar(buf[i]); - } - ret = ESP_OK; - break; - } while(1); + ESP_LOGD(TAG,"mbedtls_ctr_drbg_free"); + mbedtls_ctr_drbg_free(&ctr_drbg); - mbedtls_ssl_close_notify(&ssl); + ESP_LOGD(TAG,"mbedtls_ssl_config_free"); + mbedtls_ssl_config_free(&ssl_conf); - exit: - mbedtls_ssl_session_reset(&ssl); - mbedtls_net_free(&server_fd); + ESP_LOGD(TAG,"mbedtls_ssl_free"); + mbedtls_ssl_free(&ssl_ctx); - if(ret != 0) - { - mbedtls_strerror(ret, buf, 100); - ESP_LOGE(TAG, "Last error was: -0x%x - %s", -ret, buf); - } return ret; } - -//QueueHandle_t awsiot_init() -//{ -// if (awsiot_configure() == ESP_OK) { -// input_queue = xQueueCreate(1, sizeof(oap_meas)); -// xTaskCreate(&https_get_task, "https_get_task", 1024*10, NULL, 5, NULL); -// return input_queue; -// } else { -// return NULL; -// } -//} diff --git a/components/awsiot/awsiot_rest.h b/components/awsiot/awsiot_rest.h index 3870d68..ac80027 100644 --- a/components/awsiot/awsiot_rest.h +++ b/components/awsiot/awsiot_rest.h @@ -24,8 +24,7 @@ #define COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ #include "awsiot_common.h" -#include "cJSON.h" -esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, cJSON* payload); +esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body); #endif /* COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ */ diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index c39d2ba..6ad6801 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -41,4 +41,17 @@ typedef struct { long int local_time; } oap_meas; +typedef struct { + int led; + int indoor; + int warmUpTime; + int measTime; + int measInterval; + int measStrategy; + int test; +} oap_sensor_config_t; + +long oap_epoch_sec(); +long oap_epoch_sec_valid(); + #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap_common/oap_common.c b/components/oap_common/oap_common.c new file mode 100644 index 0000000..ea28620 --- /dev/null +++ b/components/oap_common/oap_common.c @@ -0,0 +1,41 @@ +/* + * oap_common.c + * + * Created on: Feb 22, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + + +#include +#include +#include "freertos/FreeRTOS.h" +#include +#include "oap_common.h" + +static const long FEB22_2017 = 1487795557; + +long oap_epoch_sec() { + struct timeval tv_start; + gettimeofday(&tv_start, NULL); + return tv_start.tv_sec; +} + +long oap_epoch_sec_valid() { + long epoch = oap_epoch_sec(); + return epoch > FEB22_2017 ? epoch : 0; +} diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 40342b7..0217fe8 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -106,7 +106,7 @@ QueueHandle_t pms_init(int _indoor) { pms_enable(0); pms_init_uart(); - xTaskCreate(pms_uart_read, "pms_uart_read", 1024*2, NULL, 10, NULL); + xTaskCreate(pms_uart_read, "pms_uart_read", 1024, NULL, 10, NULL); return samples; } diff --git a/main/main.c b/main/main.c index e85658c..543ace6 100644 --- a/main/main.c +++ b/main/main.c @@ -62,18 +62,10 @@ static QueueHandle_t pm_queue; // ESP_LOGI(TAG, "timestamp: %ld", tv.tv_sec); //} -typedef struct { - int led; - int indoor; - int warmUpTime; - int measTime; - int measInterval; - int measStrategy; - int test; -} oc_sensor_config_t; - -static oc_sensor_config_t get_config() { - oc_sensor_config_t sensor_config = {}; +static oap_sensor_config_t sensor_config; + +static oap_sensor_config_t get_config() { + oap_sensor_config_t sensor_config = {}; ESP_LOGD(TAG, "retrieve sensor config"); cJSON* sensor = storage_get_config("sensor"); cJSON* sconfig = cJSON_GetObjectItem(sensor, "config"); @@ -108,8 +100,6 @@ static void update_led_color(led_mode mode, float r, float g, float b) { } static void pm_meter_trigger_task() { - oc_sensor_config_t sensor_config = get_config(); - pm_meter_init(pms_init(sensor_config.indoor)); while (1) { update_led_mode(LED_PULSE); @@ -129,8 +119,8 @@ static void main_task() { //result_queue = xQueueCreate(CONFIG_OAP_RESULT_BUFFER_SIZE, sizeof(oap_meas)); led_queue = xQueueCreate(10, sizeof(led_cmd)); - QueueHandle_t thing_speak_queue = thing_speak_init(); - QueueHandle_t awsiot_queue = awsiot_init(); + QueueHandle_t thing_speak_queue = NULL;//thing_speak_init(); + QueueHandle_t awsiot_queue = awsiot_init(sensor_config); QueueHandle_t env_queue = bmx280_init(); led_init(get_config().led, led_queue); @@ -145,14 +135,13 @@ static void main_task() { // } // } - struct timeval time; env_data env = {}; long env_timestamp = 0; while (1) { - gettimeofday(&time, NULL); + long localTime = oap_epoch_sec_valid(); if (xQueueReceive(env_queue, &env, 100)) { - env_timestamp = time.tv_sec; + env_timestamp = localTime; ESP_LOGI(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity: %.2f %%", env.temp, env.pressure, env.humidity); } @@ -167,7 +156,7 @@ static void main_task() { oap_meas meas = { .pm = pm, .env = env, //TODO allow null, check last timestamp - .local_time = time.tv_sec + .local_time = localTime }; //broadcast @@ -188,16 +177,15 @@ static void main_task() { void app_main() { vTaskDelay(1000 / portTICK_PERIOD_MS); + ESP_LOGI(TAG,"starting app..."); storage_init(); - ESP_LOGI(TAG,"starting app..."); + sensor_config = get_config(); //wifi/mongoose requires plenty of mem, start it here - bootWiFi(); //deprecated wifiInit(); - - awsiot_init(); - //xTaskCreate(main_task, "main_task", 1024*10, NULL, 10, NULL); - //xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*8, NULL, 10, NULL); + bootWiFi(); + xTaskCreate(main_task, "main_task", 1024*10, NULL, 10, NULL); + xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*8, NULL, 10, NULL); while (1) { vTaskDelay(10000 / portTICK_PERIOD_MS); } diff --git a/main/pm_meter.c b/main/pm_meter.c index 13660df..b470e81 100644 --- a/main/pm_meter.c +++ b/main/pm_meter.c @@ -32,6 +32,7 @@ #include "esp_log.h" #include +#include "oap_common.h" #include "pm_meter.h" #include "pmsx003.h" @@ -52,24 +53,25 @@ static QueueHandle_t samples_queue; static char* TAG = "pm_meter"; -static long pmsEpochSec() { - struct timeval tv_start; - gettimeofday(&tv_start, NULL); - - return tv_start.tv_sec; -} - static void pm_data_print(char* str, pm_data pm) { ESP_LOGI(TAG, "%s pm1.0=%d pm2.5=%d pm10=%d", str, pm.pm1_0, pm.pm2_5, pm.pm10); } static void pm_data_collector_task() { + pm_data pm; + long localTime; while (1) { - pm_data pm; if (xQueueReceive(samples_queue, &pm, 100)) { pm_data* buf = sampleBuffer+(sampleIndex % CONFIG_OAP_PM_SAMPLE_BUF_SIZE); memcpy(buf, &pm, sizeof(pm)); - if (pmsEpochSec() - startedAt > warmingTime) { + localTime = oap_epoch_sec(); + + if (localTime - startedAt > 3600 * 24) { + //localTime was set to proper value in a meantime. start over to avoid invalid warming time. + startedAt = localTime; + } + + if (localTime - startedAt > warmingTime) { sampleIndex++; pm_data_print("collect: ", *buf); } else { @@ -81,7 +83,7 @@ static void pm_data_collector_task() { void pm_meter_start(unsigned int _warmingTime) { sampleIndex = 0; - startedAt = pmsEpochSec(); + startedAt = oap_epoch_sec(); warmingTime = _warmingTime; pms_enable(1); } From 716399ab2d13f85b5e05f59510249ea1aabb2d94 Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 23 Feb 2017 22:58:26 +0100 Subject: [PATCH 013/200] working awsiot spike --- components/awsiot/awsiot.c | 2 +- components/awsiot/awsiot_rest.c | 96 +++++++++++++++++++++------------ main/main.c | 12 ++++- 3 files changed, 72 insertions(+), 38 deletions(-) diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index 746906a..5bb1487 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -161,7 +161,7 @@ QueueHandle_t awsiot_init(oap_sensor_config_t _sensor_config) if (awsiot_configure(&awsiot_config) == ESP_OK) { sensor_config = _sensor_config; input_queue = xQueueCreate(1, sizeof(oap_meas)); - xTaskCreate(&awsiot_task, "awsiot_task", 1024*20, NULL, 5, NULL); + xTaskCreate(&awsiot_task, "awsiot_task", 1024*10, NULL, 5, NULL); return input_queue; } else { release(awsiot_config); diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 37d827a..9fa85bc 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -64,6 +64,7 @@ #include "mbedtls/net.h" #include "mbedtls/debug.h" #include "mbedtls/ssl.h" +#include "mbedtls/ssl_internal.h" #include "mbedtls/entropy.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/error.h" @@ -75,6 +76,20 @@ #define WEB_PORT "8443" #define WEB_URL "/things/pm_wro_2/shadow" +typedef struct sslclient_context { + int socket; + mbedtls_net_context net_ctx; + mbedtls_ssl_context ssl_ctx; + mbedtls_ssl_config ssl_conf; + + mbedtls_ctr_drbg_context drbg_ctx; + mbedtls_entropy_context entropy_ctx; + + mbedtls_x509_crt ca_cert; + mbedtls_x509_crt client_cert; + mbedtls_pk_context client_key; +} sslclient_context; + static const char *TAG = "awsiot"; @@ -138,7 +153,7 @@ static void mbedtls_debug(void *ctx, int level, #endif -static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { +static esp_err_t make_request(mbedtls_ssl_context* ssl_ctx, char* body) { char buf[1024]; int len,flags; @@ -157,13 +172,21 @@ static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { goto request_complete; } + struct timeval timeout = {.tv_sec = 5}; + int nodelay = 0; + int keepalive = 0; //does not seem to work. timeout is a must. + setsockopt(server_fd.fd , SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + setsockopt(server_fd.fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); + setsockopt(server_fd.fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay)); + setsockopt(server_fd.fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)); + + ESP_LOGI(TAG, "Connected."); - mbedtls_ssl_set_bio(&ssl_ctx, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL); + mbedtls_ssl_set_bio(ssl_ctx, &server_fd.fd, mbedtls_net_send, mbedtls_net_recv, NULL); //2nd param???? ESP_LOGI(TAG, "Performing the SSL/TLS handshake..."); - - while ((ret = mbedtls_ssl_handshake(&ssl_ctx)) != ESP_OK) + while ((ret = mbedtls_ssl_handshake(ssl_ctx)) != ESP_OK) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { @@ -172,9 +195,16 @@ static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { } } + ESP_LOGI(TAG, "Protocol is %s \nCiphersuite is %s", mbedtls_ssl_get_version(ssl_ctx), mbedtls_ssl_get_ciphersuite(ssl_ctx)); + if ((ret = mbedtls_ssl_get_record_expansion(ssl_ctx)) >= 0) { + ESP_LOGD(TAG, "Record expansion is %d", ret); + } else { + ESP_LOGD(TAG, "Record expansion is unknown (compression)"); + } + ESP_LOGI(TAG, "Verifying peer X.509 certificate..."); - if ((flags = mbedtls_ssl_get_verify_result(&ssl_ctx)) != ESP_OK) + if ((flags = mbedtls_ssl_get_verify_result(ssl_ctx)) != ESP_OK) { ESP_LOGW(TAG, "Failed to verify peer certificate!"); bzero(buf, sizeof(buf)); @@ -197,12 +227,14 @@ static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { "Content-Length: %d\n" "\r\n%s", WEB_URL, WEB_SERVER, strlen(body), body); - while((ret = mbedtls_ssl_write(&ssl_ctx, (unsigned char*)request, strlen(request))) <= 0) + while((ret = mbedtls_ssl_write(ssl_ctx, (unsigned char*)request, strlen(request))) <= 0) { - if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) + if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret == -0x4C) { ESP_LOGE(TAG, "mbedtls_ssl_write returned -0x%x", -ret); goto request_complete; + } else { + vTaskDelay(10); } } @@ -210,22 +242,13 @@ static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { ESP_LOGI(TAG, "%d bytes written", len); ESP_LOGI(TAG, "Reading HTTP response..."); - // leaving response unread causes crash. - // I guess non-blocking read func is being invoked despite destroyed ssl context - // goto request_complete; - - - struct timeval timeout = {.tv_sec = 1}; - setsockopt(server_fd.fd , SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(struct timeval)); - do { len = sizeof(buf) - 1; bzero(buf, sizeof(buf)); - ret = mbedtls_ssl_read(&ssl_ctx, (unsigned char *)buf, len); + ret = mbedtls_ssl_read(ssl_ctx, (unsigned char *)buf, len); if(ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { - ESP_LOGD(TAG, "ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE"); continue; } @@ -234,6 +257,12 @@ static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { break; } + if (ret == -0x4C) { + ret = 0; + ESP_LOGD(TAG, "connection timeout"); + break; + } + if(ret < 0) { ESP_LOGE(TAG, "mbedtls_ssl_read returned -0x%x", -ret); @@ -248,7 +277,6 @@ static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { len = ret; ESP_LOGI(TAG, "%d bytes read", len); - /* Print response directly to stdout as it is read */ for(int i = 0; i < len; i++) { putchar(buf[i]); } @@ -256,7 +284,7 @@ static esp_err_t make_request(mbedtls_ssl_context ssl_ctx, char* body) { request_complete: ESP_LOGD(TAG,"mbedtls_ssl_close_notify"); - mbedtls_ssl_close_notify(&ssl_ctx); + mbedtls_ssl_close_notify(ssl_ctx); ESP_LOGD(TAG,"mbedtls_net_free"); mbedtls_net_free(&server_fd); @@ -359,8 +387,7 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) } - ret = make_request(ssl_ctx, body); - + ret = make_request(&ssl_ctx, body); exit: if(ret != 0) @@ -373,31 +400,30 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) } //ESP_LOGD(TAG,"mbedtls_ssl_session_reset"); - //this fails if response wasn't fully read! //mbedtls_ssl_session_reset(&ssl_ctx); //reset for reuse. //free for good - ESP_LOGD(TAG,"mbedtls_x509_crt_free (cacert)"); - mbedtls_x509_crt_free(&cacert); - - ESP_LOGD(TAG,"mbedtls_x509_crt_free (clicert)"); - mbedtls_x509_crt_free(&clicert); - ESP_LOGD(TAG,"mbedtls_pk_free"); - mbedtls_pk_free(&pkey); + ESP_LOGD(TAG,"mbedtls_ssl_free"); + mbedtls_ssl_free(&ssl_ctx); - ESP_LOGD(TAG,"mbedtls_entropy_free"); - mbedtls_entropy_free(&entropy); + ESP_LOGD(TAG,"mbedtls_ssl_config_free"); + mbedtls_ssl_config_free(&ssl_conf); ESP_LOGD(TAG,"mbedtls_ctr_drbg_free"); mbedtls_ctr_drbg_free(&ctr_drbg); - ESP_LOGD(TAG,"mbedtls_ssl_config_free"); - mbedtls_ssl_config_free(&ssl_conf); + ESP_LOGD(TAG,"mbedtls_entropy_free"); + mbedtls_entropy_free(&entropy); - ESP_LOGD(TAG,"mbedtls_ssl_free"); - mbedtls_ssl_free(&ssl_ctx); + ESP_LOGD(TAG,"mbedtls_x509_crt_free (cacert)"); + mbedtls_x509_crt_free(&cacert); + ESP_LOGD(TAG,"mbedtls_x509_crt_free (clicert)"); + mbedtls_x509_crt_free(&clicert); + + ESP_LOGD(TAG,"mbedtls_pk_free"); + mbedtls_pk_free(&pkey); return ret; diff --git a/main/main.c b/main/main.c index 543ace6..99be54b 100644 --- a/main/main.c +++ b/main/main.c @@ -119,9 +119,17 @@ static void main_task() { //result_queue = xQueueCreate(CONFIG_OAP_RESULT_BUFFER_SIZE, sizeof(oap_meas)); led_queue = xQueueCreate(10, sizeof(led_cmd)); - QueueHandle_t thing_speak_queue = NULL;//thing_speak_init(); + QueueHandle_t thing_speak_queue = thing_speak_init(); QueueHandle_t awsiot_queue = awsiot_init(sensor_config); +// while (1) { +// oap_meas meas = {}; +// if (!xQueueSend(awsiot_queue, &meas, 1)) { +// ESP_LOGW(TAG,"awsiot_queue queue overflow"); +// } +// vTaskDelay(1000); +// } + QueueHandle_t env_queue = bmx280_init(); led_init(get_config().led, led_queue); update_led(); @@ -140,7 +148,7 @@ static void main_task() { while (1) { long localTime = oap_epoch_sec_valid(); - if (xQueueReceive(env_queue, &env, 100)) { + if (env_queue != NULL && xQueueReceive(env_queue, &env, 100)) { env_timestamp = localTime; ESP_LOGI(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity: %.2f %%", env.temp, env.pressure, env.humidity); } From f6ae8cfc49a0c730dd735747feb3375f040bbe47 Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 24 Feb 2017 15:40:35 +0100 Subject: [PATCH 014/200] basic AWS IoT rest client --- components/awsiot/awsiot.c | 29 +- components/awsiot/awsiot_common.h | 2 + components/awsiot/awsiot_rest.c | 434 +++------------------ components/bootwifi/index.html | 10 + components/oap_common/include/oap_common.h | 22 ++ components/oap_common/include/ssl_client.h | 64 +++ components/oap_common/oap_common.c | 53 +++ components/oap_common/ssl_client.c | 389 ++++++++++++++++++ components/pmsx003/pmsx003.c | 2 +- coredump2.sh | 3 + main/main.c | 3 +- 11 files changed, 620 insertions(+), 391 deletions(-) create mode 100644 components/oap_common/include/ssl_client.h create mode 100644 components/oap_common/ssl_client.c create mode 100755 coredump2.sh diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index 5bb1487..cc230e0 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -41,7 +41,7 @@ QueueHandle_t input_queue; static const char *TAG = "awsiot"; -static awsiot_config_t awsiot_config = {}; +static awsiot_config_t awsiot_config = {0}; static oap_sensor_config_t sensor_config; static void awsiot_task() { @@ -92,7 +92,7 @@ static void awsiot_task() { cJSON_Delete(shadow); - ESP_LOGD(TAG, "shadow update: %s", body); + //ESP_LOGD(TAG, "shadow update: %s", body); esp_err_t res = awsiot_update_shadow(awsiot_config, body); free(body); @@ -113,6 +113,7 @@ static void release(awsiot_config_t awsiot_config) { if (awsiot_config.thingName) free(awsiot_config.thingName); if (awsiot_config.cert) free(awsiot_config.cert); if (awsiot_config.pkey) free(awsiot_config.pkey); + if (awsiot_config.endpoint) free(awsiot_config.endpoint); } static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { @@ -128,9 +129,23 @@ static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { return ESP_FAIL; } + if ((field = cJSON_GetObjectItem(awsiot, "endpoint")) && field->valuestring) { + awsiot_config->endpoint = str_dup(field->valuestring); + ESP_LOGI(TAG, "endpoint: %s", awsiot_config->endpoint); + } else { + ESP_LOGW(TAG, "endpoint not configured"); + return ESP_FAIL; + } + + if ((field = cJSON_GetObjectItem(awsiot, "port")) && field->valueint) { + awsiot_config->port = field->valueint; + } else { + ESP_LOGW(TAG, "port not configured"); + return ESP_FAIL; + } + if ((field = cJSON_GetObjectItem(awsiot, "thingName")) && field->valuestring) { - awsiot_config->thingName = malloc(strlen(field->valuestring)+1); - strcpy(awsiot_config->thingName,field->valuestring); + awsiot_config->thingName = str_dup(field->valuestring); ESP_LOGI(TAG, "thingName: %s", awsiot_config->thingName); } else { ESP_LOGW(TAG, "apikey not configured"); @@ -138,16 +153,14 @@ static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { } if ((field = cJSON_GetObjectItem(awsiot, "cert")) && field->valuestring) { - awsiot_config->cert = malloc(strlen(field->valuestring)+1); - strcpy(awsiot_config->cert,field->valuestring); + awsiot_config->cert = str_dup(field->valuestring); } else { ESP_LOGW(TAG, "cert not configured"); return ESP_FAIL; } if ((field = cJSON_GetObjectItem(awsiot, "pkey")) && field->valuestring) { - awsiot_config->pkey = malloc(strlen(field->valuestring)+1); - strcpy(awsiot_config->pkey,field->valuestring); + awsiot_config->pkey = str_dup(field->valuestring); } else { ESP_LOGW(TAG, "pkey not configured"); return ESP_FAIL; diff --git a/components/awsiot/awsiot_common.h b/components/awsiot/awsiot_common.h index 5300a8f..9fce767 100644 --- a/components/awsiot/awsiot_common.h +++ b/components/awsiot/awsiot_common.h @@ -25,6 +25,8 @@ typedef struct { + char* endpoint; + int port; char* thingName; char* cert; char* pkey; diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 9fa85bc..3e36990 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -20,29 +20,6 @@ * along with OpenAirProject-ESP32. If not, see . */ -/* HTTPS GET Example using plain mbedTLS sockets - * - * Contacts the howsmyssl.com API via TLS v1.2 and reads a JSON - * response. - * - * Adapted from the ssl_client1 example in mbedtls. - * - * Original Copyright (C) 2006-2016, ARM Limited, All Rights Reserved, Apache 2.0 License. - * Additions Copyright (C) Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD, Apache 2.0 License. - * - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #include #include #include "freertos/FreeRTOS.h" @@ -54,377 +31,74 @@ #include "esp_system.h" #include "nvs_flash.h" -#include "lwip/err.h" -#include "lwip/sockets.h" -#include "lwip/sys.h" -#include "lwip/netdb.h" -#include "lwip/dns.h" - -#include "mbedtls/platform.h" -#include "mbedtls/net.h" -#include "mbedtls/debug.h" -#include "mbedtls/ssl.h" -#include "mbedtls/ssl_internal.h" -#include "mbedtls/entropy.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/error.h" -#include "mbedtls/certs.h" - #include "awsiot_rest.h" +#include "ssl_client.h" +#include "oap_common.h" -#define WEB_SERVER "a32on3oilq3poc.iot.eu-west-1.amazonaws.com" -#define WEB_PORT "8443" -#define WEB_URL "/things/pm_wro_2/shadow" - -typedef struct sslclient_context { - int socket; - mbedtls_net_context net_ctx; - mbedtls_ssl_context ssl_ctx; - mbedtls_ssl_config ssl_conf; - - mbedtls_ctr_drbg_context drbg_ctx; - mbedtls_entropy_context entropy_ctx; - - mbedtls_x509_crt ca_cert; - mbedtls_x509_crt client_cert; - mbedtls_pk_context client_key; -} sslclient_context; +//#define WEB_SERVER "a32on3oilq3poc.iot.eu-west-1.amazonaws.com" +//#define WEB_PORT "8443" +//#define WEB_URL "/things/pm_wro_2/shadow" static const char *TAG = "awsiot"; - -/* Root cert for howsmyssl.com, taken from server_root_cert.pem - - The PEM file was extracted from the output of this command: - openssl s_client -showcerts -connect www.howsmyssl.com:443 = 0) { - ESP_LOGD(TAG, "Record expansion is %d", ret); + ESP_LOGD(TAG, "connecting to %s:%d", awsiot_config.endpoint,awsiot_config.port); + if ((ssl_client.socket = open_socket(awsiot_config.endpoint,awsiot_config.port,5,0)) < 0) { + return ssl_client.socket; } else { - ESP_LOGD(TAG, "Record expansion is unknown (compression)"); + ESP_LOGD(TAG, "connected"); } - ESP_LOGI(TAG, "Verifying peer X.509 certificate..."); - - if ((flags = mbedtls_ssl_get_verify_result(ssl_ctx)) != ESP_OK) - { - ESP_LOGW(TAG, "Failed to verify peer certificate!"); - bzero(buf, sizeof(buf)); - mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); - ESP_LOGW(TAG, "verification info: %s", buf); - goto request_complete; - } - else { - ESP_LOGI(TAG, "Certificate verified."); - } - - ESP_LOGI(TAG, "Writing HTTP request..."); - - char request[1024]; - - sprintf(request, "POST %s HTTP/1.1\n" - "Host: %s\n" - "Content-Type: application/json\n" - "Connection: close\n" - "Content-Length: %d\n" - "\r\n%s", WEB_URL, WEB_SERVER, strlen(body), body); - - while((ret = mbedtls_ssl_write(ssl_ctx, (unsigned char*)request, strlen(request))) <= 0) - { - if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret == -0x4C) - { - ESP_LOGE(TAG, "mbedtls_ssl_write returned -0x%x", -ret); - goto request_complete; - } else { - vTaskDelay(10); - } + char* rootCA = str_make((void*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); + if (start_ssl_client(&ssl_client, (unsigned char*)rootCA, (unsigned char*)awsiot_config.cert, (unsigned char*)awsiot_config.pkey) > 0) { + free(rootCA); + char* request = malloc(strlen(body) + 250); + + sprintf(request, "POST /things/%s/shadow HTTP/1.1\n" + "Host: %s\n" + "Content-Type: application/json\n" + "Connection: close\n" + "Content-Length: %d\n" + "\r\n%s", awsiot_config.thingName, awsiot_config.endpoint, strlen(body), body); + + ESP_LOGD(TAG, "%s", request); + + send_ssl_data(&ssl_client, (uint8_t *)request, strlen(request)); + free(request); + + int len; + //TODO parse at least status code (would be nice to get json body) too + unsigned char buf[1024]; + do { + len = get_ssl_receive(&ssl_client, buf, 1024); + if (len == MBEDTLS_ERR_SSL_WANT_READ || len == MBEDTLS_ERR_SSL_WANT_WRITE) { + continue; + } else if (len == -0x4C) { + ESP_LOGD(TAG, "timeout"); + break; + } else if (len <= 0) { + ret = len; + break; + } + for (int i =0; i < len ; i++) { + putchar(buf[i]); + } + } while (1); + } else { + free(rootCA); + ret = ESP_FAIL; } + stop_ssl_socket(&ssl_client); - len = ret; - ESP_LOGI(TAG, "%d bytes written", len); - ESP_LOGI(TAG, "Reading HTTP response..."); - - do - { - len = sizeof(buf) - 1; - bzero(buf, sizeof(buf)); - ret = mbedtls_ssl_read(ssl_ctx, (unsigned char *)buf, len); - - if(ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { - continue; - } - - if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { - ret = 0; - break; - } - - if (ret == -0x4C) { - ret = 0; - ESP_LOGD(TAG, "connection timeout"); - break; - } - - if(ret < 0) - { - ESP_LOGE(TAG, "mbedtls_ssl_read returned -0x%x", -ret); - break; - } - - if(ret == 0) - { - ESP_LOGI(TAG, "connection closed"); - break; - } - - len = ret; - ESP_LOGI(TAG, "%d bytes read", len); - for(int i = 0; i < len; i++) { - putchar(buf[i]); - } - } while(1); - - request_complete: - ESP_LOGD(TAG,"mbedtls_ssl_close_notify"); - mbedtls_ssl_close_notify(ssl_ctx); - - ESP_LOGD(TAG,"mbedtls_net_free"); - mbedtls_net_free(&server_fd); - return ret; -} - - -esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) -{ - int ret; - - mbedtls_entropy_context entropy; - mbedtls_ctr_drbg_context ctr_drbg; - mbedtls_ssl_context ssl_ctx; - mbedtls_ssl_config ssl_conf; - mbedtls_x509_crt cacert; - mbedtls_x509_crt clicert; - mbedtls_pk_context pkey; - - mbedtls_x509_crt_init(&cacert); - mbedtls_x509_crt_init(&clicert); - mbedtls_pk_init(&pkey); - - mbedtls_ssl_init(&ssl_ctx); - mbedtls_ssl_config_init(&ssl_conf); - mbedtls_ctr_drbg_init(&ctr_drbg); - mbedtls_entropy_init(&entropy); - - if((ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, - NULL, 0)) != ESP_OK) - { - ESP_LOGE(TAG, "mbedtls_ctr_drbg_seed returned %d", ret); - return ret; - } - - ESP_LOGD(TAG, "Loading the CA root certificate..."); - ret = mbedtls_x509_crt_parse(&cacert, verisign_root_ca_pem_start, - verisign_root_ca_pem_end-verisign_root_ca_pem_start); - - if(ret < 0) - { - ESP_LOGE(TAG, "mbedtls_x509_crt_parse returned -0x%x", -ret); - return ret; - } - - ESP_LOGI(TAG, "Setting hostname for TLS session..."); - /* Hostname set here should match CN in server certificate */ - if((ret = mbedtls_ssl_set_hostname(&ssl_ctx, WEB_SERVER)) != ESP_OK) - { - ESP_LOGE(TAG, "mbedtls_ssl_set_hostname returned -0x%x", -ret); - return ret; - } - - ESP_LOGI(TAG, "Setting up the SSL/TLS structure..."); - - if((ret = mbedtls_ssl_config_defaults(&ssl_conf, - MBEDTLS_SSL_IS_CLIENT, - MBEDTLS_SSL_TRANSPORT_STREAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != 0) - { - ESP_LOGE(TAG, "mbedtls_ssl_config_defaults returned %d", ret); - goto exit; - } - - //mbedtls_ssl_conf_read_timeout(&ssl_conf, 1000); - - /* MBEDTLS_SSL_VERIFY_OPTIONAL is bad for security, in this example it will print - a warning if CA verification fails but it will continue to connect. - You should consider using MBEDTLS_SSL_VERIFY_REQUIRED in your own code. - */ - mbedtls_ssl_conf_authmode(&ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); - mbedtls_ssl_conf_ca_chain(&ssl_conf, &cacert, NULL); - mbedtls_ssl_conf_rng(&ssl_conf, mbedtls_ctr_drbg_random, &ctr_drbg); -#ifdef MBEDTLS_DEBUG_C - mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL); - mbedtls_ssl_conf_dbg(&ssl_conf, mbedtls_debug, NULL); -#endif - - //requires 0 at the end? - if ((ret = mbedtls_x509_crt_parse( &clicert, (unsigned char*)awsiot_config.cert, strlen(awsiot_config.cert)+1)) != ESP_OK) { - ESP_LOGE(TAG, "cannot parse AWS Thing certificate (-0x%x)", -ret); - goto exit; - } - //requires 0 at the end? - if ((ret = mbedtls_pk_parse_key( &pkey, (unsigned char*)awsiot_config.pkey, strlen(awsiot_config.pkey)+1, NULL, 0 )) != ESP_OK) { - ESP_LOGE(TAG, "cannot parse AWS Thing private key (-0x%x)", -ret); - goto exit; - } - - if( ( ret = mbedtls_ssl_conf_own_cert( &ssl_conf, &clicert, &pkey ) ) != ESP_OK) - { - ESP_LOGE(TAG, "mbedtls_ssl_conf_own_cert returned %d", ret ); - goto exit; - } - - if ((ret = mbedtls_ssl_setup(&ssl_ctx, &ssl_conf)) != ESP_OK) - { - ESP_LOGE(TAG, "mbedtls_ssl_setup returned -0x%x", -ret); - goto exit; - } - - - ret = make_request(&ssl_ctx, body); - - exit: - if(ret != 0) - { - - ESP_LOGD(TAG,"mbedtls_strerror"); - char buf[100] = {}; - mbedtls_strerror(ret, buf, 100); - ESP_LOGE(TAG, "Last error was: -0x%x - %s", -ret, buf); - } - - //ESP_LOGD(TAG,"mbedtls_ssl_session_reset"); - //mbedtls_ssl_session_reset(&ssl_ctx); //reset for reuse. - - //free for good - - ESP_LOGD(TAG,"mbedtls_ssl_free"); - mbedtls_ssl_free(&ssl_ctx); - - ESP_LOGD(TAG,"mbedtls_ssl_config_free"); - mbedtls_ssl_config_free(&ssl_conf); - - ESP_LOGD(TAG,"mbedtls_ctr_drbg_free"); - mbedtls_ctr_drbg_free(&ctr_drbg); - - ESP_LOGD(TAG,"mbedtls_entropy_free"); - mbedtls_entropy_free(&entropy); - - ESP_LOGD(TAG,"mbedtls_x509_crt_free (cacert)"); - mbedtls_x509_crt_free(&cacert); - - ESP_LOGD(TAG,"mbedtls_x509_crt_free (clicert)"); - mbedtls_x509_crt_free(&clicert); - - ESP_LOGD(TAG,"mbedtls_pk_free"); - mbedtls_pk_free(&pkey); - - return ret; + ESP_LOGI(TAG, "ssl request done %d", ret); + return ret; } diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html index dc8d6b2..44d2626 100644 --- a/components/bootwifi/index.html +++ b/components/bootwifi/index.html @@ -172,6 +172,16 @@

    OpenAirProject Sensor
    + + + + + + + + + + diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index 6ad6801..493f2a4 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -54,4 +54,26 @@ typedef struct { long oap_epoch_sec(); long oap_epoch_sec_valid(); +//from esp-arduino + +/** + * creates a new string terminated with 0 from passed data. + * free it after use. + */ +char* str_make(void* data, int len); + +/* + * allocates mem and copies src->dest + */ +char* str_dup(char* src); + +//#define ESP_REG(addr) *((volatile uint32_t *)(addr)) +#define NOP() asm volatile ("nop") + +uint32_t micros(); +uint32_t millis(); +void delay(uint32_t); +void delayMicroseconds(uint32_t us); + + #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap_common/include/ssl_client.h b/components/oap_common/include/ssl_client.h new file mode 100644 index 0000000..016158c --- /dev/null +++ b/components/oap_common/include/ssl_client.h @@ -0,0 +1,64 @@ +/* + * + * Created on: Feb 23, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +/* Provide SSL/TLS functions to ESP32 with Arduino IDE + * by Evandro Copercini - 2017 - Apache 2.0 License + */ + +#ifndef ARD_SSL_H +#define ARD_SSL_H +#include "mbedtls/platform.h" +#include "mbedtls/net.h" +#include "mbedtls/debug.h" +#include "mbedtls/ssl.h" +#include "mbedtls/entropy.h" +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/error.h" + +typedef struct sslclient_context { + int socket; + mbedtls_net_context net_ctx; + mbedtls_ssl_context ssl_ctx; + mbedtls_ssl_config ssl_conf; + + mbedtls_ctr_drbg_context drbg_ctx; + mbedtls_entropy_context entropy_ctx; + + mbedtls_x509_crt ca_cert; + mbedtls_x509_crt client_cert; + mbedtls_pk_context client_key; + + int has_ca_cert; + int has_client_cert; + int has_client_key; + +} sslclient_context; + + +void ssl_init(sslclient_context *ssl_client); +int open_socket(char* host, int port, int timeout_sec, int keepalive); +int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, unsigned char *cli_cert, unsigned char *cli_key); +void stop_ssl_socket(sslclient_context *ssl_client); +int data_to_read(sslclient_context *ssl_client); +int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t len); +int get_ssl_receive(sslclient_context *ssl_client, uint8_t *data, int length); + +#endif diff --git a/components/oap_common/oap_common.c b/components/oap_common/oap_common.c index ea28620..096da8f 100644 --- a/components/oap_common/oap_common.c +++ b/components/oap_common/oap_common.c @@ -26,6 +26,8 @@ #include "freertos/FreeRTOS.h" #include #include "oap_common.h" +#include "esp_attr.h" +#include "freertos/task.h" static const long FEB22_2017 = 1487795557; @@ -39,3 +41,54 @@ long oap_epoch_sec_valid() { long epoch = oap_epoch_sec(); return epoch > FEB22_2017 ? epoch : 0; } + +char* str_make(void* data, int len) { + char* str = malloc(len+1); + memcpy(str, data, len); + str[len] = 0; + return str; +} + +char* str_dup(char* src) { + char* dest = malloc(strlen(src)+1); + strcpy(dest, src); + return dest; +} + +void yield() +{ + vPortYield(); +} + +uint32_t IRAM_ATTR micros() +{ + uint32_t ccount; + __asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) ); + return ccount / CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ; +} + +uint32_t IRAM_ATTR millis() +{ + return xTaskGetTickCount() * portTICK_PERIOD_MS; +} + +void delay(uint32_t ms) +{ + vTaskDelay(ms / portTICK_PERIOD_MS); +} + +void IRAM_ATTR delayMicroseconds(uint32_t us) +{ + uint32_t m = micros(); + if(us){ + uint32_t e = (m + us) % ((0xFFFFFFFF / CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ) + 1); + if(m > e){ //overflow + while(micros() > e){ + NOP(); + } + } + while(micros() < e){ + NOP(); + } + } +} diff --git a/components/oap_common/ssl_client.c b/components/oap_common/ssl_client.c new file mode 100644 index 0000000..0a09149 --- /dev/null +++ b/components/oap_common/ssl_client.c @@ -0,0 +1,389 @@ +/* + * + * Created on: Feb 23, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +/* Provide SSL/TLS functions to ESP32 with Arduino IDE +* +* Adapted from the ssl_client1 example in mbedtls. +* +* Original Copyright (C) 2006-2015, ARM Limited, All Rights Reserved, Apache 2.0 License. +* Additions Copyright (C) 2017 Evandro Luis Copercini, Apache 2.0 License. +*/ + +//#include "Arduino.h" +#include +#include +#include +#include +#include + +#include "mbedtls/platform.h" +#include "mbedtls/net.h" +#include "mbedtls/debug.h" +#include "mbedtls/ssl.h" +#include "mbedtls/ssl_internal.h" +#include "mbedtls/entropy.h" +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/error.h" +#include "mbedtls/certs.h" + +#include +#include + +#include "oap_common.h" +#include "ssl_client.h" + + +static const char *pers = "esp32-tls"; + +#define DEBUG true //Set false to supress debug messages + +#ifdef DEBUG +#define DEBUG_PRINT(...) printf( __VA_ARGS__ ) +#else +#define DEBUG_PRINT(x) +#endif + +#ifdef MBEDTLS_DEBUG_C + +#define MBEDTLS_DEBUG_LEVEL 4 + +/* mbedtls debug function that translates mbedTLS debug output +to ESP_LOGx debug output. + +MBEDTLS_DEBUG_LEVEL 4 means all mbedTLS debug output gets sent here, +and then filtered to the ESP logging mechanism. +*/ +static void mbedtls_debug(void *ctx, int level, + const char *file, int line, + const char *str) +{ + const char *MBTAG = "mbedtls"; + char *file_sep; + + /* Shorten 'file' from the whole file path to just the filename + + This is a bit wasteful because the macros are compiled in with + the full _FILE_ path in each case. + */ + file_sep = rindex(file, '/'); + if (file_sep) { + file = file_sep + 1; + } + + switch (level) { + case 1: + printf( "%s:%d %s \n", file, line, str); + break; + case 2: + case 3: + printf( "%s:%d %s \n", file, line, str); + case 4: + printf( "%s:%d %s \n", file, line, str); + break; + default: + printf( "Unexpected log level %d: %s \n", level, str); + break; + } +} + +#endif + + +void ssl_init(sslclient_context *ssl_client) +{ + /* + * Initialize the RNG and the session data + */ + + mbedtls_ssl_init(&ssl_client->ssl_ctx); + mbedtls_ssl_config_init(&ssl_client->ssl_conf); + + mbedtls_ctr_drbg_init(&ssl_client->drbg_ctx); +} + + +int open_socket(char* host, int port, int timeout_sec, int keepalive) { + mbedtls_net_context server_fd; + mbedtls_net_init(&server_fd); + + char portStr[8]; + sprintf(portStr, "%d", port); + + int ret; + if ((ret = mbedtls_net_connect(&server_fd, host, portStr, MBEDTLS_NET_PROTO_TCP)) == 0) { + struct timeval timeout = {.tv_sec = timeout_sec}; + int nodelay = 1; + lwip_setsockopt(server_fd.fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + lwip_setsockopt(server_fd.fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); + lwip_setsockopt(server_fd.fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay)); + lwip_setsockopt(server_fd.fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)); + return server_fd.fd; + } else { + return ret; + } +} + +/* +ssl_client->socket = -1; +ssl_client->socket = lwip_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); +if (ssl_client->socket < 0) { + DEBUG_PRINT("ERROR opening socket\r\n"); + return ssl_client->socket; +} + +struct sockaddr_in serv_addr; +memset(&serv_addr, 0, sizeof(serv_addr)); +serv_addr.sin_family = AF_INET; +serv_addr.sin_addr.s_addr = ipAddress; +serv_addr.sin_port = htons(port); + +if (lwip_connect(ssl_client->socket, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == 0) { + timeout = 5000; + lwip_setsockopt(ssl_client->socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + lwip_setsockopt(ssl_client->socket, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); + lwip_setsockopt(ssl_client->socket, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(enable)); + lwip_setsockopt(ssl_client->socket, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)); + DEBUG_PRINT("Socket ok"); +} else { + printf("\r\nConnect to Server failed!\r\n"); + ret = -1; + break; +} + +fcntl( ssl_client->socket, F_SETFL, fcntl( ssl_client->socket, F_GETFL, 0 ) | O_NONBLOCK ); +*/ + + + +int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, unsigned char *cli_cert, unsigned char *cli_key) +{ + char buf[512]; + int ret, flags; + DEBUG_PRINT("Free heap before TLS %u\n", xPortGetFreeHeapSize()); + + do { + DEBUG_PRINT( "Seeding the random number generator\n"); + mbedtls_entropy_init(&ssl_client->entropy_ctx); + + if ((ret = mbedtls_ctr_drbg_seed(&ssl_client->drbg_ctx, mbedtls_entropy_func, + &ssl_client->entropy_ctx, (const unsigned char *) pers, strlen(pers))) != 0) { + printf( "mbedtls_ctr_drbg_seed returned %d \n", ret); + break; + } + + + /* MBEDTLS_SSL_VERIFY_REQUIRED if a CA certificate is defined on Arduino IDE and + MBEDTLS_SSL_VERIFY_NONE if not. + */ + if (rootCABuff != NULL) { + DEBUG_PRINT( "Loading CA cert\n"); + mbedtls_x509_crt_init(&ssl_client->ca_cert); + mbedtls_ssl_conf_authmode(&ssl_client->ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); + ret = mbedtls_x509_crt_parse(&ssl_client->ca_cert, (const unsigned char *)rootCABuff, strlen((const char *)rootCABuff) + 1); + if (ret < 0) { + printf( "CA cert: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + break; + } + mbedtls_ssl_conf_ca_chain(&ssl_client->ssl_conf, &ssl_client->ca_cert, NULL); + //mbedtls_ssl_conf_verify(&ssl_client->ssl_ctx, my_verify, NULL ); + ssl_client->has_ca_cert = 1; + } else { + mbedtls_ssl_conf_authmode(&ssl_client->ssl_conf, MBEDTLS_SSL_VERIFY_NONE); + } + + if (cli_cert != NULL && cli_key != NULL) { + mbedtls_x509_crt_init(&ssl_client->client_cert); + mbedtls_pk_init(&ssl_client->client_key); + + DEBUG_PRINT( "Loading CRT cert\n"); + + ret = mbedtls_x509_crt_parse(&ssl_client->client_cert, (const unsigned char *)cli_cert, strlen((const char *)cli_cert) + 1); + + if (ret < 0) { + printf( "CRT cert: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + break; + } + ssl_client->has_client_cert = 1; + + DEBUG_PRINT( "Loading private key\n"); + ret = mbedtls_pk_parse_key(&ssl_client->client_key, (const unsigned char *)cli_key, strlen((const char *)cli_key) + 1, NULL, 0); + + if (ret < 0) { + printf( "PRIVATE KEY: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + break; + } + + ssl_client->has_client_key = 1; + + mbedtls_ssl_conf_own_cert(&ssl_client->ssl_conf, &ssl_client->client_cert, &ssl_client->client_key); + } + + /* + // TODO: implement match CN verification + + DEBUG_PRINT( "Setting hostname for TLS session...\n"); + + // Hostname set here should match CN in server certificate + if((ret = mbedtls_ssl_set_hostname(&ssl_client->ssl_ctx, host)) != 0) + { + printf( "mbedtls_ssl_set_hostname returned -0x%x\n", -ret); + break; + } + */ + + DEBUG_PRINT( "Setting up the SSL/TLS structure...\n"); + + if ((ret = mbedtls_ssl_config_defaults(&ssl_client->ssl_conf, + MBEDTLS_SSL_IS_CLIENT, + MBEDTLS_SSL_TRANSPORT_STREAM, + MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { + printf( "mbedtls_ssl_config_defaults returned %d\n", ret); + break; + } + + mbedtls_ssl_conf_rng(&ssl_client->ssl_conf, mbedtls_ctr_drbg_random, &ssl_client->drbg_ctx); +#ifdef MBEDTLS_DEBUG_C + mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL); + mbedtls_ssl_conf_dbg(&ssl_client->ssl_conf, mbedtls_debug, NULL); +#endif + + if ((ret = mbedtls_ssl_setup(&ssl_client->ssl_ctx, &ssl_client->ssl_conf)) != 0) { + printf( "mbedtls_ssl_setup returned -0x%x\n\n", -ret); + break; + } + + mbedtls_ssl_set_bio(&ssl_client->ssl_ctx, &ssl_client->socket, mbedtls_net_send, mbedtls_net_recv, NULL ); + + DEBUG_PRINT( "Performing the SSL/TLS handshake...\n"); + + while ((ret = mbedtls_ssl_handshake(&ssl_client->ssl_ctx)) != 0) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { + printf( "mbedtls_ssl_handshake returned -0x%x\n", -ret); + break; + } + delay(10); + vPortYield(); + } + + + if (cli_cert != NULL && cli_key != NULL) { + DEBUG_PRINT("Protocol is %s \nCiphersuite is %s\n", mbedtls_ssl_get_version(&ssl_client->ssl_ctx), mbedtls_ssl_get_ciphersuite(&ssl_client->ssl_ctx)); + if ((ret = mbedtls_ssl_get_record_expansion(&ssl_client->ssl_ctx)) >= 0) { + DEBUG_PRINT("Record expansion is %d\n", ret); + } else { + DEBUG_PRINT("Record expansion is unknown (compression)\n"); + } + } + + + DEBUG_PRINT( "Verifying peer X.509 certificate...\n"); + + if ((flags = mbedtls_ssl_get_verify_result(&ssl_client->ssl_ctx)) != 0) { + printf( "Failed to verify peer certificate!\n"); + bzero(buf, sizeof(buf)); + mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); + printf( "verification info: %s\n", buf); + stop_ssl_socket(ssl_client); //It's not safe continue. + } else { + DEBUG_PRINT( "Certificate verified.\n"); + } + + } while (0); + + DEBUG_PRINT("Free heap after TLS %u\n", xPortGetFreeHeapSize()); + + return ssl_client->socket; +} + + +void stop_ssl_socket(sslclient_context *ssl_client) +{ + DEBUG_PRINT( "\nCleaning SSL connection.\n"); + close(ssl_client->socket); + ssl_client->socket = -1; + mbedtls_ssl_free(&ssl_client->ssl_ctx); + mbedtls_ssl_config_free(&ssl_client->ssl_conf); + mbedtls_ctr_drbg_free(&ssl_client->drbg_ctx); + mbedtls_entropy_free(&ssl_client->entropy_ctx); + + if (ssl_client->has_ca_cert) { + mbedtls_x509_crt_free(&ssl_client->ca_cert); + ssl_client->has_ca_cert = 0; + } + + if (ssl_client->has_client_cert) { + mbedtls_x509_crt_free(&ssl_client->client_cert); + ssl_client->has_client_cert = 0; + } + + if (ssl_client->has_client_key) { + mbedtls_pk_free(&ssl_client->client_key); + ssl_client->has_client_key = 0; + } +} + + +int data_to_read(sslclient_context *ssl_client) +{ + + int ret, res; + ret = mbedtls_ssl_read(&ssl_client->ssl_ctx, NULL, 0); + //printf("RET: %i\n",ret); //for low level debug + res = mbedtls_ssl_get_bytes_avail(&ssl_client->ssl_ctx); + //printf("RES: %i\n",res); + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret < 0 && ret != -76) { + printf("MbedTLS error %i", ret); + } + + return res; +} + + + +int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t len) +{ + //DEBUG_PRINT( "Writing HTTP request...\n"); //for low level debug + int ret = -1; + + while ((ret = mbedtls_ssl_write(&ssl_client->ssl_ctx, data, len)) <= 0) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { + printf( "mbedtls_ssl_write returned -0x%x\n", -ret); + break; + } + } + + len = ret; + //DEBUG_PRINT( "%d bytes written\n", len); //for low level debug + return ret; +} + + + +int get_ssl_receive(sslclient_context *ssl_client, uint8_t *data, int length) +{ + //DEBUG_PRINT( "Reading HTTP response...\n"); //for low level debug + int ret = -1; + + ret = mbedtls_ssl_read(&ssl_client->ssl_ctx, data, length); + + //DEBUG_PRINT( "%d bytes readed\n", ret); //for low level debug + return ret; +} diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 0217fe8..40342b7 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -106,7 +106,7 @@ QueueHandle_t pms_init(int _indoor) { pms_enable(0); pms_init_uart(); - xTaskCreate(pms_uart_read, "pms_uart_read", 1024, NULL, 10, NULL); + xTaskCreate(pms_uart_read, "pms_uart_read", 1024*2, NULL, 10, NULL); return samples; } diff --git a/coredump2.sh b/coredump2.sh new file mode 100755 index 0000000..e9c24c3 --- /dev/null +++ b/coredump2.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +$IDF_PATH/components/espcoredump/espcoredump.py dbg_corefile -t b64 -c core.dat build/sensor-esp32.elf \ No newline at end of file diff --git a/main/main.c b/main/main.c index 99be54b..2287127 100644 --- a/main/main.c +++ b/main/main.c @@ -116,13 +116,12 @@ static void main_task() { pm_queue = xQueueCreate(1, sizeof(pm_data)); //buffer up to 100 measurements - //result_queue = xQueueCreate(CONFIG_OAP_RESULT_BUFFER_SIZE, sizeof(oap_meas)); led_queue = xQueueCreate(10, sizeof(led_cmd)); QueueHandle_t thing_speak_queue = thing_speak_init(); QueueHandle_t awsiot_queue = awsiot_init(sensor_config); -// while (1) { +// while (awsiot_queue && 1) { // oap_meas meas = {}; // if (!xQueueSend(awsiot_queue, &meas, 1)) { // ESP_LOGW(TAG,"awsiot_queue queue overflow"); From 4b89c94bbb67f3405f4519d77ff8eed12f530f30 Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 24 Feb 2017 21:25:51 +0100 Subject: [PATCH 015/200] new api + doc --- components/awsiot/awsiot.c | 2 + doc/api/README.md | 101 +++++++++++++++++++++++++++++++++++++ doc/api/state.json | 72 ++++++++++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 doc/api/README.md create mode 100644 doc/api/state.json diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index cc230e0..6407e49 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -65,8 +65,10 @@ static void awsiot_task() { cJSON_AddItemToObject(reported, "results", results); cJSON_AddItemToObject(reported, "config", config); + cJSON_AddItemToObject(results, "pm", pm); cJSON_AddItemToObject(results, "weather", weather); + cJSON_AddNumberToObject(results, "uid", rand()); //what about 0? if (meas.local_time) { cJSON_AddNumberToObject(reported, "localTime", meas.local_time); diff --git a/doc/api/README.md b/doc/api/README.md new file mode 100644 index 0000000..c304220 --- /dev/null +++ b/doc/api/README.md @@ -0,0 +1,101 @@ +## Architecture + +OAP is built on the top of AWS Iot. + +Each sensor is identified by a unique name. + +Senors can connect with OAP via REST or MQTT. +Connections are secured and authentication is performed based on certificate issued by OAP when new sensor gets registered. + +Once connected, sensor can update its **state** (represented as a JSON tree) in the OAP cloud by sending json **state-reported** message. +It can also receive **state-desired** requests from OAP, this feature however is fully optional and can be used to remotely change current configuration of connected sensors. + +## Sensor API + +State itself has no particular schema and no validation is performed - it can be any value you want to persist in OAP cloud. +However, to create a record in OAP result tables (and therefore - publish the results), state-reported message has to meet some conditions and contain at least 'result.uid' field. + + { + "state" : { + "reported" : { + /** + * All parameters below ARE OPTIONAL. + * Thing shadow will get updated with any values posted here (there's no validation), + * however system will record a measurement only when some specifics conditions are met. See below. + */ + + /** + * local time of measurement in epoch seconds. + * if this value is present, it is different than previously recorded and it falls into valid range, server will accept + * this as a time of measurement. Otherwise server time will be used. + * This field enables you to report historical measurements (for example taken when sensor is offline) - but only + * if your sensor is equipped with Real-Time Clock. + */ + "localTime" : 0, + + "results" : { + /** + * this parameter is required for server to accept incoming data as a measurement. + * if this value is missing (or null, undefined, 0 or empty string) or equal to previously sent uid, + * thing shadow will get updated but result tables will not. + */ + "uid" : 1, + /** + * pollution results. all parameters are optional but when present, types must match. + * if particular parameter is missing, but was reported previously - the old value will be taken. + */ + "pm" : { + "pm1_0" : 0, + "pm2_5" : 0, + "pm10" : 0, + + /* + * this parameter determines sensor used for measurement. used by meters with multiple PM sensors. + */ + "sensor" : 0 + }, + /** + * measured atmospheric conditions. parameters are optional but types are validated. + */ + "weather" : { + "temp" : 0.0, + "pressure" : 0.0, + "humidity" : 0.0, + "sensor" : 0 + } + }, + /** + * current configuration of the sensor. + */ + "config" : { + /** + * sent it when sensor changed its location from outdoor to indoor or vice-versa. + */ + "indoor" : false, + /** + * any value other than 0 means that sensor is running in test mode and results should be ignored from main metrics. + */ + "test" : 0, + /** + * optional location data for mobile sensors + */ + "location" : { + "lat" : 0.0, + "lng" : 0.0 + } + } + } + } + } + +## Data API + +Results are currently stored in three DynamoDB tables: + + 1. OAP_ALL (all recorded measurements) + 2. OAP_HOUR (one measurement per hour) + 3. OAP_LAST (last recorded measurement) + +All registered sensors are listed in OAP_THINGS table. +Anonymous users have read-only access to these tables and can use them via DynamoDB AWS-SDK api. + diff --git a/doc/api/state.json b/doc/api/state.json new file mode 100644 index 0000000..15eddf2 --- /dev/null +++ b/doc/api/state.json @@ -0,0 +1,72 @@ +{ + "state" : { + "reported" : { + /** + * All parameters below ARE OPTIONAL. + * Thing shadow will get updated with any values posted here (there's no validation), + * however system will record a measurement only when some specifics conditions are met. See below. + */ + + /** + * local time of measurement in epoch seconds. + * if this value is present, it is different than previously recorded and it falls into valid range, server will accept + * this as a time of measurement. Otherwise server time will be used. + * This field enables you to report historical measurements (for example taken when sensor is offline) - but only + * if your sensor is equipped with Real-Time Clock. + */ + "localTime" : 0, + + "results" : { + /** + * this parameter is required for server to accept incoming data as a measurement. + * if this value is missing (or null, undefined, 0 or empty string) or equal to previously sent uid, + * thing shadow will get updated but result tables will not. + */ + "uid" : 1, + /** + * pollution results. all parameters are optional but when present, types must match. + * if particular parameter is missing, but was reported previously - the old value will be taken. + */ + "pm" : { + "pm1_0" : 0, + "pm2_5" : 0, + "pm10" : 0, + + /* + * this parameter determines sensor used for measurement. used by meters with multiple PM sensors. + */ + "sensor" : 0 + }, + /** + * measured atmospheric conditions. parameters are optional but types are validated. + */ + "weather" : { + "temp" : 0.0, + "pressure" : 0.0, + "humidity" : 0.0, + "sensor" : 0 + } + }, + /** + * current configuration of the sensor. + */ + "config" : { + /** + * sent it when sensor changed its location from outdoor to indoor or vice-versa. + */ + "indoor" : false, + /** + * any value other than 0 means that sensor is running in test mode and results should be ignored from main metrics. + */ + "test" : 0, + /** + * optional location data for mobile sensors + */ + "location" : { + "lat" : 0.0, + "lng" : 0.0 + } + } + } + } +} \ No newline at end of file From 28905e5cdd541defa7a55f8f7f8cb530c28f3dee Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 24 Feb 2017 21:33:18 +0100 Subject: [PATCH 016/200] screenshot updated --- doc/images/sensor_settings.png | Bin 100805 -> 329427 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/images/sensor_settings.png b/doc/images/sensor_settings.png index b07a9b4b2c5ca4ff260aad89c40c1acf280c1cdd..f78c37cedc855002bfaa7fc362bd67a7eb8a507b 100644 GIT binary patch literal 329427 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 i~Qm)*ehCmPm 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∾9(skr5= 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

    OZ3ikRd%<{p1|DijRBeJVnTmmPKNsjNT%8^Bk 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 z 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�s_%b69c7t7uY9Wd$#UQj$f)J>le)viW&C8SN3JPJ!*-?5l>kf z2%6_Es;)&x8r)ksT7{|)aGSupF7h-T#qU25-GmFPQO_I=-zJkWkz_kradYSS?x*8> z4d=7RDrR;pF8;h@Ungwa`0etlbnkUTFfHGY;{i9K(Qjhayvm0g zh*%L;4i^oW8ZM9gM1z(x*4``^&17Cxr1oBi;0y`Nw?qh2j5pEw_4IW|@w zFSQ~#t}nbVX}m;<#}&@D#ZLUrzpgvhHR_1U{=orn2(3bJZ6!+w~ob2ll;?TWmkf1!Qy7sgJ$~t(2jbHl~ ztSDtWv`vo;mAdWEV#ik$EVbzwStlfE145hXLYg2S&~#_p=OVgoV)7OoIy*9snHn|` zLBGmWupnA)z?v!KJ>3rELI<;nnJ;gqzP?8hEM9RjBJ3Md~dCp1L7I# z3U6+d_kB&R-pNgEeCqAn223=3tX{F;oUjjnxBNbp4pY1-ZW1Do6rZ1&X5=SkL-Nr-5o+@xZ zwiD+~(YRD!jUJ*u$LA0geXL(&C#zz*P}!%+za7Ih_VpyE+v7(c_slG9i$ah~#wzT@ z-6+WRez3t%1zz&=ZO>EM%L~7qH{t@3hDz&+gR~i-2RR!nGrh`2U9Mx z;kviy@fY0Y<5791(LJ0=_+}0FqaC`iXi|BynHa#L-(I_O;6m12ry8g8X|G4}YbkNt zO_Us8;D|7Ys@#LkZ>l?Gm8FdX2LiQgcRZBc z@MX}azvi5`@f1M{xWY-7>ouI}|F8DGGpfn8X?IHzQ2_-7q=hB{=^(v>QlttB(ovf9 z-b+MOKza)Xfq;UjNDECm7HW{*O8_AdYUrWoJnSv|-5b|Af4_CkdHIo*1?0JNmzjHJ zu9<86f-l#~bYO$*CyM1)i$SCH!gewgK@ja3DG>{ut5JtYQbI|Nv@Py04d3#otd&2S z?W0h$oRBC7qq&PTZxHEM8OdoIXm(otRvx5;4}+2&LLBlpr7^DOgKQ4WKm8C` zj=s3X*GoZ7t1fWdQ9X^1;27@IF@n2~c~M-2U>&Vw7`{CWr#AWm$ES?l z<2B_i+m=e2dQ(ouKtZ2jR~pTD<>*0dZ?)uJ_9Jm0G+RVtMye^x57T@~S9*{t$zuMB zy|<@SX~M>P`omkH^oXB7lSXsHkVd|Zy7!Cf0S_ckN+~vI>SArAGf1c=ib`_goNZQp zPQHR&%!aZ3<_@n@K&{G0Y#yC2tD1Q0Wf&#}zf-xJu7>r)GzEZ4lO?xSxFje)|8Ro_ zsO0a{>XtK1*8}up=}xWD{8Lcl*b))wsA9X4#T9@xMYY&{U+!_)mJbi(faP<~I2IL9 z@A5$S;azL)l$RunIRLhgaE5JAiXmJlJLv3Wy1@6vpto$AUftm03172Ii*16z7dPHt zNR)~%W`bd)^T#*S?E`3@)leD^4uJDJof5C}oe6a%rM|CvxM)f_R>dmhdT&Q5g;cYm zec*eMB6P&P&-%)@ig(tR;Me!~ zz@2pypbo*Dp?IkAwe$SuEcsyn?8*X;Z9$gO^*8Rr+a`IN>F-nIS!qVgr;Rw{iH_j; zmgM86YyoBy{9nrLVKjLu@>9~o)P2)NN}Bf?M%wLKyVj(=UD;IDbFW2LTlQPVcnc3b z&X7xLW=Jcr7-1+8PjCnj+iaRmKJb(GOdwtvKN|+qR-B_(emHx5%lLdtRep8$qN+|C zNe7$fcYM)?Ku2-Z`Yr9*mlBWeS9L1+)U7{_N3T}p&UAXjH0Nj^>{wuUe4Z_Ay&VgD zd%&eN;^WkMopRCVmB}5R=msvT7Q~2I8e&XjI^Vd0+^XKb|D&Ga#fjPRwZ&wijoD=- zbZ^Lmy@i~crPB))dq!Sro!!A?H)d3|%tEff4LBvr(+gb0c+pR{aNBnbd{Q>I!^njs zbZ_QAfGaRQRTHpd{NaP%flbxrja66BC|B8qDJZwH47sZh0H%irg4)I;d2AF2uPzI_YVw z=WFd*^|j3}P8xedaj-|D?(@qlOyUL4oiEMIT#b&Ht|a@?>Eg-r6t$u?zoVCX1a;5e z>>-%4SbOWUwT?7me|7 zT9x>H@G^# za}FuTXdG9b0C&Q#m*A@wQ3Uk^7twbLpKSB(pLO`_T{h6|k6A=);BNxrUmvx&2SoH}ll$A0|2?&H%yFrIST5wwHXXaYz>-?s zn?$FWcRUWZI^kWkGyw7shVlc-|15)SKK=H$wZ@={% zZ8~NeDt@r&D12Ism;ik$ZSm@adE!K?Har0M_ynjO(tq!Ms07q-kX$S|Jwe*Y;IL_pq&$xvn+Ah z890hU-&O_=X@e_~_t9X~Gkx27=p`zEMF%L9q#Q5Y&3u35%<=r0LkUVbTbM-+Pa6)C zKESC8E@Wx@w-E3V9fYbRb|HG*GbGQS5lCl9Sa%=bW;4PVe@LznCcw7PepF0G27YsxOCvkLd z0#E(^oRtoc#&Wi}^)ylDnR>uUTn!+*D|>oyAwX=HLx-$RlW{(o09ItD_66r}grC;{ z1rw*>h&XMpHDG}iIWSX7I_CHJ+iU{fgB}%n~4dRKYJ&bK$K7ob=~D7XIOMB2&c$??edNSaDYJeQ>A=L8Dm>{ z1eG;bHCFKXT9%T6mc&H^Eoi7yvsH5{g>@nBP2f{NSAW0qVC(e;yKB~V+P?Jcqoyzg zi6cWD|0=B((1bLHR9=8}{hFOJN5Hs;M8>M<=fX~tll`$^2b5{lvjtkUjnp<)!!l{H zJ#yIKwykYzDe`7fmpimQ;FCI&@49f|b=Ywm2H*2maG1!BVbo-H5Sph|mRtQ@hTOwR zY+KImy3P2*N*s;Ka^xD{G{MBg!Bv=)hooW< zUk@=%Hc#$Hg0o8t()?bu?{^!_fZ^V4gi^ZdPmf)QkR)PH&`n%`o)uEU(0#BILz#@2 zE;49OtV}_-+-&|#rmr4$dNId(4BDG7Jmj|xv+^$mrv zG4qt?>TQo%cw0U-L^W6q`>MY@)7eh#)i+CRr)J^!=InWsIr_*yV@Ai)#s(BHT37|C zSTE#>2CAK}Dc2z3m)@DpUH@4afQFfa;ww-RS)p|PJZUm!1&~#BCXmqaousPUP}NYn zEv5u%o;Gu`Y5jyvmvO~Owx&Ih)+Fd?BFeI=oeh(nJMlPa4bN0DMSa3@YRG8wWr+64 z4HbJeSMOyn?D6>_1kVE3=oqWWCWtvtKmtr-JYOPq@`-p8>KS1N66DNbUV z!PfYI=9xyCK%s#z)`{6mFBxExx2IhsT~jybsX#Fh78%H{M#iv$`Qw1-b@C9;3q;n~ zPDyLzg&0r%_Qd;gJaG;MU1tm!L1Z=QNo>|5iVG;lwQaUa%AKiOl{*K*)-^|U+K+WM zckVJWudTZI?YHji3sig>pZ(Ew*fKUeoRIsRQI17D<}k6a-30dY=;Oa0`jGN&if|#_3~c+uA{MVfo62mFgn4!BG@3Z)Og-;rtKo^jTPpww z`CVF$%kmcAiBVEFjJY?lP}bqyw>sI~?e|F}((INkY6yr25=}dxNd9YcOpm)nQVuZ; z5`AkQ`i>T}lHeHkAE_S@OD{^S7T9g&x6~0DIFO6Tk*VkyF2Zn?wzmo!=!r0EY4)Z2 z5zB#GKvAtPlz&55tC&ZXE`fOW4daOlT9XMngAf?mT@PNYTxpGStp6)!x#7F)9-WsZ zSPWP8x0gr}!JU44m0P;8Zx7d>I9wVr6Gi>Hj({SZnnK5(6cVmzju3~=1TJTAIDE0u zzr9+o7J)-|&UBH0XDoKG*$hiN?QU*z;Ud#e#Se#tthEP;HzM9meez18k7-!o{}fPwQ8wGOwK0Gg4vCC zIx4S@M+!2>^Oo1)IM-B_RC@S&0EPHAiIQLRVD(Su!fO>8$sGeBmGjG3TrO};xHlQM5Ep@aaZ zvrxT#${PQiL=I$P^HXB_5m6G`qQJ@3I1iAD#>pa!<9jZEbDFDqR|3-|wAzBF$3+{A zYP^@t(P2mmOfRJ(1QOpb=jul^K&Ce{5$p-o@SMGjJi55(j zF?~HlhhZ<_pc~sn!!B@n@ zb91-QzB#hP*2q|nwp+Myg}!w{;SOoNf|}e1!3p0j3Ww*=^TFTCVEXr%s5;@CczsYm zA9u}Ia2@KZbqu-h_m<)9?(Yd|>qE89p~wZivS2DcIZ(d2<%4++Reo@Wj*=rue*cLhkQ0!@t`F7lVre{+EQU3_}|5mw*z7Ag>X zfi1bq3JMk8%k~}cDa%uOe0dsg2^pyQhV?*0@hfhZvqEX=%1R9ESN3)6KjK+j7+sOZ z?8X3mTqT;uOa-XE9)dxwcx30sXHFj?IRmFxGgY8V-MLjY@1_~YaPdb?6iAeqc2$Z| zXh=wajJMT_!^Mundn9zyuDax2l~^&wypA2M;CnPgSfNFuJ;ovl@yZ009d8j@E~XWYV|N|IYcRgQvk&bk zI^t_hcGwiO%8N})^1%iE6l_UGB&E%dq*?&2a06HCS|&rIwHFZnKkKJa7WCSBM5UQQd`^HPwr*zT2Nfh=sm6g@kP*4@U)wIV7zM%@gBaFECKlQgtr0vC})1mCW@(o1Rgns{r+kGYyU_sLoa zRA(-^NKm%!e)X8CH^orv>?m%da3PMv*90AnI1=I!5ZCcUHT{S;zkjqoMR{ zUzV6$JP1WS+}T1l*G83`I97dmX0Ao3b~V_dStns6wV}4%|I70FO*#k1tAoyZBhPs< z_qUr?>qHIOsQrje_iD~%)pS=yYis=nOwC{DPL^9S)f5MJ_;C$ITY~8&K(h2-=7sAWzyeOA-0qd@rGa?M!&wSU z&qD*ob0TY_hb7;e57$F9*N-|eiJE?$hid0Sx$G}Z2?ez&)SytW|d0E=lV*}`^mQ9!h!BT!$s4} z5Uxb$Ke?|f{tk9))J`w$Jtr1ue?Q(l|_JcV8AS z#^$kc`TdCH`EnBAkIDvo(fB?_v>i5oK+3LDGogAQP^~VjlZ8Kg?LD`_d8b+bLm54E z#Nsk|ASRu)K9}I5 zxu#Idw&TOLr6x4Km2E;Iu%9u?8Q%1$&s06n@i|{ifJ?GVd6(qt+e9={^(c;cie~G z@lcxhd#_G>UAbd7+G9D5+&Tao?r137S8o9KFVeuanSW9Uwex>u99L-i$5^L1o3Xy< zKtpD*v7-;n9SyFB-PqvU{QUZ=q14)kbd_v9_&e8l%fR9Y{LP1xZZGxaepb>{UfJ%Q zMvP(-9m!BvB_p(?JqoXvuopg%W7C-={vJrAtUTF5y1N`oGDA8VY%9Rch~sxEbYz5I zM=kCE9snfjIr+leNHB8~r&`!x8Mjw-wf zjVG%IxF`M~_(oZz+#+^%qEnW8Ps}N2qBr=vh^oM+8dH5HEM>=-B86rJ?nrvf+1w)CNx7HqlHy=&D z-zJq^`yhLM?cjU;*Xa7i6ypL{Z@D6Zt0U4o$ja^@`?9TuQM^=DVzIHF337H)>d;*S z+tgTxv*lcnw~V;xY4hm|`>~@-WbJZ0*HJKa4Zm5@C{)2I`9R0jui3^*d)Y%}i zpjAH|@@MbHsi0gmXbff6r1Rsc7W{C*B5_Vd+k-Go2*vI|1>Z>LXqD|VF_`# z5otACv*xa-&7oAdW*f{>D7#}YYKc&UKgUC+*z78=YZtg(vzDrfnrW?Z`K&@oUbh|L zXzDTK<^y@^=(n4<5_=!z4Rt`Fuz?g<_odD9wb)&%X*1P zGq~su-AFCt5+arSR+wx_ZWPd6tR*F~j*>C0xCiL4^;aAuH&&ibDg-V|uc@X-^J*)f zfic^DtbvwjK%8h`qHmsRrVZkjmQ`&vC1a+*i4o}7avoo!h-q7R&m5Bc zDhSAJX)?b;c0i_qU&wRMaUgHM1sHmy(yNQw@t)XRtMW9ib`8Mc54qh3tyhpzb6Pbs$n_x`m7>X!R!JA#ot3&E#$~1={+>;I zJ|2xQFVXJ;Bgb^j#a(d|CUTkkmW2bRG9cQlkU`H&L#m?6lyu@B4pNgOLer7CE!xiE z&LI~0z6aA(Q-3^*kK5n2t1PSx(+Qae*jxUL8^EYtU3y>5>&8vku@(9F)PExXEGOik zY=Ky+`6z$1V*@|ftxfEC3;x;L*$IuDwdW=(Q~?JcRWh6t!45Wu2l)o-dU_10Ng$4V z%#&-knynz6G`g#0CY9^;+DRYo(%?u1>bB!+_Se{9i{ju|qmqh=jdX#a*)uj%OVu6`@F9={{sZ}nA1!`7D^(^J~dOM#ns-uCJZn*^xP=gh^wi3GbEw| z3qpMliNuq5(@NB>X4O>MziE&3uYr5HNh{eG0EYYCmE_P`+qT;ilIpXj!gp;xM};y= zZsO^id`Xqb3ljATcMwZ~5`gzGcwwu?5jM5-d~XEuy&uP}E#LznshryAwYt21%9%^Cc#LZWM(0q}z5^FE1?B4?Mz>K@$&K;i@Hzx=cHC( z82^fZRPsxo+vwN@Iu>;{;%5j$s_o^142zHYC~s&l-SVLg9v?NzJd7_;EwnbN)Qd0A{Ef`lOuFw|^1m z-(iU8mZ%FaSM*(fPQ_&#c+eoYJ7t6`Q17@EOL6fQCT;N$HR6KWimbyBd(u02XV>AS zgD3U;8p_&J%^SgP+pz9N($4N;(%}7RrKyUJ2paQZ<*?|D9{G@N7S@ihfhSPsJOEh6 zkv9sayvPveJ5W7(|3gzRXv>o!8DBYuj@e5zMQowJYjwp!RzH;1;GR2NHgO4l4h_Uw z`XMc!l!V-tUBNMgNGCnp!b4w6q8oiSFN(GfD%3jQzLjH8{7IhNi#!G@1btLZpww}K%5Bq(Tb&0PV!LQ<`7(F`?Zo9Hvj0g z%#-w>#H00kNOmrz2h)>vm|(U#w*Yk zp93dLP})ouPBwW&WZ&AWaYD&s7j%Y5_p++2EO>n+Z2gUj#a+)Ucn9ZjzLrSbp(eC& zK3R?_9Kr&G<>Az;NItIK!ye;qwTR7N7H5{Or5b)KWId*?^ezee<_Pb+EH*#gzc@G% z7c88FHjec|u0y(2T8|`Td)#723cAs$eoIISIeYR&ww9-n&$_{CPdOoZxFn_VNqknmj<*HWT-g5?fYzmao zpHiB>|`?@t;s2!V-W2d*{pIWVPIe%c#xbxGo@P@J>rs@4RRD)3?n)gciUYmMnwr zO=ZMxy_qQYq;$Digpf9Pr_Bf^o=amlAN`JVX4 z{h-^>Lpy}#Bf{psHxVm?O;^s-|4E_FOmu$d&-MnS=h^)gH8YtNbf}g72+`w6cpF11Mpyp*e(4keZWJqyt_6E1cL;n*YmE{1435@*X&+QSOP?e(9LM+*`or zKB5M&LhN3a=WkfyJpe0Iu57({0%e^%407z`_#Em;o*rE21`u+1JN9>))yWf|)E{Go z)xn&Mrw6|Va5~1_brw2}o;FMzV}+)2Nq^&LzXlJ9I>rh)#bBq=(@7V=@;NF1-T4i= zRX&DplU}!E9sg8K{|8dn r|8B?0{qUC({2%7n{oiiK4*tyDf=0Hh*lDvrfFHHnTDJ-mEuQ`_zy}?& From a0ea30661a1267b28dec18c7888b3d9a368e199b Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 14 Mar 2017 14:46:15 +0100 Subject: [PATCH 017/200] add more logs --- .gitignore | 4 +- .settings/language.settings.xml | 2 +- components/awsiot/awsiot.c | 13 ++- components/awsiot/awsiot_rest.c | 28 ++++- components/bmx280/bmx280.c | 6 +- components/bmx280/i2c_bme280.c | 4 +- components/bootwifi/bootwifi.c | 30 ++--- components/net/thing_speak.c | 8 +- components/oap_common/include/oap_debug.h | 37 +++++++ components/oap_common/include/ssl_client.h | 2 +- components/oap_common/oap_common.c | 3 + components/oap_common/oap_debug.c | 121 +++++++++++++++++++++ components/oap_common/oap_storage.c | 2 + components/oap_common/ssl_client.c | 33 +++--- components/pmsx003/pmsx003.c | 15 ++- debug.sh | 1 + flash-monitor.sh | 2 + main/Kconfig.projbuild | 8 +- main/main.c | 34 +++--- main/pm_meter.c | 5 +- main/pm_meter.h | 2 +- 21 files changed, 284 insertions(+), 76 deletions(-) create mode 100644 components/oap_common/include/oap_debug.h create mode 100644 components/oap_common/oap_debug.c create mode 100755 debug.sh create mode 100755 flash-monitor.sh diff --git a/.gitignore b/.gitignore index 72cfe73..184652f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ sdkconfig sdkconfig.* .DS_Store main/*.bak -core.dat \ No newline at end of file +core.dat +/tmp +/logs \ No newline at end of file diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 2e92b33..bf43130 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index 6407e49..604c27f 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -34,6 +34,7 @@ #include "awsiot_rest.h" #include "oap_storage.h" #include "oap_common.h" +#include "oap_debug.h" #include "cJSON.h" @@ -51,6 +52,8 @@ static void awsiot_task() { while (1) { if(xQueuePeek(input_queue, &meas, 1000)) { + log_task_stack(TAG); + cJSON* shadow = cJSON_CreateObject(); cJSON* state = cJSON_CreateObject(); cJSON* reported = cJSON_CreateObject(); @@ -58,17 +61,20 @@ static void awsiot_task() { cJSON* config = cJSON_CreateObject(); cJSON* pm = cJSON_CreateObject(); cJSON* weather = cJSON_CreateObject(); - + cJSON* status = cJSON_CreateObject(); cJSON_AddItemToObject(shadow, "state", state); cJSON_AddItemToObject(state, "reported", reported); cJSON_AddItemToObject(reported, "results", results); cJSON_AddItemToObject(reported, "config", config); - + cJSON_AddItemToObject(reported, "status", status); cJSON_AddItemToObject(results, "pm", pm); cJSON_AddItemToObject(results, "weather", weather); cJSON_AddNumberToObject(results, "uid", rand()); //what about 0? + cJSON_AddNumberToObject(status, "heap", xPortGetFreeHeapSize()); + cJSON_AddNumberToObject(status, "heap_min", xPortGetMinimumEverFreeHeapSize()); + if (meas.local_time) { cJSON_AddNumberToObject(reported, "localTime", meas.local_time); @@ -176,7 +182,8 @@ QueueHandle_t awsiot_init(oap_sensor_config_t _sensor_config) if (awsiot_configure(&awsiot_config) == ESP_OK) { sensor_config = _sensor_config; input_queue = xQueueCreate(1, sizeof(oap_meas)); - xTaskCreate(&awsiot_task, "awsiot_task", 1024*10, NULL, 5, NULL); + //8192-2684=5508 bytes consumed + xTaskCreate(&awsiot_task, "awsiot_task", 1024*8, NULL, 5, NULL); return input_queue; } else { release(awsiot_config); diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 3e36990..7a78341 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -34,6 +34,7 @@ #include "awsiot_rest.h" #include "ssl_client.h" #include "oap_common.h" +#include "oap_debug.h" //#define WEB_SERVER "a32on3oilq3poc.iot.eu-west-1.amazonaws.com" //#define WEB_PORT "8443" @@ -44,22 +45,27 @@ static const char *TAG = "awsiot"; extern const uint8_t verisign_root_ca_pem_start[] asm("_binary_verisign_root_ca_pem_start"); extern const uint8_t verisign_root_ca_pem_end[] asm("_binary_verisign_root_ca_pem_end"); +#define RESPONSE_BUF_SIZE 1024 esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { + heap_log* hl = heap_log_take(NULL, "start"); sslclient_context ssl_client = {}; ssl_init(&ssl_client); int ret = ESP_OK; + heap_log_take(hl, "after ssl_init"); ESP_LOGD(TAG, "connecting to %s:%d", awsiot_config.endpoint,awsiot_config.port); - if ((ssl_client.socket = open_socket(awsiot_config.endpoint,awsiot_config.port,5,0)) < 0) { + if ((ssl_client.socket = open_socket(awsiot_config.endpoint,awsiot_config.port,1,0)) < 0) { return ssl_client.socket; } else { ESP_LOGD(TAG, "connected"); } + heap_log_take(hl, "connected"); char* rootCA = str_make((void*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); if (start_ssl_client(&ssl_client, (unsigned char*)rootCA, (unsigned char*)awsiot_config.cert, (unsigned char*)awsiot_config.pkey) > 0) { free(rootCA); + heap_log_take(hl, "start_ssl_client"); char* request = malloc(strlen(body) + 250); sprintf(request, "POST /things/%s/shadow HTTP/1.1\n" @@ -69,16 +75,23 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { "Content-Length: %d\n" "\r\n%s", awsiot_config.thingName, awsiot_config.endpoint, strlen(body), body); - ESP_LOGD(TAG, "%s", request); + ESP_LOGD(TAG, "%s (%d bytes)", request, strlen(request)); + + heap_log_take(hl, "built request"); send_ssl_data(&ssl_client, (uint8_t *)request, strlen(request)); + + heap_log_take(hl, "send_ssl_data"); + free(request); + heap_log_take(hl, "free request"); + int len; //TODO parse at least status code (would be nice to get json body) too - unsigned char buf[1024]; + unsigned char* buf = malloc(RESPONSE_BUF_SIZE); do { - len = get_ssl_receive(&ssl_client, buf, 1024); + len = get_ssl_receive(&ssl_client, buf, RESPONSE_BUF_SIZE); if (len == MBEDTLS_ERR_SSL_WANT_READ || len == MBEDTLS_ERR_SSL_WANT_WRITE) { continue; } else if (len == -0x4C) { @@ -88,16 +101,19 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { ret = len; break; } - for (int i =0; i < len ; i++) { + for (int i=0; i < len ; i++) { putchar(buf[i]); } } while (1); + free(buf); } else { free(rootCA); ret = ESP_FAIL; } + heap_log_take(hl, "request done"); stop_ssl_socket(&ssl_client); - + heap_log_take(hl, "stop_ssl_socket"); + heap_log_free(hl); ESP_LOGI(TAG, "ssl request done %d", ret); return ret; diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index a2bea94..21168cd 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -28,9 +28,11 @@ #include #include "sdkconfig.h" #include "oap_common.h" +#include "oap_debug.h" #include "include/bmx280.h" #include "i2c_bme280.h" + static char* TAG = "bmx280"; static QueueHandle_t samples_queue; @@ -38,6 +40,7 @@ static void bmx280_task() { // TODO strangely, if this is executed inside main task, LEDC fails to initialise properly PWM (and blinks in funny ways)... easy to reproduce. if (BME280_init(BME280_MODE_NORMAL, CONFIG_OAP_BMX280_I2C_NUM, CONFIG_OAP_BMX280_ADDRESS) == ESP_OK) { while(1) { + log_task_stack(TAG); if (BME280_read() == ESP_OK) { env_data result = BME280_last_result(); ESP_LOGD(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.temp, result.pressure, result.humidity); @@ -70,6 +73,7 @@ static void i2c_setup() { QueueHandle_t bmx280_init() { samples_queue = xQueueCreate(1, sizeof(env_data)); i2c_setup(); - xTaskCreate(bmx280_task, "bmx280_task", 1024*2, NULL, 10, NULL); + //2kb => ~380bytes free + xTaskCreate(bmx280_task, "bmx280_task", 1024*3, NULL, 10, NULL); return samples_queue; } diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c index 01bf7ed..9db705c 100755 --- a/components/bmx280/i2c_bme280.c +++ b/components/bmx280/i2c_bme280.c @@ -81,7 +81,7 @@ static char* TAG = "i2c_bmx280"; static env_data result = {}; -#define CONT_IF_I2C_OK(log, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err:%s",log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); +#define CONT_IF_I2C_OK(log, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err: %d (%s)",rc,log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); #define CONT_IF_OK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) return rc; } while(0); static esp_err_t read_i2c(uint8_t reg, uint8_t* data, int len) { @@ -91,7 +91,7 @@ static esp_err_t read_i2c(uint8_t reg, uint8_t* data, int len) { CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (device_addr << 1) | I2C_MASTER_WRITE, 1)); CONT_IF_I2C_OK("r3", i2c_master_write_byte(cmd, reg, 1)); CONT_IF_I2C_OK("r4", i2c_master_stop(cmd)); - CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(i2c_num, cmd, 1000/portTICK_PERIOD_MS)); + CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(i2c_num, cmd, 1000/portTICK_PERIOD_MS)); //often ESP_FAIL (no ack received) i2c_cmd_link_delete(cmd); cmd = 0; diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 4667232..5c21639 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -86,6 +86,7 @@ static void handler_index(struct mg_connection *nc) { size_t resp_size = index_html_end-index_html_start; mg_send_head(nc, 200, resp_size, "Content-Type: text/html"); mg_send(nc, index_html_start, resp_size); + ESP_LOGD(tag, "served %d bytes", resp_size); } static void handler_get_config(struct mg_connection *nc, struct http_message *message) { @@ -218,6 +219,17 @@ int set_access_point_ip() return err; } +static void start_mongoose() { + if (CONFIG_OAP_CONTROL_PANEL) { + if (!g_mongooseStarted) { + g_mongooseStarted = 1; + xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL, 0); + //xTaskCreate(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL); + } + } else { + ESP_LOGW(tag, "control panel disabled by config flag"); + } +} /** * An ESP32 WiFi event handler. @@ -257,12 +269,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { ESP_LOGI(tag, "* point your browser to http://"IPSTR, IP2STR(&ip_info.ip)); ESP_LOGI(tag, "**********************************************"); - // Start Mongoose ... - if (!g_mongooseStarted) - { - g_mongooseStarted = 1; - xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL, 0); - } + start_mongoose(); break; } // SYSTEM_EVENT_AP_START @@ -287,14 +294,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { ESP_LOGD(tag, "********************************************"); initialize_sntp(); - - //g_mongooseStopRequest = 1; // Stop mongoose (if it is running). - - if (!g_mongooseStarted) - { - g_mongooseStarted = 1; - xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL, 0); - } + start_mongoose(); break; } @@ -368,7 +368,7 @@ static void become_station(oc_wifi_t *pConnectionInfo) { memcpy(sta_config.sta.password, pConnectionInfo->password, PASSWORD_SIZE); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); ESP_ERROR_CHECK(esp_wifi_start()); - ESP_ERROR_CHECK(esp_wifi_connect()); + ESP_ERROR_CHECK(esp_wifi_connect());//FIXERR 0x3006 : ESP_ERR_WIFI_CONN (happens after reboot via control panel) } static void become_access_point() { diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index 0ad2eeb..d96142b 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -40,6 +40,7 @@ #include "thing_speak.h" #include "oap_common.h" #include "oap_storage.h" +#include "oap_debug.h" #define OAP_THING_SPEAK_HOST "api.thingspeak.com" #define OAP_THING_SPEAK_PORT 80 @@ -90,13 +91,15 @@ static int post_data(oap_meas meas) { freeaddrinfo(res); char payload[200]; - sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f&field6=%.2f", apikey, + sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f&field6=%.2f&field7=%d&field8=%d", apikey, meas.pm.pm1_0, meas.pm.pm2_5, meas.pm.pm10, meas.env.temp, meas.env.pressure, - meas.env.humidity); + meas.env.humidity, + xPortGetFreeHeapSize(), + xPortGetMinimumEverFreeHeapSize()); char request[512]; @@ -136,6 +139,7 @@ static void thing_speak_task() { oap_meas meas; while (1) { if(xQueuePeek(input_queue, &meas, 1000)) { + log_task_stack(TAG); if (post_data(meas)) { xQueueReceive(input_queue, &meas, 1000); ESP_LOGI(TAG, "data sent successfully"); diff --git a/components/oap_common/include/oap_debug.h b/components/oap_common/include/oap_debug.h new file mode 100644 index 0000000..7c30e75 --- /dev/null +++ b/components/oap_common/include/oap_debug.h @@ -0,0 +1,37 @@ +/* + * oap_debug.h + * + * Created on: Mar 13, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +typedef struct heap_log { + size_t heap; + char* tag; + struct heap_log* next; +} heap_log; + +void heap_log_print(heap_log* log, heap_log* prev); +heap_log* heap_log_take(heap_log* log, char* msg); +void heap_log_free(heap_log* log); + + +void log_task_stack(char* TAG); +void log_heap_size(char* TAG, char* msg); + + diff --git a/components/oap_common/include/ssl_client.h b/components/oap_common/include/ssl_client.h index 016158c..b19615a 100644 --- a/components/oap_common/include/ssl_client.h +++ b/components/oap_common/include/ssl_client.h @@ -35,7 +35,7 @@ typedef struct sslclient_context { int socket; - mbedtls_net_context net_ctx; + //mbedtls_net_context net_ctx; mbedtls_ssl_context ssl_ctx; mbedtls_ssl_config ssl_conf; diff --git a/components/oap_common/oap_common.c b/components/oap_common/oap_common.c index 096da8f..2001bba 100644 --- a/components/oap_common/oap_common.c +++ b/components/oap_common/oap_common.c @@ -27,6 +27,7 @@ #include #include "oap_common.h" #include "esp_attr.h" +#include "esp_log.h" #include "freertos/task.h" static const long FEB22_2017 = 1487795557; @@ -92,3 +93,5 @@ void IRAM_ATTR delayMicroseconds(uint32_t us) } } } + + diff --git a/components/oap_common/oap_debug.c b/components/oap_common/oap_debug.c new file mode 100644 index 0000000..3117eba --- /dev/null +++ b/components/oap_common/oap_debug.c @@ -0,0 +1,121 @@ +/* + * oap_debug.c + * + * Created on: Mar 13, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include "freertos/FreeRTOS.h" +#include +#include "oap_debug.h" +#include "esp_attr.h" +#include "esp_log.h" +#include "freertos/task.h" + +/** + * this method is surprisingly stack heavy - it takes ~ 1000 bytes. + * before using it, adjust task stack accordingly. + */ +void log_task_stack(char* TAG) { + //uxTaskGetStackHighWaterMark is marked as UNTESTED + #if !CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION + ESP_LOGW(TAG, "----------> TASK MIN STACK: %d", uxTaskGetStackHighWaterMark( NULL )); + #endif +} + + +static size_t last_free_heap = 0; + +void log_heap_size(char* TAG, char* msg) { + size_t free_heap = xPortGetFreeHeapSize(); + if (last_free_heap == 0) last_free_heap = free_heap; + ESP_LOGW(TAG, "----------> free heap (%s): %d (since last: %d, min: %d)", msg, free_heap, free_heap-last_free_heap, xPortGetMinimumEverFreeHeapSize()); + last_free_heap = free_heap; +} + +static int heap_log_count = 0; + +/* + | 100 | + | -1 | + 99 | | 100 (c=1) + | -10 | + | -1 | + 88 | | 90 (c=2) +*/ + +void heap_log_list(heap_log* log) { + heap_log* prev = NULL; + int c = 0; + while (log) { + c++; + heap_log_print(log, prev); + prev = log; + log = log->next; + } +} + +void heap_log_print(heap_log* log, heap_log* prev) { + size_t comp_heap = log->heap + heap_log_count * sizeof(heap_log); + if (prev == NULL) { + ESP_LOGW("debug", "----------> heap %25s: %d", log->tag, comp_heap); + } else { + size_t diff_heap = log->heap - prev->heap + sizeof(heap_log); + ESP_LOGW("debug", "----------> heap %25s: %d \t (%d)", log->tag, comp_heap, diff_heap); + } +} + +heap_log* heap_log_take(heap_log* log, char* msg) { + heap_log* new_log = malloc(sizeof(heap_log)); + heap_log_count++; + new_log->tag = strdup(msg); + new_log->next = NULL; + + //find tail + if (log != NULL) { + while (log->next) { + log = log->next; + } + log->next = new_log; + } + + new_log->heap = xPortGetFreeHeapSize(); + //heap_log_print(new_log, log); + return new_log; +} + +void heap_log_free(heap_log* log) { + if (log) { + size_t initial_heap = log->heap; + + heap_log_list(log); + heap_log* next; + do { + next = log->next; + free(log->tag); + free(log); + heap_log_count--; + log = next; + } while (log); + + + ESP_LOGW("debug", "----------> leaked : %d", xPortGetFreeHeapSize() - initial_heap); + } +} diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 6a22774..e0b04b0 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -96,6 +96,7 @@ int storage_get_str(const char* key, char** out_value) { void storage_put_blob(const char* key, void* value, size_t length) { nvs_handle handle; ESP_ERROR_CHECK(nvs_open(NAMESPACE, NVS_READWRITE, &handle)); + ESP_LOGD(TAG, "store blob '%s'=%d bytes", key, length); ESP_ERROR_CHECK(nvs_set_blob(handle, key, value, length)); ESP_ERROR_CHECK(nvs_commit(handle)); nvs_close(handle); @@ -104,6 +105,7 @@ void storage_put_blob(const char* key, void* value, size_t length) { void storage_put_str(const char* key, char* value) { nvs_handle handle; ESP_ERROR_CHECK(nvs_open(NAMESPACE, NVS_READWRITE, &handle)); + ESP_LOGD(TAG, "store string '%s'=%d bytes", key, strlen(value)); ESP_ERROR_CHECK(nvs_set_str(handle, key, value)); ESP_ERROR_CHECK(nvs_commit(handle)); nvs_close(handle); diff --git a/components/oap_common/ssl_client.c b/components/oap_common/ssl_client.c index 0a09149..cdc7eee 100644 --- a/components/oap_common/ssl_client.c +++ b/components/oap_common/ssl_client.c @@ -177,7 +177,8 @@ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, u { char buf[512]; int ret, flags; - DEBUG_PRINT("Free heap before TLS %u\n", xPortGetFreeHeapSize()); + size_t free_heap_before = xPortGetFreeHeapSize(); + DEBUG_PRINT("Free heap before TLS %u\n", free_heap_before); do { DEBUG_PRINT( "Seeding the random number generator\n"); @@ -283,7 +284,6 @@ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, u vPortYield(); } - if (cli_cert != NULL && cli_key != NULL) { DEBUG_PRINT("Protocol is %s \nCiphersuite is %s\n", mbedtls_ssl_get_version(&ssl_client->ssl_ctx), mbedtls_ssl_get_ciphersuite(&ssl_client->ssl_ctx)); if ((ret = mbedtls_ssl_get_record_expansion(&ssl_client->ssl_ctx)) >= 0) { @@ -293,22 +293,22 @@ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, u } } + DEBUG_PRINT( "Verifying peer X.509 certificate...\n"); - DEBUG_PRINT( "Verifying peer X.509 certificate...\n"); - - if ((flags = mbedtls_ssl_get_verify_result(&ssl_client->ssl_ctx)) != 0) { - printf( "Failed to verify peer certificate!\n"); - bzero(buf, sizeof(buf)); - mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); - printf( "verification info: %s\n", buf); - stop_ssl_socket(ssl_client); //It's not safe continue. - } else { - DEBUG_PRINT( "Certificate verified.\n"); - } + if ((flags = mbedtls_ssl_get_verify_result(&ssl_client->ssl_ctx)) != 0) { + printf( "Failed to verify peer certificate!\n"); + bzero(buf, sizeof(buf)); + mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); + printf( "verification info: %s\n", buf); + stop_ssl_socket(ssl_client); //It's not safe continue. + } else { + DEBUG_PRINT( "Certificate verified.\n"); + } } while (0); - DEBUG_PRINT("Free heap after TLS %u\n", xPortGetFreeHeapSize()); + size_t free_heap_after = xPortGetFreeHeapSize(); + DEBUG_PRINT("Free heap after TLS %u (-%u)\n", free_heap_after, free_heap_before-free_heap_after); return ssl_client->socket; } @@ -340,7 +340,6 @@ void stop_ssl_socket(sslclient_context *ssl_client) } } - int data_to_read(sslclient_context *ssl_client) { @@ -356,8 +355,6 @@ int data_to_read(sslclient_context *ssl_client) return res; } - - int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t len) { //DEBUG_PRINT( "Writing HTTP request...\n"); //for low level debug @@ -375,8 +372,6 @@ int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t l return ret; } - - int get_ssl_receive(sslclient_context *ssl_client, uint8_t *data, int length) { //DEBUG_PRINT( "Reading HTTP response...\n"); //for low level debug diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 40342b7..f247854 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -31,9 +31,10 @@ #include "esp_log.h" #include "pmsx003.h" #include "oap_common.h" +#include "oap_debug.h" /* - * Driver for Plantower PMS3003 and PMS5003 dust sensors (not tested with PMS7003 yet). + * Driver for Plantower PMS3003 / PMS5003 / PMS7003 dust sensors. * PMSx003 sensors return two values for different environment of measurement. */ #define OAP_PM_UART_BUF_SIZE (128) @@ -75,22 +76,23 @@ static pm_data decodepm_data(uint8_t* data, uint8_t startByte) { return pm; } -static void pms_uart_read() -{ +static void pms_uart_read() { uint8_t* data = (uint8_t*) malloc(32); while(1) { - int len = uart_read_bytes(CONFIG_OAP_PM_UART_NUM, data, 32, 100 / portTICK_RATE_MS); + int len = uart_read_bytes(CONFIG_OAP_PM_UART_NUM, data, 32, 100 / portTICK_RATE_MS); if (!enabled) continue; if (len >= 24 && data[0]==0x42 && data[1]==0x4d) { + log_task_stack(TAG); //ESP_LOGI(TAG, "got frame of %d bytes", len); pm_data pm = decodepm_data(data, indoor ? 4 : 10); //atmospheric from 10th byte, standard from 4th if (!xQueueSend(samples, &pm, 100)) { ESP_LOGW(TAG, "sample queue overflow"); } } else if (len > 0) { - ESP_LOGW(TAG, "invalid frame of %d", len); + ESP_LOGW(TAG, "invalid frame of %d", len); //we often get an error after this :( } } + vTaskDelete(NULL); } void pms_enable(int _enabled) { @@ -106,7 +108,8 @@ QueueHandle_t pms_init(int _indoor) { pms_enable(0); pms_init_uart(); - xTaskCreate(pms_uart_read, "pms_uart_read", 1024*2, NULL, 10, NULL); + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate(pms_uart_read, "pms_uart_read", 1024*3, NULL, 10, NULL); return samples; } diff --git a/debug.sh b/debug.sh new file mode 100755 index 0000000..8af9242 --- /dev/null +++ b/debug.sh @@ -0,0 +1 @@ +xtensa-esp32-elf-gdb build/sensor-esp32.elf diff --git a/flash-monitor.sh b/flash-monitor.sh new file mode 100755 index 0000000..4c89373 --- /dev/null +++ b/flash-monitor.sh @@ -0,0 +1,2 @@ +make flash monitor -j5 | tee logs/`date +%Y-%m-%d%H%M`.log + diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 55651ae..c4f0531 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -20,6 +20,12 @@ config OAP_RESULT_BUFFER_SIZE help Buffer for data that cannot be immediately published because sensor is offline. For some services that can accept only real-time data, this should be set to 1. - + +config OAP_CONTROL_PANEL + int "enable control panel" + default 1 + help + Enable web-based control panel where you can configure various parameters of the sensor, + including wifi and data publishing settings endmenu \ No newline at end of file diff --git a/main/main.c b/main/main.c index 2287127..9f9c944 100644 --- a/main/main.c +++ b/main/main.c @@ -40,6 +40,7 @@ #include "pmsx003.h" #include "pm_meter.h" #include "oap_storage.h" +#include "oap_debug.h" #include "awsiot.h" static const char *TAG = "app"; @@ -100,35 +101,39 @@ static void update_led_color(led_mode mode, float r, float g, float b) { } static void pm_meter_trigger_task() { + int delay = (sensor_config.measInterval-sensor_config.measTime); pm_meter_init(pms_init(sensor_config.indoor)); while (1) { + log_task_stack("pm_meter_trigger"); update_led_mode(LED_PULSE); pm_meter_start(sensor_config.warmUpTime); vTaskDelay(sensor_config.measTime * 1000 / portTICK_PERIOD_MS); - pm_data pm = pm_meter_stop(); + pm_data pm = pm_meter_sample(delay>0); update_led_mode(LED_SET); xQueueSend(pm_queue, &pm, 1000 / portTICK_PERIOD_MS); //1sec - vTaskDelay((sensor_config.measInterval-sensor_config.measTime) * 1000 / portTICK_PERIOD_MS); + if (delay > 0) { + vTaskDelay(delay * 1000 / portTICK_PERIOD_MS); + } else { + vTaskDelay(10); + } } } static void main_task() { - pm_queue = xQueueCreate(1, sizeof(pm_data)); - - //buffer up to 100 measurements - led_queue = xQueueCreate(10, sizeof(led_cmd)); - - QueueHandle_t thing_speak_queue = thing_speak_init(); QueueHandle_t awsiot_queue = awsiot_init(sensor_config); // while (awsiot_queue && 1) { // oap_meas meas = {}; // if (!xQueueSend(awsiot_queue, &meas, 1)) { -// ESP_LOGW(TAG,"awsiot_queue queue overflow"); +// //ESP_LOGW(TAG,"awsiot_queue queue overflow"); // } -// vTaskDelay(1000); +// vTaskDelay(100); // } + + QueueHandle_t thing_speak_queue = thing_speak_init(); + pm_queue = xQueueCreate(1, sizeof(pm_data)); + led_queue = xQueueCreate(10, sizeof(led_cmd)); QueueHandle_t env_queue = bmx280_init(); led_init(get_config().led, led_queue); update_led(); @@ -154,6 +159,7 @@ static void main_task() { pm_data pm; if (xQueueReceive(pm_queue, &pm, 100)) { + log_task_stack("main_task"); float aqi = fminf(pm.pm2_5 / 100.0, 1.0); ESP_LOGI(TAG, "AQI=%f",aqi); @@ -183,7 +189,7 @@ static void main_task() { void app_main() { - vTaskDelay(1000 / portTICK_PERIOD_MS); + delay(1000); ESP_LOGI(TAG,"starting app..."); storage_init(); @@ -191,9 +197,9 @@ void app_main() //wifi/mongoose requires plenty of mem, start it here bootWiFi(); - xTaskCreate(main_task, "main_task", 1024*10, NULL, 10, NULL); - xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*8, NULL, 10, NULL); + xTaskCreate(main_task, "main_task", 1024*4, NULL, 10, NULL); + xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, 10, NULL); while (1) { - vTaskDelay(10000 / portTICK_PERIOD_MS); + delay(10000); } } diff --git a/main/pm_meter.c b/main/pm_meter.c index b470e81..b14c3db 100644 --- a/main/pm_meter.c +++ b/main/pm_meter.c @@ -88,8 +88,8 @@ void pm_meter_start(unsigned int _warmingTime) { pms_enable(1); } -pm_data pm_meter_stop() { - pms_enable(0); +pm_data pm_meter_sample(int disable_sensor) { + if (disable_sensor) pms_enable(0); pm_data avg = { .pm1_0 = 0, .pm2_5 = 0, @@ -121,4 +121,3 @@ void pm_meter_init(QueueHandle_t _samples_queue) { sampleBuffer = malloc(CONFIG_OAP_PM_SAMPLE_BUF_SIZE * sizeof(pm_data)); xTaskCreate(pm_data_collector_task, "pm_data_collector_task", 1024*4, NULL, 10, NULL); } - diff --git a/main/pm_meter.h b/main/pm_meter.h index ea39c40..a7b2e06 100644 --- a/main/pm_meter.h +++ b/main/pm_meter.h @@ -32,7 +32,7 @@ typedef enum { } pm_meas_mode; void pm_meter_start(unsigned int warmingTime); -pm_data pm_meter_stop(); +pm_data pm_meter_sample(int disable_sensor); void pm_meter_init(QueueHandle_t samples_queue); #endif /* MAIN_PM_METER_H_ */ From 0f192c9872ff7627526e31a22e3694ef8d4c506a Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 14 Mar 2017 19:59:03 +0100 Subject: [PATCH 018/200] fix crash during soft reboot --- components/bootwifi/bootwifi.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 5c21639..a45c20e 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -66,6 +66,7 @@ typedef uint16_t u16_t; static int g_mongooseStarted = 0; // Has the mongoose server started? static int g_mongooseStopRequest = 0; // Request to stop the mongoose server. +static int reboot_in_progress = 0; // Forward declarations static int is_station = 0; @@ -104,6 +105,7 @@ static void handler_get_config(struct mg_connection *nc, struct http_message *me static void handler_reboot(struct mg_connection *nc) { mg_send_head(nc, 200, 0, "Content-Type: text/plain"); ESP_LOGW(tag, "received reboot request!"); + reboot_in_progress = 1; esp_restart(); } @@ -250,6 +252,8 @@ static void start_mongoose() { * SYSTEM_EVENT_WIFI_READY */ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { + if (reboot_in_progress) return ESP_OK; //ignore - trying to reconnect now will crash + // Your event handling code here... switch(event->event_id) { // When we have started being an access point, then start being a web server. From cbf6fa991c5b40315655df0a4fea1ef0657806e9 Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 16 Mar 2017 11:45:32 +0100 Subject: [PATCH 019/200] improved stability - clients send results sequentially - memory leaks removed - rgb led not pulsing - fixed - problems after soft reboot - fixed --- components/awsiot/awsiot.c | 186 ++++++++++++--------- components/awsiot/awsiot_rest.c | 24 +-- components/awsiot/include/awsiot.h | 5 +- components/bmx280/bmx280.c | 2 +- components/bootwifi/bootwifi.c | 3 +- components/net/include/thing_speak.h | 5 +- components/net/thing_speak.c | 97 +++++++---- components/oap_common/include/oap_common.h | 2 + components/oap_common/include/oap_debug.h | 8 +- components/oap_common/oap_debug.c | 16 +- components/oap_common/ssl_client.c | 95 ++++++----- components/peripherals/ctrl_btn.c | 4 +- components/peripherals/rgb_led.c | 41 +++-- components/pmsx003/pmsx003.c | 2 +- main/main.c | 76 ++++----- main/pm_meter.c | 2 +- 16 files changed, 316 insertions(+), 252 deletions(-) diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index 604c27f..084f44f 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -24,6 +24,7 @@ #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" +#include "freertos/semphr.h" #include "freertos/event_groups.h" #include "esp_wifi.h" #include "esp_event_loop.h" @@ -37,104 +38,87 @@ #include "oap_debug.h" #include "cJSON.h" - -QueueHandle_t input_queue; - static const char *TAG = "awsiot"; - static awsiot_config_t awsiot_config = {0}; -static oap_sensor_config_t sensor_config; +static int config_sent = 0; -static void awsiot_task() { - oap_meas meas; - int updated = 0; - while (1) { - if(xQueuePeek(input_queue, &meas, 1000)) { +#define AWS_NOT_CONFIGURED 1 +static esp_err_t configured = AWS_NOT_CONFIGURED; - log_task_stack(TAG); - cJSON* shadow = cJSON_CreateObject(); - cJSON* state = cJSON_CreateObject(); - cJSON* reported = cJSON_CreateObject(); - cJSON* results = cJSON_CreateObject(); - cJSON* config = cJSON_CreateObject(); - cJSON* pm = cJSON_CreateObject(); - cJSON* weather = cJSON_CreateObject(); - cJSON* status = cJSON_CreateObject(); - - cJSON_AddItemToObject(shadow, "state", state); - cJSON_AddItemToObject(state, "reported", reported); - cJSON_AddItemToObject(reported, "results", results); - cJSON_AddItemToObject(reported, "config", config); - cJSON_AddItemToObject(reported, "status", status); - - cJSON_AddItemToObject(results, "pm", pm); - cJSON_AddItemToObject(results, "weather", weather); - cJSON_AddNumberToObject(results, "uid", rand()); //what about 0? - cJSON_AddNumberToObject(status, "heap", xPortGetFreeHeapSize()); - cJSON_AddNumberToObject(status, "heap_min", xPortGetMinimumEverFreeHeapSize()); - - - if (meas.local_time) { - cJSON_AddNumberToObject(reported, "localTime", meas.local_time); - } else { - ESP_LOGW(TAG, "localTime not set, skip"); - } +static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_config) { + cJSON* shadow = cJSON_CreateObject(); + cJSON* state = cJSON_CreateObject(); + cJSON* reported = cJSON_CreateObject(); + cJSON* results = cJSON_CreateObject(); + cJSON* config = cJSON_CreateObject(); + cJSON* pm = cJSON_CreateObject(); + cJSON* weather = cJSON_CreateObject(); + cJSON* status = cJSON_CreateObject(); - if (!updated) { - //send it only once. of course if we want two-way configuration, we need versioning - cJSON_AddBoolToObject(config, "indoor", sensor_config.indoor); - cJSON_AddNumberToObject(config, "test", sensor_config.test); - } + cJSON_AddItemToObject(shadow, "state", state); + cJSON_AddItemToObject(state, "reported", reported); + cJSON_AddItemToObject(reported, "results", results); + cJSON_AddItemToObject(reported, "config", config); + cJSON_AddItemToObject(reported, "status", status); - cJSON_AddNumberToObject(pm, "pm1_0", meas.pm.pm1_0); - cJSON_AddNumberToObject(pm, "pm2_5", meas.pm.pm2_5); - cJSON_AddNumberToObject(pm, "pm10", meas.pm.pm10); + cJSON_AddItemToObject(results, "pm", pm); + cJSON_AddItemToObject(results, "weather", weather); + cJSON_AddNumberToObject(results, "uid", rand()); //what about 0? + cJSON_AddNumberToObject(status, "heap", xPortGetFreeHeapSize()); + cJSON_AddNumberToObject(status, "heap_min", xPortGetMinimumEverFreeHeapSize()); - cJSON_AddNumberToObject(weather, "temp", meas.env.temp); - cJSON_AddNumberToObject(weather, "pressure", meas.env.pressure); - cJSON_AddNumberToObject(weather, "humidity", meas.env.humidity); - char *body = cJSON_Print(shadow); + if (meas->local_time) { + cJSON_AddNumberToObject(reported, "localTime", meas->local_time); + } else { + ESP_LOGW(TAG, "localTime not set, skip"); + } - cJSON_Delete(shadow); + if (!config_sent) { + //send it only once. of course if we want two-way configuration, we need versioning + cJSON_AddBoolToObject(config, "indoor", sensor_config->indoor); + cJSON_AddNumberToObject(config, "test", sensor_config->test); + } - //ESP_LOGD(TAG, "shadow update: %s", body); + cJSON_AddNumberToObject(pm, "pm1_0", meas->pm.pm1_0); + cJSON_AddNumberToObject(pm, "pm2_5", meas->pm.pm2_5); + cJSON_AddNumberToObject(pm, "pm10", meas->pm.pm10); - esp_err_t res = awsiot_update_shadow(awsiot_config, body); - free(body); + cJSON_AddNumberToObject(weather, "temp", meas->env.temp); + cJSON_AddNumberToObject(weather, "pressure", meas->env.pressure); + cJSON_AddNumberToObject(weather, "humidity", meas->env.humidity); - if (res == ESP_OK) { - ESP_LOGI(TAG, "data sent successfully"); - xQueueReceive(input_queue, &meas, 1000); - updated = 1; - } else { - ESP_LOGW(TAG, "data post failed"); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } - } - } + char *body = cJSON_Print(shadow); + + cJSON_Delete(shadow); + + //ESP_LOGD(TAG, "shadow update: %s", body); + esp_err_t res = awsiot_update_shadow(awsiot_config, body); + free(body); + config_sent = config_sent || res == ESP_OK; + return res; } -static void release(awsiot_config_t awsiot_config) { - if (awsiot_config.thingName) free(awsiot_config.thingName); - if (awsiot_config.cert) free(awsiot_config.cert); - if (awsiot_config.pkey) free(awsiot_config.pkey); - if (awsiot_config.endpoint) free(awsiot_config.endpoint); +static void release_config(awsiot_config_t* awsiot_config) { + if (awsiot_config->thingName) free(awsiot_config->thingName); + if (awsiot_config->cert) free(awsiot_config->cert); + if (awsiot_config->pkey) free(awsiot_config->pkey); + if (awsiot_config->endpoint) free(awsiot_config->endpoint); } static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { cJSON* awsiot = storage_get_config("awsiot"); if (!awsiot) { ESP_LOGI(TAG, "config not found"); - return ESP_FAIL; + goto fail; } cJSON* field; if (!(field = cJSON_GetObjectItem(awsiot, "enabled")) || !field->valueint) { ESP_LOGI(TAG, "client disabled"); - return ESP_FAIL; + goto fail; } if ((field = cJSON_GetObjectItem(awsiot, "endpoint")) && field->valuestring) { @@ -142,14 +126,14 @@ static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { ESP_LOGI(TAG, "endpoint: %s", awsiot_config->endpoint); } else { ESP_LOGW(TAG, "endpoint not configured"); - return ESP_FAIL; + goto fail; } if ((field = cJSON_GetObjectItem(awsiot, "port")) && field->valueint) { awsiot_config->port = field->valueint; } else { ESP_LOGW(TAG, "port not configured"); - return ESP_FAIL; + goto fail; } if ((field = cJSON_GetObjectItem(awsiot, "thingName")) && field->valuestring) { @@ -157,36 +141,78 @@ static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { ESP_LOGI(TAG, "thingName: %s", awsiot_config->thingName); } else { ESP_LOGW(TAG, "apikey not configured"); - return ESP_FAIL; + goto fail; } if ((field = cJSON_GetObjectItem(awsiot, "cert")) && field->valuestring) { awsiot_config->cert = str_dup(field->valuestring); } else { ESP_LOGW(TAG, "cert not configured"); - return ESP_FAIL; + goto fail; } if ((field = cJSON_GetObjectItem(awsiot, "pkey")) && field->valuestring) { awsiot_config->pkey = str_dup(field->valuestring); } else { ESP_LOGW(TAG, "pkey not configured"); - return ESP_FAIL; + goto fail; } return ESP_OK; + + fail: + release_config(awsiot_config); + return ESP_FAIL; } -QueueHandle_t awsiot_init(oap_sensor_config_t _sensor_config) + +esp_err_t awsiot_send(oap_meas* meas, oap_sensor_config_t *sensor_config) { + if (configured == AWS_NOT_CONFIGURED) { + configured = awsiot_configure(&awsiot_config); + } + if (configured == ESP_OK) { + return awsiot_rest_post(meas, sensor_config); + } else { + return configured; + } +} + + + +/* +QueueHandle_t input_queue; + +static void awsiot_task() { + oap_meas meas; + + while (1) { + if(xQueuePeek(input_queue, &meas, 1000)) { + + log_task_stack(TAG); + xSemaphoreTake(networkHandle, portMAX_DELAY); + esp_err_t res = awsiot_post(&meas); + xSemaphoreGive(networkHandle); + + if (res == ESP_OK) { + ESP_LOGI(TAG, "data sent successfully"); + xQueueReceive(input_queue, &meas, 1000); + } else { + ESP_LOGW(TAG, "data post failed"); + vTaskDelay(5000 / portTICK_PERIOD_MS); + } + } + } +} + +QueueHandle_t awsiot_init(oap_sensor_config_t* _sensor_config) { if (awsiot_configure(&awsiot_config) == ESP_OK) { sensor_config = _sensor_config; input_queue = xQueueCreate(1, sizeof(oap_meas)); //8192-2684=5508 bytes consumed - xTaskCreate(&awsiot_task, "awsiot_task", 1024*8, NULL, 5, NULL); + xTaskCreate(&awsiot_task, "awsiot_task", 1024*10, NULL, DEFAULT_TASK_PRIORITY, NULL); return input_queue; } else { - release(awsiot_config); return NULL; } -} +}*/ diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 7a78341..639de2b 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -48,24 +48,24 @@ extern const uint8_t verisign_root_ca_pem_end[] asm("_binary_verisign_root_ca_ #define RESPONSE_BUF_SIZE 1024 esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { - heap_log* hl = heap_log_take(NULL, "start"); - sslclient_context ssl_client = {}; + //heap_log* hl = heap_log_take(NULL, "start"); + sslclient_context ssl_client = {.0}; ssl_init(&ssl_client); int ret = ESP_OK; - heap_log_take(hl, "after ssl_init"); + //heap_log_take(hl, "after ssl_init"); ESP_LOGD(TAG, "connecting to %s:%d", awsiot_config.endpoint,awsiot_config.port); if ((ssl_client.socket = open_socket(awsiot_config.endpoint,awsiot_config.port,1,0)) < 0) { return ssl_client.socket; } else { ESP_LOGD(TAG, "connected"); } - heap_log_take(hl, "connected"); + //heap_log_take(hl, "connected"); char* rootCA = str_make((void*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); - if (start_ssl_client(&ssl_client, (unsigned char*)rootCA, (unsigned char*)awsiot_config.cert, (unsigned char*)awsiot_config.pkey) > 0) { + if (start_ssl_client(&ssl_client, (unsigned char*)rootCA, (unsigned char*)awsiot_config.cert, (unsigned char*)awsiot_config.pkey) == ESP_OK) { free(rootCA); - heap_log_take(hl, "start_ssl_client"); + //heap_log_take(hl, "start_ssl_client"); char* request = malloc(strlen(body) + 250); sprintf(request, "POST /things/%s/shadow HTTP/1.1\n" @@ -77,15 +77,15 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { ESP_LOGD(TAG, "%s (%d bytes)", request, strlen(request)); - heap_log_take(hl, "built request"); + //heap_log_take(hl, "built request"); send_ssl_data(&ssl_client, (uint8_t *)request, strlen(request)); - heap_log_take(hl, "send_ssl_data"); + //heap_log_take(hl, "send_ssl_data"); free(request); - heap_log_take(hl, "free request"); + //heap_log_take(hl, "free request"); int len; //TODO parse at least status code (would be nice to get json body) too @@ -110,10 +110,10 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { free(rootCA); ret = ESP_FAIL; } - heap_log_take(hl, "request done"); + //heap_log_take(hl, "request done"); stop_ssl_socket(&ssl_client); - heap_log_take(hl, "stop_ssl_socket"); - heap_log_free(hl); + //heap_log_take(hl, "stop_ssl_socket"); + //heap_log_free(hl); ESP_LOGI(TAG, "ssl request done %d", ret); return ret; diff --git a/components/awsiot/include/awsiot.h b/components/awsiot/include/awsiot.h index 3992dab..0739886 100644 --- a/components/awsiot/include/awsiot.h +++ b/components/awsiot/include/awsiot.h @@ -23,8 +23,9 @@ #ifndef COMPONENTS_AWSIOT_INCLUDE_AWSIOT_H_ #define COMPONENTS_AWSIOT_INCLUDE_AWSIOT_H_ -QueueHandle_t awsiot_init(); - +#include "oap_common.h" +#include "esp_err.h" +esp_err_t awsiot_send(oap_meas* meas, oap_sensor_config_t *sensor_config); #endif /* COMPONENTS_AWSIOT_INCLUDE_AWSIOT_H_ */ diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index 21168cd..3e2101b 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -74,6 +74,6 @@ QueueHandle_t bmx280_init() { samples_queue = xQueueCreate(1, sizeof(env_data)); i2c_setup(); //2kb => ~380bytes free - xTaskCreate(bmx280_task, "bmx280_task", 1024*3, NULL, 10, NULL); + xTaskCreate(bmx280_task, "bmx280_task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); return samples_queue; } diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index a45c20e..bceb1c1 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -33,6 +33,7 @@ #include "sdkconfig.h" #include "apps/sntp/sntp.h" #include "http_utils.h" +#include "oap_common.h" #include "oap_storage.h" /** @@ -225,7 +226,7 @@ static void start_mongoose() { if (CONFIG_OAP_CONTROL_PANEL) { if (!g_mongooseStarted) { g_mongooseStarted = 1; - xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL, 0); + xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, DEFAULT_TASK_PRIORITY+1, NULL, 0); //xTaskCreate(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL); } } else { diff --git a/components/net/include/thing_speak.h b/components/net/include/thing_speak.h index d86f4e4..e41f1ca 100644 --- a/components/net/include/thing_speak.h +++ b/components/net/include/thing_speak.h @@ -23,6 +23,9 @@ #ifndef MAIN_HTTP_H_ #define MAIN_HTTP_H_ -QueueHandle_t thing_speak_init(); +#include "oap_common.h" +#include "esp_err.h" + +esp_err_t thing_speak_send(oap_meas* meas); #endif /* MAIN_HTTP_H_ */ diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index d96142b..4cabf19 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -24,6 +24,7 @@ #include "freertos/task.h" #include "freertos/event_groups.h" #include "freertos/queue.h" +#include "freertos/semphr.h" #include "esp_system.h" #include "esp_wifi.h" @@ -49,9 +50,11 @@ static const char *TAG = "thingspk"; static char* apikey = NULL; -static QueueHandle_t input_queue; +#define TS_NOT_CONFIGURED 1 +static int configured = TS_NOT_CONFIGURED; + +static esp_err_t thing_speak_rest_post(oap_meas* meas) { -static int post_data(oap_meas meas) { const struct addrinfo hints = { .ai_family = AF_INET, .ai_socktype = SOCK_STREAM, @@ -63,9 +66,9 @@ static int post_data(oap_meas meas) { int err = getaddrinfo(OAP_THING_SPEAK_HOST, "80", &hints, &res); - if(err != 0 || res == NULL) { + if(err != ESP_OK || res == NULL) { ESP_LOGW(TAG, "DNS lookup failed err=%d res=%p", err, res); - return 0; + return ESP_FAIL; } /* Code to print the resolved IP. @@ -77,45 +80,48 @@ static int post_data(oap_meas meas) { if(sck < 0) { ESP_LOGW(TAG, "failed to allocate socket."); freeaddrinfo(res); - return 0; + return ESP_FAIL; } err = connect(sck, res->ai_addr, res->ai_addrlen); - if(err != 0) { + if(err != ESP_OK) { ESP_LOGW(TAG, "socket connect failed errno=%d", err); close(sck); freeaddrinfo(res); - return 0; + return err; } freeaddrinfo(res); - char payload[200]; + char* payload = malloc(512); sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f&field6=%.2f&field7=%d&field8=%d", apikey, - meas.pm.pm1_0, - meas.pm.pm2_5, - meas.pm.pm10, - meas.env.temp, - meas.env.pressure, - meas.env.humidity, + meas->pm.pm1_0, + meas->pm.pm2_5, + meas->pm.pm10, + meas->env.temp, + meas->env.pressure, + meas->env.humidity, xPortGetFreeHeapSize(), xPortGetMinimumEverFreeHeapSize()); - char request[512]; + char* request = malloc(512); sprintf(request, "POST %s HTTP/1.1\n" "Host: %s\n" "Content-Type: application/x-www-form-urlencoded\n" "Content-Length: %d\n" "\r\n%s", OAP_THING_SPEAK_PATH, OAP_THING_SPEAK_HOST, strlen(payload), payload); + free(payload); ESP_LOGD(TAG, "request:\n%s", request); if (write(sck, request, strlen(request)) < 0) { ESP_LOGW(TAG, "socket send failed"); + free(request); close(sck); - return 0; + return ESP_FAIL; } + free(request); ESP_LOGD(TAG, "socket send success"); int response_size = 0; @@ -132,26 +138,10 @@ static int post_data(oap_meas meas) { //TODO check response status! close(sck); - return 1; + return ESP_OK; } -static void thing_speak_task() { - oap_meas meas; - while (1) { - if(xQueuePeek(input_queue, &meas, 1000)) { - log_task_stack(TAG); - if (post_data(meas)) { - xQueueReceive(input_queue, &meas, 1000); - ESP_LOGI(TAG, "data sent successfully"); - } else { - ESP_LOGW(TAG, "data post failed"); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } - } - } -} - -static int thing_speak_configure() { +static esp_err_t thing_speak_configure() { cJSON* thingspeak = storage_get_config("thingspeak"); if (!thingspeak) { ESP_LOGI(TAG, "config not found"); @@ -175,13 +165,48 @@ static int thing_speak_configure() { } } +esp_err_t thing_speak_send(oap_meas* meas) { + if (configured == TS_NOT_CONFIGURED) { + configured = thing_speak_configure(); + } + if (configured == ESP_OK) { + return thing_speak_rest_post(meas); + } else { + return configured; + } +} + + +/* +extern SemaphoreHandle_t networkHandle; +static QueueHandle_t input_queue; + +static void thing_speak_task() { + oap_meas meas; + while (1) { + if(xQueuePeek(input_queue, &meas, 1000)) { + log_task_stack(TAG); + xSemaphoreTake(networkHandle, portMAX_DELAY); + if (post_data(&meas)) { + xQueueReceive(input_queue, &meas, 1000); + xSemaphoreGive(networkHandle); + ESP_LOGI(TAG, "data sent successfully"); + } else { + xSemaphoreGive(networkHandle); + ESP_LOGW(TAG, "data post failed"); + vTaskDelay(5000 / portTICK_PERIOD_MS); + } + + } + } +} QueueHandle_t thing_speak_init() { if (thing_speak_configure() == ESP_OK) { input_queue = xQueueCreate(1, sizeof(oap_meas)); - xTaskCreate(&thing_speak_task, "thing_speak_task", 1024*10, NULL, 5, NULL); + xTaskCreate(&thing_speak_task, "thing_speak_task", 1024*10, NULL, DEFAULT_TASK_PRIORITY, NULL); return input_queue; } else { return NULL; } -} +}*/ diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index 493f2a4..d7e3777 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -23,6 +23,8 @@ #ifndef MAIN_COMMON_COMMON_H_ #define MAIN_COMMON_COMMON_H_ +#define DEFAULT_TASK_PRIORITY (10) + typedef struct { unsigned int pm1_0; unsigned int pm2_5; diff --git a/components/oap_common/include/oap_debug.h b/components/oap_common/include/oap_debug.h index 7c30e75..6d541d6 100644 --- a/components/oap_common/include/oap_debug.h +++ b/components/oap_common/include/oap_debug.h @@ -27,11 +27,9 @@ typedef struct heap_log { } heap_log; void heap_log_print(heap_log* log, heap_log* prev); -heap_log* heap_log_take(heap_log* log, char* msg); +heap_log* heap_log_take(heap_log* log, const char* msg); void heap_log_free(heap_log* log); -void log_task_stack(char* TAG); -void log_heap_size(char* TAG, char* msg); - - +void log_task_stack(const char* TAG); +void log_heap_size(const char* TAG, const char* msg); diff --git a/components/oap_common/oap_debug.c b/components/oap_common/oap_debug.c index 3117eba..071dab0 100644 --- a/components/oap_common/oap_debug.c +++ b/components/oap_common/oap_debug.c @@ -33,20 +33,20 @@ * this method is surprisingly stack heavy - it takes ~ 1000 bytes. * before using it, adjust task stack accordingly. */ -void log_task_stack(char* TAG) { +void log_task_stack(const char* TAG) { //uxTaskGetStackHighWaterMark is marked as UNTESTED #if !CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION - ESP_LOGW(TAG, "----------> TASK MIN STACK: %d", uxTaskGetStackHighWaterMark( NULL )); + ESP_LOGD(TAG, "----------> TASK MIN STACK: %d", uxTaskGetStackHighWaterMark( NULL )); #endif } static size_t last_free_heap = 0; -void log_heap_size(char* TAG, char* msg) { +void log_heap_size(const char* TAG, const char* msg) { size_t free_heap = xPortGetFreeHeapSize(); if (last_free_heap == 0) last_free_heap = free_heap; - ESP_LOGW(TAG, "----------> free heap (%s): %d (since last: %d, min: %d)", msg, free_heap, free_heap-last_free_heap, xPortGetMinimumEverFreeHeapSize()); + ESP_LOGD(TAG, "----------> free heap (%s): %d (since last: %d, min: %d)", msg, free_heap, free_heap-last_free_heap, xPortGetMinimumEverFreeHeapSize()); last_free_heap = free_heap; } @@ -75,14 +75,14 @@ void heap_log_list(heap_log* log) { void heap_log_print(heap_log* log, heap_log* prev) { size_t comp_heap = log->heap + heap_log_count * sizeof(heap_log); if (prev == NULL) { - ESP_LOGW("debug", "----------> heap %25s: %d", log->tag, comp_heap); + ESP_LOGD("debug", "----------> heap %25s: %d", log->tag, comp_heap); } else { size_t diff_heap = log->heap - prev->heap + sizeof(heap_log); - ESP_LOGW("debug", "----------> heap %25s: %d \t (%d)", log->tag, comp_heap, diff_heap); + ESP_LOGD("debug", "----------> heap %25s: %d \t (%d)", log->tag, comp_heap, diff_heap); } } -heap_log* heap_log_take(heap_log* log, char* msg) { +heap_log* heap_log_take(heap_log* log, const char* msg) { heap_log* new_log = malloc(sizeof(heap_log)); heap_log_count++; new_log->tag = strdup(msg); @@ -116,6 +116,6 @@ void heap_log_free(heap_log* log) { } while (log); - ESP_LOGW("debug", "----------> leaked : %d", xPortGetFreeHeapSize() - initial_heap); + ESP_LOGD("debug", "----------> leaked : %d", xPortGetFreeHeapSize() - initial_heap); } } diff --git a/components/oap_common/ssl_client.c b/components/oap_common/ssl_client.c index cdc7eee..214df9a 100644 --- a/components/oap_common/ssl_client.c +++ b/components/oap_common/ssl_client.c @@ -49,9 +49,11 @@ #include "oap_common.h" #include "ssl_client.h" - +#include "esp_err.h" +#include "esp_log.h" static const char *pers = "esp32-tls"; +static const char* TAG = "ssl"; #define DEBUG true //Set false to supress debug messages @@ -90,16 +92,16 @@ static void mbedtls_debug(void *ctx, int level, switch (level) { case 1: - printf( "%s:%d %s \n", file, line, str); + printf( "%s:%d %s", file, line, str); break; case 2: case 3: - printf( "%s:%d %s \n", file, line, str); + printf( "%s:%d %s", file, line, str); case 4: - printf( "%s:%d %s \n", file, line, str); + printf( "%s:%d %s", file, line, str); break; default: - printf( "Unexpected log level %d: %s \n", level, str); + printf( "Unexpected log level %d: %s", level, str); break; } } @@ -176,17 +178,17 @@ fcntl( ssl_client->socket, F_SETFL, fcntl( ssl_client->socket, F_GETFL, 0 ) | O_ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, unsigned char *cli_cert, unsigned char *cli_key) { char buf[512]; - int ret, flags; + int ret; size_t free_heap_before = xPortGetFreeHeapSize(); - DEBUG_PRINT("Free heap before TLS %u\n", free_heap_before); + ESP_LOGD(TAG, "Free heap before TLS %u", free_heap_before); do { - DEBUG_PRINT( "Seeding the random number generator\n"); + ESP_LOGD(TAG, "Seeding the random number generator"); mbedtls_entropy_init(&ssl_client->entropy_ctx); if ((ret = mbedtls_ctr_drbg_seed(&ssl_client->drbg_ctx, mbedtls_entropy_func, - &ssl_client->entropy_ctx, (const unsigned char *) pers, strlen(pers))) != 0) { - printf( "mbedtls_ctr_drbg_seed returned %d \n", ret); + &ssl_client->entropy_ctx, (const unsigned char *) pers, strlen(pers))) != ESP_OK) { + ESP_LOGE(TAG, "mbedtls_ctr_drbg_seed returned %d", ret); break; } @@ -195,12 +197,12 @@ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, u MBEDTLS_SSL_VERIFY_NONE if not. */ if (rootCABuff != NULL) { - DEBUG_PRINT( "Loading CA cert\n"); + ESP_LOGD(TAG, "Loading CA cert\n"); mbedtls_x509_crt_init(&ssl_client->ca_cert); mbedtls_ssl_conf_authmode(&ssl_client->ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); ret = mbedtls_x509_crt_parse(&ssl_client->ca_cert, (const unsigned char *)rootCABuff, strlen((const char *)rootCABuff) + 1); - if (ret < 0) { - printf( "CA cert: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + if (ret != ESP_OK) { + ESP_LOGE(TAG, "CA cert: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); break; } mbedtls_ssl_conf_ca_chain(&ssl_client->ssl_conf, &ssl_client->ca_cert, NULL); @@ -214,21 +216,21 @@ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, u mbedtls_x509_crt_init(&ssl_client->client_cert); mbedtls_pk_init(&ssl_client->client_key); - DEBUG_PRINT( "Loading CRT cert\n"); + ESP_LOGD(TAG, "Loading CRT cert"); ret = mbedtls_x509_crt_parse(&ssl_client->client_cert, (const unsigned char *)cli_cert, strlen((const char *)cli_cert) + 1); - if (ret < 0) { - printf( "CRT cert: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + if (ret < ESP_OK) { + ESP_LOGE(TAG, "CRT cert: mbedtls_x509_crt_parse returned -0x%x", -ret); break; } ssl_client->has_client_cert = 1; - DEBUG_PRINT( "Loading private key\n"); + DEBUG_PRINT( "Loading private key"); ret = mbedtls_pk_parse_key(&ssl_client->client_key, (const unsigned char *)cli_key, strlen((const char *)cli_key) + 1, NULL, 0); - if (ret < 0) { - printf( "PRIVATE KEY: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); + if (ret != ESP_OK) { + ESP_LOGE(TAG, "PRIVATE KEY: mbedtls_x509_crt_parse returned -0x%x", -ret); break; } @@ -250,13 +252,13 @@ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, u } */ - DEBUG_PRINT( "Setting up the SSL/TLS structure...\n"); + ESP_LOGD(TAG, "Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&ssl_client->ssl_conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - printf( "mbedtls_ssl_config_defaults returned %d\n", ret); + MBEDTLS_SSL_PRESET_DEFAULT)) != ESP_OK) { + ESP_LOGW(TAG, "mbedtls_ssl_config_defaults returned %d", ret); break; } @@ -266,59 +268,64 @@ int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, u mbedtls_ssl_conf_dbg(&ssl_client->ssl_conf, mbedtls_debug, NULL); #endif - if ((ret = mbedtls_ssl_setup(&ssl_client->ssl_ctx, &ssl_client->ssl_conf)) != 0) { - printf( "mbedtls_ssl_setup returned -0x%x\n\n", -ret); + if ((ret = mbedtls_ssl_setup(&ssl_client->ssl_ctx, &ssl_client->ssl_conf)) != ESP_OK) { + ESP_LOGW(TAG, "mbedtls_ssl_setup returned -0x%x\n\n", -ret); break; } mbedtls_ssl_set_bio(&ssl_client->ssl_ctx, &ssl_client->socket, mbedtls_net_send, mbedtls_net_recv, NULL ); - DEBUG_PRINT( "Performing the SSL/TLS handshake...\n"); + ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); - while ((ret = mbedtls_ssl_handshake(&ssl_client->ssl_ctx)) != 0) { + while ((ret = mbedtls_ssl_handshake(&ssl_client->ssl_ctx)) != ESP_OK) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { - printf( "mbedtls_ssl_handshake returned -0x%x\n", -ret); + ESP_LOGW(TAG, "mbedtls_ssl_handshake returned -0x%x", -ret); break; } delay(10); vPortYield(); } + if (ret != ESP_OK) break; if (cli_cert != NULL && cli_key != NULL) { - DEBUG_PRINT("Protocol is %s \nCiphersuite is %s\n", mbedtls_ssl_get_version(&ssl_client->ssl_ctx), mbedtls_ssl_get_ciphersuite(&ssl_client->ssl_ctx)); + ESP_LOGD(TAG, "Protocol is %s \nCiphersuite is %s", mbedtls_ssl_get_version(&ssl_client->ssl_ctx), mbedtls_ssl_get_ciphersuite(&ssl_client->ssl_ctx)); + //not error if ((ret = mbedtls_ssl_get_record_expansion(&ssl_client->ssl_ctx)) >= 0) { - DEBUG_PRINT("Record expansion is %d\n", ret); + ESP_LOGD(TAG, "Record expansion is %d\n", ret); } else { - DEBUG_PRINT("Record expansion is unknown (compression)\n"); + ESP_LOGD(TAG, "Record expansion is unknown (compression)"); } } - DEBUG_PRINT( "Verifying peer X.509 certificate...\n"); + ESP_LOGD(TAG, "Verifying peer X.509 certificate..."); - if ((flags = mbedtls_ssl_get_verify_result(&ssl_client->ssl_ctx)) != 0) { - printf( "Failed to verify peer certificate!\n"); + if ((ret = mbedtls_ssl_get_verify_result(&ssl_client->ssl_ctx)) != ESP_OK) { + ESP_LOGE(TAG, "Failed to verify peer certificate!"); bzero(buf, sizeof(buf)); - mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); - printf( "verification info: %s\n", buf); - stop_ssl_socket(ssl_client); //It's not safe continue. + mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", ret); + ESP_LOGW(TAG, "verification info: %s", buf); + //stop_ssl_socket(ssl_client); //It's not safe continue. + break; } else { - DEBUG_PRINT( "Certificate verified.\n"); + ESP_LOGD(TAG, "Certificate verified."); } } while (0); size_t free_heap_after = xPortGetFreeHeapSize(); - DEBUG_PRINT("Free heap after TLS %u (-%u)\n", free_heap_after, free_heap_before-free_heap_after); + ESP_LOGD(TAG, "Free heap after TLS %u (-%u)", free_heap_after, free_heap_before-free_heap_after); - return ssl_client->socket; + return ret; } void stop_ssl_socket(sslclient_context *ssl_client) { - DEBUG_PRINT( "\nCleaning SSL connection.\n"); - close(ssl_client->socket); - ssl_client->socket = -1; + ESP_LOGD(TAG, "Cleaning SSL connection."); + if (ssl_client->socket > 0) { + close(ssl_client->socket); + ssl_client->socket = 0; + } mbedtls_ssl_free(&ssl_client->ssl_ctx); mbedtls_ssl_config_free(&ssl_client->ssl_conf); mbedtls_ctr_drbg_free(&ssl_client->drbg_ctx); @@ -349,7 +356,7 @@ int data_to_read(sslclient_context *ssl_client) res = mbedtls_ssl_get_bytes_avail(&ssl_client->ssl_ctx); //printf("RES: %i\n",res); if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret < 0 && ret != -76) { - printf("MbedTLS error %i", ret); + ESP_LOGE(TAG, "MbedTLS error %i", ret); } return res; @@ -362,7 +369,7 @@ int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t l while ((ret = mbedtls_ssl_write(&ssl_client->ssl_ctx, data, len)) <= 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { - printf( "mbedtls_ssl_write returned -0x%x\n", -ret); + ESP_LOGE(TAG, "mbedtls_ssl_write returned -0x%x", -ret); break; } } diff --git a/components/peripherals/ctrl_btn.c b/components/peripherals/ctrl_btn.c index 8a407e2..7bad6a9 100644 --- a/components/peripherals/ctrl_btn.c +++ b/components/peripherals/ctrl_btn.c @@ -27,7 +27,7 @@ #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" -//#include "oap_config.h" +#include "oap_common.h" #include "ctrl_btn.h" #include "esp_log.h" @@ -106,7 +106,7 @@ QueueHandle_t btn_init(gpio_num_t *btn_gpio, uint8_t num_of_btns) //create a queue to handle gpio event from isr gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t)); //start gpio task - xTaskCreate(btn_task, "btn_task", 2048, NULL, 10, NULL); + xTaskCreate(btn_task, "btn_task", 2048, NULL, DEFAULT_TASK_PRIORITY, NULL); //install gpio isr service gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); diff --git a/components/peripherals/rgb_led.c b/components/peripherals/rgb_led.c index e6bc891..0cc7fdb 100644 --- a/components/peripherals/rgb_led.c +++ b/components/peripherals/rgb_led.c @@ -20,6 +20,7 @@ * along with OpenAirProject-ESP32. If not, see . */ #include +#include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/xtensa_api.h" @@ -32,12 +33,13 @@ #include "esp_log.h" #include #include "rgb_led.h" -//#include "oap_config.h" +#include "oap_common.h" +static const char* TAG = "rgbled"; static xQueueHandle cmd_queue; static gpio_num_t led_gpio[] = {CONFIG_OAP_LED_R_PIN,CONFIG_OAP_LED_G_PIN,CONFIG_OAP_LED_B_PIN}; -#define DEFAULT_FREQ 1500; +#define DEFAULT_FREQ 1500 static ledc_mode_t speed_mode = LEDC_HIGH_SPEED_MODE; @@ -65,16 +67,30 @@ static int calc_duty(rgb color, uint8_t c) { } void set_color(rgb color) { + esp_err_t res; + int duty; for (int c = 0; c < 3; c++) { - ledc_set_duty(speed_mode, c, calc_duty(color,c)); - ledc_update_duty(speed_mode, c); + duty = calc_duty(color,c); + if ((res = ledc_set_duty(speed_mode, c, duty)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_set_duty(%d,%d,%d) error %d", speed_mode, c, duty, res); + } + if ((res = ledc_update_duty(speed_mode, c)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_update_duty(%d,%d) error %d", speed_mode, c, res); + } } } void fade_to_color(rgb color, int time) { + esp_err_t res; + int duty; for (int c = 0; c < 3; c++) { - ledc_set_fade_with_time(speed_mode, c, calc_duty(color,c),time); - ledc_fade_start(c, LEDC_FADE_NO_WAIT); + duty = calc_duty(color,c); + if ((res = ledc_set_fade_with_time(speed_mode, c, duty,time)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_set_fade_with_time(%d,%d,%d,%d) error %d", speed_mode, c, duty, time, res); + } + if ((res = ledc_fade_start(c, LEDC_FADE_NO_WAIT)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_fade_start(%d,%d) error %d", c, LEDC_FADE_NO_WAIT, res); + } } } @@ -107,8 +123,6 @@ static void setup_ledc() { } static void led_cycle() { - - rgb color = {.v={1,1,1}}; led_cmd cmd = { .mode = LED_SET, @@ -121,22 +135,29 @@ static void led_cycle() { freq = cmd.freq > 0 ? cmd.freq : DEFAULT_FREQ; switch (cmd.mode) { case LED_BLINK : + ESP_LOGD(TAG, "->blink (%d)", level); set_color(level ? cmd.color : LED_OFF); break; case LED_PULSE : + ESP_LOGD(TAG, "->pulse (%d)", level); fade_to_color(level ? cmd.color : LED_OFF, freq); break; case LED_FADE_TO: + ESP_LOGD(TAG, "->fade_to"); //this is causing some errors - cannot schedule fading when other is still ongoing? fade_to_color(cmd.color, freq); break; default: + ESP_LOGD(TAG, "->set"); freq = DEFAULT_FREQ; set_color(cmd.color); break; } //wait for another command - xQueueReceive(cmd_queue, &cmd, freq / portTICK_PERIOD_MS); + if (xQueueReceive(cmd_queue, &cmd, freq / portTICK_PERIOD_MS)) { + ESP_LOGD(TAG, "->received command"); + //memcpy(&cmd, &received, sizeof(cmd)); + } } } @@ -145,7 +166,7 @@ void led_init(int enabled, xQueueHandle _cmd_queue) cmd_queue = _cmd_queue; if (enabled) { setup_ledc(); //this often conflicts with other i/o operations? e.g. bme280 init. - xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, 10, NULL); + xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, DEFAULT_TASK_PRIORITY+1, NULL); } } diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index f247854..89488ad 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -109,7 +109,7 @@ QueueHandle_t pms_init(int _indoor) { pms_init_uart(); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) - xTaskCreate(pms_uart_read, "pms_uart_read", 1024*3, NULL, 10, NULL); + xTaskCreate(pms_uart_read, "pms_uart_read", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); return samples; } diff --git a/main/main.c b/main/main.c index 9f9c944..3f42970 100644 --- a/main/main.c +++ b/main/main.c @@ -27,6 +27,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/queue.h" +#include "freertos/semphr.h" #include "esp_system.h" #include "nvs_flash.h" #include "esp_log.h" @@ -39,30 +40,16 @@ #include "bmx280.h" #include "pmsx003.h" #include "pm_meter.h" +#include "oap_common.h" #include "oap_storage.h" #include "oap_debug.h" #include "awsiot.h" static const char *TAG = "app"; -//static QueueHandle_t result_queue; static QueueHandle_t led_queue; static QueueHandle_t pm_queue; -//static void printTime() { -// struct timeval tv; -//// time_t nowtime; -//// struct tm *nowtm; -//// char tmbuf[64], buf[64]; -// -// gettimeofday(&tv, NULL); -// //nowtime = tv.tv_sec; -// //nowtm = localtime(&nowtime); -// //strftime(tmbuf, sizeof tmbuf, "%Y-%m-%d %H:%M:%S", nowtm); -// //printf(buf, sizeof buf, "%s.%06d", tmbuf, tv.tv_usec); -// ESP_LOGI(TAG, "timestamp: %ld", tv.tv_sec); -//} - static oap_sensor_config_t sensor_config; static oap_sensor_config_t get_config() { @@ -101,43 +88,34 @@ static void update_led_color(led_mode mode, float r, float g, float b) { } static void pm_meter_trigger_task() { - int delay = (sensor_config.measInterval-sensor_config.measTime); + int delay_sec = (sensor_config.measInterval-sensor_config.measTime); pm_meter_init(pms_init(sensor_config.indoor)); while (1) { log_task_stack("pm_meter_trigger"); update_led_mode(LED_PULSE); pm_meter_start(sensor_config.warmUpTime); - vTaskDelay(sensor_config.measTime * 1000 / portTICK_PERIOD_MS); - pm_data pm = pm_meter_sample(delay>0); - update_led_mode(LED_SET); + delay(sensor_config.measTime * 1000); + pm_data pm = pm_meter_sample(delay_sec>0); + + float aqi = fminf(pm.pm2_5 / 100.0, 1.0); + ESP_LOGI(TAG, "AQI=%f",aqi); + update_led_color(LED_SET, aqi,(1-aqi), 0); + xQueueSend(pm_queue, &pm, 1000 / portTICK_PERIOD_MS); //1sec - if (delay > 0) { - vTaskDelay(delay * 1000 / portTICK_PERIOD_MS); + if (delay_sec > 0) { + delay(delay_sec * 1000); } else { - vTaskDelay(10); + delay(10); } } } static void main_task() { - QueueHandle_t awsiot_queue = awsiot_init(sensor_config); - -// while (awsiot_queue && 1) { -// oap_meas meas = {}; -// if (!xQueueSend(awsiot_queue, &meas, 1)) { -// //ESP_LOGW(TAG,"awsiot_queue queue overflow"); -// } -// vTaskDelay(100); -// } - - - QueueHandle_t thing_speak_queue = thing_speak_init(); - pm_queue = xQueueCreate(1, sizeof(pm_data)); - led_queue = xQueueCreate(10, sizeof(led_cmd)); - QueueHandle_t env_queue = bmx280_init(); led_init(get_config().led, led_queue); update_led(); + QueueHandle_t env_queue = bmx280_init(); + gpio_num_t btn_gpio[] = {CONFIG_OAP_BTN_0_PIN}; //xQueueHandle btn_events = btn_init(btn_gpio, sizeof(btn_gpio)/sizeof(btn_gpio[0])); // btn_event be; @@ -160,11 +138,7 @@ static void main_task() { pm_data pm; if (xQueueReceive(pm_queue, &pm, 100)) { log_task_stack("main_task"); - float aqi = fminf(pm.pm2_5 / 100.0, 1.0); - ESP_LOGI(TAG, "AQI=%f",aqi); - //for error we can: led_state.freq = 200; LED_BLINK - update_led_color(LED_SET, aqi,(1-aqi), 0); oap_meas meas = { .pm = pm, @@ -172,7 +146,12 @@ static void main_task() { .local_time = localTime }; - //broadcast + thing_speak_send(&meas); + awsiot_send(&meas, &sensor_config); + + /* + * generally, we'd like to keep all client asynchronous, + * but having multiple heavy tasks hurts esp32 stability (for now) if (thing_speak_queue) { if (!xQueueSend(thing_speak_queue, &meas, 1)) { ESP_LOGW(TAG,"thing_speak_queue queue overflow"); @@ -182,7 +161,7 @@ static void main_task() { if (!xQueueSend(awsiot_queue, &meas, 1)) { ESP_LOGW(TAG,"awsiot_queue queue overflow"); } - } + }*/ } } } @@ -197,9 +176,10 @@ void app_main() //wifi/mongoose requires plenty of mem, start it here bootWiFi(); - xTaskCreate(main_task, "main_task", 1024*4, NULL, 10, NULL); - xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, 10, NULL); - while (1) { - delay(10000); - } + pm_queue = xQueueCreate(1, sizeof(pm_data)); + led_queue = xQueueCreate(10, sizeof(led_cmd)); + + //xTaskCreate(main_task, "main_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); + main_task(); } diff --git a/main/pm_meter.c b/main/pm_meter.c index b14c3db..e021aff 100644 --- a/main/pm_meter.c +++ b/main/pm_meter.c @@ -119,5 +119,5 @@ pm_data pm_meter_sample(int disable_sensor) { void pm_meter_init(QueueHandle_t _samples_queue) { samples_queue = _samples_queue; sampleBuffer = malloc(CONFIG_OAP_PM_SAMPLE_BUF_SIZE * sizeof(pm_data)); - xTaskCreate(pm_data_collector_task, "pm_data_collector_task", 1024*4, NULL, 10, NULL); + xTaskCreate(pm_data_collector_task, "pm_data_collector_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); } From c4cb8b6a84cde9bf56ea30333a9c4c1a1ce13d6d Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 16 Mar 2017 11:48:31 +0100 Subject: [PATCH 020/200] changelog updated --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed6a7bb..92b8338 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ # 0.1.1 - all main features working (some issues with bmp280) -- thingspeak client \ No newline at end of file +- thingspeak client + +# 0.2.0 + +- support for bmp280 and bme280 +- basic rest client for AWS IoT \ No newline at end of file From ee3f0ea32e399a5862b4a76650196d5517b4c97c Mon Sep 17 00:00:00 2001 From: kris Date: Thu, 16 Mar 2017 17:48:53 +0100 Subject: [PATCH 021/200] refactor bmx driver - externalise settings and calibration parameters --- components/bmx280/bmx280.c | 48 ++++--- components/bmx280/i2c_bme280.c | 196 +++++++++++++---------------- components/bmx280/i2c_bme280.h | 38 +++++- components/bmx280/include/bmx280.h | 11 +- components/peripherals/rgb_led.c | 8 +- main/main.c | 9 +- 6 files changed, 170 insertions(+), 140 deletions(-) diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index 3e2101b..d0154ca 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -36,13 +36,25 @@ static char* TAG = "bmx280"; static QueueHandle_t samples_queue; -static void bmx280_task() { +static void bmx280_task(bmx280_config_t* bmx280_config) { + + i2c_comm_t i2c_comm = { + .i2c_num = bmx280_config->i2c_num, + .device_addr = bmx280_config->device_addr + }; + + bme280_sensor_t bmx280_sensor = { + .operation_mode = BME280_MODE_NORMAL, + .i2c_comm = i2c_comm + }; + + env_data result = {}; + // TODO strangely, if this is executed inside main task, LEDC fails to initialise properly PWM (and blinks in funny ways)... easy to reproduce. - if (BME280_init(BME280_MODE_NORMAL, CONFIG_OAP_BMX280_I2C_NUM, CONFIG_OAP_BMX280_ADDRESS) == ESP_OK) { + if (BME280_init(&bmx280_sensor) == ESP_OK) { while(1) { log_task_stack(TAG); - if (BME280_read() == ESP_OK) { - env_data result = BME280_last_result(); + if (BME280_read(&bmx280_sensor, &result) == ESP_OK) { ESP_LOGD(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.temp, result.pressure, result.humidity); if (!xQueueSend(samples_queue, &result, 10000/portTICK_PERIOD_MS)) { ESP_LOGW(TAG, "env queue overflow"); @@ -50,7 +62,7 @@ static void bmx280_task() { } else { ESP_LOGW(TAG, "Failed to read data"); } - vTaskDelay(5000/portTICK_PERIOD_MS); + delay(5000); } } else { ESP_LOGE(TAG, "Failed to initialise"); @@ -58,22 +70,22 @@ static void bmx280_task() { vTaskDelete(NULL); } -static void i2c_setup() { - i2c_config_t conf; - conf.mode = I2C_MODE_MASTER; - conf.sda_io_num = CONFIG_OAP_BMX280_I2C_SDA_PIN; - conf.scl_io_num = CONFIG_OAP_BMX280_I2C_SCL_PIN; - conf.sda_pullup_en = GPIO_PULLUP_ENABLE; - conf.scl_pullup_en = GPIO_PULLUP_ENABLE; - conf.master.clk_speed = 100000; - i2c_param_config(CONFIG_OAP_BMX280_I2C_NUM, &conf); - i2c_driver_install(CONFIG_OAP_BMX280_I2C_NUM, I2C_MODE_MASTER, 0, 0, 0); +static void i2c_setup(bmx280_config_t* config) { + i2c_config_t i2c_conf; + i2c_conf.mode = I2C_MODE_MASTER; + i2c_conf.sda_io_num = config->sda_pin;//CONFIG_OAP_BMX280_I2C_SDA_PIN; + i2c_conf.scl_io_num = config->scl_pin;//CONFIG_OAP_BMX280_I2C_SCL_PIN; + i2c_conf.sda_pullup_en = GPIO_PULLUP_ENABLE; + i2c_conf.scl_pullup_en = GPIO_PULLUP_ENABLE; + i2c_conf.master.clk_speed = 100000; + i2c_param_config(config->i2c_num, &i2c_conf); + i2c_driver_install(config->i2c_num, I2C_MODE_MASTER, 0, 0, 0); } -QueueHandle_t bmx280_init() { +QueueHandle_t bmx280_init(bmx280_config_t* bmx280_config) { samples_queue = xQueueCreate(1, sizeof(env_data)); - i2c_setup(); + i2c_setup(bmx280_config); //2kb => ~380bytes free - xTaskCreate(bmx280_task, "bmx280_task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate(bmx280_task, "bmx280_task", 1024*3, bmx280_config, DEFAULT_TASK_PRIORITY, NULL); return samples_queue; } diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c index 9db705c..da3dbea 100755 --- a/components/bmx280/i2c_bme280.c +++ b/components/bmx280/i2c_bme280.c @@ -42,25 +42,6 @@ typedef int32_t BME280_S32_t; #define BMP280_CHIP_ID2 (0x57) #define BMP280_CHIP_ID3 (0x58) -static uint16_t dig_T1; -static int16_t dig_T2; -static int16_t dig_T3; -static uint16_t dig_P1; -static int16_t dig_P2; -static int16_t dig_P3; -static int16_t dig_P4; -static int16_t dig_P5; -static int16_t dig_P6; -static int16_t dig_P7; -static int16_t dig_P8; -static int16_t dig_P9; -static int8_t dig_H1; -static int16_t dig_H2; -static int8_t dig_H3; -static int16_t dig_H4; -static int16_t dig_H5; -static int8_t dig_H6; - static uint8_t osrs_t = 1; //Temperature oversampling x 1 static uint8_t osrs_p = 1; //Pressure oversampling x 1 static uint8_t osrs_h = 1; //Humidity oversampling x 1 @@ -69,29 +50,24 @@ static uint8_t t_sb = 4; //Tstandby, 5=1000ms, 4=500ms static uint8_t filter = 0; //Filter off static uint8_t spi3w_en = 0; //3-wire SPI Disable -static uint8_t operation_mode; -static uint8_t i2c_num; -static uint8_t device_addr; - -BME280_S32_t t_fine; -BME280_S32_t temp_act; -BME280_U32_t press_act, hum_act; +typedef struct temp_reading_t { + double temp; + BME280_S32_t t_fine; +} temp_reading_t; static char* TAG = "i2c_bmx280"; -static env_data result = {}; - #define CONT_IF_I2C_OK(log, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err: %d (%s)",rc,log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); #define CONT_IF_OK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) return rc; } while(0); -static esp_err_t read_i2c(uint8_t reg, uint8_t* data, int len) { +static esp_err_t read_i2c(i2c_comm_t* comm, uint8_t reg, uint8_t* data, int len) { i2c_cmd_handle_t cmd = i2c_cmd_link_create(); //set address CONT_IF_I2C_OK("r1", i2c_master_start(cmd)); - CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (device_addr << 1) | I2C_MASTER_WRITE, 1)); + CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_WRITE, 1)); CONT_IF_I2C_OK("r3", i2c_master_write_byte(cmd, reg, 1)); CONT_IF_I2C_OK("r4", i2c_master_stop(cmd)); - CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(i2c_num, cmd, 1000/portTICK_PERIOD_MS)); //often ESP_FAIL (no ack received) + CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(comm->i2c_num, cmd, 1000/portTICK_PERIOD_MS)); //often ESP_FAIL (no ack received) i2c_cmd_link_delete(cmd); cmd = 0; @@ -99,77 +75,77 @@ static esp_err_t read_i2c(uint8_t reg, uint8_t* data, int len) { for (int i=0;idevice_addr << 1) | I2C_MASTER_READ, 1)); CONT_IF_I2C_OK("r8",i2c_master_read(cmd,data+i,1,1)); //ACK is must! CONT_IF_I2C_OK("r9",i2c_master_stop(cmd)); - CONT_IF_I2C_OK("r10",i2c_master_cmd_begin(i2c_num, cmd, 2000/portTICK_PERIOD_MS)); + CONT_IF_I2C_OK("r10",i2c_master_cmd_begin(comm->i2c_num, cmd, 2000/portTICK_PERIOD_MS)); i2c_cmd_link_delete(cmd); cmd = 0; } return ESP_OK; } -static esp_err_t write_i2c_byte(uint8_t reg, uint8_t value) { +static esp_err_t write_i2c_byte(i2c_comm_t *comm, uint8_t reg, uint8_t value) { i2c_cmd_handle_t cmd = i2c_cmd_link_create(); CONT_IF_I2C_OK("w1",i2c_master_start(cmd)); - CONT_IF_I2C_OK("w2",i2c_master_write_byte(cmd, (device_addr << 1) | I2C_MASTER_WRITE, 1)); + CONT_IF_I2C_OK("w2",i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_WRITE, 1)); CONT_IF_I2C_OK("w3",i2c_master_write_byte(cmd, reg, 1)); CONT_IF_I2C_OK("w4",i2c_master_write_byte(cmd, value, 1)); CONT_IF_I2C_OK("w5",i2c_master_stop(cmd)); - CONT_IF_I2C_OK("w6",i2c_master_cmd_begin(i2c_num, cmd, 1000/portTICK_PERIOD_MS)); + CONT_IF_I2C_OK("w6",i2c_master_cmd_begin(comm->i2c_num, cmd, 1000/portTICK_PERIOD_MS)); i2c_cmd_link_delete(cmd); return ESP_OK; } -static esp_err_t BME280_writeConfigRegisters() { +static esp_err_t BME280_writeConfigRegisters(i2c_comm_t* comm, uint8_t operation_mode) { uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | operation_mode; uint8_t ctrl_hum_reg = osrs_h; uint8_t config_reg = (t_sb << 5) | (filter << 2) | spi3w_en; //500ms interval - return write_i2c_byte(BME280_REG_CTRL_HUM, ctrl_hum_reg) == ESP_OK && - write_i2c_byte(BME280_REG_CTRL_MEAS, ctrl_meas_reg) == ESP_OK && - write_i2c_byte(BME280_REG_CONFIG, config_reg) == ESP_OK ? ESP_OK : ESP_FAIL; + return write_i2c_byte(comm, BME280_REG_CTRL_HUM, ctrl_hum_reg) == ESP_OK && + write_i2c_byte(comm, BME280_REG_CTRL_MEAS, ctrl_meas_reg) == ESP_OK && + write_i2c_byte(comm, BME280_REG_CONFIG, config_reg) == ESP_OK ? ESP_OK : ESP_FAIL; } -static esp_err_t trigger_force_read(){ +static esp_err_t trigger_force_read(i2c_comm_t* comm, uint8_t operation_mode) { uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | operation_mode; - if (write_i2c_byte(BME280_REG_CTRL_MEAS, ctrl_meas_reg) != ESP_OK) return ESP_FAIL; - vTaskDelay(10/portTICK_PERIOD_MS); // wait 10ms for worst case max sensor read time + if (write_i2c_byte(comm, BME280_REG_CTRL_MEAS, ctrl_meas_reg) != ESP_OK) return ESP_FAIL; + delay(10); // wait 10ms for worst case max sensor read time return ESP_OK; } -static esp_err_t BME280_readCalibrationRegisters(void){ +static esp_err_t BME280_readCalibrationRegisters(i2c_comm_t* comm, bmx280_calib_t* calib){ //temp & pressure // Read section 0x88 uint8_t data[24]; - if (read_i2c(0x88,data,24) != ESP_OK) return ESP_FAIL; - - dig_T1 = (data[1] << 8) | data[0]; - dig_T2 = (data[3] << 8) | data[2]; - dig_T3 = (data[5] << 8) | data[4]; - dig_P1 = (data[7] << 8) | data[6]; - dig_P2 = (data[9] << 8) | data[8]; - dig_P3 = (data[11] << 8) | data[10]; - dig_P4 = (data[13] << 8) | data[12]; - dig_P5 = (data[15] << 8) | data[14]; - dig_P6 = (data[17] << 8) | data[16]; - dig_P7 = (data[19] << 8) | data[18]; - dig_P8 = (data[21] << 8) | data[20]; - dig_P9 = (data[23] << 8) | data[22]; + if (read_i2c(comm,0x88,data,24) != ESP_OK) return ESP_FAIL; + + calib->dig_T1 = (data[1] << 8) | data[0]; + calib->dig_T2 = (data[3] << 8) | data[2]; + calib->dig_T3 = (data[5] << 8) | data[4]; + calib->dig_P1 = (data[7] << 8) | data[6]; + calib->dig_P2 = (data[9] << 8) | data[8]; + calib->dig_P3 = (data[11] << 8) | data[10]; + calib->dig_P4 = (data[13] << 8) | data[12]; + calib->dig_P5 = (data[15] << 8) | data[14]; + calib->dig_P6 = (data[17] << 8) | data[16]; + calib->dig_P7 = (data[19] << 8) | data[18]; + calib->dig_P8 = (data[21] << 8) | data[20]; + calib->dig_P9 = (data[23] << 8) | data[22]; //humidity // Read section 0xA1 - if (read_i2c(0xA1,data,1) != ESP_OK) return ESP_FAIL; - dig_H1 = data[0]; + if (read_i2c(comm, 0xA1,data,1) != ESP_OK) return ESP_FAIL; + calib->dig_H1 = data[0]; // Read section 0xE1 - if (read_i2c(0xE1,data,7) != ESP_OK) return ESP_FAIL; + if (read_i2c(comm, 0xE1,data,7) != ESP_OK) return ESP_FAIL; - dig_H2 = (data[1] << 8) | data[0]; - dig_H3 = data[2]; - dig_H4 = (data[3] << 4) | (0x0f & data[4]); - dig_H5 = (data[5] << 4) | ((data[4] >> 4) & 0x0F); - dig_H6 = data[6]; + calib->dig_H2 = (data[1] << 8) | data[0]; + calib->dig_H3 = data[2]; + calib->dig_H4 = (data[3] << 4) | (0x0f & data[4]); + calib->dig_H5 = (data[5] << 4) | ((data[4] >> 4) & 0x0F); + calib->dig_H6 = data[6]; return ESP_OK; } @@ -180,44 +156,47 @@ static esp_err_t BME280_readCalibrationRegisters(void){ // Returns temperature in DegC, double precision. Output value of “51.23” equals 51.23 DegC. // t_fine carries fine temperature as global value -static double BME280_compensate_T_double(BME280_S32_t adc_T) { - double var1, var2, T; - var1 = (((double) adc_T) / 16384.0 - ((double)dig_T1)/1024.0) * ((double)dig_T2); - var2 = ((((double) adc_T) / 131072.0 - ((double)dig_T1)/8192.0) * - (((double)adc_T)/131072.0 - ((double) dig_T1)/8192.0)) * ((double)dig_T3); - t_fine = (BME280_S32_t) (var1 + var2); - T = (var1 + var2) / 5120.0; - return T; +static temp_reading_t BME280_compensate_T_double(bmx280_calib_t* calib, BME280_S32_t adc_T) { + double var1, var2; + var1 = (((double) adc_T) / 16384.0 - ((double)calib->dig_T1)/1024.0) * ((double)calib->dig_T2); + var2 = ((((double) adc_T) / 131072.0 - ((double)calib->dig_T1)/8192.0) * + (((double)adc_T)/131072.0 - ((double) calib->dig_T1)/8192.0)) * ((double)calib->dig_T3); + + temp_reading_t reading = { + .temp = (var1 + var2) / 5120.0, + .t_fine = (BME280_S32_t) (var1 + var2) + }; + return reading; } // Returns pressure in Pa as double. Output value of “96386.2” equals 96386.2 Pa = 963.862 hPa -static double BME280_compensate_P_double(BME280_S32_t adc_P) { +static double BME280_compensate_P_double(bmx280_calib_t* calib, BME280_S32_t t_fine, BME280_S32_t adc_P) { double var1, var2, p; var1 = ((double) t_fine / 2.0) - 64000.0; - var2 = var1 * var1 * ((double) dig_P6) / 32768.0; - var2 = var2 + var1 * ((double) dig_P5) * 2.0; - var2 = (var2 / 4.0) + (((double) dig_P4) * 65536.0); - var1 = (((double) dig_P3) * var1 * var1 / 524288.0 - + ((double) dig_P2) * var1) / 524288.0; - var1 = (1.0 + var1 / 32768.0) * ((double) dig_P1); + var2 = var1 * var1 * ((double) calib->dig_P6) / 32768.0; + var2 = var2 + var1 * ((double) calib->dig_P5) * 2.0; + var2 = (var2 / 4.0) + (((double) calib->dig_P4) * 65536.0); + var1 = (((double) calib->dig_P3) * var1 * var1 / 524288.0 + + ((double) calib->dig_P2) * var1) / 524288.0; + var1 = (1.0 + var1 / 32768.0) * ((double) calib->dig_P1); if (var1 == 0.0) { return 0; // avoid exception caused by division by zero } p = 1048576.0 - (double)adc_P; p = (p - (var2 / 4096.0)) * 6250.0 / var1; - var1 = ((double) dig_P9) * p * p / 2147483648.0; - var2 = p * ((double) dig_P8) / 32768.0; - p = p + (var1 + var2 + ((double) dig_P7)) / 16.0; + var1 = ((double) calib->dig_P9) * p * p / 2147483648.0; + var2 = p * ((double) calib->dig_P8) / 32768.0; + p = p + (var1 + var2 + ((double) calib->dig_P7)) / 16.0; return p; } // Returns humidity in %rH as as double. Output value of “46.332” represents 46.332 %rH -static double BME280_compensate_H_double(BME280_S32_t adc_H) { +static double BME280_compensate_H_double(bmx280_calib_t* calib, BME280_S32_t t_fine, BME280_S32_t adc_H) { double var_H; var_H = (((double)t_fine) - 76800.0); - var_H = (adc_H - (((double)dig_H4) * 64.0 + ((double)dig_H5) / 16384.0 * var_H)) * - (((double)dig_H2) / 65536.0 * (1.0 + ((double)dig_H6) / 67108864.0 * var_H * - (1.0 + ((double)dig_H3) / 67108864.0 * var_H))); - var_H = var_H * (1.0 - ((double)dig_H1) * var_H / 524288.0); + var_H = (adc_H - (((double)calib->dig_H4) * 64.0 + ((double)calib->dig_H5) / 16384.0 * var_H)) * + (((double)calib->dig_H2) / 65536.0 * (1.0 + ((double)calib->dig_H6) / 67108864.0 * var_H * + (1.0 + ((double)calib->dig_H3) / 67108864.0 * var_H))); + var_H = var_H * (1.0 - ((double)calib->dig_H1) * var_H / 524288.0); if (var_H > 100.0) var_H = 100.0; else if (var_H < 0.0) @@ -225,14 +204,14 @@ static double BME280_compensate_H_double(BME280_S32_t adc_H) { return var_H; } -esp_err_t BME280_read(){ - if(operation_mode == BME280_MODE_FORCED){ - if(trigger_force_read() != ESP_OK){ +esp_err_t BME280_read(bme280_sensor_t* bme280_sensor, env_data* result){ + if(bme280_sensor->operation_mode == BME280_MODE_FORCED){ + if(trigger_force_read(&bme280_sensor->i2c_comm, bme280_sensor->operation_mode) != ESP_OK){ return ESP_FAIL; } } uint8_t data[8]; - if (read_i2c(0xF7,data,8) != ESP_OK) { + if (read_i2c(&bme280_sensor->i2c_comm, 0xF7,data,8) != ESP_OK) { return ESP_FAIL; } @@ -243,21 +222,20 @@ esp_err_t BME280_read(){ //0xFD - humidity BME280_S32_t hum_raw = (data[6] << 8) | data[7]; - result.temp = BME280_compensate_T_double(temp_raw); //Celsius - result.pressure = BME280_compensate_P_double(pres_raw) / 100.0; //hPA - result.humidity = BME280_compensate_H_double(hum_raw);// pct - return ESP_OK; -} + temp_reading_t temp_reading = BME280_compensate_T_double(&bme280_sensor->calib, temp_raw); + result->temp = temp_reading.temp;//Celsius + result->pressure = BME280_compensate_P_double(&bme280_sensor->calib, temp_reading.t_fine, pres_raw) / 100.0; //hPA + result->humidity = BME280_compensate_H_double(&bme280_sensor->calib, temp_reading.t_fine, hum_raw);// pct -env_data BME280_last_result() { - return result; + + return ESP_OK; } -esp_err_t BME280_verify_chip() { +esp_err_t BME280_verify_chip(bme280_sensor_t* bme280_sensor) { uint8_t chipID = 0; uint8_t attemp = 0; - while (attemp++ <= 5 || read_i2c(BME280_CHIP_ID_REG,&chipID,1) != ESP_OK) { + while (attemp++ <= 5 || read_i2c(&bme280_sensor->i2c_comm, BME280_CHIP_ID_REG,&chipID,1) != ESP_OK) { vTaskDelay(20/portTICK_PERIOD_MS); } @@ -276,20 +254,14 @@ esp_err_t BME280_verify_chip() { } } -esp_err_t BME280_init(uint8_t _operation_mode, uint8_t _i2c_num, uint8_t _device_addr) +esp_err_t BME280_init(bme280_sensor_t* bme280_sensor) { - operation_mode = _operation_mode; - i2c_num = _i2c_num; - device_addr = _device_addr; - - if (BME280_verify_chip() != ESP_OK) { + if (BME280_verify_chip(bme280_sensor) != ESP_OK) { return ESP_FAIL; } - - BME280_writeConfigRegisters(); - - BME280_readCalibrationRegisters(); + BME280_writeConfigRegisters(&bme280_sensor->i2c_comm, bme280_sensor->operation_mode); + BME280_readCalibrationRegisters(&bme280_sensor->i2c_comm, &bme280_sensor->calib); return ESP_OK; } diff --git a/components/bmx280/i2c_bme280.h b/components/bmx280/i2c_bme280.h index 51f071b..2794f9c 100755 --- a/components/bmx280/i2c_bme280.h +++ b/components/bmx280/i2c_bme280.h @@ -25,12 +25,42 @@ #define BME280_MODE_NORMAL 0x03 //reads sensors at set interval #define BME280_MODE_FORCED 0x01 //reads sensors once when you write this register -esp_err_t BME280_verify_chip(); +typedef struct bmx280_calib_t { + uint16_t dig_T1; + int16_t dig_T2; + int16_t dig_T3; + uint16_t dig_P1; + int16_t dig_P2; + int16_t dig_P3; + int16_t dig_P4; + int16_t dig_P5; + int16_t dig_P6; + int16_t dig_P7; + int16_t dig_P8; + int16_t dig_P9; + int8_t dig_H1; + int16_t dig_H2; + int8_t dig_H3; + int16_t dig_H4; + int16_t dig_H5; + int8_t dig_H6; +} bmx280_calib_t; -esp_err_t BME280_init(uint8_t operation_mode, uint8_t i2c_num, uint8_t device_addr); +typedef struct i2c_comm_t { + uint8_t i2c_num; + uint8_t device_addr; +} i2c_comm_t; -esp_err_t BME280_read(); +typedef struct bme280_sensor_t { + uint8_t operation_mode; + i2c_comm_t i2c_comm; + bmx280_calib_t calib; +} bme280_sensor_t; -env_data BME280_last_result(); +esp_err_t BME280_verify_chip(bme280_sensor_t* bme280_sensor); + +esp_err_t BME280_init(bme280_sensor_t* bme280_sensor); + +esp_err_t BME280_read(bme280_sensor_t* bme280_sensor, env_data* result); #endif diff --git a/components/bmx280/include/bmx280.h b/components/bmx280/include/bmx280.h index fd9f7f4..51812f0 100644 --- a/components/bmx280/include/bmx280.h +++ b/components/bmx280/include/bmx280.h @@ -25,6 +25,15 @@ #include "freertos/queue.h" -QueueHandle_t bmx280_init(); +typedef struct bmx280_config_t { + + uint8_t i2c_num; + uint8_t device_addr; + uint8_t sda_pin; + uint8_t scl_pin; + +} bmx280_config_t; + +QueueHandle_t bmx280_init(bmx280_config_t* config); #endif /* MAIN_BMP280_H_ */ diff --git a/components/peripherals/rgb_led.c b/components/peripherals/rgb_led.c index 0cc7fdb..5313905 100644 --- a/components/peripherals/rgb_led.c +++ b/components/peripherals/rgb_led.c @@ -135,20 +135,20 @@ static void led_cycle() { freq = cmd.freq > 0 ? cmd.freq : DEFAULT_FREQ; switch (cmd.mode) { case LED_BLINK : - ESP_LOGD(TAG, "->blink (%d)", level); + //ESP_LOGD(TAG, "->blink (%d)", level); set_color(level ? cmd.color : LED_OFF); break; case LED_PULSE : - ESP_LOGD(TAG, "->pulse (%d)", level); + //ESP_LOGD(TAG, "->pulse (%d)", level); fade_to_color(level ? cmd.color : LED_OFF, freq); break; case LED_FADE_TO: - ESP_LOGD(TAG, "->fade_to"); + //ESP_LOGD(TAG, "->fade_to"); //this is causing some errors - cannot schedule fading when other is still ongoing? fade_to_color(cmd.color, freq); break; default: - ESP_LOGD(TAG, "->set"); + //ESP_LOGD(TAG, "->set"); freq = DEFAULT_FREQ; set_color(cmd.color); break; diff --git a/main/main.c b/main/main.c index 3f42970..f713680 100644 --- a/main/main.c +++ b/main/main.c @@ -114,7 +114,14 @@ static void main_task() { led_init(get_config().led, led_queue); update_led(); - QueueHandle_t env_queue = bmx280_init(); + bmx280_config_t bmx280_config = { + .i2c_num = CONFIG_OAP_BMX280_I2C_NUM, + .device_addr = CONFIG_OAP_BMX280_ADDRESS, + .sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN, + .scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN + }; + + QueueHandle_t env_queue = bmx280_init(&bmx280_config); gpio_num_t btn_gpio[] = {CONFIG_OAP_BTN_0_PIN}; //xQueueHandle btn_events = btn_init(btn_gpio, sizeof(btn_gpio)/sizeof(btn_gpio[0])); From 5fdd8552cec05f5af905c0cf2e0a40cec9fe2304 Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 17 Mar 2017 07:24:01 +0100 Subject: [PATCH 022/200] handle two env sensors --- components/awsiot/awsiot.c | 7 +++ components/bmx280/Kconfig | 37 +++++++++++ components/bmx280/bmx280.c | 35 ++++++----- components/bmx280/include/bmx280.h | 7 ++- components/net/thing_speak.c | 5 +- components/oap_common/include/oap_common.h | 2 + main/main.c | 71 +++++++++++++--------- 7 files changed, 115 insertions(+), 49 deletions(-) diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index 084f44f..c28455d 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -55,6 +55,7 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co cJSON* config = cJSON_CreateObject(); cJSON* pm = cJSON_CreateObject(); cJSON* weather = cJSON_CreateObject(); + cJSON* internal = cJSON_CreateObject(); cJSON* status = cJSON_CreateObject(); cJSON_AddItemToObject(shadow, "state", state); @@ -65,6 +66,8 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co cJSON_AddItemToObject(results, "pm", pm); cJSON_AddItemToObject(results, "weather", weather); + cJSON_AddItemToObject(results, "internal", internal); + cJSON_AddNumberToObject(results, "uid", rand()); //what about 0? cJSON_AddNumberToObject(status, "heap", xPortGetFreeHeapSize()); cJSON_AddNumberToObject(status, "heap_min", xPortGetMinimumEverFreeHeapSize()); @@ -90,6 +93,10 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co cJSON_AddNumberToObject(weather, "pressure", meas->env.pressure); cJSON_AddNumberToObject(weather, "humidity", meas->env.humidity); + cJSON_AddNumberToObject(internal, "temp", meas->env_int.temp); + cJSON_AddNumberToObject(internal, "pressure", meas->env_int.pressure); + cJSON_AddNumberToObject(internal, "humidity", meas->env_int.humidity); + char *body = cJSON_Print(shadow); cJSON_Delete(shadow); diff --git a/components/bmx280/Kconfig b/components/bmx280/Kconfig index 13d7f1a..ca7c7e8 100644 --- a/components/bmx280/Kconfig +++ b/components/bmx280/Kconfig @@ -1,5 +1,11 @@ menu "OAP BMx280 Sensor" +config OAP_BMX280_ENABLED + int "enable bmx280 sensor" + default 1 + help + todo + config OAP_BMX280_ADDRESS hex "i2c address" default 0x76 @@ -24,5 +30,36 @@ config OAP_BMX280_I2C_SCL_PIN default 26 help see help for SDA pin + +config OAP_BMX280_ENABLED_AUX + int "enable aux bmx280 sensor" + default 0 + help + todo + +config OAP_BMX280_ADDRESS_AUX + hex "i2c address" + default 0x77 + help + default address for bmx280 sensor is 0x76, it can be set to 0x77 by pulling down SDO pin. + +config OAP_BMX280_I2C_NUM_AUX + int "i2c interface number" + default 0 + help + todo + +config OAP_BMX280_I2C_SDA_PIN_AUX + int "gpio SDA pin" + default 16 + help + be careful with choosing gpio. i2c pins must be R/W. + + +config OAP_BMX280_I2C_SCL_PIN_AUX + int "SCL pin" + default 17 + help + see help for SDA pin endmenu \ No newline at end of file diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index d0154ca..b299c9c 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -32,9 +32,7 @@ #include "include/bmx280.h" #include "i2c_bme280.h" - static char* TAG = "bmx280"; -static QueueHandle_t samples_queue; static void bmx280_task(bmx280_config_t* bmx280_config) { @@ -48,21 +46,23 @@ static void bmx280_task(bmx280_config_t* bmx280_config) { .i2c_comm = i2c_comm }; - env_data result = {}; + env_data result = { + .sensor = bmx280_config->sensor + }; // TODO strangely, if this is executed inside main task, LEDC fails to initialise properly PWM (and blinks in funny ways)... easy to reproduce. if (BME280_init(&bmx280_sensor) == ESP_OK) { while(1) { log_task_stack(TAG); if (BME280_read(&bmx280_sensor, &result) == ESP_OK) { - ESP_LOGD(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.temp, result.pressure, result.humidity); - if (!xQueueSend(samples_queue, &result, 10000/portTICK_PERIOD_MS)) { - ESP_LOGW(TAG, "env queue overflow"); + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.sensor, result.temp, result.pressure, result.humidity); + if (bmx280_config->callback) { + bmx280_config->callback(&result); } } else { ESP_LOGW(TAG, "Failed to read data"); } - delay(5000); + delay(5000);//bmx280_config->interval); } } else { ESP_LOGE(TAG, "Failed to initialise"); @@ -70,7 +70,7 @@ static void bmx280_task(bmx280_config_t* bmx280_config) { vTaskDelete(NULL); } -static void i2c_setup(bmx280_config_t* config) { +static esp_err_t i2c_setup(bmx280_config_t* config) { i2c_config_t i2c_conf; i2c_conf.mode = I2C_MODE_MASTER; i2c_conf.sda_io_num = config->sda_pin;//CONFIG_OAP_BMX280_I2C_SDA_PIN; @@ -78,14 +78,17 @@ static void i2c_setup(bmx280_config_t* config) { i2c_conf.sda_pullup_en = GPIO_PULLUP_ENABLE; i2c_conf.scl_pullup_en = GPIO_PULLUP_ENABLE; i2c_conf.master.clk_speed = 100000; - i2c_param_config(config->i2c_num, &i2c_conf); - i2c_driver_install(config->i2c_num, I2C_MODE_MASTER, 0, 0, 0); + + esp_err_t res; + if ((res = i2c_param_config(config->i2c_num, &i2c_conf)) != ESP_OK) return res; + return i2c_driver_install(config->i2c_num, I2C_MODE_MASTER, 0, 0, 0); } -QueueHandle_t bmx280_init(bmx280_config_t* bmx280_config) { - samples_queue = xQueueCreate(1, sizeof(env_data)); - i2c_setup(bmx280_config); - //2kb => ~380bytes free - xTaskCreate(bmx280_task, "bmx280_task", 1024*3, bmx280_config, DEFAULT_TASK_PRIORITY, NULL); - return samples_queue; +esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { + esp_err_t res; + if ((res = i2c_setup(bmx280_config)) == ESP_OK) { + //2kb => ~380bytes free + xTaskCreate(bmx280_task, "bmx280_task", 1024*3, bmx280_config, DEFAULT_TASK_PRIORITY, NULL); + } + return res; } diff --git a/components/bmx280/include/bmx280.h b/components/bmx280/include/bmx280.h index 51812f0..02d7706 100644 --- a/components/bmx280/include/bmx280.h +++ b/components/bmx280/include/bmx280.h @@ -23,7 +23,7 @@ #ifndef MAIN_BMP280_H_ #define MAIN_BMP280_H_ -#include "freertos/queue.h" +typedef void(*env_callback)(env_data*); typedef struct bmx280_config_t { @@ -31,9 +31,12 @@ typedef struct bmx280_config_t { uint8_t device_addr; uint8_t sda_pin; uint8_t scl_pin; + uint8_t sensor; //sensor number (0 - 1) + uint32_t interval; + env_callback callback; } bmx280_config_t; -QueueHandle_t bmx280_init(bmx280_config_t* config); +esp_err_t bmx280_init(bmx280_config_t* config); #endif /* MAIN_BMP280_H_ */ diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index 4cabf19..77e42c7 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -94,14 +94,15 @@ static esp_err_t thing_speak_rest_post(oap_meas* meas) { freeaddrinfo(res); char* payload = malloc(512); - sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f&field6=%.2f&field7=%d&field8=%d", apikey, + sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f&field6=%.2f&field7=%.2f&field8=%.2f&field9=%d", apikey, meas->pm.pm1_0, meas->pm.pm2_5, meas->pm.pm10, meas->env.temp, meas->env.pressure, meas->env.humidity, - xPortGetFreeHeapSize(), + meas->env_int.temp, + meas->env_int.humidity, xPortGetMinimumEverFreeHeapSize()); char* request = malloc(512); diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index d7e3777..e42221c 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -35,11 +35,13 @@ typedef struct { double temp; double pressure; double humidity; + uint8_t sensor; } env_data; typedef struct { pm_data pm; env_data env; + env_data env_int; long int local_time; } oap_meas; diff --git a/main/main.c b/main/main.c index f713680..7523460 100644 --- a/main/main.c +++ b/main/main.c @@ -110,18 +110,50 @@ static void pm_meter_trigger_task() { } } +static env_data env = {0}; +static env_data env_int = {0}; + +static void bmx280_callback(env_data* result) { + ESP_LOGI(TAG,"Env (%d): Temperature : %.2f C, Pressure: %.2f hPa, Humidity: %.2f %%", result->sensor, result->temp, result->pressure, result->humidity); + memcpy(result->sensor ? &env_int : &env, result, sizeof(env_data)); +} + static void main_task() { led_init(get_config().led, led_queue); update_led(); - bmx280_config_t bmx280_config = { - .i2c_num = CONFIG_OAP_BMX280_I2C_NUM, - .device_addr = CONFIG_OAP_BMX280_ADDRESS, - .sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN, - .scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN - }; + if (CONFIG_OAP_BMX280_ENABLED) { + bmx280_config_t *bmx280_config = malloc(sizeof(bmx280_config_t)); + + bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM; + bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS; + bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN; + bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN; + bmx280_config->sensor = 0; + bmx280_config->interval = 5000; + bmx280_config->callback = &bmx280_callback; + + if (bmx280_init(bmx280_config) != ESP_OK) { + ESP_LOGE(TAG, "couldn't initialise bmx280 sensor 0"); + } + } + + if (CONFIG_OAP_BMX280_ENABLED_AUX) { + bmx280_config_t *bmx280_config = malloc(sizeof(bmx280_config_t)); + + bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM_AUX; + bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS_AUX; + bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX; + bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX; + bmx280_config->sensor = 0; + bmx280_config->interval = 5000; + bmx280_config->callback = &bmx280_callback; + + if (bmx280_init(bmx280_config) != ESP_OK) { + ESP_LOGE(TAG, "couldn't initialise bmx280 sensor 1"); + } + } - QueueHandle_t env_queue = bmx280_init(&bmx280_config); gpio_num_t btn_gpio[] = {CONFIG_OAP_BTN_0_PIN}; //xQueueHandle btn_events = btn_init(btn_gpio, sizeof(btn_gpio)/sizeof(btn_gpio[0])); @@ -132,43 +164,24 @@ static void main_task() { // } // } - env_data env = {}; - long env_timestamp = 0; + //env_data env = {}; + //long env_timestamp = 0; while (1) { long localTime = oap_epoch_sec_valid(); - if (env_queue != NULL && xQueueReceive(env_queue, &env, 100)) { - env_timestamp = localTime; - ESP_LOGI(TAG,"Temperature : %.2f C, Pressure: %.2f hPa, Humidity: %.2f %%", env.temp, env.pressure, env.humidity); - } - pm_data pm; if (xQueueReceive(pm_queue, &pm, 100)) { log_task_stack("main_task"); - oap_meas meas = { .pm = pm, .env = env, //TODO allow null, check last timestamp + .env_int = env_int, .local_time = localTime }; thing_speak_send(&meas); awsiot_send(&meas, &sensor_config); - - /* - * generally, we'd like to keep all client asynchronous, - * but having multiple heavy tasks hurts esp32 stability (for now) - if (thing_speak_queue) { - if (!xQueueSend(thing_speak_queue, &meas, 1)) { - ESP_LOGW(TAG,"thing_speak_queue queue overflow"); - } - } - if (awsiot_queue) { - if (!xQueueSend(awsiot_queue, &meas, 1)) { - ESP_LOGW(TAG,"awsiot_queue queue overflow"); - } - }*/ } } } From 070ef4176b51d758b0ee65b8bed79b287fd46c02 Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 17 Mar 2017 08:22:21 +0100 Subject: [PATCH 023/200] refactor pm to simplify config and flow --- components/pmsx003/include/pmsx003.h | 23 +++++++++-- components/pmsx003/pmsx003.c | 60 ++++++++++++++-------------- main/main.c | 16 +++++++- main/pm_meter.c | 47 ++++++++++------------ main/pm_meter.h | 7 +++- 5 files changed, 90 insertions(+), 63 deletions(-) diff --git a/components/pmsx003/include/pmsx003.h b/components/pmsx003/include/pmsx003.h index 28e2eea..1156f20 100644 --- a/components/pmsx003/include/pmsx003.h +++ b/components/pmsx003/include/pmsx003.h @@ -23,16 +23,33 @@ #ifndef MAIN_PMS_H_ #define MAIN_PMS_H_ -#include "freertos/queue.h" +#include "oap_common.h" +#include "driver/uart.h" + +typedef void(*pms_callback)(pm_data*); + +typedef struct pms_config_t { + uint8_t indoor; + uint8_t enabled; + uint8_t sensor; + pms_callback callback; + uint8_t set0_pin; + uint8_t set1_pin; //optional set pin + uart_port_t uart_num; + uint8_t uart_txd_pin; + uint8_t uart_rxd_pin; + uint8_t uart_rts_pin; + uint8_t uart_cts_pin; +} pms_config_t; /** * pm samples data is send to the queue. */ -QueueHandle_t pms_init(int outdoor); +esp_err_t pms_init(pms_config_t* config); /** * enable/disable sensor. */ -void pms_enable(int enabled); +esp_err_t pms_enable(pms_config_t* config, int enabled); #endif /* MAIN_PMS_H_ */ diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 89488ad..323508e 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -30,7 +30,6 @@ #include "soc/uart_struct.h" #include "esp_log.h" #include "pmsx003.h" -#include "oap_common.h" #include "oap_debug.h" /* @@ -41,11 +40,7 @@ static const char* TAG = "pmsX003"; -static int enabled = 0; -static int indoor = 0; -static QueueHandle_t samples; - -static void pms_init_uart(void) { +static void pms_init_uart(pms_config_t* config) { //configure UART uart_config_t uart_config = { .baud_rate = 9600, @@ -55,16 +50,20 @@ static void pms_init_uart(void) { .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,//UART_HW_FLOWCTRL_CTS_RTS, .rx_flow_ctrl_thresh = 122, }; - uart_param_config(CONFIG_OAP_PM_UART_NUM, &uart_config); - uart_set_pin(CONFIG_OAP_PM_UART_NUM, CONFIG_OAP_PM_UART_TXD_PIN, CONFIG_OAP_PM_UART_RXD_PIN, CONFIG_OAP_PM_UART_RTS_PIN, CONFIG_OAP_PM_UART_CTS_PIN); + uart_param_config(config->uart_num, &uart_config); + uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin); //Install UART driver( We don't need an event queue here) - uart_driver_install(CONFIG_OAP_PM_UART_NUM, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); } -static void pms_init_gpio(void) { - gpio_pad_select_gpio(CONFIG_OAP_PM_SENSOR_CONTROL_PIN); - ESP_ERROR_CHECK(gpio_set_direction(CONFIG_OAP_PM_SENSOR_CONTROL_PIN, GPIO_MODE_OUTPUT)); +static void pms_init_gpio(pms_config_t* config) { + gpio_pad_select_gpio(config->set0_pin); //CONFIG_OAP_PM_SENSOR_CONTROL_PIN + ESP_ERROR_CHECK(gpio_set_direction(config->set0_pin, GPIO_MODE_OUTPUT)); + if (config->set1_pin) { + gpio_pad_select_gpio(config->set1_pin); + ESP_ERROR_CHECK(gpio_set_direction(config->set1_pin, GPIO_MODE_OUTPUT)); + } } static pm_data decodepm_data(uint8_t* data, uint8_t startByte) { @@ -76,17 +75,17 @@ static pm_data decodepm_data(uint8_t* data, uint8_t startByte) { return pm; } -static void pms_uart_read() { +static void pms_uart_read(pms_config_t* config) { uint8_t* data = (uint8_t*) malloc(32); while(1) { - int len = uart_read_bytes(CONFIG_OAP_PM_UART_NUM, data, 32, 100 / portTICK_RATE_MS); - if (!enabled) continue; + int len = uart_read_bytes(config->uart_num, data, 32, 100 / portTICK_RATE_MS); + if (!config->enabled) continue; if (len >= 24 && data[0]==0x42 && data[1]==0x4d) { log_task_stack(TAG); //ESP_LOGI(TAG, "got frame of %d bytes", len); - pm_data pm = decodepm_data(data, indoor ? 4 : 10); //atmospheric from 10th byte, standard from 4th - if (!xQueueSend(samples, &pm, 100)) { - ESP_LOGW(TAG, "sample queue overflow"); + pm_data pm = decodepm_data(data, config->indoor ? 4 : 10); //atmospheric from 10th byte, standard from 4th + if (config->callback) { + config->callback(&pm); } } else if (len > 0) { ESP_LOGW(TAG, "invalid frame of %d", len); //we often get an error after this :( @@ -95,22 +94,23 @@ static void pms_uart_read() { vTaskDelete(NULL); } -void pms_enable(int _enabled) { - enabled = _enabled; +esp_err_t pms_enable(pms_config_t* config, int enabled) { ESP_LOGI(TAG,"enable(%d)",enabled); - gpio_set_level(CONFIG_OAP_PM_SENSOR_CONTROL_PIN, enabled); //low state = disabled, high state = enabled + config->enabled = enabled; + gpio_set_level(config->set0_pin, enabled); //low state = disabled, high state = enabled + if (config->set1_pin) { + gpio_set_level(config->set1_pin, enabled); + } + return ESP_OK; //todo } -QueueHandle_t pms_init(int _indoor) { - indoor = _indoor; - samples = xQueueCreate(1, sizeof(pm_data)); - pms_init_gpio(); - pms_enable(0); - pms_init_uart(); - +esp_err_t pms_init(pms_config_t* config) { + pms_init_gpio(config); + pms_enable(config, 0); + pms_init_uart(config); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) - xTaskCreate(pms_uart_read, "pms_uart_read", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); - return samples; + xTaskCreate(pms_uart_read, "pms_uart_read", 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + return ESP_OK; //todo } diff --git a/main/main.c b/main/main.c index 7523460..2685481 100644 --- a/main/main.c +++ b/main/main.c @@ -88,8 +88,22 @@ static void update_led_color(led_mode mode, float r, float g, float b) { } static void pm_meter_trigger_task() { + + pms_config_t* pms_config = malloc(sizeof(pms_config_t)); + memset(pms_config, 0, sizeof(pms_config_t)); + pms_config->indoor = sensor_config.indoor; + pms_config->set0_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; + pms_config->uart_num = CONFIG_OAP_PM_UART_NUM; + pms_config->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN; + pms_config->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN; + pms_config->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN; + pms_config->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN; + pms_config->callback = &pm_meter_collect; + + pms_init(pms_config); + pm_meter_init(pms_config); + int delay_sec = (sensor_config.measInterval-sensor_config.measTime); - pm_meter_init(pms_init(sensor_config.indoor)); while (1) { log_task_stack("pm_meter_trigger"); update_led_mode(LED_PULSE); diff --git a/main/pm_meter.c b/main/pm_meter.c index e021aff..c1e6a90 100644 --- a/main/pm_meter.c +++ b/main/pm_meter.c @@ -49,35 +49,29 @@ static pm_data *sampleBuffer = NULL; static long startedAt; static int warmingTime; -static QueueHandle_t samples_queue; - static char* TAG = "pm_meter"; +static pms_config_t* pms_config = NULL; static void pm_data_print(char* str, pm_data pm) { ESP_LOGI(TAG, "%s pm1.0=%d pm2.5=%d pm10=%d", str, pm.pm1_0, pm.pm2_5, pm.pm10); } -static void pm_data_collector_task() { - pm_data pm; +void pm_meter_collect(pm_data* pm) { long localTime; - while (1) { - if (xQueueReceive(samples_queue, &pm, 100)) { - pm_data* buf = sampleBuffer+(sampleIndex % CONFIG_OAP_PM_SAMPLE_BUF_SIZE); - memcpy(buf, &pm, sizeof(pm)); - localTime = oap_epoch_sec(); - - if (localTime - startedAt > 3600 * 24) { - //localTime was set to proper value in a meantime. start over to avoid invalid warming time. - startedAt = localTime; - } - - if (localTime - startedAt > warmingTime) { - sampleIndex++; - pm_data_print("collect: ", *buf); - } else { - pm_data_print("warming: ", *buf); - } - } + pm_data* buf = sampleBuffer+(sampleIndex % CONFIG_OAP_PM_SAMPLE_BUF_SIZE); + memcpy(buf, pm, sizeof(pm_data)); + localTime = oap_epoch_sec(); + + if (localTime - startedAt > 3600 * 24) { + //localTime was set to proper value in a meantime. start over to avoid invalid warming time. + startedAt = localTime; + } + + if (localTime - startedAt > warmingTime) { + sampleIndex++; + pm_data_print("collect: ", *buf); + } else { + pm_data_print("warming: ", *buf); } } @@ -85,11 +79,11 @@ void pm_meter_start(unsigned int _warmingTime) { sampleIndex = 0; startedAt = oap_epoch_sec(); warmingTime = _warmingTime; - pms_enable(1); + pms_enable(pms_config, 1); } pm_data pm_meter_sample(int disable_sensor) { - if (disable_sensor) pms_enable(0); + if (disable_sensor) pms_enable(pms_config, 0); pm_data avg = { .pm1_0 = 0, .pm2_5 = 0, @@ -116,8 +110,7 @@ pm_data pm_meter_sample(int disable_sensor) { return avg; } -void pm_meter_init(QueueHandle_t _samples_queue) { - samples_queue = _samples_queue; +void pm_meter_init(pms_config_t* _pms_config) { + pms_config = _pms_config; sampleBuffer = malloc(CONFIG_OAP_PM_SAMPLE_BUF_SIZE * sizeof(pm_data)); - xTaskCreate(pm_data_collector_task, "pm_data_collector_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); } diff --git a/main/pm_meter.h b/main/pm_meter.h index a7b2e06..8a3aa43 100644 --- a/main/pm_meter.h +++ b/main/pm_meter.h @@ -23,8 +23,9 @@ #ifndef MAIN_PM_METER_H_ #define MAIN_PM_METER_H_ -#include "freertos/queue.h" #include "oap_common.h" +#include "pmsx003.h" + typedef enum { PM_MEAS_AVG, @@ -32,7 +33,9 @@ typedef enum { } pm_meas_mode; void pm_meter_start(unsigned int warmingTime); +void pm_meter_collect(pm_data *data); + pm_data pm_meter_sample(int disable_sensor); -void pm_meter_init(QueueHandle_t samples_queue); +void pm_meter_init(pms_config_t* pms_config); #endif /* MAIN_PM_METER_H_ */ From 2bb613c31f94fc117466950151e5cea4867cbc70 Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 17 Mar 2017 09:11:19 +0100 Subject: [PATCH 024/200] two bme280 sensors tested. --- components/bmx280/Kconfig | 20 ++++++++++++-------- components/bmx280/bmx280.c | 17 ++++++++++++++++- components/bmx280/i2c_bme280.c | 34 +++++++++++++++++----------------- main/main.c | 2 +- 4 files changed, 46 insertions(+), 27 deletions(-) diff --git a/components/bmx280/Kconfig b/components/bmx280/Kconfig index ca7c7e8..44deec5 100644 --- a/components/bmx280/Kconfig +++ b/components/bmx280/Kconfig @@ -10,7 +10,8 @@ config OAP_BMX280_ADDRESS hex "i2c address" default 0x76 help - default address for bmx280 sensor is 0x76, it can be set to 0x77 by pulling down SDO pin. + Default address for bmx280 sensor is 0x76, it can be set to 0x77 by pulling up SDO pin. + Adafruit bme280 board is configured for 0x77 as default. config OAP_BMX280_I2C_NUM int "i2c interface number" @@ -32,33 +33,36 @@ config OAP_BMX280_I2C_SCL_PIN see help for SDA pin config OAP_BMX280_ENABLED_AUX - int "enable aux bmx280 sensor" + int "enable internal bmx280 sensor" default 0 help todo config OAP_BMX280_ADDRESS_AUX - hex "i2c address" + hex "i2c address of internal sensor" default 0x77 help - default address for bmx280 sensor is 0x76, it can be set to 0x77 by pulling down SDO pin. + If both external and internal sensor use the same i2c bus, they must be configured to use + different addresses. + Default address for bmx280 sensor is 0x76, it can be set to 0x77 by pulling up SDO pin. + Adafruit bme280 board is configured for 0x77 as default. config OAP_BMX280_I2C_NUM_AUX - int "i2c interface number" + int "i2c interface number for internal sensor" default 0 help - todo + if both sensors use the same bus (default), sda/scl pins are ignored. config OAP_BMX280_I2C_SDA_PIN_AUX int "gpio SDA pin" - default 16 + default 25 help be careful with choosing gpio. i2c pins must be R/W. config OAP_BMX280_I2C_SCL_PIN_AUX int "SCL pin" - default 17 + default 26 help see help for SDA pin diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index b299c9c..0e59a34 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -70,7 +70,15 @@ static void bmx280_task(bmx280_config_t* bmx280_config) { vTaskDelete(NULL); } +static uint8_t i2c_drivers[3] = {0}; + static esp_err_t i2c_setup(bmx280_config_t* config) { + if (config->i2c_num > 2) { + ESP_LOGE(TAG, "invalid I2C BUS NUMBER (%d)", config->i2c_num); + return ESP_FAIL; + } + if (i2c_drivers[config->i2c_num]) return ESP_OK; //already installed + i2c_config_t i2c_conf; i2c_conf.mode = I2C_MODE_MASTER; i2c_conf.sda_io_num = config->sda_pin;//CONFIG_OAP_BMX280_I2C_SDA_PIN; @@ -81,7 +89,14 @@ static esp_err_t i2c_setup(bmx280_config_t* config) { esp_err_t res; if ((res = i2c_param_config(config->i2c_num, &i2c_conf)) != ESP_OK) return res; - return i2c_driver_install(config->i2c_num, I2C_MODE_MASTER, 0, 0, 0); + + ESP_LOGD(TAG, "install I2C driver (bus %d)", config->i2c_num); + res = i2c_driver_install(config->i2c_num, I2C_MODE_MASTER, 0, 0, 0); + if (res == ESP_OK) { + i2c_drivers[config->i2c_num] = 1; + } + + return res; } esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c index da3dbea..1263579 100755 --- a/components/bmx280/i2c_bme280.c +++ b/components/bmx280/i2c_bme280.c @@ -57,28 +57,28 @@ typedef struct temp_reading_t { static char* TAG = "i2c_bmx280"; -#define CONT_IF_I2C_OK(log, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err: %d (%s)",rc,log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); +#define CONT_IF_I2C_OK(log, comm, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err: %d (%x %s)",rc,comm->device_addr, log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); #define CONT_IF_OK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) return rc; } while(0); static esp_err_t read_i2c(i2c_comm_t* comm, uint8_t reg, uint8_t* data, int len) { i2c_cmd_handle_t cmd = i2c_cmd_link_create(); //set address - CONT_IF_I2C_OK("r1", i2c_master_start(cmd)); - CONT_IF_I2C_OK("r2", i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_WRITE, 1)); - CONT_IF_I2C_OK("r3", i2c_master_write_byte(cmd, reg, 1)); - CONT_IF_I2C_OK("r4", i2c_master_stop(cmd)); - CONT_IF_I2C_OK("r5",i2c_master_cmd_begin(comm->i2c_num, cmd, 1000/portTICK_PERIOD_MS)); //often ESP_FAIL (no ack received) + CONT_IF_I2C_OK("r1", comm, i2c_master_start(cmd)); + CONT_IF_I2C_OK("r2", comm, i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_WRITE, 1)); + CONT_IF_I2C_OK("r3", comm, i2c_master_write_byte(cmd, reg, 1)); + CONT_IF_I2C_OK("r4", comm, i2c_master_stop(cmd)); + CONT_IF_I2C_OK("r5", comm, i2c_master_cmd_begin(comm->i2c_num, cmd, 1000/portTICK_PERIOD_MS)); //often ESP_FAIL (no ack received) i2c_cmd_link_delete(cmd); cmd = 0; //we need to read one byte per command (see below) for (int i=0;idevice_addr << 1) | I2C_MASTER_READ, 1)); - CONT_IF_I2C_OK("r8",i2c_master_read(cmd,data+i,1,1)); //ACK is must! - CONT_IF_I2C_OK("r9",i2c_master_stop(cmd)); - CONT_IF_I2C_OK("r10",i2c_master_cmd_begin(comm->i2c_num, cmd, 2000/portTICK_PERIOD_MS)); + CONT_IF_I2C_OK("r6", comm, i2c_master_start(cmd)); + CONT_IF_I2C_OK("r7", comm, i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_READ, 1)); + CONT_IF_I2C_OK("r8", comm, i2c_master_read(cmd,data+i,1,1)); //ACK is must! + CONT_IF_I2C_OK("r9", comm, i2c_master_stop(cmd)); + CONT_IF_I2C_OK("r10",comm, i2c_master_cmd_begin(comm->i2c_num, cmd, 2000/portTICK_PERIOD_MS)); i2c_cmd_link_delete(cmd); cmd = 0; } @@ -87,12 +87,12 @@ static esp_err_t read_i2c(i2c_comm_t* comm, uint8_t reg, uint8_t* data, int len) static esp_err_t write_i2c_byte(i2c_comm_t *comm, uint8_t reg, uint8_t value) { i2c_cmd_handle_t cmd = i2c_cmd_link_create(); - CONT_IF_I2C_OK("w1",i2c_master_start(cmd)); - CONT_IF_I2C_OK("w2",i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_WRITE, 1)); - CONT_IF_I2C_OK("w3",i2c_master_write_byte(cmd, reg, 1)); - CONT_IF_I2C_OK("w4",i2c_master_write_byte(cmd, value, 1)); - CONT_IF_I2C_OK("w5",i2c_master_stop(cmd)); - CONT_IF_I2C_OK("w6",i2c_master_cmd_begin(comm->i2c_num, cmd, 1000/portTICK_PERIOD_MS)); + CONT_IF_I2C_OK("w1",comm, i2c_master_start(cmd)); + CONT_IF_I2C_OK("w2",comm, i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_WRITE, 1)); + CONT_IF_I2C_OK("w3",comm, i2c_master_write_byte(cmd, reg, 1)); + CONT_IF_I2C_OK("w4",comm, i2c_master_write_byte(cmd, value, 1)); + CONT_IF_I2C_OK("w5",comm, i2c_master_stop(cmd)); + CONT_IF_I2C_OK("w6",comm, i2c_master_cmd_begin(comm->i2c_num, cmd, 1000/portTICK_PERIOD_MS)); i2c_cmd_link_delete(cmd); return ESP_OK; } diff --git a/main/main.c b/main/main.c index 2685481..e7c09b1 100644 --- a/main/main.c +++ b/main/main.c @@ -159,7 +159,7 @@ static void main_task() { bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS_AUX; bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX; bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX; - bmx280_config->sensor = 0; + bmx280_config->sensor = 1; bmx280_config->interval = 5000; bmx280_config->callback = &bmx280_callback; From 5998261b34a72893f45a8302126fad373d60c0ae Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 17 Mar 2017 13:15:07 +0100 Subject: [PATCH 025/200] support external fan and heater --- CHANGELOG.md | 7 ++++- components/bootwifi/index.html | 10 +++++++ components/oap_common/include/oap_common.h | 3 ++ components/pmsx003/Kconfig | 25 +++++++++++----- components/pmsx003/include/pmsx003.h | 8 +++-- components/pmsx003/pmsx003.c | 35 ++++++++++++++-------- main/main.c | 7 ++++- 7 files changed, 71 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92b8338..ed98d33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,4 +6,9 @@ # 0.2.0 - support for bmp280 and bme280 -- basic rest client for AWS IoT \ No newline at end of file +- basic rest client for AWS IoT + +# 0.3.0 + +- support two (internal and external) bmx sensors +- support optional fan and heater \ No newline at end of file diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html index 44d2626..a6bcb4f 100644 --- a/components/bootwifi/index.html +++ b/components/bootwifi/index.html @@ -134,6 +134,16 @@

    OpenAirProject Sensor + + + + + + + + + + diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index e42221c..ac631af 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -47,6 +47,9 @@ typedef struct { typedef struct { int led; + int heater; + int fan; + int indoor; int warmUpTime; int measTime; diff --git a/components/pmsx003/Kconfig b/components/pmsx003/Kconfig index a58133f..8d57dfd 100644 --- a/components/pmsx003/Kconfig +++ b/components/pmsx003/Kconfig @@ -10,31 +10,42 @@ config OAP_PM_SENSOR_CONTROL_PIN int "SET gpio" default 10 help - ESP32 R/W gpio connected to sensor SET line - it enables/disables sensor. + R/W GPIO pin connected to sensor SET line - it enables/disables sensor. + +config OAP_HEATER_CONTROL_PIN + int "external heater gpio" + default 15 + help + optional GPIO pin to control a heater. It mirrors state of SET gpio. (0 = none) + +config OAP_FAN_CONTROL_PIN + int "external fan gpio" + default 2 + help + optional GPIO pin to control an additional fan. It mirrors state of SET gpio. (0 = none) config OAP_PM_UART_RXD_PIN int "RX gpio" default 34 help - ESP32 gpio connected to sensor RX line. This pin can be R/O (>=34). + GPIO pin connected to sensor RX line. This pin can be R/O (>=34). config OAP_PM_UART_TXD_PIN int "TX gpio" - default 4 + default 5 help - Any pin (no need to connect this line) + Any gpio pin (no need to connect this line) - config OAP_PM_UART_RTS_PIN int "RTS gpio" default 18 help - Any pin (no need to connect this line) + Any gpio pin (no need to connect this line) config OAP_PM_UART_CTS_PIN int "CTS gpio" default 19 help - Any pin (no need to connect this line) + Any gpio pin (no need to connect this line) endmenu \ No newline at end of file diff --git a/components/pmsx003/include/pmsx003.h b/components/pmsx003/include/pmsx003.h index 1156f20..848ba90 100644 --- a/components/pmsx003/include/pmsx003.h +++ b/components/pmsx003/include/pmsx003.h @@ -33,8 +33,10 @@ typedef struct pms_config_t { uint8_t enabled; uint8_t sensor; pms_callback callback; - uint8_t set0_pin; - uint8_t set1_pin; //optional set pin + uint8_t set_pin; + uint8_t heater_pin; + uint8_t fan_pin; + uart_port_t uart_num; uint8_t uart_txd_pin; uint8_t uart_rxd_pin; @@ -50,6 +52,6 @@ esp_err_t pms_init(pms_config_t* config); /** * enable/disable sensor. */ -esp_err_t pms_enable(pms_config_t* config, int enabled); +esp_err_t pms_enable(pms_config_t* config, uint8_t enabled); #endif /* MAIN_PMS_H_ */ diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 323508e..028643f 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -47,7 +47,7 @@ static void pms_init_uart(pms_config_t* config) { .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, - .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,//UART_HW_FLOWCTRL_CTS_RTS, + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .rx_flow_ctrl_thresh = 122, }; uart_param_config(config->uart_num, &uart_config); @@ -57,15 +57,27 @@ static void pms_init_uart(pms_config_t* config) { uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); } -static void pms_init_gpio(pms_config_t* config) { - gpio_pad_select_gpio(config->set0_pin); //CONFIG_OAP_PM_SENSOR_CONTROL_PIN - ESP_ERROR_CHECK(gpio_set_direction(config->set0_pin, GPIO_MODE_OUTPUT)); - if (config->set1_pin) { - gpio_pad_select_gpio(config->set1_pin); - ESP_ERROR_CHECK(gpio_set_direction(config->set1_pin, GPIO_MODE_OUTPUT)); +static void configure_gpio(uint8_t gpio) { + if (gpio > 0) { + ESP_LOGD(TAG, "configure pin %d as output", gpio); + gpio_pad_select_gpio(gpio); + ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); + } +} + +static void set_gpio(uint8_t gpio, uint8_t enabled) { + if (gpio > 0) { + ESP_LOGD(TAG, "set pin %d => %d", gpio, enabled); + gpio_set_level(gpio, enabled); } } +static void pms_init_gpio(pms_config_t* config) { + configure_gpio(config->set_pin); + configure_gpio(config->heater_pin); + configure_gpio(config->fan_pin); +} + static pm_data decodepm_data(uint8_t* data, uint8_t startByte) { pm_data pm = { .pm1_0 = ((data[startByte]<<8) + data[startByte+1]), @@ -94,13 +106,12 @@ static void pms_uart_read(pms_config_t* config) { vTaskDelete(NULL); } -esp_err_t pms_enable(pms_config_t* config, int enabled) { +esp_err_t pms_enable(pms_config_t* config, uint8_t enabled) { ESP_LOGI(TAG,"enable(%d)",enabled); config->enabled = enabled; - gpio_set_level(config->set0_pin, enabled); //low state = disabled, high state = enabled - if (config->set1_pin) { - gpio_set_level(config->set1_pin, enabled); - } + set_gpio(config->set_pin, enabled); + set_gpio(config->heater_pin, enabled); + set_gpio(config->fan_pin, enabled); return ESP_OK; //todo } diff --git a/main/main.c b/main/main.c index e7c09b1..86e6fc4 100644 --- a/main/main.c +++ b/main/main.c @@ -61,6 +61,8 @@ static oap_sensor_config_t get_config() { if ((field = cJSON_GetObjectItem(sconfig, "led"))) sensor_config.led = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "indoor"))) sensor_config.indoor = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "fan"))) sensor_config.fan = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "heater"))) sensor_config.heater = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "warmUpTime"))) sensor_config.warmUpTime = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "measTime"))) sensor_config.measTime = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "measInterval"))) sensor_config.measInterval = field->valueint; @@ -92,7 +94,10 @@ static void pm_meter_trigger_task() { pms_config_t* pms_config = malloc(sizeof(pms_config_t)); memset(pms_config, 0, sizeof(pms_config_t)); pms_config->indoor = sensor_config.indoor; - pms_config->set0_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; + pms_config->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; + pms_config->heater_pin = sensor_config.heater ? CONFIG_OAP_HEATER_CONTROL_PIN : 0; + pms_config->fan_pin = sensor_config.fan ? CONFIG_OAP_FAN_CONTROL_PIN : 0; + pms_config->uart_num = CONFIG_OAP_PM_UART_NUM; pms_config->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN; pms_config->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN; From 37e2626f10c19c452482fe0b44a9b5e501d10ae7 Mon Sep 17 00:00:00 2001 From: kris Date: Fri, 17 Mar 2017 13:22:11 +0100 Subject: [PATCH 026/200] add main_task stack size note --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 1d35a32..d643db9 100644 --- a/README.md +++ b/README.md @@ -79,11 +79,18 @@ To configure and build sources make -j5 +You can always bring up configuration menu via + + make menuconfig + During the first run, a menuconfig should appear where you need to configure some parameters of your setup, most notably - UART port (in my case - "/dev/tty.SLAB_USBtoUART"). In components submenu there's a few configuration settings related to OAP hardware setup (e.g. gpio pin assignments), and "OAP Main" menu where you can change various functional parameters. + +** ATTENTION. main task stack should be increased to 10K if you're gonna use AWSIoT (via menuconfig) ** + All settings are saved in sdkconfig file. to flash the module and read from the serial output From 28d2da5ef915f3bf0490267b10038909cd3a93e6 Mon Sep 17 00:00:00 2001 From: kris Date: Sat, 25 Mar 2017 19:28:04 +0100 Subject: [PATCH 027/200] working prototype --- components/oap_common/include/oap_common.h | 7 +- components/pmsx003/Kconfig | 66 ++++++-- components/pmsx003/include/pmsx003.h | 2 +- components/pmsx003/pmsx003.c | 8 +- main/main.c | 129 +++++++++++----- main/meas.h | 57 +++++++ main/{pm_meter.h => meas_continuous.c} | 27 ++-- main/meas_continuous.h | 30 ++++ main/meas_intervals.c | 171 +++++++++++++++++++++ main/meas_intervals.h | 36 +++++ main/pm_meter.c | 116 -------------- 11 files changed, 464 insertions(+), 185 deletions(-) create mode 100644 main/meas.h rename main/{pm_meter.h => meas_continuous.c} (65%) create mode 100644 main/meas_continuous.h create mode 100644 main/meas_intervals.c create mode 100644 main/meas_intervals.h delete mode 100644 main/pm_meter.c diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index ac631af..1848236 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -23,6 +23,11 @@ #ifndef MAIN_COMMON_COMMON_H_ #define MAIN_COMMON_COMMON_H_ +#include +#include +#include +#include "freertos/FreeRTOS.h" + #define DEFAULT_TASK_PRIORITY (10) typedef struct { @@ -35,7 +40,7 @@ typedef struct { double temp; double pressure; double humidity; - uint8_t sensor; + uint8_t sensor; //TODO remove } env_data; typedef struct { diff --git a/components/pmsx003/Kconfig b/components/pmsx003/Kconfig index 8d57dfd..b91dcd0 100644 --- a/components/pmsx003/Kconfig +++ b/components/pmsx003/Kconfig @@ -7,43 +7,85 @@ config OAP_PM_UART_NUM todo config OAP_PM_SENSOR_CONTROL_PIN - int "SET gpio" + int "sensor set gpio" default 10 help R/W GPIO pin connected to sensor SET line - it enables/disables sensor. +config OAP_PM_UART_RXD_PIN + int "RX gpio" + default 13 + help + GPIO pin connected to sensor RX line. This pin can be R/O (>=34). + +config OAP_PM_UART_TXD_PIN + int "TX gpio" + default 5 + help + Any gpio pin (no need to connect this line) + +config OAP_PM_UART_RTS_PIN + int "RTS gpio" + default 18 + help + Any gpio pin (no need to connect this line) + +config OAP_PM_UART_CTS_PIN + int "CTS gpio" + default 19 + help + Any gpio pin (no need to connect this line) + config OAP_HEATER_CONTROL_PIN int "external heater gpio" - default 15 + default 21 help optional GPIO pin to control a heater. It mirrors state of SET gpio. (0 = none) config OAP_FAN_CONTROL_PIN int "external fan gpio" - default 2 + default 22 help optional GPIO pin to control an additional fan. It mirrors state of SET gpio. (0 = none) -config OAP_PM_UART_RXD_PIN - int "RX gpio" - default 34 +config OAP_PM_ENABLED_AUX + int "enable secondary PM sensor" + default 0 + help + todo + +config OAP_PM_UART_NUM_AUX + hex "AUX uart num" + default 2 + help + todo + +config OAP_PM_SENSOR_CONTROL_PIN_AUX + int "AUX sensor set gpio" + default 2 + help + R/W GPIO pin connected to sensor SET line - it enables/disables sensor. + +config OAP_PM_UART_RXD_PIN_AUX + int "AUX RX gpio" + default 15 help GPIO pin connected to sensor RX line. This pin can be R/O (>=34). -config OAP_PM_UART_TXD_PIN - int "TX gpio" +config OAP_PM_UART_TXD_PIN_AUX + int "AUX TX gpio" default 5 help Any gpio pin (no need to connect this line) -config OAP_PM_UART_RTS_PIN - int "RTS gpio" +config OAP_PM_UART_RTS_PIN_AUX + int "AUX RTS gpio" default 18 help Any gpio pin (no need to connect this line) -config OAP_PM_UART_CTS_PIN - int "CTS gpio" +config OAP_PM_UART_CTS_PIN_AUX + int "AUX CTS gpio" default 19 help Any gpio pin (no need to connect this line) diff --git a/components/pmsx003/include/pmsx003.h b/components/pmsx003/include/pmsx003.h index 848ba90..c9067b6 100644 --- a/components/pmsx003/include/pmsx003.h +++ b/components/pmsx003/include/pmsx003.h @@ -26,7 +26,7 @@ #include "oap_common.h" #include "driver/uart.h" -typedef void(*pms_callback)(pm_data*); +typedef void(*pms_callback)(uint8_t sensor, pm_data*); typedef struct pms_config_t { uint8_t indoor; diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 028643f..b74db14 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -97,7 +97,7 @@ static void pms_uart_read(pms_config_t* config) { //ESP_LOGI(TAG, "got frame of %d bytes", len); pm_data pm = decodepm_data(data, config->indoor ? 4 : 10); //atmospheric from 10th byte, standard from 4th if (config->callback) { - config->callback(&pm); + config->callback(config->sensor, &pm); } } else if (len > 0) { ESP_LOGW(TAG, "invalid frame of %d", len); //we often get an error after this :( @@ -119,8 +119,12 @@ esp_err_t pms_init(pms_config_t* config) { pms_init_gpio(config); pms_enable(config, 0); pms_init_uart(config); + + char task_name[100]; + sprintf(task_name, "pm_uart_read_%d", config->sensor); + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) - xTaskCreate(pms_uart_read, "pms_uart_read", 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate(pms_uart_read, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo } diff --git a/main/main.c b/main/main.c index 86e6fc4..f63fa42 100644 --- a/main/main.c +++ b/main/main.c @@ -33,13 +33,16 @@ #include "esp_log.h" #include +#include "meas_intervals.h" +#include "meas_continuous.h" + + #include "thing_speak.h" #include "bootwifi.h" #include "rgb_led.h" #include "ctrl_btn.h" #include "bmx280.h" #include "pmsx003.h" -#include "pm_meter.h" #include "oap_common.h" #include "oap_storage.h" #include "oap_debug.h" @@ -52,6 +55,11 @@ static QueueHandle_t pm_queue; static oap_sensor_config_t sensor_config; + +extern meas_strategy_t meas_intervals; +extern meas_strategy_t meas_continuous; + + static oap_sensor_config_t get_config() { oap_sensor_config_t sensor_config = {}; ESP_LOGD(TAG, "retrieve sensor config"); @@ -74,10 +82,12 @@ static oap_sensor_config_t get_config() { static led_cmd led_state = { .color = {.v = {0,0,1}} //initial color (when no samples collected) }; -static void update_led() { + +void update_led() { xQueueSend(led_queue, &led_state, 100); } -static void update_led_mode(led_mode mode) { + +void update_led_mode(led_mode mode) { led_state.mode = mode; update_led(); } @@ -89,44 +99,88 @@ static void update_led_color(led_mode mode, float r, float g, float b) { update_led_mode(mode); } -static void pm_meter_trigger_task() { +static void on_measurement_success(pm_data_duo_t* pm) { + ESP_LOGI(TAG, "STOP MEASUREMENT: %d", pm->data[0].pm2_5); - pms_config_t* pms_config = malloc(sizeof(pms_config_t)); - memset(pms_config, 0, sizeof(pms_config_t)); - pms_config->indoor = sensor_config.indoor; - pms_config->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; - pms_config->heater_pin = sensor_config.heater ? CONFIG_OAP_HEATER_CONTROL_PIN : 0; - pms_config->fan_pin = sensor_config.fan ? CONFIG_OAP_FAN_CONTROL_PIN : 0; + float aqi = fminf(pm->data[0].pm2_5 / 100.0, 1.0); + //ESP_LOGI(TAG, "AQI=%f",aqi); + update_led_color(LED_SET, aqi,(1-aqi), 0); - pms_config->uart_num = CONFIG_OAP_PM_UART_NUM; - pms_config->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN; - pms_config->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN; - pms_config->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN; - pms_config->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN; - pms_config->callback = &pm_meter_collect; - - pms_init(pms_config); - pm_meter_init(pms_config); +} - int delay_sec = (sensor_config.measInterval-sensor_config.measTime); - while (1) { - log_task_stack("pm_meter_trigger"); +static void pm_collect(meas_event_t event, void* data) { + switch (event) { + case MEAS_START: + ESP_LOGI(TAG, "START MEASUREMENT"); update_led_mode(LED_PULSE); - pm_meter_start(sensor_config.warmUpTime); - delay(sensor_config.measTime * 1000); - pm_data pm = pm_meter_sample(delay_sec>0); - - float aqi = fminf(pm.pm2_5 / 100.0, 1.0); - ESP_LOGI(TAG, "AQI=%f",aqi); - update_led_color(LED_SET, aqi,(1-aqi), 0); - - xQueueSend(pm_queue, &pm, 1000 / portTICK_PERIOD_MS); //1sec - if (delay_sec > 0) { - delay(delay_sec * 1000); - } else { - delay(10); - } + break; + case MEAS_RESULT: + on_measurement_success((pm_data_duo_t*)data); + break; + case MEAS_ERROR: + ESP_LOGW(TAG, "FAILED MEASUREMENT: %s", (char*)data); + break; } + +} + +static void pm_configure() { + + meas_strategy_t* strategy; + void* params = NULL; + + switch (sensor_config.measStrategy) { + case 0 : + ESP_LOGI(TAG, "measurement strategy = interval"); + params = malloc(sizeof(meas_intervals_params_t)); + ((meas_intervals_params_t*)params)->measInterval=sensor_config.measInterval; + ((meas_intervals_params_t*)params)->measTime=sensor_config.measTime; + ((meas_intervals_params_t*)params)->warmUpTime=sensor_config.warmUpTime; + strategy = &meas_intervals; + break; + case 1 : + ESP_LOGI(TAG, "measurement strategy = continuous"); + strategy = &meas_continuous; + break; + default: + ESP_LOGE(TAG, "unknown strategy"); + return; + } + + pms_configs_t config = {}; + + config.sensor[0] = malloc(sizeof(pms_config_t)); + memset(config.sensor[0], 0, sizeof(pms_config_t)); + + config.count++; + config.sensor[0]->sensor = 0; + config.sensor[0]->indoor = sensor_config.indoor; + config.sensor[0]->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; + config.sensor[0]->heater_pin = sensor_config.heater ? CONFIG_OAP_HEATER_CONTROL_PIN : 0; + config.sensor[0]->fan_pin = sensor_config.fan ? CONFIG_OAP_FAN_CONTROL_PIN : 0; + config.sensor[0]->uart_num = CONFIG_OAP_PM_UART_NUM; + config.sensor[0]->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN; + config.sensor[0]->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN; + config.sensor[0]->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN; + config.sensor[0]->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN; + config.sensor[0]->callback = strategy->collect; + + if (CONFIG_OAP_PM_ENABLED_AUX) { + config.count++; + config.sensor[1] = malloc(sizeof(pms_config_t)); + memset(config.sensor[1], 0, sizeof(pms_config_t)); + config.sensor[1]->sensor = 1; + config.sensor[1]->indoor = sensor_config.indoor; + config.sensor[1]->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN_AUX; + config.sensor[1]->uart_num = CONFIG_OAP_PM_UART_NUM_AUX; + config.sensor[1]->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN_AUX; + config.sensor[1]->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN_AUX; + config.sensor[1]->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN_AUX; + config.sensor[1]->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN_AUX; + config.sensor[1]->callback = strategy->collect; + } + + strategy->start(&config, params, &pm_collect); } static env_data env = {0}; @@ -219,6 +273,7 @@ void app_main() led_queue = xQueueCreate(10, sizeof(led_cmd)); //xTaskCreate(main_task, "main_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); - xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); + //xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); + pm_configure(); main_task(); } diff --git a/main/meas.h b/main/meas.h new file mode 100644 index 0000000..8963038 --- /dev/null +++ b/main/meas.h @@ -0,0 +1,57 @@ +/* + * meas.h + * + * Created on: Mar 25, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_MEAS_H_ +#define MAIN_MEAS_H_ + +#include +#include +#include +#include "oap_common.h" +#include "pmsx003.h" + +typedef struct { + uint8_t count; + pm_data data[2]; +} pm_data_duo_t; + +typedef struct { + uint8_t count; + pms_config_t* sensor[2]; +} pms_configs_t; + +typedef enum { + MEAS_START, + MEAS_RESULT, + MEAS_ERROR +} meas_event_t; + +typedef void(*meas_strategy_callback)(meas_event_t event, void* data); + +typedef void(*meas_strategy_start)(pms_configs_t*, void*, meas_strategy_callback); + +typedef struct meas_strategy { + pms_callback collect; + meas_strategy_start start; +} meas_strategy_t; + +#endif /* MAIN_MEAS_H_ */ diff --git a/main/pm_meter.h b/main/meas_continuous.c similarity index 65% rename from main/pm_meter.h rename to main/meas_continuous.c index 8a3aa43..793883a 100644 --- a/main/pm_meter.h +++ b/main/meas_continuous.c @@ -1,7 +1,7 @@ /* - * pm_meter.h + * meas_continuous.c * - * Created on: Feb 10, 2017 + * Created on: Mar 25, 2017 * Author: kris * * This file is part of OpenAirProject-ESP32. @@ -20,22 +20,17 @@ * along with OpenAirProject-ESP32. If not, see . */ -#ifndef MAIN_PM_METER_H_ -#define MAIN_PM_METER_H_ +#include "meas_continuous.h" -#include "oap_common.h" -#include "pmsx003.h" +static void collect(pm_data* data) { +} -typedef enum { - PM_MEAS_AVG, - PM_MEAS_CONT -} pm_meas_mode; +static void start() { -void pm_meter_start(unsigned int warmingTime); -void pm_meter_collect(pm_data *data); +} -pm_data pm_meter_sample(int disable_sensor); -void pm_meter_init(pms_config_t* pms_config); - -#endif /* MAIN_PM_METER_H_ */ +meas_strategy_t meas_continuous = { + .collect = &collect, + .start = &start +}; diff --git a/main/meas_continuous.h b/main/meas_continuous.h new file mode 100644 index 0000000..f4c127b --- /dev/null +++ b/main/meas_continuous.h @@ -0,0 +1,30 @@ +/* + * meas_continuous.h + * + * Created on: Mar 25, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_MEAS_CONTINUOUS_H_ +#define MAIN_MEAS_CONTINUOUS_H_ + + + +#include "meas.h" + +#endif /* MAIN_MEAS_CONTINUOUS_H_ */ diff --git a/main/meas_intervals.c b/main/meas_intervals.c new file mode 100644 index 0000000..f79c434 --- /dev/null +++ b/main/meas_intervals.c @@ -0,0 +1,171 @@ +/* + * meas_intervals.c + * + * Created on: Mar 25, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "meas_intervals.h" +#include "esp_log.h" +#include "oap_debug.h" + +static char* TAG = "meas_int"; + +typedef struct { + pms_config_t config; + uint16_t sample_count; + pm_data* samples; +} sensor_model_t; + +sensor_model_t* sensors; +uint8_t sensor_count; +meas_strategy_callback _callback; +meas_intervals_params_t _params; + +static long startedAt; + +static void pm_data_print(char* str, uint8_t sensor, pm_data* pm) { + ESP_LOGI(TAG, "%s[%d] pm1.0=%d pm2.5=%d pm10=%d", str, sensor, pm->pm1_0, pm->pm2_5, pm->pm10); +} + +static void collect(uint8_t s, pm_data* pm) { + long localTime; + sensor_model_t* sensor = sensors+s; + + pm_data* buf = sensor->samples+(sensor->sample_count % CONFIG_OAP_PM_SAMPLE_BUF_SIZE); + memcpy(buf, pm, sizeof(pm_data)); + localTime = oap_epoch_sec(); + + if (localTime - startedAt > 3600 * 24) { + //localTime was set to proper value in a meantime. start over to avoid invalid warming time. + startedAt = localTime; + } + + if (localTime - startedAt > _params.warmUpTime) { + sensor->sample_count++; + pm_data_print("collect", s, buf); + } else { + pm_data_print("warming", s, buf); + } +} + +static void init_sensors() { + ESP_LOGI(TAG, "init_sensors"); + + for (uint8_t c = 0; c < sensor_count; c++) { + pms_init(&sensors[c].config); + } +} + +static void enable_sensors() { + ESP_LOGI(TAG, "enable_sensors"); + + for (uint8_t s = 0; s < sensor_count; s++) { + sensors[s].sample_count = 0; + pms_enable(&sensors[s].config, 1); + } +} + +static esp_err_t pm_meter_sample(uint8_t s, pm_data* result, uint8_t disable_sensor) { + sensor_model_t* sensor = sensors+s; + + if (disable_sensor) { + pms_enable(&sensor->config, 0); + } + + uint16_t count = sensor->sample_count > CONFIG_OAP_PM_SAMPLE_BUF_SIZE ? CONFIG_OAP_PM_SAMPLE_BUF_SIZE : sensor->sample_count; + if (!count) { + ESP_LOGW(TAG, "no samples recorded for sensor %d", s); + return ESP_FAIL; + } + + memset(result, 0, sizeof(pm_data)); + pm_data* sample; + for (uint16_t i = 0; i < count; i++) { + sample = sensor->samples+i; + result->pm1_0 += sample->pm1_0; + result->pm2_5 += sample->pm2_5; + result->pm10 += sample->pm10; + } + + result->pm1_0 /= count; + result->pm2_5 /= count; + result->pm10 /= count; + + ESP_LOGI(TAG, "stop measurement. recorded %d samples", count); + pm_data_print("average", s, result); + + return ESP_OK; +} + +static void task() { + init_sensors(); + + int delay_sec = (_params.measInterval-_params.measTime); + while (1) { + log_task_stack("pm_meter_trigger"); + + _callback(MEAS_START,NULL); + + startedAt = oap_epoch_sec(); + + enable_sensors(); + + delay(_params.measTime * 1000); + + pm_data_duo_t pm_data_duo = { + .count = sensor_count + }; + + for (uint8_t s = 0; s < sensor_count; s++) { + ESP_LOGI(TAG, "compute results for sensor %d", s); + if (pm_meter_sample(s, pm_data_duo.data+s, delay_sec>0) != ESP_OK) { + _callback(MEAS_ERROR, "cannot calculate result"); + return; + } + } + + _callback(MEAS_RESULT,&pm_data_duo); + + if (delay_sec > 0) { + delay(delay_sec * 1000); + } else { + delay(10); + } + } +} + +static void start(pms_configs_t* pms_configs, meas_intervals_params_t* params, meas_strategy_callback callback) { + ESP_LOGI(TAG, "start"); + _callback = callback; + memcpy(&_params, params, sizeof(meas_intervals_params_t)); + + sensor_count = pms_configs->count; + sensors = malloc(sizeof(sensor_model_t)*sensor_count); + for (uint8_t c = 0; c < sensor_count; c++) { + memset(&sensors[c], 0, sizeof(sensor_model_t)); + memcpy(&sensors[c], pms_configs->sensor[c], sizeof(pms_config_t)); + sensors[c].samples = malloc(sizeof(pm_data)*CONFIG_OAP_PM_SAMPLE_BUF_SIZE); + } + xTaskCreate(task, "meas_intervals", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); +} + +meas_strategy_t meas_intervals = { + .collect = &collect, + .start = &start +}; diff --git a/main/meas_intervals.h b/main/meas_intervals.h new file mode 100644 index 0000000..20e8bb4 --- /dev/null +++ b/main/meas_intervals.h @@ -0,0 +1,36 @@ +/* + * meas_intervals.h + * + * Created on: Mar 25, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_MEAS_INTERVALS_H_ +#define MAIN_MEAS_INTERVALS_H_ + + +#include "meas.h" + +typedef struct { + int warmUpTime; + int measTime; + int measInterval; +} meas_intervals_params_t; + + +#endif /* MAIN_MEAS_INTERVALS_H_ */ diff --git a/main/pm_meter.c b/main/pm_meter.c deleted file mode 100644 index c1e6a90..0000000 --- a/main/pm_meter.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * pm_meter.c - * - * Created on: Feb 10, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -#include -#include -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/queue.h" -#include "esp_system.h" -#include "nvs_flash.h" -#include "esp_log.h" -#include - -#include "oap_common.h" -#include "pm_meter.h" -#include "pmsx003.h" - -/* - * PM Meter is used to perform periodic measurements. In that scenario, - * pm sensor is enabled only for the time of measurement (this increases its lifetime and reduces power consumption). - * however, due to nature of sensor construction, it requires some 'warming time' after switching on to ensure - * proper air flow. Samples generated during 'warming period' are ignored. The rest of samples are accummmulated - * in a buffer and used to caluclate average result at the end. - */ - -static unsigned int sampleIndex; -static pm_data *sampleBuffer = NULL; -static long startedAt; -static int warmingTime; - -static char* TAG = "pm_meter"; -static pms_config_t* pms_config = NULL; - -static void pm_data_print(char* str, pm_data pm) { - ESP_LOGI(TAG, "%s pm1.0=%d pm2.5=%d pm10=%d", str, pm.pm1_0, pm.pm2_5, pm.pm10); -} - -void pm_meter_collect(pm_data* pm) { - long localTime; - pm_data* buf = sampleBuffer+(sampleIndex % CONFIG_OAP_PM_SAMPLE_BUF_SIZE); - memcpy(buf, pm, sizeof(pm_data)); - localTime = oap_epoch_sec(); - - if (localTime - startedAt > 3600 * 24) { - //localTime was set to proper value in a meantime. start over to avoid invalid warming time. - startedAt = localTime; - } - - if (localTime - startedAt > warmingTime) { - sampleIndex++; - pm_data_print("collect: ", *buf); - } else { - pm_data_print("warming: ", *buf); - } -} - -void pm_meter_start(unsigned int _warmingTime) { - sampleIndex = 0; - startedAt = oap_epoch_sec(); - warmingTime = _warmingTime; - pms_enable(pms_config, 1); -} - -pm_data pm_meter_sample(int disable_sensor) { - if (disable_sensor) pms_enable(pms_config, 0); - pm_data avg = { - .pm1_0 = 0, - .pm2_5 = 0, - .pm10 = 0 - }; - unsigned int count = sampleIndex > CONFIG_OAP_PM_SAMPLE_BUF_SIZE ? CONFIG_OAP_PM_SAMPLE_BUF_SIZE : sampleIndex; - if (!count) return avg; - - pm_data sample; - for (unsigned int i = 0; i < count; i++) { - sample = sampleBuffer[i]; - avg.pm1_0 += sample.pm1_0; - avg.pm2_5 += sample.pm2_5; - avg.pm10 += sample.pm10; - } - - avg.pm1_0 /= count; - avg.pm2_5 /= count; - avg.pm10 /= count; - - ESP_LOGI(TAG, "stop measurement. recorded %d samples", count); - pm_data_print("average: ", avg); - - return avg; -} - -void pm_meter_init(pms_config_t* _pms_config) { - pms_config = _pms_config; - sampleBuffer = malloc(CONFIG_OAP_PM_SAMPLE_BUF_SIZE * sizeof(pm_data)); -} From ef24f0c65fae895cb8330f597cd9fd07f951dd44 Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 28 Mar 2017 20:00:11 +0200 Subject: [PATCH 028/200] support for two pm sensors fix bmx280 init error send only recent measurements --- components/awsiot/awsiot.c | 98 ++++++++++------------ components/bmx280/i2c_bme280.c | 27 +++--- components/net/thing_speak.c | 31 +++++-- components/oap_common/include/oap_common.h | 16 ++-- main/main.c | 44 ++++++---- main/meas_continuous.c | 22 ++++- main/meas_continuous.h | 2 + main/meas_intervals.c | 21 +++-- 8 files changed, 153 insertions(+), 108 deletions(-) diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index c28455d..f117898 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -53,9 +53,7 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co cJSON* reported = cJSON_CreateObject(); cJSON* results = cJSON_CreateObject(); cJSON* config = cJSON_CreateObject(); - cJSON* pm = cJSON_CreateObject(); - cJSON* weather = cJSON_CreateObject(); - cJSON* internal = cJSON_CreateObject(); + cJSON* status = cJSON_CreateObject(); cJSON_AddItemToObject(shadow, "state", state); @@ -64,10 +62,6 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co cJSON_AddItemToObject(reported, "config", config); cJSON_AddItemToObject(reported, "status", status); - cJSON_AddItemToObject(results, "pm", pm); - cJSON_AddItemToObject(results, "weather", weather); - cJSON_AddItemToObject(results, "internal", internal); - cJSON_AddNumberToObject(results, "uid", rand()); //what about 0? cJSON_AddNumberToObject(status, "heap", xPortGetFreeHeapSize()); cJSON_AddNumberToObject(status, "heap_min", xPortGetMinimumEverFreeHeapSize()); @@ -85,17 +79,49 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co cJSON_AddNumberToObject(config, "test", sensor_config->test); } - cJSON_AddNumberToObject(pm, "pm1_0", meas->pm.pm1_0); - cJSON_AddNumberToObject(pm, "pm2_5", meas->pm.pm2_5); - cJSON_AddNumberToObject(pm, "pm10", meas->pm.pm10); + if (meas->pm) { + cJSON* pm = cJSON_CreateObject(); + cJSON_AddItemToObject(results, "pm", pm); + cJSON_AddNumberToObject(pm, "pm1_0", meas->pm->pm1_0); + cJSON_AddNumberToObject(pm, "pm2_5", meas->pm->pm2_5); + cJSON_AddNumberToObject(pm, "pm10", meas->pm->pm10); + cJSON_AddNumberToObject(pm, "sensor", meas->pm->sensor); + } else { + cJSON_AddNullToObject(results, "pm"); + } + + if (meas->pm_aux) { + cJSON* pm = cJSON_CreateObject(); + cJSON_AddItemToObject(results, "pmAux", pm); + cJSON_AddNumberToObject(pm, "pm1_0", meas->pm_aux->pm1_0); + cJSON_AddNumberToObject(pm, "pm2_5", meas->pm_aux->pm2_5); + cJSON_AddNumberToObject(pm, "pm10", meas->pm_aux->pm10); + cJSON_AddNumberToObject(pm, "sensor", meas->pm_aux->sensor); + } else { + cJSON_AddNullToObject(results, "pmAux"); + } - cJSON_AddNumberToObject(weather, "temp", meas->env.temp); - cJSON_AddNumberToObject(weather, "pressure", meas->env.pressure); - cJSON_AddNumberToObject(weather, "humidity", meas->env.humidity); + if (meas->env) { + cJSON* weather = cJSON_CreateObject(); + cJSON_AddItemToObject(results, "weather", weather); + cJSON_AddNumberToObject(weather, "temp", meas->env->temp); + cJSON_AddNumberToObject(weather, "pressure", meas->env->pressure); + cJSON_AddNumberToObject(weather, "humidity", meas->env->humidity); + cJSON_AddNumberToObject(weather, "sensor", meas->env->sensor); + } else { + cJSON_AddNullToObject(results, "weather"); + } - cJSON_AddNumberToObject(internal, "temp", meas->env_int.temp); - cJSON_AddNumberToObject(internal, "pressure", meas->env_int.pressure); - cJSON_AddNumberToObject(internal, "humidity", meas->env_int.humidity); + if (meas->env_int) { + cJSON* internal = cJSON_CreateObject(); + cJSON_AddItemToObject(results, "internal", internal); + cJSON_AddNumberToObject(internal, "temp", meas->env_int->temp); + cJSON_AddNumberToObject(internal, "pressure", meas->env_int->pressure); + cJSON_AddNumberToObject(internal, "humidity", meas->env_int->humidity); + cJSON_AddNumberToObject(internal, "sensor", meas->env_int->sensor); + } else { + cJSON_AddNullToObject(results, "internal"); + } char *body = cJSON_Print(shadow); @@ -183,43 +209,3 @@ esp_err_t awsiot_send(oap_meas* meas, oap_sensor_config_t *sensor_config) { return configured; } } - - - -/* -QueueHandle_t input_queue; - -static void awsiot_task() { - oap_meas meas; - - while (1) { - if(xQueuePeek(input_queue, &meas, 1000)) { - - log_task_stack(TAG); - xSemaphoreTake(networkHandle, portMAX_DELAY); - esp_err_t res = awsiot_post(&meas); - xSemaphoreGive(networkHandle); - - if (res == ESP_OK) { - ESP_LOGI(TAG, "data sent successfully"); - xQueueReceive(input_queue, &meas, 1000); - } else { - ESP_LOGW(TAG, "data post failed"); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } - } - } -} - -QueueHandle_t awsiot_init(oap_sensor_config_t* _sensor_config) -{ - if (awsiot_configure(&awsiot_config) == ESP_OK) { - sensor_config = _sensor_config; - input_queue = xQueueCreate(1, sizeof(oap_meas)); - //8192-2684=5508 bytes consumed - xTaskCreate(&awsiot_task, "awsiot_task", 1024*10, NULL, DEFAULT_TASK_PRIORITY, NULL); - return input_queue; - } else { - return NULL; - } -}*/ diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c index 1263579..5a65f51 100755 --- a/components/bmx280/i2c_bme280.c +++ b/components/bmx280/i2c_bme280.c @@ -57,7 +57,7 @@ typedef struct temp_reading_t { static char* TAG = "i2c_bmx280"; -#define CONT_IF_I2C_OK(log, comm, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "err: %d (%x %s)",rc,comm->device_addr, log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); +#define CONT_IF_I2C_OK(log, comm, x) do { esp_err_t rc = (x); if (rc != ESP_OK) { ESP_LOGW(TAG, "[%x] err: %d (%s)",comm->device_addr, rc, log); if (cmd) i2c_cmd_link_delete(cmd); return rc;} } while(0); #define CONT_IF_OK(x) do { esp_err_t rc = (x); if (rc != ESP_OK) return rc; } while(0); static esp_err_t read_i2c(i2c_comm_t* comm, uint8_t reg, uint8_t* data, int len) { @@ -234,34 +234,39 @@ esp_err_t BME280_read(bme280_sensor_t* bme280_sensor, env_data* result){ esp_err_t BME280_verify_chip(bme280_sensor_t* bme280_sensor) { uint8_t chipID = 0; - uint8_t attemp = 0; - while (attemp++ <= 5 || read_i2c(&bme280_sensor->i2c_comm, BME280_CHIP_ID_REG,&chipID,1) != ESP_OK) { + uint8_t attempt = 0; + while (read_i2c(&bme280_sensor->i2c_comm, BME280_CHIP_ID_REG, &chipID,1) != ESP_OK && attempt++ < 5) { + ESP_LOGW(TAG, "[%x] failed to read chip id (attempt %d)", bme280_sensor->i2c_comm.device_addr, attempt) vTaskDelay(20/portTICK_PERIOD_MS); } switch (chipID) { case BME280_CHIP_ID: - ESP_LOGI(TAG,"detected BME280 (0x%X)", chipID); + ESP_LOGI(TAG,"[%x] detected BME280 (0x%X)", bme280_sensor->i2c_comm.device_addr, chipID); return ESP_OK; case BMP280_CHIP_ID1: case BMP280_CHIP_ID2: case BMP280_CHIP_ID3: - ESP_LOGI(TAG,"detected BMP280 - no humidity data (0x%X)", chipID); + ESP_LOGI(TAG,"[%x] detected BMP280 - no humidity data (0x%X)", bme280_sensor->i2c_comm.device_addr, chipID); return ESP_OK; default: - ESP_LOGW(TAG,"detected unknown chip (0x%X), disable env data", chipID); + ESP_LOGW(TAG,"[%x] detected unknown chip (0x%X), disable env data", bme280_sensor->i2c_comm.device_addr, chipID); return ESP_FAIL; } } esp_err_t BME280_init(bme280_sensor_t* bme280_sensor) { - if (BME280_verify_chip(bme280_sensor) != ESP_OK) { - return ESP_FAIL; + esp_err_t res; + if ((res = BME280_verify_chip(bme280_sensor)) != ESP_OK) { + return res; + } + if ((res=BME280_writeConfigRegisters(&bme280_sensor->i2c_comm, bme280_sensor->operation_mode)) != ESP_OK) { + return res; + } + if ((res=BME280_readCalibrationRegisters(&bme280_sensor->i2c_comm, &bme280_sensor->calib)) != ESP_OK) { + return res; } - - BME280_writeConfigRegisters(&bme280_sensor->i2c_comm, bme280_sensor->operation_mode); - BME280_readCalibrationRegisters(&bme280_sensor->i2c_comm, &bme280_sensor->calib); return ESP_OK; } diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index 77e42c7..fc8afb4 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -94,15 +94,28 @@ static esp_err_t thing_speak_rest_post(oap_meas* meas) { freeaddrinfo(res); char* payload = malloc(512); - sprintf(payload, "key=%s&field1=%d&field2=%d&field3=%d&field4=%.2f&field5=%.2f&field6=%.2f&field7=%.2f&field8=%.2f&field9=%d", apikey, - meas->pm.pm1_0, - meas->pm.pm2_5, - meas->pm.pm10, - meas->env.temp, - meas->env.pressure, - meas->env.humidity, - meas->env_int.temp, - meas->env_int.humidity, + sprintf(payload, "key=%s", apikey); + if (meas->pm) { + sprintf(payload, "%s&field1=%d&field2=%d&field3=%d", payload, + meas->pm->pm1_0, + meas->pm->pm2_5, + meas->pm->pm10); + } + + if (meas->env) { + sprintf(payload, "%s&field4=%.2f&field5=%.2f&field6=%.2f", payload, + meas->env->temp, + meas->env->pressure, + meas->env->humidity); + } + + if (meas->env_int) { + sprintf(payload, "%s&field7=%.2f&field8=%.2f", payload, + meas->env_int->temp, + meas->env_int->humidity); + } + + sprintf(payload, "%s&field9=%d", payload, xPortGetMinimumEverFreeHeapSize()); char* request = malloc(512); diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index 1848236..957af3d 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -31,22 +31,24 @@ #define DEFAULT_TASK_PRIORITY (10) typedef struct { - unsigned int pm1_0; - unsigned int pm2_5; - unsigned int pm10; + uint16_t pm1_0; + uint16_t pm2_5; + uint16_t pm10; + uint8_t sensor; } pm_data; typedef struct { double temp; double pressure; double humidity; - uint8_t sensor; //TODO remove + uint8_t sensor; } env_data; typedef struct { - pm_data pm; - env_data env; - env_data env_int; + pm_data* pm; + pm_data* pm_aux; + env_data* env; + env_data* env_int; long int local_time; } oap_meas; diff --git a/main/main.c b/main/main.c index f63fa42..0887f34 100644 --- a/main/main.c +++ b/main/main.c @@ -106,6 +106,9 @@ static void on_measurement_success(pm_data_duo_t* pm) { //ESP_LOGI(TAG, "AQI=%f",aqi); update_led_color(LED_SET, aqi,(1-aqi), 0); + if (!xQueueSend(pm_queue, pm, 100)) { + ESP_LOGW(TAG,"pm_queue overflow"); + } } static void pm_collect(meas_event_t event, void* data) { @@ -121,7 +124,6 @@ static void pm_collect(meas_event_t event, void* data) { ESP_LOGW(TAG, "FAILED MEASUREMENT: %s", (char*)data); break; } - } static void pm_configure() { @@ -183,17 +185,29 @@ static void pm_configure() { strategy->start(&config, params, &pm_collect); } -static env_data env = {0}; -static env_data env_int = {0}; -static void bmx280_callback(env_data* result) { - ESP_LOGI(TAG,"Env (%d): Temperature : %.2f C, Pressure: %.2f hPa, Humidity: %.2f %%", result->sensor, result->temp, result->pressure, result->humidity); - memcpy(result->sensor ? &env_int : &env, result, sizeof(env_data)); +typedef struct { + env_data data; + long timestamp; +} env_sensor_read_t; + +static env_sensor_read_t env_sensor_read[2]; + +static void env_sensor_callback(env_data* result) { + if (result->sensor <= 1) { + ESP_LOGI(TAG,"Env (%d): Temperature : %.2f C, Pressure: %.2f hPa, Humidity: %.2f %%", result->sensor, result->temp, result->pressure, result->humidity); + env_sensor_read_t* r = env_sensor_read + result->sensor; + r->timestamp = oap_epoch_sec(); + memcpy(&env_sensor_read->data, result, sizeof(env_data)); + } else { + ESP_LOGE(TAG, "Env (%d) - invalid sensor", result->sensor); + } } static void main_task() { led_init(get_config().led, led_queue); update_led(); + memset(&env_sensor_read, 0, sizeof(env_sensor_read_t)*2); if (CONFIG_OAP_BMX280_ENABLED) { bmx280_config_t *bmx280_config = malloc(sizeof(bmx280_config_t)); @@ -204,7 +218,7 @@ static void main_task() { bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN; bmx280_config->sensor = 0; bmx280_config->interval = 5000; - bmx280_config->callback = &bmx280_callback; + bmx280_config->callback = &env_sensor_callback; if (bmx280_init(bmx280_config) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor 0"); @@ -220,7 +234,7 @@ static void main_task() { bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX; bmx280_config->sensor = 1; bmx280_config->interval = 5000; - bmx280_config->callback = &bmx280_callback; + bmx280_config->callback = &env_sensor_callback; if (bmx280_init(bmx280_config) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor 1"); @@ -242,14 +256,16 @@ static void main_task() { while (1) { long localTime = oap_epoch_sec_valid(); - pm_data pm; - if (xQueueReceive(pm_queue, &pm, 100)) { + long sysTime = oap_epoch_sec(); + pm_data_duo_t pm_data_duo; + if (xQueueReceive(pm_queue, &pm_data_duo, 100)) { log_task_stack("main_task"); oap_meas meas = { - .pm = pm, - .env = env, //TODO allow null, check last timestamp - .env_int = env_int, + .pm = &pm_data_duo.data[0], + .pm_aux = pm_data_duo.count == 2 ? &pm_data_duo.data[1] : NULL, + .env = sysTime - env_sensor_read[0].timestamp < 60 ? &env_sensor_read[0].data : NULL, + .env_int = sysTime - env_sensor_read[1].timestamp < 60 ? &env_sensor_read[1].data : NULL, .local_time = localTime }; @@ -269,7 +285,7 @@ void app_main() //wifi/mongoose requires plenty of mem, start it here bootWiFi(); - pm_queue = xQueueCreate(1, sizeof(pm_data)); + pm_queue = xQueueCreate(1, sizeof(pm_data_duo_t)); led_queue = xQueueCreate(10, sizeof(led_cmd)); //xTaskCreate(main_task, "main_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); diff --git a/main/meas_continuous.c b/main/meas_continuous.c index 793883a..d100d2d 100644 --- a/main/meas_continuous.c +++ b/main/meas_continuous.c @@ -22,12 +22,28 @@ #include "meas_continuous.h" -static void collect(pm_data* data) { +static char* TAG = "meas_cont"; -} +typedef struct { + pms_config_t config; + pm_data last; +} sensor_model_t; + +uint8_t sensor_count; +sensor_model_t* sensors; -static void start() { +static void collect(uint8_t s, pm_data* pm) { + +} +static void start(pms_configs_t* pms_configs, meas_continuous_params_t* params, meas_strategy_callback callback) { + sensor_count = pms_configs->count; + sensors = malloc(sizeof(sensor_model_t)*sensor_count); + for (uint8_t c = 0; c < sensor_count; c++) { + sensor_model_t* sensor = sensors+c; + memset(sensor, 0, sizeof(sensor_model_t)); + memcpy(&sensor->config, pms_configs->sensor[c], sizeof(pms_config_t)); + } } meas_strategy_t meas_continuous = { diff --git a/main/meas_continuous.h b/main/meas_continuous.h index f4c127b..84e21c1 100644 --- a/main/meas_continuous.h +++ b/main/meas_continuous.h @@ -23,7 +23,9 @@ #ifndef MAIN_MEAS_CONTINUOUS_H_ #define MAIN_MEAS_CONTINUOUS_H_ +typedef struct { +} meas_continuous_params_t; #include "meas.h" diff --git a/main/meas_intervals.c b/main/meas_intervals.c index f79c434..3fa73de 100644 --- a/main/meas_intervals.c +++ b/main/meas_intervals.c @@ -89,7 +89,7 @@ static esp_err_t pm_meter_sample(uint8_t s, pm_data* result, uint8_t disable_sen } uint16_t count = sensor->sample_count > CONFIG_OAP_PM_SAMPLE_BUF_SIZE ? CONFIG_OAP_PM_SAMPLE_BUF_SIZE : sensor->sample_count; - if (!count) { + if (count == 0) { ESP_LOGW(TAG, "no samples recorded for sensor %d", s); return ESP_FAIL; } @@ -106,8 +106,9 @@ static esp_err_t pm_meter_sample(uint8_t s, pm_data* result, uint8_t disable_sen result->pm1_0 /= count; result->pm2_5 /= count; result->pm10 /= count; + result->sensor = s; - ESP_LOGI(TAG, "stop measurement. recorded %d samples", count); + ESP_LOGI(TAG, "stop measurement for sensor %d, recorded %d samples", s, count); pm_data_print("average", s, result); return ESP_OK; @@ -132,15 +133,18 @@ static void task() { .count = sensor_count }; - for (uint8_t s = 0; s < sensor_count; s++) { + uint8_t ok = 1; + for (uint8_t s = 0; ok && s < sensor_count; s++) { ESP_LOGI(TAG, "compute results for sensor %d", s); if (pm_meter_sample(s, pm_data_duo.data+s, delay_sec>0) != ESP_OK) { _callback(MEAS_ERROR, "cannot calculate result"); - return; + ok = 0; } } - _callback(MEAS_RESULT,&pm_data_duo); + if (ok) { + _callback(MEAS_RESULT,&pm_data_duo); + } if (delay_sec > 0) { delay(delay_sec * 1000); @@ -158,9 +162,10 @@ static void start(pms_configs_t* pms_configs, meas_intervals_params_t* params, m sensor_count = pms_configs->count; sensors = malloc(sizeof(sensor_model_t)*sensor_count); for (uint8_t c = 0; c < sensor_count; c++) { - memset(&sensors[c], 0, sizeof(sensor_model_t)); - memcpy(&sensors[c], pms_configs->sensor[c], sizeof(pms_config_t)); - sensors[c].samples = malloc(sizeof(pm_data)*CONFIG_OAP_PM_SAMPLE_BUF_SIZE); + sensor_model_t* sensor = sensors+c; + memset(sensor, 0, sizeof(sensor_model_t)); + memcpy(&sensor->config, pms_configs->sensor[c], sizeof(pms_config_t)); + sensor->samples = malloc(sizeof(pm_data)*CONFIG_OAP_PM_SAMPLE_BUF_SIZE); } xTaskCreate(task, "meas_intervals", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); } From 758a402d790d7075530f1db2118ce9ed1cc7c255 Mon Sep 17 00:00:00 2001 From: kris Date: Sun, 6 Aug 2017 21:32:20 +0200 Subject: [PATCH 029/200] various improvements --- .settings/language.settings.xml | 2 +- components/peripherals/rgb_led.c | 6 +++++- components/pmsx003/include/pmsx003.h | 2 ++ components/pmsx003/pmsx003.c | 5 +++-- main/main.c | 14 ++++++++++---- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index bf43130..1c3cc28 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/components/peripherals/rgb_led.c b/components/peripherals/rgb_led.c index 5313905..7d6f4d9 100644 --- a/components/peripherals/rgb_led.c +++ b/components/peripherals/rgb_led.c @@ -163,10 +163,14 @@ static void led_cycle() { void led_init(int enabled, xQueueHandle _cmd_queue) { - cmd_queue = _cmd_queue; if (enabled) { + cmd_queue = _cmd_queue; setup_ledc(); //this often conflicts with other i/o operations? e.g. bme280 init. xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, DEFAULT_TASK_PRIORITY+1, NULL); + } else { + for (int c = 0; c < 3; c++) { + if (led_gpio[c] > 0) gpio_set_pull_mode(led_gpio[c], GPIO_PULLDOWN_ONLY); + } } } diff --git a/components/pmsx003/include/pmsx003.h b/components/pmsx003/include/pmsx003.h index c9067b6..b0efec7 100644 --- a/components/pmsx003/include/pmsx003.h +++ b/components/pmsx003/include/pmsx003.h @@ -36,6 +36,8 @@ typedef struct pms_config_t { uint8_t set_pin; uint8_t heater_pin; uint8_t fan_pin; + uint8_t heater_enabled; + uint8_t fan_enabled; uart_port_t uart_num; uint8_t uart_txd_pin; diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index b74db14..ce95230 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -62,6 +62,7 @@ static void configure_gpio(uint8_t gpio) { ESP_LOGD(TAG, "configure pin %d as output", gpio); gpio_pad_select_gpio(gpio); ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); + gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY); } } @@ -110,8 +111,8 @@ esp_err_t pms_enable(pms_config_t* config, uint8_t enabled) { ESP_LOGI(TAG,"enable(%d)",enabled); config->enabled = enabled; set_gpio(config->set_pin, enabled); - set_gpio(config->heater_pin, enabled); - set_gpio(config->fan_pin, enabled); + if (config->heater_enabled) set_gpio(config->heater_pin, enabled); + if (config->fan_enabled) set_gpio(config->fan_pin, enabled); return ESP_OK; //todo } diff --git a/main/main.c b/main/main.c index 0887f34..edafa9f 100644 --- a/main/main.c +++ b/main/main.c @@ -154,12 +154,16 @@ static void pm_configure() { config.sensor[0] = malloc(sizeof(pms_config_t)); memset(config.sensor[0], 0, sizeof(pms_config_t)); + config.count++; config.sensor[0]->sensor = 0; config.sensor[0]->indoor = sensor_config.indoor; config.sensor[0]->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; - config.sensor[0]->heater_pin = sensor_config.heater ? CONFIG_OAP_HEATER_CONTROL_PIN : 0; - config.sensor[0]->fan_pin = sensor_config.fan ? CONFIG_OAP_FAN_CONTROL_PIN : 0; + config.sensor[0]->heater_pin = CONFIG_OAP_HEATER_CONTROL_PIN; + config.sensor[0]->fan_pin = CONFIG_OAP_FAN_CONTROL_PIN; + config.sensor[0]->heater_enabled = sensor_config.heater; + config.sensor[0]->fan_enabled = sensor_config.fan; + config.sensor[0]->uart_num = CONFIG_OAP_PM_UART_NUM; config.sensor[0]->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN; config.sensor[0]->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN; @@ -205,8 +209,6 @@ static void env_sensor_callback(env_data* result) { } static void main_task() { - led_init(get_config().led, led_queue); - update_led(); memset(&env_sensor_read, 0, sizeof(env_sensor_read_t)*2); if (CONFIG_OAP_BMX280_ENABLED) { @@ -290,6 +292,10 @@ void app_main() //xTaskCreate(main_task, "main_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); //xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); + + led_init(get_config().led, led_queue); + update_led(); + pm_configure(); main_task(); } From 979f17c58d34311026782b4041ea85876d05fdbd Mon Sep 17 00:00:00 2001 From: kris Date: Wed, 6 Sep 2017 20:30:07 +0200 Subject: [PATCH 030/200] update docs --- CHANGELOG.md | 6 +++++- doc/api/state.json | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed98d33..5cf6a21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,4 +11,8 @@ # 0.3.0 - support two (internal and external) bmx sensors -- support optional fan and heater \ No newline at end of file +- support optional fan and heater + +# 0.4.0 + +- support two PM sensors ([#8](https://github.com/openairproject/sensor-esp32/issues/8)) \ No newline at end of file diff --git a/doc/api/state.json b/doc/api/state.json index 15eddf2..6d73f5d 100644 --- a/doc/api/state.json +++ b/doc/api/state.json @@ -37,6 +37,17 @@ */ "sensor" : 0 }, + + /** + * optional results for the second sensor, if both were used to perform measurement at the same time + */ + "pmAux": { + "pm1_0" : 0, + "pm2_5" : 0, + "pm10" : 0, + "sensor": 1 + }, + /** * measured atmospheric conditions. parameters are optional but types are validated. */ @@ -45,6 +56,16 @@ "pressure" : 0.0, "humidity" : 0.0, "sensor" : 0 + }, + + /** + * measured internal atmospheric conditions (optional) + */ + "weather" : { + "temp" : 0.0, + "pressure" : 0.0, + "humidity" : 0.0, + "sensor" : 0 } }, /** From 692d53aa1ac484d1391666084f8f6a1bc05c0d9b Mon Sep 17 00:00:00 2001 From: kglowacki Date: Wed, 6 Sep 2017 21:11:49 +0200 Subject: [PATCH 031/200] update ESP-IDF to 2.1 --- CHANGELOG.md | 3 ++- components/oap_common/oap_storage.c | 2 +- components/peripherals/rgb_led.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cf6a21..819078c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,4 +15,5 @@ # 0.4.0 -- support two PM sensors ([#8](https://github.com/openairproject/sensor-esp32/issues/8)) \ No newline at end of file +- support two PM sensors ([#8](https://github.com/openairproject/sensor-esp32/issues/8)) +- update ESP-IDF to 2.1 ([#1](https://github.com/openairproject/sensor-esp32/issues/1)) \ No newline at end of file diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index e0b04b0..425f6d1 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -241,7 +241,7 @@ static void storage_init_config() { } void storage_init() { - nvs_flash_init(); + ESP_ERROR_CHECK(nvs_flash_init()); storage_init_config(); } diff --git a/components/peripherals/rgb_led.c b/components/peripherals/rgb_led.c index 7d6f4d9..d96b2b1 100644 --- a/components/peripherals/rgb_led.c +++ b/components/peripherals/rgb_led.c @@ -88,7 +88,7 @@ void fade_to_color(rgb color, int time) { if ((res = ledc_set_fade_with_time(speed_mode, c, duty,time)) != ESP_OK) { ESP_LOGW(TAG, "ledc_set_fade_with_time(%d,%d,%d,%d) error %d", speed_mode, c, duty, time, res); } - if ((res = ledc_fade_start(c, LEDC_FADE_NO_WAIT)) != ESP_OK) { + if ((res = ledc_fade_start(speed_mode, c, LEDC_FADE_NO_WAIT)) != ESP_OK) { ESP_LOGW(TAG, "ledc_fade_start(%d,%d) error %d", c, LEDC_FADE_NO_WAIT, res); } } From 5b5204372dc88fc776f21086e0b3faf3166f9a13 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Thu, 7 Sep 2017 11:37:51 +0200 Subject: [PATCH 032/200] track firmware version --- .settings/language.settings.xml | 2 +- CHANGELOG.md | 3 +- components/awsiot/awsiot.c | 1 + components/oap_common/include/oap_common.h | 2 + components/oap_common/include/oap_version.h | 50 +++++++++++++++++++++ components/oap_common/oap_version.c | 38 ++++++++++++++++ main/main.c | 2 +- 7 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 components/oap_common/include/oap_version.h create mode 100644 components/oap_common/oap_version.c diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 1c3cc28..84a5d8a 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + diff --git a/CHANGELOG.md b/CHANGELOG.md index 819078c..25bcfbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,4 +16,5 @@ # 0.4.0 - support two PM sensors ([#8](https://github.com/openairproject/sensor-esp32/issues/8)) -- update ESP-IDF to 2.1 ([#1](https://github.com/openairproject/sensor-esp32/issues/1)) \ No newline at end of file +- update ESP-IDF to 2.1 ([#1](https://github.com/openairproject/sensor-esp32/issues/1)) +- track firmware version ([#9](https://github.com/openairproject/sensor-esp32/issues/9)) \ No newline at end of file diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index f117898..26b83db 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -77,6 +77,7 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co //send it only once. of course if we want two-way configuration, we need versioning cJSON_AddBoolToObject(config, "indoor", sensor_config->indoor); cJSON_AddNumberToObject(config, "test", sensor_config->test); + cJSON_AddStringToObject(config, "firmware", oap_version_str()); } if (meas->pm) { diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index 957af3d..dac12eb 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -23,9 +23,11 @@ #ifndef MAIN_COMMON_COMMON_H_ #define MAIN_COMMON_COMMON_H_ +#include "oap_version.h" #include #include #include +#include #include "freertos/FreeRTOS.h" #define DEFAULT_TASK_PRIORITY (10) diff --git a/components/oap_common/include/oap_version.h b/components/oap_common/include/oap_version.h new file mode 100644 index 0000000..6d1836e --- /dev/null +++ b/components/oap_common/include/oap_version.h @@ -0,0 +1,50 @@ +/* + * version.h + * + * Created on: Sep 7, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_INCLUDE_OAP_VERSION_H_ +#define MAIN_INCLUDE_OAP_VERSION_H_ + +/** + * http://semver.org/ + * + * Given a version number MAJOR.MINOR.PATCH, increment the: + * + * MAJOR version when you make incompatible API changes, + * MINOR version when you add functionality in a backwards-compatible manner, and + * PATCH version when you make backwards-compatible bug fixes. + */ + +#include + +#define OAP_VER_MAJOR 0 +#define OAP_VER_MINOR 4 +#define OAP_VER_PATCH 0 + +typedef struct { + uint8_t major; + uint8_t minor; + uint8_t patch; +} oap_version_t; + +char* oap_version_str(); + +#endif /* MAIN_INCLUDE_OAP_VERSION_H_ */ diff --git a/components/oap_common/oap_version.c b/components/oap_common/oap_version.c new file mode 100644 index 0000000..bae2fcb --- /dev/null +++ b/components/oap_common/oap_version.c @@ -0,0 +1,38 @@ +/* + * oap_version.c + * + * Created on: Sep 7, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "oap_version.h" +#include +#include + +static oap_version_t oap_version = { .major = OAP_VER_MAJOR, .minor = OAP_VER_MINOR, .patch = OAP_VER_PATCH }; +static char* _oap_version_str = NULL; + +char* oap_version_str() { + if (!_oap_version_str) { + _oap_version_str = malloc(snprintf( NULL, 0, "%d.%d.%d", oap_version.major, oap_version.minor, oap_version.patch)+1); + sprintf(_oap_version_str, "%d.%d.%d", oap_version.major, oap_version.minor, oap_version.patch); + } + return _oap_version_str; +} + + diff --git a/main/main.c b/main/main.c index edafa9f..2fdef7d 100644 --- a/main/main.c +++ b/main/main.c @@ -280,7 +280,7 @@ static void main_task() { void app_main() { delay(1000); - ESP_LOGI(TAG,"starting app..."); + ESP_LOGI(TAG,"starting app... firmware %s", oap_version_str()); storage_init(); sensor_config = get_config(); From 8dd0a78d029af922e64c5774a616aff3c532d78d Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 10 Sep 2017 14:12:07 +0200 Subject: [PATCH 033/200] fix config save issue storing nvs blobs in parts basic unit tests --- .cproject | 2 + components/bootwifi/Kconfig | 17 ++ components/bootwifi/bootwifi.c | 4 - components/oap_common/include/oap_storage.h | 44 +++- components/oap_common/oap_storage.c | 213 ++++++++++++++---- components/oap_common/test/component.mk | 5 + components/oap_common/test/test_oap_storage.c | 198 ++++++++++++++++ main/Kconfig.projbuild | 14 -- main/main.c | 10 +- test.sh | 5 + 10 files changed, 436 insertions(+), 76 deletions(-) create mode 100644 components/bootwifi/Kconfig create mode 100644 components/oap_common/test/component.mk create mode 100644 components/oap_common/test/test_oap_storage.c create mode 100755 test.sh diff --git a/.cproject b/.cproject index f3b44f0..5c820d2 100644 --- a/.cproject +++ b/.cproject @@ -34,6 +34,8 @@ + + diff --git a/components/bootwifi/Kconfig b/components/bootwifi/Kconfig new file mode 100644 index 0000000..74043e6 --- /dev/null +++ b/components/bootwifi/Kconfig @@ -0,0 +1,17 @@ +menu "OAP WIFI" + +config OAP_CONTROL_PANEL + int "enable control panel" + default 1 + help + Enable web-based control panel where you can configure various parameters of the sensor, + including wifi and data publishing settings + +config OAP_AP_PASSWORD + string "AccessPoint password" + default "cleanair" + help + Password to authenticate to WiFi Access Point when sensor runs in this mode. + Minimum 8 characters. + +endmenu \ No newline at end of file diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index bceb1c1..ae434df 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -348,10 +348,6 @@ static int get_config(oc_wifi_t *oc_wifi) { return ESP_OK; } -//static void saveConnectionInfo(oc_wifi_t *pConnectionInfo) { -// storage_put_blob(KEY_CONNECTION_INFO, pConnectionInfo, sizeof(oc_wifi_t)); -//} - static void become_station(oc_wifi_t *pConnectionInfo) { is_station = 1; ESP_LOGD(tag, "- Connecting to access point \"%s\" ...", pConnectionInfo->ssid); diff --git a/components/oap_common/include/oap_storage.h b/components/oap_common/include/oap_storage.h index 781d759..062da7a 100644 --- a/components/oap_common/include/oap_storage.h +++ b/components/oap_common/include/oap_storage.h @@ -26,21 +26,45 @@ #include #include "cJSON.h" -/* - * Achtung! - * each time when you change structure of storable object, use different (versioned) key - * to avoid situation when old blob is loaded into incompatible struct. + +/** + * @brief initialise storage and config + */ +void storage_init(); + +/** + * @brief return config for given submodule * - * TODO we could use json for storing settings, it is more 'tolerant' for such changes + * @param[in] module name of a submodule, e.g. 'wifi' or NULL to retrieve full config tree + * + * @return config JSON. DO NOT free the result, it is a singleton. */ -int storage_get_blob(const char* key, void* out_value, size_t length); -void storage_put_blob(const char* key, void* value, size_t length); +cJSON* storage_get_config(const char* module); -int storage_set_config_str(const char* config); + +/** + * @brief returns config json as a string + * + * sensitive data (wifi password) is replaced with constant string + * + * @return config json + */ char* storage_get_config_str(); -cJSON* storage_get_config(const char* module); -void storage_init(); +/** + * @bried updates json config + * + * passed string is first parsed to JSON to ensure proper format and then + * sensitive data (wifi password) that has not been changed is being replaced with proper values. + * + * @param[in] json config as a string + * + * @return + * - ESP_OK if config was updated + * - ESP_FAIL if passed config was malformed + */ +esp_err_t storage_set_config_str(const char* config_json); + #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_STORAGE_H_ */ diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 425f6d1..34924a8 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -29,6 +29,7 @@ #include #include #include "cJSON.h" +#include extern const uint8_t default_config_json_start[] asm("_binary_default_config_json_start"); extern const uint8_t default_config_json_end[] asm("_binary_default_config_json_end"); @@ -37,30 +38,59 @@ static char* NAMESPACE = "OAP"; static char* TAG = "storage"; static char* PASSWORD_NOT_CHANGED = ""; -int storage_get_blob(const char* key, void* out_value, size_t length) { +static const size_t MAX_NVS_VALUE_SIZE = 32 * (126 / 2 - 1); + +static cJSON* _config; + +static nvs_handle storage_open(nvs_open_mode open_mode) { nvs_handle handle; - esp_err_t err; - err = nvs_open(NAMESPACE, NVS_READWRITE, &handle); - if (err != ESP_OK) { - ESP_LOGE(TAG, "nvs_open: %x", err); - return err; + ESP_ERROR_CHECK(nvs_open(NAMESPACE, open_mode, &handle)); + return handle; +} + +void storage_clean() { + ESP_ERROR_CHECK(nvs_flash_init()); + nvs_handle handle = storage_open(NVS_READWRITE); + ESP_ERROR_CHECK(nvs_erase_all(handle)); + ESP_ERROR_CHECK(nvs_commit(handle)); + nvs_close(handle); + _config = NULL; +} + +void storage_erase_blob(const char* key) { + nvs_handle handle = storage_open(NVS_READWRITE); + esp_err_t err = nvs_erase_key(handle, key); + if (err != ESP_ERR_NVS_NOT_FOUND) { + ESP_ERROR_CHECK(err); + ESP_ERROR_CHECK(nvs_commit(handle)); } - err = nvs_get_blob(handle, key, out_value, &length); - if (err != ESP_OK) { - ESP_LOGD(TAG, "No connection record found (%d).", err); + nvs_close(handle); +} + +esp_err_t storage_get_blob(const char* key, void** out_value, size_t* length) { + nvs_handle handle = storage_open(NVS_READONLY); + esp_err_t err; + size_t _length; + err = nvs_get_blob(handle, key, 0, &_length); + if (err == ESP_ERR_NVS_NOT_FOUND) { nvs_close(handle); return err; } - if (err != ESP_OK) { - ESP_LOGE(TAG, "nvs_open: %x", err); - nvs_close(handle); - return err; + ESP_ERROR_CHECK(err); + + if (length != NULL) { + //fill optional length param + memcpy(length, &_length, sizeof(size_t)); } + + *out_value = malloc(_length); + ESP_ERROR_CHECK(nvs_get_blob(handle, key, *out_value, &_length)); nvs_close(handle); return ESP_OK; } -int storage_get_str(const char* key, char** out_value) { +/* +esp_err_t storage_get_str(const char* key, char** out_value) { nvs_handle handle; esp_err_t err; err = nvs_open(NAMESPACE, NVS_READWRITE, &handle); @@ -71,7 +101,7 @@ int storage_get_str(const char* key, char** out_value) { size_t length; err = nvs_get_str(handle, key, 0, &length); if (err != ESP_OK) { - ESP_LOGD(TAG, "No connection record found(1) (%d).", err); + ESP_LOGD(TAG, "nvs_get_str (%x).", err); nvs_close(handle); return err; } @@ -79,29 +109,22 @@ int storage_get_str(const char* key, char** out_value) { err = nvs_get_str(handle, key, *out_value, &length); if (err != ESP_OK) { - ESP_LOGD(TAG, "No connection record found(2) (%d).", err); - nvs_close(handle); - return err; - } - - if (err != ESP_OK) { - ESP_LOGE(TAG, "nvs_open: %x", err); + ESP_LOGD(TAG, "nvs_get_str (%x).", err); nvs_close(handle); return err; } nvs_close(handle); return ESP_OK; -} +}*/ -void storage_put_blob(const char* key, void* value, size_t length) { - nvs_handle handle; - ESP_ERROR_CHECK(nvs_open(NAMESPACE, NVS_READWRITE, &handle)); - ESP_LOGD(TAG, "store blob '%s'=%d bytes", key, length); +void storage_set_blob(const char* key, void* value, size_t length) { + nvs_handle handle = storage_open(NVS_READWRITE); ESP_ERROR_CHECK(nvs_set_blob(handle, key, value, length)); ESP_ERROR_CHECK(nvs_commit(handle)); nvs_close(handle); } +/* void storage_put_str(const char* key, char* value) { nvs_handle handle; ESP_ERROR_CHECK(nvs_open(NAMESPACE, NVS_READWRITE, &handle)); @@ -109,11 +132,116 @@ void storage_put_str(const char* key, char* value) { ESP_ERROR_CHECK(nvs_set_str(handle, key, value)); ESP_ERROR_CHECK(nvs_commit(handle)); nvs_close(handle); +}*/ + +//----------- big blob -- + +static esp_err_t storage_get_bigblob_size(nvs_handle handle, const char* key, size_t* length) { + char* desc = malloc(strlen(key) + 3); + strcpy(desc, key); + strcat(desc, ".#"); + esp_err_t err = nvs_get_i32(handle, desc, (int32_t*)length); + free(desc); + return err; +} + +static esp_err_t storage_set_bigblob_size(nvs_handle handle, const char* key, size_t length) { + char* desc = malloc(strlen(key) + 3); + strcpy(desc, key); + strcat(desc, ".#"); + esp_err_t err = nvs_set_i32(handle, desc, length); + free(desc); + return err; +} + +esp_err_t storage_get_bigblob(const char* key, void** out_value, size_t* length) { + nvs_handle handle = storage_open(NVS_READONLY); + esp_err_t err; + //read key.desc to find length and #parts + size_t _length; + err = storage_get_bigblob_size(handle, key, &_length); + + if (err != ESP_OK) { + ESP_LOGD(TAG, "No entry found (%x).", err); + nvs_close(handle); + return err; + } else { + ESP_LOGD(TAG, "reading %u bytes", _length); + if (length != NULL) { + //fill optional length param + memcpy(length, &_length, sizeof(size_t)); + } + } + + *out_value = malloc(_length); + int p = 0; + char* part = malloc(strlen(key) + 4); + size_t start = 0, end = 0; + err = ESP_OK; + + while (err == ESP_OK && end < _length) { + sprintf(part, "%s.%x", key, p); + start = p * MAX_NVS_VALUE_SIZE; + end = start + MAX_NVS_VALUE_SIZE; + if (end > _length) end = _length; + ESP_LOGD(TAG, "read %s: %d-%d", part, start, end); + size_t part_len = end-start; + err = nvs_get_blob(handle, part, *out_value+start, &part_len); + p++; + } + free(part); + nvs_close(handle); + return err; } -//----------- config -------------- +void storage_set_bigblob(const char* key, void* value, size_t length) { + nvs_handle handle = storage_open(NVS_READWRITE); + ESP_LOGD(TAG, "set_bigblob '%s'= %d bytes", key, length); -static cJSON* _config; + size_t old_length; + uint8_t old_parts = 0; + esp_err_t err = storage_get_bigblob_size(handle, key, &old_length); + if (err == ESP_OK) { + old_parts = ceil(old_length / (double)MAX_NVS_VALUE_SIZE); + ESP_LOGD(TAG, "old entry size=%d (%d parts)", old_length, old_parts); + } else if (err == ESP_ERR_NVS_NOT_FOUND) { + ESP_LOGD(TAG, "new entry"); + } else { + ESP_ERROR_CHECK(err); + } + + //write new one + uint8_t p = 0; + size_t start = 0, end = 0; + char* part = malloc(strlen(key) + 4); + + while (end < length) { + start = p*MAX_NVS_VALUE_SIZE; + end = start + MAX_NVS_VALUE_SIZE; + if (end > length) end = length; + sprintf(part, "%s.%x", key, p); + ESP_LOGD(TAG, "store part '%s': %d-%d", part, start, end); + ESP_ERROR_CHECK(nvs_set_blob(handle, part, value+start, end-start)); + p++; + } + + while (p < old_parts) { + sprintf(part, "%s.%x", key, p); + ESP_LOGD(TAG, "remove part '%s'", part); + err = nvs_erase_key(handle, part); + if (err != ESP_ERR_NVS_NOT_FOUND) { + ESP_ERROR_CHECK(err); + } + p++; + } + free(part); + + ESP_ERROR_CHECK(storage_set_bigblob_size(handle, key, length)); + nvs_commit(handle); + nvs_close(handle); +} + +//----------- config -------------- cJSON* storage_get_config(const char* module) { if (!_config) { @@ -131,8 +259,10 @@ static void storage_set_config(cJSON *config) { if (_config) cJSON_Delete(_config); _config = config; char* _configStr = cJSON_Print(_config); - storage_put_str("config", _configStr); + storage_set_bigblob("config", _configStr, strlen(_configStr)+1); free(_configStr); + + storage_erase_blob("config"); //remove old entry } /* @@ -152,24 +282,9 @@ char* storage_get_config_str() { return str; } -//static void set_str_value(cJSON* node, char* str) { -// if (!node) return; -// if (node->valuestring) free(node->valuestring); -// node->valuestring = malloc(strlen(str)+1); -// strcpy(node->valuestring, str); -//} - -/* - * deserialises json string and stores as a new config. - * it also checks password field if it that didn't change - it leaves the old value. - */ -int storage_set_config_str(const char* configStr) { +esp_err_t storage_set_config_str(const char* configStr) { ESP_LOGD(TAG, "set config"); -// char* c= storage_get_config_str(); -// ESP_LOGD(TAG, "current config: %s", c); -// free(c); - cJSON *config = cJSON_Parse(configStr); if (config) { if (_config) { @@ -208,7 +323,11 @@ static void storage_init_config() { ESP_LOGD(TAG, "get config"); int err; - if ((err = storage_get_str("config", &str)) != ESP_OK) { + if ((err = storage_get_bigblob("config", &str, NULL)) == ESP_ERR_NVS_NOT_FOUND) { + err = storage_get_blob("config", &str, NULL); //backward comp, config used to be stored as single string + } + + if (err != ESP_OK) { if (str) free(str); if (err == ESP_ERR_NVS_NOT_FOUND) { ESP_LOGW(TAG,"config does not exist, create default"); diff --git a/components/oap_common/test/component.mk b/components/oap_common/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/oap_common/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/oap_common/test/test_oap_storage.c b/components/oap_common/test/test_oap_storage.c new file mode 100644 index 0000000..3436476 --- /dev/null +++ b/components/oap_common/test/test_oap_storage.c @@ -0,0 +1,198 @@ +#include +#include +#include +#include +#include +#include "unity.h" +#include "nvs.h" +#include "nvs_flash.h" +#include "esp_partition.h" +#include "esp_log.h" +#include +#include "oap_storage.h" + +static const char* TAG = "test_oap_storage"; + +esp_err_t storage_get_blob(const char* key, void** out_value, size_t* length); +void storage_set_blob(const char* key, void* value, size_t length); +void storage_set_bigblob(const char* key, void* value, size_t length); +esp_err_t storage_get_bigblob(const char* key, void** out_value, size_t* length); +void storage_clean(); + +static const size_t MAX_NVS_VALUE_SIZE = 32 * (126 / 2 - 1); + +//TEST_CASE("basic types", "[types]") +//{ +// int32_t v_32 = 0; +// TEST_ASSERT_EQUAL_INT32(4, sizeof(v_32)); +// +// size_t v_size = 0; +// TEST_ASSERT_EQUAL_INT32(4, sizeof(v_size)); +//} + +void nvs_clean() { + ESP_LOGW(TAG, "erasing nvs"); + const esp_partition_t* nvs_partition = esp_partition_find_first( + ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS, NULL); + assert(nvs_partition && "partition table must have an NVS partition"); + ESP_ERROR_CHECK( esp_partition_erase_range(nvs_partition, 0, nvs_partition->size) ); + + esp_err_t err = nvs_flash_init(); + ESP_ERROR_CHECK( err ); +} + +/* +TEST_CASE("nvs", "[oap_common]") +{ + nvs_clean(); + + size_t blob_size = MAX_NVS_VALUE_SIZE; + uint8_t* blob = malloc(blob_size); + storage_put_blob("blob", blob, blob_size); + free(blob); + + size_t str_size = MAX_NVS_VALUE_SIZE-1; + char* str = malloc(blob_size); + memset(str, 'a', str_size); + str[str_size] = 0; + storage_put_str("str", str); + free(str); +}*/ + +TEST_CASE("blob", "[oap_common]") +{ + storage_clean(); + + void* blob1; + size_t size1; + TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_blob("smallblob", &blob1, &size1)); + + size1 = 100; + blob1 = malloc(size1); + storage_set_blob("smallblob", blob1, size1); + + void* blob2; + size_t size2; + TEST_ESP_OK(storage_get_blob("smallblob", &blob2, &size2)); + TEST_ASSERT_EQUAL_UINT32(size1, size2); + TEST_ASSERT_EQUAL_MEMORY(blob1, blob2, size1); + + void* blob3; + TEST_ESP_OK(storage_get_blob("smallblob", &blob3, NULL)); + TEST_ASSERT_EQUAL_MEMORY(blob1, blob3, size1); + + free(blob1); + free(blob2); + free(blob3); +} + +TEST_CASE("bigblob", "[oap_common]") +{ + storage_clean(); + + size_t blob_size = MAX_NVS_VALUE_SIZE * 3 + 10; + void* blob = malloc(blob_size); + + TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_bigblob("blob", &blob, NULL)); + + storage_set_bigblob("blob", blob, blob_size); + + void* blob2; + size_t blob2_size; + TEST_ESP_OK(storage_get_bigblob("blob", &blob2, &blob2_size)); + TEST_ASSERT_EQUAL_UINT32(blob_size, blob2_size); + TEST_ASSERT_EQUAL_MEMORY(blob, blob2, blob_size); + + void* blob3; + TEST_ESP_OK(storage_get_bigblob("blob", &blob3, NULL)); + TEST_ASSERT_EQUAL_MEMORY(blob, blob3, blob_size); + + storage_set_bigblob("blob", blob, MAX_NVS_VALUE_SIZE + 1); + + TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_blob("blob.2", blob2, NULL)); + + free(blob); + free(blob2); + free(blob3); +} + +TEST_CASE("get default config", "[oap_common]") +{ + storage_clean(); + storage_init(); + cJSON* config = storage_get_config("wifi"); + TEST_ASSERT_NOT_NULL(config); + cJSON* ssid = cJSON_GetObjectItem(config, "ssid"); + TEST_ASSERT_NOT_NULL(ssid); + TEST_ASSERT_EQUAL_STRING("", ssid->valuestring); + + void* config_str; + TEST_ESP_OK(storage_get_blob("config.0", &config_str, NULL)); + free(config_str); +} + +TEST_CASE("get old config", "[oap_common]") +{ + storage_clean(); + + char* old_config = "{ \"wifi\" : {\"ssid\":\"old\"} }"; + storage_set_blob("config", old_config, strlen(old_config)+1); + + storage_init(); + + cJSON* config = storage_get_config("wifi"); + TEST_ASSERT_NOT_NULL(config); + cJSON* ssid = cJSON_GetObjectItem(config, "ssid"); + TEST_ASSERT_NOT_NULL(ssid); + TEST_ASSERT_EQUAL_STRING("old", ssid->valuestring); + + void* config_str; + TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_blob("config.0", &config_str, NULL)); + + //save and check if saved as bigblob + TEST_ESP_OK(storage_set_config_str(old_config)); + TEST_ESP_OK(storage_get_blob("config.0", &config_str, NULL)); + free(config_str); + TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_blob("config", &config_str, NULL)); +} + +TEST_CASE("get/set config", "[oap_common]") +{ + storage_clean(); + storage_init(); + + cJSON* config = storage_get_config(NULL); + TEST_ASSERT_NOT_NULL(config); + + //update config + size_t foo_size = 2000; + char* foo = malloc(foo_size+1); + memset(foo, 'x', foo_size); + foo[foo_size] = 0; + + cJSON_AddStringToObject(config, "foo", foo); + char* config_str = cJSON_Print(config); + TEST_ESP_OK(storage_set_config_str(config_str)); + free(config_str); + + //re-init + ESP_LOGI(TAG, "re-init"); + storage_init(); + config = storage_get_config(NULL); + TEST_ASSERT_NOT_NULL(config); + TEST_ASSERT_EQUAL_STRING(foo, cJSON_GetObjectItem(config, "foo")->valuestring); + + free(foo); +} + +//TEST_CASE("preserve wifi password", "oap_common") +//{ +// storage_clean(); +// storage_init(); +// +// cJSON* config = storage_get_config(NULL); +// char* wifi_pass = "new_wifi_password"; +// +// cJSON_AddStringToObject(cJSON_GetObjectItem(config, "wifi"), "pass", wifi_pass); +// storage_set_config_str(cJSON_Print()); +//} diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index c4f0531..4879132 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -1,12 +1,5 @@ menu "OpenAirProject" -config OAP_AP_PASSWORD - string "AccessPoint password" - default "cleanair" - help - Password to authenticate to WiFi Access Point when sensor runs in this mode. - Minimum 8 characters. - config OAP_PM_SAMPLE_BUF_SIZE int "PM sensor sample buffer size" default 120 @@ -20,12 +13,5 @@ config OAP_RESULT_BUFFER_SIZE help Buffer for data that cannot be immediately published because sensor is offline. For some services that can accept only real-time data, this should be set to 1. - -config OAP_CONTROL_PANEL - int "enable control panel" - default 1 - help - Enable web-based control panel where you can configure various parameters of the sensor, - including wifi and data publishing settings endmenu \ No newline at end of file diff --git a/main/main.c b/main/main.c index 2fdef7d..7ba957f 100644 --- a/main/main.c +++ b/main/main.c @@ -277,6 +277,14 @@ static void main_task() { } } +static void ota_task() { + while (1) { + //TODO hit OTA_check, parse response, compare versions + //if there's newer version, download ota, reboot + delay(5000); + } +} + void app_main() { delay(1000); @@ -290,7 +298,7 @@ void app_main() pm_queue = xQueueCreate(1, sizeof(pm_data_duo_t)); led_queue = xQueueCreate(10, sizeof(led_cmd)); - //xTaskCreate(main_task, "main_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate(ota_task, "ota_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); //xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); led_init(get_config().led, led_queue); diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..d1bedd1 --- /dev/null +++ b/test.sh @@ -0,0 +1,5 @@ +#https://www.esp32.com/viewtopic.php?t=2867 + +CONFIG_OAP_CONTROL_PANEL=1 +project=`pwd` +make -C ${IDF_PATH}/tools/unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common' flash monitor -j5 \ No newline at end of file From d35a9389dc976da02aa0ddd91fe30613753c6634 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 10 Sep 2017 16:41:48 +0200 Subject: [PATCH 034/200] clean config api --- components/bootwifi/bootwifi.c | 24 +++--- components/oap_common/include/oap_storage.h | 15 ++-- components/oap_common/oap_storage.c | 83 ++++++++++--------- components/oap_common/test/test_oap_storage.c | 70 +++++++++------- 4 files changed, 100 insertions(+), 92 deletions(-) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index ae434df..24769d7 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -93,14 +93,12 @@ static void handler_index(struct mg_connection *nc) { static void handler_get_config(struct mg_connection *nc, struct http_message *message) { ESP_LOGD(tag, "handler_get_config"); - char* json = storage_get_config_str(); - if (json) { - mg_send_head(nc, 200, strlen(json), "Content-Type: application/json"); - mg_send(nc, json, strlen(json)); - free(json); - } else { - mg_http_send_error(nc, 500, "failed to load config"); - } + cJSON* config = storage_get_config_to_update(); + + char* json = cJSON_Print(config); + mg_send_head(nc, 200, strlen(json), "Content-Type: application/json"); + mg_send(nc, json, strlen(json)); + free(json); } static void handler_reboot(struct mg_connection *nc) { @@ -113,13 +111,15 @@ static void handler_reboot(struct mg_connection *nc) { static void handler_set_config(struct mg_connection *nc, struct http_message *message) { ESP_LOGD(tag, "handler_set_config"); char *body = mgStrToStr(message->body); - if (storage_set_config_str(body) == ESP_OK) { + cJSON* config = cJSON_Parse(body); + free(body); + if (config) { + storage_update_config(config); handler_get_config(nc, message); - //reboot_delayed(); } else { - mg_http_send_error(nc, 500, "failed to store config"); + mg_http_send_error(nc, 500, "invalid config"); } - free(body); + cJSON_Delete(config); } /** diff --git a/components/oap_common/include/oap_storage.h b/components/oap_common/include/oap_storage.h index 062da7a..ac17e6a 100644 --- a/components/oap_common/include/oap_storage.h +++ b/components/oap_common/include/oap_storage.h @@ -37,7 +37,7 @@ void storage_init(); * * @param[in] module name of a submodule, e.g. 'wifi' or NULL to retrieve full config tree * - * @return config JSON. DO NOT free the result, it is a singleton. + * @return config JSON. DO NOT free or modify the result, it is a singleton! */ cJSON* storage_get_config(const char* module); @@ -47,24 +47,19 @@ cJSON* storage_get_config(const char* module); * * sensitive data (wifi password) is replaced with constant string * - * @return config json + * @return config json. free it after use! */ -char* storage_get_config_str(); +cJSON* storage_get_config_to_update(); /** * @bried updates json config * - * passed string is first parsed to JSON to ensure proper format and then * sensitive data (wifi password) that has not been changed is being replaced with proper values. * - * @param[in] json config as a string - * - * @return - * - ESP_OK if config was updated - * - ESP_FAIL if passed config was malformed + * @param[in] json config */ -esp_err_t storage_set_config_str(const char* config_json); +void storage_update_config(cJSON* config); #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_STORAGE_H_ */ diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 34924a8..113e200 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -255,60 +255,56 @@ cJSON* storage_get_config(const char* module) { } } -static void storage_set_config(cJSON *config) { +static void storage_store_config(cJSON *config) { if (_config) cJSON_Delete(_config); - _config = config; - char* _configStr = cJSON_Print(_config); - storage_set_bigblob("config", _configStr, strlen(_configStr)+1); - free(_configStr); - + _config = cJSON_Duplicate(config, 1); + char* json = cJSON_Print(_config); + storage_set_bigblob("config", json, strlen(json)+1); + free(json); storage_erase_blob("config"); //remove old entry } -/* - * returns entire config as a string. - * free result after use. - */ -char* storage_get_config_str() { - cJSON* copy = cJSON_Duplicate(_config, 1); - cJSON* wifi = cJSON_GetObjectItem(copy, "wifi"); +static void mask_sensitive_fields(cJSON* config) { + cJSON* wifi = cJSON_GetObjectItem(config, "wifi"); //replace existing password (security) if (wifi && cJSON_GetObjectItem(wifi, "password")) { cJSON_DeleteItemFromObject(wifi, "password"); cJSON_AddStringToObject(wifi, "password", PASSWORD_NOT_CHANGED); } - char* str = cJSON_Print(copy); - cJSON_Delete(copy); - return str; } -esp_err_t storage_set_config_str(const char* configStr) { - ESP_LOGD(TAG, "set config"); +cJSON* storage_get_config_to_update() { + cJSON* copy = cJSON_Duplicate(_config, 1); + mask_sensitive_fields(copy); + return copy; +} - cJSON *config = cJSON_Parse(configStr); - if (config) { - if (_config) { - cJSON* wifi = cJSON_GetObjectItem(config, "wifi"); +static void unmask_sensitive_fields(const cJSON* new_config, const cJSON* old_config) { + if (old_config) { + cJSON* wifi = cJSON_GetObjectItem(new_config, "wifi"); + if (wifi) { cJSON* passwordNode = cJSON_GetObjectItem(wifi, "password"); if (passwordNode && strcmp(passwordNode->valuestring, PASSWORD_NOT_CHANGED) == 0) { - cJSON* _wifi = cJSON_GetObjectItem(_config, "wifi"); - cJSON* _passwordNode = cJSON_GetObjectItem(_wifi, "password"); - ESP_LOGD(TAG,"detected '%s' token, we need to keep old password (%s)", PASSWORD_NOT_CHANGED, _passwordNode->valuestring); - if (_passwordNode) { - cJSON_DeleteItemFromObject(wifi, "password"); - cJSON_AddStringToObject(wifi, "password", _passwordNode->valuestring); + cJSON* _wifi = cJSON_GetObjectItem(old_config, "wifi"); + if (_wifi) { + cJSON* _passwordNode = cJSON_GetObjectItem(_wifi, "password"); + ESP_LOGD(TAG,"detected '%s' token, we need to keep old password (%s)", PASSWORD_NOT_CHANGED, _passwordNode->valuestring); + if (_passwordNode) { + cJSON_DeleteItemFromObject(wifi, "password"); + cJSON_AddStringToObject(wifi, "password", _passwordNode->valuestring); + } } } } - storage_set_config(config); - return ESP_OK; - } else { - ESP_LOGE(TAG, "malformed config, ignore"); - return ESP_FAIL; } } - +void storage_update_config(const cJSON* config) { + ESP_LOGD(TAG, "update config"); + if (!config) return; + unmask_sensitive_fields(config, _config); + storage_store_config(config); +} static char* default_config() { int len = default_config_json_end-default_config_json_start; @@ -327,6 +323,8 @@ static void storage_init_config() { err = storage_get_blob("config", &str, NULL); //backward comp, config used to be stored as single string } + cJSON* stored = NULL; + if (err != ESP_OK) { if (str) free(str); if (err == ESP_ERR_NVS_NOT_FOUND) { @@ -335,8 +333,8 @@ static void storage_init_config() { ESP_LOGE(TAG,"config corrupted, replace with default"); } } else { - _config = cJSON_Parse(str); - if (!_config) { + stored = cJSON_Parse(str); + if (!stored) { ESP_LOGE(TAG,"config is not a proper json, replace with default\n%s", str); } else { //TODO here we should "merge" it with defaults - in case of new firmware @@ -345,17 +343,20 @@ static void storage_init_config() { free(str); } - if (!_config) { + if (stored) { + _config = stored; + } else { str = default_config(); - _config = cJSON_Parse(str); - if (!_config) { + cJSON* def_config = cJSON_Parse(str); + if (!def_config) { ESP_LOGE(TAG,"default config is not a proper json\n%s", str); abort(); } else { - ESP_LOGI(TAG,"config\n%s",str); + ESP_LOGI(TAG,"default config\n%s",str); } - storage_set_config_str(str); free(str); + storage_update_config(def_config); + cJSON_Delete(def_config); } } diff --git a/components/oap_common/test/test_oap_storage.c b/components/oap_common/test/test_oap_storage.c index 3436476..4980404 100644 --- a/components/oap_common/test/test_oap_storage.c +++ b/components/oap_common/test/test_oap_storage.c @@ -30,15 +30,22 @@ static const size_t MAX_NVS_VALUE_SIZE = 32 * (126 / 2 - 1); // TEST_ASSERT_EQUAL_INT32(4, sizeof(v_size)); //} +static uint8_t nvs_cleaned = 0; + void nvs_clean() { ESP_LOGW(TAG, "erasing nvs"); const esp_partition_t* nvs_partition = esp_partition_find_first( ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS, NULL); assert(nvs_partition && "partition table must have an NVS partition"); ESP_ERROR_CHECK( esp_partition_erase_range(nvs_partition, 0, nvs_partition->size) ); +} - esp_err_t err = nvs_flash_init(); - ESP_ERROR_CHECK( err ); +void nvs_clean_if_necessary() { + if (!nvs_cleaned) { + nvs_clean(); + nvs_cleaned = 1; + } + storage_clean(); } /* @@ -61,7 +68,7 @@ TEST_CASE("nvs", "[oap_common]") TEST_CASE("blob", "[oap_common]") { - storage_clean(); + nvs_clean_if_necessary(); void* blob1; size_t size1; @@ -88,7 +95,7 @@ TEST_CASE("blob", "[oap_common]") TEST_CASE("bigblob", "[oap_common]") { - storage_clean(); + nvs_clean_if_necessary(); size_t blob_size = MAX_NVS_VALUE_SIZE * 3 + 10; void* blob = malloc(blob_size); @@ -118,7 +125,7 @@ TEST_CASE("bigblob", "[oap_common]") TEST_CASE("get default config", "[oap_common]") { - storage_clean(); + nvs_clean_if_necessary(); storage_init(); cJSON* config = storage_get_config("wifi"); TEST_ASSERT_NOT_NULL(config); @@ -133,35 +140,35 @@ TEST_CASE("get default config", "[oap_common]") TEST_CASE("get old config", "[oap_common]") { - storage_clean(); + nvs_clean_if_necessary(); - char* old_config = "{ \"wifi\" : {\"ssid\":\"old\"} }"; + char* old_config = "{ \"foo\" : \"bar\" }"; storage_set_blob("config", old_config, strlen(old_config)+1); storage_init(); - cJSON* config = storage_get_config("wifi"); + cJSON* config = storage_get_config(NULL); TEST_ASSERT_NOT_NULL(config); - cJSON* ssid = cJSON_GetObjectItem(config, "ssid"); - TEST_ASSERT_NOT_NULL(ssid); - TEST_ASSERT_EQUAL_STRING("old", ssid->valuestring); + TEST_ASSERT_EQUAL_STRING("bar", cJSON_GetObjectItem(config, "foo")->valuestring); void* config_str; TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_blob("config.0", &config_str, NULL)); - //save and check if saved as bigblob - TEST_ESP_OK(storage_set_config_str(old_config)); + //save and check if saved as big blob + config = cJSON_Duplicate(config,1); + storage_update_config(config); TEST_ESP_OK(storage_get_blob("config.0", &config_str, NULL)); free(config_str); TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_blob("config", &config_str, NULL)); + cJSON_Delete(config); } TEST_CASE("get/set config", "[oap_common]") { - storage_clean(); + nvs_clean_if_necessary(); storage_init(); - cJSON* config = storage_get_config(NULL); + cJSON* config = storage_get_config_to_update(); TEST_ASSERT_NOT_NULL(config); //update config @@ -171,9 +178,8 @@ TEST_CASE("get/set config", "[oap_common]") foo[foo_size] = 0; cJSON_AddStringToObject(config, "foo", foo); - char* config_str = cJSON_Print(config); - TEST_ESP_OK(storage_set_config_str(config_str)); - free(config_str); + storage_update_config(config); + cJSON_Delete(config); //re-init ESP_LOGI(TAG, "re-init"); @@ -185,14 +191,20 @@ TEST_CASE("get/set config", "[oap_common]") free(foo); } -//TEST_CASE("preserve wifi password", "oap_common") -//{ -// storage_clean(); -// storage_init(); -// -// cJSON* config = storage_get_config(NULL); -// char* wifi_pass = "new_wifi_password"; -// -// cJSON_AddStringToObject(cJSON_GetObjectItem(config, "wifi"), "pass", wifi_pass); -// storage_set_config_str(cJSON_Print()); -//} +TEST_CASE("preserve wifi password", "oap_common") +{ + nvs_clean_if_necessary(); + storage_init(); + + //set new wifi password + cJSON* config = storage_get_config_to_update(); + char* wifi_pass = "new_wifi_password"; + cJSON* wifi = cJSON_GetObjectItem(config, "wifi"); + TEST_ASSERT_EQUAL_STRING("", cJSON_GetObjectItem(wifi,"password")->valuestring); + cJSON_ReplaceItemInObject(wifi, "password", cJSON_CreateString(wifi_pass)); + storage_update_config(config); + cJSON_Delete(config); + + //check if set + TEST_ASSERT_EQUAL_STRING(wifi_pass, cJSON_GetObjectItem(storage_get_config("wifi"),"password")->valuestring); +} From 77f470918ef385faf12290d5d984990bae1bf489 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 10 Sep 2017 17:02:07 +0200 Subject: [PATCH 035/200] display version in control panel --- CHANGELOG.md | 4 +++- components/bootwifi/bootwifi.c | 6 ++++-- components/bootwifi/index.html | 8 +++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25bcfbd..1251508 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,4 +17,6 @@ - support two PM sensors ([#8](https://github.com/openairproject/sensor-esp32/issues/8)) - update ESP-IDF to 2.1 ([#1](https://github.com/openairproject/sensor-esp32/issues/1)) -- track firmware version ([#9](https://github.com/openairproject/sensor-esp32/issues/9)) \ No newline at end of file +- track firmware version ([#9](https://github.com/openairproject/sensor-esp32/issues/9)) +- display firmware version ([#11](https://github.com/openairproject/sensor-esp32/issues/11)) +- add unit tests ([#3](https://github.com/openairproject/sensor-esp32/issues/3)) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 24769d7..5779696 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -94,10 +94,12 @@ static void handler_index(struct mg_connection *nc) { static void handler_get_config(struct mg_connection *nc, struct http_message *message) { ESP_LOGD(tag, "handler_get_config"); cJSON* config = storage_get_config_to_update(); - char* json = cJSON_Print(config); - mg_send_head(nc, 200, strlen(json), "Content-Type: application/json"); + char* headers = malloc(200); + sprintf(headers, "Content-Type: application/json\r\nX-Version: %s", oap_version_str()); + mg_send_head(nc, 200, strlen(json), headers); mg_send(nc, json, strlen(json)); + free(headers); free(json); } diff --git a/components/bootwifi/index.html b/components/bootwifi/index.html index a6bcb4f..d2eba7f 100644 --- a/components/bootwifi/index.html +++ b/components/bootwifi/index.html @@ -43,6 +43,11 @@ margin:0; font-size: 32px; } + #ver { + font-size:0.5em; + padding:1em; + float:right; + } div.cnt { padding:1em; } @@ -90,7 +95,7 @@ -

    OpenAirProject Sensor

    +

    OpenAirProject Sensor

    @@ -334,6 +339,7 @@

    OpenAirProject Sensor
    Date: Sat, 16 Sep 2017 21:41:03 +0200 Subject: [PATCH 036/200] 0.4.3 OTA updates replace ssl_client with modified esp-request (credits to https://github.com/tuanpmt) fix a few minor bugs add a few tests for other components --- .cproject | 3 +- CHANGELOG.md | 35 +- components/awsiot/awsiot.c | 94 +-- components/awsiot/awsiot_common.h | 8 +- components/awsiot/awsiot_rest.c | 66 +- components/awsiot/awsiot_rest.h | 4 +- components/awsiot/include/awsiot.h | 12 + .../test/1cbf751210-certificate.pem.crt | 20 + .../awsiot/test/1cbf751210-private.pem.key | 27 + .../awsiot/test/1cbf751210-public.pem.key | 9 + components/awsiot/test/component.mk | 8 + components/awsiot/test/test_awsiot.c | 61 ++ components/bootwifi/Kconfig | 7 - components/bootwifi/bootwifi.c | 112 ++- components/bootwifi/include/bootwifi.h | 16 +- components/esp-request/LICENSE | 202 +++++ components/esp-request/README.md | 84 ++ components/esp-request/component.mk | 6 + components/esp-request/esp_request.c | 753 ++++++++++++++++++ components/esp-request/include/esp_request.h | 94 +++ components/esp-request/include/req_list.h | 20 + components/esp-request/include/uri_parser.h | 28 + components/esp-request/req_list.c | 164 ++++ components/esp-request/uri_parser.c | 252 ++++++ components/oap_common/component.mk | 3 +- components/oap_common/include/oap_common.h | 3 + components/oap_common/include/oap_version.h | 7 +- components/oap_common/include/ssl_client.h | 64 -- components/oap_common/oap_common.c | 10 + components/oap_common/oap_storage.c | 6 +- components/oap_common/oap_version.c | 42 +- components/oap_common/root_ca.pem | 25 + components/oap_common/ssl_client.c | 391 --------- components/oap_common/test/.gitignore | 1 + components/oap_common/test/include/oap_test.h | 36 + components/oap_common/test/oap_test.c | 46 ++ components/oap_common/test/sandbox.c | 74 ++ components/oap_common/test/test_oap_storage.c | 15 +- components/oap_common/test/test_oap_version.c | 69 ++ components/ota/Kconfig | 28 + components/ota/component.mk | 8 + components/ota/include/ota.h | 33 + components/ota/ota.c | 348 ++++++++ components/ota/ota_int.h | 60 ++ components/ota/test/component.mk | 5 + components/ota/test/test_ota.c | 125 +++ main/Kconfig.projbuild | 7 + main/main.c | 16 +- test.sh | 2 +- 49 files changed, 2906 insertions(+), 603 deletions(-) create mode 100644 components/awsiot/test/1cbf751210-certificate.pem.crt create mode 100644 components/awsiot/test/1cbf751210-private.pem.key create mode 100644 components/awsiot/test/1cbf751210-public.pem.key create mode 100644 components/awsiot/test/component.mk create mode 100644 components/awsiot/test/test_awsiot.c create mode 100644 components/esp-request/LICENSE create mode 100644 components/esp-request/README.md create mode 100644 components/esp-request/component.mk create mode 100644 components/esp-request/esp_request.c create mode 100644 components/esp-request/include/esp_request.h create mode 100644 components/esp-request/include/req_list.h create mode 100644 components/esp-request/include/uri_parser.h create mode 100644 components/esp-request/req_list.c create mode 100644 components/esp-request/uri_parser.c delete mode 100644 components/oap_common/include/ssl_client.h create mode 100644 components/oap_common/root_ca.pem delete mode 100644 components/oap_common/ssl_client.c create mode 100644 components/oap_common/test/.gitignore create mode 100644 components/oap_common/test/include/oap_test.h create mode 100644 components/oap_common/test/oap_test.c create mode 100644 components/oap_common/test/sandbox.c create mode 100644 components/oap_common/test/test_oap_version.c create mode 100644 components/ota/Kconfig create mode 100644 components/ota/component.mk create mode 100644 components/ota/include/ota.h create mode 100644 components/ota/ota.c create mode 100644 components/ota/ota_int.h create mode 100644 components/ota/test/component.mk create mode 100644 components/ota/test/test_ota.c diff --git a/.cproject b/.cproject index 5c820d2..17c9dbf 100644 --- a/.cproject +++ b/.cproject @@ -14,7 +14,7 @@ - + diff --git a/CHANGELOG.md b/CHANGELOG.md index 1251508..7211b93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,22 +1,33 @@ -# 0.1.1 +# 0.4.3 -- all main features working (some issues with bmp280) -- thingspeak client +- OTA updates ([#2](https://github.com/openairproject/sensor-esp32/issues/2)) +- fix NVS crash after fresh install ([#14](https://github.com/openairproject/sensor-esp32/issues/14)) -# 0.2.0 +# 0.4.0 -- support for bmp280 and bme280 -- basic rest client for AWS IoT +- support two PM sensors ([#8](https://github.com/openairproject/sensor-esp32/issues/8)) +- update ESP-IDF to 2.1 ([#1](https://github.com/openairproject/sensor-esp32/issues/1)) +- track firmware version ([#9](https://github.com/openairproject/sensor-esp32/issues/9)) +- display firmware version ([#11](https://github.com/openairproject/sensor-esp32/issues/11)) +- add unit tests ([#3](https://github.com/openairproject/sensor-esp32/issues/3)) # 0.3.0 - support two (internal and external) bmx sensors - support optional fan and heater -# 0.4.0 +# 0.2.0 + +- support for bmp280 and bme280 +- basic rest client for AWS IoT + +# 0.1.1 + +- all main features working (some issues with bmp280) +- thingspeak client + + + + + -- support two PM sensors ([#8](https://github.com/openairproject/sensor-esp32/issues/8)) -- update ESP-IDF to 2.1 ([#1](https://github.com/openairproject/sensor-esp32/issues/1)) -- track firmware version ([#9](https://github.com/openairproject/sensor-esp32/issues/9)) -- display firmware version ([#11](https://github.com/openairproject/sensor-esp32/issues/11)) -- add unit tests ([#3](https://github.com/openairproject/sensor-esp32/issues/3)) diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index 26b83db..0222ae5 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -33,20 +33,18 @@ #include "nvs_flash.h" #include "awsiot_common.h" #include "awsiot_rest.h" -#include "oap_storage.h" #include "oap_common.h" #include "oap_debug.h" #include "cJSON.h" static const char *TAG = "awsiot"; -static awsiot_config_t awsiot_config = {0}; +static awsiot_config_t awsiot_config = { + .enabled = 1, + 0 +}; static int config_sent = 0; -#define AWS_NOT_CONFIGURED 1 -static esp_err_t configured = AWS_NOT_CONFIGURED; - - static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_config) { cJSON* shadow = cJSON_CreateObject(); cJSON* state = cJSON_CreateObject(); @@ -129,84 +127,86 @@ static esp_err_t awsiot_rest_post(oap_meas* meas, oap_sensor_config_t *sensor_co cJSON_Delete(shadow); //ESP_LOGD(TAG, "shadow update: %s", body); - esp_err_t res = awsiot_update_shadow(awsiot_config, body); + esp_err_t res = awsiot_update_shadow(&awsiot_config, body); free(body); config_sent = config_sent || res == ESP_OK; return res; } -static void release_config(awsiot_config_t* awsiot_config) { - if (awsiot_config->thingName) free(awsiot_config->thingName); - if (awsiot_config->cert) free(awsiot_config->cert); - if (awsiot_config->pkey) free(awsiot_config->pkey); - if (awsiot_config->endpoint) free(awsiot_config->endpoint); +static void set_config_field(char** field, char* value) { + if (*field) { + free(*field); + } else { + *field = value; + } } -static esp_err_t awsiot_configure(awsiot_config_t* awsiot_config) { - cJSON* awsiot = storage_get_config("awsiot"); +esp_err_t awsiot_configure(cJSON* awsiot) { if (!awsiot) { ESP_LOGI(TAG, "config not found"); - goto fail; + return ESP_FAIL; } cJSON* field; if (!(field = cJSON_GetObjectItem(awsiot, "enabled")) || !field->valueint) { ESP_LOGI(TAG, "client disabled"); - goto fail; + awsiot_config.enabled = 0; + return ESP_FAIL; + } else { + awsiot_config.enabled = 1; } if ((field = cJSON_GetObjectItem(awsiot, "endpoint")) && field->valuestring) { - awsiot_config->endpoint = str_dup(field->valuestring); - ESP_LOGI(TAG, "endpoint: %s", awsiot_config->endpoint); - } else { - ESP_LOGW(TAG, "endpoint not configured"); - goto fail; + set_config_field(&awsiot_config.endpoint,str_dup(field->valuestring)); + ESP_LOGI(TAG, "endpoint: %s", awsiot_config.endpoint); } if ((field = cJSON_GetObjectItem(awsiot, "port")) && field->valueint) { - awsiot_config->port = field->valueint; - } else { - ESP_LOGW(TAG, "port not configured"); - goto fail; + awsiot_config.port = field->valueint; } if ((field = cJSON_GetObjectItem(awsiot, "thingName")) && field->valuestring) { - awsiot_config->thingName = str_dup(field->valuestring); - ESP_LOGI(TAG, "thingName: %s", awsiot_config->thingName); - } else { - ESP_LOGW(TAG, "apikey not configured"); - goto fail; + set_config_field(&awsiot_config.thingName, str_dup(field->valuestring)); + ESP_LOGI(TAG, "thingName: %s", awsiot_config.thingName); } if ((field = cJSON_GetObjectItem(awsiot, "cert")) && field->valuestring) { - awsiot_config->cert = str_dup(field->valuestring); - } else { - ESP_LOGW(TAG, "cert not configured"); - goto fail; + set_config_field(&awsiot_config.cert, str_dup(field->valuestring)); } if ((field = cJSON_GetObjectItem(awsiot, "pkey")) && field->valuestring) { - awsiot_config->pkey = str_dup(field->valuestring); - } else { - ESP_LOGW(TAG, "pkey not configured"); - goto fail; + set_config_field(&awsiot_config.pkey,str_dup(field->valuestring)); } return ESP_OK; - fail: - release_config(awsiot_config); - return ESP_FAIL; } +awsiot_config_t* get_awsiot_config() { + return &awsiot_config; +} esp_err_t awsiot_send(oap_meas* meas, oap_sensor_config_t *sensor_config) { - if (configured == AWS_NOT_CONFIGURED) { - configured = awsiot_configure(&awsiot_config); + if (!awsiot_config.enabled) { + ESP_LOGW(TAG, "awsiot disabled"); + return ESP_FAIL; } - if (configured == ESP_OK) { - return awsiot_rest_post(meas, sensor_config); - } else { - return configured; + if (!awsiot_config.thingName) { + ESP_LOGE(TAG, "thingName not configured"); + return ESP_FAIL; + } + if (!awsiot_config.endpoint) { + ESP_LOGE(TAG, "endpoint not configured"); + return ESP_FAIL; + } + if (!awsiot_config.cert) { + ESP_LOGE(TAG, "certificate not configured"); + return ESP_FAIL; } + if (!awsiot_config.pkey) { + ESP_LOGE(TAG, "private key not configured"); + return ESP_FAIL; + } + + return awsiot_rest_post(meas, sensor_config); } diff --git a/components/awsiot/awsiot_common.h b/components/awsiot/awsiot_common.h index 9fce767..b2060eb 100644 --- a/components/awsiot/awsiot_common.h +++ b/components/awsiot/awsiot_common.h @@ -24,13 +24,7 @@ #define COMPONENTS_AWSIOT_AWSIOT_COMMON_H_ -typedef struct { - char* endpoint; - int port; - char* thingName; - char* cert; - char* pkey; -} awsiot_config_t; + #endif /* COMPONENTS_AWSIOT_AWSIOT_COMMON_H_ */ diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 639de2b..8b10b4b 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -32,9 +32,10 @@ #include "nvs_flash.h" #include "awsiot_rest.h" -#include "ssl_client.h" +//#include "ssl_client.h" #include "oap_common.h" #include "oap_debug.h" +#include "esp_request.h" //#define WEB_SERVER "a32on3oilq3poc.iot.eu-west-1.amazonaws.com" //#define WEB_PORT "8443" @@ -45,9 +46,66 @@ static const char *TAG = "awsiot"; extern const uint8_t verisign_root_ca_pem_start[] asm("_binary_verisign_root_ca_pem_start"); extern const uint8_t verisign_root_ca_pem_end[] asm("_binary_verisign_root_ca_pem_end"); +static int download_callback(request_t *req, char *data, int len) { + ESP_LOGI(TAG, "response:%s", data); + return 0; +} + +esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body) { + char uri[100]; + sprintf(uri, "https://%s:%d", awsiot_config->endpoint, awsiot_config->port); +// char host_header[100]; +// sprintf(host_header, "Host: %s", awsiot_config->endpoint); + + request_t* req = req_new(uri); + + req->ca_cert = req_parse_x509_crt((unsigned char*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); + if (!req->ca_cert) { + ESP_LOGW(TAG, "Invalid CA cert"); + return ESP_FAIL; + } + + req->client_cert = req_parse_x509_crt((unsigned char*)awsiot_config->cert, strlen(awsiot_config->cert)+1); + if (!req->client_cert) { + ESP_LOGW(TAG, "Invalid client cert"); + return ESP_FAIL; + } + req->client_key = req_parse_pkey((unsigned char*)awsiot_config->pkey, strlen(awsiot_config->pkey)+1); + + if (!req->client_key) { + ESP_LOGW(TAG, "Invalid client key"); + return ESP_FAIL; + } + + char path[100]; + sprintf(path, "/things/%s/shadow", awsiot_config->thingName); + + + req_setopt(req, REQ_SET_METHOD, "POST"); + req_setopt(req, REQ_SET_PATH, path); + //req_setopt(req, REQ_SET_HEADER, host_header); + req_setopt(req, REQ_SET_HEADER, "Content-Type: application/json"); + req_setopt(req, REQ_SET_HEADER, "Connection: close"); + req_setopt(req, REQ_SET_DATAFIELDS, body); + + req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback); + + int status = req_perform(req); + req_clean_incl_certs(req); + + if (status != 200) { + ESP_LOGW(TAG, "Invalid response code: %d", status); + return ESP_FAIL; + } else { + return ESP_OK; + } +} + + +/* #define RESPONSE_BUF_SIZE 1024 -esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { +esp_err_t awsiot_update_shadow_old(awsiot_config_t awsiot_config, char* body) { //heap_log* hl = heap_log_take(NULL, "start"); sslclient_context ssl_client = {.0}; ssl_init(&ssl_client); @@ -63,7 +121,7 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { //heap_log_take(hl, "connected"); char* rootCA = str_make((void*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); - if (start_ssl_client(&ssl_client, (unsigned char*)rootCA, (unsigned char*)awsiot_config.cert, (unsigned char*)awsiot_config.pkey) == ESP_OK) { + if (start_ssl_client(&ssl_client, (unsigned char*)rootCA, (unsigned char*)awsiot_config.cert, (unsigned char*)awsiot_config.pkey, awsiot_config.endpoint) == ESP_OK) { free(rootCA); //heap_log_take(hl, "start_ssl_client"); char* request = malloc(strlen(body) + 250); @@ -117,4 +175,4 @@ esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body) { ESP_LOGI(TAG, "ssl request done %d", ret); return ret; -} +}*/ diff --git a/components/awsiot/awsiot_rest.h b/components/awsiot/awsiot_rest.h index ac80027..be82bcb 100644 --- a/components/awsiot/awsiot_rest.h +++ b/components/awsiot/awsiot_rest.h @@ -23,8 +23,8 @@ #ifndef COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ #define COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ -#include "awsiot_common.h" +#include "awsiot.h" -esp_err_t awsiot_update_shadow(awsiot_config_t awsiot_config, char* body); +esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body); #endif /* COMPONENTS_AWSIOT_INCLUDE_AWSIOT_REST_H_ */ diff --git a/components/awsiot/include/awsiot.h b/components/awsiot/include/awsiot.h index 0739886..3b1b964 100644 --- a/components/awsiot/include/awsiot.h +++ b/components/awsiot/include/awsiot.h @@ -25,7 +25,19 @@ #include "oap_common.h" #include "esp_err.h" +#include "cJSON.h" +typedef struct { + int enabled; + char* endpoint; + int port; + char* thingName; + char* cert; + char* pkey; +} awsiot_config_t; + +awsiot_config_t* get_awsiot_config(); +esp_err_t awsiot_configure(cJSON* awsiot); esp_err_t awsiot_send(oap_meas* meas, oap_sensor_config_t *sensor_config); #endif /* COMPONENTS_AWSIOT_INCLUDE_AWSIOT_H_ */ diff --git a/components/awsiot/test/1cbf751210-certificate.pem.crt b/components/awsiot/test/1cbf751210-certificate.pem.crt new file mode 100644 index 0000000..14adf09 --- /dev/null +++ b/components/awsiot/test/1cbf751210-certificate.pem.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIVAKFzi5PjNi9O8WR8Nc5U8/vPVRZGMA0GCSqGSIb3DQEB +CwUAME0xSzBJBgNVBAsMQkFtYXpvbiBXZWIgU2VydmljZXMgTz1BbWF6b24uY29t +IEluYy4gTD1TZWF0dGxlIFNUPVdhc2hpbmd0b24gQz1VUzAeFw0xNzA5MTExOTE3 +MDdaFw00OTEyMzEyMzU5NTlaMB4xHDAaBgNVBAMME0FXUyBJb1QgQ2VydGlmaWNh +dGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWJaW0JqRg8pMYZm6L +fSuMlGzAmElbArKDXe4f+LA3dzsSZG7ZxX6p/yEcPwx5dMtJjhq1BOlJu/pL+8Lk +JkfluUeVt7oemdRJN1A/gcfwN+OY7bT1RQ3cGbeCZP5Y+APcfS1Cag25i0E9gweI +Om9aEDb23hAr02FosQQjeaDOHpz4QelPnCGvyiQAktxjyG77RXRg0H9csgPwkklc +fnEt0z9Bsh9dqdH5R6tkdJz8oTlbBFC5VLu20Kcu1LdG82GIJ6p24uXcJLKNWcsm +6Cc/nqxfxTkzKrgI+4si4Yya/nUJSkTYnnFW8zgk3Fw8dNCnpfMfgyZ0mhoXOvFt +7iKPAgMBAAGjYDBeMB8GA1UdIwQYMBaAFKQWUtvRdE8V1KemiV6qOWgmc+86MB0G +A1UdDgQWBBRkSSPHlb6NyJff0KbedYJCRIxFXzAMBgNVHRMBAf8EAjAAMA4GA1Ud +DwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAfptO2uTC3w1r5dIsv/CaURns +xGyvOBKKwl3kZdSMDSvRYpktVBSbQLMcBx35eutvlc/ICgV0PoBUKtcSFuYSHP7n +4zPSU7mDoAaX3sikLLPzZMxHmWalhJMKezl9leRJsJKPa7YTqelaaZAuq6w8G6x8 +Q+1LIeSUrPr0yN4+uCW1VdtZT6AVYD+rnjLhmUx6HvhKSbByR1oMsuDExckTpIAO +TOpmQ2jB7xISa2n9zCgndqZd3TsVhOKtQ6kAWw208O6aHhEcLamQiv2X2XgZhbZg +slJkauJ8k+s9Uv+I/0pBcTfWathGsnuKXogIlqKRud6J0Mv4lZqHb0Oq/Kp3tg== +-----END CERTIFICATE----- diff --git a/components/awsiot/test/1cbf751210-private.pem.key b/components/awsiot/test/1cbf751210-private.pem.key new file mode 100644 index 0000000..6a9c9b0 --- /dev/null +++ b/components/awsiot/test/1cbf751210-private.pem.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAliWltCakYPKTGGZui30rjJRswJhJWwKyg13uH/iwN3c7EmRu +2cV+qf8hHD8MeXTLSY4atQTpSbv6S/vC5CZH5blHlbe6HpnUSTdQP4HH8DfjmO20 +9UUN3Bm3gmT+WPgD3H0tQmoNuYtBPYMHiDpvWhA29t4QK9NhaLEEI3mgzh6c+EHp +T5whr8okAJLcY8hu+0V0YNB/XLID8JJJXH5xLdM/QbIfXanR+UerZHSc/KE5WwRQ +uVS7ttCnLtS3RvNhiCeqduLl3CSyjVnLJugnP56sX8U5Myq4CPuLIuGMmv51CUpE +2J5xVvM4JNxcPHTQp6XzH4MmdJoaFzrxbe4ijwIDAQABAoIBAQCSlji7tApBuDHR +3ZdJSa/ttK6kLUlYuD5uMJMd1Z682APtBe6PX9g0waeiuw9DuLoLmtgKKLxVx1cr +PaVdNt50sjnoOpJT890kigMnrV308aubj19fIcbRPq5BeLY1SBYE+pToRUAXCJRu +KHF/F4XFCRWQWOay0tFD86ZVuBY9hHcw1148hfMcQK7aDjrA1PKStAFi4gqeTcm+ +UNFa7HNHq4LG7fuaEsmd9iBh9gooWsJiSmbcrG3knXwVJd2DuaTqou9jQqr/qQae +CyB3uDEwbhSLx8ypMsiqSvoLO3qMRh/q359SfPnQCUS8EcbBELaOuSjE/em7DyPn +wDnNbkpBAoGBANebbUx/Vmf8xAlro+aHqP4RFVMrCZNwbZMd05nA4nsZzSUo5ejq +bgKzqcHHWvFDaxivO+33V4aJhId8NpfTN/3gHg+zZVAQHsJsPw7D7Wj/3yI2bfH+ +R3NH823YWS2St4G2qua+u53rslnVUNFLx5mFVfN+pByt8FWkkDgzNFqvAoGBALJG +vQiy2xYmq+Adg224La/u1LeTD2MGcdYqbQiZu8bhller5MwOweP4bvFU1NYGb7Ad +7xZim0mWEE0XXFKeivAWrO2GW6zTZaV1CzOjkOQzWxfV7vLcNd79ngJGbvs6EE2e +ZYDgvuQfk7QM1lr1xKKVt143iFQJLmw5lEZ/DS4hAoGAfoIOUdJtqrpfdH+aPgvf +lqQDdTdNeRuAz8+ydwb8XOq4ulMTA+V6A0/UDYWh0OqUDnnTmj+FNcW+45h4mAEx +W1+DhAbpLV8oDUBih5Fi3jc0f+ib/mALIJNZPFyzhtANqKi8AoRrpa/EiH1n3Eaw +qV3ZHvRx6voMiNP0Y2V4FLUCgYAHgrVqDWbveveYvIWR9MVv+QbbKQXn7RiUpjrr +ttZTXaOg0+wSsLh4azn5TtKcpa7E463z6nmSUxEivk40aNt/m+TzKMrp8AoDO3ga +V9S92HAJBAlKD/7xAwxKGj+Is/yF2Jt8H3vLTo1Bc50APgRnuRj9jidfKvfatV5K +zgV3IQKBgQDN27WFS8rnhM6tgq+hwCoecPQjomHQnTb/RR6doSBIYh7sTm9iuFSi +LjEfl1cGGaE2GP+SyPb2kvLnQSymd/S5LwffO33p1yGyhTXtl0vF7sy3VggBtpJl +8dNyo8v+IIYgmxZ0OT6YmCQZgi9bsJVEGmWnSn4iX1CGQXcAmU7XCg== +-----END RSA PRIVATE KEY----- diff --git a/components/awsiot/test/1cbf751210-public.pem.key b/components/awsiot/test/1cbf751210-public.pem.key new file mode 100644 index 0000000..78f9906 --- /dev/null +++ b/components/awsiot/test/1cbf751210-public.pem.key @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAliWltCakYPKTGGZui30r +jJRswJhJWwKyg13uH/iwN3c7EmRu2cV+qf8hHD8MeXTLSY4atQTpSbv6S/vC5CZH +5blHlbe6HpnUSTdQP4HH8DfjmO209UUN3Bm3gmT+WPgD3H0tQmoNuYtBPYMHiDpv +WhA29t4QK9NhaLEEI3mgzh6c+EHpT5whr8okAJLcY8hu+0V0YNB/XLID8JJJXH5x +LdM/QbIfXanR+UerZHSc/KE5WwRQuVS7ttCnLtS3RvNhiCeqduLl3CSyjVnLJugn +P56sX8U5Myq4CPuLIuGMmv51CUpE2J5xVvM4JNxcPHTQp6XzH4MmdJoaFzrxbe4i +jwIDAQAB +-----END PUBLIC KEY----- diff --git a/components/awsiot/test/component.mk b/components/awsiot/test/component.mk new file mode 100644 index 0000000..7b30d19 --- /dev/null +++ b/components/awsiot/test/component.mk @@ -0,0 +1,8 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive + +COMPONENT_EMBED_TXTFILES := 1cbf751210-certificate.pem.crt +COMPONENT_EMBED_TXTFILES += 1cbf751210-private.pem.key \ No newline at end of file diff --git a/components/awsiot/test/test_awsiot.c b/components/awsiot/test/test_awsiot.c new file mode 100644 index 0000000..6cc1d95 --- /dev/null +++ b/components/awsiot/test/test_awsiot.c @@ -0,0 +1,61 @@ +#include +#include +#include +#include "esp_log.h" +#include +#include "unity.h" +#include "oap_storage.h" +#include "awsiot.h" +#include "oap_test.h" + +static const char* TAG = "test_awsiot"; + +extern const uint8_t device_cert_pem_start[] asm("_binary_1cbf751210_certificate_pem_crt_start"); +extern const uint8_t device_cert_pem_end[] asm("_binary_1cbf751210_certificate_pem_crt_end"); + +extern const uint8_t device_pkey_pem_start[] asm("_binary_1cbf751210_private_pem_key_start"); +extern const uint8_t device_pkey_pem_end[] asm("_binary_1cbf751210_private_pem_key_end"); + +static esp_err_t publish() { + oap_meas meas = { + .local_time = 1505156826 + }; + + oap_sensor_config_t sensor_config = { + .0 + }; + return awsiot_send(&meas, &sensor_config); +} + +static void setup() { + awsiot_config_t* awsiot_config = get_awsiot_config(); + awsiot_config->thingName="test_device_1"; + awsiot_config->endpoint="a32on3oilq3poc.iot.eu-west-1.amazonaws.com"; + awsiot_config->port=8443; + awsiot_config->cert=str_make((void*)device_cert_pem_start, device_cert_pem_end-device_cert_pem_start); + awsiot_config->pkey=str_make((void*)device_pkey_pem_start, device_pkey_pem_end-device_pkey_pem_start); + +} + + +TEST_CASE("publish results to awsiot", "awsiot") +{ + setup(); + test_require_wifi(); + size_t curr_heap = 0; + size_t prev_heap = 0; + + /* + * heap consumption goes to 0 after ~40 requests + */ + for (int i = 0; i < 1; i++) { + curr_heap = xPortGetFreeHeapSize(); + ESP_LOGW(TAG, "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); + prev_heap = curr_heap; + TEST_ESP_OK(publish()); + delay(1000); + } + + free(get_awsiot_config()->cert); + free(get_awsiot_config()->pkey); +} diff --git a/components/bootwifi/Kconfig b/components/bootwifi/Kconfig index 74043e6..1e24cb9 100644 --- a/components/bootwifi/Kconfig +++ b/components/bootwifi/Kconfig @@ -1,11 +1,4 @@ menu "OAP WIFI" - -config OAP_CONTROL_PANEL - int "enable control panel" - default 1 - help - Enable web-based control panel where you can configure various parameters of the sensor, - including wifi and data publishing settings config OAP_AP_PASSWORD string "AccessPoint password" diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 5779696..26876a7 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -26,8 +26,8 @@ #include #include #include -#include #include +#include "bootwifi.h" #include "mongoose.h" #include "bootwifi.h" #include "sdkconfig.h" @@ -35,6 +35,7 @@ #include "http_utils.h" #include "oap_common.h" #include "oap_storage.h" +#include "freertos/event_groups.h" /** * based on https://github.com/nkolban/esp32-snippets/tree/master/networking/bootwifi @@ -49,35 +50,39 @@ extern const uint8_t index_html_start[] asm("_binary_index_html_start"); extern const uint8_t index_html_end[] asm("_binary_index_html_end"); -#define SSID_SIZE (32) // Maximum SSID size -#define PASSWORD_SIZE (64) // Maximum password size #define OAP_ACCESS_POINT_IP "192.168.1.1" #define OAP_ACCESS_POINT_NETMASK "255.255.255.0" -typedef struct { - char ssid[SSID_SIZE]; - char password[PASSWORD_SIZE]; - tcpip_adapter_ip_info_t ipInfo; // Optional static IP information -} oc_wifi_t; +static uint8_t _enable_control_panel; typedef uint8_t u8_t; typedef uint16_t u16_t; static int g_mongooseStarted = 0; // Has the mongoose server started? static int g_mongooseStopRequest = 0; // Request to stop the mongoose server. -static int reboot_in_progress = 0; // Forward declarations +static int _sntp_initialised = 0; static int is_station = 0; static void become_access_point(); static void restore_wifi_setup(); static char tag[] = "wifi"; +/* FreeRTOS event group to signal when we are connected & ready to make a request */ +static EventGroupHandle_t wifi_event_group = NULL; + +/* The event group allows multiple bits for each event, + but we only care about one event - are we connected + to the AP with an IP? */ +const int CONNECTED_BIT = 0x00000001; //BIT0 + static void initialize_sntp(void) { + if (_sntp_initialised) return; + _sntp_initialised = 1; ESP_LOGI(tag, "Initializing SNTP"); sntp_setoperatingmode(SNTP_OPMODE_POLL); sntp_setservername(0, "pool.ntp.org"); @@ -106,8 +111,7 @@ static void handler_get_config(struct mg_connection *nc, struct http_message *me static void handler_reboot(struct mg_connection *nc) { mg_send_head(nc, 200, 0, "Content-Type: text/plain"); ESP_LOGW(tag, "received reboot request!"); - reboot_in_progress = 1; - esp_restart(); + oap_reboot(); } static void handler_set_config(struct mg_connection *nc, struct http_message *message) { @@ -225,11 +229,11 @@ int set_access_point_ip() } static void start_mongoose() { - if (CONFIG_OAP_CONTROL_PANEL) { + if (_enable_control_panel) { if (!g_mongooseStarted) { g_mongooseStarted = 1; - xTaskCreatePinnedToCore(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, DEFAULT_TASK_PRIORITY+1, NULL, 0); - //xTaskCreate(&mongooseTask, "bootwifi_mongoose_task", 10000, NULL, 5, NULL); + //xTaskCreatePinnedToCore(&mongooseTask, "mongoose_task", 10000, NULL, DEFAULT_TASK_PRIORITY+1, NULL, 0); + xTaskCreate(&mongooseTask, "mongoose_task", 10000, NULL, DEFAULT_TASK_PRIORITY+1, NULL); } } else { ESP_LOGW(tag, "control panel disabled by config flag"); @@ -255,12 +259,13 @@ static void start_mongoose() { * SYSTEM_EVENT_WIFI_READY */ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { - if (reboot_in_progress) return ESP_OK; //ignore - trying to reconnect now will crash + if (is_reboot_in_progress()) return ESP_OK; //ignore - trying to reconnect now will crash // Your event handling code here... switch(event->event_id) { // When we have started being an access point, then start being a web server. case SYSTEM_EVENT_AP_START: { // Handle the AP start event + xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); esp_err_t err; if ((err=set_access_point_ip()) != ESP_OK) { ESP_LOGW(tag, "failed to set ip address [err %x], use default", err); @@ -280,6 +285,10 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { break; } // SYSTEM_EVENT_AP_START + case SYSTEM_EVENT_AP_STOP : { + break; + } + // If we fail to connect to an access point as a station, become an access point. case SYSTEM_EVENT_STA_DISCONNECTED: { ESP_LOGD(tag, "Station disconnected - reconnecting"); @@ -290,19 +299,28 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { * * TODO remember successful connection to wifi and do not fallback to AP if we ever managed connect to wifi. */ + xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); restore_wifi_setup(); break; } case SYSTEM_EVENT_STA_GOT_IP: { - ESP_LOGD(tag, "********************************************"); - ESP_LOGD(tag, "* Connected with WIFI network") - ESP_LOGD(tag, "* Sensor IP address: " IPSTR, IP2STR(&event->event_info.got_ip.ip_info.ip)); - ESP_LOGD(tag, "********************************************"); - - initialize_sntp(); - start_mongoose(); - + //at least in sdk2.1, this event is triggered even in AP mode! + if (is_station) { + ESP_LOGD(tag, "********************************************"); + ESP_LOGD(tag, "* Connected with WIFI network") + ESP_LOGD(tag, "* Sensor IP address: " IPSTR, IP2STR(&event->event_info.got_ip.ip_info.ip)); + ESP_LOGD(tag, "********************************************"); + + xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); + initialize_sntp(); + /* + * TODO if we attempt to make an SSL request (by OTA, didn't check others) when wifi is in AP mode, + * mongoose goes into infinite loop; + * socket.accept fails immediately. this may be network stack bug. + */ + start_mongoose(); + } break; } @@ -316,7 +334,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { /** * Retrieve the connection info. A rc==0 means ok. */ -static int get_config(oc_wifi_t *oc_wifi) { +static esp_err_t get_config(oc_wifi_t *oc_wifi) { memset(oc_wifi, 0, sizeof(oc_wifi_t)); ESP_LOGD(tag, "retrieve wifi config"); cJSON* wifi = storage_get_config("wifi"); @@ -341,12 +359,6 @@ static int get_config(oc_wifi_t *oc_wifi) { ESP_LOGD(tag, "wifi.ip:" IPSTR, IP2STR(&oc_wifi->ipInfo.ip)); ESP_LOGD(tag, "wifi.gateway:" IPSTR, IP2STR(&oc_wifi->ipInfo.gw)); ESP_LOGD(tag, "wifi.netmask:" IPSTR, IP2STR(&oc_wifi->ipInfo.netmask)); - - if (strlen(oc_wifi->ssid) == 0) { - ESP_LOGW(tag, "NULL ssid detected"); - return ESP_FAIL; - } - return ESP_OK; } @@ -405,17 +417,21 @@ static int is_button_pressed() { return gpio_get_level(CONFIG_OAP_BTN_0_PIN); } -static void restore_wifi_setup() { +static void restore_wifi_setup(oc_wifi_t* oc_wifi_config) { if (is_button_pressed()) { - ESP_LOGI(tag, "GPIO override detected"); + ESP_LOGI(tag, "forced AP mode"); become_access_point(); } else { - oc_wifi_t oc_wifi = {}; - int rc = get_config(&oc_wifi); - if (rc == 0) { - become_station(&oc_wifi); - } else { + oc_wifi_t oc_wifi; + if (oc_wifi_config == NULL) { + oc_wifi_config = &oc_wifi; + get_config(oc_wifi_config); + } + if (strlen(oc_wifi_config->ssid) == 0) { + ESP_LOGW(tag, "No WIFI SSID configured"); become_access_point(); + } else { + become_station(oc_wifi_config); } } } @@ -428,15 +444,29 @@ static void init_wifi() { ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); } -void bootWiFi() { - ESP_LOGD(tag, ">> bootWiFi"); +void wifi_boot(oc_wifi_t* wifi_config, uint8_t enable_control_panel) { + if (wifi_event_group) { + ESP_LOGD(tag, "wifi already booted"); + return; + } + ESP_LOGD(tag, "wifi_boot start"); + wifi_event_group = xEventGroupCreate(); + _enable_control_panel = enable_control_panel; gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); init_wifi(); - restore_wifi_setup(); + restore_wifi_setup(wifi_config); + + ESP_LOGD(tag, "wifi_boot done"); +} + +esp_err_t wifi_connected_wait_for(uint32_t ms) { + return xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, ms ? ms / portTICK_PERIOD_MS : portMAX_DELAY) & CONNECTED_BIT ? ESP_OK : ESP_FAIL; +} - ESP_LOGD(tag, "<< bootWiFi"); +esp_err_t wifi_connected_wait() { + return wifi_connected_wait_for(0); } diff --git a/components/bootwifi/include/bootwifi.h b/components/bootwifi/include/bootwifi.h index 897aa07..ec264a6 100644 --- a/components/bootwifi/include/bootwifi.h +++ b/components/bootwifi/include/bootwifi.h @@ -23,6 +23,20 @@ #ifndef MAIN_BOOTWIFI_H_ #define MAIN_BOOTWIFI_H_ -void bootWiFi(); +#include + +#define SSID_SIZE (32) // Maximum SSID size +#define PASSWORD_SIZE (64) // Maximum password size + + +typedef struct { + char ssid[SSID_SIZE]; + char password[PASSWORD_SIZE]; + tcpip_adapter_ip_info_t ipInfo; // Optional static IP information +} oc_wifi_t; + +void wifi_boot(oc_wifi_t* wifi_config, uint8_t enable_control_panel); +esp_err_t wifi_connected_wait(); +esp_err_t wifi_connected_wait_for(uint32_t ms); #endif /* MAIN_BOOTWIFI_H_ */ diff --git a/components/esp-request/LICENSE b/components/esp-request/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/components/esp-request/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/components/esp-request/README.md b/components/esp-request/README.md new file mode 100644 index 0000000..179af74 --- /dev/null +++ b/components/esp-request/README.md @@ -0,0 +1,84 @@ +# Lightweight HTTP client for ESP32 +## Example + +```cpp +int download_callback(request_t *req, char *data, int len) +{ + req_list_t *found = req->response->header; + while(found->next != NULL) { + found = found->next; + ESP_LOGI(TAG,"Response header %s:%s", (char*)found->key, (char*)found->value); + } + //or + found = req_list_get_key(req->response->header, "Content-Length"); + if(found) { + ESP_LOGI(TAG,"Get header %s:%s", (char*)found->key, (char*)found->value); + } + ESP_LOGI(TAG,"%s", data); + return 0; +} +static void request_task(void *pvParameters) +{ + request_t *req; + int status; + xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, portMAX_DELAY); + ESP_LOGI(TAG, "Connected to AP, freemem=%d",esp_get_free_heap_size()); + // vTaskDelay(1000/portTICK_RATE_MS); + req = req_new("http://httpbin.org/post"); + //or + //request *req = req_new("https://google.com"); //for SSL + req_setopt(req, REQ_SET_METHOD, "POST"); + req_setopt(req, REQ_SET_POSTFIELDS, "test=data&test2=data2"); + req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback); + status = req_perform(req); + req_clean(req); + vTaskDelete(NULL); +} + +``` + +## Usage +- Create ESP-IDF application https://github.com/espressif/esp-idf-template +- Clone `git submodule add https://github.com/tuanpmt/esp-request components/esp-request` +- Example `esp-request` application: https://github.com/tuanpmt/esp-request-app +- OTA application using `esp-request`: https://github.com/tuanpmt/esp32-fota + +## API + +### Function +- `req_new` +- `req_setopt` +- `req_clean` + +### Options for `req_setopt` +- REQ_SET_METHOD - `req_setopt(req, REQ_SET_METHOD, "GET");//or POST/PUT/DELETE` +- REQ_SET_HEADER - `req_setopt(req, REQ_SET_HEADER, "HeaderKey: HeaderValue");` +- REQ_SET_HOST - `req_setopt(req, REQ_SET_HOST, "google.com"); //or 192.168.0.1` +- REQ_SET_PORT - `req_setopt(req, REQ_SET_PORT, "80");//must be string` +- REQ_SET_PATH - `req_setopt(req, REQ_SET_PATH, "/path");` +- REQ_SET_SECURITY +- REQ_SET_URI - `req_setopt(req, REQ_SET_URI, "http://uri.com"); //will replace host, port, path, security and Auth if present` +- REQ_SET_DATAFIELDS +- REQ_SET_UPLOAD_LEN - Not effect for now +- REQ_FUNC_DOWNLOAD_CB - `req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback);` +- REQ_FUNC_UPLOAD_CB +- REQ_REDIRECT_FOLLOW - `req_setopt(req, REQ_REDIRECT_FOLLOW, "true"); //or "false"` + +### URI format +- Follow this: https://en.wikipedia.org/wiki/Uniform_Resource_Identifier + +## Todo +- [x] Support URI parser +- [x] Follow redirect +- [x] Support SSL +- [x] Support Set POST Fields (simple) +- [ ] Support Basic Auth +- [ ] Support Upload multipart +- [ ] Support Cookie + +## Known Issues +- ~~Memory leak~~ +- Uri parse need more work + +## Authors +- [Tuan PM](https://twitter.com/tuanpmt) diff --git a/components/esp-request/component.mk b/components/esp-request/component.mk new file mode 100644 index 0000000..17fe35e --- /dev/null +++ b/components/esp-request/component.mk @@ -0,0 +1,6 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) + + diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c new file mode 100644 index 0000000..7cd23eb --- /dev/null +++ b/components/esp-request/esp_request.c @@ -0,0 +1,753 @@ +/* +* @2017 +* Tuan PM +*/ + +#include +#include +#include +#include "esp_request.h" +#include "esp_log.h" +#include "esp_system.h" +#include "esp_err.h" + +#include "lwip/sockets.h" +#include "lwip/dns.h" +#include "lwip/netdb.h" +#include "lwip/igmp.h" +#include "req_list.h" + +#include "mbedtls/platform.h" +#include "mbedtls/net.h" +#include "mbedtls/debug.h" +#include "mbedtls/ssl.h" +#include "mbedtls/ssl_internal.h" +#include "mbedtls/entropy.h" +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/error.h" +#include "mbedtls/certs.h" + +#include "oap_common.h" + +#define TAG "HTTP_REQ" + +static const char *pers = "esp32-tls"; + +#define REQ_BUFFER_LEN (2048) +#define REQ_CHECK(check, log, ret) if(check) {ESP_LOGE(TAG, log);ret;} + +#ifdef MBEDTLS_DEBUG_C + +#define MBEDTLS_DEBUG_LEVEL 4 + +/* mbedtls debug function that translates mbedTLS debug output +to ESP_LOGx debug output. + +MBEDTLS_DEBUG_LEVEL 4 means all mbedTLS debug output gets sent here, +and then filtered to the ESP logging mechanism. +*/ +static void mbedtls_debug(void *ctx, int level, + const char *file, int line, + const char *str) +{ + const char *MBTAG = "mbedtls"; + char *file_sep; + + /* Shorten 'file' from the whole file path to just the filename + + This is a bit wasteful because the macros are compiled in with + the full _FILE_ path in each case. + */ + file_sep = rindex(file, '/'); + if (file_sep) { + file = file_sep + 1; + } + + switch (level) { + case 1: + printf( "%s:%d %s", file, line, str); + break; + case 2: + case 3: + printf( "%s:%d %s", file, line, str); + break; + case 4: + printf( "%s:%d %s", file, line, str); + break; + default: + printf( "Unexpected log level %d: %s", level, str); + break; + } +} + +#endif + + +static int resolve_dns(const char *host, struct sockaddr_in *ip) { + struct hostent *he; + struct in_addr **addr_list; + he = gethostbyname(host); + if(he == NULL) + return -1; + addr_list = (struct in_addr **)he->h_addr_list; + if(addr_list[0] == NULL) + return -1; + ip->sin_family = AF_INET; + memcpy(&ip->sin_addr, addr_list[0], sizeof(ip->sin_addr)); + return 0; +} + +static char *http_auth_basic_encode(const char *username, const char *password) +{ + return NULL; +} + + +static int nossl_connect(request_t *req) +{ + int socket; + struct sockaddr_in remote_ip; + struct timeval tv; + req_list_t *host, *port, *timeout; + bzero(&remote_ip, sizeof(struct sockaddr_in)); + //if stream_host is not ip address, resolve it AF_INET,servername,&serveraddr.sin_addr + host = req_list_get_key(req->opt, "host"); + REQ_CHECK(host == NULL, "host = NULL", return -1); + + if(inet_pton(AF_INET, (const char*)host->value, &remote_ip.sin_addr) != 1) { + if(resolve_dns((const char*)host->value, &remote_ip) < 0) { + return -1; + } + } + + socket = socket(PF_INET, SOCK_STREAM, 0); + REQ_CHECK(socket < 0, "socket failed", return -1); + + port = req_list_get_key(req->opt, "port"); + if(port == NULL) + return -1; + + remote_ip.sin_family = AF_INET; + remote_ip.sin_port = htons(atoi(port->value)); + + tv.tv_sec = 10; //default timeout is 10 seconds + timeout = req_list_get_key(req->opt, "timeout"); + if(timeout) { + tv.tv_sec = atoi(timeout->value); + } + tv.tv_usec = 0; + setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + + ESP_LOGD(TAG, "[sock=%d],connecting to server IP:%s,Port:%s...", + socket, ipaddr_ntoa((const ip_addr_t*)&remote_ip.sin_addr.s_addr), (char*)port->value); + if(connect(socket, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr)) != 0) { + close(socket); + return -1; + } + req->socket = socket; + return socket; +} + +void req_free_x509_crt(mbedtls_x509_crt* crt) { + mbedtls_x509_crt_free(crt); + free(crt); +} + +mbedtls_x509_crt* req_parse_x509_crt(unsigned char *buf, size_t buflen) { + mbedtls_x509_crt* crt = malloc(sizeof(mbedtls_x509_crt)); + mbedtls_x509_crt_init(crt); + esp_err_t ret = mbedtls_x509_crt_parse(crt, buf, buflen); + if (ret == ESP_OK) { + return crt; + } else { + ESP_LOGW(TAG, "failed to parse x509 cert: 0x%x", ret); + req_free_x509_crt(crt); + return NULL; + } +} + +void req_free_pkey(mbedtls_pk_context* pkey) { + mbedtls_pk_free(pkey); + free(pkey); +} + +mbedtls_pk_context* req_parse_pkey(unsigned char* buf, size_t buflen) { + mbedtls_pk_context* pkey = malloc(sizeof(mbedtls_pk_context)); + mbedtls_pk_init(pkey); + esp_err_t ret = mbedtls_pk_parse_key(pkey, buf, buflen, NULL, 0); + if (ret == ESP_OK) { + return pkey; + } else { + ESP_LOGW(TAG, "failed to parse key: 0x%x", -ret); + req_free_pkey(pkey); + return NULL; + } +} + +static int mbedtls_connect(request_t *req) +{ + nossl_connect(req); + REQ_CHECK(req->socket < 0, "socket failed", return -1); + int ret; + + req_ssl* ssl = malloc(sizeof(req_ssl)); + memset(ssl, 0, sizeof(req_ssl)); + req->ssl = ssl; + mbedtls_ssl_init(&ssl->ssl_ctx); + mbedtls_ssl_config_init(&ssl->ssl_conf); + mbedtls_ctr_drbg_init(&ssl->drbg_ctx); + + do { + ESP_LOGD(TAG, "Seeding the random number generator"); + mbedtls_entropy_init(&ssl->entropy_ctx); + + if ((ret = mbedtls_ctr_drbg_seed(&ssl->drbg_ctx, mbedtls_entropy_func, + &ssl->entropy_ctx, (const unsigned char *) pers, strlen(pers))) != ESP_OK) { + ESP_LOGE(TAG, "mbedtls_ctr_drbg_seed returned %d", -ret); + break; + } + + + /* MBEDTLS_SSL_VERIFY_REQUIRED if a CA certificate is defined on Arduino IDE and + MBEDTLS_SSL_VERIFY_NONE if not. + */ + if (req->ca_cert) { + ESP_LOGD(TAG, "Set CA certificate"); + mbedtls_ssl_conf_authmode(&ssl->ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); + mbedtls_ssl_conf_ca_chain(&ssl->ssl_conf, req->ca_cert, NULL); + //mbedtls_ssl_conf_verify(&ssl->ssl_ctx, my_verify, NULL ); + } else { + mbedtls_ssl_conf_authmode(&ssl->ssl_conf, MBEDTLS_SSL_VERIFY_NONE); + } + + if (req->client_cert && req->client_key) { + ESP_LOGD(TAG, "Set client cert/pkey"); + if ((ret = mbedtls_ssl_conf_own_cert(&ssl->ssl_conf, req->client_cert, req->client_key)) != ESP_OK) { + ESP_LOGW(TAG, "mbedtls_ssl_conf_own_cert returned 0x%x", -ret); + break; + } + } + + // Hostname set here should match CN in server certificate + if((ret = mbedtls_ssl_set_hostname(&ssl->ssl_ctx, req_list_get_key(req->opt, "host")->value)) != ESP_OK) + { + ESP_LOGW(TAG, "mbedtls_ssl_set_hostname returned 0x%x", -ret); + break; + } + + ESP_LOGD(TAG, "Setting up the SSL/TLS structure..."); + + if ((ret = mbedtls_ssl_config_defaults(&ssl->ssl_conf, + MBEDTLS_SSL_IS_CLIENT, + MBEDTLS_SSL_TRANSPORT_STREAM, + MBEDTLS_SSL_PRESET_DEFAULT)) != ESP_OK) { + ESP_LOGW(TAG, "mbedtls_ssl_config_defaults returned 0x%x", -ret); + break; + } + + mbedtls_ssl_conf_rng(&ssl->ssl_conf, mbedtls_ctr_drbg_random, &ssl->drbg_ctx); +#ifdef MBEDTLS_DEBUG_C + mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL); + mbedtls_ssl_conf_dbg(&ssl->ssl_conf, mbedtls_debug, NULL); +#endif + + if ((ret = mbedtls_ssl_setup(&ssl->ssl_ctx, &ssl->ssl_conf)) != ESP_OK) { + ESP_LOGW(TAG, "mbedtls_ssl_setup returned 0x%x", -ret); + break; + } + + mbedtls_ssl_set_bio(&ssl->ssl_ctx, &req->socket, mbedtls_net_send, mbedtls_net_recv, NULL ); + + ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); + + while ((ret = mbedtls_ssl_handshake(&ssl->ssl_ctx)) != ESP_OK) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { + ESP_LOGW(TAG, "mbedtls_ssl_handshake returned 0x%x", -ret); + break; + } + vTaskDelay(10 / portTICK_PERIOD_MS); + vPortYield(); + } + if (ret != ESP_OK) break; + + if (req->client_cert && req->client_key) { + if ((ret = mbedtls_ssl_get_record_expansion(&ssl->ssl_ctx)) >= 0) { + ESP_LOGD(TAG, "Record expansion is %d\n", ret); + } else { + ESP_LOGD(TAG, "Record expansion is unknown (compression)"); //not error + } + } + + ESP_LOGD(TAG, "Verifying peer X.509 certificate..."); + + if ((ret = mbedtls_ssl_get_verify_result(&ssl->ssl_ctx)) != ESP_OK) { + ESP_LOGE(TAG, "Failed to verify peer certificate!"); + char buf[512]; + bzero(buf, sizeof(buf)); + mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", ret); + ESP_LOGW(TAG, "verification info: %s", buf); + break; + } else { + ESP_LOGD(TAG, "Certificate verified."); + } + + } while (0); + return 0; +} + +static int mbedtls_write(request_t *req, char *buffer, int len) +{ + //fwrite(buffer, len, 1, stdout); + int ret = -1; + while ((ret = mbedtls_ssl_write(&req->ssl->ssl_ctx, (unsigned char *)buffer, len)) <= 0) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { + ESP_LOGE(TAG, "mbedtls_ssl_write returned 0x%x", ret); + break; + } + } + return ret; +} + +static int nossl_write(request_t *req, char *buffer, int len) +{ + return write(req->socket, buffer, len); +} + +static int mbedtls_read(request_t *req, char *buffer, int len) +{ + int ret; + do { + ret = mbedtls_ssl_read(&req->ssl->ssl_ctx, (unsigned char *)buffer, len); + if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { + continue; + } else if (ret == -0x4C) { + ESP_LOGW(TAG, "timeout"); + break; + } else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { + ESP_LOGW(TAG, "peer close"); + break; + } else { + break; + } + } while (1); + return ret; +} + +static int nossl_read(request_t *req, char *buffer, int len) +{ + return read(req->socket, buffer, len); +} + +static int mbedtls_close(request_t *req) +{ + ESP_LOGD(TAG, "Cleaning SSL connection."); + close(req->socket); + + if (req->ssl) { + mbedtls_ssl_free(&req->ssl->ssl_ctx); + mbedtls_ssl_config_free(&req->ssl->ssl_conf); + mbedtls_ctr_drbg_free(&req->ssl->drbg_ctx); + mbedtls_entropy_free(&req->ssl->entropy_ctx); + free(req->ssl); + req->ssl = NULL; + } + + return 0; +} + +static int nossl_close(request_t *req) +{ + return close(req->socket); +} +static int req_setopt_from_uri(request_t *req, const char* uri) +{ + //TODO: relative path + parsed_uri_t *puri; + char port[] = "443"; + puri = parse_uri(uri); + REQ_CHECK(puri == NULL, "Error parse uri", return -1); + + if(strcasecmp(puri->scheme, "https") == 0) { + req_setopt(req, REQ_SET_SECURITY, "true"); + } else { + req_setopt(req, REQ_SET_SECURITY, "false"); + strcpy(port, "80"); + port[2] = 0; + } + + if(puri->username && puri->password) { + char *auth = http_auth_basic_encode(puri->username, puri->password); + if(auth) { + req_setopt(req, REQ_SET_HEADER, auth); + free(auth); + } + + } + + req_setopt(req, REQ_SET_HOST, puri->host); + req_setopt(req, REQ_SET_PATH, puri->path); + //port + if(puri->port) { + req_setopt(req, REQ_SET_PORT, puri->port); + } else { + req_setopt(req, REQ_SET_PORT, port); + } + free_parsed_uri(puri); + return 0; +} +request_t *req_new_with_buf(const char *uri, size_t buffer_size) +{ + request_t *req = malloc(sizeof(request_t)); + + REQ_CHECK(req == NULL, "Error allocate req", return NULL); + memset(req, 0, sizeof(request_t)); + + req->buffer = malloc(sizeof(req_buffer_t)); + req->buffer_size = buffer_size; + REQ_CHECK(req->buffer == NULL, "Error allocate buffer", return NULL); + memset(req->buffer, 0, sizeof(req_buffer_t)); + + req->buffer->data = malloc(req->buffer_size + 1); //1 byte null for end of string + //TODO: Free req before return + REQ_CHECK(req->buffer->data == NULL, "Error allocate buffer", return NULL); + + req->opt = malloc(sizeof(req_list_t)); + memset(req->opt, 0, sizeof(req_list_t)); + req->header = malloc(sizeof(req_list_t)); + memset(req->header, 0, sizeof(req_list_t)); + + req->response = malloc(sizeof(response_t)); + REQ_CHECK(req->response == NULL, "Error create response", return NULL); + memset(req->response, 0, sizeof(response_t)); + + req->response->header = malloc(sizeof(req_list_t)); + REQ_CHECK(req->response->header == NULL, "Error create response header", return NULL); + memset(req->response->header, 0, sizeof(req_list_t)); + + req->ssl = NULL; + req->ca_cert = NULL; + req->client_cert = NULL; + req->client_key = NULL; + req->meta = NULL; + + req_setopt_from_uri(req, uri); + + req_setopt(req, REQ_REDIRECT_FOLLOW, "true"); + req_setopt(req, REQ_SET_METHOD, "GET"); + req_setopt(req, REQ_SET_HEADER, "User-Agent: ESP32 Http Client"); + return req; +} + + +request_t *req_new(const char *uri) { + return req_new_with_buf(uri, REQ_BUFFER_LEN); +} + +void req_setopt(request_t *req, REQ_OPTS opt, void* data) +{ + int post_len; + char len_str[10] = {0}; + req_list_t *tmp; + char *host_w_port = malloc(1024); + if(!req || !data) + return; + switch(opt) { + case REQ_SET_METHOD: + req_list_set_key(req->opt, "method", data); + break; + case REQ_SET_HEADER: + req_list_set_from_string(req->header, data); + break; + case REQ_SET_HOST: + req_list_set_key(req->opt, "host", data); + tmp = req_list_get_key(req->opt, "port"); + if(tmp != NULL) { + sprintf(host_w_port, "%s:%s", (char*)data, (char*)tmp->value); + } else { + sprintf(host_w_port, "%s", (char*)data); + } + req_list_set_key(req->header, "Host", host_w_port); + break; + case REQ_SET_PORT: + req_list_set_key(req->opt, "port", data); + tmp = req_list_get_key(req->opt, "host"); + if(tmp != NULL) { + sprintf(host_w_port, "%s:%s", (char*)tmp->value, (char*)data); + req_list_set_key(req->header, "Host", host_w_port); + } + + break; + case REQ_SET_PATH: + req_list_set_key(req->opt, "path", data); + break; + case REQ_SET_URI: + req_setopt_from_uri(req, data); + break; + case REQ_SET_SECURITY: + req_list_set_key(req->opt, "secure", data); + if(req_list_check_key(req->opt, "secure", "true")) { + ESP_LOGD(TAG, "Secure"); + req->_read = mbedtls_read; + req->_write = mbedtls_write; + req->_connect = mbedtls_connect; + req->_close = mbedtls_close; + } else { + req->_read = nossl_read; + req->_write = nossl_write; + req->_connect = nossl_connect; + req->_close = nossl_close; + } + + break; + case REQ_SET_POSTFIELDS: + req_list_set_key(req->header, "Content-Type", "application/x-www-form-urlencoded"); + req_list_set_key(req->opt, "method", "POST"); + case REQ_SET_DATAFIELDS: + post_len = strlen((char*)data); + sprintf(len_str, "%d", post_len); + req_list_set_key(req->opt, "postfield", data); + req_list_set_key(req->header, "Content-Length", len_str); + break; + case REQ_FUNC_UPLOAD_CB: + req->upload_callback = data; + break; + case REQ_FUNC_DOWNLOAD_CB: + req->download_callback = data; + break; + case REQ_REDIRECT_FOLLOW: + req_list_set_key(req->opt, "follow", data); + break; + default: + break; + } + free(host_w_port); +} +static int req_process_upload(request_t *req) +{ + int tx_write_len = 0; + req_list_t *found; + + + found = req_list_get_key(req->opt, "method"); + REQ_CHECK(found == NULL, "method required", return -1); + tx_write_len += sprintf(req->buffer->data + tx_write_len, "%s ", (char*)found->value); + + found = req_list_get_key(req->opt, "path"); + REQ_CHECK(found == NULL, "path required", return -1); + tx_write_len += sprintf(req->buffer->data + tx_write_len, "%s HTTP/1.1\r\n", (char*)found->value); + + //TODO: Check header len < REQ_BUFFER_LEN + found = req->header; + while(found->next != NULL) { + found = found->next; + tx_write_len += sprintf(req->buffer->data + tx_write_len, "%s: %s\r\n", (char*)found->key, (char*)found->value); + } + tx_write_len += sprintf(req->buffer->data + tx_write_len, "\r\n"); + + // ESP_LOGD(TAG, "Request header, len= %d, real_len= %d\r\n%s", tx_write_len, strlen(req->buffer->data), req->buffer->data); + + REQ_CHECK(req->_write(req, req->buffer->data, tx_write_len) < 0, "Error write header", return -1); + + found = req_list_get_key(req->opt, "postfield"); + if(found) { + ESP_LOGD(TAG, "Begin write %d bytes", strlen((char*)found->value)); + int bwrite = req->_write(req, (char*)found->value, strlen((char*)found->value)); + ESP_LOGD(TAG, "end write %d bytes", bwrite); + if(bwrite < 0) { + ESP_LOGE(TAG, "Error write"); + return -1; + } + } + + if(req->upload_callback) { + while((tx_write_len = req->upload_callback(req, (void *)req->buffer->data, req->buffer_size)) > 0) { + REQ_CHECK(req->_write(req, req->buffer->data, tx_write_len) < 0, "Error write data", return -1); + } + } + return 0; +} + +static int reset_buffer(request_t *req) +{ + req->buffer->bytes_read = 0; + req->buffer->bytes_write = 0; + req->buffer->at_eof = 0; + req->buffer->bytes_total = 0; + return 0; +} + +static int fill_buffer(request_t *req) +{ + int bread; + int bytes_inside_buffer = req->buffer->bytes_write - req->buffer->bytes_read; + int buffer_free_bytes; + if(bytes_inside_buffer) + { + memmove((void*)req->buffer->data, (void*)(req->buffer->data + req->buffer->bytes_read), + bytes_inside_buffer); + req->buffer->bytes_read = 0; + req->buffer->bytes_write = bytes_inside_buffer; + if(req->buffer->bytes_write < 0) + req->buffer->bytes_write = 0; + ESP_LOGD(TAG, "move=%d, write=%d, read=%d", bytes_inside_buffer, req->buffer->bytes_write, req->buffer->bytes_read); + } + if(!req->buffer->at_eof) + { + //reset if buffer full + if(req->buffer->bytes_write == req->buffer->bytes_read) { + req->buffer->bytes_write = 0; + req->buffer->bytes_read = 0; + } + buffer_free_bytes = req->buffer_size - req->buffer->bytes_write; + ESP_LOGD(TAG, "Begin read %d bytes", buffer_free_bytes); + bread = req->_read(req, (void*)(req->buffer->data + req->buffer->bytes_write), buffer_free_bytes); + // ESP_LOGD(TAG, "bread = %d, bytes_write = %d, buffer_free_bytes = %d", bread, req->buffer->bytes_write, buffer_free_bytes); + ESP_LOGD(TAG, "End read, byte read= %d bytes", bread); + if(bread < 0) { + req->buffer->at_eof = 1; + return -1; + } + req->buffer->bytes_write += bread; + req->buffer->data[req->buffer->bytes_write] = 0;//terminal string + + if(bread == 0) { + req->buffer->at_eof = 1; + } + } + + return 0; +} + + +static char *req_readline(request_t *req) +{ + char *cr, *ret = NULL; + if(req->buffer->bytes_read + 2 > req->buffer->bytes_write) { + return NULL; + } + cr = strstr(req->buffer->data + req->buffer->bytes_read, "\r\n"); + if(cr == NULL) { + return NULL; + } + memset(cr, 0, 2); + ret = req->buffer->data + req->buffer->bytes_read; + req->buffer->bytes_read += (cr - (req->buffer->data + req->buffer->bytes_read)) + 2; + // ESP_LOGD(TAG, "next offset=%d", req->buffer->bytes_read); + return ret; +} +static int req_process_download(request_t *req) +{ + int process_header = 1, header_off = 0; + char *line; + req_list_t *content_len; + req->response->status_code = -1; + reset_buffer(req); + req_list_clear(req->response->header); + req->response->len = 0; + do { + fill_buffer(req); + if(process_header) { + while((line = req_readline(req)) != NULL) { + if(line[0] == 0) { + ESP_LOGD(TAG, "end process_idx=%d", req->buffer->bytes_read); + header_off = req->buffer->bytes_read; + process_header = 0; //end of http header + break; + } else { + if(req->response->status_code < 0) { + char *temp = strstr(line, "HTTP/1."); + if(temp) { + char statusCode[4] = { 0 }; + memcpy(statusCode, temp + 9, 3); + req->response->status_code = atoi(statusCode); + ESP_LOGD(TAG, "status code: %d", req->response->status_code); + } + } else { + req_list_set_from_string(req->response->header, line); + ESP_LOGD(TAG, "header line: %s", line); + } + } + } + } + + if(process_header == 0) + { + if(req->buffer->at_eof) { + fill_buffer(req); + } + + req->buffer->bytes_read = req->buffer->bytes_write; + content_len = req_list_get_key(req->response->header, "Content-Length"); + if(content_len) { + req->response->len = atoi(content_len->value); + } + if(req->response->len && req->download_callback && (req->buffer->bytes_write - header_off) != 0) { + if(req->download_callback(req, (void *)(req->buffer->data + header_off), req->buffer->bytes_write - header_off) < 0) break; + + req->buffer->bytes_total += req->buffer->bytes_write - header_off; + if(req->buffer->bytes_total == req->response->len) { + break; + } + } + header_off = 0; + if(req->response->len == 0) { + break; + } + + } + + } while(req->buffer->at_eof == 0); + return 0; +} + +int req_perform(request_t *req) +{ + do { + REQ_CHECK(req->_connect(req) < 0, "Error connnect", break); + REQ_CHECK(req_process_upload(req) < 0, "Error send request", break); + REQ_CHECK(req_process_download(req) < 0, "Error download", break); + + if((req->response->status_code == 301 || req->response->status_code == 302) && req_list_check_key(req->opt, "follow", "true")) { + req_list_t *found = req_list_get_key(req->response->header, "Location"); + if(found) { + req_list_set_key(req->header, "Referer", (const char*)found->value); + req_setopt_from_uri(req, (const char*)found->value); + ESP_LOGD(TAG, "Following: %s", (char*)found->value); + req->_close(req); + continue; + } + break; + } else { + break; + } + } while(1); + req->_close(req); + return req->response->status_code; +} + +void req_clean(request_t *req) +{ + req_list_clear(req->opt); + req_list_clear(req->header); + req_list_clear(req->response->header); + free(req->opt); + free(req->header); + free(req->response->header); + free(req->response); + free(req->buffer->data); + free(req->buffer); + free(req); +} + +void req_clean_incl_certs(request_t *req) { + req_clean(req); + if (req->ca_cert) { + req_free_x509_crt(req->ca_cert); + } + if (req->client_cert) { + req_free_x509_crt(req->client_cert); + } + if (req->client_key) { + req_free_pkey(req->client_key); + } +} diff --git a/components/esp-request/include/esp_request.h b/components/esp-request/include/esp_request.h new file mode 100644 index 0000000..d1e64c3 --- /dev/null +++ b/components/esp-request/include/esp_request.h @@ -0,0 +1,94 @@ +#ifndef _ESP_REQUEST_H_ +#define _ESP_REQUEST_H_ +#include "req_list.h" +#include "uri_parser.h" +#include "lwip/sockets.h" +#include "lwip/netdb.h" + +#include "mbedtls/ssl.h" +#include "mbedtls/entropy.h" +#include "mbedtls/ctr_drbg.h" + +typedef enum { + REQ_SET_METHOD = 0x01, + REQ_SET_HEADER, + REQ_SET_HOST, + REQ_SET_PORT, + REQ_SET_PATH, + REQ_SET_URI, + REQ_SET_SECURITY, + REQ_SET_POSTFIELDS, + REQ_SET_DATAFIELDS, + REQ_SET_UPLOAD_LEN, + REQ_FUNC_DOWNLOAD_CB, + REQ_FUNC_UPLOAD_CB, + REQ_REDIRECT_FOLLOW +} REQ_OPTS; + +typedef struct response_t { + req_list_t *header; + int status_code; + int len; +} response_t; + +typedef struct { + size_t buffer_length; + int bytes_read; + int bytes_write; + int bytes_total; + char *data; + int at_eof; +} req_buffer_t; + + +typedef struct { + mbedtls_ssl_context ssl_ctx; + mbedtls_ssl_config ssl_conf; + mbedtls_ctr_drbg_context drbg_ctx; + mbedtls_entropy_context entropy_ctx; +} req_ssl; + +typedef struct request_t { + req_list_t *opt; + req_list_t *header; + + req_buffer_t *buffer; + size_t buffer_size; + void *context; + int socket; + int (*_connect)(struct request_t *req); + int (*_read)(struct request_t *req, char *buffer, int len); + int (*_write)(struct request_t *req, char *buffer, int len); + int (*_close)(struct request_t *req); + int (*upload_callback)(struct request_t *req, void *buffer, int len); + int (*download_callback)(struct request_t *req, void *buffer, int len); + response_t *response; + + //mbedtls + req_ssl* ssl; + mbedtls_x509_crt* ca_cert; + mbedtls_x509_crt* client_cert; + mbedtls_pk_context* client_key; + + //meta + void* meta; + +} request_t; + +typedef int (*download_cb)(request_t *req, void *buffer, int len); +typedef int (*upload_cb)(request_t *req, void *buffer, int len); + + +request_t *req_new(const char *url); +request_t *req_new_with_buf(const char *uri, size_t buffer_size); +void req_setopt(request_t *req, REQ_OPTS opt, void* data); +void req_clean(request_t *req); +void req_clean_incl_certs(request_t *req); +int req_perform(request_t *req); + +void req_free_x509_crt(mbedtls_x509_crt* crt); +void req_free_pkey(mbedtls_pk_context* pkey); +mbedtls_x509_crt* req_parse_x509_crt(unsigned char *buf, size_t buflen); +mbedtls_pk_context* req_parse_pkey(unsigned char* buf, size_t buflen); + +#endif diff --git a/components/esp-request/include/req_list.h b/components/esp-request/include/req_list.h new file mode 100644 index 0000000..c2c9f7e --- /dev/null +++ b/components/esp-request/include/req_list.h @@ -0,0 +1,20 @@ +#ifndef _LIST_H +#define _LIST_H + +typedef struct req_list_t { + void *key; + void *value; + struct req_list_t *next; + struct req_list_t *prev; +} req_list_t; + +void req_list_add(req_list_t *root, req_list_t *new_tree); +req_list_t *req_list_get_last(req_list_t *root); +req_list_t *req_list_get_first(req_list_t *root); +void req_list_remove(req_list_t *tree); +void req_list_clear(req_list_t *root); +req_list_t *req_list_set_key(req_list_t *root, const char *key, const char *value); +req_list_t *req_list_get_key(req_list_t *root, const char *key); +int req_list_check_key(req_list_t *root, const char *key, const char *value); +req_list_t *req_list_set_from_string(req_list_t *root, const char *data); //data = "key=value" +#endif diff --git a/components/esp-request/include/uri_parser.h b/components/esp-request/include/uri_parser.h new file mode 100644 index 0000000..0534d2a --- /dev/null +++ b/components/esp-request/include/uri_parser.h @@ -0,0 +1,28 @@ +#ifndef _uri_parser_ +#define _uri_parser_ +#ifdef __cplusplus +extern "C" { +#endif +typedef struct { + char *scheme; /* mandatory */ + char *host; /* mandatory */ + char *port; /* optional */ + char *path; /* optional */ + char *query; /* optional */ + char *fragment; /* optional */ + char *username; /* optional */ + char *password; /* optional */ + char *extension; + char *host_ext; + char *_uri; /* private */ + int _uri_len; /* private */ +} parsed_uri_t; + +parsed_uri_t *parse_uri(const char *); +void free_parsed_uri(parsed_uri_t *); +void parse_uri_info(parsed_uri_t *puri); +#ifdef __cplusplus +} +#endif + +#endif /* _uri_parser_ */ diff --git a/components/esp-request/req_list.c b/components/esp-request/req_list.c new file mode 100644 index 0000000..e979952 --- /dev/null +++ b/components/esp-request/req_list.c @@ -0,0 +1,164 @@ +/* +* @2017 +* Tuan PM +*/ +#include +#include +#include +#include "req_list.h" +#include "esp_log.h" +#define LIST_TAG "LIST" +static char *trimwhitespace(char *str) +{ + char *end; + + // Trim leading space + while(isspace((unsigned char)*str)) str++; + + if(*str == 0) // All spaces? + return str; + + // Trim trailing space + end = str + strlen(str) - 1; + while(end > str && isspace((unsigned char)*end)) end--; + + // Write new null terminator + *(end+1) = 0; + + return str; +} +void req_list_add(req_list_t *root, req_list_t *new_tree) +{ + req_list_t *last = req_list_get_last(root); + if(last != NULL) { + last->next = new_tree; + new_tree->prev = last; + } +} +req_list_t *req_list_get_last(req_list_t *root) +{ + req_list_t *last; + if(root == NULL) + return NULL; + last = root; + while(last->next != NULL) { + last = last->next; + } + return last; +} +req_list_t *req_list_get_first(req_list_t *root) +{ + if(root == NULL) + return NULL; + if(root->next == NULL) + return NULL; + // ESP_LOGD(LIST_TAG, "root->next = %x", (int)root->next); + return root->next; +} +void req_list_remove(req_list_t *tree) +{ + req_list_t *found = tree; + if (found != NULL) { + if (found->next && found->prev) { + // ESP_LOGD(LIST_TAG, "found->prev->next= %x, found->next->prev=%x", (int)found->prev->next, (int)found->next->prev); + found->prev->next = found->next; + found->next->prev = found->prev; + } else if (found->next) { + // ESP_LOGD(LIST_TAG, "found->next->prev= %x", (int)found->next->prev); + found->next->prev = NULL; + } else if (found->prev) { + // ESP_LOGD(LIST_TAG, "found->prev->next =%x", (int)found->prev->next); + found->prev->next = NULL; + } + free(found->key); + free(found->value); + free(found); + } +} + +void req_list_clear(req_list_t *root) +{ + //FIXME: Need to test this function + req_list_t *found; + while((found = req_list_get_first(root)) != NULL) { + // ESP_LOGD(LIST_TAG, "free key=%s, value=%s, found=%x", (char*)found->key, (char*)found->value, (int)found); + req_list_remove(found); + } +} + +req_list_t *req_list_set_key(req_list_t *root, const char *key, const char *value) +{ + req_list_t *found; + if(root == NULL) + return NULL; + found = root; + while(found->next != NULL) { + found = found->next; + if (strcasecmp(found->key, key) == 0) { + if (found->value) { + free(found->value); + } + found->value = calloc(1, strlen(value)+1); + strcpy(found->value, value); + return found; + } + } + req_list_t *new_tree = calloc(1, sizeof(req_list_t)); + if (new_tree == NULL) + return NULL; + new_tree->key = calloc(1, strlen(key) + 1); + strcpy(new_tree->key, key); + new_tree->value = calloc(1, strlen(value)+1); + strcpy(new_tree->value, value); + + req_list_add(root, new_tree); + return new_tree; +} +req_list_t *req_list_get_key(req_list_t *root, const char *key) +{ + req_list_t *found; + if(root == NULL) + return NULL; + found = root; + while(found->next != NULL) { + found = found->next; + if (strcasecmp(found->key, key) == 0) { + return found; + } + } + return NULL; +} +int req_list_check_key(req_list_t *root, const char *key, const char *value) +{ + req_list_t *found = req_list_get_key(root, key); + if(found && strcasecmp(found->value, value) == 0) + return 1; + return 0; + +} +req_list_t *req_list_set_from_string(req_list_t *root, const char *data) +{ + int len = strlen(data); + char* eq_ch = strchr(data, ':'); + int key_len, value_len; + req_list_t *ret = NULL; + + if (eq_ch == NULL) + return NULL; + key_len = eq_ch - data; + value_len = len - key_len - 1; + + char *key = calloc(1, key_len + 1); + char *value = calloc(1, value_len + 1); + memcpy(key, data, key_len); + memcpy(value, eq_ch + 1, value_len); + + ret = req_list_set_key(root, trimwhitespace(key), trimwhitespace(value)); + free(key); + free(value); + return ret; +} +req_list_t *req_list_clear_key(req_list_t *root, const char *key) +{ + return NULL; +} diff --git a/components/esp-request/uri_parser.c b/components/esp-request/uri_parser.c new file mode 100644 index 0000000..020495d --- /dev/null +++ b/components/esp-request/uri_parser.c @@ -0,0 +1,252 @@ +/* +URI Parser +Copyright (c) 2016 Tuan PM (tuanpm@live.com) +Inspired by Hirochika Asai, http://draft.scyphus.co.jp/lang/c/url_parser.html +License (MIT license): + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +#include "uri_parser.h" +#include +#include +#include +#include +#include "esp_err.h" +static __inline__ int +_is_scheme_char(int c) +{ + return (!isalpha(c) && '+' != c && '-' != c && '.' != c) ? 0 : 1; +} + +#define JUMP_NEXT_STATE(var, state) { *curr_ptr = 0; curr_ptr ++; var = curr_ptr; parse_state = state; break;} +parsed_uri_t *parse_uri(const char *url) +{ + parsed_uri_t *puri; + char *curr_ptr; + int bracket_flag; + enum parse_state_t { + PARSE_SCHEME = 0, + PARSE_USERNAME_OR_HOST, + PARSE_PASSWORD_OR_PORT, + PARSE_HOST, + PARSE_PORT, + PARSE_PATH, + PARSE_QUERY, + PARSE_FRAGMENT + } parse_state = 0; + puri = (parsed_uri_t *)malloc(sizeof(parsed_uri_t)); + memset(puri, 0, sizeof(parsed_uri_t)); + if(NULL == puri) { + return NULL; + } + puri->_uri_len = strlen(url); + puri->_uri = (char*) malloc(puri->_uri_len + 1); + memset(puri->_uri, 0, puri->_uri_len + 1); + if(puri->_uri == NULL) { + free_parsed_uri(puri); + return NULL; + } + strcpy(puri->_uri, url); + puri->_uri[puri->_uri_len] = 0; + puri->scheme = NULL; + puri->host = NULL; + puri->port = NULL; + puri->path = NULL; + puri->query = NULL; + puri->fragment = NULL; + puri->username = NULL; + puri->password = NULL; + + curr_ptr = puri->_uri; + puri->scheme = curr_ptr; + parse_state = PARSE_SCHEME; + bracket_flag = 0; + while(*curr_ptr) { + // *curr_ptr = tolower((unsigned char)*curr_ptr); + switch(parse_state) { + case PARSE_SCHEME: /* parse scheme */ + if(curr_ptr + 3 < (puri->_uri + puri->_uri_len) && memcmp(curr_ptr, "://", 3) == 0) { + *curr_ptr++ = 0; + *curr_ptr++ = 0; + *curr_ptr++ = 0; + puri->host = curr_ptr; + puri->username = curr_ptr; + parse_state = PARSE_USERNAME_OR_HOST; //next is username or host + break; + } + // if(!_is_scheme_char(*curr_ptr)) { + // free_parsed_uri(puri); + // return NULL; + // } + curr_ptr ++; + break; + case PARSE_USERNAME_OR_HOST: /* username or host*/ + if('[' == *curr_ptr && bracket_flag == 0) { + bracket_flag = 1; + } else if(']' == *curr_ptr && bracket_flag == 1) { + bracket_flag = 0; + } + if(bracket_flag == 0 && *curr_ptr == ':') { + JUMP_NEXT_STATE(puri->port = puri->password, PARSE_PASSWORD_OR_PORT); + } else if(bracket_flag == 0 && *curr_ptr == '#') { + puri->username = NULL; + JUMP_NEXT_STATE(puri->fragment, PARSE_FRAGMENT); + } else if(bracket_flag == 0 && *curr_ptr == '/') { + puri->username = NULL; + JUMP_NEXT_STATE(puri->path, PARSE_PATH); + } + curr_ptr ++; + break; + case PARSE_PASSWORD_OR_PORT: /* password or port */ + if(*curr_ptr == '@') { + puri->port = NULL; + JUMP_NEXT_STATE(puri->host, PARSE_HOST); + break; + } else if(*curr_ptr == '/') { + puri->username = NULL; + puri->password = NULL; + JUMP_NEXT_STATE(puri->path, PARSE_PATH); + break; + } else if(*curr_ptr == '#') { + puri->username = NULL; + puri->password = NULL; + JUMP_NEXT_STATE(puri->fragment, PARSE_FRAGMENT); + break; + } + curr_ptr ++; + break; + case PARSE_HOST: /* host */ + if('[' == *curr_ptr && bracket_flag == 0) { + bracket_flag = 1; + } else if(']' == *curr_ptr && bracket_flag == 1) { + bracket_flag = 0; + } + if(bracket_flag == 0 && *curr_ptr == ':') { + JUMP_NEXT_STATE(puri->port, PARSE_PORT); + } else if(bracket_flag == 0 && *curr_ptr == '/') { + puri->port = NULL; + JUMP_NEXT_STATE(puri->path, PARSE_PATH); + } else if(bracket_flag == 0 && *curr_ptr == '#') { + puri->port = NULL; + JUMP_NEXT_STATE(puri->fragment, PARSE_FRAGMENT); + } + curr_ptr ++; + break; + case PARSE_PORT: /* port */ + if(*curr_ptr == '/') { + JUMP_NEXT_STATE(puri->path, PARSE_PATH); + } else if(*curr_ptr == '?') { + JUMP_NEXT_STATE(puri->query, PARSE_QUERY); + } else if(*curr_ptr == '#') { + JUMP_NEXT_STATE(puri->fragment, PARSE_FRAGMENT); + } + curr_ptr ++; + break; + case PARSE_PATH: /* path */ + if(*curr_ptr == '?') { + // JUMP_NEXT_STATE(puri->query, PARSE_QUERY); + } else if(*curr_ptr == '#') { + JUMP_NEXT_STATE(puri->fragment, PARSE_FRAGMENT); + } + curr_ptr ++; + case PARSE_QUERY: /* query */ + if(*curr_ptr == '#') { + JUMP_NEXT_STATE(puri->fragment, PARSE_FRAGMENT); + } + case PARSE_FRAGMENT: /* fragment*/ + curr_ptr ++; + break; + } + + } + if(parse_state < PARSE_HOST) { + puri->host = puri->username; + puri->port = puri->password; + puri->username = NULL; + puri->password = NULL; + } + if (puri->path && puri->path[0]!= 0){ + char *temp = malloc(strlen(puri->path) + 2); + sprintf(temp, "/%s", puri->path); + puri->path = temp; + } else { + puri->path = malloc(2); + puri->path[0] = '/'; + puri->path[1] = 0; + } + return puri; +} +void parse_uri_info(parsed_uri_t *puri) +{ + printf( "scheme addr: %x\n" + "Username addr: %x\n" + "password addr: %x\n" + "host addr: %x\n" + "port addr: %x\n" + "path addr: %x\n" + "fragment addr: %x\n" + "extension addr: %x\n" + "host_ext addr: %x\r\n", + (int)puri->scheme, + (int)puri->username, + (int)puri->password, + (int)puri->host, + (int)puri->port, + (int)puri->path, + (int)puri->fragment, + (int)puri->extension, + (int)puri->host_ext); + + if(puri->scheme && puri->scheme[0] != 0) { + printf("scheme: %s\n", puri->scheme); + } + if(puri->host && puri->host[0] != 0) { + printf("Host: %s\n", puri->host); + } + if(puri->path && puri->path[0] != 0) { + printf("path: %s\n", puri->path); + } + if(puri->port && puri->port[0] != 0) { + printf("port: %s\n", puri->port); + } + if(puri->username && puri->username[0] != 0) { + printf("username: %s\n", puri->username); + } + if(puri->password && puri->password[0] != 0) { + printf("password: %s\n", puri->password); + } + if(puri->fragment && puri->fragment[0] != 0) { + printf("fragment: %s\n", puri->fragment); + } + if(puri->extension && puri->extension[0] != 0) { + printf("extension: %s\n", puri->extension); + } + if(puri->host_ext && puri->host_ext[0] != 0) { + printf("host_ext: %s\n", puri->host_ext); + } +} +void free_parsed_uri(parsed_uri_t *puri) +{ + if(NULL != puri) { + if(puri->path && puri->path[0] != 0) { + free(puri->path); + } + if(NULL != puri->_uri) { + free(puri->_uri); + } + free(puri); + } +} diff --git a/components/oap_common/component.mk b/components/oap_common/component.mk index 35b4a87..3cc966b 100644 --- a/components/oap_common/component.mk +++ b/components/oap_common/component.mk @@ -7,4 +7,5 @@ # please read the ESP-IDF documents if you need to do this. # -COMPONENT_EMBED_TXTFILES := default_config.json \ No newline at end of file +COMPONENT_EMBED_TXTFILES := default_config.json +COMPONENT_EMBED_TXTFILES += root_ca.pem \ No newline at end of file diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index dac12eb..5631552 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -67,6 +67,9 @@ typedef struct { int test; } oap_sensor_config_t; +int is_reboot_in_progress(); +void oap_reboot(); + long oap_epoch_sec(); long oap_epoch_sec_valid(); diff --git a/components/oap_common/include/oap_version.h b/components/oap_common/include/oap_version.h index 6d1836e..c5bc9c2 100644 --- a/components/oap_common/include/oap_version.h +++ b/components/oap_common/include/oap_version.h @@ -34,10 +34,11 @@ */ #include +#include "esp_err.h" #define OAP_VER_MAJOR 0 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 3 typedef struct { uint8_t major; @@ -45,6 +46,10 @@ typedef struct { uint8_t patch; } oap_version_t; +oap_version_t oap_version(); char* oap_version_str(); +char* oap_version_format(oap_version_t ver); +esp_err_t oap_version_parse(char* str, oap_version_t* ver); +unsigned long oap_version_num(oap_version_t ver); #endif /* MAIN_INCLUDE_OAP_VERSION_H_ */ diff --git a/components/oap_common/include/ssl_client.h b/components/oap_common/include/ssl_client.h deleted file mode 100644 index b19615a..0000000 --- a/components/oap_common/include/ssl_client.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * - * Created on: Feb 23, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -/* Provide SSL/TLS functions to ESP32 with Arduino IDE - * by Evandro Copercini - 2017 - Apache 2.0 License - */ - -#ifndef ARD_SSL_H -#define ARD_SSL_H -#include "mbedtls/platform.h" -#include "mbedtls/net.h" -#include "mbedtls/debug.h" -#include "mbedtls/ssl.h" -#include "mbedtls/entropy.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/error.h" - -typedef struct sslclient_context { - int socket; - //mbedtls_net_context net_ctx; - mbedtls_ssl_context ssl_ctx; - mbedtls_ssl_config ssl_conf; - - mbedtls_ctr_drbg_context drbg_ctx; - mbedtls_entropy_context entropy_ctx; - - mbedtls_x509_crt ca_cert; - mbedtls_x509_crt client_cert; - mbedtls_pk_context client_key; - - int has_ca_cert; - int has_client_cert; - int has_client_key; - -} sslclient_context; - - -void ssl_init(sslclient_context *ssl_client); -int open_socket(char* host, int port, int timeout_sec, int keepalive); -int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, unsigned char *cli_cert, unsigned char *cli_key); -void stop_ssl_socket(sslclient_context *ssl_client); -int data_to_read(sslclient_context *ssl_client); -int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t len); -int get_ssl_receive(sslclient_context *ssl_client, uint8_t *data, int length); - -#endif diff --git a/components/oap_common/oap_common.c b/components/oap_common/oap_common.c index 2001bba..93ffd11 100644 --- a/components/oap_common/oap_common.c +++ b/components/oap_common/oap_common.c @@ -28,10 +28,20 @@ #include "oap_common.h" #include "esp_attr.h" #include "esp_log.h" +#include "esp_system.h" #include "freertos/task.h" static const long FEB22_2017 = 1487795557; +static int _reboot_in_progress = 0; +int is_reboot_in_progress() { + return _reboot_in_progress; +} +void oap_reboot() { + _reboot_in_progress = 1; + esp_restart(); +} + long oap_epoch_sec() { struct timeval tv_start; gettimeofday(&tv_start, NULL); diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 113e200..45862cb 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -51,7 +51,7 @@ static nvs_handle storage_open(nvs_open_mode open_mode) { void storage_clean() { ESP_ERROR_CHECK(nvs_flash_init()); nvs_handle handle = storage_open(NVS_READWRITE); - ESP_ERROR_CHECK(nvs_erase_all(handle)); + ESP_ERROR_CHECK(nvs_erase_all(handle)); //TODO this fails is wifi was initialised before? ESP_ERROR_CHECK(nvs_commit(handle)); nvs_close(handle); _config = NULL; @@ -68,7 +68,7 @@ void storage_erase_blob(const char* key) { } esp_err_t storage_get_blob(const char* key, void** out_value, size_t* length) { - nvs_handle handle = storage_open(NVS_READONLY); + nvs_handle handle = storage_open(NVS_READWRITE); esp_err_t err; size_t _length; err = nvs_get_blob(handle, key, 0, &_length); @@ -155,7 +155,7 @@ static esp_err_t storage_set_bigblob_size(nvs_handle handle, const char* key, si } esp_err_t storage_get_bigblob(const char* key, void** out_value, size_t* length) { - nvs_handle handle = storage_open(NVS_READONLY); + nvs_handle handle = storage_open(NVS_READWRITE); esp_err_t err; //read key.desc to find length and #parts size_t _length; diff --git a/components/oap_common/oap_version.c b/components/oap_common/oap_version.c index bae2fcb..920b6ae 100644 --- a/components/oap_common/oap_version.c +++ b/components/oap_common/oap_version.c @@ -23,16 +23,52 @@ #include "oap_version.h" #include #include +#include "esp_err.h" -static oap_version_t oap_version = { .major = OAP_VER_MAJOR, .minor = OAP_VER_MINOR, .patch = OAP_VER_PATCH }; +static oap_version_t _oap_version = { .major = OAP_VER_MAJOR, .minor = OAP_VER_MINOR, .patch = OAP_VER_PATCH }; static char* _oap_version_str = NULL; +static const char* VER_FORMAT="%d.%d.%d"; + +char* oap_version_format(oap_version_t ver) { + char* str = malloc(snprintf( NULL, 0, VER_FORMAT, ver.major, ver.minor, ver.patch)+1); + sprintf(str, VER_FORMAT, ver.major, ver.minor, ver.patch); + return str; +} + +oap_version_t oap_version() { + return _oap_version; +} + char* oap_version_str() { if (!_oap_version_str) { - _oap_version_str = malloc(snprintf( NULL, 0, "%d.%d.%d", oap_version.major, oap_version.minor, oap_version.patch)+1); - sprintf(_oap_version_str, "%d.%d.%d", oap_version.major, oap_version.minor, oap_version.patch); + _oap_version_str = oap_version_format(_oap_version); } return _oap_version_str; } +unsigned long oap_version_num(oap_version_t ver) { + return 10000 * ver.major + 100 * ver.minor + ver.patch; +} + +esp_err_t oap_version_parse(char* str, oap_version_t* ver) +{ + int i = 0, j = 0; + while (str[i] != 0 && str[i] != '.') i++; + if (str[i] != '.') return ESP_FAIL; + int major = atoi(str); + i++; + int minor = atoi(str+i); + while (str[i] != 0 && str[i] != '.') i++; + if (str[i] != '.') return ESP_FAIL; + i++; + int patch = atoi(str+i); + + ver->major = major; + ver->minor = minor; + ver->patch = patch; + + return ESP_OK; +} + diff --git a/components/oap_common/root_ca.pem b/components/oap_common/root_ca.pem new file mode 100644 index 0000000..cf8f0da --- /dev/null +++ b/components/oap_common/root_ca.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/components/oap_common/ssl_client.c b/components/oap_common/ssl_client.c deleted file mode 100644 index 214df9a..0000000 --- a/components/oap_common/ssl_client.c +++ /dev/null @@ -1,391 +0,0 @@ -/* - * - * Created on: Feb 23, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -/* Provide SSL/TLS functions to ESP32 with Arduino IDE -* -* Adapted from the ssl_client1 example in mbedtls. -* -* Original Copyright (C) 2006-2015, ARM Limited, All Rights Reserved, Apache 2.0 License. -* Additions Copyright (C) 2017 Evandro Luis Copercini, Apache 2.0 License. -*/ - -//#include "Arduino.h" -#include -#include -#include -#include -#include - -#include "mbedtls/platform.h" -#include "mbedtls/net.h" -#include "mbedtls/debug.h" -#include "mbedtls/ssl.h" -#include "mbedtls/ssl_internal.h" -#include "mbedtls/entropy.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/error.h" -#include "mbedtls/certs.h" - -#include -#include - -#include "oap_common.h" -#include "ssl_client.h" -#include "esp_err.h" -#include "esp_log.h" - -static const char *pers = "esp32-tls"; -static const char* TAG = "ssl"; - -#define DEBUG true //Set false to supress debug messages - -#ifdef DEBUG -#define DEBUG_PRINT(...) printf( __VA_ARGS__ ) -#else -#define DEBUG_PRINT(x) -#endif - -#ifdef MBEDTLS_DEBUG_C - -#define MBEDTLS_DEBUG_LEVEL 4 - -/* mbedtls debug function that translates mbedTLS debug output -to ESP_LOGx debug output. - -MBEDTLS_DEBUG_LEVEL 4 means all mbedTLS debug output gets sent here, -and then filtered to the ESP logging mechanism. -*/ -static void mbedtls_debug(void *ctx, int level, - const char *file, int line, - const char *str) -{ - const char *MBTAG = "mbedtls"; - char *file_sep; - - /* Shorten 'file' from the whole file path to just the filename - - This is a bit wasteful because the macros are compiled in with - the full _FILE_ path in each case. - */ - file_sep = rindex(file, '/'); - if (file_sep) { - file = file_sep + 1; - } - - switch (level) { - case 1: - printf( "%s:%d %s", file, line, str); - break; - case 2: - case 3: - printf( "%s:%d %s", file, line, str); - case 4: - printf( "%s:%d %s", file, line, str); - break; - default: - printf( "Unexpected log level %d: %s", level, str); - break; - } -} - -#endif - - -void ssl_init(sslclient_context *ssl_client) -{ - /* - * Initialize the RNG and the session data - */ - - mbedtls_ssl_init(&ssl_client->ssl_ctx); - mbedtls_ssl_config_init(&ssl_client->ssl_conf); - - mbedtls_ctr_drbg_init(&ssl_client->drbg_ctx); -} - - -int open_socket(char* host, int port, int timeout_sec, int keepalive) { - mbedtls_net_context server_fd; - mbedtls_net_init(&server_fd); - - char portStr[8]; - sprintf(portStr, "%d", port); - - int ret; - if ((ret = mbedtls_net_connect(&server_fd, host, portStr, MBEDTLS_NET_PROTO_TCP)) == 0) { - struct timeval timeout = {.tv_sec = timeout_sec}; - int nodelay = 1; - lwip_setsockopt(server_fd.fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); - lwip_setsockopt(server_fd.fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); - lwip_setsockopt(server_fd.fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay)); - lwip_setsockopt(server_fd.fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)); - return server_fd.fd; - } else { - return ret; - } -} - -/* -ssl_client->socket = -1; -ssl_client->socket = lwip_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); -if (ssl_client->socket < 0) { - DEBUG_PRINT("ERROR opening socket\r\n"); - return ssl_client->socket; -} - -struct sockaddr_in serv_addr; -memset(&serv_addr, 0, sizeof(serv_addr)); -serv_addr.sin_family = AF_INET; -serv_addr.sin_addr.s_addr = ipAddress; -serv_addr.sin_port = htons(port); - -if (lwip_connect(ssl_client->socket, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == 0) { - timeout = 5000; - lwip_setsockopt(ssl_client->socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); - lwip_setsockopt(ssl_client->socket, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); - lwip_setsockopt(ssl_client->socket, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(enable)); - lwip_setsockopt(ssl_client->socket, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable)); - DEBUG_PRINT("Socket ok"); -} else { - printf("\r\nConnect to Server failed!\r\n"); - ret = -1; - break; -} - -fcntl( ssl_client->socket, F_SETFL, fcntl( ssl_client->socket, F_GETFL, 0 ) | O_NONBLOCK ); -*/ - - - -int start_ssl_client(sslclient_context *ssl_client, unsigned char *rootCABuff, unsigned char *cli_cert, unsigned char *cli_key) -{ - char buf[512]; - int ret; - size_t free_heap_before = xPortGetFreeHeapSize(); - ESP_LOGD(TAG, "Free heap before TLS %u", free_heap_before); - - do { - ESP_LOGD(TAG, "Seeding the random number generator"); - mbedtls_entropy_init(&ssl_client->entropy_ctx); - - if ((ret = mbedtls_ctr_drbg_seed(&ssl_client->drbg_ctx, mbedtls_entropy_func, - &ssl_client->entropy_ctx, (const unsigned char *) pers, strlen(pers))) != ESP_OK) { - ESP_LOGE(TAG, "mbedtls_ctr_drbg_seed returned %d", ret); - break; - } - - - /* MBEDTLS_SSL_VERIFY_REQUIRED if a CA certificate is defined on Arduino IDE and - MBEDTLS_SSL_VERIFY_NONE if not. - */ - if (rootCABuff != NULL) { - ESP_LOGD(TAG, "Loading CA cert\n"); - mbedtls_x509_crt_init(&ssl_client->ca_cert); - mbedtls_ssl_conf_authmode(&ssl_client->ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); - ret = mbedtls_x509_crt_parse(&ssl_client->ca_cert, (const unsigned char *)rootCABuff, strlen((const char *)rootCABuff) + 1); - if (ret != ESP_OK) { - ESP_LOGE(TAG, "CA cert: mbedtls_x509_crt_parse returned -0x%x\n\n", -ret); - break; - } - mbedtls_ssl_conf_ca_chain(&ssl_client->ssl_conf, &ssl_client->ca_cert, NULL); - //mbedtls_ssl_conf_verify(&ssl_client->ssl_ctx, my_verify, NULL ); - ssl_client->has_ca_cert = 1; - } else { - mbedtls_ssl_conf_authmode(&ssl_client->ssl_conf, MBEDTLS_SSL_VERIFY_NONE); - } - - if (cli_cert != NULL && cli_key != NULL) { - mbedtls_x509_crt_init(&ssl_client->client_cert); - mbedtls_pk_init(&ssl_client->client_key); - - ESP_LOGD(TAG, "Loading CRT cert"); - - ret = mbedtls_x509_crt_parse(&ssl_client->client_cert, (const unsigned char *)cli_cert, strlen((const char *)cli_cert) + 1); - - if (ret < ESP_OK) { - ESP_LOGE(TAG, "CRT cert: mbedtls_x509_crt_parse returned -0x%x", -ret); - break; - } - ssl_client->has_client_cert = 1; - - DEBUG_PRINT( "Loading private key"); - ret = mbedtls_pk_parse_key(&ssl_client->client_key, (const unsigned char *)cli_key, strlen((const char *)cli_key) + 1, NULL, 0); - - if (ret != ESP_OK) { - ESP_LOGE(TAG, "PRIVATE KEY: mbedtls_x509_crt_parse returned -0x%x", -ret); - break; - } - - ssl_client->has_client_key = 1; - - mbedtls_ssl_conf_own_cert(&ssl_client->ssl_conf, &ssl_client->client_cert, &ssl_client->client_key); - } - - /* - // TODO: implement match CN verification - - DEBUG_PRINT( "Setting hostname for TLS session...\n"); - - // Hostname set here should match CN in server certificate - if((ret = mbedtls_ssl_set_hostname(&ssl_client->ssl_ctx, host)) != 0) - { - printf( "mbedtls_ssl_set_hostname returned -0x%x\n", -ret); - break; - } - */ - - ESP_LOGD(TAG, "Setting up the SSL/TLS structure..."); - - if ((ret = mbedtls_ssl_config_defaults(&ssl_client->ssl_conf, - MBEDTLS_SSL_IS_CLIENT, - MBEDTLS_SSL_TRANSPORT_STREAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != ESP_OK) { - ESP_LOGW(TAG, "mbedtls_ssl_config_defaults returned %d", ret); - break; - } - - mbedtls_ssl_conf_rng(&ssl_client->ssl_conf, mbedtls_ctr_drbg_random, &ssl_client->drbg_ctx); -#ifdef MBEDTLS_DEBUG_C - mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL); - mbedtls_ssl_conf_dbg(&ssl_client->ssl_conf, mbedtls_debug, NULL); -#endif - - if ((ret = mbedtls_ssl_setup(&ssl_client->ssl_ctx, &ssl_client->ssl_conf)) != ESP_OK) { - ESP_LOGW(TAG, "mbedtls_ssl_setup returned -0x%x\n\n", -ret); - break; - } - - mbedtls_ssl_set_bio(&ssl_client->ssl_ctx, &ssl_client->socket, mbedtls_net_send, mbedtls_net_recv, NULL ); - - ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); - - while ((ret = mbedtls_ssl_handshake(&ssl_client->ssl_ctx)) != ESP_OK) { - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { - ESP_LOGW(TAG, "mbedtls_ssl_handshake returned -0x%x", -ret); - break; - } - delay(10); - vPortYield(); - } - if (ret != ESP_OK) break; - - if (cli_cert != NULL && cli_key != NULL) { - ESP_LOGD(TAG, "Protocol is %s \nCiphersuite is %s", mbedtls_ssl_get_version(&ssl_client->ssl_ctx), mbedtls_ssl_get_ciphersuite(&ssl_client->ssl_ctx)); - //not error - if ((ret = mbedtls_ssl_get_record_expansion(&ssl_client->ssl_ctx)) >= 0) { - ESP_LOGD(TAG, "Record expansion is %d\n", ret); - } else { - ESP_LOGD(TAG, "Record expansion is unknown (compression)"); - } - } - - ESP_LOGD(TAG, "Verifying peer X.509 certificate..."); - - if ((ret = mbedtls_ssl_get_verify_result(&ssl_client->ssl_ctx)) != ESP_OK) { - ESP_LOGE(TAG, "Failed to verify peer certificate!"); - bzero(buf, sizeof(buf)); - mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", ret); - ESP_LOGW(TAG, "verification info: %s", buf); - //stop_ssl_socket(ssl_client); //It's not safe continue. - break; - } else { - ESP_LOGD(TAG, "Certificate verified."); - } - - } while (0); - - size_t free_heap_after = xPortGetFreeHeapSize(); - ESP_LOGD(TAG, "Free heap after TLS %u (-%u)", free_heap_after, free_heap_before-free_heap_after); - - return ret; -} - - -void stop_ssl_socket(sslclient_context *ssl_client) -{ - ESP_LOGD(TAG, "Cleaning SSL connection."); - if (ssl_client->socket > 0) { - close(ssl_client->socket); - ssl_client->socket = 0; - } - mbedtls_ssl_free(&ssl_client->ssl_ctx); - mbedtls_ssl_config_free(&ssl_client->ssl_conf); - mbedtls_ctr_drbg_free(&ssl_client->drbg_ctx); - mbedtls_entropy_free(&ssl_client->entropy_ctx); - - if (ssl_client->has_ca_cert) { - mbedtls_x509_crt_free(&ssl_client->ca_cert); - ssl_client->has_ca_cert = 0; - } - - if (ssl_client->has_client_cert) { - mbedtls_x509_crt_free(&ssl_client->client_cert); - ssl_client->has_client_cert = 0; - } - - if (ssl_client->has_client_key) { - mbedtls_pk_free(&ssl_client->client_key); - ssl_client->has_client_key = 0; - } -} - -int data_to_read(sslclient_context *ssl_client) -{ - - int ret, res; - ret = mbedtls_ssl_read(&ssl_client->ssl_ctx, NULL, 0); - //printf("RET: %i\n",ret); //for low level debug - res = mbedtls_ssl_get_bytes_avail(&ssl_client->ssl_ctx); - //printf("RES: %i\n",res); - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret < 0 && ret != -76) { - ESP_LOGE(TAG, "MbedTLS error %i", ret); - } - - return res; -} - -int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t len) -{ - //DEBUG_PRINT( "Writing HTTP request...\n"); //for low level debug - int ret = -1; - - while ((ret = mbedtls_ssl_write(&ssl_client->ssl_ctx, data, len)) <= 0) { - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { - ESP_LOGE(TAG, "mbedtls_ssl_write returned -0x%x", -ret); - break; - } - } - - len = ret; - //DEBUG_PRINT( "%d bytes written\n", len); //for low level debug - return ret; -} - -int get_ssl_receive(sslclient_context *ssl_client, uint8_t *data, int length) -{ - //DEBUG_PRINT( "Reading HTTP response...\n"); //for low level debug - int ret = -1; - - ret = mbedtls_ssl_read(&ssl_client->ssl_ctx, data, length); - - //DEBUG_PRINT( "%d bytes readed\n", ret); //for low level debug - return ret; -} diff --git a/components/oap_common/test/.gitignore b/components/oap_common/test/.gitignore new file mode 100644 index 0000000..9fca6a7 --- /dev/null +++ b/components/oap_common/test/.gitignore @@ -0,0 +1 @@ +test_wifi.h \ No newline at end of file diff --git a/components/oap_common/test/include/oap_test.h b/components/oap_common/test/include/oap_test.h new file mode 100644 index 0000000..ea86f7f --- /dev/null +++ b/components/oap_common/test/include/oap_test.h @@ -0,0 +1,36 @@ +/* + * oap_test.h + * + * Created on: Sep 11, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_OAP_COMMON_TEST_INCLUDE_OAP_TEST_H_ +#define COMPONENTS_OAP_COMMON_TEST_INCLUDE_OAP_TEST_H_ + +/** + * init wifi, do not wait for IP + */ +void test_init_wifi(); + +/** + * init wifi and wait for IP + */ +void test_require_wifi(); + +#endif /* COMPONENTS_OAP_COMMON_TEST_INCLUDE_OAP_TEST_H_ */ diff --git a/components/oap_common/test/oap_test.c b/components/oap_common/test/oap_test.c new file mode 100644 index 0000000..cb8ce7c --- /dev/null +++ b/components/oap_common/test/oap_test.c @@ -0,0 +1,46 @@ +/* + * oap_test.c + * + * Created on: Sep 11, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "esp_log.h" +#include "oap_test.h" +#include "bootwifi.h" +#include "test_wifi.h" +#include "unity.h" + +static const char* TAG = "test"; + +void test_init_wifi() { + oc_wifi_t wifi_config = { + .ssid = OAP_TEST_WIFI_SSID, + .password = OAP_TEST_WIFI_PASSWORD + }; + + wifi_boot(&wifi_config,0); +} + +void test_require_wifi() { + test_init_wifi(); + TEST_ESP_OK(wifi_connected_wait_for(10000)); + + ESP_LOGI(TAG, "connected"); +} + diff --git a/components/oap_common/test/sandbox.c b/components/oap_common/test/sandbox.c new file mode 100644 index 0000000..4957d94 --- /dev/null +++ b/components/oap_common/test/sandbox.c @@ -0,0 +1,74 @@ +/* + * sandbox.c + * + * Created on: Sep 12, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include +#include "unity.h" +#include "nvs.h" +#include "nvs_flash.h" +#include "esp_partition.h" +#include "esp_log.h" +#include + +typedef struct { + uint8_t num; + char* str; +} sample_struct; + +static const char* TAG = "test"; + +void* modify_struct_by_value(sample_struct ss) { + ss.num++; + ss.str = "modified!"; + //warning: function returns address of local variable [-Wreturn-local-addr] + return &ss; +} + +void modify_struct_by_ref(sample_struct* ss) { + ss->num++; + ss->str = "modified!"; //what happens with assigned string? tricky - if it was a const we cannot release it. prefer immutable structs! +} + +TEST_CASE("structs","sandbox") { + sample_struct ss = { + .num = 1, + .str = "hello" + }; + + void* ssp = modify_struct_by_value(ss); + + TEST_ASSERT_EQUAL_STRING("hello", ss.str); + TEST_ASSERT_EQUAL_INT(1, ss.num); + TEST_ASSERT_EQUAL_INT32(0, ssp); + + char* str = ss.str; + modify_struct_by_ref(&ss); + TEST_ASSERT_EQUAL_STRING("modified!", ss.str); + TEST_ASSERT_EQUAL_INT(2, ss.num); + + ESP_LOGI(TAG, "old str:%s", str); + //str[0] = '!'; //error (const allocation) + //free(str); //error free() target pointer is outside heap areas +} diff --git a/components/oap_common/test/test_oap_storage.c b/components/oap_common/test/test_oap_storage.c index 4980404..68f7443 100644 --- a/components/oap_common/test/test_oap_storage.c +++ b/components/oap_common/test/test_oap_storage.c @@ -33,6 +33,7 @@ static const size_t MAX_NVS_VALUE_SIZE = 32 * (126 / 2 - 1); static uint8_t nvs_cleaned = 0; void nvs_clean() { + //TODO this fails if wifi is initialised first! ESP_LOGW(TAG, "erasing nvs"); const esp_partition_t* nvs_partition = esp_partition_find_first( ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS, NULL); @@ -41,10 +42,12 @@ void nvs_clean() { } void nvs_clean_if_necessary() { - if (!nvs_cleaned) { - nvs_clean(); - nvs_cleaned = 1; - } +// this messes up with nvs cache and causes aborts. +// we need to erase flash prior to test +// if (!nvs_cleaned) { +// nvs_clean(); +// nvs_cleaned = 1; +// } storage_clean(); } @@ -97,7 +100,7 @@ TEST_CASE("bigblob", "[oap_common]") { nvs_clean_if_necessary(); - size_t blob_size = MAX_NVS_VALUE_SIZE * 3 + 10; + size_t blob_size = MAX_NVS_VALUE_SIZE * 1 + 10; void* blob = malloc(blob_size); TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_bigblob("blob", &blob, NULL)); @@ -172,7 +175,7 @@ TEST_CASE("get/set config", "[oap_common]") TEST_ASSERT_NOT_NULL(config); //update config - size_t foo_size = 2000; + size_t foo_size = MAX_NVS_VALUE_SIZE + 1; char* foo = malloc(foo_size+1); memset(foo, 'x', foo_size); foo[foo_size] = 0; diff --git a/components/oap_common/test/test_oap_version.c b/components/oap_common/test/test_oap_version.c new file mode 100644 index 0000000..6938792 --- /dev/null +++ b/components/oap_common/test/test_oap_version.c @@ -0,0 +1,69 @@ +/* + * oap_test.c + * + * Created on: Sep 11, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include +#include "unity.h" +#include "nvs.h" +#include "nvs_flash.h" +#include "esp_partition.h" +#include "esp_log.h" +#include +#include "oap_version.h" + +static void parse_format_verify(char* input, char* output) { + oap_version_t ver; + char* str; + + memset(&ver, 0, sizeof(ver)); + TEST_ESP_OK(oap_version_parse(input, &ver)); + str = oap_version_format(ver); + TEST_ASSERT_EQUAL_STRING(output, str); + free(str); +} + +TEST_CASE("parse and format version","oap_version") { + parse_format_verify("1.2.3","1.2.3"); + parse_format_verify("0.4.0","0.4.0"); + parse_format_verify("012.034.056","12.34.56"); +} + +TEST_CASE("version to num","oap_version") { + oap_version_t v1 = { + .major = 12, + .minor = 34, + .patch = 56, + + }; + TEST_ASSERT_EQUAL_UINT32(123456, oap_version_num(v1)); + + oap_version_t v2 = { + .major = 0, + .minor = 4, + .patch = 0, + + }; + TEST_ASSERT_EQUAL_UINT32(400, oap_version_num(v2)); +} diff --git a/components/ota/Kconfig b/components/ota/Kconfig new file mode 100644 index 0000000..ff8fbe1 --- /dev/null +++ b/components/ota/Kconfig @@ -0,0 +1,28 @@ +menu "OAP OTA updates" + +config OAP_OTA_ENABLED + int "enable OTA updates" + default 1 + help + todo + +config OAP_OTA_HOST + string "host" + default "https://openairproject.com" + help + URL of ota server including a protocol + +config OAP_OTA_PATH + string "path" + default /ota + help + path to ota folder on the server (with file index.txt) + +config OAP_OTA_CHECK_INTERVAL + int "interval in seconds" + default 3600 + help + determines how often sensor will check for OTA update. + value <= 0 means it will be checked only once during startup. + +endmenu \ No newline at end of file diff --git a/components/ota/component.mk b/components/ota/component.mk new file mode 100644 index 0000000..e19e22a --- /dev/null +++ b/components/ota/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# \ No newline at end of file diff --git a/components/ota/include/ota.h b/components/ota/include/ota.h new file mode 100644 index 0000000..1348913 --- /dev/null +++ b/components/ota/include/ota.h @@ -0,0 +1,33 @@ +/* + * ota.h + * + * Created on: Sep 10, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_OTA_INCLUDE_OTA_H_ +#define COMPONENTS_OTA_INCLUDE_OTA_H_ + +#define OAP_OTA_ENABLED CONFIG_OAP_OTA_ENABLED +#define OAP_OTA_HOST CONFIG_OAP_OTA_HOST +#define OAP_OTA_PATH CONFIG_OAP_OTA_PATH +#define OAP_OTA_CHECK_INTERVAL CONFIG_OAP_OTA_CHECK_INTERVAL + +void start_ota_task(); + +#endif /* COMPONENTS_OTA_INCLUDE_OTA_H_ */ diff --git a/components/ota/ota.c b/components/ota/ota.c new file mode 100644 index 0000000..81a1818 --- /dev/null +++ b/components/ota/ota.c @@ -0,0 +1,348 @@ +/* + * ota.c + * + * Created on: Sep 10, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "ota_int.h" + +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_wifi.h" +#include "esp_event_loop.h" +#include "esp_log.h" +#include "esp_system.h" +#include "nvs_flash.h" + +#include "oap_common.h" +#include "oap_debug.h" +#include "bootwifi.h" + +#include "esp_request.h" +#include "mbedtls/sha256.h" + +static const char *TAG = "ota"; + +extern const uint8_t _root_ca_pem_start[] asm("_binary_root_ca_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_root_ca_pem_end"); + +void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { + for (int i = 0; i < 32; i++) { + snprintf((char*)hex + i*2,3,"%02x",hash[i]); + } +} + +char* sha_to_hex(unsigned char hash[32]) { + char* hex = malloc(2*32+1); + hex[2*32] = 0; + for (int i = 0; i < 32; i++) { + snprintf(hex + i*2,3,"%02x",hash[i]); + } + return hex; +} + +typedef struct { + int found; + esp_err_t err; + ota_info_t binary; +} ost_status_result_t; + +static int is_white_char(int ch) { + return ch == '\n' || ch == '\r' || ch == '\t'; +} + +esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len) { + if (len <= 0) return OAP_OTA_ERR_EMPTY_RESPONSE; + char* ver = NULL; char* file = NULL; char* sha = NULL; + int i = -1; int start = 0; + do { + i++; + if (line[i] == '|' || line[i] == 0 || is_white_char(line[i])) { + if (ver == NULL) { + ver = str_make(line+start, i-start); + } else if (file == NULL) { + file = str_make(line+start, i-start); + } else if (sha == NULL) { + sha = str_make(line+start, i-start); + break; + } + start = i+1; + } + } while(line[i] && i < len); + + if (!ver) { + ESP_LOGW(TAG, "malformed status (no version)"); + goto fail; + } + if (!file) { + ESP_LOGW(TAG, "malformed status (no file)"); + goto fail; + } + if (!sha) { + ESP_LOGW(TAG, "malformed status (no sha)"); + goto fail; + } + + if (oap_version_parse(ver, &ota_info->ver) != ESP_OK) { + ESP_LOGW(TAG, "malformed status (invalid version: '%s')", ver); + goto fail; + } + ota_info->file = file; + ota_info->sha = sha; + free(ver); + return ESP_OK; + + fail: + if (ver) free(ver); + if (file) free(file); + if (sha) free(sha); + return OAP_OTA_ERR_MALFORMED_INFO; +} + +static int get_ota_status_callback(request_t *req, char *data, int len) +{ + ESP_LOGD(TAG,"%s", data); + ost_status_result_t* result = req->meta; + if (!result->found) { + result->found = 1; + result->err = parse_ota_info(&result->binary, data, len); + ESP_LOGD(TAG, "parse ota info line... [0x%x]", result->err); + } + return 0; +} + +esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) +{ + request_t* req = req_new(ota_config->host); +// ESP_LOGI(TAG, "OTA.HOST:%s", ota_config->host); +// ESP_LOGI(TAG, "REQ.HOST:%s", (char*)req_list_get_key(req->opt, "host")->value); +// ESP_LOGI(TAG, "REQ.CLIENT_CERT:%p", req->client_cert); +// ESP_LOGI(TAG, "REQ.CLIENT_KEY:%p", req->client_key); + + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); + + ost_status_result_t result; + memset(&result, 0, sizeof(ost_status_result_t)); + req->meta = &result; + + char path[200]; + sprintf(path, "%s/index.txt", ota_config->path); + + req_setopt(req, REQ_SET_METHOD, "GET"); + req_setopt(req, REQ_SET_PATH, path); + req_setopt(req, REQ_SET_HEADER, "Connection: close"); + req_setopt(req, REQ_FUNC_DOWNLOAD_CB, get_ota_status_callback); + + int status = req_perform(req); + req_clean_incl_certs(req); + + if (status != 200) { + ESP_LOGW(TAG, "error response code=%d", status); + return OAP_OTA_ERR_REQUEST_FAILED; + } + + if (result.found) { + if (result.err == ESP_OK) { + memcpy(ota_info, &result.binary, sizeof(ota_info_t)); + } + return result.err; + } else { + return OAP_OTA_ERR_EMPTY_RESPONSE; + } +} + + +typedef struct { + mbedtls_sha256_context* sha_context; + esp_partition_t *update_partition; +} ota_download_callback_meta; + +static int download_ota_binary_callback(request_t *req, char *data, int len) +{ + ota_download_callback_meta* meta = req->meta; + mbedtls_sha256_update(meta->sha_context, (unsigned char *)data, len); + if (meta->update_partition) { + return esp_ota_write(meta->update_partition, (const void *)data, len); + } else { + return 0; + } +} + +esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition) +{ + //ota partition must be applied in max 16 parts (with binary <1M one part is 64kb) + request_t* req = req_new_with_buf(ota_config->host, 2*1024); + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); + + char path[200]; + sprintf(path, "%s/%s", ota_config->path, ota_info->file); + + req_setopt(req, REQ_SET_METHOD, "GET"); + req_setopt(req, REQ_SET_PATH, path); + req_setopt(req, REQ_SET_HEADER, "Connection: close"); + req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_ota_binary_callback); + + mbedtls_sha256_context sha_context; + mbedtls_sha256_init(&sha_context); + mbedtls_sha256_starts(&sha_context,0); + + ota_download_callback_meta meta = { + .sha_context = &sha_context, + .update_partition = update_partition + }; + + req->meta = &meta; + + int status = req_perform(req); + ESP_LOGI(TAG, "status=%d", status); + + esp_err_t ret; + if (status == 200) { + ESP_LOGI(TAG, "ota file downloaded"); + ret = ESP_OK; + unsigned char hash[32]; + mbedtls_sha256_finish(&sha_context, hash); + char* hex = sha_to_hex(hash); + ESP_LOGI(TAG, "file sha256=%s", hex); + if (strcmp(hex, ota_info->sha) != 0) { + ESP_LOGE(TAG, "invalid sha (expected: %s)", ota_info->sha); + ret = OAP_OTA_ERR_SHA_MISMATCH; + } + free(hex); + } else { + ESP_LOGW(TAG, "error response code=%d", status); + ret = OAP_OTA_ERR_REQUEST_FAILED; + } + + mbedtls_sha256_free(&sha_context); + req_clean_incl_certs(req); + return ret; +} + +esp_err_t is_ota_update_available(ota_config_t* ota_config, ota_info_t* ota_info) { + esp_err_t err = fetch_last_ota_info(ota_config, ota_info); + if (err == ESP_OK) { + unsigned long remote_ver = oap_version_num(ota_info->ver); + if (remote_ver <= ota_config->min_version) { + ESP_LOGD(TAG, "remote ver: %lu <= min ver: %lu", remote_ver, ota_config->min_version); + err = OAP_OTA_ERR_NO_UPDATES; + } else { + ESP_LOGD(TAG, "new update found (%lu)", remote_ver); + } + } else { + ESP_LOGD(TAG, "fetch_last_ota_info failed [0x%x]", err); + } + return err; +} + +esp_err_t check_ota_task(ota_config_t* ota_config) { + ota_info_t ota_info; + + const esp_partition_t* running_partition = esp_ota_get_running_partition(); + ESP_LOGI(TAG, "running partition = %s", running_partition->label); + + if (ota_config->update_partition == NULL) { + ota_config->update_partition = esp_ota_get_next_update_partition(NULL); + } + if (ota_config->update_partition == NULL) { + ESP_LOGE(TAG, "no suitable OTA partition found"); + return ESP_FAIL; + } + ESP_LOGI(TAG, "update partition = %s", ota_config->update_partition->label); + esp_err_t err; + esp_ota_handle_t update_handle = 0; + + while (1) { + if ((err = wifi_connected_wait_for(30000)) != ESP_OK) { + goto go_sleep; + } + + ESP_LOGD(TAG, "Check for OTA updates..."); + + if ((err = is_ota_update_available(ota_config, &ota_info)) != ESP_OK) goto go_sleep; + + char* verstr = oap_version_format(ota_info.ver); + ESP_LOGW(TAG,"NEW FIRMWARE AVAILABLE: %s", verstr); + free(verstr); + + ESP_LOGI(TAG, "Writing to partition subtype %d at offset 0x%x", + ota_config->update_partition->subtype, ota_config->update_partition->address); + + err = esp_ota_begin(ota_config->update_partition, OTA_SIZE_UNKNOWN, &update_handle); + if (err != ESP_OK) { + ESP_LOGE(TAG, "esp_ota_begin failed [0x%x]", err); + goto fail; + } + ESP_LOGI(TAG, "esp_ota_begin succeeded"); + + //download + download_ota_binary(ota_config, &ota_info, update_handle); + + if ((err=esp_ota_end(update_handle)) != ESP_OK) { + ESP_LOGE(TAG, "esp_ota_end failed [0x%x]", err); + goto fail; + } + + if (ota_config->commit_and_reboot) { + if ((err = esp_ota_set_boot_partition(ota_config->update_partition)) != ESP_OK) { + ESP_LOGE(TAG, "esp_ota_set_boot_partition failed [0x%x]", err); + goto fail; + } + + ESP_LOGW(TAG, "OTA applied. Prepare to restart system!"); + oap_reboot(); + return ESP_OK; + } else { + ESP_LOGW(TAG, "OTA downloaded but configured to be ignored"); + goto go_sleep; + } + + fail: + ESP_LOGE(TAG,"Interrupt OTA"); + + go_sleep: + + if (ota_config->interval <= 0) { + break; + } else { + ESP_LOGD(TAG, "sleep for %d sec", ota_config->interval/1000); + delay(ota_config->interval); + } + } + return err; +} + +static ota_config_t ota_config; + +void start_ota_task() { + if (OAP_OTA_ENABLED) { + ota_config.host = OAP_OTA_HOST; + ota_config.path = OAP_OTA_PATH; + ota_config.min_version = oap_version_num(oap_version()); + ota_config.commit_and_reboot = 1; + ota_config.update_partition = NULL; + ota_config.interval = 1000 * OAP_OTA_CHECK_INTERVAL; //1h + xTaskCreate(check_ota_task, "check_ota_task", 1024*4, &ota_config, DEFAULT_TASK_PRIORITY, NULL); + } else { + ESP_LOGI(TAG, "OTA disabled"); + } +} diff --git a/components/ota/ota_int.h b/components/ota/ota_int.h new file mode 100644 index 0000000..c6d90f6 --- /dev/null +++ b/components/ota/ota_int.h @@ -0,0 +1,60 @@ +/* + * ota_int.h + * + * Created on: Sep 14, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_OTA_OTA_INT_H_ +#define COMPONENTS_OTA_OTA_INT_H_ + + +#include "ota.h" +#include "esp_err.h" +#include "esp_ota_ops.h" +#include "oap_version.h" + +#define OAP_OTA_ERR_REQUEST_FAILED 0x1001 +#define OAP_OTA_ERR_NO_UPDATES 0x1002 +#define OAP_OTA_ERR_EMPTY_RESPONSE 0x1003 +#define OAP_OTA_ERR_MALFORMED_INFO 0x1004 +#define OAP_OTA_ERR_SHA_MISMATCH 0x1005 + +typedef struct { + char* host; + char* path; + unsigned int interval; // for <=0 it checks only once + int commit_and_reboot; + esp_partition_t *update_partition; + unsigned long min_version; +} ota_config_t; + +typedef struct { + char* sha; + char* file; + oap_version_t ver; +} ota_info_t; + +esp_err_t is_ota_available(ota_config_t* ota_config, ota_info_t* ota_info); +esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info); +esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition); +esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len); +esp_err_t check_ota_task(ota_config_t* ota_config); + + +#endif /* COMPONENTS_OTA_OTA_INT_H_ */ diff --git a/components/ota/test/component.mk b/components/ota/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/ota/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c new file mode 100644 index 0000000..2349873 --- /dev/null +++ b/components/ota/test/test_ota.c @@ -0,0 +1,125 @@ +#include +#include +#include +#include +#include +#include "unity.h" +#include "nvs.h" +#include "nvs_flash.h" +#include "esp_partition.h" +#include "esp_log.h" +#include +#include "ota.h" +#include "bootwifi.h" +#include "oap_test.h" +#include "oap_common.h" +#include "oap_version.h" +#include "mbedtls/sha256.h" + +#include "../ota_int.h" + +static const char* TAG = "test_ota"; + +void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]); + +static void TEST_ASSERT_EQUAL_VER(uint8_t expected_major, uint8_t expected_minor, uint8_t expected_patch, oap_version_t* version) { + TEST_ASSERT_EQUAL_INT(expected_major, version->major); + TEST_ASSERT_EQUAL_INT(expected_minor, version->minor); + TEST_ASSERT_EQUAL_INT(expected_patch, version->patch); +} + +TEST_CASE("sha","[ota]") +{ + char* input = "hello world"; + char* output = "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"; + + unsigned char hash[32]; + unsigned char hex[65]; + hex[64] = 0; + + //single value + mbedtls_sha256((unsigned char*)input, strlen(input), hash, 0); + sha_to_hexstr(hash, hex); + TEST_ASSERT_EQUAL_STRING(output, hex); + + //in parts + mbedtls_sha256_context sha_context; + mbedtls_sha256_init(&sha_context); + mbedtls_sha256_starts(&sha_context,0); + for (int i = 0; i < strlen(input); i++) { + mbedtls_sha256_update(&sha_context, (unsigned char *)input+i, 1); + } + mbedtls_sha256_finish(&sha_context, hash); + mbedtls_sha256_free(&sha_context); + sha_to_hexstr(hash, hex); + TEST_ASSERT_EQUAL_STRING(output, hex); +} + + +TEST_CASE("fetch_last_ota_info", "[ota]") +{ + test_require_wifi(); + ota_config_t config = { + .host = "https://openairproject.com", + .path = "/ota" + }; + ota_info_t info; + /* + * heap consumption goes to 0 after ~5 requests + */ + size_t curr_heap = 0; + size_t prev_heap = 0; + for (int i = 0; i < 1; i++) { + curr_heap = xPortGetFreeHeapSize(); + ESP_LOGW(TAG, "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); + prev_heap = curr_heap; + TEST_ESP_OK(fetch_last_ota_info(&config, &info)); + TEST_ASSERT_EQUAL_STRING("sensor-esp32-0.4.0.bin", info.file); + TEST_ASSERT_EQUAL_VER(0,4,0,&info.ver); + TEST_ASSERT_EQUAL_STRING("929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04", info.sha); + + delay(1000); + } +} + +TEST_CASE("parse_ota_info","[ota]") +{ + ota_info_t info; + char* data = "0.4.0|sensor-esp32-0.4.0.bin|929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04\r\n"; + parse_ota_info(&info, data, strlen(data)); + + TEST_ASSERT_EQUAL_STRING("sensor-esp32-0.4.0.bin", info.file); + TEST_ASSERT_EQUAL_VER(0,4,0,&info.ver); + TEST_ASSERT_EQUAL_STRING("929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04", info.sha); +} + +TEST_CASE("download_ota_binary", "[ota]") +{ + test_require_wifi(); + ota_config_t config = { + .host = "https://openairproject.com", + .path = "/ota" + }; + + ota_info_t info = { + .file = "sensor-esp32-0.4.0.bin", + .sha = "929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04" + }; + + TEST_ESP_OK(download_ota_binary(&config, &info, NULL)); +} + +TEST_CASE("full ota", "[ota]") +{ + test_init_wifi(); + ota_config_t ota_config = { + .host = "https://openairproject.com", + .path = "/ota-test", + .min_version=400, + .commit_and_reboot = 0, + .update_partition = NULL, + .interval = 0 + }; + TEST_ESP_OK(check_ota_task(&ota_config)); + TEST_ASSERT_NOT_NULL(ota_config.update_partition); +} diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 4879132..98bfdd9 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -14,4 +14,11 @@ config OAP_RESULT_BUFFER_SIZE Buffer for data that cannot be immediately published because sensor is offline. For some services that can accept only real-time data, this should be set to 1. +config OAP_CONTROL_PANEL + int "enable control panel" + default 1 + help + Enable web-based control panel where you can configure various parameters of the sensor, + including wifi and data publishing settings + endmenu \ No newline at end of file diff --git a/main/main.c b/main/main.c index 7ba957f..b7b2b80 100644 --- a/main/main.c +++ b/main/main.c @@ -47,6 +47,7 @@ #include "oap_storage.h" #include "oap_debug.h" #include "awsiot.h" +#include "ota.h" static const char *TAG = "app"; @@ -256,6 +257,8 @@ static void main_task() { //env_data env = {}; //long env_timestamp = 0; + awsiot_configure(storage_get_config("awsiot")); + while (1) { long localTime = oap_epoch_sec_valid(); long sysTime = oap_epoch_sec(); @@ -277,14 +280,6 @@ static void main_task() { } } -static void ota_task() { - while (1) { - //TODO hit OTA_check, parse response, compare versions - //if there's newer version, download ota, reboot - delay(5000); - } -} - void app_main() { delay(1000); @@ -294,12 +289,11 @@ void app_main() sensor_config = get_config(); //wifi/mongoose requires plenty of mem, start it here - bootWiFi(); + wifi_boot(NULL, CONFIG_OAP_CONTROL_PANEL); pm_queue = xQueueCreate(1, sizeof(pm_data_duo_t)); led_queue = xQueueCreate(10, sizeof(led_cmd)); - xTaskCreate(ota_task, "ota_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); - //xTaskCreate(pm_meter_trigger_task, "pm_meter_trigger_task", 1024*4, NULL, DEFAULT_TASK_PRIORITY, NULL); + start_ota_task(); led_init(get_config().led, led_queue); update_led(); diff --git a/test.sh b/test.sh index d1bedd1..c9fe44e 100755 --- a/test.sh +++ b/test.sh @@ -2,4 +2,4 @@ CONFIG_OAP_CONTROL_PANEL=1 project=`pwd` -make -C ${IDF_PATH}/tools/unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common' flash monitor -j5 \ No newline at end of file +make -C ${IDF_PATH}/tools/unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot' flash monitor -j5 \ No newline at end of file From aede20e8c36bda6417bad92d8e5a536c71f01b2f Mon Sep 17 00:00:00 2001 From: kglowacki Date: Tue, 19 Sep 2017 21:47:50 +0200 Subject: [PATCH 037/200] draft --- bin/firmware_installer.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 bin/firmware_installer.py diff --git a/bin/firmware_installer.py b/bin/firmware_installer.py new file mode 100644 index 0000000..e60e746 --- /dev/null +++ b/bin/firmware_installer.py @@ -0,0 +1,18 @@ +1. ask for UART NAME +2. +make TEMP_DIR +git clone https://github.com/espressif/esptool.git -o TEMP_DIR +3. +TEMP_DIR/esptool.py --port /dev/tty.SLAB_USBtoUART --after no_reset chip_id +4. +fetch https://openairproject.com/ota/index.txt to TEMP_DIR +parse first line +fetch binaries to TEMP_DIR +test sha +5. +fetch partitions_two_ota.bin +fetch bootloader.bin +6. +python TEMP_DIR/esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 921600 --before default_reset + --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect + 0x1000 TEMP_DIR/bootloader.bin 0x10000 TEMP_DIR/sensor-esp32.bin 0x8000 TEMP_DIR/partitions_two_ota.bin \ No newline at end of file From 965f2d0e4f46c522c2396de3406c0d4d08db0e96 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Thu, 21 Sep 2017 20:25:41 +0200 Subject: [PATCH 038/200] fix ota tests --- components/awsiot/test/test_awsiot.c | 2 +- components/ota/test/files/hello-world.bin | Bin 0 -> 121712 bytes components/ota/test/files/index.txt | 5 ++ components/ota/test/test_ota.c | 71 +++++++++++----------- 4 files changed, 43 insertions(+), 35 deletions(-) create mode 100644 components/ota/test/files/hello-world.bin create mode 100644 components/ota/test/files/index.txt diff --git a/components/awsiot/test/test_awsiot.c b/components/awsiot/test/test_awsiot.c index 6cc1d95..7b75fd4 100644 --- a/components/awsiot/test/test_awsiot.c +++ b/components/awsiot/test/test_awsiot.c @@ -53,7 +53,7 @@ TEST_CASE("publish results to awsiot", "awsiot") ESP_LOGW(TAG, "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); prev_heap = curr_heap; TEST_ESP_OK(publish()); - delay(1000); + if (i) delay(1000); } free(get_awsiot_config()->cert); diff --git a/components/ota/test/files/hello-world.bin b/components/ota/test/files/hello-world.bin new file mode 100644 index 0000000000000000000000000000000000000000..3352ab878dba4b97a65a7061da1526c3defaaf33 GIT binary patch literal 121712 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Ƀy|B&Gn!w)fx{{gN3l@c?u3dfZR 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 literal 0 HcmV?d00001 diff --git a/components/ota/test/files/index.txt b/components/ota/test/files/index.txt new file mode 100644 index 0000000..b422d6c --- /dev/null +++ b/components/ota/test/files/index.txt @@ -0,0 +1,5 @@ +1.2.3|hello-world.bin|304717e6b5d1f4e98d810a36e361b84f62d8363de55fba487b81ebe0b3d4f676 +0.4.0|sensor-esp32-0.4.0.bin|929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04 +0.3.0|sensor-esp32-0.3.0.bin|123fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c4567 + +#cat sensor-esp32-0.4.0.bin | openssl dgst -sha256 \ No newline at end of file diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index 2349873..e7b9fdb 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -20,6 +20,21 @@ static const char* TAG = "test_ota"; +static ota_config_t ota_test_config = { + .host = "https://openairproject.com", + .path = "/ota-test" +}; + +static ota_info_t hello_world_info = { + .file = "hello-world.bin", + .sha = "304717e6b5d1f4e98d810a36e361b84f62d8363de55fba487b81ebe0b3d4f676", + .ver = { + .major = 1, + .minor = 2, + .patch = 3 + } +}; + void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]); static void TEST_ASSERT_EQUAL_VER(uint8_t expected_major, uint8_t expected_minor, uint8_t expected_patch, oap_version_t* version) { @@ -59,10 +74,6 @@ TEST_CASE("sha","[ota]") TEST_CASE("fetch_last_ota_info", "[ota]") { test_require_wifi(); - ota_config_t config = { - .host = "https://openairproject.com", - .path = "/ota" - }; ota_info_t info; /* * heap consumption goes to 0 after ~5 requests @@ -73,53 +84,45 @@ TEST_CASE("fetch_last_ota_info", "[ota]") curr_heap = xPortGetFreeHeapSize(); ESP_LOGW(TAG, "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); prev_heap = curr_heap; - TEST_ESP_OK(fetch_last_ota_info(&config, &info)); - TEST_ASSERT_EQUAL_STRING("sensor-esp32-0.4.0.bin", info.file); - TEST_ASSERT_EQUAL_VER(0,4,0,&info.ver); - TEST_ASSERT_EQUAL_STRING("929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04", info.sha); - - delay(1000); + TEST_ESP_OK(fetch_last_ota_info(&ota_test_config, &info)); + TEST_ASSERT_EQUAL_STRING(hello_world_info.file, info.file); + TEST_ASSERT_EQUAL_VER(hello_world_info.ver.major,hello_world_info.ver.minor,hello_world_info.ver.patch,&info.ver); + TEST_ASSERT_EQUAL_STRING(hello_world_info.sha, info.sha); + if (i) delay(1000); } } TEST_CASE("parse_ota_info","[ota]") { ota_info_t info; - char* data = "0.4.0|sensor-esp32-0.4.0.bin|929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04\r\n"; + char* data = "1.2.3|hello-world.bin|929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04\r\n"; parse_ota_info(&info, data, strlen(data)); - TEST_ASSERT_EQUAL_STRING("sensor-esp32-0.4.0.bin", info.file); - TEST_ASSERT_EQUAL_VER(0,4,0,&info.ver); + TEST_ASSERT_EQUAL_STRING("hello-world.bin", info.file); + TEST_ASSERT_EQUAL_VER(1,2,3,&info.ver); TEST_ASSERT_EQUAL_STRING("929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04", info.sha); } TEST_CASE("download_ota_binary", "[ota]") { test_require_wifi(); - ota_config_t config = { - .host = "https://openairproject.com", - .path = "/ota" - }; - - ota_info_t info = { - .file = "sensor-esp32-0.4.0.bin", - .sha = "929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04" - }; - - TEST_ESP_OK(download_ota_binary(&config, &info, NULL)); + TEST_ESP_OK(download_ota_binary(&ota_test_config, &hello_world_info, NULL)); } TEST_CASE("full ota", "[ota]") { test_init_wifi(); - ota_config_t ota_config = { - .host = "https://openairproject.com", - .path = "/ota-test", - .min_version=400, - .commit_and_reboot = 0, - .update_partition = NULL, - .interval = 0 - }; - TEST_ESP_OK(check_ota_task(&ota_config)); - TEST_ASSERT_NOT_NULL(ota_config.update_partition); + ota_config_t ota_config; + memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); + ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier + ota_config.commit_and_reboot = 0; + ota_config.update_partition = NULL; + ota_config.interval = 0; + + int ret = check_ota_task(&ota_config); + + //FIXME ignore 'segment invalid length error' - I'm not sure what's wrong with test binary + TEST_ASSERT_TRUE(ret == 0x00 || ret == 0x1503); + + //TEST_ASSERT_NOT_NULL(ota_config.update_partition); } From df712c5074f73fb6f95a7606b4d21c408ffe57b2 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Thu, 21 Sep 2017 22:03:00 +0200 Subject: [PATCH 039/200] bmx280 tests --- components/bmx280/bmx280.c | 23 +++++++---- components/bmx280/include/bmx280.h | 2 + components/bmx280/test/component.mk | 5 +++ components/bmx280/test/test_bmx280.c | 59 ++++++++++++++++++++++++++++ test.sh | 2 +- 5 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 components/bmx280/test/component.mk create mode 100644 components/bmx280/test/test_bmx280.c diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index 0e59a34..f2f29bd 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -34,8 +34,7 @@ static char* TAG = "bmx280"; -static void bmx280_task(bmx280_config_t* bmx280_config) { - +esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { i2c_comm_t i2c_comm = { .i2c_num = bmx280_config->i2c_num, .device_addr = bmx280_config->device_addr @@ -51,10 +50,11 @@ static void bmx280_task(bmx280_config_t* bmx280_config) { }; // TODO strangely, if this is executed inside main task, LEDC fails to initialise properly PWM (and blinks in funny ways)... easy to reproduce. - if (BME280_init(&bmx280_sensor) == ESP_OK) { + esp_err_t ret; + if ((ret = BME280_init(&bmx280_sensor)) == ESP_OK) { while(1) { log_task_stack(TAG); - if (BME280_read(&bmx280_sensor, &result) == ESP_OK) { + if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.sensor, result.temp, result.pressure, result.humidity); if (bmx280_config->callback) { bmx280_config->callback(&result); @@ -62,17 +62,26 @@ static void bmx280_task(bmx280_config_t* bmx280_config) { } else { ESP_LOGW(TAG, "Failed to read data"); } - delay(5000);//bmx280_config->interval); + if (bmx280_config->interval > 0) { + delay(bmx280_config->interval); + } else { + break; + } } } else { ESP_LOGE(TAG, "Failed to initialise"); } + return ret; +} + +static void bmx280_task(bmx280_config_t* bmx280_config) { + bmx280_measurement_loop(bmx280_config); vTaskDelete(NULL); } static uint8_t i2c_drivers[3] = {0}; -static esp_err_t i2c_setup(bmx280_config_t* config) { +esp_err_t bmx280_i2c_setup(bmx280_config_t* config) { if (config->i2c_num > 2) { ESP_LOGE(TAG, "invalid I2C BUS NUMBER (%d)", config->i2c_num); return ESP_FAIL; @@ -101,7 +110,7 @@ static esp_err_t i2c_setup(bmx280_config_t* config) { esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { esp_err_t res; - if ((res = i2c_setup(bmx280_config)) == ESP_OK) { + if ((res = bmx280_i2c_setup(bmx280_config)) == ESP_OK) { //2kb => ~380bytes free xTaskCreate(bmx280_task, "bmx280_task", 1024*3, bmx280_config, DEFAULT_TASK_PRIORITY, NULL); } diff --git a/components/bmx280/include/bmx280.h b/components/bmx280/include/bmx280.h index 02d7706..f828261 100644 --- a/components/bmx280/include/bmx280.h +++ b/components/bmx280/include/bmx280.h @@ -23,6 +23,8 @@ #ifndef MAIN_BMP280_H_ #define MAIN_BMP280_H_ +#include "oap_common.h" + typedef void(*env_callback)(env_data*); typedef struct bmx280_config_t { diff --git a/components/bmx280/test/component.mk b/components/bmx280/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/bmx280/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/bmx280/test/test_bmx280.c b/components/bmx280/test/test_bmx280.c new file mode 100644 index 0000000..009e5eb --- /dev/null +++ b/components/bmx280/test/test_bmx280.c @@ -0,0 +1,59 @@ +/* + * test_bmx280.c + * + * Created on: Sep 21, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "bmx280.h" + +#include +#include +#include +#include +#include +#include "unity.h" + +esp_err_t bmx280_i2c_setup(bmx280_config_t* config); +esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config); +static env_data last_result = {.0}; + +static void collect_result(env_data* result) { + memcpy(&last_result, result, sizeof(env_data)); +} + +static bmx280_config_t cfg = { + .i2c_num = CONFIG_OAP_BMX280_I2C_NUM, + .device_addr= CONFIG_OAP_BMX280_ADDRESS, + .sda_pin= CONFIG_OAP_BMX280_I2C_SDA_PIN, + .scl_pin= CONFIG_OAP_BMX280_I2C_SCL_PIN, + .sensor = 9, + .interval = 0, //no repeat + .callback = &collect_result +}; + +TEST_CASE("bmx280 measurement","[bmx280]") { + TEST_ASSERT_TRUE(CONFIG_OAP_BMX280_ENABLED); + TEST_ESP_OK(bmx280_i2c_setup(&cfg)); + TEST_ESP_OK(bmx280_measurement_loop(&cfg)); + + TEST_ASSERT_EQUAL_UINT(9, last_result.sensor); + TEST_ASSERT_TRUE_MESSAGE(last_result.temp > 10 && last_result.temp < 50, "invalid temperature"); //let's assume we do it indoors ;) + TEST_ASSERT_TRUE_MESSAGE(last_result.pressure>850 && last_result.pressure < 1050, "invalid pressure"); + TEST_ASSERT_TRUE_MESSAGE(last_result.humidity > 0 && last_result.humidity < 100, "invalid humidity"); //bme280 only +} diff --git a/test.sh b/test.sh index c9fe44e..4689b89 100755 --- a/test.sh +++ b/test.sh @@ -2,4 +2,4 @@ CONFIG_OAP_CONTROL_PANEL=1 project=`pwd` -make -C ${IDF_PATH}/tools/unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot' flash monitor -j5 \ No newline at end of file +make -C ${IDF_PATH}/tools/unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot bmx280' flash monitor -j5 \ No newline at end of file From 8c9289ff3180263d66eeb7e9b341a1fbad964256 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 22 Sep 2017 17:16:25 +0200 Subject: [PATCH 040/200] add Unity test app - fixed full ota test - pmsx003 test --- components/bmx280/test/test_bmx280.c | 6 - components/oap_common/test/include/oap_test.h | 9 + components/oap_common/test/oap_test.c | 17 + components/ota/test/test_ota.c | 7 +- components/pmsx003/include/pmsx003.h | 2 +- components/pmsx003/pmsx003.c | 57 +- components/pmsx003/test/component.mk | 5 + components/pmsx003/test/test_pmsx003.c | 85 ++ main/meas_continuous.c | 2 +- main/meas_intervals.c | 8 +- test.sh | 3 +- unit-test-app/.gitignore | 6 + unit-test-app/Makefile | 11 + unit-test-app/README.md | 22 + unit-test-app/components/unity/component.mk | 3 + .../components/unity/include/test_utils.h | 43 + .../components/unity/include/unity.h | 292 ++++ .../components/unity/include/unity_config.h | 88 ++ .../unity/include/unity_internals.h | 772 ++++++++++ unit-test-app/components/unity/license.txt | 21 + unit-test-app/components/unity/ref_clock.c | 169 +++ unit-test-app/components/unity/test_utils.c | 25 + unit-test-app/components/unity/unity.c | 1306 +++++++++++++++++ .../components/unity/unity_platform.c | 224 +++ unit-test-app/main/app_main.c | 20 + unit-test-app/main/component.mk | 4 + .../partition_table_unit_test_app.csv | 10 + 27 files changed, 3178 insertions(+), 39 deletions(-) create mode 100644 components/pmsx003/test/component.mk create mode 100644 components/pmsx003/test/test_pmsx003.c create mode 100644 unit-test-app/.gitignore create mode 100644 unit-test-app/Makefile create mode 100644 unit-test-app/README.md create mode 100644 unit-test-app/components/unity/component.mk create mode 100644 unit-test-app/components/unity/include/test_utils.h create mode 100644 unit-test-app/components/unity/include/unity.h create mode 100644 unit-test-app/components/unity/include/unity_config.h create mode 100644 unit-test-app/components/unity/include/unity_internals.h create mode 100644 unit-test-app/components/unity/license.txt create mode 100644 unit-test-app/components/unity/ref_clock.c create mode 100644 unit-test-app/components/unity/test_utils.c create mode 100644 unit-test-app/components/unity/unity.c create mode 100644 unit-test-app/components/unity/unity_platform.c create mode 100644 unit-test-app/main/app_main.c create mode 100644 unit-test-app/main/component.mk create mode 100644 unit-test-app/partition_table_unit_test_app.csv diff --git a/components/bmx280/test/test_bmx280.c b/components/bmx280/test/test_bmx280.c index 009e5eb..9d143cc 100644 --- a/components/bmx280/test/test_bmx280.c +++ b/components/bmx280/test/test_bmx280.c @@ -21,12 +21,6 @@ */ #include "bmx280.h" - -#include -#include -#include -#include -#include #include "unity.h" esp_err_t bmx280_i2c_setup(bmx280_config_t* config); diff --git a/components/oap_common/test/include/oap_test.h b/components/oap_common/test/include/oap_test.h index ea86f7f..a702f48 100644 --- a/components/oap_common/test/include/oap_test.h +++ b/components/oap_common/test/include/oap_test.h @@ -23,6 +23,8 @@ #ifndef COMPONENTS_OAP_COMMON_TEST_INCLUDE_OAP_TEST_H_ #define COMPONENTS_OAP_COMMON_TEST_INCLUDE_OAP_TEST_H_ +#include "unity.h" + /** * init wifi, do not wait for IP */ @@ -33,4 +35,11 @@ void test_init_wifi(); */ void test_require_wifi(); +typedef struct { + uint32_t started; + uint32_t wait_for; +} test_timer_t; + +int test_timeout(test_timer_t* t); + #endif /* COMPONENTS_OAP_COMMON_TEST_INCLUDE_OAP_TEST_H_ */ diff --git a/components/oap_common/test/oap_test.c b/components/oap_common/test/oap_test.c index cb8ce7c..98c263e 100644 --- a/components/oap_common/test/oap_test.c +++ b/components/oap_common/test/oap_test.c @@ -26,6 +26,11 @@ #include "test_wifi.h" #include "unity.h" +#include "esp_attr.h" +#include "esp_log.h" +#include "esp_system.h" +#include "freertos/FreeRTOS.h" + static const char* TAG = "test"; void test_init_wifi() { @@ -44,3 +49,15 @@ void test_require_wifi() { ESP_LOGI(TAG, "connected"); } + +static uint32_t IRAM_ATTR time_now() +{ + return xTaskGetTickCount() * portTICK_PERIOD_MS; +} + +int test_timeout(test_timer_t* t) { + if (t->started <= 0) t->started = time_now(); + return time_now() - t->started > t->wait_for; +} + + diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index e7b9fdb..9fabd4e 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -121,8 +121,7 @@ TEST_CASE("full ota", "[ota]") int ret = check_ota_task(&ota_config); - //FIXME ignore 'segment invalid length error' - I'm not sure what's wrong with test binary - TEST_ASSERT_TRUE(ret == 0x00 || ret == 0x1503); - - //TEST_ASSERT_NOT_NULL(ota_config.update_partition); + //if OTA partition is too small, you'll get 'segment invalid length error' + TEST_ESP_OK(ret); + TEST_ASSERT_NOT_NULL(ota_config.update_partition); } diff --git a/components/pmsx003/include/pmsx003.h b/components/pmsx003/include/pmsx003.h index b0efec7..5ac8a28 100644 --- a/components/pmsx003/include/pmsx003.h +++ b/components/pmsx003/include/pmsx003.h @@ -26,7 +26,7 @@ #include "oap_common.h" #include "driver/uart.h" -typedef void(*pms_callback)(uint8_t sensor, pm_data*); +typedef void(*pms_callback)(pm_data*); typedef struct pms_config_t { uint8_t indoor; diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index ce95230..606e985 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -40,7 +40,7 @@ static const char* TAG = "pmsX003"; -static void pms_init_uart(pms_config_t* config) { +esp_err_t pms_init_uart(pms_config_t* config) { //configure UART uart_config_t uart_config = { .baud_rate = 9600, @@ -50,11 +50,18 @@ static void pms_init_uart(pms_config_t* config) { .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .rx_flow_ctrl_thresh = 122, }; - uart_param_config(config->uart_num, &uart_config); - uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin); + esp_err_t ret; + if ((ret = uart_param_config(config->uart_num, &uart_config)) != ESP_OK) { + return ret; + } + + if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin)) != ESP_OK) { + return ret; + } //Install UART driver( We don't need an event queue here) - uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + ret = uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + return ret; } static void configure_gpio(uint8_t gpio) { @@ -62,7 +69,7 @@ static void configure_gpio(uint8_t gpio) { ESP_LOGD(TAG, "configure pin %d as output", gpio); gpio_pad_select_gpio(gpio); ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); - gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY); + ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); } } @@ -73,7 +80,7 @@ static void set_gpio(uint8_t gpio, uint8_t enabled) { } } -static void pms_init_gpio(pms_config_t* config) { +void pms_init_gpio(pms_config_t* config) { configure_gpio(config->set_pin); configure_gpio(config->heater_pin); configure_gpio(config->fan_pin); @@ -88,21 +95,29 @@ static pm_data decodepm_data(uint8_t* data, uint8_t startByte) { return pm; } -static void pms_uart_read(pms_config_t* config) { - uint8_t* data = (uint8_t*) malloc(32); - while(1) { - int len = uart_read_bytes(config->uart_num, data, 32, 100 / portTICK_RATE_MS); - if (!config->enabled) continue; - if (len >= 24 && data[0]==0x42 && data[1]==0x4d) { - log_task_stack(TAG); - //ESP_LOGI(TAG, "got frame of %d bytes", len); - pm_data pm = decodepm_data(data, config->indoor ? 4 : 10); //atmospheric from 10th byte, standard from 4th +esp_err_t pms_uart_read(pms_config_t* config, uint8_t data[32]) { + int len = uart_read_bytes(config->uart_num, data, 32, 100 / portTICK_RATE_MS); + if (config->enabled) { + if (len >= 24 && data[0]==0x42 && data[1]==0x4d) { + log_task_stack(TAG); + //ESP_LOGI(TAG, "got frame of %d bytes", len); + pm_data pm = decodepm_data(data, config->indoor ? 4 : 10); //atmospheric from 10th byte, standard from 4th + pm.sensor = config->sensor; if (config->callback) { - config->callback(config->sensor, &pm); + config->callback(&pm); } - } else if (len > 0) { - ESP_LOGW(TAG, "invalid frame of %d", len); //we often get an error after this :( - } + } else if (len > 0) { + ESP_LOGW(TAG, "invalid frame of %d", len); //we often get an error after this :( + return ESP_FAIL; + } + } + return ESP_OK; +} + +static void pms_task(pms_config_t* config) { + uint8_t* data[32]; + while(1) { + pms_uart_read(config, data); } vTaskDelete(NULL); } @@ -122,10 +137,10 @@ esp_err_t pms_init(pms_config_t* config) { pms_init_uart(config); char task_name[100]; - sprintf(task_name, "pm_uart_read_%d", config->sensor); + sprintf(task_name, "pms_sensor_%d", config->sensor); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) - xTaskCreate(pms_uart_read, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate(pms_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo } diff --git a/components/pmsx003/test/component.mk b/components/pmsx003/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/pmsx003/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/pmsx003/test/test_pmsx003.c b/components/pmsx003/test/test_pmsx003.c new file mode 100644 index 0000000..a944346 --- /dev/null +++ b/components/pmsx003/test/test_pmsx003.c @@ -0,0 +1,85 @@ +/* + * test_pmsx003.c + * + * Created on: Sep 21, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + + +#include "pmsx003.h" +#include "oap_test.h" + +static pm_data last_result; + +static int got_result = 0; +static void pms_test_callback(pm_data* result) { + got_result = 1; + memcpy(&last_result, result, sizeof(pm_data)); +} + +static pms_config_t config = { + .indoor = 1, + .enabled = 1, + .sensor = 7, + .callback = pms_test_callback, + .set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN, + .heater_pin = 0, + .fan_pin = 0, + .heater_enabled = 0, + .fan_enabled = 0, + .uart_num = CONFIG_OAP_PM_UART_NUM, + .uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN, + .uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN, + .uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN, + .uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN +}; + +esp_err_t pms_init_uart(pms_config_t* config); +void pms_init_gpio(pms_config_t* config); +esp_err_t pms_uart_read(pms_config_t* config, uint8_t data[32]); + +static int uart_installed = 0; + +TEST_CASE("pmsx003 measurement","pmsx003") { + pms_init_gpio(&config); + if (!uart_installed) { + TEST_ESP_OK(pms_init_uart(&config)); + uart_installed = 1; + } + got_result = 0; + uint8_t data[32]; + + test_timer_t t = { + .started = 0, + .wait_for = 10000 //it takes a while to spin it up + }; + + TEST_ESP_OK(pms_enable(&config, 1)); + while (!got_result && !test_timeout(&t)) { + pms_uart_read(&config, data); + } + TEST_ESP_OK(pms_enable(&config, 0)); + TEST_ASSERT_TRUE_MESSAGE(got_result, "timeout while waiting for measurement"); + + TEST_ASSERT_EQUAL_INT(config.sensor, last_result.sensor); + TEST_ASSERT_TRUE_MESSAGE(last_result.pm1_0 > 0, "no pm1.0"); + TEST_ASSERT_TRUE_MESSAGE(last_result.pm2_5 > 0, "no pm2.5"); + TEST_ASSERT_TRUE_MESSAGE(last_result.pm10 > 0, "no pm10"); +} + + diff --git a/main/meas_continuous.c b/main/meas_continuous.c index d100d2d..f64c697 100644 --- a/main/meas_continuous.c +++ b/main/meas_continuous.c @@ -32,7 +32,7 @@ typedef struct { uint8_t sensor_count; sensor_model_t* sensors; -static void collect(uint8_t s, pm_data* pm) { +static void collect(pm_data* pm) { } diff --git a/main/meas_intervals.c b/main/meas_intervals.c index 3fa73de..3eb9893 100644 --- a/main/meas_intervals.c +++ b/main/meas_intervals.c @@ -43,9 +43,9 @@ static void pm_data_print(char* str, uint8_t sensor, pm_data* pm) { ESP_LOGI(TAG, "%s[%d] pm1.0=%d pm2.5=%d pm10=%d", str, sensor, pm->pm1_0, pm->pm2_5, pm->pm10); } -static void collect(uint8_t s, pm_data* pm) { +static void collect(pm_data* pm) { long localTime; - sensor_model_t* sensor = sensors+s; + sensor_model_t* sensor = sensors+pm->sensor; pm_data* buf = sensor->samples+(sensor->sample_count % CONFIG_OAP_PM_SAMPLE_BUF_SIZE); memcpy(buf, pm, sizeof(pm_data)); @@ -58,9 +58,9 @@ static void collect(uint8_t s, pm_data* pm) { if (localTime - startedAt > _params.warmUpTime) { sensor->sample_count++; - pm_data_print("collect", s, buf); + pm_data_print("collect", pm->sensor, buf); } else { - pm_data_print("warming", s, buf); + pm_data_print("warming", pm->sensor, buf); } } diff --git a/test.sh b/test.sh index 4689b89..3eae2ae 100755 --- a/test.sh +++ b/test.sh @@ -1,5 +1,4 @@ #https://www.esp32.com/viewtopic.php?t=2867 -CONFIG_OAP_CONTROL_PANEL=1 project=`pwd` -make -C ${IDF_PATH}/tools/unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot bmx280' flash monitor -j5 \ No newline at end of file +make -C unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot bmx280 pmsx003' flash monitor -j5 \ No newline at end of file diff --git a/unit-test-app/.gitignore b/unit-test-app/.gitignore new file mode 100644 index 0000000..e03cb58 --- /dev/null +++ b/unit-test-app/.gitignore @@ -0,0 +1,6 @@ +build/ +sdkconfig +sdkconfig.* +.DS_Store +main/*.bak +core.dat diff --git a/unit-test-app/Makefile b/unit-test-app/Makefile new file mode 100644 index 0000000..8ec75f8 --- /dev/null +++ b/unit-test-app/Makefile @@ -0,0 +1,11 @@ +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# + +PROJECT_NAME := unit-test-app + +include $(IDF_PATH)/make/project.mk + +print_flash_cmd: + echo $(ESPTOOL_WRITE_FLASH_OPTIONS) $(ESPTOOL_ALL_FLASH_ARGS) | sed -e 's:'$(PWD)/build/'::g' diff --git a/unit-test-app/README.md b/unit-test-app/README.md new file mode 100644 index 0000000..1f06be5 --- /dev/null +++ b/unit-test-app/README.md @@ -0,0 +1,22 @@ +# Unit Test App + +ESP-IDF unit tests are run using Unit Test App. The app can be built with the unit tests for a specific component. Unit tests are in `test` subdirectories of respective components. + +# Building Unit Test App + +* Follow the setup instructions in the top-level esp-idf README. +* Set IDF_PATH environment variable to point to the path to the esp-idf top-level directory. +* Change into `tools/unit-test-app` directory +* `make menuconfig` to configure the Unit Test App. +* `make TEST_COMPONENTS=` with `TEST_COMPONENTS` set to names of the components to be included in the test app. Or `make TESTS_ALL=1` to build the test app with all the tests for components having `test` subdirectory. +* Follow the printed instructions to flash, or run `make flash`. + +# Running Unit Tests + +The unit test loader will prompt by showing a menu of available tests to run: + +* Type a number to run a single test. +* `*` to run all tests. +* `[tagname]` to run tests with "tag" +* `![tagname]` to run tests without "tag" (`![ignore]` is very useful as it runs all CI-enabled tests.) +* `"test name here"` to run test with given name diff --git a/unit-test-app/components/unity/component.mk b/unit-test-app/components/unity/component.mk new file mode 100644 index 0000000..ebd7a7d --- /dev/null +++ b/unit-test-app/components/unity/component.mk @@ -0,0 +1,3 @@ +# +# Component Makefile +# diff --git a/unit-test-app/components/unity/include/test_utils.h b/unit-test-app/components/unity/include/test_utils.h new file mode 100644 index 0000000..ba9c62d --- /dev/null +++ b/unit-test-app/components/unity/include/test_utils.h @@ -0,0 +1,43 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#pragma once + +// Utilities for esp-idf unit tests + +#include +#include + +/* Return the 'flash_test' custom data partition (type 0x55) + defined in the custom partition table. +*/ +const esp_partition_t *get_test_data_partition(); + +/** + * @brief Initialize reference clock + * + * Reference clock provides timestamps at constant 1 MHz frequency, even when + * the APB frequency is changing. + */ +void ref_clock_init(); + +/** + * @brief Deinitialize reference clock + */ +void ref_clock_deinit(); + +/** + * @brief Get reference clock timestamp + * @return number of microseconds since the reference clock was initialized + */ +uint64_t ref_clock_get(); diff --git a/unit-test-app/components/unity/include/unity.h b/unit-test-app/components/unity/include/unity.h new file mode 100644 index 0000000..3ffc14c --- /dev/null +++ b/unit-test-app/components/unity/include/unity.h @@ -0,0 +1,292 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#ifndef UNITY_FRAMEWORK_H +#define UNITY_FRAMEWORK_H +#define UNITY + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define UNITY_INCLUDE_CONFIG_H +#include "unity_internals.h" + +void setUp(void); +void tearDown(void); + +/*------------------------------------------------------- + * Configuration Options + *------------------------------------------------------- + * All options described below should be passed as a compiler flag to all files using Unity. If you must add #defines, place them BEFORE the #include above. + + * Integers/longs/pointers + * - Unity attempts to automatically discover your integer sizes + * - define UNITY_EXCLUDE_STDINT_H to stop attempting to look in + * - define UNITY_EXCLUDE_LIMITS_H to stop attempting to look in + * - define UNITY_EXCLUDE_SIZEOF to stop attempting to use sizeof in macros + * - If you cannot use the automatic methods above, you can force Unity by using these options: + * - define UNITY_SUPPORT_64 + * - define UNITY_INT_WIDTH + * - UNITY_LONG_WIDTH + * - UNITY_POINTER_WIDTH + + * Floats + * - define UNITY_EXCLUDE_FLOAT to disallow floating point comparisons + * - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT + * - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats + * - define UNITY_FLOAT_VERBOSE to print floating point values in errors (uses sprintf) + * - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons + * - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default) + * - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE + * - define UNITY_DOUBLE_TYPE to specify something other than double + * - define UNITY_DOUBLE_VERBOSE to print floating point values in errors (uses sprintf) + * - define UNITY_VERBOSE_NUMBER_MAX_LENGTH to change maximum length of printed numbers (used by sprintf) + + * Output + * - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if desired + * - define UNITY_DIFFERENTIATE_FINAL_FAIL to print FAILED (vs. FAIL) at test end summary - for automated search for failure + + * Optimization + * - by default, line numbers are stored in unsigned shorts. Define UNITY_LINE_TYPE with a different type if your files are huge + * - by default, test and failure counters are unsigned shorts. Define UNITY_COUNTER_TYPE with a different type if you want to save space or have more than 65535 Tests. + + * Test Cases + * - define UNITY_SUPPORT_TEST_CASES to include the TEST_CASE macro, though really it's mostly about the runner generator script + + * Parameterized Tests + * - you'll want to create a define of TEST_CASE(...) which basically evaluates to nothing + + *------------------------------------------------------- + * Basic Fail and Ignore + *-------------------------------------------------------*/ + +#define TEST_FAIL_MESSAGE(message) UNITY_TEST_FAIL(__LINE__, (message)) +#define TEST_FAIL() UNITY_TEST_FAIL(__LINE__, NULL) +#define TEST_IGNORE_MESSAGE(message) UNITY_TEST_IGNORE(__LINE__, (message)) +#define TEST_IGNORE() UNITY_TEST_IGNORE(__LINE__, NULL) +#define TEST_ONLY() + +/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails. + * This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */ +#define TEST_PASS() longjmp(Unity.AbortFrame, 1) + +/*------------------------------------------------------- + * Test Asserts (simple) + *-------------------------------------------------------*/ + +/* Boolean */ +#define TEST_ASSERT(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expression Evaluated To FALSE") +#define TEST_ASSERT_TRUE(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expected TRUE Was FALSE") +#define TEST_ASSERT_UNLESS(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expression Evaluated To TRUE") +#define TEST_ASSERT_FALSE(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expected FALSE Was TRUE") +#define TEST_ASSERT_NULL(pointer) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, " Expected NULL") +#define TEST_ASSERT_NOT_NULL(pointer) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, " Expected Non-NULL") + +/* Integers (of all sizes) */ +#define TEST_ASSERT_EQUAL_INT(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal") +#define TEST_ASSERT_EQUAL_UINT(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX8(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX16(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX32(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX64(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS(mask, expected, actual) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS_HIGH(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(-1), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS_LOW(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(0), (actual), __LINE__, NULL) +#define TEST_ASSERT_BIT_HIGH(bit, actual) UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(-1), (actual), __LINE__, NULL) +#define TEST_ASSERT_BIT_LOW(bit, actual) UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(0), (actual), __LINE__, NULL) + +/* Integer Ranges (of all sizes) */ +#define TEST_ASSERT_INT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, NULL) + +/* Structs and Strings */ +#define TEST_ASSERT_EQUAL_PTR(expected, actual) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING(expected, actual) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, NULL) + +/* Arrays */ +#define TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, NULL) + +/* Floating Point (If Enabled) */ +#define TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, NULL) + +/* Double (If Enabled) */ +#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, NULL) + +/*------------------------------------------------------- + * Test Asserts (with additional messages) + *-------------------------------------------------------*/ + +/* Boolean */ +#define TEST_ASSERT_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message)) +#define TEST_ASSERT_TRUE_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message)) +#define TEST_ASSERT_UNLESS_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message)) +#define TEST_ASSERT_FALSE_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message)) +#define TEST_ASSERT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, (message)) +#define TEST_ASSERT_NOT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, (message)) + +/* Integers (of all sizes) */ +#define TEST_ASSERT_EQUAL_INT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_MESSAGE(mask, expected, actual, message) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_HIGH_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(-1), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_LOW_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(0), (actual), __LINE__, (message)) +#define TEST_ASSERT_BIT_HIGH_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(-1), (actual), __LINE__, (message)) +#define TEST_ASSERT_BIT_LOW_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(0), (actual), __LINE__, (message)) + +/* Integer Ranges (of all sizes) */ +#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, (message)) + +/* Structs and Strings */ +#define TEST_ASSERT_EQUAL_PTR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MEMORY_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, (message)) + +/* Arrays */ +#define TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_PTR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MEMORY_ARRAY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, (message)) + +/* Floating Point (If Enabled) */ +#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, (message)) + +/* Double (If Enabled) */ +#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, (message)) + +/* end of UNITY_FRAMEWORK_H */ +#ifdef __cplusplus +} +#endif +#endif diff --git a/unit-test-app/components/unity/include/unity_config.h b/unit-test-app/components/unity/include/unity_config.h new file mode 100644 index 0000000..90be3a9 --- /dev/null +++ b/unit-test-app/components/unity/include/unity_config.h @@ -0,0 +1,88 @@ +#ifndef UNITY_CONFIG_H +#define UNITY_CONFIG_H + +// This file gets included from unity.h via unity_internals.h +// It is inside #ifdef __cplusplus / extern "C" block, so we can +// only use C features here + +// Adapt Unity to our environment, disable FP support + +#include + +/* Some definitions applicable to Unity running in FreeRTOS */ +#define UNITY_FREERTOS_PRIORITY 5 +#define UNITY_FREERTOS_CPU 0 + +#define UNITY_EXCLUDE_FLOAT +#define UNITY_EXCLUDE_DOUBLE + +#define UNITY_OUTPUT_CHAR unity_putc +#define UNITY_OUTPUT_FLUSH unity_flush + +// Define helpers to register test cases from multiple files + +#define UNITY_EXPAND2(a, b) a ## b +#define UNITY_EXPAND(a, b) UNITY_EXPAND2(a, b) +#define UNITY_TEST_UID(what) UNITY_EXPAND(what, __LINE__) + +#define UNITY_TEST_REG_HELPER reg_helper ## UNITY_TEST_UID +#define UNITY_TEST_DESC_UID desc ## UNITY_TEST_UID +struct test_desc_t +{ + const char* name; + const char* desc; + void (*fn)(void); + const char* file; + int line; + struct test_desc_t* next; +}; + +void unity_testcase_register(struct test_desc_t* desc); + +void unity_run_menu(); + +void unity_run_tests_with_filter(const char* filter); + +void unity_run_all_tests(); + +/* Test case macro, a-la CATCH framework. + First argument is a free-form description, + second argument is (by convention) a list of identifiers, each one in square brackets. + Identifiers are used to group related tests, or tests with specific properties. + Use like: + + TEST_CASE("Frobnicator forbnicates", "[frobnicator][rom]") + { + // test goes here + } +*/ +#define TEST_CASE(name_, desc_) \ + static void UNITY_TEST_UID(test_func_) (void); \ + static void __attribute__((constructor)) UNITY_TEST_UID(test_reg_helper_) () \ + { \ + static struct test_desc_t UNITY_TEST_UID(test_desc_) = { \ + .name = name_, \ + .desc = desc_, \ + .fn = &UNITY_TEST_UID(test_func_), \ + .file = __FILE__, \ + .line = __LINE__, \ + .next = NULL \ + }; \ + unity_testcase_register( & UNITY_TEST_UID(test_desc_) ); \ + }\ + static void UNITY_TEST_UID(test_func_) (void) +/** + * Note: initialization of test_desc_t fields above has to be done exactly + * in the same order as the fields are declared in the structure. + * Otherwise the initializer will not be valid in C++ (which doesn't + * support designated initializers). G++ can parse the syntax, but + * field names are treated as annotations and don't affect initialization + * order. Also make sure all the fields are initialized. + */ + +// shorthand to check esp_err_t return code +#define TEST_ESP_OK(rc) TEST_ASSERT_EQUAL_HEX32(ESP_OK, rc) +#define TEST_ESP_ERR(err, rc) TEST_ASSERT_EQUAL_HEX32(err, rc) + + +#endif //UNITY_CONFIG_H diff --git a/unit-test-app/components/unity/include/unity_internals.h b/unit-test-app/components/unity/include/unity_internals.h new file mode 100644 index 0000000..03d196f --- /dev/null +++ b/unit-test-app/components/unity/include/unity_internals.h @@ -0,0 +1,772 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#ifndef UNITY_INTERNALS_H +#define UNITY_INTERNALS_H + +#ifdef UNITY_INCLUDE_CONFIG_H +#include "unity_config.h" +#endif + +#include + +/* Unity Attempts to Auto-Detect Integer Types + * Attempt 1: UINT_MAX, ULONG_MAX, etc in + * Attempt 2: UINT_MAX, ULONG_MAX, etc in + * Attempt 3: Deduced from sizeof() macros */ +#ifndef UNITY_EXCLUDE_STDINT_H +#include +#endif + +#ifndef UNITY_EXCLUDE_LIMITS_H +#include +#endif + +#ifndef UNITY_EXCLUDE_SIZEOF +#ifndef UINT_MAX +#define UINT_MAX (sizeof(unsigned int) * 256 - 1) +#endif +#ifndef ULONG_MAX +#define ULONG_MAX (sizeof(unsigned long) * 256 - 1) +#endif +#ifndef UINTPTR_MAX +/* apparently this is not a constant expression: (sizeof(unsigned int *) * 256 - 1) so we have to just let this fall through */ +#endif +#endif + +#ifndef UNITY_EXCLUDE_MATH_H +#include +#endif + +/*------------------------------------------------------- + * Guess Widths If Not Specified + *-------------------------------------------------------*/ + +/* Determine the size of an int, if not already specificied. + * We cannot use sizeof(int), because it is not yet defined + * at this stage in the trnslation of the C program. + * Therefore, infer it from UINT_MAX if possible. */ +#ifndef UNITY_INT_WIDTH + #ifdef UINT_MAX + #if (UINT_MAX == 0xFFFF) + #define UNITY_INT_WIDTH (16) + #elif (UINT_MAX == 0xFFFFFFFF) + #define UNITY_INT_WIDTH (32) + #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_INT_WIDTH (64) + #endif + #endif +#endif +#ifndef UNITY_INT_WIDTH + #define UNITY_INT_WIDTH (32) +#endif + +/* Determine the size of a long, if not already specified, + * by following the process used above to define + * UNITY_INT_WIDTH. */ +#ifndef UNITY_LONG_WIDTH + #ifdef ULONG_MAX + #if (ULONG_MAX == 0xFFFF) + #define UNITY_LONG_WIDTH (16) + #elif (ULONG_MAX == 0xFFFFFFFF) + #define UNITY_LONG_WIDTH (32) + #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_LONG_WIDTH (64) + #endif + #endif +#endif +#ifndef UNITY_LONG_WIDTH + #define UNITY_LONG_WIDTH (32) +#endif + +/* Determine the size of a pointer, if not already specified, + * by following the process used above to define + * UNITY_INT_WIDTH. */ +#ifndef UNITY_POINTER_WIDTH + #ifdef UINTPTR_MAX + #if (UINTPTR_MAX+0 <= 0xFFFF) + #define UNITY_POINTER_WIDTH (16) + #elif (UINTPTR_MAX+0 <= 0xFFFFFFFF) + #define UNITY_POINTER_WIDTH (32) + #elif (UINTPTR_MAX+0 <= 0xFFFFFFFFFFFFFFFF) + #define UNITY_POINTER_WIDTH (64) + #endif + #endif +#endif +#ifndef UNITY_POINTER_WIDTH + #ifdef INTPTR_MAX + #if (INTPTR_MAX+0 <= 0x7FFF) + #define UNITY_POINTER_WIDTH (16) + #elif (INTPTR_MAX+0 <= 0x7FFFFFFF) + #define UNITY_POINTER_WIDTH (32) + #elif (INTPTR_MAX+0 <= 0x7FFFFFFFFFFFFFFF) + #define UNITY_POINTER_WIDTH (64) + #endif + #endif +#endif +#ifndef UNITY_POINTER_WIDTH + #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH +#endif + +/*------------------------------------------------------- + * Int Support (Define types based on detected sizes) + *-------------------------------------------------------*/ + +#if (UNITY_INT_WIDTH == 32) + typedef unsigned char _UU8; + typedef unsigned short _UU16; + typedef unsigned int _UU32; + typedef signed char _US8; + typedef signed short _US16; + typedef signed int _US32; +#elif (UNITY_INT_WIDTH == 16) + typedef unsigned char _UU8; + typedef unsigned int _UU16; + typedef unsigned long _UU32; + typedef signed char _US8; + typedef signed int _US16; + typedef signed long _US32; +#else + #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported) +#endif + +/*------------------------------------------------------- + * 64-bit Support + *-------------------------------------------------------*/ + +#ifndef UNITY_SUPPORT_64 +#if UNITY_LONG_WIDTH > 32 +#define UNITY_SUPPORT_64 +#endif +#endif +#ifndef UNITY_SUPPORT_64 +#if UNITY_POINTER_WIDTH > 32 +#define UNITY_SUPPORT_64 +#endif +#endif + +#ifndef UNITY_SUPPORT_64 + +/* No 64-bit Support */ +typedef _UU32 _U_UINT; +typedef _US32 _U_SINT; + +#else + +/* 64-bit Support */ +#if (UNITY_LONG_WIDTH == 32) + typedef unsigned long long _UU64; + typedef signed long long _US64; +#elif (UNITY_LONG_WIDTH == 64) + typedef unsigned long _UU64; + typedef signed long _US64; +#else + #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported) +#endif +typedef _UU64 _U_UINT; +typedef _US64 _U_SINT; + +#endif + +/*------------------------------------------------------- + * Pointer Support + *-------------------------------------------------------*/ + +#if (UNITY_POINTER_WIDTH == 32) + typedef _UU32 _UP; +#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32 +#elif (UNITY_POINTER_WIDTH == 64) + typedef _UU64 _UP; +#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64 +#elif (UNITY_POINTER_WIDTH == 16) + typedef _UU16 _UP; +#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16 +#else + #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported) +#endif + +#ifndef UNITY_PTR_ATTRIBUTE +#define UNITY_PTR_ATTRIBUTE +#endif + +#ifndef UNITY_INTERNAL_PTR +#define UNITY_INTERNAL_PTR UNITY_PTR_ATTRIBUTE const void* +/* #define UNITY_INTERNAL_PTR UNITY_PTR_ATTRIBUTE const _UU8* */ +#endif + +/*------------------------------------------------------- + * Float Support + *-------------------------------------------------------*/ + +#ifdef UNITY_EXCLUDE_FLOAT + +/* No Floating Point Support */ +#undef UNITY_INCLUDE_FLOAT +#undef UNITY_FLOAT_PRECISION +#undef UNITY_FLOAT_TYPE +#undef UNITY_FLOAT_VERBOSE + +#else + +#ifndef UNITY_INCLUDE_FLOAT +#define UNITY_INCLUDE_FLOAT +#endif + +/* Floating Point Support */ +#ifndef UNITY_FLOAT_PRECISION +#define UNITY_FLOAT_PRECISION (0.00001f) +#endif +#ifndef UNITY_FLOAT_TYPE +#define UNITY_FLOAT_TYPE float +#endif +typedef UNITY_FLOAT_TYPE _UF; + +#ifndef isinf +#define isinf(n) (((1.0f / f_zero) == n) ? 1 : 0) || (((-1.0f / f_zero) == n) ? 1 : 0) +#define UNITY_FLOAT_NEEDS_ZERO +#endif + +#ifndef isnan +#define isnan(n) ((n != n) ? 1 : 0) +#endif + +#ifndef isneg +#define isneg(n) ((n < 0.0f) ? 1 : 0) +#endif + +#ifndef ispos +#define ispos(n) ((n > 0.0f) ? 1 : 0) +#endif + +#endif + +/*------------------------------------------------------- + * Double Float Support + *-------------------------------------------------------*/ + +/* unlike FLOAT, we DON'T include by default */ +#ifndef UNITY_EXCLUDE_DOUBLE +#ifndef UNITY_INCLUDE_DOUBLE +#define UNITY_EXCLUDE_DOUBLE +#endif +#endif + +#ifdef UNITY_EXCLUDE_DOUBLE + +/* No Floating Point Support */ +#undef UNITY_DOUBLE_PRECISION +#undef UNITY_DOUBLE_TYPE +#undef UNITY_DOUBLE_VERBOSE + +#ifdef UNITY_INCLUDE_DOUBLE +#undef UNITY_INCLUDE_DOUBLE +#endif + +#else + +/* Double Floating Point Support */ +#ifndef UNITY_DOUBLE_PRECISION +#define UNITY_DOUBLE_PRECISION (1e-12f) +#endif +#ifndef UNITY_DOUBLE_TYPE +#define UNITY_DOUBLE_TYPE double +#endif +typedef UNITY_DOUBLE_TYPE _UD; + +#endif + +#ifdef UNITY_DOUBLE_VERBOSE +#ifndef UNITY_FLOAT_VERBOSE +#define UNITY_FLOAT_VERBOSE +#endif +#endif + +/*------------------------------------------------------- + * Output Method: stdout (DEFAULT) + *-------------------------------------------------------*/ +#ifndef UNITY_OUTPUT_CHAR +/* Default to using putchar, which is defined in stdio.h */ +#include +#define UNITY_OUTPUT_CHAR(a) (void)putchar(a) +#else + /* If defined as something else, make sure we declare it here so it's ready for use */ + #ifndef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION +extern void UNITY_OUTPUT_CHAR(int); + #endif +#endif + +#ifndef UNITY_OUTPUT_FLUSH +/* Default to using putchar, which is defined in stdio.h */ +#include +#define UNITY_OUTPUT_FLUSH() (void)fflush(stdout) +#else + /* If defined as something else, make sure we declare it here so it's ready for use */ + #ifndef UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION +extern void UNITY_OUTPUT_FLUSH(void); + #endif +#endif + +#ifndef UNITY_PRINT_EOL +#define UNITY_PRINT_EOL() UNITY_OUTPUT_CHAR('\n') +#endif + +#ifndef UNITY_OUTPUT_START +#define UNITY_OUTPUT_START() +#endif + +#ifndef UNITY_OUTPUT_COMPLETE +#define UNITY_OUTPUT_COMPLETE() +#endif + +/*------------------------------------------------------- + * Footprint + *-------------------------------------------------------*/ + +#ifndef UNITY_LINE_TYPE +#define UNITY_LINE_TYPE _U_UINT +#endif + +#ifndef UNITY_COUNTER_TYPE +#define UNITY_COUNTER_TYPE _U_UINT +#endif + +/*------------------------------------------------------- + * Language Features Available + *-------------------------------------------------------*/ +#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA) +# ifdef __GNUC__ /* includes clang */ +# if !(defined(__WIN32__) && defined(__clang__)) +# define UNITY_WEAK_ATTRIBUTE __attribute__((weak)) +# endif +# endif +#endif + +#ifdef UNITY_NO_WEAK +# undef UNITY_WEAK_ATTRIBUTE +# undef UNITY_WEAK_PRAGMA +#endif + + +/*------------------------------------------------------- + * Internal Structs Needed + *-------------------------------------------------------*/ + +typedef void (*UnityTestFunction)(void); + +#define UNITY_DISPLAY_RANGE_INT (0x10) +#define UNITY_DISPLAY_RANGE_UINT (0x20) +#define UNITY_DISPLAY_RANGE_HEX (0x40) +#define UNITY_DISPLAY_RANGE_AUTO (0x80) + +typedef enum +{ +#if (UNITY_INT_WIDTH == 16) + UNITY_DISPLAY_STYLE_INT = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, +#elif (UNITY_INT_WIDTH == 32) + UNITY_DISPLAY_STYLE_INT = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, +#elif (UNITY_INT_WIDTH == 64) + UNITY_DISPLAY_STYLE_INT = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, +#endif + UNITY_DISPLAY_STYLE_INT8 = 1 + UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT16 = 2 + UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT32 = 4 + UNITY_DISPLAY_RANGE_INT, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_INT64 = 8 + UNITY_DISPLAY_RANGE_INT, +#endif + +#if (UNITY_INT_WIDTH == 16) + UNITY_DISPLAY_STYLE_UINT = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, +#elif (UNITY_INT_WIDTH == 32) + UNITY_DISPLAY_STYLE_UINT = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, +#elif (UNITY_INT_WIDTH == 64) + UNITY_DISPLAY_STYLE_UINT = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, +#endif + UNITY_DISPLAY_STYLE_UINT8 = 1 + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT16 = 2 + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT32 = 4 + UNITY_DISPLAY_RANGE_UINT, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_UINT64 = 8 + UNITY_DISPLAY_RANGE_UINT, +#endif + UNITY_DISPLAY_STYLE_HEX8 = 1 + UNITY_DISPLAY_RANGE_HEX, + UNITY_DISPLAY_STYLE_HEX16 = 2 + UNITY_DISPLAY_RANGE_HEX, + UNITY_DISPLAY_STYLE_HEX32 = 4 + UNITY_DISPLAY_RANGE_HEX, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_HEX64 = 8 + UNITY_DISPLAY_RANGE_HEX, +#endif + UNITY_DISPLAY_STYLE_UNKNOWN +} UNITY_DISPLAY_STYLE_T; + +#ifndef UNITY_EXCLUDE_FLOAT +typedef enum _UNITY_FLOAT_TRAIT_T +{ + UNITY_FLOAT_IS_NOT_INF = 0, + UNITY_FLOAT_IS_INF, + UNITY_FLOAT_IS_NOT_NEG_INF, + UNITY_FLOAT_IS_NEG_INF, + UNITY_FLOAT_IS_NOT_NAN, + UNITY_FLOAT_IS_NAN, + UNITY_FLOAT_IS_NOT_DET, + UNITY_FLOAT_IS_DET, + UNITY_FLOAT_INVALID_TRAIT +} UNITY_FLOAT_TRAIT_T; +#endif + +struct _Unity +{ + const char* TestFile; + const char* CurrentTestName; +#ifndef UNITY_EXCLUDE_DETAILS + const char* CurrentDetail1; + const char* CurrentDetail2; +#endif + UNITY_LINE_TYPE CurrentTestLineNumber; + UNITY_COUNTER_TYPE NumberOfTests; + UNITY_COUNTER_TYPE TestFailures; + UNITY_COUNTER_TYPE TestIgnores; + UNITY_COUNTER_TYPE CurrentTestFailed; + UNITY_COUNTER_TYPE CurrentTestIgnored; + jmp_buf AbortFrame; +}; + +extern struct _Unity Unity; + +/*------------------------------------------------------- + * Test Suite Management + *-------------------------------------------------------*/ + +void UnityBegin(const char* filename); +int UnityEnd(void); +void UnityConcludeTest(void); +void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum); + +/*------------------------------------------------------- + * Details Support + *-------------------------------------------------------*/ + +#ifdef UNITY_EXCLUDE_DETAILS +#define UNITY_CLR_DETAILS() +#define UNITY_SET_DETAIL(d1) +#define UNITY_SET_DETAILS(d1,d2) +#else +#define UNITY_CLR_DETAILS() { Unity.CurrentDetail1 = 0; Unity.CurrentDetail2 = 0; } +#define UNITY_SET_DETAIL(d1) { Unity.CurrentDetail1 = d1; Unity.CurrentDetail2 = 0; } +#define UNITY_SET_DETAILS(d1,d2) { Unity.CurrentDetail1 = d1; Unity.CurrentDetail2 = d2; } + +#ifndef UNITY_DETAIL1_NAME +#define UNITY_DETAIL1_NAME "Function" +#endif + +#ifndef UNITY_DETAIL2_NAME +#define UNITY_DETAIL2_NAME "Argument" +#endif +#endif + +/*------------------------------------------------------- + * Test Output + *-------------------------------------------------------*/ + +void UnityPrint(const char* string); +void UnityPrintMask(const _U_UINT mask, const _U_UINT number); +void UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style); +void UnityPrintNumber(const _U_SINT number); +void UnityPrintNumberUnsigned(const _U_UINT number); +void UnityPrintNumberHex(const _U_UINT number, const char nibbles); + +#ifdef UNITY_FLOAT_VERBOSE +void UnityPrintFloat(const _UF number); +#endif + +/*------------------------------------------------------- + * Test Assertion Fuctions + *------------------------------------------------------- + * Use the macros below this section instead of calling + * these directly. The macros have a consistent naming + * convention and will pull in file and line information + * for you. */ + +void UnityAssertEqualNumber(const _U_SINT expected, + const _U_SINT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityAssertBits(const _U_SINT mask, + const _U_SINT expected, + const _U_SINT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualString(const char* expected, + const char* actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualStringLen(const char* expected, + const char* actual, + const _UU32 length, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualStringArray( const char** expected, + const char** actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const _UU32 length, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertNumbersWithin(const _U_UINT delta, + const _U_SINT expected, + const _U_SINT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityFail(const char* message, const UNITY_LINE_TYPE line); + +void UnityIgnore(const char* message, const UNITY_LINE_TYPE line); + +#ifndef UNITY_EXCLUDE_FLOAT +void UnityAssertFloatsWithin(const _UF delta, + const _UF expected, + const _UF actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected, + UNITY_PTR_ATTRIBUTE const _UF* actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertFloatSpecial(const _UF actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style); +#endif + +#ifndef UNITY_EXCLUDE_DOUBLE +void UnityAssertDoublesWithin(const _UD delta, + const _UD expected, + const _UD actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected, + UNITY_PTR_ATTRIBUTE const _UD* actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertDoubleSpecial(const _UD actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style); +#endif + +/*------------------------------------------------------- + * Error Strings We Might Need + *-------------------------------------------------------*/ + +extern const char UnityStrErrFloat[]; +extern const char UnityStrErrDouble[]; +extern const char UnityStrErr64[]; + +/*------------------------------------------------------- + * Test Running Macros + *-------------------------------------------------------*/ + +#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0) + +#define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);} + +/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */ +#ifndef RUN_TEST +#ifdef __STDC_VERSION__ +#if __STDC_VERSION__ >= 199901L +#define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__)) +#define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway) +#define RUN_TEST_FIRST_HELPER(first, ...) (first), #first +#define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway) +#define RUN_TEST_SECOND_HELPER(first, second, ...) (second) +#endif +#endif +#endif + +/* If we can't do the tricky version, we'll just have to require them to always include the line number */ +#ifndef RUN_TEST +#ifdef CMOCK +#define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num) +#else +#define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__) +#endif +#endif + +#define TEST_LINE_NUM (Unity.CurrentTestLineNumber) +#define TEST_IS_IGNORED (Unity.CurrentTestIgnored) +#define UNITY_NEW_TEST(a) \ + Unity.CurrentTestName = (a); \ + Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \ + Unity.NumberOfTests++; + +#ifndef UNITY_BEGIN +#define UNITY_BEGIN() UnityBegin(__FILE__) +#endif + +#ifndef UNITY_END +#define UNITY_END() UnityEnd() +#endif + +#define UNITY_UNUSED(x) (void)(sizeof(x)) + +/*------------------------------------------------------- + * Basic Fail and Ignore + *-------------------------------------------------------*/ + +#define UNITY_TEST_FAIL(line, message) UnityFail( (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)(line)) + +/*------------------------------------------------------- + * Test Asserts + *-------------------------------------------------------*/ + +#define UNITY_TEST_ASSERT(condition, line, message) if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), (message));} +#define UNITY_TEST_ASSERT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) == NULL), (UNITY_LINE_TYPE)(line), (message)) +#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) != NULL), (UNITY_LINE_TYPE)(line), (message)) + +#define UNITY_TEST_ASSERT_EQUAL_INT(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_EQUAL_INT8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_EQUAL_INT16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_EQUAL_INT32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_EQUAL_UINT(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_EQUAL_UINT8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UU8 )(expected), (_U_SINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_EQUAL_UINT16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UU16)(expected), (_U_SINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_EQUAL_UINT32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UU32)(expected), (_U_SINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_EQUAL_HEX8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_EQUAL_HEX16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_EQUAL_HEX32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_BITS(mask, expected, actual, line, message) UnityAssertBits((_U_SINT)(mask), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line)) + +#define UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_INT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU8 )(delta), (_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_INT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU16)(delta), (_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_INT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU32)(delta), (_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_UINT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU8 )(delta), (_U_SINT)(_U_UINT)(_UU8 )(expected), (_U_SINT)(_U_UINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_UINT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU16)(delta), (_U_SINT)(_U_UINT)(_UU16)(expected), (_U_SINT)(_U_UINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_UINT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU32)(delta), (_U_SINT)(_U_UINT)(_UU32)(expected), (_U_SINT)(_U_UINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU8 )(delta), (_U_SINT)(_U_UINT)(_UU8 )(expected), (_U_SINT)(_U_UINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU16)(delta), (_U_SINT)(_U_UINT)(_UU16)(expected), (_U_SINT)(_U_UINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_UU32)(delta), (_U_SINT)(_U_UINT)(_UU32)(expected), (_U_SINT)(_U_UINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) + +#define UNITY_TEST_ASSERT_EQUAL_PTR(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UP)(expected), (_U_SINT)(_UP)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER) +#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message) UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len, line, message) UnityAssertEqualStringLen((const char*)(expected), (const char*)(actual), (_UU32)(len), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(len), 1, (message), (UNITY_LINE_TYPE)(line)) + +#define UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(_UP*)(expected), (UNITY_INTERNAL_PTR)(_UP*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER) +#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((const char**)(expected), (const char**)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(len), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line)) + +#ifdef UNITY_SUPPORT_64 +#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#else +#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#endif + +#ifdef UNITY_EXCLUDE_FLOAT +#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#else +#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((_UF)(expected) * (_UF)UNITY_FLOAT_PRECISION, (_UF)(expected), (_UF)(actual), (UNITY_LINE_TYPE)(line), (message)) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((_UF*)(expected), (_UF*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN) +#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET) +#endif + +#ifdef UNITY_EXCLUDE_DOUBLE +#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#else +#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((_UD)(expected) * (_UD)UNITY_DOUBLE_PRECISION, (_UD)expected, (_UD)actual, (UNITY_LINE_TYPE)(line), message) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((_UD*)(expected), (_UD*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line) +#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN) +#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET) +#endif + +/* End of UNITY_INTERNALS_H */ +#endif diff --git a/unit-test-app/components/unity/license.txt b/unit-test-app/components/unity/license.txt new file mode 100644 index 0000000..d66fba5 --- /dev/null +++ b/unit-test-app/components/unity/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/unit-test-app/components/unity/ref_clock.c b/unit-test-app/components/unity/ref_clock.c new file mode 100644 index 0000000..ab73297 --- /dev/null +++ b/unit-test-app/components/unity/ref_clock.c @@ -0,0 +1,169 @@ +// Copyright 2017 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* Unit tests need to have access to reliable timestamps even if CPU and APB + * clock frequencies change over time. This reference clock is built upon two + * peripherals: one RMT channel and one PCNT channel, plus one GPIO to connect + * these peripherals. + * + * RMT channel is configured to use REF_TICK as clock source, which is a 1 MHz + * clock derived from APB_CLK using a set of dividers. The divider is changed + * automatically by hardware depending on the current clock source of APB_CLK. + * For example, if APB_CLK is derived from PLL, one divider is used, and when + * APB_CLK is derived from XTAL, another divider is used. RMT channel clocked + * by REF_TICK is configured to generate a continuous 0.5 MHz signal, which is + * connected to a GPIO. PCNT takes the input signal from this GPIO and counts + * the edges (which occur at 1MHz frequency). PCNT counter is only 16 bit wide, + * so an interrupt is configured to trigger when the counter reaches 30000, + * incrementing a 32-bit millisecond counter maintained by software. + * Together these two counters may be used at any time to obtain the timestamp. + */ + +#include "test_utils.h" +#include "soc/rmt_struct.h" +#include "soc/pcnt_struct.h" +#include "soc/pcnt_reg.h" +#include "soc/gpio_sig_map.h" +#include "soc/dport_reg.h" +#include "rom/gpio.h" +#include "rom/ets_sys.h" +#include "driver/gpio.h" +#include "esp_intr_alloc.h" +#include "freertos/FreeRTOS.h" + +/* Select which RMT and PCNT channels, and GPIO to use */ +#define REF_CLOCK_RMT_CHANNEL 7 +#define REF_CLOCK_PCNT_UNIT 0 +#define REF_CLOCK_GPIO 21 + +#define REF_CLOCK_PRESCALER_MS 30 + +static void IRAM_ATTR pcnt_isr(void* arg); + +static intr_handle_t s_intr_handle; +static portMUX_TYPE s_lock = portMUX_INITIALIZER_UNLOCKED; +static volatile uint32_t s_milliseconds; + +void ref_clock_init() +{ + assert(s_intr_handle == NULL && "already initialized"); + + // Route RMT output to GPIO matrix + gpio_matrix_out(REF_CLOCK_GPIO, RMT_SIG_OUT0_IDX + REF_CLOCK_RMT_CHANNEL, false, false); + + + // Initialize RMT + DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_RMT_CLK_EN); + DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_RMT_RST); + RMT.apb_conf.fifo_mask = 1; + rmt_item32_t data = { + .duration0 = 1, + .level0 = 1, + .duration1 = 0, + .level1 = 0 + }; + RMTMEM.chan[REF_CLOCK_RMT_CHANNEL].data32[0] = data; + RMTMEM.chan[REF_CLOCK_RMT_CHANNEL].data32[1].val = 0; + + + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf0.clk_en = 1; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.tx_start = 0; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.mem_owner = 0; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.mem_rd_rst = 1; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.apb_mem_rst = 1; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf0.carrier_en = 0; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf0.div_cnt = 1; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf0.mem_size = 1; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.ref_always_on = 0; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.tx_conti_mode = 1; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.tx_start = 1; + + // Route signal to PCNT + int pcnt_sig_idx = (REF_CLOCK_PCNT_UNIT < 5) ? + PCNT_SIG_CH0_IN0_IDX + 4 * REF_CLOCK_PCNT_UNIT : + PCNT_SIG_CH0_IN5_IDX + 4 * (REF_CLOCK_PCNT_UNIT - 5); + gpio_matrix_in(REF_CLOCK_GPIO, pcnt_sig_idx, false); + if (REF_CLOCK_GPIO != 20) { + PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[REF_CLOCK_GPIO]); + } else { + PIN_INPUT_ENABLE(PERIPHS_IO_MUX_GPIO20_U); + } + + // Initialize PCNT + DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_PCNT_CLK_EN); + DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_PCNT_RST); + + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.ch0_hctrl_mode = 0; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.ch0_lctrl_mode = 0; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.ch0_pos_mode = 1; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.ch0_neg_mode = 1; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.thr_l_lim_en = 0; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.thr_h_lim_en = 1; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.thr_zero_en = 0; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.thr_thres0_en = 0; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf0.thr_thres1_en = 0; + PCNT.conf_unit[REF_CLOCK_PCNT_UNIT].conf2.cnt_h_lim = REF_CLOCK_PRESCALER_MS * 1000; + + // Enable PCNT and wait for it to start counting + PCNT.ctrl.val &= ~(BIT(REF_CLOCK_PCNT_UNIT * 2 + 1)); + PCNT.ctrl.val |= BIT(REF_CLOCK_PCNT_UNIT * 2); + PCNT.ctrl.val &= ~BIT(REF_CLOCK_PCNT_UNIT * 2); + + // Enable interrupt + s_milliseconds = 0; + ESP_ERROR_CHECK(esp_intr_alloc(ETS_PCNT_INTR_SOURCE, ESP_INTR_FLAG_IRAM, pcnt_isr, NULL, &s_intr_handle)); + PCNT.int_clr.val = BIT(REF_CLOCK_PCNT_UNIT); + PCNT.int_ena.val = BIT(REF_CLOCK_PCNT_UNIT); +} + +static void IRAM_ATTR pcnt_isr(void* arg) +{ + portENTER_CRITICAL(&s_lock); + PCNT.int_clr.val = BIT(REF_CLOCK_PCNT_UNIT); + s_milliseconds += REF_CLOCK_PRESCALER_MS; + portEXIT_CRITICAL(&s_lock); +} + +void ref_clock_deinit() +{ + assert(s_intr_handle && "deinit called without init"); + + // Disable interrupt + PCNT.int_ena.val &= ~BIT(REF_CLOCK_PCNT_UNIT); + esp_intr_free(s_intr_handle); + s_intr_handle = NULL; + + // Disable RMT + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf1.tx_start = 0; + RMT.conf_ch[REF_CLOCK_RMT_CHANNEL].conf0.clk_en = 0; + DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_RMT_CLK_EN); + DPORT_SET_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_RMT_RST); + + // Disable PCNT + PCNT.ctrl.val |= ~(BIT(REF_CLOCK_PCNT_UNIT * 2 + 1)); + DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_PCNT_CLK_EN); + DPORT_SET_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_PCNT_RST); +} + +uint64_t ref_clock_get() +{ + portENTER_CRITICAL(&s_lock); + uint32_t microseconds = PCNT.cnt_unit[REF_CLOCK_PCNT_UNIT].cnt_val; + uint32_t milliseconds = s_milliseconds; + if (PCNT.int_st.val & BIT(REF_CLOCK_PCNT_UNIT)) { + milliseconds += REF_CLOCK_PRESCALER_MS; + } + portEXIT_CRITICAL(&s_lock); + return 1000 * (uint64_t) milliseconds + (uint64_t) microseconds; +} diff --git a/unit-test-app/components/unity/test_utils.c b/unit-test-app/components/unity/test_utils.c new file mode 100644 index 0000000..08826d3 --- /dev/null +++ b/unit-test-app/components/unity/test_utils.c @@ -0,0 +1,25 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "unity.h" +#include "test_utils.h" + +const esp_partition_t *get_test_data_partition() +{ + /* This finds "flash_test" partition defined in partition_table_unit_test_app.csv */ + const esp_partition_t *result = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, + ESP_PARTITION_SUBTYPE_ANY, "flash_test"); + TEST_ASSERT_NOT_NULL(result); /* means partition table set wrong */ + return result; +} diff --git a/unit-test-app/components/unity/unity.c b/unit-test-app/components/unity/unity.c new file mode 100644 index 0000000..4a99208 --- /dev/null +++ b/unit-test-app/components/unity/unity.c @@ -0,0 +1,1306 @@ +/* ========================================================================= + Unity Project - A Test Framework for C + Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +============================================================================ */ + +#include "unity.h" +#include + +/* If omitted from header, declare overrideable prototypes here so they're ready for use */ +#ifdef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION +int UNITY_OUTPUT_CHAR(int); +#endif +#ifdef UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION +int UNITY_OUTPUT_FLUSH(void); +#endif + +/* Helpful macros for us to use here */ +#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; longjmp(Unity.AbortFrame, 1); } +#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; longjmp(Unity.AbortFrame, 1); } + +/* return prematurely if we are already in failure or ignore state */ +#define UNITY_SKIP_EXECUTION { if ((Unity.CurrentTestFailed != 0) || (Unity.CurrentTestIgnored != 0)) {return;} } + +struct _Unity Unity; + +static const char UnityStrOk[] = "OK"; +static const char UnityStrPass[] = "PASS"; +static const char UnityStrFail[] = "FAIL"; +static const char UnityStrIgnore[] = "IGNORE"; +static const char UnityStrNull[] = "NULL"; +static const char UnityStrSpacer[] = ". "; +static const char UnityStrExpected[] = " Expected "; +static const char UnityStrWas[] = " Was "; +static const char UnityStrElement[] = " Element "; +static const char UnityStrByte[] = " Byte "; +static const char UnityStrMemory[] = " Memory Mismatch."; +static const char UnityStrDelta[] = " Values Not Within Delta "; +static const char UnityStrPointless[] = " You Asked Me To Compare Nothing, Which Was Pointless."; +static const char UnityStrNullPointerForExpected[] = " Expected pointer to be NULL"; +static const char UnityStrNullPointerForActual[] = " Actual pointer was NULL"; +static const char UnityStrNot[] = "Not "; +static const char UnityStrInf[] = "Infinity"; +static const char UnityStrNegInf[] = "Negative Infinity"; +static const char UnityStrNaN[] = "NaN"; +static const char UnityStrDet[] = "Determinate"; +static const char UnityStrInvalidFloatTrait[] = "Invalid Float Trait"; +const char UnityStrErrFloat[] = "Unity Floating Point Disabled"; +const char UnityStrErrDouble[] = "Unity Double Precision Disabled"; +const char UnityStrErr64[] = "Unity 64-bit Support Disabled"; +static const char UnityStrBreaker[] = "-----------------------"; +static const char UnityStrResultsTests[] = " Tests "; +static const char UnityStrResultsFailures[] = " Failures "; +static const char UnityStrResultsIgnored[] = " Ignored "; +static const char UnityStrDetail1Name[] = UNITY_DETAIL1_NAME " "; +static const char UnityStrDetail2Name[] = " " UNITY_DETAIL2_NAME " "; + +#ifdef UNITY_FLOAT_NEEDS_ZERO +/* Dividing by these constants produces +/- infinity. + * The rationale is given in UnityAssertFloatIsInf's body. */ +static const _UF f_zero = 0.0f; +#endif + +/* compiler-generic print formatting masks */ +static const _U_UINT UnitySizeMask[] = +{ + 255u, /* 0xFF */ + 65535u, /* 0xFFFF */ + 65535u, + 4294967295u, /* 0xFFFFFFFF */ + 4294967295u, + 4294967295u, + 4294967295u +#ifdef UNITY_SUPPORT_64 + ,0xFFFFFFFFFFFFFFFF +#endif +}; + +/*----------------------------------------------- + * Pretty Printers & Test Result Output Handlers + *-----------------------------------------------*/ + +void UnityPrint(const char* string) +{ + const char* pch = string; + + if (pch != NULL) + { + while (*pch) + { + /* printable characters plus CR & LF are printed */ + if ((*pch <= 126) && (*pch >= 32)) + { + UNITY_OUTPUT_CHAR(*pch); + } + /* write escaped carriage returns */ + else if (*pch == 13) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('r'); + } + /* write escaped line feeds */ + else if (*pch == 10) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('n'); + } + /* unprintable characters are shown as codes */ + else + { + UNITY_OUTPUT_CHAR('\\'); + UnityPrintNumberHex((_U_UINT)*pch, 2); + } + pch++; + } + } +} + +void UnityPrintLen(const char* string, const _UU32 length); +void UnityPrintLen(const char* string, const _UU32 length) +{ + const char* pch = string; + + if (pch != NULL) + { + while (*pch && (_UU32)(pch - string) < length) + { + /* printable characters plus CR & LF are printed */ + if ((*pch <= 126) && (*pch >= 32)) + { + UNITY_OUTPUT_CHAR(*pch); + } + /* write escaped carriage returns */ + else if (*pch == 13) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('r'); + } + /* write escaped line feeds */ + else if (*pch == 10) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('n'); + } + /* unprintable characters are shown as codes */ + else + { + UNITY_OUTPUT_CHAR('\\'); + UnityPrintNumberHex((_U_UINT)*pch, 2); + } + pch++; + } + } +} + +/*-----------------------------------------------*/ +void UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style) +{ + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + UnityPrintNumber(number); + } + else if ((style & UNITY_DISPLAY_RANGE_UINT) == UNITY_DISPLAY_RANGE_UINT) + { + UnityPrintNumberUnsigned( (_U_UINT)number & UnitySizeMask[((_U_UINT)style & (_U_UINT)0x0F) - 1] ); + } + else + { + UnityPrintNumberHex((_U_UINT)number, (char)((style & 0x000F) << 1)); + } +} + +/*-----------------------------------------------*/ +void UnityPrintNumber(const _U_SINT number_to_print) +{ + _U_UINT number = (_U_UINT)number_to_print; + + if (number_to_print < 0) + { + /* A negative number, including MIN negative */ + UNITY_OUTPUT_CHAR('-'); + number = (_U_UINT)(-number_to_print); + } + UnityPrintNumberUnsigned(number); +} + +/*----------------------------------------------- + * basically do an itoa using as little ram as possible */ +void UnityPrintNumberUnsigned(const _U_UINT number) +{ + _U_UINT divisor = 1; + + /* figure out initial divisor */ + while (number / divisor > 9) + { + divisor *= 10; + } + + /* now mod and print, then divide divisor */ + do + { + UNITY_OUTPUT_CHAR((char)('0' + (number / divisor % 10))); + divisor /= 10; + } + while (divisor > 0); +} + +/*-----------------------------------------------*/ +void UnityPrintNumberHex(const _U_UINT number, const char nibbles_to_print) +{ + _U_UINT nibble; + char nibbles = nibbles_to_print; + UNITY_OUTPUT_CHAR('0'); + UNITY_OUTPUT_CHAR('x'); + + while (nibbles > 0) + { + nibble = (number >> (--nibbles << 2)) & 0x0000000F; + if (nibble <= 9) + { + UNITY_OUTPUT_CHAR((char)('0' + nibble)); + } + else + { + UNITY_OUTPUT_CHAR((char)('A' - 10 + nibble)); + } + } +} + +/*-----------------------------------------------*/ +void UnityPrintMask(const _U_UINT mask, const _U_UINT number) +{ + _U_UINT current_bit = (_U_UINT)1 << (UNITY_INT_WIDTH - 1); + _US32 i; + + for (i = 0; i < UNITY_INT_WIDTH; i++) + { + if (current_bit & mask) + { + if (current_bit & number) + { + UNITY_OUTPUT_CHAR('1'); + } + else + { + UNITY_OUTPUT_CHAR('0'); + } + } + else + { + UNITY_OUTPUT_CHAR('X'); + } + current_bit = current_bit >> 1; + } +} + +/*-----------------------------------------------*/ +#ifdef UNITY_FLOAT_VERBOSE +#include + +#ifndef UNITY_VERBOSE_NUMBER_MAX_LENGTH +# ifdef UNITY_DOUBLE_VERBOSE +# define UNITY_VERBOSE_NUMBER_MAX_LENGTH 317 +# else +# define UNITY_VERBOSE_NUMBER_MAX_LENGTH 47 +# endif +#endif + +void UnityPrintFloat(_UF number) +{ + char TempBuffer[UNITY_VERBOSE_NUMBER_MAX_LENGTH + 1]; + snprintf(TempBuffer, sizeof(TempBuffer), "%.6f", number); + UnityPrint(TempBuffer); +} +#endif + +/*-----------------------------------------------*/ + +void UnityPrintFail(void); +void UnityPrintFail(void) +{ + UnityPrint(UnityStrFail); +} + +void UnityPrintOk(void); +void UnityPrintOk(void) +{ + UnityPrint(UnityStrOk); +} + +/*-----------------------------------------------*/ +static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line); +static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line) +{ +#ifndef UNITY_FIXTURES + UnityPrint(file); + UNITY_OUTPUT_CHAR(':'); + UnityPrintNumber((_U_SINT)line); + UNITY_OUTPUT_CHAR(':'); + UnityPrint(Unity.CurrentTestName); + UNITY_OUTPUT_CHAR(':'); +#else + UNITY_UNUSED(file); + UNITY_UNUSED(line); +#endif +} + +/*-----------------------------------------------*/ +static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line); +static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line) +{ +#ifndef UNITY_FIXTURES + UnityTestResultsBegin(Unity.TestFile, line); +#else + UNITY_UNUSED(line); +#endif + UnityPrint(UnityStrFail); + UNITY_OUTPUT_CHAR(':'); +} + +/*-----------------------------------------------*/ +void UnityConcludeTest(void) +{ + if (Unity.CurrentTestIgnored) + { + Unity.TestIgnores++; + } + else if (!Unity.CurrentTestFailed) + { + UnityTestResultsBegin(Unity.TestFile, Unity.CurrentTestLineNumber); + UnityPrint(UnityStrPass); + } + else + { + Unity.TestFailures++; + } + + Unity.CurrentTestFailed = 0; + Unity.CurrentTestIgnored = 0; + UNITY_PRINT_EOL(); + UNITY_OUTPUT_FLUSH(); +} + +/*-----------------------------------------------*/ +static void UnityAddMsgIfSpecified(const char* msg); +static void UnityAddMsgIfSpecified(const char* msg) +{ + if (msg) + { + UnityPrint(UnityStrSpacer); +#ifndef UNITY_EXCLUDE_DETAILS + if (Unity.CurrentDetail1) + { + UnityPrint(UnityStrDetail1Name); + UnityPrint(Unity.CurrentDetail1); + if (Unity.CurrentDetail2) + { + UnityPrint(UnityStrDetail2Name); + UnityPrint(Unity.CurrentDetail2); + } + UnityPrint(UnityStrSpacer); + } +#endif + UnityPrint(msg); + } +} + +/*-----------------------------------------------*/ +static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual); +static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual) +{ + UnityPrint(UnityStrExpected); + if (expected != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrint(expected); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } + UnityPrint(UnityStrWas); + if (actual != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrint(actual); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } +} + +/*-----------------------------------------------*/ +static void UnityPrintExpectedAndActualStringsLen(const char* expected, const char* actual, const _UU32 length) +{ + UnityPrint(UnityStrExpected); + if (expected != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrintLen(expected, length); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } + UnityPrint(UnityStrWas); + if (actual != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrintLen(actual, length); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } +} + + + +/*----------------------------------------------- + * Assertion & Control Helpers + *-----------------------------------------------*/ + +static int UnityCheckArraysForNull(UNITY_INTERNAL_PTR expected, UNITY_INTERNAL_PTR actual, const UNITY_LINE_TYPE lineNumber, const char* msg) +{ + /* return true if they are both NULL */ + if ((expected == NULL) && (actual == NULL)) + return 1; + + /* throw error if just expected is NULL */ + if (expected == NULL) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrNullPointerForExpected); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + + /* throw error if just actual is NULL */ + if (actual == NULL) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrNullPointerForActual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + + /* return false if neither is NULL */ + return 0; +} + +/*----------------------------------------------- + * Assertion Functions + *-----------------------------------------------*/ + +void UnityAssertBits(const _U_SINT mask, + const _U_SINT expected, + const _U_SINT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_SKIP_EXECUTION; + + if ((mask & expected) != (mask & actual)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + UnityPrintMask((_U_UINT)mask, (_U_UINT)expected); + UnityPrint(UnityStrWas); + UnityPrintMask((_U_UINT)mask, (_U_UINT)actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualNumber(const _U_SINT expected, + const _U_SINT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + UNITY_SKIP_EXECUTION; + + if (expected != actual) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expected, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#define UnityPrintPointlessAndBail() \ +{ \ + UnityTestResultsFailBegin(lineNumber); \ + UnityPrint(UnityStrPointless); \ + UnityAddMsgIfSpecified(msg); \ + UNITY_FAIL_AND_BAIL; } + +/*-----------------------------------------------*/ +void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + _UU32 elements = num_elements; + UNITY_INTERNAL_PTR ptr_exp = (UNITY_INTERNAL_PTR)expected; + UNITY_INTERNAL_PTR ptr_act = (UNITY_INTERNAL_PTR)actual; + + UNITY_SKIP_EXECUTION; + + if (elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1) + return; + + /* If style is UNITY_DISPLAY_STYLE_INT, we'll fall into the default case rather than the INT16 or INT32 (etc) case + * as UNITY_DISPLAY_STYLE_INT includes a flag for UNITY_DISPLAY_RANGE_AUTO, which the width-specific + * variants do not. Therefore remove this flag. */ + switch(style & (UNITY_DISPLAY_STYLE_T)(~UNITY_DISPLAY_RANGE_AUTO)) + { + case UNITY_DISPLAY_STYLE_HEX8: + case UNITY_DISPLAY_STYLE_INT8: + case UNITY_DISPLAY_STYLE_UINT8: + while (elements--) + { + if (*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US8*)ptr_act) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_exp, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_act, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 1); + ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 1); + } + break; + case UNITY_DISPLAY_STYLE_HEX16: + case UNITY_DISPLAY_STYLE_INT16: + case UNITY_DISPLAY_STYLE_UINT16: + while (elements--) + { + if (*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US16*)ptr_act) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_exp, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_act, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 2); + ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 2); + } + break; +#ifdef UNITY_SUPPORT_64 + case UNITY_DISPLAY_STYLE_HEX64: + case UNITY_DISPLAY_STYLE_INT64: + case UNITY_DISPLAY_STYLE_UINT64: + while (elements--) + { + if (*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US64*)ptr_act) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_exp, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_act, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 8); + ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 8); + } + break; +#endif + default: + while (elements--) + { + if (*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US32*)ptr_act) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_exp, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_act, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 4); + ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 4); + } + break; + } +} + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_FLOAT +void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected, + UNITY_PTR_ATTRIBUTE const _UF* actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + _UU32 elements = num_elements; + UNITY_PTR_ATTRIBUTE const _UF* ptr_expected = expected; + UNITY_PTR_ATTRIBUTE const _UF* ptr_actual = actual; + _UF diff, tol; + + UNITY_SKIP_EXECUTION; + + if (elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1) + return; + + while (elements--) + { + diff = *ptr_expected - *ptr_actual; + if (diff < 0.0f) + diff = 0.0f - diff; + tol = UNITY_FLOAT_PRECISION * *ptr_expected; + if (tol < 0.0f) + tol = 0.0f - tol; + + /* This first part of this condition will catch any NaN or Infinite values */ + if (isnan(diff) || isinf(diff) || (diff > tol)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); +#ifdef UNITY_FLOAT_VERBOSE + UnityPrint(UnityStrExpected); + UnityPrintFloat(*ptr_expected); + UnityPrint(UnityStrWas); + UnityPrintFloat(*ptr_actual); +#else + UnityPrint(UnityStrDelta); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_expected++; + ptr_actual++; + } +} + +/*-----------------------------------------------*/ +void UnityAssertFloatsWithin(const _UF delta, + const _UF expected, + const _UF actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + _UF diff = actual - expected; + _UF pos_delta = delta; + + UNITY_SKIP_EXECUTION; + + if (diff < 0.0f) + { + diff = 0.0f - diff; + } + if (pos_delta < 0.0f) + { + pos_delta = 0.0f - pos_delta; + } + + /* This first part of this condition will catch any NaN or Infinite values */ + if (isnan(diff) || isinf(diff) || (pos_delta < diff)) + { + UnityTestResultsFailBegin(lineNumber); +#ifdef UNITY_FLOAT_VERBOSE + UnityPrint(UnityStrExpected); + UnityPrintFloat(expected); + UnityPrint(UnityStrWas); + UnityPrintFloat(actual); +#else + UnityPrint(UnityStrDelta); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertFloatSpecial(const _UF actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style) +{ + const char* trait_names[] = { UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet }; + _U_SINT should_be_trait = ((_U_SINT)style & 1); + _U_SINT is_trait = !should_be_trait; + _U_SINT trait_index = (_U_SINT)(style >> 1); + + UNITY_SKIP_EXECUTION; + + switch(style) + { + /* To determine Inf / Neg Inf, we compare to an Inf / Neg Inf value we create on the fly + * We are using a variable to hold the zero value because some compilers complain about dividing by zero otherwise */ + case UNITY_FLOAT_IS_INF: + case UNITY_FLOAT_IS_NOT_INF: + is_trait = isinf(actual) & ispos(actual); + break; + case UNITY_FLOAT_IS_NEG_INF: + case UNITY_FLOAT_IS_NOT_NEG_INF: + is_trait = isinf(actual) & isneg(actual); + break; + + /* NaN is the only floating point value that does NOT equal itself. Therefore if Actual == Actual, then it is NOT NaN. */ + case UNITY_FLOAT_IS_NAN: + case UNITY_FLOAT_IS_NOT_NAN: + is_trait = isnan(actual); + break; + + /* A determinate number is non infinite and not NaN. (therefore the opposite of the two above) */ + case UNITY_FLOAT_IS_DET: + case UNITY_FLOAT_IS_NOT_DET: + if (isinf(actual) | isnan(actual)) + is_trait = 0; + else + is_trait = 1; + break; + + default: + trait_index = 0; + trait_names[0] = UnityStrInvalidFloatTrait; + break; + } + + if (is_trait != should_be_trait) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + if (!should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); + UnityPrint(UnityStrWas); +#ifdef UNITY_FLOAT_VERBOSE + UnityPrintFloat(actual); +#else + if (should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#endif /* not UNITY_EXCLUDE_FLOAT */ + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_DOUBLE +void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected, + UNITY_PTR_ATTRIBUTE const _UD* actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + _UU32 elements = num_elements; + UNITY_PTR_ATTRIBUTE const _UD* ptr_expected = expected; + UNITY_PTR_ATTRIBUTE const _UD* ptr_actual = actual; + _UD diff, tol; + + UNITY_SKIP_EXECUTION; + + if (elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1) + return; + + while (elements--) + { + diff = *ptr_expected - *ptr_actual; + if (diff < 0.0) + diff = 0.0 - diff; + tol = UNITY_DOUBLE_PRECISION * *ptr_expected; + if (tol < 0.0) + tol = 0.0 - tol; + + /* This first part of this condition will catch any NaN or Infinite values */ + if (isnan(diff) || isinf(diff) || (diff > tol)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); +#ifdef UNITY_DOUBLE_VERBOSE + UnityPrint(UnityStrExpected); + UnityPrintFloat((float)(*ptr_expected)); + UnityPrint(UnityStrWas); + UnityPrintFloat((float)(*ptr_actual)); +#else + UnityPrint(UnityStrDelta); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_expected++; + ptr_actual++; + } +} + +/*-----------------------------------------------*/ +void UnityAssertDoublesWithin(const _UD delta, + const _UD expected, + const _UD actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + _UD diff = actual - expected; + _UD pos_delta = delta; + + UNITY_SKIP_EXECUTION; + + if (diff < 0.0) + { + diff = 0.0 - diff; + } + if (pos_delta < 0.0) + { + pos_delta = 0.0 - pos_delta; + } + + /* This first part of this condition will catch any NaN or Infinite values */ + if (isnan(diff) || isinf(diff) || (pos_delta < diff)) + { + UnityTestResultsFailBegin(lineNumber); +#ifdef UNITY_DOUBLE_VERBOSE + UnityPrint(UnityStrExpected); + UnityPrintFloat((float)expected); + UnityPrint(UnityStrWas); + UnityPrintFloat((float)actual); +#else + UnityPrint(UnityStrDelta); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ + +void UnityAssertDoubleSpecial(const _UD actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style) +{ + const char* trait_names[] = { UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet }; + _U_SINT should_be_trait = ((_U_SINT)style & 1); + _U_SINT is_trait = !should_be_trait; + _U_SINT trait_index = (_U_SINT)(style >> 1); + + UNITY_SKIP_EXECUTION; + + switch(style) + { + /* To determine Inf / Neg Inf, we compare to an Inf / Neg Inf value we create on the fly + * We are using a variable to hold the zero value because some compilers complain about dividing by zero otherwise */ + case UNITY_FLOAT_IS_INF: + case UNITY_FLOAT_IS_NOT_INF: + is_trait = isinf(actual) & ispos(actual); + break; + case UNITY_FLOAT_IS_NEG_INF: + case UNITY_FLOAT_IS_NOT_NEG_INF: + is_trait = isinf(actual) & isneg(actual); + break; + + /* NaN is the only floating point value that does NOT equal itself. Therefore if Actual == Actual, then it is NOT NaN. */ + case UNITY_FLOAT_IS_NAN: + case UNITY_FLOAT_IS_NOT_NAN: + is_trait = isnan(actual); + break; + + /* A determinate number is non infinite and not NaN. (therefore the opposite of the two above) */ + case UNITY_FLOAT_IS_DET: + case UNITY_FLOAT_IS_NOT_DET: + if (isinf(actual) | isnan(actual)) + is_trait = 0; + else + is_trait = 1; + break; + + default: + trait_index = 0; + trait_names[0] = UnityStrInvalidFloatTrait; + break; + } + + if (is_trait != should_be_trait) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + if (!should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); + UnityPrint(UnityStrWas); +#ifdef UNITY_DOUBLE_VERBOSE + UnityPrintFloat(actual); +#else + if (should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + + +#endif /* not UNITY_EXCLUDE_DOUBLE */ + +/*-----------------------------------------------*/ +void UnityAssertNumbersWithin( const _U_UINT delta, + const _U_SINT expected, + const _U_SINT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + UNITY_SKIP_EXECUTION; + + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + if (actual > expected) + Unity.CurrentTestFailed = ((_U_UINT)(actual - expected) > delta); + else + Unity.CurrentTestFailed = ((_U_UINT)(expected - actual) > delta); + } + else + { + if ((_U_UINT)actual > (_U_UINT)expected) + Unity.CurrentTestFailed = ((_U_UINT)(actual - expected) > delta); + else + Unity.CurrentTestFailed = ((_U_UINT)(expected - actual) > delta); + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrDelta); + UnityPrintNumberByStyle((_U_SINT)delta, style); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expected, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualString(const char* expected, + const char* actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + _UU32 i; + + UNITY_SKIP_EXECUTION; + + /* if both pointers not null compare the strings */ + if (expected && actual) + { + for (i = 0; expected[i] || actual[i]; i++) + { + if (expected[i] != actual[i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected != actual) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrintExpectedAndActualStrings(expected, actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualStringLen(const char* expected, + const char* actual, + const _UU32 length, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + _UU32 i; + + UNITY_SKIP_EXECUTION; + + /* if both pointers not null compare the strings */ + if (expected && actual) + { + for (i = 0; (expected[i] || actual[i]) && i < length; i++) + { + if (expected[i] != actual[i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected != actual) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrintExpectedAndActualStringsLen(expected, actual, length); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + + +/*-----------------------------------------------*/ +void UnityAssertEqualStringArray( const char** expected, + const char** actual, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + _UU32 i, j = 0; + + UNITY_SKIP_EXECUTION; + + /* if no elements, it's an error */ + if (num_elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1) + return; + + do + { + /* if both pointers not null compare the strings */ + if (expected[j] && actual[j]) + { + for (i = 0; expected[j][i] || actual[j][i]; i++) + { + if (expected[j][i] != actual[j][i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected[j] != actual[j]) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + if (num_elements > 1) + { + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(j); + } + UnityPrintExpectedAndActualStrings((const char*)(expected[j]), (const char*)(actual[j])); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + } while (++j < num_elements); +} + +/*-----------------------------------------------*/ +void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const _UU32 length, + const _UU32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_PTR_ATTRIBUTE const unsigned char* ptr_exp = (UNITY_PTR_ATTRIBUTE const unsigned char*)expected; + UNITY_PTR_ATTRIBUTE const unsigned char* ptr_act = (UNITY_PTR_ATTRIBUTE const unsigned char*)actual; + _UU32 elements = num_elements; + _UU32 bytes; + + UNITY_SKIP_EXECUTION; + + if ((elements == 0) || (length == 0)) + { + UnityPrintPointlessAndBail(); + } + + if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1) + return; + + while (elements--) + { + /* /////////////////////////////////// */ + bytes = length; + while (bytes--) + { + if (*ptr_exp != *ptr_act) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrMemory); + if (num_elements > 1) + { + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + } + UnityPrint(UnityStrByte); + UnityPrintNumberUnsigned(length - bytes - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(*ptr_exp, UNITY_DISPLAY_STYLE_HEX8); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(*ptr_act, UNITY_DISPLAY_STYLE_HEX8); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 1); + ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 1); + } + /* /////////////////////////////////// */ + + } +} + +/*----------------------------------------------- + * Control Functions + *-----------------------------------------------*/ + +void UnityFail(const char* msg, const UNITY_LINE_TYPE line) +{ + UNITY_SKIP_EXECUTION; + + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrintFail(); + if (msg != NULL) + { + UNITY_OUTPUT_CHAR(':'); + +#ifndef UNITY_EXCLUDE_DETAILS + if (Unity.CurrentDetail1) + { + UnityPrint(UnityStrDetail1Name); + UnityPrint(Unity.CurrentDetail1); + if (Unity.CurrentDetail2) + { + UnityPrint(UnityStrDetail2Name); + UnityPrint(Unity.CurrentDetail2); + } + UnityPrint(UnityStrSpacer); + } +#endif + if (msg[0] != ' ') + { + UNITY_OUTPUT_CHAR(' '); + } + UnityPrint(msg); + } + + UNITY_FAIL_AND_BAIL; +} + +/*-----------------------------------------------*/ +void UnityIgnore(const char* msg, const UNITY_LINE_TYPE line) +{ + UNITY_SKIP_EXECUTION; + + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint(UnityStrIgnore); + if (msg != NULL) + { + UNITY_OUTPUT_CHAR(':'); + UNITY_OUTPUT_CHAR(' '); + UnityPrint(msg); + } + UNITY_IGNORE_AND_BAIL; +} + +/*-----------------------------------------------*/ +#if defined(UNITY_WEAK_ATTRIBUTE) + UNITY_WEAK_ATTRIBUTE void setUp(void) { } + UNITY_WEAK_ATTRIBUTE void tearDown(void) { } +#elif defined(UNITY_WEAK_PRAGMA) +# pragma weak setUp + void setUp(void) { } +# pragma weak tearDown + void tearDown(void) { } +#endif +/*-----------------------------------------------*/ +void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum) +{ + Unity.CurrentTestName = FuncName; + Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)FuncLineNum; + Unity.NumberOfTests++; + UNITY_CLR_DETAILS(); + if (TEST_PROTECT()) + { + setUp(); + Func(); + } + if (TEST_PROTECT() && !(Unity.CurrentTestIgnored)) + { + tearDown(); + } + UnityConcludeTest(); +} + +/*-----------------------------------------------*/ +void UnityBegin(const char* filename) +{ + Unity.TestFile = filename; + Unity.CurrentTestName = NULL; + Unity.CurrentTestLineNumber = 0; + Unity.NumberOfTests = 0; + Unity.TestFailures = 0; + Unity.TestIgnores = 0; + Unity.CurrentTestFailed = 0; + Unity.CurrentTestIgnored = 0; + + UNITY_CLR_DETAILS(); + UNITY_OUTPUT_START(); +} + +/*-----------------------------------------------*/ +int UnityEnd(void) +{ + UNITY_PRINT_EOL(); + UnityPrint(UnityStrBreaker); + UNITY_PRINT_EOL(); + UnityPrintNumber((_U_SINT)(Unity.NumberOfTests)); + UnityPrint(UnityStrResultsTests); + UnityPrintNumber((_U_SINT)(Unity.TestFailures)); + UnityPrint(UnityStrResultsFailures); + UnityPrintNumber((_U_SINT)(Unity.TestIgnores)); + UnityPrint(UnityStrResultsIgnored); + UNITY_PRINT_EOL(); + if (Unity.TestFailures == 0U) + { + UnityPrintOk(); + } + else + { + UnityPrintFail(); +#ifdef UNITY_DIFFERENTIATE_FINAL_FAIL + UNITY_OUTPUT_CHAR('E'); UNITY_OUTPUT_CHAR('D'); +#endif + } + UNITY_PRINT_EOL(); + UNITY_OUTPUT_FLUSH(); + UNITY_OUTPUT_COMPLETE(); + return (int)(Unity.TestFailures); +} + +/*-----------------------------------------------*/ diff --git a/unit-test-app/components/unity/unity_platform.c b/unit-test-app/components/unity/unity_platform.c new file mode 100644 index 0000000..9ee114f --- /dev/null +++ b/unit-test-app/components/unity/unity_platform.c @@ -0,0 +1,224 @@ +#include +#include +#include +#include +#include "unity.h" +#include "rom/ets_sys.h" +#include "rom/uart.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_log.h" +#include "soc/cpu.h" + +#define unity_printf ets_printf + +// Pointers to the head and tail of linked list of test description structs: +static struct test_desc_t* s_unity_tests_first = NULL; +static struct test_desc_t* s_unity_tests_last = NULL; + +// Inverse of the filter +static bool s_invert = false; + +void unity_putc(int c) +{ + if (c == '\n') + { + uart_tx_one_char('\r'); + uart_tx_one_char('\n'); + } + else if (c == '\r') + { + } + else + { + uart_tx_one_char(c); + } +} + +void unity_flush() +{ + uart_tx_wait_idle(0); // assume that output goes to UART0 +} + +void unity_testcase_register(struct test_desc_t* desc) +{ + if (!s_unity_tests_first) + { + s_unity_tests_first = desc; + s_unity_tests_last = desc; + } + else + { + struct test_desc_t* temp = s_unity_tests_first; + s_unity_tests_first = desc; + s_unity_tests_first->next = temp; + } +} + +static void unity_run_single_test(const struct test_desc_t* test) +{ + printf("Running %s...\n", test->name); + Unity.TestFile = test->file; + Unity.CurrentDetail1 = test->desc; + UnityDefaultTestRun(test->fn, test->name, test->line); +} + +static void unity_run_single_test_by_index(int index) +{ + const struct test_desc_t* test; + for (test = s_unity_tests_first; test != NULL && index != 0; test = test->next, --index) + { + } + if (test != NULL) + { + unity_run_single_test(test); + } +} + +static void unity_run_single_test_by_index_parse(const char* filter, int index_max) +{ + if (s_invert) + { + printf("Inverse is not supported for that kind of filter\n"); + return; + } + int test_index = strtol(filter, NULL, 10); + if (test_index >= 1 && test_index <= index_max) + { + uint32_t start; + RSR(CCOUNT, start); + unity_run_single_test_by_index(test_index - 1); + uint32_t end; + RSR(CCOUNT, end); + uint32_t ms = (end - start) / (XT_CLOCK_FREQ / 1000); + printf("Test ran in %dms\n", ms); + } +} + +static void unity_run_single_test_by_name(const char* filter) +{ + if (s_invert) + { + printf("Inverse is not supported for that kind of filter\n"); + return; + } + char tmp[256]; + strncpy(tmp, filter + 1, sizeof(tmp) - 1); + tmp[strlen(filter) - 2] = 0; + for (const struct test_desc_t* test = s_unity_tests_first; test != NULL; test = test->next) + { + if (strcmp(test->name, tmp) == 0) + { + unity_run_single_test(test); + } + } +} + +void unity_run_all_tests() +{ + if (s_invert) + { + printf("Inverse is not supported for that kind of filter\n"); + return; + } + for (const struct test_desc_t* test = s_unity_tests_first; test != NULL; test = test->next) + { + unity_run_single_test(test); + } +} + +void unity_run_tests_with_filter(const char* filter) +{ + if (s_invert) + { + ++filter; + } + printf("Running tests %smatching '%s'...\n", s_invert ? "NOT " : "", filter); + + for (const struct test_desc_t* test = s_unity_tests_first; test != NULL; test = test->next) + { + if ((strstr(test->desc, filter) != NULL) == !s_invert) + { + unity_run_single_test(test); + } + } +} + +static void trim_trailing_space(char* str) +{ + char* end = str + strlen(str) - 1; + while (end >= str && isspace((int) *end)) + { + *end = 0; + --end; + } +} + +static int print_test_menu(void) +{ + int test_counter = 0; + unity_printf("\n\nHere's the test menu, pick your combo:\n"); + for (const struct test_desc_t* test = s_unity_tests_first; + test != NULL; + test = test->next, ++test_counter) + { + unity_printf("(%d)\t\"%s\" %s\n", test_counter + 1, test->name, test->desc); + } + return test_counter; +} + +void unity_run_menu() +{ + int test_count = print_test_menu(); + while (true) + { + char cmdline[256] = { 0 }; + while(strlen(cmdline) == 0) + { + /* Flush anything already in the RX buffer */ + while(uart_rx_one_char((uint8_t *) cmdline) == OK) { + } + /* Read input */ + UartRxString((uint8_t*) cmdline, sizeof(cmdline) - 1); + trim_trailing_space(cmdline); + if(strlen(cmdline) == 0) { + /* if input was newline, print a new menu */ + print_test_menu(); + } + } + + UNITY_BEGIN(); + + size_t idx = 0; + if (cmdline[idx] == '!') + { + s_invert = true; + ++idx; + } + else + { + s_invert = false; + } + + if (cmdline[idx] == '*') + { + unity_run_all_tests(); + } + else if (cmdline[idx] =='[') + { + unity_run_tests_with_filter(cmdline + idx); + } + else if (cmdline[idx] =='"') + { + unity_run_single_test_by_name(cmdline + idx); + } + else if (isdigit((unsigned char)cmdline[idx])) + { + unity_run_single_test_by_index_parse(cmdline + idx, test_count); + } + + UNITY_END(); + + printf("Enter next test, or 'enter' to see menu\n"); + } +} diff --git a/unit-test-app/main/app_main.c b/unit-test-app/main/app_main.c new file mode 100644 index 0000000..bf54b03 --- /dev/null +++ b/unit-test-app/main/app_main.c @@ -0,0 +1,20 @@ +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "unity.h" +#include "unity_config.h" + +void unityTask(void *pvParameters) +{ + vTaskDelay(1000 / portTICK_PERIOD_MS); + unity_run_menu(); + while(1); +} + +void app_main() +{ + // Note: if unpinning this task, change the way run times are calculated in + // unity_platform + xTaskCreatePinnedToCore(unityTask, "unityTask", 8192, NULL, + UNITY_FREERTOS_PRIORITY, NULL, UNITY_FREERTOS_CPU); +} diff --git a/unit-test-app/main/component.mk b/unit-test-app/main/component.mk new file mode 100644 index 0000000..a98f634 --- /dev/null +++ b/unit-test-app/main/component.mk @@ -0,0 +1,4 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) diff --git a/unit-test-app/partition_table_unit_test_app.csv b/unit-test-app/partition_table_unit_test_app.csv new file mode 100644 index 0000000..2c82b33 --- /dev/null +++ b/unit-test-app/partition_table_unit_test_app.csv @@ -0,0 +1,10 @@ +# Special partition table for unit test app +# +# Name, Type, SubType, Offset, Size, Flags +# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild +nvs, data, nvs, 0x9000, 0x6000 +#otadata, data, ota, 0xd000, 0x2000 +phy_init, data, phy, 0xf000, 0x1000 +factory, 0, 0, 0x10000, 0x140000 +ota_0, 0, ota_0, , 256K +ota_1, 0, ota_1, , 256K From 43b303c4ee3ced5d7ebcd9884713353aee4e5daf Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 22 Sep 2017 18:04:05 +0200 Subject: [PATCH 041/200] fix #21 --- CHANGELOG.md | 1 + components/bootwifi/bootwifi.c | 6 ++++-- components/oap_common/test/sandbox.c | 10 ++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7211b93..65213db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - OTA updates ([#2](https://github.com/openairproject/sensor-esp32/issues/2)) - fix NVS crash after fresh install ([#14](https://github.com/openairproject/sensor-esp32/issues/14)) +- fix non-unique SSID in AP mode ([#21](https://github.com/openairproject/sensor-esp32/issues/21)) # 0.4.0 diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 26876a7..8702f26 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -406,8 +406,10 @@ static void become_access_point() { //generate unique SSID uint8_t mac[6]; - esp_efuse_read_mac(mac); - sprintf((char*)apConfig.ap.ssid, "OpenAirProject-%02X%02X", mac[0], mac[1]); + esp_efuse_mac_get_default(mac); + //ESP_LOGD(tag, "MAC= %02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); + //using full MAC would be the best but I'm not sure if it is safe (if someone has wifi with MAC filtering) + sprintf((char*)apConfig.ap.ssid, "OpenAirProject-%02X%02X%02X%02X", mac[0], mac[1], mac[4], mac[5]); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &apConfig)); ESP_ERROR_CHECK(esp_wifi_start()); diff --git a/components/oap_common/test/sandbox.c b/components/oap_common/test/sandbox.c index 4957d94..4033738 100644 --- a/components/oap_common/test/sandbox.c +++ b/components/oap_common/test/sandbox.c @@ -31,7 +31,9 @@ #include "esp_partition.h" #include "esp_log.h" #include +#include "esp_system.h" +/* typedef struct { uint8_t num; char* str; @@ -71,4 +73,12 @@ TEST_CASE("structs","sandbox") { ESP_LOGI(TAG, "old str:%s", str); //str[0] = '!'; //error (const allocation) //free(str); //error free() target pointer is outside heap areas +}*/ + +/* +TEST_CASE("mac", "sandbox") { + uint8_t mac[6]; + esp_efuse_mac_get_default(mac); + ESP_LOGD("TST", "MAC= %02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); } +*/ From c6c4dc967847ae736485bb0b4d1735ec07abc1c4 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 23 Sep 2017 13:51:40 +0200 Subject: [PATCH 042/200] enable jenkins build (fix #4) fix unit test configuration fix test failing for bmp280 add default config (fix #13) --- .gitignore | 3 +- .project | 6 + .pydevproject | 5 + CHANGELOG.md | 4 + Jenkinsfile | 31 ++ coredump.sh => bin/coredump.sh | 2 +- coredump2.sh => bin/coredump2.sh | 2 +- debug.sh => bin/debug.sh | 0 erase.sh => bin/erase.sh | 0 bin/firmware_installer.py | 0 flash-monitor.sh => bin/flash-monitor.sh | 0 test.sh => bin/make_tests.sh | 5 +- bin/run_tests.py | 42 ++ components/bmx280/i2c_bme280.c | 9 +- components/bmx280/i2c_bme280.h | 6 + components/bmx280/test/test_bmx280.c | 4 +- components/oap_common/include/oap_version.h | 4 +- components/oap_common/oap_storage.c | 2 +- sdkconfig.defaults | 489 ++++++++++++++++++++ unit-test-app/.gitignore | 2 +- unit-test-app/sdkconfig.defaults | 485 +++++++++++++++++++ 21 files changed, 1090 insertions(+), 11 deletions(-) create mode 100644 .pydevproject create mode 100644 Jenkinsfile rename coredump.sh => bin/coredump.sh (63%) rename coredump2.sh => bin/coredump2.sh (63%) rename debug.sh => bin/debug.sh (100%) rename erase.sh => bin/erase.sh (100%) mode change 100644 => 100755 bin/firmware_installer.py rename flash-monitor.sh => bin/flash-monitor.sh (100%) rename test.sh => bin/make_tests.sh (52%) create mode 100755 bin/run_tests.py create mode 100644 sdkconfig.defaults create mode 100644 unit-test-app/sdkconfig.defaults diff --git a/.gitignore b/.gitignore index 184652f..a8122f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ build/ sdkconfig -sdkconfig.* +sdkconfig.old +sdkconfig.bak .DS_Store main/*.bak core.dat diff --git a/.project b/.project index f34d3e4..4aa02a1 100644 --- a/.project +++ b/.project @@ -5,6 +5,11 @@ + + org.python.pydev.PyDevBuilder + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder clean,full,incremental, @@ -23,5 +28,6 @@ org.eclipse.cdt.core.ccnature org.eclipse.cdt.managedbuilder.core.managedBuildNature org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.python.pydev.pythonNature diff --git a/.pydevproject b/.pydevproject new file mode 100644 index 0000000..d001f0a --- /dev/null +++ b/.pydevproject @@ -0,0 +1,5 @@ + + +Default +python interpreter + diff --git a/CHANGELOG.md b/CHANGELOG.md index 65213db..d04aa51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.5.0 + +- enable Jenkins build and automated unit tests ([#4](https://github.com/openairproject/sensor-esp32/issues/4)) + # 0.4.3 - OTA updates ([#2](https://github.com/openairproject/sensor-esp32/issues/2)) diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..50574aa --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,31 @@ +pipeline { + agent any + stages { + stage('build') { + steps { + checkout scm + sh 'make clean' + sh 'make all -j5' + } + } + stage('test') { + steps { + sh 'bin/make_tests.sh' + sh 'sleep 3' + sh 'bin/run_tests.py' + } + } + stage('archive') { + steps { + sh 'cat build/sensor-esp32.bin | openssl dgst -sha256 > build/sensor-esp32.bin.sha256' + } + post { + success { + archiveArtifacts artifacts: 'build/sensor-esp32.*', fingerprint: true + archiveArtifacts artifacts: 'build/partitions_singleapp.bin', fingerprint: true + archiveArtifacts artifacts: 'build/bootloader/bootloader.bin', fingerprint: true + } + } + } + } +} \ No newline at end of file diff --git a/coredump.sh b/bin/coredump.sh similarity index 63% rename from coredump.sh rename to bin/coredump.sh index 0a2fb2f..2f977d4 100755 --- a/coredump.sh +++ b/bin/coredump.sh @@ -1,3 +1,3 @@ #!/bin/sh -$IDF_PATH/components/espcoredump/espcoredump.py info_corefile -t b64 -c core.dat build/sensor-esp32.elf \ No newline at end of file +$IDF_PATH/components/espcoredump/espcoredump.py info_corefile -t b64 -c logs/core.dat build/sensor-esp32.elf \ No newline at end of file diff --git a/coredump2.sh b/bin/coredump2.sh similarity index 63% rename from coredump2.sh rename to bin/coredump2.sh index e9c24c3..3a7d0cd 100755 --- a/coredump2.sh +++ b/bin/coredump2.sh @@ -1,3 +1,3 @@ #!/bin/sh -$IDF_PATH/components/espcoredump/espcoredump.py dbg_corefile -t b64 -c core.dat build/sensor-esp32.elf \ No newline at end of file +$IDF_PATH/components/espcoredump/espcoredump.py dbg_corefile -t b64 -c logs/core.dat build/sensor-esp32.elf \ No newline at end of file diff --git a/debug.sh b/bin/debug.sh similarity index 100% rename from debug.sh rename to bin/debug.sh diff --git a/erase.sh b/bin/erase.sh similarity index 100% rename from erase.sh rename to bin/erase.sh diff --git a/bin/firmware_installer.py b/bin/firmware_installer.py old mode 100644 new mode 100755 diff --git a/flash-monitor.sh b/bin/flash-monitor.sh similarity index 100% rename from flash-monitor.sh rename to bin/flash-monitor.sh diff --git a/test.sh b/bin/make_tests.sh similarity index 52% rename from test.sh rename to bin/make_tests.sh index 3eae2ae..f5ac702 100755 --- a/test.sh +++ b/bin/make_tests.sh @@ -1,4 +1,7 @@ +#!/bin/sh + #https://www.esp32.com/viewtopic.php?t=2867 project=`pwd` -make -C unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot bmx280 pmsx003' flash monitor -j5 \ No newline at end of file +export BATCH_BUILD=1 +make -C unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot bmx280 pmsx003' defconfig all flash $1 -j5 \ No newline at end of file diff --git a/bin/run_tests.py b/bin/run_tests.py new file mode 100755 index 0000000..377e15a --- /dev/null +++ b/bin/run_tests.py @@ -0,0 +1,42 @@ +#!/usr/bin/python +import serial +import sys +import time + +ser = serial.Serial('/dev/tty.SLAB_USBtoUART',115200,timeout=1) + +def readall(exp, timeout = 5): + line = ser.readline() + lastline = '' + start = time.time() + while line != exp: + lastline = line + + if line == 'Rebooting...': + lastline = 'UNEXPECTED REBOOT' + break + + if ":FAIL" in line or ":PASS" in line: + start = time.time() + + if time.time() - start > timeout: + lastline = 'TIMEOUT after '+str(timeout)+' seconds' + break + + line = ser.readline() + sys.stdout.write(line) + sys.stdout.flush() + line = line.strip() + return lastline + +def wait_for_test_result(): + return readall('Enter next test, or \'enter\' to see menu',10) + +ser.write('\n'); +readall('Here\'s the test menu, pick your combo:') +ser.write('*' if len(sys.argv) == 1 else sys.argv[1]) +ser.write('\n') +result = wait_for_test_result().strip() +sys.stdout.write('TEST RESULT: '+result) +ser.close() +sys.exit(0 if result == 'OK' else 1) \ No newline at end of file diff --git a/components/bmx280/i2c_bme280.c b/components/bmx280/i2c_bme280.c index 5a65f51..bafe208 100755 --- a/components/bmx280/i2c_bme280.c +++ b/components/bmx280/i2c_bme280.c @@ -226,8 +226,11 @@ esp_err_t BME280_read(bme280_sensor_t* bme280_sensor, env_data* result){ temp_reading_t temp_reading = BME280_compensate_T_double(&bme280_sensor->calib, temp_raw); result->temp = temp_reading.temp;//Celsius result->pressure = BME280_compensate_P_double(&bme280_sensor->calib, temp_reading.t_fine, pres_raw) / 100.0; //hPA - result->humidity = BME280_compensate_H_double(&bme280_sensor->calib, temp_reading.t_fine, hum_raw);// pct - + if (bme280_sensor->chip_type == CHIP_TYPE_BME) { + result->humidity = BME280_compensate_H_double(&bme280_sensor->calib, temp_reading.t_fine, hum_raw);// pct + } else { + result->humidity = HUMIDITY_MEAS_UNSUPPORTED; + } return ESP_OK; } @@ -242,11 +245,13 @@ esp_err_t BME280_verify_chip(bme280_sensor_t* bme280_sensor) { switch (chipID) { case BME280_CHIP_ID: + bme280_sensor->chip_type=CHIP_TYPE_BME; ESP_LOGI(TAG,"[%x] detected BME280 (0x%X)", bme280_sensor->i2c_comm.device_addr, chipID); return ESP_OK; case BMP280_CHIP_ID1: case BMP280_CHIP_ID2: case BMP280_CHIP_ID3: + bme280_sensor->chip_type=CHIP_TYPE_BMP; ESP_LOGI(TAG,"[%x] detected BMP280 - no humidity data (0x%X)", bme280_sensor->i2c_comm.device_addr, chipID); return ESP_OK; default: diff --git a/components/bmx280/i2c_bme280.h b/components/bmx280/i2c_bme280.h index 2794f9c..852ded6 100755 --- a/components/bmx280/i2c_bme280.h +++ b/components/bmx280/i2c_bme280.h @@ -25,6 +25,11 @@ #define BME280_MODE_NORMAL 0x03 //reads sensors at set interval #define BME280_MODE_FORCED 0x01 //reads sensors once when you write this register +#define CHIP_TYPE_BMP 1 +#define CHIP_TYPE_BME 2 + +#define HUMIDITY_MEAS_UNSUPPORTED -1 + typedef struct bmx280_calib_t { uint16_t dig_T1; int16_t dig_T2; @@ -55,6 +60,7 @@ typedef struct bme280_sensor_t { uint8_t operation_mode; i2c_comm_t i2c_comm; bmx280_calib_t calib; + uint8_t chip_type; } bme280_sensor_t; esp_err_t BME280_verify_chip(bme280_sensor_t* bme280_sensor); diff --git a/components/bmx280/test/test_bmx280.c b/components/bmx280/test/test_bmx280.c index 9d143cc..132d7e1 100644 --- a/components/bmx280/test/test_bmx280.c +++ b/components/bmx280/test/test_bmx280.c @@ -49,5 +49,7 @@ TEST_CASE("bmx280 measurement","[bmx280]") { TEST_ASSERT_EQUAL_UINT(9, last_result.sensor); TEST_ASSERT_TRUE_MESSAGE(last_result.temp > 10 && last_result.temp < 50, "invalid temperature"); //let's assume we do it indoors ;) TEST_ASSERT_TRUE_MESSAGE(last_result.pressure>850 && last_result.pressure < 1050, "invalid pressure"); - TEST_ASSERT_TRUE_MESSAGE(last_result.humidity > 0 && last_result.humidity < 100, "invalid humidity"); //bme280 only + if (last_result.humidity != -1) { + TEST_ASSERT_TRUE_MESSAGE(last_result.humidity > 0 && last_result.humidity < 100, "invalid humidity"); //bme280 only + } } diff --git a/components/oap_common/include/oap_version.h b/components/oap_common/include/oap_version.h index c5bc9c2..99c10af 100644 --- a/components/oap_common/include/oap_version.h +++ b/components/oap_common/include/oap_version.h @@ -37,8 +37,8 @@ #include "esp_err.h" #define OAP_VER_MAJOR 0 -#define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 3 +#define OAP_VER_MINOR 5 +#define OAP_VER_PATCH 0 typedef struct { uint8_t major; diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 45862cb..73c24f3 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -352,7 +352,7 @@ static void storage_init_config() { ESP_LOGE(TAG,"default config is not a proper json\n%s", str); abort(); } else { - ESP_LOGI(TAG,"default config\n%s",str); + ESP_LOGD(TAG,"default config\n%s",str); } free(str); storage_update_config(def_config); diff --git a/sdkconfig.defaults b/sdkconfig.defaults new file mode 100644 index 0000000..4c82485 --- /dev/null +++ b/sdkconfig.defaults @@ -0,0 +1,489 @@ +# +# Automatically generated file; DO NOT EDIT. +# Espressif IoT Development Framework Configuration +# + +# +# SDK tool configuration +# +CONFIG_TOOLPREFIX="xtensa-esp32-elf-" +CONFIG_PYTHON="python" + +# +# Bootloader config +# +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +CONFIG_LOG_BOOTLOADER_LEVEL_WARN=y +# CONFIG_LOG_BOOTLOADER_LEVEL_INFO is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=2 + +# +# Security features +# +# CONFIG_SECURE_BOOT_ENABLED is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set + +# +# Serial flasher config +# +CONFIG_ESPTOOLPY_PORT="/dev/tty.SLAB_USBtoUART" +# CONFIG_ESPTOOLPY_BAUD_115200B is not set +# CONFIG_ESPTOOLPY_BAUD_230400B is not set +CONFIG_ESPTOOLPY_BAUD_921600B=y +# CONFIG_ESPTOOLPY_BAUD_2MB is not set +# CONFIG_ESPTOOLPY_BAUD_OTHER is not set +CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 +CONFIG_ESPTOOLPY_BAUD=921600 +# CONFIG_ESPTOOLPY_COMPRESSED is not set +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_ESPTOOLPY_FLASHMODE="dio" +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="2MB" +CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +# CONFIG_MONITOR_BAUD_9600B is not set +# CONFIG_MONITOR_BAUD_57600B is not set +CONFIG_MONITOR_BAUD_115200B=y +# CONFIG_MONITOR_BAUD_230400B is not set +# CONFIG_MONITOR_BAUD_921600B is not set +# CONFIG_MONITOR_BAUD_2MB is not set +# CONFIG_MONITOR_BAUD_OTHER is not set +CONFIG_MONITOR_BAUD_OTHER_VAL=115200 +CONFIG_MONITOR_BAUD=115200 + +# +# OpenAirProject +# +CONFIG_OAP_PM_SAMPLE_BUF_SIZE=120 +CONFIG_OAP_RESULT_BUFFER_SIZE=1 +CONFIG_OAP_CONTROL_PANEL=1 + +# +# Partition Table +# +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set +CONFIG_PARTITION_TABLE_TWO_OTA=y +# CONFIG_PARTITION_TABLE_CUSTOM is not set +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 +CONFIG_PARTITION_TABLE_FILENAME="partitions_two_ota.csv" +CONFIG_APP_OFFSET=0x10000 + +# +# Compiler options +# +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set + +# +# Component config +# + +# +# Application Level Tracing +# +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +# CONFIG_ESP32_APPTRACE_ENABLE is not set +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y + +# +# FreeRTOS SystemView Tracing +# +# CONFIG_AWS_IOT_SDK is not set + +# +# OAP BMx280 Sensor +# +CONFIG_OAP_BMX280_ENABLED=1 +CONFIG_OAP_BMX280_ADDRESS=0x76 +CONFIG_OAP_BMX280_I2C_NUM=0 +CONFIG_OAP_BMX280_I2C_SDA_PIN=25 +CONFIG_OAP_BMX280_I2C_SCL_PIN=26 +CONFIG_OAP_BMX280_ENABLED_AUX=0 +CONFIG_OAP_BMX280_ADDRESS_AUX=0x77 +CONFIG_OAP_BMX280_I2C_NUM_AUX=0 +CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX=25 +CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX=26 + +# +# OAP WIFI +# +CONFIG_OAP_AP_PASSWORD="cleanair" +# CONFIG_BT_ENABLED is not set +CONFIG_BT_RESERVE_DRAM=0 + +# +# ESP32-specific +# +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 +CONFIG_MEMMAP_SMP=y +# CONFIG_SPIRAM_SUPPORT is not set +# CONFIG_MEMMAP_TRACEMEM is not set +# CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set +# CONFIG_ESP32_TRAX is not set +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +# CONFIG_ESP32_ENABLE_COREDUMP is not set +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2048 +CONFIG_MAIN_TASK_STACK_SIZE=10000 +CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_TIMER_TASK_STACK_SIZE=4096 +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +# CONFIG_ULP_COPROC_ENABLED is not set +CONFIG_ULP_COPROC_RESERVE_MEM=0 +CONFIG_ESP32_PANIC_PRINT_HALT=y +# CONFIG_ESP32_PANIC_PRINT_REBOOT is not set +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32_PANIC_GDBSTUB is not set +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_TASK_WDT=y +# CONFIG_TASK_WDT_PANIC is not set +CONFIG_TASK_WDT_TIMEOUT_S=5 +CONFIG_TASK_WDT_CHECK_IDLE_TASK=y +CONFIG_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_26 is not set +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set +# CONFIG_NO_BLOBS is not set + +# +# Wi-Fi +# +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=0 +# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 +CONFIG_ESP32_WIFI_AMPDU_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_NVS_ENABLED=y + +# +# Phy +# +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 + +# +# Ethernet +# +CONFIG_DMA_RX_BUF_NUM=10 +CONFIG_DMA_TX_BUF_NUM=10 +# CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE is not set +CONFIG_EMAC_TASK_PRIORITY=20 + +# +# FAT Filesystem support +# +CONFIG_FATFS_CODEPAGE_ASCII=y +# CONFIG_FATFS_CODEPAGE_437 is not set +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_CODEPAGE=1 +CONFIG_FATFS_MAX_LFN=255 + +# +# FreeRTOS +# +CONFIG_FREERTOS_UNICORE=y +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_HZ=1000 +# CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION is not set +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL=y +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY is not set +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=3 +CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y +# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set +# CONFIG_FREERTOS_ASSERT_DISABLE is not set +CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG=y +# CONFIG_ENABLE_MEMORY_DEBUG is not set +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +# CONFIG_FREERTOS_LEGACY_HOOKS is not set +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +# CONFIG_SUPPORT_STATIC_ALLOCATION is not set +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_FREERTOS_DEBUG_INTERNALS is not set + +# +# Log output +# +# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set +# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set +# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set +# CONFIG_LOG_DEFAULT_LEVEL_INFO is not set +CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y +# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_LOG_DEFAULT_LEVEL=4 +CONFIG_LOG_COLORS=y + +# +# LWIP +# +# CONFIG_L2_TO_L3_COPY is not set +CONFIG_LWIP_MAX_SOCKETS=4 +CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 +# CONFIG_LWIP_SO_REUSE is not set +CONFIG_LWIP_SO_RCVBUF=y +CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 +# CONFIG_LWIP_IP_FRAG is not set +# CONFIG_LWIP_IP_REASSEMBLY is not set + +# +# TCP +# +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=6 +CONFIG_TCP_MSS=1436 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_QUEUE_OOSEQ=y +CONFIG_TCP_OVERSIZE_MSS=y +# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_TCP_OVERSIZE_DISABLE is not set + +# +# UDP +# +CONFIG_UDP_RECVMBOX_SIZE=6 +# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set +CONFIG_TCPIP_TASK_STACK_SIZE=2560 +# CONFIG_PPP_SUPPORT is not set + +# +# ICMP +# +# CONFIG_LWIP_MULTICAST_PING is not set +# CONFIG_LWIP_BROADCAST_PING is not set + +# +# mbedTLS +# +CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 +# CONFIG_MBEDTLS_DEBUG is not set +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y +# CONFIG_MBEDTLS_HARDWARE_SHA is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set +# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set +# CONFIG_MBEDTLS_TLS_DISABLED is not set +CONFIG_MBEDTLS_TLS_SERVER=y +CONFIG_MBEDTLS_TLS_CLIENT=y +CONFIG_MBEDTLS_TLS_ENABLED=y + +# +# TLS Key Exchange Methods +# +# CONFIG_MBEDTLS_PSK_MODES is not set +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y +# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set +CONFIG_MBEDTLS_SSL_PROTO_TLS1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y +# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set +CONFIG_MBEDTLS_SSL_ALPN=y +CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y + +# +# Symmetric Ciphers +# +CONFIG_MBEDTLS_AES_C=y +# CONFIG_MBEDTLS_CAMELLIA_C is not set +# CONFIG_MBEDTLS_DES_C is not set +CONFIG_MBEDTLS_RC4_DISABLED=y +# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set +# CONFIG_MBEDTLS_RC4_ENABLED is not set +# CONFIG_MBEDTLS_BLOWFISH_C is not set +# CONFIG_MBEDTLS_XTEA_C is not set +CONFIG_MBEDTLS_CCM_C=y +CONFIG_MBEDTLS_GCM_C=y +# CONFIG_MBEDTLS_RIPEMD160_C is not set + +# +# Certificates +# +CONFIG_MBEDTLS_PEM_PARSE_C=y +CONFIG_MBEDTLS_PEM_WRITE_C=y +CONFIG_MBEDTLS_X509_CRL_PARSE_C=y +CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +CONFIG_MBEDTLS_ECP_C=y +CONFIG_MBEDTLS_ECDH_C=y +CONFIG_MBEDTLS_ECDSA_C=y +CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y +CONFIG_MBEDTLS_ECP_NIST_OPTIM=y + +# +# OpenSSL +# +# CONFIG_OPENSSL_DEBUG is not set +CONFIG_OPENSSL_ASSERT_DO_NOTHING=y +# CONFIG_OPENSSL_ASSERT_EXIT is not set + +# +# OAP OTA updates +# +CONFIG_OAP_OTA_ENABLED=1 +CONFIG_OAP_OTA_HOST="https://openairproject.com" +CONFIG_OAP_OTA_PATH="/ota" +CONFIG_OAP_OTA_CHECK_INTERVAL=3600 + +# +# OAP Peripherals +# +CONFIG_OAP_LED_R_PIN=12 +CONFIG_OAP_LED_G_PIN=27 +CONFIG_OAP_LED_B_PIN=14 +CONFIG_OAP_BTN_0_PIN=39 + +# +# OAP PMSx003 Sensor +# +CONFIG_OAP_PM_UART_NUM=1 +CONFIG_OAP_PM_SENSOR_CONTROL_PIN=10 +CONFIG_OAP_PM_UART_RXD_PIN=13 +CONFIG_OAP_PM_UART_TXD_PIN=5 +CONFIG_OAP_PM_UART_RTS_PIN=18 +CONFIG_OAP_PM_UART_CTS_PIN=19 +CONFIG_OAP_HEATER_CONTROL_PIN=21 +CONFIG_OAP_FAN_CONTROL_PIN=22 +CONFIG_OAP_PM_ENABLED_AUX=0 +CONFIG_OAP_PM_UART_NUM_AUX=0x2 +CONFIG_OAP_PM_SENSOR_CONTROL_PIN_AUX=2 +CONFIG_OAP_PM_UART_RXD_PIN_AUX=15 +CONFIG_OAP_PM_UART_TXD_PIN_AUX=5 +CONFIG_OAP_PM_UART_RTS_PIN_AUX=18 +CONFIG_OAP_PM_UART_CTS_PIN_AUX=19 + +# +# SPI Flash driver +# +# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set +CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y + +# +# tcpip adapter +# +CONFIG_IP_LOST_TIMER_INTERVAL=120 + +# +# Wear Levelling +# +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 diff --git a/unit-test-app/.gitignore b/unit-test-app/.gitignore index e03cb58..fdcb19b 100644 --- a/unit-test-app/.gitignore +++ b/unit-test-app/.gitignore @@ -1,6 +1,6 @@ build/ sdkconfig -sdkconfig.* +sdkconfig.old .DS_Store main/*.bak core.dat diff --git a/unit-test-app/sdkconfig.defaults b/unit-test-app/sdkconfig.defaults new file mode 100644 index 0000000..385e548 --- /dev/null +++ b/unit-test-app/sdkconfig.defaults @@ -0,0 +1,485 @@ +# +# Espressif IoT Development Framework Configuration +# +# This file is used to recreate sdkconfig in CI server. +# see https://github.com/espressif/esp-idf/blob/master/docs/api-reference/kconfig.rst +# + +# +# SDK tool configuration +# +CONFIG_TOOLPREFIX="xtensa-esp32-elf-" +CONFIG_PYTHON="python" + +# +# Bootloader config +# +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 + +# +# Security features +# +# CONFIG_SECURE_BOOT_ENABLED is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set + +# +# Serial flasher config +# +CONFIG_ESPTOOLPY_PORT="/dev/tty.SLAB_USBtoUART" +# CONFIG_ESPTOOLPY_BAUD_115200B is not set +# CONFIG_ESPTOOLPY_BAUD_230400B is not set +CONFIG_ESPTOOLPY_BAUD_921600B=y +# CONFIG_ESPTOOLPY_BAUD_2MB is not set +# CONFIG_ESPTOOLPY_BAUD_OTHER is not set +CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 +CONFIG_ESPTOOLPY_BAUD=921600 +CONFIG_ESPTOOLPY_COMPRESSED=y +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_ESPTOOLPY_FLASHMODE="dio" +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="2MB" +CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +# CONFIG_MONITOR_BAUD_9600B is not set +# CONFIG_MONITOR_BAUD_57600B is not set +CONFIG_MONITOR_BAUD_115200B=y +# CONFIG_MONITOR_BAUD_230400B is not set +# CONFIG_MONITOR_BAUD_921600B is not set +# CONFIG_MONITOR_BAUD_2MB is not set +# CONFIG_MONITOR_BAUD_OTHER is not set +CONFIG_MONITOR_BAUD_OTHER_VAL=115200 +CONFIG_MONITOR_BAUD=115200 + +# +# Partition Table +# +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partition_table_unit_test_app.csv" +CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 +CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" +CONFIG_APP_OFFSET=0x10000 + +# +# Compiler options +# +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set + +# +# Component config +# + +# +# Application Level Tracing +# +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +# CONFIG_ESP32_APPTRACE_ENABLE is not set +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y + +# +# FreeRTOS SystemView Tracing +# +# CONFIG_AWS_IOT_SDK is not set + +# +# OAP BMx280 Sensor +# +CONFIG_OAP_BMX280_ENABLED=1 +CONFIG_OAP_BMX280_ADDRESS=0x76 +CONFIG_OAP_BMX280_I2C_NUM=0 +CONFIG_OAP_BMX280_I2C_SDA_PIN=25 +CONFIG_OAP_BMX280_I2C_SCL_PIN=26 +CONFIG_OAP_BMX280_ENABLED_AUX=0 +CONFIG_OAP_BMX280_ADDRESS_AUX=0x77 +CONFIG_OAP_BMX280_I2C_NUM_AUX=0 +CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX=25 +CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX=26 + +# +# OAP WIFI +# +CONFIG_OAP_AP_PASSWORD="cleanair" +# CONFIG_BT_ENABLED is not set +CONFIG_BT_RESERVE_DRAM=0 + +# +# ESP32-specific +# +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 +CONFIG_MEMMAP_SMP=y +# CONFIG_SPIRAM_SUPPORT is not set +# CONFIG_MEMMAP_TRACEMEM is not set +# CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set +# CONFIG_ESP32_TRAX is not set +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +# CONFIG_ESP32_ENABLE_COREDUMP is not set +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 +CONFIG_MAIN_TASK_STACK_SIZE=4096 +CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_TIMER_TASK_STACK_SIZE=4096 +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +# CONFIG_ULP_COPROC_ENABLED is not set +CONFIG_ULP_COPROC_RESERVE_MEM=0 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32_PANIC_GDBSTUB is not set +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +CONFIG_TASK_WDT=y +# CONFIG_TASK_WDT_PANIC is not set +CONFIG_TASK_WDT_TIMEOUT_S=5 +CONFIG_TASK_WDT_CHECK_IDLE_TASK=y +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +CONFIG_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_26 is not set +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set +# CONFIG_NO_BLOBS is not set + +# +# Wi-Fi +# +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 +CONFIG_ESP32_WIFI_AMPDU_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_NVS_ENABLED=y + +# +# Phy +# +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 + +# +# Ethernet +# +CONFIG_DMA_RX_BUF_NUM=10 +CONFIG_DMA_TX_BUF_NUM=10 +# CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE is not set +CONFIG_EMAC_TASK_PRIORITY=20 + +# +# FAT Filesystem support +# +CONFIG_FATFS_CODEPAGE_ASCII=y +# CONFIG_FATFS_CODEPAGE_437 is not set +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_CODEPAGE=1 +CONFIG_FATFS_MAX_LFN=255 + +# +# FreeRTOS +# +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_HZ=100 +CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y +# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set +# CONFIG_FREERTOS_ASSERT_DISABLE is not set +# CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG is not set +# CONFIG_ENABLE_MEMORY_DEBUG is not set +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +# CONFIG_FREERTOS_LEGACY_HOOKS is not set +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +# CONFIG_SUPPORT_STATIC_ALLOCATION is not set +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_FREERTOS_DEBUG_INTERNALS is not set + +# +# Log output +# +# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set +# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set +# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set +CONFIG_LOG_DEFAULT_LEVEL_INFO=y +# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set +# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_LOG_DEFAULT_LEVEL=3 +CONFIG_LOG_COLORS=y + +# +# LWIP +# +# CONFIG_L2_TO_L3_COPY is not set +CONFIG_LWIP_MAX_SOCKETS=10 +CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 +# CONFIG_LWIP_SO_REUSE is not set +# CONFIG_LWIP_SO_RCVBUF is not set +CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 +# CONFIG_LWIP_IP_FRAG is not set +# CONFIG_LWIP_IP_REASSEMBLY is not set + +# +# TCP +# +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=6 +CONFIG_TCP_MSS=1436 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_QUEUE_OOSEQ=y +CONFIG_TCP_OVERSIZE_MSS=y +# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_TCP_OVERSIZE_DISABLE is not set + +# +# UDP +# +CONFIG_UDP_RECVMBOX_SIZE=6 +CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y +CONFIG_TCPIP_TASK_STACK_SIZE=2560 +# CONFIG_PPP_SUPPORT is not set + +# +# ICMP +# +# CONFIG_LWIP_MULTICAST_PING is not set +# CONFIG_LWIP_BROADCAST_PING is not set + +# +# mbedTLS +# +CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 +# CONFIG_MBEDTLS_DEBUG is not set +CONFIG_MBEDTLS_HARDWARE_AES=y +# CONFIG_MBEDTLS_HARDWARE_MPI is not set +# CONFIG_MBEDTLS_HARDWARE_SHA is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set +# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set +# CONFIG_MBEDTLS_TLS_DISABLED is not set +CONFIG_MBEDTLS_TLS_SERVER=y +CONFIG_MBEDTLS_TLS_CLIENT=y +CONFIG_MBEDTLS_TLS_ENABLED=y + +# +# TLS Key Exchange Methods +# +# CONFIG_MBEDTLS_PSK_MODES is not set +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y +# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set +CONFIG_MBEDTLS_SSL_PROTO_TLS1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y +# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set +CONFIG_MBEDTLS_SSL_ALPN=y +CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y + +# +# Symmetric Ciphers +# +CONFIG_MBEDTLS_AES_C=y +# CONFIG_MBEDTLS_CAMELLIA_C is not set +# CONFIG_MBEDTLS_DES_C is not set +CONFIG_MBEDTLS_RC4_DISABLED=y +# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set +# CONFIG_MBEDTLS_RC4_ENABLED is not set +# CONFIG_MBEDTLS_BLOWFISH_C is not set +# CONFIG_MBEDTLS_XTEA_C is not set +CONFIG_MBEDTLS_CCM_C=y +CONFIG_MBEDTLS_GCM_C=y +# CONFIG_MBEDTLS_RIPEMD160_C is not set + +# +# Certificates +# +CONFIG_MBEDTLS_PEM_PARSE_C=y +CONFIG_MBEDTLS_PEM_WRITE_C=y +CONFIG_MBEDTLS_X509_CRL_PARSE_C=y +CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +CONFIG_MBEDTLS_ECP_C=y +CONFIG_MBEDTLS_ECDH_C=y +CONFIG_MBEDTLS_ECDSA_C=y +CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y +CONFIG_MBEDTLS_ECP_NIST_OPTIM=y + +# +# OpenSSL +# +# CONFIG_OPENSSL_DEBUG is not set +CONFIG_OPENSSL_ASSERT_DO_NOTHING=y +# CONFIG_OPENSSL_ASSERT_EXIT is not set + +# +# OAP OTA updates +# +CONFIG_OAP_OTA_ENABLED=1 +CONFIG_OAP_OTA_HOST="https://openairproject.com" +CONFIG_OAP_OTA_PATH="/ota" +CONFIG_OAP_OTA_CHECK_INTERVAL=3600 + +# +# OAP Peripherals +# +CONFIG_OAP_LED_R_PIN=12 +CONFIG_OAP_LED_G_PIN=27 +CONFIG_OAP_LED_B_PIN=14 +CONFIG_OAP_BTN_0_PIN=35 + +# +# OAP PMSx003 Sensor +# +CONFIG_OAP_PM_UART_NUM=0x1 +CONFIG_OAP_PM_SENSOR_CONTROL_PIN=10 +CONFIG_OAP_PM_UART_RXD_PIN=13 +CONFIG_OAP_PM_UART_TXD_PIN=5 +CONFIG_OAP_PM_UART_RTS_PIN=18 +CONFIG_OAP_PM_UART_CTS_PIN=19 +CONFIG_OAP_HEATER_CONTROL_PIN=21 +CONFIG_OAP_FAN_CONTROL_PIN=22 +CONFIG_OAP_PM_ENABLED_AUX=0 +CONFIG_OAP_PM_UART_NUM_AUX=0x2 +CONFIG_OAP_PM_SENSOR_CONTROL_PIN_AUX=2 +CONFIG_OAP_PM_UART_RXD_PIN_AUX=15 +CONFIG_OAP_PM_UART_TXD_PIN_AUX=5 +CONFIG_OAP_PM_UART_RTS_PIN_AUX=18 +CONFIG_OAP_PM_UART_CTS_PIN_AUX=19 + +# +# SPI Flash driver +# +# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set +CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y + +# +# tcpip adapter +# +CONFIG_IP_LOST_TIMER_INTERVAL=120 + +# +# Wear Levelling +# +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 From 96aa410711004b32e61953c25fa9902a64c276c5 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 23 Sep 2017 16:50:02 +0200 Subject: [PATCH 043/200] use github as OTA server --- bin/dev_tests.sh | 6 ++++++ components/ota/Kconfig | 18 ++++++++++-------- components/ota/include/ota.h | 4 ++-- components/ota/ota.c | 24 +++++++----------------- components/ota/ota_int.h | 4 ++-- components/ota/test/files/index.txt | 4 ---- components/ota/test/test_ota.c | 4 ++-- ota-info/index.txt | 1 + sdkconfig.defaults | 4 ++-- unit-test-app/sdkconfig.defaults | 4 ++-- 10 files changed, 34 insertions(+), 39 deletions(-) create mode 100755 bin/dev_tests.sh create mode 100644 ota-info/index.txt diff --git a/bin/dev_tests.sh b/bin/dev_tests.sh new file mode 100755 index 0000000..8e95ada --- /dev/null +++ b/bin/dev_tests.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +#https://www.esp32.com/viewtopic.php?t=2867 + +project=`pwd` +make -C unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS='oap_common ota awsiot bmx280 pmsx003' all flash monitor -j5 \ No newline at end of file diff --git a/components/ota/Kconfig b/components/ota/Kconfig index ff8fbe1..8c92cfc 100644 --- a/components/ota/Kconfig +++ b/components/ota/Kconfig @@ -6,17 +6,19 @@ config OAP_OTA_ENABLED help todo -config OAP_OTA_HOST - string "host" - default "https://openairproject.com" +config OAP_OTA_BIN_URI_PREFIX + string "bin uri prefix" + default "https://github.com/openairproject/sensor-esp32/releases/" help - URL of ota server including a protocol + This prefix will be used to construct a full URI of a binary with OTA file. + It is recommended to define as strictly as possible to increase security. + Malicious index file won't be able to force update from different server / path. -config OAP_OTA_PATH - string "path" - default /ota +config OAP_OTA_INDEX_URI + string "index uri" + default "https://raw.githubusercontent.com/openairproject/sensor-esp32/gitota/ota/index.txt" help - path to ota folder on the server (with file index.txt) + full URI to file with OTA definition config OAP_OTA_CHECK_INTERVAL int "interval in seconds" diff --git a/components/ota/include/ota.h b/components/ota/include/ota.h index 1348913..7e1cdd1 100644 --- a/components/ota/include/ota.h +++ b/components/ota/include/ota.h @@ -24,8 +24,8 @@ #define COMPONENTS_OTA_INCLUDE_OTA_H_ #define OAP_OTA_ENABLED CONFIG_OAP_OTA_ENABLED -#define OAP_OTA_HOST CONFIG_OAP_OTA_HOST -#define OAP_OTA_PATH CONFIG_OAP_OTA_PATH +#define OAP_OTA_BIN_URI_PREFIX CONFIG_OAP_OTA_BIN_URI_PREFIX +#define OAP_OTA_INDEX_URI CONFIG_OAP_OTA_INDEX_URI #define OAP_OTA_CHECK_INTERVAL CONFIG_OAP_OTA_CHECK_INTERVAL void start_ota_task(); diff --git a/components/ota/ota.c b/components/ota/ota.c index 81a1818..d6a945b 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -132,11 +132,7 @@ static int get_ota_status_callback(request_t *req, char *data, int len) esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) { - request_t* req = req_new(ota_config->host); -// ESP_LOGI(TAG, "OTA.HOST:%s", ota_config->host); -// ESP_LOGI(TAG, "REQ.HOST:%s", (char*)req_list_get_key(req->opt, "host")->value); -// ESP_LOGI(TAG, "REQ.CLIENT_CERT:%p", req->client_cert); -// ESP_LOGI(TAG, "REQ.CLIENT_KEY:%p", req->client_key); + request_t* req = req_new(ota_config->index_uri); req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); @@ -144,11 +140,7 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) memset(&result, 0, sizeof(ost_status_result_t)); req->meta = &result; - char path[200]; - sprintf(path, "%s/index.txt", ota_config->path); - req_setopt(req, REQ_SET_METHOD, "GET"); - req_setopt(req, REQ_SET_PATH, path); req_setopt(req, REQ_SET_HEADER, "Connection: close"); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, get_ota_status_callback); @@ -189,15 +181,13 @@ static int download_ota_binary_callback(request_t *req, char *data, int len) esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition) { - //ota partition must be applied in max 16 parts (with binary <1M one part is 64kb) - request_t* req = req_new_with_buf(ota_config->host, 2*1024); - req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); + char file_uri[200]; + sprintf(file_uri, "%s%s", ota_config->bin_uri_prefix, ota_info->file); - char path[200]; - sprintf(path, "%s/%s", ota_config->path, ota_info->file); + request_t* req = req_new(file_uri); + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); req_setopt(req, REQ_SET_METHOD, "GET"); - req_setopt(req, REQ_SET_PATH, path); req_setopt(req, REQ_SET_HEADER, "Connection: close"); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_ota_binary_callback); @@ -335,8 +325,8 @@ static ota_config_t ota_config; void start_ota_task() { if (OAP_OTA_ENABLED) { - ota_config.host = OAP_OTA_HOST; - ota_config.path = OAP_OTA_PATH; + ota_config.bin_uri_prefix = OAP_OTA_BIN_URI_PREFIX; + ota_config.index_uri = OAP_OTA_INDEX_URI; ota_config.min_version = oap_version_num(oap_version()); ota_config.commit_and_reboot = 1; ota_config.update_partition = NULL; diff --git a/components/ota/ota_int.h b/components/ota/ota_int.h index c6d90f6..e7bc950 100644 --- a/components/ota/ota_int.h +++ b/components/ota/ota_int.h @@ -36,8 +36,8 @@ #define OAP_OTA_ERR_SHA_MISMATCH 0x1005 typedef struct { - char* host; - char* path; + char* bin_uri_prefix; + char* index_uri; unsigned int interval; // for <=0 it checks only once int commit_and_reboot; esp_partition_t *update_partition; diff --git a/components/ota/test/files/index.txt b/components/ota/test/files/index.txt index b422d6c..31de104 100644 --- a/components/ota/test/files/index.txt +++ b/components/ota/test/files/index.txt @@ -1,5 +1 @@ 1.2.3|hello-world.bin|304717e6b5d1f4e98d810a36e361b84f62d8363de55fba487b81ebe0b3d4f676 -0.4.0|sensor-esp32-0.4.0.bin|929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04 -0.3.0|sensor-esp32-0.3.0.bin|123fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c4567 - -#cat sensor-esp32-0.4.0.bin | openssl dgst -sha256 \ No newline at end of file diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index 9fabd4e..2a2ec2f 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -21,8 +21,8 @@ static const char* TAG = "test_ota"; static ota_config_t ota_test_config = { - .host = "https://openairproject.com", - .path = "/ota-test" + .index_uri = "https://raw.githubusercontent.com/openairproject/sensor-esp32/master/components/ota/test/files/index.txt", + .bin_uri_prefix = "https://raw.githubusercontent.com/openairproject/sensor-esp32/master/components/ota/test/files/" }; static ota_info_t hello_world_info = { diff --git a/ota-info/index.txt b/ota-info/index.txt new file mode 100644 index 0000000..f76547d --- /dev/null +++ b/ota-info/index.txt @@ -0,0 +1 @@ +0.5.0|0.5.0/sensor-esp32.bin|29d8046a4b61deb32193f68134d32bb290e8ccbe8d098bd6cf885844401be3ac diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 4c82485..4c56bca 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -439,8 +439,8 @@ CONFIG_OPENSSL_ASSERT_DO_NOTHING=y # OAP OTA updates # CONFIG_OAP_OTA_ENABLED=1 -CONFIG_OAP_OTA_HOST="https://openairproject.com" -CONFIG_OAP_OTA_PATH="/ota" +CONFIG_OAP_OTA_BIN_URI_PREFIX="https://github.com/openairproject/sensor-esp32/releases/" +CONFIG_OAP_OTA_INDEX_URI="https://raw.githubusercontent.com/openairproject/sensor-esp32/master/ota-info/index.txt" CONFIG_OAP_OTA_CHECK_INTERVAL=3600 # diff --git a/unit-test-app/sdkconfig.defaults b/unit-test-app/sdkconfig.defaults index 385e548..229fee4 100644 --- a/unit-test-app/sdkconfig.defaults +++ b/unit-test-app/sdkconfig.defaults @@ -435,8 +435,8 @@ CONFIG_OPENSSL_ASSERT_DO_NOTHING=y # OAP OTA updates # CONFIG_OAP_OTA_ENABLED=1 -CONFIG_OAP_OTA_HOST="https://openairproject.com" -CONFIG_OAP_OTA_PATH="/ota" +CONFIG_OAP_OTA_BIN_URI_PREFIX="https://github.com/openairproject/sensor-esp32/releases/" +CONFIG_OAP_OTA_INDEX_URI="https://raw.githubusercontent.com/openairproject/sensor-esp32/master/ota-info/index.txt" CONFIG_OAP_OTA_CHECK_INTERVAL=3600 # From d2fc24937ebb8b2f60e7567517473d2f4c58ed89 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 23 Sep 2017 17:57:16 +0200 Subject: [PATCH 044/200] rollback to old ota location github redirects to S3, which causes cert issue; workaround is not worth it --- components/oap_common/component.mk | 3 +-- components/oap_common/include/oap_version.h | 2 +- .../root_ca.pem => ota/comodo_ca.pem} | 0 components/ota/component.mk | 8 +++++- components/ota/digicert_ca.crt | Bin 0 -> 969 bytes components/ota/digicert_ca.pem | 23 ++++++++++++++++++ components/ota/ota.c | 19 ++++++++++----- sdkconfig.defaults | 4 +-- unit-test-app/sdkconfig.defaults | 4 +-- 9 files changed, 49 insertions(+), 14 deletions(-) rename components/{oap_common/root_ca.pem => ota/comodo_ca.pem} (100%) create mode 100644 components/ota/digicert_ca.crt create mode 100644 components/ota/digicert_ca.pem diff --git a/components/oap_common/component.mk b/components/oap_common/component.mk index 3cc966b..35b4a87 100644 --- a/components/oap_common/component.mk +++ b/components/oap_common/component.mk @@ -7,5 +7,4 @@ # please read the ESP-IDF documents if you need to do this. # -COMPONENT_EMBED_TXTFILES := default_config.json -COMPONENT_EMBED_TXTFILES += root_ca.pem \ No newline at end of file +COMPONENT_EMBED_TXTFILES := default_config.json \ No newline at end of file diff --git a/components/oap_common/include/oap_version.h b/components/oap_common/include/oap_version.h index 99c10af..b07c8e0 100644 --- a/components/oap_common/include/oap_version.h +++ b/components/oap_common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 0 #define OAP_VER_MINOR 5 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 1 typedef struct { uint8_t major; diff --git a/components/oap_common/root_ca.pem b/components/ota/comodo_ca.pem similarity index 100% rename from components/oap_common/root_ca.pem rename to components/ota/comodo_ca.pem diff --git a/components/ota/component.mk b/components/ota/component.mk index e19e22a..5ee3370 100644 --- a/components/ota/component.mk +++ b/components/ota/component.mk @@ -5,4 +5,10 @@ # src/ directory, compile them and link them into lib(subdirectory_name).a # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. -# \ No newline at end of file +# + +# GitHub (https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt) +#COMPONENT_EMBED_TXTFILES = digicert_ca.pem + +# openairproject.com (CloudFront) +COMPONENT_EMBED_TXTFILES = comodo_ca.pem diff --git a/components/ota/digicert_ca.crt b/components/ota/digicert_ca.crt new file mode 100644 index 0000000000000000000000000000000000000000..dae0196507d9166bbf9de6ed93ed5bd91d2a6f7c GIT binary patch literal 969 zcmXqLVm@ln#I$w+GZP~dlK|727_}^JhuQtym7mtRsg@h?vTHrk&& ztLnL}Q0ws3DJJQQxMViOXD)Ntcx3yg{tGjftaOaDx_oEKHJjTd7E8R&_^LL2_gWe( zWby8^XKvxdy5w!Em&G4m((=PUDRAG9qi=3oOnS`rlw%^#5e>)C->0KGMe7P*nC|y2 z;KS3U1MC5c*hY*|CU8utq&? zd&l;QPp7z6SghtsIkZ15c52JPg{pGxu~Grt3PNWbcjs{jTI}#X&BV;ez_>WsAklyi z7{#*ujEw(TSb)i@&43@o7Y6ZJ4VZzHfh)yU1V#fRgNzj0^gGw*%(v-CW8(-{yshZ|Lo0pNehH&82Z8W| zU7xFN3a0j%{+jp4b?dyFK8D^qCcbdi>Dyd!?)Ky0%ED_;6{j%X3T>aIlJc!9?aaM7 z=4V%!Y|Nakd}3aOl6Haf<4||QM9KFNM_cv%48AQe6jMI&{86fy@#+0i(hF>VoQmr< z>`vh5)a7A|3EF<-C)bRNqVe;E_SKjrTkLgNQvXCvo9oE*Ox~A0j}8cg?>JE=G%@s( zN9K(^T1?UWE>{!`Z-3cUpcXqJVcs5ZaZdd$r{$b8PO_^XycF~OmEz6}p*c2l_Rss% i5HmaZ>>Kx0s_N+r%s(?U)rMSO`QxRY@Z$0p@?HQubYDLJ literal 0 HcmV?d00001 diff --git a/components/ota/digicert_ca.pem b/components/ota/digicert_ca.pem new file mode 100644 index 0000000..9e6810a --- /dev/null +++ b/components/ota/digicert_ca.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- diff --git a/components/ota/ota.c b/components/ota/ota.c index d6a945b..f3ec834 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -42,8 +42,9 @@ static const char *TAG = "ota"; -extern const uint8_t _root_ca_pem_start[] asm("_binary_root_ca_pem_start"); -extern const uint8_t _root_ca_pem_end[] asm("_binary_root_ca_pem_end"); + +extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { for (int i = 0; i < 32; i++) { @@ -122,7 +123,7 @@ static int get_ota_status_callback(request_t *req, char *data, int len) { ESP_LOGD(TAG,"%s", data); ost_status_result_t* result = req->meta; - if (!result->found) { + if (req->response->status_code == 200 && !result->found) { result->found = 1; result->err = parse_ota_info(&result->binary, data, len); ESP_LOGD(TAG, "parse ota info line... [0x%x]", result->err); @@ -132,15 +133,20 @@ static int get_ota_status_callback(request_t *req, char *data, int len) esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) { + ESP_LOGI(TAG, "fetch ota info from %s", ota_config->index_uri); request_t* req = req_new(ota_config->index_uri); +// ESP_LOGI(TAG, "REQ.HOST:%s", (char*)req_list_get_key(req->opt, "host")->value); +// ESP_LOGI(TAG, "REQ.PATH:%s", (char*)req_list_get_key(req->opt, "path")->value); +// ESP_LOGI(TAG, "REQ.CLIENT_CERT:%p", req->client_cert); +// ESP_LOGI(TAG, "REQ.CLIENT_KEY:%p", req->client_key); + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); ost_status_result_t result; memset(&result, 0, sizeof(ost_status_result_t)); req->meta = &result; - req_setopt(req, REQ_SET_METHOD, "GET"); req_setopt(req, REQ_SET_HEADER, "Connection: close"); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, get_ota_status_callback); @@ -181,13 +187,14 @@ static int download_ota_binary_callback(request_t *req, char *data, int len) esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition) { - char file_uri[200]; + char file_uri[300]; sprintf(file_uri, "%s%s", ota_config->bin_uri_prefix, ota_info->file); + ESP_LOGI(TAG, "download ota binary from %s", file_uri); + request_t* req = req_new(file_uri); req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); - req_setopt(req, REQ_SET_METHOD, "GET"); req_setopt(req, REQ_SET_HEADER, "Connection: close"); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_ota_binary_callback); diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 4c56bca..1f30af0 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -439,8 +439,8 @@ CONFIG_OPENSSL_ASSERT_DO_NOTHING=y # OAP OTA updates # CONFIG_OAP_OTA_ENABLED=1 -CONFIG_OAP_OTA_BIN_URI_PREFIX="https://github.com/openairproject/sensor-esp32/releases/" -CONFIG_OAP_OTA_INDEX_URI="https://raw.githubusercontent.com/openairproject/sensor-esp32/master/ota-info/index.txt" +CONFIG_OAP_OTA_BIN_URI_PREFIX="https://openairproject.com/ota/" +CONFIG_OAP_OTA_INDEX_URI="https://openairproject.com/ota/index.txt" CONFIG_OAP_OTA_CHECK_INTERVAL=3600 # diff --git a/unit-test-app/sdkconfig.defaults b/unit-test-app/sdkconfig.defaults index 229fee4..6b088e6 100644 --- a/unit-test-app/sdkconfig.defaults +++ b/unit-test-app/sdkconfig.defaults @@ -435,8 +435,8 @@ CONFIG_OPENSSL_ASSERT_DO_NOTHING=y # OAP OTA updates # CONFIG_OAP_OTA_ENABLED=1 -CONFIG_OAP_OTA_BIN_URI_PREFIX="https://github.com/openairproject/sensor-esp32/releases/" -CONFIG_OAP_OTA_INDEX_URI="https://raw.githubusercontent.com/openairproject/sensor-esp32/master/ota-info/index.txt" +CONFIG_OAP_OTA_BIN_URI_PREFIX="https://openairproject.com/ota/" +CONFIG_OAP_OTA_INDEX_URI="https://openairproject.com/ota/index.txt" CONFIG_OAP_OTA_CHECK_INTERVAL=3600 # From 3dc62e5586336286f30d9209485e0b8182fa0366 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 23 Sep 2017 17:58:58 +0200 Subject: [PATCH 045/200] use sdkconfig.defaults for jenkins build --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 50574aa..45c3848 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,7 +5,7 @@ pipeline { steps { checkout scm sh 'make clean' - sh 'make all -j5' + sh 'make defconfig all -j5' } } stage('test') { From 3654941dcf6af66a48123ff072be66b2a29436ed Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 23 Sep 2017 18:06:11 +0200 Subject: [PATCH 046/200] another jenkins fix --- Jenkinsfile | 2 +- bin/make_default.sh | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100755 bin/make_default.sh diff --git a/Jenkinsfile b/Jenkinsfile index 45c3848..5951401 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,7 +5,7 @@ pipeline { steps { checkout scm sh 'make clean' - sh 'make defconfig all -j5' + sh 'bin/make_default.sh' } } stage('test') { diff --git a/bin/make_default.sh b/bin/make_default.sh new file mode 100755 index 0000000..c9c034b --- /dev/null +++ b/bin/make_default.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +export BATCH_BUILD=1 +make defconfig all flash $1 -j5 \ No newline at end of file From 36c88395004e9b2dbb62d5ed45562a7339cabf75 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 23 Sep 2017 18:07:53 +0200 Subject: [PATCH 047/200] one more jenkins fix --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 5951401..ea9e298 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ pipeline { stage('build') { steps { checkout scm - sh 'make clean' + sh 'rm -rf build' sh 'bin/make_default.sh' } } From b98bb0514eaff7c7502abcfa496cd5fffc0b9b96 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 23 Sep 2017 18:11:58 +0200 Subject: [PATCH 048/200] one more jenkins fix --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index ea9e298..162d7b5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -22,7 +22,7 @@ pipeline { post { success { archiveArtifacts artifacts: 'build/sensor-esp32.*', fingerprint: true - archiveArtifacts artifacts: 'build/partitions_singleapp.bin', fingerprint: true + archiveArtifacts artifacts: 'build/partitions_two_ota.bin', fingerprint: true archiveArtifacts artifacts: 'build/bootloader/bootloader.bin', fingerprint: true } } From 23450140af5a67eac35f376b57ebf3cbdc000b89 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 24 Sep 2017 21:42:15 +0200 Subject: [PATCH 049/200] fix #24 --- bin/deploy_ota.sh | 14 ++++++ components/esp-request/esp_request.c | 2 +- components/ota/ota.c | 5 +- .../ota/test/files/index-sha-mismatch.txt | 1 + components/ota/test/test_ota.c | 48 +++++++++++++++++-- ota-info/index.txt | 1 - 6 files changed, 63 insertions(+), 8 deletions(-) create mode 100755 bin/deploy_ota.sh create mode 100644 components/ota/test/files/index-sha-mismatch.txt delete mode 100644 ota-info/index.txt diff --git a/bin/deploy_ota.sh b/bin/deploy_ota.sh new file mode 100755 index 0000000..bbc8844 --- /dev/null +++ b/bin/deploy_ota.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# +# $1 - release version +# + +INDEX_FILE=build/index.txt +DEST_FOLDER=s3://openairproject.com/ota + +echo -n -e "$1|$1/sensor-esp32.bin|" > $INDEX_FILE +cat build/sensor-esp32.bin | openssl dgst -sha256 >> $INDEX_FILE + +aws s3 cp build/sensor-esp32.bin $DEST_FOLDER/$1/sensor-esp32.bin --profile iot +aws s3 cp $INDEX_FILE $DEST_FOLDER/index.txt --profile iot diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index 7cd23eb..32f9c0c 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -292,7 +292,7 @@ static int mbedtls_connect(request_t *req) } } while (0); - return 0; + return ret; } static int mbedtls_write(request_t *req, char *buffer, int len) diff --git a/components/ota/ota.c b/components/ota/ota.c index f3ec834..d90a674 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -292,7 +292,10 @@ esp_err_t check_ota_task(ota_config_t* ota_config) { ESP_LOGI(TAG, "esp_ota_begin succeeded"); //download - download_ota_binary(ota_config, &ota_info, update_handle); + if ((err = download_ota_binary(ota_config, &ota_info, update_handle)) != ESP_OK) { + ESP_LOGE(TAG, "download_ota_binary failed [0x%x]", err); + goto fail; + } if ((err=esp_ota_end(update_handle)) != ESP_OK) { ESP_LOGE(TAG, "esp_ota_end failed [0x%x]", err); diff --git a/components/ota/test/files/index-sha-mismatch.txt b/components/ota/test/files/index-sha-mismatch.txt new file mode 100644 index 0000000..00de45a --- /dev/null +++ b/components/ota/test/files/index-sha-mismatch.txt @@ -0,0 +1 @@ +1.2.3|hello-world.bin|99999999b5d1f4e98d810a36e361b84f62d8363de55fba487b81ebe0b3d4f676 diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index 2a2ec2f..5f82c9b 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -21,8 +21,11 @@ static const char* TAG = "test_ota"; static ota_config_t ota_test_config = { - .index_uri = "https://raw.githubusercontent.com/openairproject/sensor-esp32/master/components/ota/test/files/index.txt", - .bin_uri_prefix = "https://raw.githubusercontent.com/openairproject/sensor-esp32/master/components/ota/test/files/" + .index_uri = "https://openairproject.com/ota/test/index.txt", + .bin_uri_prefix = "https://openairproject.com/ota/test/", + .commit_and_reboot = 0, + .update_partition = NULL, + .interval = 0 }; static ota_info_t hello_world_info = { @@ -115,9 +118,6 @@ TEST_CASE("full ota", "[ota]") ota_config_t ota_config; memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier - ota_config.commit_and_reboot = 0; - ota_config.update_partition = NULL; - ota_config.interval = 0; int ret = check_ota_task(&ota_config); @@ -125,3 +125,41 @@ TEST_CASE("full ota", "[ota]") TEST_ESP_OK(ret); TEST_ASSERT_NOT_NULL(ota_config.update_partition); } + +TEST_CASE("skip ota if up-to-date", "[ota]") +{ + test_init_wifi(); + ota_config_t ota_config; + memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); + ota_config.min_version=oap_version_num(hello_world_info.ver); //the same version + + int ret = check_ota_task(&ota_config); + TEST_ASSERT_EQUAL_UINT16(OAP_OTA_ERR_NO_UPDATES, ret); +} + +TEST_CASE("fail ota for sha mismatch", "[ota]") +{ + test_init_wifi(); + ota_config_t ota_config; + memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); + ota_config.index_uri = "https://openairproject.com/ota/test/index-sha-mismatch.txt", + ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier + + int ret = check_ota_task(&ota_config); + TEST_ASSERT_EQUAL_UINT16(OAP_OTA_ERR_SHA_MISMATCH, ret); +} + +TEST_CASE("fail ota for invalid cert", "[ota]") +{ + test_init_wifi(); + //git uses digicert CA, cloud front - comodo CA + ota_config_t ota_config = { + .index_uri = "https://raw.githubusercontent.com/openairproject/sensor-esp32/master/components/ota/test/files/index.txt", + .bin_uri_prefix = "https://raw.githubusercontent.com/openairproject/sensor-esp32/master/components/ota/test/files/" + }; + + ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier + + int ret = check_ota_task(&ota_config); + TEST_ASSERT_EQUAL_UINT16(OAP_OTA_ERR_REQUEST_FAILED, ret); +} diff --git a/ota-info/index.txt b/ota-info/index.txt deleted file mode 100644 index f76547d..0000000 --- a/ota-info/index.txt +++ /dev/null @@ -1 +0,0 @@ -0.5.0|0.5.0/sensor-esp32.bin|29d8046a4b61deb32193f68134d32bb290e8ccbe8d098bd6cf885844401be3ac From 57e3a682c195ea7f2643758763bd34270be28379 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 1 Oct 2017 21:31:51 +0200 Subject: [PATCH 050/200] refactor pm_meter more tests fix #25 fix #15 --- .cproject | 2 +- .settings/org.eclipse.cdt.codan.core.prefs | 71 ++++ bin/dev_tests.sh | 5 +- bin/make_tests.sh | 7 +- bin/test_components.sh | 1 + components/awsiot/awsiot.c | 74 ++-- components/awsiot/awsiot_rest.h | 9 +- components/awsiot/include/awsiot.h | 16 +- components/awsiot/test/test_awsiot.c | 29 +- components/bmx280/bmx280.c | 31 +- components/bmx280/i2c_bme280.c | 3 +- components/bmx280/i2c_bme280.h | 4 +- components/bmx280/include/bmx280.h | 19 +- components/bmx280/test/test_bmx280.c | 10 +- components/net/include/thing_speak.h | 11 +- components/net/test/component.mk | 5 + components/net/test/test_thing_speak.c | 79 ++++ components/net/thing_speak.c | 181 ++------- components/oap_common/c_list.c | 190 +++++++++ components/oap_common/include/c_list.h | 57 +++ components/oap_common/include/oap_common.h | 42 +- .../oap_common/include/oap_data.h | 52 ++- components/oap_common/include/oap_data_env.h | 33 ++ components/oap_common/include/oap_data_pm.h | 35 ++ components/oap_common/include/oap_publisher.h | 39 ++ components/peripherals/include/rgb_led.h | 10 +- components/peripherals/rgb_led.c | 12 +- components/pm_meter/Kconfig | 22 + components/pm_meter/component.mk | 0 .../pm_meter/include}/meas_continuous.h | 2 +- .../pm_meter/include}/meas_intervals.h | 10 +- components/pm_meter/include/pm_meter.h | 79 ++++ .../pm_meter}/meas_continuous.c | 55 +-- .../pm_meter}/meas_intervals.c | 106 +++-- components/pm_meter/pm_meter.c | 30 ++ components/pm_meter/test/component.mk | 5 + components/pm_meter/test/test_pm_meter.c | 166 ++++++++ components/pmsx003/Kconfig | 12 - components/pmsx003/include/pmsx003.h | 28 +- components/pmsx003/pmsx003.c | 57 ++- components/pmsx003/test/test_pmsx003.c | 26 +- main/Kconfig.projbuild | 14 - main/main.c | 377 ++++++++++-------- unit-test-app/sdkconfig.defaults | 7 +- 44 files changed, 1395 insertions(+), 628 deletions(-) create mode 100644 .settings/org.eclipse.cdt.codan.core.prefs create mode 100644 bin/test_components.sh create mode 100644 components/net/test/component.mk create mode 100644 components/net/test/test_thing_speak.c create mode 100644 components/oap_common/c_list.c create mode 100644 components/oap_common/include/c_list.h rename main/meas.h => components/oap_common/include/oap_data.h (55%) create mode 100644 components/oap_common/include/oap_data_env.h create mode 100644 components/oap_common/include/oap_data_pm.h create mode 100644 components/oap_common/include/oap_publisher.h create mode 100644 components/pm_meter/Kconfig create mode 100644 components/pm_meter/component.mk rename {main => components/pm_meter/include}/meas_continuous.h (97%) rename {main => components/pm_meter/include}/meas_intervals.h (89%) create mode 100644 components/pm_meter/include/pm_meter.h rename {main => components/pm_meter}/meas_continuous.c (52%) rename {main => components/pm_meter}/meas_intervals.c (55%) create mode 100644 components/pm_meter/pm_meter.c create mode 100644 components/pm_meter/test/component.mk create mode 100644 components/pm_meter/test/test_pm_meter.c diff --git a/.cproject b/.cproject index 17c9dbf..7295aae 100644 --- a/.cproject +++ b/.cproject @@ -24,8 +24,8 @@

    OpenAirProject Sensor

    + +
    + Auto-update + + + + +
    Measurement diff --git a/components/ota/Kconfig b/components/ota/Kconfig index 8c92cfc..0f06003 100644 --- a/components/ota/Kconfig +++ b/components/ota/Kconfig @@ -20,11 +20,4 @@ config OAP_OTA_INDEX_URI help full URI to file with OTA definition -config OAP_OTA_CHECK_INTERVAL - int "interval in seconds" - default 3600 - help - determines how often sensor will check for OTA update. - value <= 0 means it will be checked only once during startup. - endmenu \ No newline at end of file diff --git a/components/ota/include/ota.h b/components/ota/include/ota.h index 7e1cdd1..6a0ee64 100644 --- a/components/ota/include/ota.h +++ b/components/ota/include/ota.h @@ -23,11 +23,13 @@ #ifndef COMPONENTS_OTA_INCLUDE_OTA_H_ #define COMPONENTS_OTA_INCLUDE_OTA_H_ +#include "oap_common.h" +#include "cJSON.h" + #define OAP_OTA_ENABLED CONFIG_OAP_OTA_ENABLED #define OAP_OTA_BIN_URI_PREFIX CONFIG_OAP_OTA_BIN_URI_PREFIX #define OAP_OTA_INDEX_URI CONFIG_OAP_OTA_INDEX_URI -#define OAP_OTA_CHECK_INTERVAL CONFIG_OAP_OTA_CHECK_INTERVAL -void start_ota_task(); +void start_ota_task(cJSON* user_ota_config); #endif /* COMPONENTS_OTA_INCLUDE_OTA_H_ */ diff --git a/components/ota/ota.c b/components/ota/ota.c index d90a674..09a4b65 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -251,7 +251,7 @@ esp_err_t is_ota_update_available(ota_config_t* ota_config, ota_info_t* ota_info return err; } -esp_err_t check_ota_task(ota_config_t* ota_config) { +esp_err_t check_ota(ota_config_t* ota_config) { ota_info_t ota_info; const esp_partition_t* running_partition = esp_ota_get_running_partition(); @@ -331,18 +331,31 @@ esp_err_t check_ota_task(ota_config_t* ota_config) { return err; } +static void check_ota_task(ota_config_t* ota_config) { + check_ota(ota_config); + vTaskDelete(NULL); +} + static ota_config_t ota_config; -void start_ota_task() { +void start_ota_task(cJSON* user_ota_config) { + if (OAP_OTA_ENABLED) { - ota_config.bin_uri_prefix = OAP_OTA_BIN_URI_PREFIX; - ota_config.index_uri = OAP_OTA_INDEX_URI; - ota_config.min_version = oap_version_num(oap_version()); - ota_config.commit_and_reboot = 1; - ota_config.update_partition = NULL; - ota_config.interval = 1000 * OAP_OTA_CHECK_INTERVAL; //1h - xTaskCreate(check_ota_task, "check_ota_task", 1024*4, &ota_config, DEFAULT_TASK_PRIORITY, NULL); + cJSON* ota_interval; + if (!user_ota_config || + !(ota_interval = cJSON_GetObjectItem(user_ota_config, "interval")) || ota_interval->valueint < 0) { + //disable for -1, for 0 it will run once at startup + ESP_LOGI(TAG, "OTA disabled"); + } else { + ota_config.bin_uri_prefix = OAP_OTA_BIN_URI_PREFIX; + ota_config.index_uri = OAP_OTA_INDEX_URI; + ota_config.min_version = oap_version_num(oap_version()); + ota_config.commit_and_reboot = 1; + ota_config.update_partition = NULL; + ota_config.interval = 1000 * ota_interval->valueint; + xTaskCreate(check_ota_task, "check_ota_task", 1024*4, &ota_config, DEFAULT_TASK_PRIORITY, NULL); + } } else { - ESP_LOGI(TAG, "OTA disabled"); + ESP_LOGI(TAG, "OTA not available"); } } diff --git a/components/ota/ota_int.h b/components/ota/ota_int.h index e7bc950..27c0bc0 100644 --- a/components/ota/ota_int.h +++ b/components/ota/ota_int.h @@ -54,7 +54,7 @@ esp_err_t is_ota_available(ota_config_t* ota_config, ota_info_t* ota_info); esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info); esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition); esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len); -esp_err_t check_ota_task(ota_config_t* ota_config); +esp_err_t check_ota(ota_config_t* ota_config); #endif /* COMPONENTS_OTA_OTA_INT_H_ */ diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index 5f82c9b..aa2a941 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -119,7 +119,7 @@ TEST_CASE("full ota", "[ota]") memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier - int ret = check_ota_task(&ota_config); + int ret = check_ota(&ota_config); //if OTA partition is too small, you'll get 'segment invalid length error' TEST_ESP_OK(ret); @@ -133,7 +133,7 @@ TEST_CASE("skip ota if up-to-date", "[ota]") memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); ota_config.min_version=oap_version_num(hello_world_info.ver); //the same version - int ret = check_ota_task(&ota_config); + int ret = check_ota(&ota_config); TEST_ASSERT_EQUAL_UINT16(OAP_OTA_ERR_NO_UPDATES, ret); } @@ -145,7 +145,7 @@ TEST_CASE("fail ota for sha mismatch", "[ota]") ota_config.index_uri = "https://openairproject.com/ota/test/index-sha-mismatch.txt", ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier - int ret = check_ota_task(&ota_config); + int ret = check_ota(&ota_config); TEST_ASSERT_EQUAL_UINT16(OAP_OTA_ERR_SHA_MISMATCH, ret); } @@ -160,6 +160,6 @@ TEST_CASE("fail ota for invalid cert", "[ota]") ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier - int ret = check_ota_task(&ota_config); + int ret = check_ota(&ota_config); TEST_ASSERT_EQUAL_UINT16(OAP_OTA_ERR_REQUEST_FAILED, ret); } diff --git a/main/main.c b/main/main.c index 6dae86e..f39cb37 100644 --- a/main/main.c +++ b/main/main.c @@ -353,7 +353,7 @@ void app_main() //wifi/mongoose requires plenty of mem, start it here wifi_boot(NULL, CONFIG_OAP_CONTROL_PANEL); - start_ota_task(); + start_ota_task(storage_get_config("ota")); ledc_init(); pm_meter_init(); From 8ae87350a363eca468bdbfcc2c7807109b9487d2 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Wed, 4 Oct 2017 16:03:09 +0200 Subject: [PATCH 062/200] fix for memory leaks in ota --- components/bootwifi/bootwifi.c | 4 ++-- components/esp-request/esp_request.c | 6 +++++- components/oap_common/include/oap_debug.h | 4 ++-- components/oap_common/oap_debug.c | 11 +++++++---- components/ota/ota.c | 17 ++++++++++++++++- components/ota/ota_int.h | 8 ++++++++ components/ota/test/test_ota.c | 22 ++++++++++++++++++++++ main/main.c | 6 ++++-- 8 files changed, 66 insertions(+), 12 deletions(-) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 8702f26..1169476 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -67,7 +67,7 @@ static int g_mongooseStopRequest = 0; // Request to stop the mongoose server. static int _sntp_initialised = 0; static int is_station = 0; static void become_access_point(); -static void restore_wifi_setup(); +static void restore_wifi_setup(oc_wifi_t* oc_wifi); static char tag[] = "wifi"; @@ -300,7 +300,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { * TODO remember successful connection to wifi and do not fallback to AP if we ever managed connect to wifi. */ xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); - restore_wifi_setup(); + restore_wifi_setup(NULL); break; } diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index 32f9c0c..d563e15 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -261,6 +261,7 @@ static int mbedtls_connect(request_t *req) ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); while ((ret = mbedtls_ssl_handshake(&ssl->ssl_ctx)) != ESP_OK) { + //sometimes it returns -78 and hangs :( if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { ESP_LOGW(TAG, "mbedtls_ssl_handshake returned 0x%x", -ret); break; @@ -268,7 +269,10 @@ static int mbedtls_connect(request_t *req) vTaskDelay(10 / portTICK_PERIOD_MS); vPortYield(); } - if (ret != ESP_OK) break; + if (ret != ESP_OK) { + //do we need to release anything here??? + break; + } if (req->client_cert && req->client_key) { if ((ret = mbedtls_ssl_get_record_expansion(&ssl->ssl_ctx)) >= 0) { diff --git a/components/oap_common/include/oap_debug.h b/components/oap_common/include/oap_debug.h index 6d541d6..0251e22 100644 --- a/components/oap_common/include/oap_debug.h +++ b/components/oap_common/include/oap_debug.h @@ -31,5 +31,5 @@ heap_log* heap_log_take(heap_log* log, const char* msg); void heap_log_free(heap_log* log); -void log_task_stack(const char* TAG); -void log_heap_size(const char* TAG, const char* msg); +void log_task_stack(const char* task); +void log_heap_size(const char* msg); diff --git a/components/oap_common/oap_debug.c b/components/oap_common/oap_debug.c index 071dab0..18684d9 100644 --- a/components/oap_common/oap_debug.c +++ b/components/oap_common/oap_debug.c @@ -29,24 +29,27 @@ #include "esp_log.h" #include "freertos/task.h" +#define TAG "MEM" /** * this method is surprisingly stack heavy - it takes ~ 1000 bytes. * before using it, adjust task stack accordingly. */ -void log_task_stack(const char* TAG) { +void log_task_stack(const char* task) { //uxTaskGetStackHighWaterMark is marked as UNTESTED #if !CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION - ESP_LOGD(TAG, "----------> TASK MIN STACK: %d", uxTaskGetStackHighWaterMark( NULL )); + ESP_LOGD(TAG, "task '%s' min stack (%d)", task, uxTaskGetStackHighWaterMark( NULL )); #endif } static size_t last_free_heap = 0; -void log_heap_size(const char* TAG, const char* msg) { +void log_heap_size(const char* msg) { size_t free_heap = xPortGetFreeHeapSize(); if (last_free_heap == 0) last_free_heap = free_heap; - ESP_LOGD(TAG, "----------> free heap (%s): %d (since last: %d, min: %d)", msg, free_heap, free_heap-last_free_heap, xPortGetMinimumEverFreeHeapSize()); + ESP_LOGD(TAG, "heap min (%d) free (%d) change (%d) %s", + xPortGetMinimumEverFreeHeapSize(), + free_heap, free_heap-last_free_heap, msg); last_free_heap = free_heap; } diff --git a/components/ota/ota.c b/components/ota/ota.c index 09a4b65..d66acd8 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -131,6 +131,15 @@ static int get_ota_status_callback(request_t *req, char *data, int len) return 0; } +void free_ota_info(ota_info_t* ota_info) { + if (ota_info) { + if (ota_info->file) free(ota_info->file); + if (ota_info->sha) free(ota_info->sha); + ota_info->file=NULL; + ota_info->sha=NULL; + } +} + esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) { ESP_LOGI(TAG, "fetch ota info from %s", ota_config->index_uri); @@ -252,7 +261,7 @@ esp_err_t is_ota_update_available(ota_config_t* ota_config, ota_info_t* ota_info } esp_err_t check_ota(ota_config_t* ota_config) { - ota_info_t ota_info; + const esp_partition_t* running_partition = esp_ota_get_running_partition(); ESP_LOGI(TAG, "running partition = %s", running_partition->label); @@ -267,6 +276,10 @@ esp_err_t check_ota(ota_config_t* ota_config) { ESP_LOGI(TAG, "update partition = %s", ota_config->update_partition->label); esp_err_t err; esp_ota_handle_t update_handle = 0; + ota_info_t ota_info = { + .sha =NULL, + .file=NULL + }; while (1) { if ((err = wifi_connected_wait_for(30000)) != ESP_OK) { @@ -274,6 +287,7 @@ esp_err_t check_ota(ota_config_t* ota_config) { } ESP_LOGD(TAG, "Check for OTA updates..."); + log_task_stack(TAG); if ((err = is_ota_update_available(ota_config, &ota_info)) != ESP_OK) goto go_sleep; @@ -320,6 +334,7 @@ esp_err_t check_ota(ota_config_t* ota_config) { ESP_LOGE(TAG,"Interrupt OTA"); go_sleep: + free_ota_info(&ota_info); if (ota_config->interval <= 0) { break; diff --git a/components/ota/ota_int.h b/components/ota/ota_int.h index 27c0bc0..8ea788f 100644 --- a/components/ota/ota_int.h +++ b/components/ota/ota_int.h @@ -50,8 +50,16 @@ typedef struct { oap_version_t ver; } ota_info_t; +/* + * ota_info has to be freed with free_ota_info + */ esp_err_t is_ota_available(ota_config_t* ota_config, ota_info_t* ota_info); + +/* + * ota_info has to be freed with free_ota_info + */ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info); +void free_ota_info(ota_info_t* ota_info); esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition); esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len); esp_err_t check_ota(ota_config_t* ota_config); diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index aa2a941..a5a704b 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -95,6 +95,28 @@ TEST_CASE("fetch_last_ota_info", "[ota]") } } +//TEST_CASE("fetch_last_ota_info - LL", "[ota]") +//{ +// test_require_wifi(); +// ota_info_t info = { +// .sha = NULL, +// .file = NULL +// }; +// /* +// * heap consumption goes to 0 after ~5 requests +// */ +// size_t curr_heap = 0; +// size_t prev_heap = 0; +// for (int i = 0; i < 1000; i++) { +// curr_heap = xPortGetFreeHeapSize(); +// ESP_LOGW(TAG, "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); +// prev_heap = curr_heap; +// fetch_last_ota_info(&ota_test_config, &info); +// free_ota_info(&info); +// if (i) delay(1000); +// } +//} + TEST_CASE("parse_ota_info","[ota]") { ota_info_t info; diff --git a/main/main.c b/main/main.c index f39cb37..e150b1f 100644 --- a/main/main.c +++ b/main/main.c @@ -295,9 +295,11 @@ static void publish_loop() { long localTime = oap_epoch_sec_valid(); long sysTime = oap_epoch_sec(); pm_data_pair_t pm_data_pair; - if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 100)) { - log_task_stack("publish_loop"); + log_heap_size("publish_loop"); + + if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 1000)) { + log_task_stack(TAG); float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); //ESP_LOGI(TAG, "AQI=%f",aqi); ledc_set_color(LED_SET, aqi,(1-aqi), 0); From a74d5b439dd3874483ec590d8050d56e9f8d1d90 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Thu, 5 Oct 2017 20:29:41 +0200 Subject: [PATCH 063/200] stable wifi fix #32 fix #19 --- CHANGELOG.md | 6 + bin/run_tests.py | 2 +- bin/test_components.sh | 2 +- components/bootwifi/bootwifi.c | 466 +++++++----------- components/bootwifi/cpanel.c | 126 +++++ .../bootwifi/{http_utils.h => cpanel.h} | 15 +- components/bootwifi/include/bootwifi.h | 15 +- components/bootwifi/include/server_cpanel.h | 31 ++ components/bootwifi/mongoose.c | 4 + components/bootwifi/mongoose.h | 2 + .../bootwifi/{http_utils.c => server.c} | 104 +++- components/bootwifi/server.h | 34 ++ components/bootwifi/server_cpanel.c | 35 ++ components/bootwifi/test/component.mk | 5 + components/bootwifi/test/test_bootwifi.c | 61 +++ components/esp-request/esp_request.c | 5 +- components/oap_common/include/oap_common.h | 3 + components/oap_common/include/oap_version.h | 4 +- components/oap_common/test/include/oap_test.h | 7 + components/oap_common/test/oap_test.c | 34 +- components/ota/ota.c | 9 +- components/ota/test/test_ota.c | 8 +- main/main.c | 22 +- 23 files changed, 659 insertions(+), 341 deletions(-) create mode 100644 components/bootwifi/cpanel.c rename components/bootwifi/{http_utils.h => cpanel.h} (74%) create mode 100644 components/bootwifi/include/server_cpanel.h rename components/bootwifi/{http_utils.c => server.c} (54%) create mode 100644 components/bootwifi/server.h create mode 100644 components/bootwifi/server_cpanel.c create mode 100644 components/bootwifi/test/component.mk create mode 100644 components/bootwifi/test/test_bootwifi.c diff --git a/CHANGELOG.md b/CHANGELOG.md index d31f005..ac29857 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 0.6.0 + +- fix wifi issues ([#32](https://github.com/openairproject/sensor-esp32/issues/32)), ([#19](https://github.com/openairproject/sensor-esp32/issues/19)) +- wifi / control panel refactored and unit-tested + + # 0.5.1 - configurable OTA interval ([#28](https://github.com/openairproject/sensor-esp32/issues/28)) diff --git a/bin/run_tests.py b/bin/run_tests.py index 9ccd6cf..e1392c7 100755 --- a/bin/run_tests.py +++ b/bin/run_tests.py @@ -32,7 +32,7 @@ def readall(exp, timeout = 5): return lastline def wait_for_test_result(): - return readall('Enter next test, or \'enter\' to see menu',10) + return readall('Enter next test, or \'enter\' to see menu',30) ser.write('\n'); readall('Here\'s the test menu, pick your combo:') diff --git a/bin/test_components.sh b/bin/test_components.sh index b8d1051..b7982d3 100644 --- a/bin/test_components.sh +++ b/bin/test_components.sh @@ -1 +1 @@ -TEST_COMPONENTS='oap_common ota awsiot net bmx280 pmsx003 pm_meter' \ No newline at end of file +TEST_COMPONENTS='oap_common bmx280 pmsx003 pm_meter awsiot net ota bootwifi' \ No newline at end of file diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 1169476..00d81d2 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -28,14 +28,12 @@ #include #include #include "bootwifi.h" -#include "mongoose.h" -#include "bootwifi.h" #include "sdkconfig.h" #include "apps/sntp/sntp.h" -#include "http_utils.h" #include "oap_common.h" -#include "oap_storage.h" #include "freertos/event_groups.h" +#include "server.h" +#include "cpanel.h" /** * based on https://github.com/nkolban/esp32-snippets/tree/master/networking/bootwifi @@ -47,27 +45,35 @@ * where it listens at http://192.168.1.1:80 and exposes simple html/rest API to modify settings. */ -extern const uint8_t index_html_start[] asm("_binary_index_html_start"); -extern const uint8_t index_html_end[] asm("_binary_index_html_end"); #define OAP_ACCESS_POINT_IP "192.168.1.1" #define OAP_ACCESS_POINT_NETMASK "255.255.255.0" - -static uint8_t _enable_control_panel; - typedef uint8_t u8_t; typedef uint16_t u16_t; -static int g_mongooseStarted = 0; // Has the mongoose server started? -static int g_mongooseStopRequest = 0; // Request to stop the mongoose server. + +oc_wifi_t oap_wifi_config = { +}; + +wifi_config_t ap_config = { + .ap = { + .ssid="", //constructed later + .ssid_len=0, + .password=CONFIG_OAP_AP_PASSWORD, //>= 8 chars + .channel=0, + .authmode=WIFI_AUTH_WPA_WPA2_PSK, + .ssid_hidden=0, + .max_connection=4, + .beacon_interval=100 + } +}; // Forward declarations static int _sntp_initialised = 0; -static int is_station = 0; static void become_access_point(); -static void restore_wifi_setup(oc_wifi_t* oc_wifi); +static void restore_wifi_setup(); static char tag[] = "wifi"; @@ -77,7 +83,11 @@ static EventGroupHandle_t wifi_event_group = NULL; /* The event group allows multiple bits for each event, but we only care about one event - are we connected to the AP with an IP? */ -const int CONNECTED_BIT = 0x00000001; //BIT0 +const int CONNECTED_BIT = 0x00000001; //BIT0 +const int DISCONNECTED_BIT = 0x00000010; //BIT1 +const int STA_MODE_BIT = 0x00000100; //BIT2 +const int AP_MODE_BIT = 0x00001000; //BIT3 + static void initialize_sntp(void) { @@ -89,132 +99,7 @@ static void initialize_sntp(void) sntp_init(); } -static void handler_index(struct mg_connection *nc) { - size_t resp_size = index_html_end-index_html_start; - mg_send_head(nc, 200, resp_size, "Content-Type: text/html"); - mg_send(nc, index_html_start, resp_size); - ESP_LOGD(tag, "served %d bytes", resp_size); -} - -static void handler_get_config(struct mg_connection *nc, struct http_message *message) { - ESP_LOGD(tag, "handler_get_config"); - cJSON* config = storage_get_config_to_update(); - char* json = cJSON_Print(config); - char* headers = malloc(200); - sprintf(headers, "Content-Type: application/json\r\nX-Version: %s", oap_version_str()); - mg_send_head(nc, 200, strlen(json), headers); - mg_send(nc, json, strlen(json)); - free(headers); - free(json); -} - -static void handler_reboot(struct mg_connection *nc) { - mg_send_head(nc, 200, 0, "Content-Type: text/plain"); - ESP_LOGW(tag, "received reboot request!"); - oap_reboot(); -} - -static void handler_set_config(struct mg_connection *nc, struct http_message *message) { - ESP_LOGD(tag, "handler_set_config"); - char *body = mgStrToStr(message->body); - cJSON* config = cJSON_Parse(body); - free(body); - if (config) { - storage_update_config(config); - handler_get_config(nc, message); - } else { - mg_http_send_error(nc, 500, "invalid config"); - } - cJSON_Delete(config); -} - -/** - * Handle mongoose events. These are mostly requests to process incoming - * browser requests. The ones we handle are: - * GET / - Send the enter details page. - * GET /set - Set the connection info (REST request). - * POST /ssidSelected - Set the connection info (HTML FORM). - */ -static void mongoose_event_handler(struct mg_connection *nc, int ev, void *evData) { - ESP_LOGV(tag, "- Event: %s", mongoose_eventToString(ev)); - uint8_t handled = 0; - switch (ev) { - case MG_EV_HTTP_REQUEST: { - struct http_message *message = (struct http_message *) evData; - - //mg_str is not terminated with '\0' - char *uri = mgStrToStr(message->uri); - char *method = mgStrToStr(message->method); - - ESP_LOGD(tag, "%s %s", method, uri); - - if (strcmp(uri, "/") == 0) { - handler_index(nc); - handled = 1; - } - if (strcmp(uri, "/reboot") == 0) { - handler_reboot(nc); - handled = 1; - } - if(strcmp(uri, "/config") == 0) { - if (strcmp(method, "GET") == 0) { - handler_get_config(nc, message); - handled = 1; - } else if (strcmp(method, "POST") == 0) { - handler_set_config(nc, message); - handled = 1; - } - } - - if (!handled) { - mg_send_head(nc, 404, 0, "Content-Type: text/plain"); - } - nc->flags |= MG_F_SEND_AND_CLOSE; - free(uri); - free(method); - break; - } - } -} - - -// FreeRTOS task to start Mongoose. -static void mongooseTask(void *data) { - struct mg_mgr mgr; - struct mg_connection *connection; - - ESP_LOGD(tag, ">> mongooseTask"); - g_mongooseStopRequest = 0; // Unset the stop request since we are being asked to start. - - mg_mgr_init(&mgr, NULL); - - connection = mg_bind(&mgr, ":80", mongoose_event_handler); - - if (connection == NULL) { - ESP_LOGE(tag, "No connection from the mg_bind()."); - mg_mgr_free(&mgr); - ESP_LOGD(tag, "<< mongooseTask"); - vTaskDelete(NULL); - return; - } - mg_set_protocol_http_websocket(connection); - - // Keep processing until we are flagged that there is a stop request. - while (!g_mongooseStopRequest) { - mg_mgr_poll(&mgr, 1000); - } - - // We have received a stop request, so stop being a web server. - mg_mgr_free(&mgr); - g_mongooseStarted = 0; - - ESP_LOGD(tag, "<< mongooseTask"); - vTaskDelete(NULL); - return; -} // mongooseTask - -int set_access_point_ip() -{ +static esp_err_t set_access_point_ip() { tcpip_adapter_ip_info_t info = {}; inet_pton(AF_INET, OAP_ACCESS_POINT_IP, &info.ip); inet_pton(AF_INET, OAP_ACCESS_POINT_NETMASK, &info.netmask); @@ -227,71 +112,74 @@ int set_access_point_ip() tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); return err; } +// +//static void start_mongoose() { +// if (_enable_control_panel) { +// server_start(cpanel_event_handler); +// } else { +// ESP_LOGW(tag, "control panel disabled by config flag"); +// } +//} + +static void log_wifi_event(void *ctx, system_event_t *event) { + switch(event->event_id) { + case SYSTEM_EVENT_WIFI_READY: ESP_LOGI(tag, "SYSTEM_EVENT_WIFI_READY"); break; + case SYSTEM_EVENT_SCAN_DONE: ESP_LOGI(tag, "SYSTEM_EVENT_SCAN_DONE"); break; + case SYSTEM_EVENT_STA_START: ESP_LOGI(tag, "SYSTEM_EVENT_STA_START"); break; + case SYSTEM_EVENT_STA_STOP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_STOP"); break; + case SYSTEM_EVENT_STA_CONNECTED: ESP_LOGI(tag, "SYSTEM_EVENT_STA_CONNECTED"); break; + case SYSTEM_EVENT_STA_DISCONNECTED: ESP_LOGI(tag, "SYSTEM_EVENT_STA_DISCONNECTED"); break; + case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: ESP_LOGI(tag, "SYSTEM_EVENT_STA_AUTHMODE_CHANGE"); break; + case SYSTEM_EVENT_STA_GOT_IP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_GOT_IP"); break; + case SYSTEM_EVENT_STA_LOST_IP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_LOST_IP"); break; + case SYSTEM_EVENT_AP_START: ESP_LOGI(tag, "SYSTEM_EVENT_AP_START"); break; + case SYSTEM_EVENT_AP_STOP: ESP_LOGI(tag, "SYSTEM_EVENT_AP_STOP"); break; + case SYSTEM_EVENT_AP_STACONNECTED: ESP_LOGI(tag, "SYSTEM_EVENT_AP_STACONNECTED"); break; + case SYSTEM_EVENT_AP_STADISCONNECTED: ESP_LOGI(tag, "SYSTEM_EVENT_AP_STADISCONNECTED"); break; + default : ESP_LOGI(tag, "SYSTEM_EVENT_?=%d", event->event_id); + } +} -static void start_mongoose() { - if (_enable_control_panel) { - if (!g_mongooseStarted) { - g_mongooseStarted = 1; - //xTaskCreatePinnedToCore(&mongooseTask, "mongoose_task", 10000, NULL, DEFAULT_TASK_PRIORITY+1, NULL, 0); - xTaskCreate(&mongooseTask, "mongoose_task", 10000, NULL, DEFAULT_TASK_PRIORITY+1, NULL); - } - } else { - ESP_LOGW(tag, "control panel disabled by config flag"); +static void wifi_state_change(bool connected, bool ap_mode) { + xEventGroupClearBits(wifi_event_group, (connected ? DISCONNECTED_BIT : CONNECTED_BIT) | (ap_mode ? STA_MODE_BIT : AP_MODE_BIT)); + xEventGroupSetBits(wifi_event_group, (connected ? CONNECTED_BIT : DISCONNECTED_BIT) | (ap_mode ? AP_MODE_BIT : STA_MODE_BIT)); + if (oap_wifi_config.callback) { + oap_wifi_config.callback(connected, ap_mode); } + ESP_LOGD(tag, "wifi state changed: %s %s", ap_mode ? "AP" : "STA", connected ? "CONNECTED" : "DISCONNECTED"); } -/** - * An ESP32 WiFi event handler. - * The types of events that can be received here are: - * - * SYSTEM_EVENT_AP_PROBEREQRECVED - * SYSTEM_EVENT_AP_STACONNECTED - * SYSTEM_EVENT_AP_STADISCONNECTED - * SYSTEM_EVENT_AP_START - * SYSTEM_EVENT_AP_STOP - * SYSTEM_EVENT_SCAN_DONE - * SYSTEM_EVENT_STA_AUTHMODE_CHANGE - * SYSTEM_EVENT_STA_CONNECTED - * SYSTEM_EVENT_STA_DISCONNECTED - * SYSTEM_EVENT_STA_GOT_IP - * SYSTEM_EVENT_STA_START - * SYSTEM_EVENT_STA_STOP - * SYSTEM_EVENT_WIFI_READY - */ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { - if (is_reboot_in_progress()) return ESP_OK; //ignore - trying to reconnect now will crash + log_wifi_event(ctx, event); + if (is_reboot_in_progress()) { + ESP_LOGW(tag, "ignore wifi event - reboot in progress"); + return ESP_OK; //ignore - trying to reconnect now will crash + } - // Your event handling code here... switch(event->event_id) { - // When we have started being an access point, then start being a web server. - case SYSTEM_EVENT_AP_START: { // Handle the AP start event - xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); + case SYSTEM_EVENT_AP_START: { + /* + * 192.168.4.1 this is the default IP of all esp devices + * http://www.esp8266.com/viewtopic.php?f=29&t=12124 + * we want to make it 192.168.1.1; + * this is probably the best place to put it, however, when we switch from STA->AP + * mode, this DHCP manipulation causes restarting AP again (which should be ok) + */ esp_err_t err; if ((err=set_access_point_ip()) != ESP_OK) { ESP_LOGW(tag, "failed to set ip address [err %x], use default", err); } - tcpip_adapter_ip_info_t ip_info; - tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip_info); - - //192.168.4.1 this is the default IP of all esp devices - //http://www.esp8266.com/viewtopic.php?f=29&t=12124 - - ESP_LOGI(tag, "**********************************************"); - ESP_LOGI(tag, "* ACCESS POINT MODE") - ESP_LOGI(tag, "* point your browser to http://"IPSTR, IP2STR(&ip_info.ip)); - ESP_LOGI(tag, "**********************************************"); - - start_mongoose(); break; - } // SYSTEM_EVENT_AP_START + } case SYSTEM_EVENT_AP_STOP : { + wifi_state_change(false, true); break; } - // If we fail to connect to an access point as a station, become an access point. + //WARNING - we cannot rely on this event, sometimes it doesn't got triggered case SYSTEM_EVENT_STA_DISCONNECTED: { - ESP_LOGD(tag, "Station disconnected - reconnecting"); + wifi_state_change(false, false); /* * we cannot just switch to APi every time when wifi fails, in most cases we should try to reconnect. * although if the failure happened just after user configured wifi, there's a good chance @@ -299,28 +187,48 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { * * TODO remember successful connection to wifi and do not fallback to AP if we ever managed connect to wifi. */ - xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); - restore_wifi_setup(NULL); + /* + * wifi does not reconnect automatically, we need to do this + */ + if (!oap_wifi_config.ap_mode) { + ESP_LOGI(tag, "reconnect"); + restore_wifi_setup(); + } break; } case SYSTEM_EVENT_STA_GOT_IP: { - //at least in sdk2.1, this event is triggered even in AP mode! - if (is_station) { - ESP_LOGD(tag, "********************************************"); - ESP_LOGD(tag, "* Connected with WIFI network") - ESP_LOGD(tag, "* Sensor IP address: " IPSTR, IP2STR(&event->event_info.got_ip.ip_info.ip)); - ESP_LOGD(tag, "********************************************"); - - xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); - initialize_sntp(); - /* - * TODO if we attempt to make an SSL request (by OTA, didn't check others) when wifi is in AP mode, - * mongoose goes into infinite loop; - * socket.accept fails immediately. this may be network stack bug. - */ - start_mongoose(); + wifi_mode_t mode; + esp_err_t ret; + if ((ret = esp_wifi_get_mode(&mode)) != ESP_OK) { + ESP_LOGE(tag, "esp_wifi_get_mode failed 0x%x", ret); + return ret; } + + switch (mode) { + case WIFI_MODE_STA: + ESP_LOGW(tag, "****** SENSOR IP (STA %s) http://"IPSTR, oap_wifi_config.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); + + initialize_sntp(); + /* + * TODO if we attempt to make an SSL request (by OTA, didn't check others) when wifi is in AP mode, + * mongoose goes into infinite loop; + * socket.accept fails immediately. this may be network stack bug. + * + * TODO this should RESTART mongoose! + */ + //start_mongoose(); + wifi_state_change(true, false); + + break; + case WIFI_MODE_AP: + ESP_LOGW(tag, "****** SENSOR IP (AP %s) http://"IPSTR, ap_config.ap.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); + wifi_state_change(true, true); + break; + default: + ESP_LOGW(tag, "unsupported wifi mode: %d", mode); + } + break; } @@ -331,110 +239,86 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { return ESP_OK; } -/** - * Retrieve the connection info. A rc==0 means ok. - */ -static esp_err_t get_config(oc_wifi_t *oc_wifi) { - memset(oc_wifi, 0, sizeof(oc_wifi_t)); - ESP_LOGD(tag, "retrieve wifi config"); - cJSON* wifi = storage_get_config("wifi"); - if (!wifi) return ESP_FAIL; - cJSON* field; - if ((field = cJSON_GetObjectItem(wifi, "ssid"))) strcpy(oc_wifi->ssid, field->valuestring); - if ((field = cJSON_GetObjectItem(wifi, "password"))) strcpy(oc_wifi->password, field->valuestring); - - if ((field = cJSON_GetObjectItem(wifi, "ip"))) { - inet_pton(AF_INET, field->valuestring, &oc_wifi->ipInfo.ip); - } - if ((field = cJSON_GetObjectItem(wifi, "gw"))) { - inet_pton(AF_INET, field->valuestring, &oc_wifi->ipInfo.gw); - } - if ((field = cJSON_GetObjectItem(wifi, "netmask"))) { - inet_pton(AF_INET, field->valuestring, &oc_wifi->ipInfo.netmask); - } +esp_err_t wifi_configure(cJSON* wifi, wifi_state_callback_f wifi_state_callback) { + memset(&oap_wifi_config, 0, sizeof(oc_wifi_t)); + oap_wifi_config.callback = wifi_state_callback; + + if (wifi) { + cJSON* field; + if ((field = cJSON_GetObjectItem(wifi, "ssid"))) strcpy(oap_wifi_config.ssid, field->valuestring); - ESP_LOGD(tag, "wifi.ssid: %s", oc_wifi->ssid); - ESP_LOGD(tag, "wifi.pass.lenght: [%d]", strlen(oc_wifi->password)); + if (strlen(oap_wifi_config.ssid) == 0) { + oap_wifi_config.ap_mode = 1; + return ESP_FAIL; + } + + if ((field = cJSON_GetObjectItem(wifi, "password"))) strcpy(oap_wifi_config.password, field->valuestring); - ESP_LOGD(tag, "wifi.ip:" IPSTR, IP2STR(&oc_wifi->ipInfo.ip)); - ESP_LOGD(tag, "wifi.gateway:" IPSTR, IP2STR(&oc_wifi->ipInfo.gw)); - ESP_LOGD(tag, "wifi.netmask:" IPSTR, IP2STR(&oc_wifi->ipInfo.netmask)); + if ((field = cJSON_GetObjectItem(wifi, "ip"))) { + inet_pton(AF_INET, field->valuestring, &oap_wifi_config.ipInfo.ip); + } + if ((field = cJSON_GetObjectItem(wifi, "gw"))) { + inet_pton(AF_INET, field->valuestring, &oap_wifi_config.ipInfo.gw); + } + if ((field = cJSON_GetObjectItem(wifi, "netmask"))) { + inet_pton(AF_INET, field->valuestring, &oap_wifi_config.ipInfo.netmask); + } + + ESP_LOGD(tag, "wifi.ssid: %s", oap_wifi_config.ssid); + ESP_LOGD(tag, "wifi.pass.lenght: [%d]", strlen(oap_wifi_config.password)); + + ESP_LOGD(tag, "wifi.ip:" IPSTR, IP2STR(&oap_wifi_config.ipInfo.ip)); + ESP_LOGD(tag, "wifi.gateway:" IPSTR, IP2STR(&oap_wifi_config.ipInfo.gw)); + ESP_LOGD(tag, "wifi.netmask:" IPSTR, IP2STR(&oap_wifi_config.ipInfo.netmask)); + } else { + oap_wifi_config.ap_mode = 1; + } return ESP_OK; } -static void become_station(oc_wifi_t *pConnectionInfo) { - is_station = 1; - ESP_LOGD(tag, "- Connecting to access point \"%s\" ...", pConnectionInfo->ssid); - assert(strlen(pConnectionInfo->ssid) > 0); +static void become_station() { + ESP_LOGD(tag, "- Connecting to access point \"%s\" ...", oap_wifi_config.ssid); + assert(strlen(oap_wifi_config.ssid) > 0); // If we have a static IP address information, use that. - if (pConnectionInfo->ipInfo.ip.addr != 0) { - ESP_LOGD(tag, " - using a static IP address of " IPSTR, IP2STR(&pConnectionInfo->ipInfo.ip)); + if (oap_wifi_config.ipInfo.ip.addr != 0) { + ESP_LOGD(tag, " - using a static IP address of " IPSTR, IP2STR(&oap_wifi_config.ipInfo.ip)); tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); - tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &pConnectionInfo->ipInfo); + tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &oap_wifi_config.ipInfo); } else { tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } - ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); wifi_config_t sta_config; sta_config.sta.bssid_set = 0; - memcpy(sta_config.sta.ssid, pConnectionInfo->ssid, SSID_SIZE); - memcpy(sta_config.sta.password, pConnectionInfo->password, PASSWORD_SIZE); + memcpy(sta_config.sta.ssid, oap_wifi_config.ssid, SSID_SIZE); + memcpy(sta_config.sta.password, oap_wifi_config.password, PASSWORD_SIZE); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); ESP_ERROR_CHECK(esp_wifi_start()); ESP_ERROR_CHECK(esp_wifi_connect());//FIXERR 0x3006 : ESP_ERR_WIFI_CONN (happens after reboot via control panel) } static void become_access_point() { - is_station = 0; ESP_LOGD(tag, "- Starting being an access point ..."); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); - wifi_config_t apConfig = { - .ap = { - .ssid="", - .ssid_len=0, - .password=CONFIG_OAP_AP_PASSWORD, //>= 8 chars - .channel=0, - .authmode=WIFI_AUTH_WPA_WPA2_PSK, - .ssid_hidden=0, - .max_connection=4, - .beacon_interval=100 - } - }; - //generate unique SSID uint8_t mac[6]; esp_efuse_mac_get_default(mac); //ESP_LOGD(tag, "MAC= %02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); //using full MAC would be the best but I'm not sure if it is safe (if someone has wifi with MAC filtering) - sprintf((char*)apConfig.ap.ssid, "OpenAirProject-%02X%02X%02X%02X", mac[0], mac[1], mac[4], mac[5]); + sprintf((char*)ap_config.ap.ssid, "OpenAirProject-%02X%02X%02X%02X", mac[0], mac[1], mac[4], mac[5]); - ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &apConfig)); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &ap_config)); ESP_ERROR_CHECK(esp_wifi_start()); } -static int is_button_pressed() { - return gpio_get_level(CONFIG_OAP_BTN_0_PIN); -} - -static void restore_wifi_setup(oc_wifi_t* oc_wifi_config) { - if (is_button_pressed()) { - ESP_LOGI(tag, "forced AP mode"); +static void restore_wifi_setup() { + if (oap_wifi_config.ap_mode) { become_access_point(); } else { - oc_wifi_t oc_wifi; - if (oc_wifi_config == NULL) { - oc_wifi_config = &oc_wifi; - get_config(oc_wifi_config); - } - if (strlen(oc_wifi_config->ssid) == 0) { - ESP_LOGW(tag, "No WIFI SSID configured"); - become_access_point(); - } else { - become_station(oc_wifi_config); - } + become_station(); } } @@ -446,29 +330,31 @@ static void init_wifi() { ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); } -void wifi_boot(oc_wifi_t* wifi_config, uint8_t enable_control_panel) { - if (wifi_event_group) { - ESP_LOGD(tag, "wifi already booted"); - return; - } +void wifi_boot() { ESP_LOGD(tag, "wifi_boot start"); - wifi_event_group = xEventGroupCreate(); - _enable_control_panel = enable_control_panel; - gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); - gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); - gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); + if (!wifi_event_group) { + wifi_event_group = xEventGroupCreate(); + init_wifi(); + } - init_wifi(); - restore_wifi_setup(wifi_config); + restore_wifi_setup(); +} - ESP_LOGD(tag, "wifi_boot done"); +esp_err_t wifi_disconnected_wait_for(uint32_t ms) { + return + xEventGroupWaitBits(wifi_event_group, DISCONNECTED_BIT, + false, true, ms ? ms / portTICK_PERIOD_MS : portMAX_DELAY) & DISCONNECTED_BIT ? ESP_OK : ESP_FAIL; } esp_err_t wifi_connected_wait_for(uint32_t ms) { - return xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, ms ? ms / portTICK_PERIOD_MS : portMAX_DELAY) & CONNECTED_BIT ? ESP_OK : ESP_FAIL; + return + xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT | STA_MODE_BIT, + false, true, ms ? ms / portTICK_PERIOD_MS : portMAX_DELAY) == (CONNECTED_BIT | STA_MODE_BIT) ? ESP_OK : ESP_FAIL; } -esp_err_t wifi_connected_wait() { - return wifi_connected_wait_for(0); +esp_err_t wifi_ap_started_wait_for(uint32_t ms) { + return + xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT | AP_MODE_BIT, + false, true, ms ? ms / portTICK_PERIOD_MS : portMAX_DELAY) == (CONNECTED_BIT | AP_MODE_BIT) ? ESP_OK : ESP_FAIL; } diff --git a/components/bootwifi/cpanel.c b/components/bootwifi/cpanel.c new file mode 100644 index 0000000..421db6f --- /dev/null +++ b/components/bootwifi/cpanel.c @@ -0,0 +1,126 @@ +/* + * cpanel.c + * + * Created on: Oct 5, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "oap_common.h" +#include "mongoose.h" +#include "cJSON.h" +#include "oap_storage.h" + +#define tag "cpanel" + +extern const uint8_t index_html_start[] asm("_binary_index_html_start"); +extern const uint8_t index_html_end[] asm("_binary_index_html_end"); + +static char *mgStrToStr(struct mg_str mgStr) { + char *retStr = (char *) malloc(mgStr.len + 1); + memcpy(retStr, mgStr.p, mgStr.len); + retStr[mgStr.len] = 0; + return retStr; +} // mgStrToStr + +static void handler_index(struct mg_connection *nc) { + size_t resp_size = index_html_end-index_html_start; + mg_send_head(nc, 200, resp_size, "Content-Type: text/html"); + mg_send(nc, index_html_start, resp_size); + ESP_LOGD(tag, "served %d bytes", resp_size); +} + +static void handler_get_config(struct mg_connection *nc, struct http_message *message) { + ESP_LOGD(tag, "handler_get_config"); + cJSON* config = storage_get_config_to_update(); + char* json = cJSON_Print(config); + char* headers = malloc(200); + sprintf(headers, "Content-Type: application/json\r\nX-Version: %s", oap_version_str()); + mg_send_head(nc, 200, strlen(json), headers); + mg_send(nc, json, strlen(json)); + free(headers); + free(json); +} + +static void handler_reboot(struct mg_connection *nc) { + mg_send_head(nc, 200, 0, "Content-Type: text/plain"); + ESP_LOGW(tag, "received reboot request!"); + oap_reboot(); +} + +static void handler_set_config(struct mg_connection *nc, struct http_message *message) { + ESP_LOGD(tag, "handler_set_config"); + char *body = mgStrToStr(message->body); + cJSON* config = cJSON_Parse(body); + free(body); + if (config) { + storage_update_config(config); + handler_get_config(nc, message); + } else { + mg_http_send_error(nc, 500, "invalid config"); + } + cJSON_Delete(config); +} + +/** + * Handle mongoose events. These are mostly requests to process incoming + * browser requests. The ones we handle are: + * GET / - Send the enter details page. + * GET /set - Set the connection info (REST request). + * POST /ssidSelected - Set the connection info (HTML FORM). + */ +void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { + ESP_LOGV(tag, "- Event: %d", ev); + uint8_t handled = 0; + switch (ev) { + case MG_EV_HTTP_REQUEST: { + struct http_message *message = (struct http_message *) evData; + + //mg_str is not terminated with '\0' + char *uri = mgStrToStr(message->uri); + char *method = mgStrToStr(message->method); + + ESP_LOGD(tag, "%s %s", method, uri); + + if (strcmp(uri, "/") == 0) { + handler_index(nc); + handled = 1; + } + if (strcmp(uri, "/reboot") == 0) { + handler_reboot(nc); + handled = 1; + } + if(strcmp(uri, "/config") == 0) { + if (strcmp(method, "GET") == 0) { + handler_get_config(nc, message); + handled = 1; + } else if (strcmp(method, "POST") == 0) { + handler_set_config(nc, message); + handled = 1; + } + } + + if (!handled) { + mg_send_head(nc, 404, 0, "Content-Type: text/plain"); + } + nc->flags |= MG_F_SEND_AND_CLOSE; + free(uri); + free(method); + break; + } + } +} diff --git a/components/bootwifi/http_utils.h b/components/bootwifi/cpanel.h similarity index 74% rename from components/bootwifi/http_utils.h rename to components/bootwifi/cpanel.h index 69d0bca..c7fd293 100644 --- a/components/bootwifi/http_utils.h +++ b/components/bootwifi/cpanel.h @@ -1,7 +1,7 @@ /* - * http_utils.h + * cpanel.h * - * Created on: Feb 11, 2017 + * Created on: Oct 5, 2017 * Author: kris * * This file is part of OpenAirProject-ESP32. @@ -20,12 +20,13 @@ * along with OpenAirProject-ESP32. If not, see . */ -#ifndef COMPONENTS_BOOTWIFI_HTTP_UTILS_H_ -#define COMPONENTS_BOOTWIFI_HTTP_UTILS_H_ +#ifndef COMPONENTS_BOOTWIFI_CPANEL_H_ +#define COMPONENTS_BOOTWIFI_CPANEL_H_ -char *mongoose_eventToString(int ev); -char *mgStrToStr(struct mg_str mgStr); +#include "mongoose.h" +void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData); -#endif /* COMPONENTS_BOOTWIFI_HTTP_UTILS_H_ */ + +#endif /* COMPONENTS_BOOTWIFI_CPANEL_H_ */ diff --git a/components/bootwifi/include/bootwifi.h b/components/bootwifi/include/bootwifi.h index ec264a6..af84837 100644 --- a/components/bootwifi/include/bootwifi.h +++ b/components/bootwifi/include/bootwifi.h @@ -24,19 +24,30 @@ #define MAIN_BOOTWIFI_H_ #include +#include "cJSON.h" #define SSID_SIZE (32) // Maximum SSID size #define PASSWORD_SIZE (64) // Maximum password size +typedef void(*wifi_state_callback_f)(bool connected, bool ap_mode); typedef struct { char ssid[SSID_SIZE]; char password[PASSWORD_SIZE]; tcpip_adapter_ip_info_t ipInfo; // Optional static IP information + int ap_mode; + int control_panel; + wifi_state_callback_f callback; } oc_wifi_t; -void wifi_boot(oc_wifi_t* wifi_config, uint8_t enable_control_panel); -esp_err_t wifi_connected_wait(); + + +esp_err_t wifi_configure(cJSON* wifi, wifi_state_callback_f wifi_state_callback); +void wifi_boot(); esp_err_t wifi_connected_wait_for(uint32_t ms); +esp_err_t wifi_ap_started_wait_for(uint32_t ms); +esp_err_t wifi_disconnected_wait_for(uint32_t ms); + + #endif /* MAIN_BOOTWIFI_H_ */ diff --git a/components/bootwifi/include/server_cpanel.h b/components/bootwifi/include/server_cpanel.h new file mode 100644 index 0000000..b9a613a --- /dev/null +++ b/components/bootwifi/include/server_cpanel.h @@ -0,0 +1,31 @@ +/* + * server_cpanel.h + * + * Created on: Oct 5, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_BOOTWIFI_INCLUDE_SERVER_CPANEL_H_ +#define COMPONENTS_BOOTWIFI_INCLUDE_SERVER_CPANEL_H_ + +#include + +void cpanel_wifi_handler(bool connected, bool ap_mode); + + +#endif /* COMPONENTS_BOOTWIFI_INCLUDE_SERVER_CPANEL_H_ */ diff --git a/components/bootwifi/mongoose.c b/components/bootwifi/mongoose.c index bb8ba4d..2f63930 100644 --- a/components/bootwifi/mongoose.c +++ b/components/bootwifi/mongoose.c @@ -1,4 +1,7 @@ #include "mongoose.h" + +int mg_invalid_socket=0; //kris + #ifdef MG_MODULE_LINES #line 1 "mongoose/src/internal.h" #endif @@ -3193,6 +3196,7 @@ static int mg_accept_conn(struct mg_connection *lc) { sock_t sock = accept(lc->sock, &sa.sa, &sa_len); if (sock == INVALID_SOCKET) { if (mg_is_error(-1)) DBG(("%p: failed to accept: %d", lc, mg_get_errno())); + mg_invalid_socket = 1; //kris return 0; } nc = mg_if_accept_new_conn(lc); diff --git a/components/bootwifi/mongoose.h b/components/bootwifi/mongoose.h index 9b54a41..9c05d29 100644 --- a/components/bootwifi/mongoose.h +++ b/components/bootwifi/mongoose.h @@ -1,3 +1,5 @@ +//#define MG_ENABLE_DEBUG 1 + #ifdef MG_MODULE_LINES #line 1 "mongoose/src/common.h" #endif diff --git a/components/bootwifi/http_utils.c b/components/bootwifi/server.c similarity index 54% rename from components/bootwifi/http_utils.c rename to components/bootwifi/server.c index 244191c..3adf887 100644 --- a/components/bootwifi/http_utils.c +++ b/components/bootwifi/server.c @@ -1,7 +1,7 @@ /* - * http_utils.c + * server.c * - * Created on: Feb 11, 2017 + * Created on: Oct 4, 2017 * Author: kris * * This file is part of OpenAirProject-ESP32. @@ -20,10 +20,28 @@ * along with OpenAirProject-ESP32. If not, see . */ -#include "mongoose.h" -/** - * Convert a Mongoose event type to a string. Used for debugging. - */ +#include "server.h" +#include +#include +#include +#include +#include "esp_err.h" +#include "oap_common.h" + +#define tag "serv" + +typedef enum { + NOT_RUN = 0, + IDLE, + RUNNING, + RESTARTING +} server_mode_t; + +extern int mg_invalid_socket; + +static server_mode_t mode = NOT_RUN; + +/* char *mongoose_eventToString(int ev) { static char temp[100]; switch (ev) { @@ -78,14 +96,72 @@ char *mongoose_eventToString(int ev) { } sprintf(temp, "Unknown event: %d", ev); return temp; -} //eventToString +}*/ + +static esp_err_t main_loop(void *mongoose_event_handler) { + struct mg_mgr mgr; + struct mg_connection *connection; -// Convert a Mongoose string type to a string. -char *mgStrToStr(struct mg_str mgStr) { - char *retStr = (char *) malloc(mgStr.len + 1); - memcpy(retStr, mgStr.p, mgStr.len); - retStr[mgStr.len] = 0; - return retStr; -} // mgStrToStr + ESP_LOGD(tag, ">> main_loop"); + mg_mgr_init(&mgr, NULL); + connection = mg_bind(&mgr, ":80", mongoose_event_handler); + + if (connection == NULL) { + //when this happens usually it won't recover until it gets a new IP + //maybe we should reboot? + ESP_LOGE(tag, "No connection from the mg_bind()."); + mg_mgr_free(&mgr); + return ESP_FAIL; + } + //use http + mg_set_protocol_http_websocket(connection); + + mg_invalid_socket=0; //hack for corrupted mongoose sockets (AP mode + http request triggers it) + while (mode == RUNNING && !mg_invalid_socket) { + mg_mgr_poll(&mgr, 1000); + } + + mg_mgr_free(&mgr); + ESP_LOGD(tag, "<< main_loop"); + return ESP_OK; +} + +static void server_task(void *mongoose_event_handler) { + ESP_LOGD(tag, "start"); + while (1) { + switch (mode) { + case RUNNING: + if (main_loop(mongoose_event_handler) != ESP_OK) { + vTaskDelay(1000 / portTICK_PERIOD_MS); + } + break; + case IDLE: + vTaskDelay(1000 / portTICK_PERIOD_MS); + break; + default: //{RESTARTING,NOT_RUN} => RUNNING + mode = RUNNING; + } + } + vTaskDelete(NULL); +} + +void server_restart() { + ESP_LOGD(tag, "restart"); + mode = RESTARTING; +} + +void server_stop() { + ESP_LOGD(tag, "idle"); + mode = IDLE; +} + +void server_start(void *event_handler) { + if (mode == NOT_RUN) { + mode = RUNNING; + xTaskCreatePinnedToCore(&server_task, "mongoose_task", 10000, event_handler, DEFAULT_TASK_PRIORITY+1, NULL, 0); + } else { + server_restart(); + } +} diff --git a/components/bootwifi/server.h b/components/bootwifi/server.h new file mode 100644 index 0000000..3e3a053 --- /dev/null +++ b/components/bootwifi/server.h @@ -0,0 +1,34 @@ +/* + * server.h + * + * Created on: Oct 4, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_BOOTWIFI_SERVER_H_ +#define COMPONENTS_BOOTWIFI_SERVER_H_ + +#include "mongoose.h" + +void server_restart(); +void server_stop(); +void server_start(void *event_handler); + + + +#endif /* COMPONENTS_BOOTWIFI_SERVER_H_ */ diff --git a/components/bootwifi/server_cpanel.c b/components/bootwifi/server_cpanel.c new file mode 100644 index 0000000..a7b9832 --- /dev/null +++ b/components/bootwifi/server_cpanel.c @@ -0,0 +1,35 @@ +/* + * server_cpanel.c + * + * Created on: Oct 5, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "server_cpanel.h" +#include "server.h" +#include "cpanel.h" + +void cpanel_wifi_handler(bool connected, bool ap_mode) { + if (connected) { + server_start(cpanel_event_handler); + } else { + server_restart(); + } +} + + diff --git a/components/bootwifi/test/component.mk b/components/bootwifi/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/bootwifi/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/bootwifi/test/test_bootwifi.c b/components/bootwifi/test/test_bootwifi.c new file mode 100644 index 0000000..15b1c96 --- /dev/null +++ b/components/bootwifi/test/test_bootwifi.c @@ -0,0 +1,61 @@ +/* + * oap_test.c + * + * Created on: Sep 11, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "oap_test.h" +#include "bootwifi.h" +#include "oap_storage.h" +#include "esp_wifi.h" +#include "server_cpanel.h" +#include "esp_request.h" + + +TEST_CASE("test wifi STA","[wifi]") { + test_require_wifi(); +} + +/* + * this test is problematic because esp32 encounters issues after switching back from AP to STA. + * sometimes after this transition, a few ssl requests fail and then it recovers (cache?) + * run it as a second to last one, and as last - do 'reconnect wifi' + */ +TEST_CASE("test wifi AP","[wifi]") { + //TEST_IGNORE(); + test_require_ap(); +} + +//TEST_CASE("test cpanel in AP","[wifi]") { +// test_require_ap_with(cpanel_wifi_handler); +// +// test_delay(1000); +// request_t* r = req_new("http://www.google.com"); //this breaks mongoose socket +// req_perform(r); +// req_clean(r); +// +// test_delay(10000); +//} + +TEST_CASE("reconnect wifi","[wifi]") { + test_require_wifi(); + esp_wifi_stop(); + TEST_ESP_OK(wifi_disconnected_wait_for(5000)); + TEST_ESP_OK(wifi_connected_wait_for(10000)); +} diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index d563e15..fc8ef14 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -261,11 +261,14 @@ static int mbedtls_connect(request_t *req) ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); while ((ret = mbedtls_ssl_handshake(&ssl->ssl_ctx)) != ESP_OK) { + //careful here! + // ret = -76 when network is out, and then it does not recover */ //sometimes it returns -78 and hangs :( - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { ESP_LOGW(TAG, "mbedtls_ssl_handshake returned 0x%x", -ret); break; } + ESP_LOGD(TAG, "handshake failed (0x%x), try again", -ret); vTaskDelay(10 / portTICK_PERIOD_MS); vPortYield(); } diff --git a/components/oap_common/include/oap_common.h b/components/oap_common/include/oap_common.h index 318bfad..f28795b 100644 --- a/components/oap_common/include/oap_common.h +++ b/components/oap_common/include/oap_common.h @@ -28,6 +28,7 @@ #include #include #include +#include #include "c_list.h" #include "esp_err.h" #include "esp_log.h" @@ -36,6 +37,8 @@ //to silence eclipse errors typedef unsigned short uint16_t; + + #define DEFAULT_TASK_PRIORITY (10) int is_reboot_in_progress(); diff --git a/components/oap_common/include/oap_version.h b/components/oap_common/include/oap_version.h index b07c8e0..a8fe61d 100644 --- a/components/oap_common/include/oap_version.h +++ b/components/oap_common/include/oap_version.h @@ -37,8 +37,8 @@ #include "esp_err.h" #define OAP_VER_MAJOR 0 -#define OAP_VER_MINOR 5 -#define OAP_VER_PATCH 1 +#define OAP_VER_MINOR 6 +#define OAP_VER_PATCH 0 typedef struct { uint8_t major; diff --git a/components/oap_common/test/include/oap_test.h b/components/oap_common/test/include/oap_test.h index ba3bfce..8d58ab1 100644 --- a/components/oap_common/test/include/oap_test.h +++ b/components/oap_common/test/include/oap_test.h @@ -26,6 +26,7 @@ #include "unity.h" #include "esp_log.h" #include "freertos/FreeRTOS.h" +#include "bootwifi.h" /** * init wifi, do not wait for IP @@ -37,6 +38,12 @@ void test_init_wifi(); */ void test_require_wifi(); +void test_require_wifi_with(wifi_state_callback_f callback); + +void test_require_ap(); + +void test_require_ap_with(wifi_state_callback_f callback); + typedef struct { uint32_t started; uint32_t wait_for; diff --git a/components/oap_common/test/oap_test.c b/components/oap_common/test/oap_test.c index 61526c9..f038a1a 100644 --- a/components/oap_common/test/oap_test.c +++ b/components/oap_common/test/oap_test.c @@ -29,24 +29,38 @@ #include "esp_attr.h" #include "esp_log.h" #include "esp_system.h" +#include static const char* TAG = "test"; -static oc_wifi_t wifi_config = { - .ssid = OAP_TEST_WIFI_SSID, - .password = OAP_TEST_WIFI_PASSWORD -}; -void test_init_wifi() { - wifi_boot(&wifi_config,0); -} +extern oc_wifi_t oap_wifi_config; void test_require_wifi() { - test_init_wifi(); + test_require_wifi_with(NULL); +} + +void test_require_wifi_with(wifi_state_callback_f wifi_state_callback) { + memset(&oap_wifi_config, 0, sizeof(oap_wifi_config)); + strcpy(oap_wifi_config.ssid, OAP_TEST_WIFI_SSID); + strcpy(oap_wifi_config.password,OAP_TEST_WIFI_PASSWORD); + oap_wifi_config.callback = wifi_state_callback; + wifi_boot(); TEST_ESP_OK(wifi_connected_wait_for(10000)); + ESP_LOGI(TAG, "connected sta"); +} - ESP_LOGI(TAG, "connected"); +void test_require_ap() { + test_require_ap_with(NULL); } +void test_require_ap_with(wifi_state_callback_f wifi_state_callback) { + memset(&oap_wifi_config, 0, sizeof(oap_wifi_config)); + oap_wifi_config.ap_mode=1; + oap_wifi_config.callback = wifi_state_callback; + wifi_boot(); + TEST_ESP_OK(wifi_ap_started_wait_for(10000)); + ESP_LOGI(TAG, "connected ap"); +} static uint32_t IRAM_ATTR time_now() { @@ -62,5 +76,3 @@ void test_delay(uint32_t ms) { vTaskDelay(ms / portTICK_PERIOD_MS); } - - diff --git a/components/ota/ota.c b/components/ota/ota.c index d66acd8..2da6b8e 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -282,9 +282,12 @@ esp_err_t check_ota(ota_config_t* ota_config) { }; while (1) { - if ((err = wifi_connected_wait_for(30000)) != ESP_OK) { - goto go_sleep; - } + + // this masks problems with mbedtls and mongoose, + // but without it mongoose in AP mode hangs. +// if ((err = wifi_connected_wait_for(30000)) != ESP_OK) { +// goto go_sleep; +// } ESP_LOGD(TAG, "Check for OTA updates..."); log_task_stack(TAG); diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index a5a704b..2245560 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -136,7 +136,7 @@ TEST_CASE("download_ota_binary", "[ota]") TEST_CASE("full ota", "[ota]") { - test_init_wifi(); + test_require_wifi(); ota_config_t ota_config; memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); ota_config.min_version=oap_version_num(hello_world_info.ver) - 1; //one patch earlier @@ -150,7 +150,7 @@ TEST_CASE("full ota", "[ota]") TEST_CASE("skip ota if up-to-date", "[ota]") { - test_init_wifi(); + test_require_wifi(); ota_config_t ota_config; memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); ota_config.min_version=oap_version_num(hello_world_info.ver); //the same version @@ -161,7 +161,7 @@ TEST_CASE("skip ota if up-to-date", "[ota]") TEST_CASE("fail ota for sha mismatch", "[ota]") { - test_init_wifi(); + test_require_wifi(); ota_config_t ota_config; memcpy(&ota_config, &ota_test_config, sizeof(ota_config_t)); ota_config.index_uri = "https://openairproject.com/ota/test/index-sha-mismatch.txt", @@ -173,7 +173,7 @@ TEST_CASE("fail ota for sha mismatch", "[ota]") TEST_CASE("fail ota for invalid cert", "[ota]") { - test_init_wifi(); + test_require_wifi(); //git uses digicert CA, cloud front - comodo CA ota_config_t ota_config = { .index_uri = "https://raw.githubusercontent.com/openairproject/sensor-esp32/master/components/ota/test/files/index.txt", diff --git a/main/main.c b/main/main.c index e150b1f..3a77c1a 100644 --- a/main/main.c +++ b/main/main.c @@ -48,6 +48,7 @@ #include "awsiot.h" #include "ota.h" #include "oap_data.h" +#include "server_cpanel.h" static const char *TAG = "app"; @@ -181,7 +182,6 @@ static int pmsx003_configure(pm_data_callback_f callback) { } static esp_err_t pm_meter_init() { - pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_t* pm_meter; void* params = NULL; @@ -298,7 +298,7 @@ static void publish_loop() { log_heap_size("publish_loop"); - if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 1000)) { + if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 10000)) { log_task_stack(TAG); float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); //ESP_LOGI(TAG, "AQI=%f",aqi); @@ -343,8 +343,17 @@ void publishers_init() { } } -void app_main() -{ +static void configure_ap_mode_btn() { + gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); + gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); + gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); +} + +static int is_ap_mode_pressed() { + return gpio_get_level(CONFIG_OAP_BTN_0_PIN); +} + +void app_main() { delay(1000); ESP_LOGI(TAG,"starting app... firmware %s", oap_version_str()); @@ -354,10 +363,13 @@ void app_main() oap_sensor_config = sensor_config_from_json(cJSON_GetObjectItem(storage_get_config("sensor"), "config")); //wifi/mongoose requires plenty of mem, start it here - wifi_boot(NULL, CONFIG_OAP_CONTROL_PANEL); + configure_ap_mode_btn(); + wifi_configure(is_ap_mode_pressed() ? NULL : storage_get_config("wifi"), CONFIG_OAP_CONTROL_PANEL ? cpanel_wifi_handler : NULL); + wifi_boot(); start_ota_task(storage_get_config("ota")); ledc_init(); + pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_init(); env_sensors_init(); publishers_init(); From 947cea0167f7c9cba4c234ff79ab16e689f12f06 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Thu, 5 Oct 2017 23:01:12 +0200 Subject: [PATCH 064/200] new partitions and bugfixes fix #31 fix #33 --- components/awsiot/awsiot_rest.c | 3 +++ components/net/thing_speak.c | 15 ++++++++---- components/oap_common/include/oap_debug.h | 1 + components/oap_common/oap_debug.c | 16 +++++++++++++ components/oap_common/test/test_oap_storage.c | 2 +- components/ota/ota.c | 7 ++++++ main/main.c | 2 ++ partitions.csv | 9 +++++++ sdkconfig.defaults | 24 ++++++++++--------- .../partition_table_unit_test_app.csv | 18 +++++++------- unit-test-app/sdkconfig.defaults | 21 ++++++++-------- 11 files changed, 82 insertions(+), 36 deletions(-) create mode 100644 partitions.csv diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 8b10b4b..9d24da0 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -58,6 +58,9 @@ esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body) { // sprintf(host_header, "Host: %s", awsiot_config->endpoint); request_t* req = req_new(uri); + if (!req) { + return ESP_FAIL; + } req->ca_cert = req_parse_x509_crt((unsigned char*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); if (!req->ca_cert) { diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index 19f42e8..99ac345 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -43,6 +43,7 @@ static void set_config_str_field(char** field, char* value) { static char* prepare_thingspeak_payload(oap_measurement_t* meas) { char* payload = malloc(512); + if (!payload) return NULL; sprintf(payload, "api_key=%s", apikey); if (meas->pm) { @@ -69,6 +70,9 @@ static char* prepare_thingspeak_payload(oap_measurement_t* meas) { static esp_err_t rest_post(char* uri, char* payload) { request_t* req = req_new(uri); + if (!req) { + return ESP_FAIL; + } ESP_LOGD(TAG, "request payload: %s", payload); req_setopt(req, REQ_SET_POSTFIELDS, payload); @@ -116,10 +120,13 @@ static esp_err_t thing_speak_send(oap_measurement_t* meas, oap_sensor_config_t* } char* payload = prepare_thingspeak_payload(meas); - esp_err_t ret = rest_post(OAP_THING_SPEAK_URI, payload); - free(payload); - - return ret; + if (payload) { + esp_err_t ret = rest_post(OAP_THING_SPEAK_URI, payload); + free(payload); + return ret; + } else { + return ESP_FAIL; + } } oap_publisher_t thingspeak_publisher = { diff --git a/components/oap_common/include/oap_debug.h b/components/oap_common/include/oap_debug.h index 0251e22..a31a8ac 100644 --- a/components/oap_common/include/oap_debug.h +++ b/components/oap_common/include/oap_debug.h @@ -33,3 +33,4 @@ void heap_log_free(heap_log* log); void log_task_stack(const char* task); void log_heap_size(const char* msg); +void reduce_heap_size_to(size_t size); diff --git a/components/oap_common/oap_debug.c b/components/oap_common/oap_debug.c index 18684d9..5d3bc45 100644 --- a/components/oap_common/oap_debug.c +++ b/components/oap_common/oap_debug.c @@ -53,6 +53,22 @@ void log_heap_size(const char* msg) { last_free_heap = free_heap; } +static void* dummy; +void reduce_heap_size_to(size_t size) { + size_t reduce_by = xPortGetFreeHeapSize() - size; + if (reduce_by > 0) { + ESP_LOGE(TAG, "********************** REDUCE HEAP BY %d TO %d bytes !!!!!!!!!!!", reduce_by, size); + do { + size_t block = reduce_by > 10000 ? 10000 : reduce_by; + reduce_by-=block; + dummy = malloc(block); + if (!dummy) { + ESP_LOGE(TAG, "FAILED TO ALLOCATE!"); + } + } while (reduce_by > 0); + } +} + static int heap_log_count = 0; /* diff --git a/components/oap_common/test/test_oap_storage.c b/components/oap_common/test/test_oap_storage.c index 68f7443..00f7b8e 100644 --- a/components/oap_common/test/test_oap_storage.c +++ b/components/oap_common/test/test_oap_storage.c @@ -100,7 +100,7 @@ TEST_CASE("bigblob", "[oap_common]") { nvs_clean_if_necessary(); - size_t blob_size = MAX_NVS_VALUE_SIZE * 1 + 10; + size_t blob_size = MAX_NVS_VALUE_SIZE * 10 + 10; void* blob = malloc(blob_size); TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_bigblob("blob", &blob, NULL)); diff --git a/components/ota/ota.c b/components/ota/ota.c index 2da6b8e..1a4b6c7 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -144,6 +144,9 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) { ESP_LOGI(TAG, "fetch ota info from %s", ota_config->index_uri); request_t* req = req_new(ota_config->index_uri); + if (!req) { + return OAP_OTA_ERR_REQUEST_FAILED; + } // ESP_LOGI(TAG, "REQ.HOST:%s", (char*)req_list_get_key(req->opt, "host")->value); // ESP_LOGI(TAG, "REQ.PATH:%s", (char*)req_list_get_key(req->opt, "path")->value); @@ -202,6 +205,9 @@ esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, es ESP_LOGI(TAG, "download ota binary from %s", file_uri); request_t* req = req_new(file_uri); + if (!req) { + return OAP_OTA_ERR_REQUEST_FAILED; + } req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); req_setopt(req, REQ_SET_HEADER, "Connection: close"); @@ -350,6 +356,7 @@ esp_err_t check_ota(ota_config_t* ota_config) { } static void check_ota_task(ota_config_t* ota_config) { + delay(1000); check_ota(ota_config); vTaskDelete(NULL); } diff --git a/main/main.c b/main/main.c index 3a77c1a..3f261e3 100644 --- a/main/main.c +++ b/main/main.c @@ -357,6 +357,8 @@ void app_main() { delay(1000); ESP_LOGI(TAG,"starting app... firmware %s", oap_version_str()); + //130kb is a nice cap to test against alloc fails + //reduce_heap_size_to(130000); storage_init(); ESP_LOGD(TAG, "retrieve sensor config"); diff --git a/partitions.csv b/partitions.csv new file mode 100644 index 0000000..cadb952 --- /dev/null +++ b/partitions.csv @@ -0,0 +1,9 @@ +# Name, Type, SubType, Offset, Size +# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild +nvs, data, nvs, 0x9000, 0x13000 +otadata, data, ota, 0x1c000, 0x2000 +phy_init, data, phy, 0x1e000, 0x1000 +factory, 0, 0, 0x30000, 0x140000 +coredump, data, coredump,, 0x10000 +ota_0, 0, ota_0, , 0x140000 +ota_1, 0, ota_1, , 0x140000 \ No newline at end of file diff --git a/sdkconfig.defaults b/sdkconfig.defaults index afdf7fa..86d2133 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -29,7 +29,7 @@ CONFIG_LOG_BOOTLOADER_LEVEL=2 # # Serial flasher config # -CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" +CONFIG_ESPTOOLPY_PORT="/opt/oap/dev/ttyOAP" # CONFIG_ESPTOOLPY_BAUD_115200B is not set # CONFIG_ESPTOOLPY_BAUD_230400B is not set CONFIG_ESPTOOLPY_BAUD_921600B=y @@ -74,20 +74,18 @@ CONFIG_MONITOR_BAUD=115200 # # OpenAirProject # -CONFIG_OAP_PM_SAMPLE_BUF_SIZE=120 -CONFIG_OAP_RESULT_BUFFER_SIZE=1 CONFIG_OAP_CONTROL_PANEL=1 # # Partition Table # # CONFIG_PARTITION_TABLE_SINGLE_APP is not set -CONFIG_PARTITION_TABLE_TWO_OTA=y -# CONFIG_PARTITION_TABLE_CUSTOM is not set +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 -CONFIG_PARTITION_TABLE_FILENAME="partitions_two_ota.csv" -CONFIG_APP_OFFSET=0x10000 +CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x30000 +CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" +CONFIG_APP_OFFSET=0x30000 # # Compiler options @@ -441,7 +439,6 @@ CONFIG_OPENSSL_ASSERT_DO_NOTHING=y CONFIG_OAP_OTA_ENABLED=1 CONFIG_OAP_OTA_BIN_URI_PREFIX="https://openairproject.com/ota/" CONFIG_OAP_OTA_INDEX_URI="https://openairproject.com/ota/index.txt" -CONFIG_OAP_OTA_CHECK_INTERVAL=3600 # # OAP Peripherals @@ -451,6 +448,13 @@ CONFIG_OAP_LED_G_PIN=27 CONFIG_OAP_LED_B_PIN=14 CONFIG_OAP_BTN_0_PIN=39 +# +# OAP measurements +# +CONFIG_OAP_PM_SAMPLE_BUF_SIZE=120 +CONFIG_OAP_HEATER_CONTROL_PIN=21 +CONFIG_OAP_FAN_CONTROL_PIN=22 + # # OAP PMSx003 Sensor # @@ -460,8 +464,6 @@ CONFIG_OAP_PM_UART_RXD_PIN=13 CONFIG_OAP_PM_UART_TXD_PIN=5 CONFIG_OAP_PM_UART_RTS_PIN=18 CONFIG_OAP_PM_UART_CTS_PIN=19 -CONFIG_OAP_HEATER_CONTROL_PIN=21 -CONFIG_OAP_FAN_CONTROL_PIN=22 CONFIG_OAP_PM_ENABLED_AUX=0 CONFIG_OAP_PM_UART_NUM_AUX=0x2 CONFIG_OAP_PM_SENSOR_CONTROL_PIN_AUX=2 diff --git a/unit-test-app/partition_table_unit_test_app.csv b/unit-test-app/partition_table_unit_test_app.csv index 2c82b33..32ea9e1 100644 --- a/unit-test-app/partition_table_unit_test_app.csv +++ b/unit-test-app/partition_table_unit_test_app.csv @@ -1,10 +1,10 @@ -# Special partition table for unit test app -# -# Name, Type, SubType, Offset, Size, Flags +# Let's keep it the same as for app +# Name, Type, SubType, Offset, Size # Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild -nvs, data, nvs, 0x9000, 0x6000 -#otadata, data, ota, 0xd000, 0x2000 -phy_init, data, phy, 0xf000, 0x1000 -factory, 0, 0, 0x10000, 0x140000 -ota_0, 0, ota_0, , 256K -ota_1, 0, ota_1, , 256K +nvs, data, nvs, 0x9000, 0x13000 +otadata, data, ota, 0x1c000, 0x2000 +phy_init, data, phy, 0x1e000, 0x1000 +factory, 0, 0, 0x30000, 0x140000 +coredump, data, coredump,, 0x10000 +ota_0, 0, ota_0, , 0x140000 +ota_1, 0, ota_1, , 0x140000 \ No newline at end of file diff --git a/unit-test-app/sdkconfig.defaults b/unit-test-app/sdkconfig.defaults index c16c809..f0fb2e0 100644 --- a/unit-test-app/sdkconfig.defaults +++ b/unit-test-app/sdkconfig.defaults @@ -31,7 +31,7 @@ CONFIG_LOG_BOOTLOADER_LEVEL=3 # # Serial flasher config # -CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" +CONFIG_ESPTOOLPY_PORT="/opt/oap/dev/ttyOAP.TEST" # CONFIG_ESPTOOLPY_BAUD_115200B is not set # CONFIG_ESPTOOLPY_BAUD_230400B is not set CONFIG_ESPTOOLPY_BAUD_921600B=y @@ -80,9 +80,9 @@ CONFIG_MONITOR_BAUD=115200 # CONFIG_PARTITION_TABLE_TWO_OTA is not set CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partition_table_unit_test_app.csv" -CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 +CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x30000 CONFIG_PARTITION_TABLE_FILENAME="partition_table_unit_test_app.csv" -CONFIG_APP_OFFSET=0x10000 +CONFIG_APP_OFFSET=0x30000 # # Compiler options @@ -424,11 +424,6 @@ CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -# -# OAP measurements -# -CONFIG_OAP_PM_SAMPLE_BUF_SIZE=120 - # # OpenSSL # @@ -442,7 +437,6 @@ CONFIG_OPENSSL_ASSERT_DO_NOTHING=y CONFIG_OAP_OTA_ENABLED=1 CONFIG_OAP_OTA_BIN_URI_PREFIX="https://openairproject.com/ota/" CONFIG_OAP_OTA_INDEX_URI="https://openairproject.com/ota/index.txt" -CONFIG_OAP_OTA_CHECK_INTERVAL=3600 # # OAP Peripherals @@ -452,6 +446,13 @@ CONFIG_OAP_LED_G_PIN=27 CONFIG_OAP_LED_B_PIN=14 CONFIG_OAP_BTN_0_PIN=35 +# +# OAP measurements +# +CONFIG_OAP_PM_SAMPLE_BUF_SIZE=120 +CONFIG_OAP_HEATER_CONTROL_PIN=21 +CONFIG_OAP_FAN_CONTROL_PIN=22 + # # OAP PMSx003 Sensor # @@ -461,8 +462,6 @@ CONFIG_OAP_PM_UART_RXD_PIN=13 CONFIG_OAP_PM_UART_TXD_PIN=5 CONFIG_OAP_PM_UART_RTS_PIN=18 CONFIG_OAP_PM_UART_CTS_PIN=19 -CONFIG_OAP_HEATER_CONTROL_PIN=21 -CONFIG_OAP_FAN_CONTROL_PIN=22 CONFIG_OAP_PM_ENABLED_AUX=0 CONFIG_OAP_PM_UART_NUM_AUX=0x2 CONFIG_OAP_PM_SENSOR_CONTROL_PIN_AUX=2 From bec5209637af19a733a4e8ba41bab24161b0e999 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Thu, 5 Oct 2017 23:15:03 +0200 Subject: [PATCH 065/200] jenkins fix --- Jenkinsfile | 4 ++-- bin/erase.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 46507d6..c0143d5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,7 +12,7 @@ pipeline { steps { sh 'bin/make_tests.sh' sh 'sleep 3' - sh 'bin/run_tests.py /dev/ttyUSB0' + sh 'bin/run_tests.py /opt/oap/dev/ttyOAP.TEST' } } stage('archive') { @@ -22,7 +22,7 @@ pipeline { post { success { archiveArtifacts artifacts: 'build/sensor-esp32.*', fingerprint: true - archiveArtifacts artifacts: 'build/partitions_two_ota.bin', fingerprint: true + archiveArtifacts artifacts: 'build/partitions.bin', fingerprint: true archiveArtifacts artifacts: 'build/bootloader/bootloader.bin', fingerprint: true } } diff --git a/bin/erase.sh b/bin/erase.sh index 43c3bdd..f2594a9 100755 --- a/bin/erase.sh +++ b/bin/erase.sh @@ -1 +1 @@ -python $IDF_PATH/components/esptool_py/esptool/esptool.py -p /dev/tty.SLAB_USBtoUART -b 115200 erase_flash +python $IDF_PATH/components/esptool_py/esptool/esptool.py -p /opt/oap/dev/ttyOAP -b 115200 erase_flash From b3337d0fc1f970c37e540c2131da14bddec277d4 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 16:39:43 +0200 Subject: [PATCH 066/200] fixes - memory leak in awsiot when cert is invalid - potential fix for config getting corrupted --- components/awsiot/awsiot_rest.c | 3 + components/oap_common/oap_storage.c | 2 + components/oap_common/test/include/oap_test.h | 2 + components/oap_common/test/test_oap_storage.c | 103 +++++++++++++----- 4 files changed, 85 insertions(+), 25 deletions(-) diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 9d24da0..17d335e 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -64,18 +64,21 @@ esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body) { req->ca_cert = req_parse_x509_crt((unsigned char*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); if (!req->ca_cert) { + req_clean_incl_certs(req); ESP_LOGW(TAG, "Invalid CA cert"); return ESP_FAIL; } req->client_cert = req_parse_x509_crt((unsigned char*)awsiot_config->cert, strlen(awsiot_config->cert)+1); if (!req->client_cert) { + req_clean_incl_certs(req); ESP_LOGW(TAG, "Invalid client cert"); return ESP_FAIL; } req->client_key = req_parse_pkey((unsigned char*)awsiot_config->pkey, strlen(awsiot_config->pkey)+1); if (!req->client_key) { + req_clean_incl_certs(req); ESP_LOGW(TAG, "Invalid client key"); return ESP_FAIL; } diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index fa39561..4d89eff 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -222,6 +222,7 @@ void storage_set_bigblob(const char* key, void* value, size_t length) { sprintf(part, "%s.%x", key, p); ESP_LOGD(TAG, "store part '%s': %d-%d", part, start, end); ESP_ERROR_CHECK(nvs_set_blob(handle, part, value+start, end-start)); + nvs_commit(handle); p++; } @@ -229,6 +230,7 @@ void storage_set_bigblob(const char* key, void* value, size_t length) { sprintf(part, "%s.%x", key, p); ESP_LOGD(TAG, "remove part '%s'", part); err = nvs_erase_key(handle, part); + nvs_commit(handle); if (err != ESP_ERR_NVS_NOT_FOUND) { ESP_ERROR_CHECK(err); } diff --git a/components/oap_common/test/include/oap_test.h b/components/oap_common/test/include/oap_test.h index 8d58ab1..116f2d5 100644 --- a/components/oap_common/test/include/oap_test.h +++ b/components/oap_common/test/include/oap_test.h @@ -28,6 +28,8 @@ #include "freertos/FreeRTOS.h" #include "bootwifi.h" +#define TEST "TEST" + /** * init wifi, do not wait for IP */ diff --git a/components/oap_common/test/test_oap_storage.c b/components/oap_common/test/test_oap_storage.c index 00f7b8e..e3ec71f 100644 --- a/components/oap_common/test/test_oap_storage.c +++ b/components/oap_common/test/test_oap_storage.c @@ -10,8 +10,7 @@ #include "esp_log.h" #include #include "oap_storage.h" - -static const char* TAG = "test_oap_storage"; +#include "oap_test.h" esp_err_t storage_get_blob(const char* key, void** out_value, size_t* length); void storage_set_blob(const char* key, void* value, size_t length); @@ -30,11 +29,10 @@ static const size_t MAX_NVS_VALUE_SIZE = 32 * (126 / 2 - 1); // TEST_ASSERT_EQUAL_INT32(4, sizeof(v_size)); //} -static uint8_t nvs_cleaned = 0; void nvs_clean() { //TODO this fails if wifi is initialised first! - ESP_LOGW(TAG, "erasing nvs"); + ESP_LOGW(TEST, "erasing nvs"); const esp_partition_t* nvs_partition = esp_partition_find_first( ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS, NULL); assert(nvs_partition && "partition table must have an NVS partition"); @@ -96,34 +94,89 @@ TEST_CASE("blob", "[oap_common]") free(blob3); } -TEST_CASE("bigblob", "[oap_common]") -{ - nvs_clean_if_necessary(); - - size_t blob_size = MAX_NVS_VALUE_SIZE * 10 + 10; - void* blob = malloc(blob_size); - TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_bigblob("blob", &blob, NULL)); - - storage_set_bigblob("blob", blob, blob_size); +void* alloc_bloc(size_t size) { + char* blob1 = malloc(size); + for (int i = 0; i < size; i++) { + blob1[i]='0' + (i % 10); + } + blob1[size-1]=0; + return blob1; +} - void* blob2; - size_t blob2_size; - TEST_ESP_OK(storage_get_bigblob("blob", &blob2, &blob2_size)); - TEST_ASSERT_EQUAL_UINT32(blob_size, blob2_size); - TEST_ASSERT_EQUAL_MEMORY(blob, blob2, blob_size); +void* alloc_bloc2(size_t size, char val) { + char* blob1 = malloc(size); + for (int i = 0; i < size; i++) { + blob1[i]=val; + } + blob1[size-1]=0; + return blob1; +} - void* blob3; - TEST_ESP_OK(storage_get_bigblob("blob", &blob3, NULL)); - TEST_ASSERT_EQUAL_MEMORY(blob, blob3, blob_size); +//TEST_CASE("try to reproduce with partially saved config", "[oap_common]") +//{ +// ESP_ERROR_CHECK(nvs_flash_init()); +// size_t blob1_size = 0; +// char* blob1 = NULL; +// +// storage_get_bigblob("blob", &blob1, &blob1_size); +// if (blob1) { +// ESP_LOGI(TEST, "SIZE: %d", blob1_size); +// ESP_LOGI(TEST, "%s", blob1); +// } +// +// blob1_size = MAX_NVS_VALUE_SIZE * 2 + 10; +// blob1 = alloc_bloc2(blob1_size, blob1 && blob1[0] == 'x' ? '.' : 'x'); +// +// ESP_LOGI(TEST, "store blob1"); +// storage_set_bigblob("blob", blob1, blob1_size); +//} - storage_set_bigblob("blob", blob, MAX_NVS_VALUE_SIZE + 1); +TEST_CASE("bigblob", "[oap_common]") +{ + nvs_clean_if_necessary(); + //store big blob + size_t blob1_size = MAX_NVS_VALUE_SIZE * 10 + 10; + void* blob1 = alloc_bloc(blob1_size); + TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_bigblob("blob", &blob1, NULL)); + ESP_LOGI(TEST, "store blob1"); + storage_set_bigblob("blob", blob1, blob1_size); + + //read blob + void* blob1_r = NULL; + size_t blob1_r_size; + ESP_LOGI(TEST, "read blob1"); + TEST_ESP_OK(storage_get_bigblob("blob", &blob1_r, &blob1_r_size)); + TEST_ASSERT_NOT_NULL(blob1_r); + TEST_ASSERT_EQUAL_UINT32(blob1_size, blob1_r_size); + TEST_ASSERT_EQUAL_MEMORY(blob1, blob1_r, blob1_size); + + //override blob + size_t blob2_size = blob1_r_size; + void* blob2 = alloc_bloc(blob2_size); + ESP_LOGI(TEST, "override with blob2"); + storage_set_bigblob("blob", blob2, blob2_size); + + //read blob + void* blob2_r = NULL; + size_t blob2_r_size; + ESP_LOGI(TEST, "read blob2"); + TEST_ESP_OK(storage_get_bigblob("blob", &blob2_r, &blob2_r_size)); + TEST_ASSERT_NOT_NULL(blob2_r); + TEST_ASSERT_EQUAL_UINT32(blob2_size, blob2_r_size); + TEST_ASSERT_EQUAL_MEMORY(blob2, blob2_r, blob2_size); + + + //override with small blob + ESP_LOGI(TEST, "override with small blob"); + storage_set_bigblob("blob", blob1, MAX_NVS_VALUE_SIZE + 1); TEST_ESP_ERR(ESP_ERR_NVS_NOT_FOUND, storage_get_blob("blob.2", blob2, NULL)); - free(blob); + free(blob1); + free(blob1_r); free(blob2); - free(blob3); + free(blob2_r); } TEST_CASE("get default config", "[oap_common]") @@ -185,7 +238,7 @@ TEST_CASE("get/set config", "[oap_common]") cJSON_Delete(config); //re-init - ESP_LOGI(TAG, "re-init"); + ESP_LOGI(TEST, "re-init"); storage_init(); config = storage_get_config(NULL); TEST_ASSERT_NOT_NULL(config); From e8a32b659d06c739ed4bd4d965e59463985d4352 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 17:25:39 +0200 Subject: [PATCH 067/200] try to recover from 0x4c SSL error --- components/esp-request/esp_request.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index fc8ef14..8a03206 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -198,7 +198,7 @@ static int mbedtls_connect(request_t *req) mbedtls_ctr_drbg_init(&ssl->drbg_ctx); do { - ESP_LOGD(TAG, "Seeding the random number generator"); + ESP_LOGV(TAG, "Seeding the random number generator"); mbedtls_entropy_init(&ssl->entropy_ctx); if ((ret = mbedtls_ctr_drbg_seed(&ssl->drbg_ctx, mbedtls_entropy_func, @@ -260,15 +260,17 @@ static int mbedtls_connect(request_t *req) ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); - while ((ret = mbedtls_ssl_handshake(&ssl->ssl_ctx)) != ESP_OK) { + int attempts = 0; + while ((ret = mbedtls_ssl_handshake(&ssl->ssl_ctx)) != ESP_OK && attempts < 10) { //careful here! - // ret = -76 when network is out, and then it does not recover */ - //sometimes it returns -78 and hangs :( - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { + // ret = 0x4c happens from time to time, esp just after network init - sometimes it recovers, sometimes it doesn't + // it cannot recover from 0x4e (no network) + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != 0x4c) { ESP_LOGW(TAG, "mbedtls_ssl_handshake returned 0x%x", -ret); break; } - ESP_LOGD(TAG, "handshake failed (0x%x), try again", -ret); + attempts++; + ESP_LOGD(TAG, "handshake failed (0x%x), try again (%d)", -ret, attempts); vTaskDelay(10 / portTICK_PERIOD_MS); vPortYield(); } @@ -557,9 +559,9 @@ static int req_process_upload(request_t *req) found = req_list_get_key(req->opt, "postfield"); if(found) { - ESP_LOGD(TAG, "Begin write %d bytes", strlen((char*)found->value)); + ESP_LOGV(TAG, "begin write %d bytes", strlen((char*)found->value)); int bwrite = req->_write(req, (char*)found->value, strlen((char*)found->value)); - ESP_LOGD(TAG, "end write %d bytes", bwrite); + ESP_LOGV(TAG, "end write %d bytes", bwrite); if(bwrite < 0) { ESP_LOGE(TAG, "Error write"); return -1; @@ -596,7 +598,7 @@ static int fill_buffer(request_t *req) req->buffer->bytes_write = bytes_inside_buffer; if(req->buffer->bytes_write < 0) req->buffer->bytes_write = 0; - ESP_LOGD(TAG, "move=%d, write=%d, read=%d", bytes_inside_buffer, req->buffer->bytes_write, req->buffer->bytes_read); + ESP_LOGV(TAG, "move=%d, write=%d, read=%d", bytes_inside_buffer, req->buffer->bytes_write, req->buffer->bytes_read); } if(!req->buffer->at_eof) { @@ -606,10 +608,10 @@ static int fill_buffer(request_t *req) req->buffer->bytes_read = 0; } buffer_free_bytes = req->buffer_size - req->buffer->bytes_write; - ESP_LOGD(TAG, "Begin read %d bytes", buffer_free_bytes); + ESP_LOGV(TAG, "Begin read %d bytes", buffer_free_bytes); bread = req->_read(req, (void*)(req->buffer->data + req->buffer->bytes_write), buffer_free_bytes); // ESP_LOGD(TAG, "bread = %d, bytes_write = %d, buffer_free_bytes = %d", bread, req->buffer->bytes_write, buffer_free_bytes); - ESP_LOGD(TAG, "End read, byte read= %d bytes", bread); + ESP_LOGV(TAG, "End read, byte read= %d bytes", bread); if(bread < 0) { req->buffer->at_eof = 1; return -1; @@ -656,7 +658,7 @@ static int req_process_download(request_t *req) if(process_header) { while((line = req_readline(req)) != NULL) { if(line[0] == 0) { - ESP_LOGD(TAG, "end process_idx=%d", req->buffer->bytes_read); + ESP_LOGV(TAG, "end process_idx=%d", req->buffer->bytes_read); header_off = req->buffer->bytes_read; process_header = 0; //end of http header break; @@ -671,7 +673,7 @@ static int req_process_download(request_t *req) } } else { req_list_set_from_string(req->response->header, line); - ESP_LOGD(TAG, "header line: %s", line); + ESP_LOGV(TAG, "header line: %s", line); } } } From c65606bf51e717c542731a0e2dd00bce94a693b4 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 17:35:25 +0200 Subject: [PATCH 068/200] small fixes - a bit of extra memory for ota task - rename log tags for consistency sake --- components/esp-request/esp_request.c | 2 +- components/oap_common/oap_debug.c | 2 +- components/ota/ota.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index 8a03206..4588e1e 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -29,7 +29,7 @@ #include "oap_common.h" -#define TAG "HTTP_REQ" +#define TAG "http" static const char *pers = "esp32-tls"; diff --git a/components/oap_common/oap_debug.c b/components/oap_common/oap_debug.c index 5d3bc45..50c3683 100644 --- a/components/oap_common/oap_debug.c +++ b/components/oap_common/oap_debug.c @@ -29,7 +29,7 @@ #include "esp_log.h" #include "freertos/task.h" -#define TAG "MEM" +#define TAG "mem" /** * this method is surprisingly stack heavy - it takes ~ 1000 bytes. * before using it, adjust task stack accordingly. diff --git a/components/ota/ota.c b/components/ota/ota.c index 1a4b6c7..d061567 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -378,7 +378,7 @@ void start_ota_task(cJSON* user_ota_config) { ota_config.commit_and_reboot = 1; ota_config.update_partition = NULL; ota_config.interval = 1000 * ota_interval->valueint; - xTaskCreate(check_ota_task, "check_ota_task", 1024*4, &ota_config, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate(check_ota_task, "check_ota_task", 1024*5, &ota_config, DEFAULT_TASK_PRIORITY, NULL); } } else { ESP_LOGI(TAG, "OTA not available"); From 03b30329a4a4893fc3e283b492fdc83ff353e628 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 17:48:46 +0200 Subject: [PATCH 069/200] small fixes --- components/esp-request/uri_parser.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/esp-request/uri_parser.c b/components/esp-request/uri_parser.c index 020495d..06d97e8 100644 --- a/components/esp-request/uri_parser.c +++ b/components/esp-request/uri_parser.c @@ -48,17 +48,17 @@ parsed_uri_t *parse_uri(const char *url) PARSE_FRAGMENT } parse_state = 0; puri = (parsed_uri_t *)malloc(sizeof(parsed_uri_t)); - memset(puri, 0, sizeof(parsed_uri_t)); if(NULL == puri) { return NULL; } + memset(puri, 0, sizeof(parsed_uri_t)); puri->_uri_len = strlen(url); puri->_uri = (char*) malloc(puri->_uri_len + 1); - memset(puri->_uri, 0, puri->_uri_len + 1); if(puri->_uri == NULL) { free_parsed_uri(puri); return NULL; } + memset(puri->_uri, 0, puri->_uri_len + 1); strcpy(puri->_uri, url); puri->_uri[puri->_uri_len] = 0; puri->scheme = NULL; From 4750dd88289c044a88cc104a51101335f0de7033 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 20:56:16 +0200 Subject: [PATCH 070/200] tests and fixes for SSL stack --- bin/test_components.sh | 2 +- components/awsiot/awsiot_rest.c | 14 +- components/esp-request/esp_request.c | 43 +++++- components/esp-request/include/esp_request.h | 6 +- components/esp-request/test/component.mk | 5 + .../esp-request/test/test_esp_request.c | 127 ++++++++++++++++++ components/net/thing_speak.c | 1 + components/ota/ota.c | 8 +- components/ota/test/test_ota.c | 10 +- unit-test-app/sdkconfig.defaults | 2 +- 10 files changed, 192 insertions(+), 26 deletions(-) create mode 100644 components/esp-request/test/component.mk create mode 100644 components/esp-request/test/test_esp_request.c diff --git a/bin/test_components.sh b/bin/test_components.sh index b7982d3..096ab9c 100644 --- a/bin/test_components.sh +++ b/bin/test_components.sh @@ -1 +1 @@ -TEST_COMPONENTS='oap_common bmx280 pmsx003 pm_meter awsiot net ota bootwifi' \ No newline at end of file +TEST_COMPONENTS='oap_common bmx280 pmsx003 pm_meter esp-request awsiot net ota bootwifi' \ No newline at end of file diff --git a/components/awsiot/awsiot_rest.c b/components/awsiot/awsiot_rest.c index 17d335e..413a3c1 100644 --- a/components/awsiot/awsiot_rest.c +++ b/components/awsiot/awsiot_rest.c @@ -64,21 +64,21 @@ esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body) { req->ca_cert = req_parse_x509_crt((unsigned char*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); if (!req->ca_cert) { - req_clean_incl_certs(req); + req_clean(req); ESP_LOGW(TAG, "Invalid CA cert"); return ESP_FAIL; } req->client_cert = req_parse_x509_crt((unsigned char*)awsiot_config->cert, strlen(awsiot_config->cert)+1); if (!req->client_cert) { - req_clean_incl_certs(req); + req_clean(req); ESP_LOGW(TAG, "Invalid client cert"); return ESP_FAIL; } req->client_key = req_parse_pkey((unsigned char*)awsiot_config->pkey, strlen(awsiot_config->pkey)+1); if (!req->client_key) { - req_clean_incl_certs(req); + req_clean(req); ESP_LOGW(TAG, "Invalid client key"); return ESP_FAIL; } @@ -87,17 +87,17 @@ esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body) { sprintf(path, "/things/%s/shadow", awsiot_config->thingName); - req_setopt(req, REQ_SET_METHOD, "POST"); + req_setopt(req, REQ_SET_METHOD, HTTP_POST); req_setopt(req, REQ_SET_PATH, path); //req_setopt(req, REQ_SET_HEADER, host_header); - req_setopt(req, REQ_SET_HEADER, "Content-Type: application/json"); - req_setopt(req, REQ_SET_HEADER, "Connection: close"); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONTENT_TYPE_JSON); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); req_setopt(req, REQ_SET_DATAFIELDS, body); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback); int status = req_perform(req); - req_clean_incl_certs(req); + req_clean(req); if (status != 200) { ESP_LOGW(TAG, "Invalid response code: %d", status); diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index 4588e1e..0148ef6 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -27,10 +27,15 @@ #include "mbedtls/error.h" #include "mbedtls/certs.h" +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" +#include "freertos/semphr.h" #include "oap_common.h" #define TAG "http" +#define SSL_MUTEX 1 + static const char *pers = "esp32-tls"; #define REQ_BUFFER_LEN (2048) @@ -184,13 +189,31 @@ mbedtls_pk_context* req_parse_pkey(unsigned char* buf, size_t buflen) { } } + +/* + * making concurrent SSL requests is problematic - they consume a lot of heap, + * and there's something wrong with mbedtls internally. we create a mutex to allow only one at once. + */ +#if SSL_MUTEX + static SemaphoreHandle_t ssl_semaphore = NULL; +#endif + static int mbedtls_connect(request_t *req) { +#if SSL_MUTEX + if (!ssl_semaphore) ssl_semaphore = xSemaphoreCreateMutex(); + if(!xSemaphoreTake( ssl_semaphore, ( TickType_t ) 10000 / portTICK_PERIOD_MS )) { + ESP_LOGW(TAG, "couldn't acquire lock for SSL request"); + return ESP_FAIL; + } +#endif + nossl_connect(req); REQ_CHECK(req->socket < 0, "socket failed", return -1); int ret; req_ssl* ssl = malloc(sizeof(req_ssl)); + if (!ssl) return ESP_FAIL; memset(ssl, 0, sizeof(req_ssl)); req->ssl = ssl; mbedtls_ssl_init(&ssl->ssl_ctx); @@ -361,6 +384,10 @@ static int mbedtls_close(request_t *req) req->ssl = NULL; } +#if SSL_MUTEX + xSemaphoreGive(ssl_semaphore); +#endif + return 0; } @@ -510,7 +537,7 @@ void req_setopt(request_t *req, REQ_OPTS opt, void* data) break; case REQ_SET_POSTFIELDS: req_list_set_key(req->header, "Content-Type", "application/x-www-form-urlencoded"); - req_list_set_key(req->opt, "method", "POST"); + req_list_set_key(req->opt, "method", HTTP_POST); case REQ_SET_DATAFIELDS: post_len = strlen((char*)data); sprintf(len_str, "%d", post_len); @@ -712,6 +739,10 @@ static int req_process_download(request_t *req) int req_perform(request_t *req) { do { + ESP_LOGD(TAG, "%s %s%s", + (char*)req_list_get_key(req->opt, "method")->value, + (char*)req_list_get_key(req->opt, "host")->value, + (char*)req_list_get_key(req->opt, "path")->value); REQ_CHECK(req->_connect(req) < 0, "Error connnect", break); REQ_CHECK(req_process_upload(req) < 0, "Error send request", break); REQ_CHECK(req_process_download(req) < 0, "Error download", break); @@ -745,13 +776,9 @@ void req_clean(request_t *req) free(req->response); free(req->buffer->data); free(req->buffer); - free(req); -} -void req_clean_incl_certs(request_t *req) { - req_clean(req); - if (req->ca_cert) { - req_free_x509_crt(req->ca_cert); + if (req->ca_cert) { + req_free_x509_crt(req->ca_cert); } if (req->client_cert) { req_free_x509_crt(req->client_cert); @@ -759,4 +786,6 @@ void req_clean_incl_certs(request_t *req) { if (req->client_key) { req_free_pkey(req->client_key); } + + free(req); } diff --git a/components/esp-request/include/esp_request.h b/components/esp-request/include/esp_request.h index d1e64c3..1380428 100644 --- a/components/esp-request/include/esp_request.h +++ b/components/esp-request/include/esp_request.h @@ -9,6 +9,11 @@ #include "mbedtls/entropy.h" #include "mbedtls/ctr_drbg.h" +#define HTTP_HEADER_CONTENT_TYPE_JSON "Content-Type: application/json" +#define HTTP_HEADER_CONNECTION_CLOSE "Connection: close" +#define HTTP_POST "POST" +#define HTTP_GET "GET" + typedef enum { REQ_SET_METHOD = 0x01, REQ_SET_HEADER, @@ -83,7 +88,6 @@ request_t *req_new(const char *url); request_t *req_new_with_buf(const char *uri, size_t buffer_size); void req_setopt(request_t *req, REQ_OPTS opt, void* data); void req_clean(request_t *req); -void req_clean_incl_certs(request_t *req); int req_perform(request_t *req); void req_free_x509_crt(mbedtls_x509_crt* crt); diff --git a/components/esp-request/test/component.mk b/components/esp-request/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/esp-request/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/esp-request/test/test_esp_request.c b/components/esp-request/test/test_esp_request.c new file mode 100644 index 0000000..837eece --- /dev/null +++ b/components/esp-request/test/test_esp_request.c @@ -0,0 +1,127 @@ +/* + * test_esp_request.c + * + * Created on: Oct 6, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + + +#include "esp_request.h" +#include "oap_test.h" +#include "oap_debug.h" + +extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); + +#define URL(PROT,PATH) #PROT"://openairproject.com/ota-test"#PATH + +static int make_http_get() { + request_t* req = req_new(URL(http,/index.txt)); + if (!req) return -1; + req_setopt(req, REQ_REDIRECT_FOLLOW, "false"); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); + int resp = req_perform(req); + req_clean(req); + return resp == 301 ? 0 : resp; +} + +static int make_https_get(int big) { + request_t* req = req_new(big ? URL(https,/random32k.bin) : URL(https,/index.txt)); + if (!req) return -1; + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); + int resp = req_perform(req); + req_clean(req); + return resp == 200 ? 0 : resp; +} + +TEST_CASE("http request", "[esp-request]") { + test_require_wifi(); + TEST_ESP_OK(make_http_get()); +} + +TEST_CASE("https request", "[esp-request]") { + test_require_wifi(); + TEST_ESP_OK(make_https_get(0)); +} + +/* + * there's a few problems with SSL stack on ESP32. + * a single SSL request consumes a lot of stack and heap. + * + * so I've implemented a mutex to process them sequentially. + * even with queuing them, they are still quite unreliable and timeout often. + * + * these tests are handy to look for memory leaks and stability in general. + */ +static QueueHandle_t https_client_task_queue; + +static void https_client_task() { + int resp = make_https_get(1); + xQueueSend(https_client_task_queue, &resp, 100); + log_task_stack("sslclient"); + vTaskDelete(NULL); +} + +TEST_CASE("multiple ssl requests", "[esp-request]") { + test_require_wifi(); + int count = 4; + if (!https_client_task_queue) https_client_task_queue = xQueueCreate(count, sizeof(int)); + log_heap_size("before https requests"); + for (int i = 0; i < count; i++) { + char t[20]; //should be malloc ? + sprintf(t, "https_task_%i", i); + //6KB is MINIMUM for making ssl! + xTaskCreate(https_client_task, t, 1024*6, NULL, 10, NULL); + } + int resp; + for (int i = 0; i < count; i++) { + xQueueReceive(https_client_task_queue, &resp, 20000/portTICK_PERIOD_MS); + } + log_heap_size("after http requests"); +} + + +static QueueHandle_t http_client_task_queue; + +static void http_client_task() { + int resp = make_http_get(); + xQueueSend(http_client_task_queue, &resp, 100); + log_task_stack("httpclient"); + vTaskDelete(NULL); +} + +//no problems here, even if sometimes one or two fails +TEST_CASE("multiple http requests", "[esp-request]") { + test_require_wifi(); + int count = 10; + if (!http_client_task_queue) http_client_task_queue = xQueueCreate(count, sizeof(int)); + log_heap_size("before http requests"); + for (int i = 0; i < count; i++) { + char t[20]; + sprintf(t, "http_task_%i", i); + xTaskCreate(http_client_task, t, 1024*5, NULL, 10, NULL); + } + int resp; + for (int i = 0; i < count; i++) { + xQueueReceive(http_client_task_queue, &resp, 20000/portTICK_PERIOD_MS); + } + log_heap_size("after http requests"); +} + + diff --git a/components/net/thing_speak.c b/components/net/thing_speak.c index 99ac345..68fa493 100644 --- a/components/net/thing_speak.c +++ b/components/net/thing_speak.c @@ -76,6 +76,7 @@ static esp_err_t rest_post(char* uri, char* payload) { ESP_LOGD(TAG, "request payload: %s", payload); req_setopt(req, REQ_SET_POSTFIELDS, payload); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); int response_code = req_perform(req); req_clean(req); diff --git a/components/ota/ota.c b/components/ota/ota.c index d061567..f24d809 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -159,11 +159,11 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) memset(&result, 0, sizeof(ost_status_result_t)); req->meta = &result; - req_setopt(req, REQ_SET_HEADER, "Connection: close"); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, get_ota_status_callback); int status = req_perform(req); - req_clean_incl_certs(req); + req_clean(req); if (status != 200) { ESP_LOGW(TAG, "error response code=%d", status); @@ -246,7 +246,7 @@ esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, es } mbedtls_sha256_free(&sha_context); - req_clean_incl_certs(req); + req_clean(req); return ret; } @@ -378,7 +378,7 @@ void start_ota_task(cJSON* user_ota_config) { ota_config.commit_and_reboot = 1; ota_config.update_partition = NULL; ota_config.interval = 1000 * ota_interval->valueint; - xTaskCreate(check_ota_task, "check_ota_task", 1024*5, &ota_config, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate(check_ota_task, "check_ota_task", 1024*6, &ota_config, DEFAULT_TASK_PRIORITY, NULL); } } else { ESP_LOGI(TAG, "OTA not available"); diff --git a/components/ota/test/test_ota.c b/components/ota/test/test_ota.c index 2245560..38f2e84 100644 --- a/components/ota/test/test_ota.c +++ b/components/ota/test/test_ota.c @@ -128,11 +128,11 @@ TEST_CASE("parse_ota_info","[ota]") TEST_ASSERT_EQUAL_STRING("929fd82b12f4e67cfa08a14e763232a95820b7f2b2edcce744e1c1711c7c9e04", info.sha); } -TEST_CASE("download_ota_binary", "[ota]") -{ - test_require_wifi(); - TEST_ESP_OK(download_ota_binary(&ota_test_config, &hello_world_info, NULL)); -} +//TEST_CASE("download_ota_binary", "[ota]") +//{ +// test_require_wifi(); +// TEST_ESP_OK(download_ota_binary(&ota_test_config, &hello_world_info, NULL)); +//} TEST_CASE("full ota", "[ota]") { diff --git a/unit-test-app/sdkconfig.defaults b/unit-test-app/sdkconfig.defaults index f0fb2e0..e02bc4e 100644 --- a/unit-test-app/sdkconfig.defaults +++ b/unit-test-app/sdkconfig.defaults @@ -273,7 +273,7 @@ CONFIG_FATFS_MAX_LFN=255 CONFIG_FREERTOS_CORETIMER_0=y # CONFIG_FREERTOS_CORETIMER_1 is not set CONFIG_FREERTOS_HZ=100 -CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y +CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=n # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y From e94e6bf057c813ae98680a64433163c07d420022 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 22:55:23 +0200 Subject: [PATCH 071/200] disable http when network is not available --- bin/test_components.sh | 2 +- components/awsiot/awsiot.c | 6 ++++++ components/ota/ota.c | 9 +++------ components/{net => thing-speak}/component.mk | 0 components/{net => thing-speak}/include/thing_speak.h | 0 components/{net => thing-speak}/test/component.mk | 0 components/{net => thing-speak}/test/test_thing_speak.c | 2 +- components/{net => thing-speak}/thing_speak.c | 9 ++++++++- main/main.c | 2 +- 9 files changed, 20 insertions(+), 10 deletions(-) rename components/{net => thing-speak}/component.mk (100%) rename components/{net => thing-speak}/include/thing_speak.h (100%) rename components/{net => thing-speak}/test/component.mk (100%) rename components/{net => thing-speak}/test/test_thing_speak.c (97%) rename components/{net => thing-speak}/thing_speak.c (94%) diff --git a/bin/test_components.sh b/bin/test_components.sh index 096ab9c..bb59fb5 100644 --- a/bin/test_components.sh +++ b/bin/test_components.sh @@ -1 +1 @@ -TEST_COMPONENTS='oap_common bmx280 pmsx003 pm_meter esp-request awsiot net ota bootwifi' \ No newline at end of file +TEST_COMPONENTS='oap_common bmx280 pmsx003 pm_meter esp-request awsiot thing-speak ota bootwifi' \ No newline at end of file diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index 51fa95c..ef49e0a 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -36,6 +36,7 @@ #include "oap_common.h" #include "oap_debug.h" #include "oap_publisher.h" +#include "bootwifi.h" static const char *TAG = "awsiot"; @@ -199,6 +200,11 @@ static esp_err_t awsiot_send(oap_measurement_t* meas, oap_sensor_config_t *senso ESP_LOGW(TAG, "awsiot not configured"); return ESP_FAIL; } + esp_err_t ret; + if ((ret = wifi_connected_wait_for(5000)) != ESP_OK) { + ESP_LOGW(TAG, "no connectivity, skip"); + return ret; + } return awsiot_rest_post(meas, sensor_config); } diff --git a/components/ota/ota.c b/components/ota/ota.c index f24d809..fe0c4b1 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -288,12 +288,9 @@ esp_err_t check_ota(ota_config_t* ota_config) { }; while (1) { - - // this masks problems with mbedtls and mongoose, - // but without it mongoose in AP mode hangs. -// if ((err = wifi_connected_wait_for(30000)) != ESP_OK) { -// goto go_sleep; -// } + if ((err = wifi_connected_wait_for(60000)) != ESP_OK) { + goto go_sleep; + } ESP_LOGD(TAG, "Check for OTA updates..."); log_task_stack(TAG); diff --git a/components/net/component.mk b/components/thing-speak/component.mk similarity index 100% rename from components/net/component.mk rename to components/thing-speak/component.mk diff --git a/components/net/include/thing_speak.h b/components/thing-speak/include/thing_speak.h similarity index 100% rename from components/net/include/thing_speak.h rename to components/thing-speak/include/thing_speak.h diff --git a/components/net/test/component.mk b/components/thing-speak/test/component.mk similarity index 100% rename from components/net/test/component.mk rename to components/thing-speak/test/component.mk diff --git a/components/net/test/test_thing_speak.c b/components/thing-speak/test/test_thing_speak.c similarity index 97% rename from components/net/test/test_thing_speak.c rename to components/thing-speak/test/test_thing_speak.c index e971b6c..044a829 100644 --- a/components/net/test/test_thing_speak.c +++ b/components/thing-speak/test/test_thing_speak.c @@ -20,8 +20,8 @@ * along with OpenAirProject-ESP32. If not, see . */ +#include "../../thing-speak/include/thing_speak.h" #include "oap_test.h" -#include "thing_speak.h" #define TEST_API_KEY "QMN6JJM996QXBORX" diff --git a/components/net/thing_speak.c b/components/thing-speak/thing_speak.c similarity index 94% rename from components/net/thing_speak.c rename to components/thing-speak/thing_speak.c index 68fa493..c2434b7 100644 --- a/components/net/thing_speak.c +++ b/components/thing-speak/thing_speak.c @@ -20,11 +20,13 @@ * along with OpenAirProject-ESP32. If not, see . */ -#include "thing_speak.h" +#include "../thing-speak/include/thing_speak.h" + #include "oap_common.h" #include "oap_storage.h" #include "oap_debug.h" #include "esp_request.h" +#include "bootwifi.h" //to use https we'd need to install CA cert first. #define OAP_THING_SPEAK_URI "http://api.thingspeak.com/update" @@ -119,6 +121,11 @@ static esp_err_t thing_speak_send(oap_measurement_t* meas, oap_sensor_config_t* ESP_LOGE(TAG, "thingspeak not configured"); return ESP_FAIL; } + esp_err_t ret; + if ((ret = wifi_connected_wait_for(5000)) != ESP_OK) { + ESP_LOGW(TAG, "no connectivity, skip"); + return ret; + } char* payload = prepare_thingspeak_payload(meas); if (payload) { diff --git a/main/main.c b/main/main.c index 3f261e3..9263d23 100644 --- a/main/main.c +++ b/main/main.c @@ -33,10 +33,10 @@ #include "esp_log.h" #include +#include "../components/thing-speak/include/thing_speak.h" #include "meas_intervals.h" #include "meas_continuous.h" -#include "thing_speak.h" #include "bootwifi.h" #include "rgb_led.h" #include "ctrl_btn.h" From 6950add1b5765b5ba9693cf837957cc2473b615c Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 23:34:43 +0200 Subject: [PATCH 072/200] jenkins - do not flash --- bin/make_default.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/make_default.sh b/bin/make_default.sh index c9c034b..d76afec 100755 --- a/bin/make_default.sh +++ b/bin/make_default.sh @@ -1,4 +1,4 @@ #!/bin/sh export BATCH_BUILD=1 -make defconfig all flash $1 -j5 \ No newline at end of file +make defconfig all $1 -j5 \ No newline at end of file From 1e4e49f5c2662bf40233f0aff9a89275f8e8afaf Mon Sep 17 00:00:00 2001 From: kglowacki Date: Fri, 6 Oct 2017 23:39:13 +0200 Subject: [PATCH 073/200] silence make output --- bin/make_default.sh | 2 +- bin/make_tests.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/make_default.sh b/bin/make_default.sh index d76afec..721dac9 100755 --- a/bin/make_default.sh +++ b/bin/make_default.sh @@ -1,4 +1,4 @@ #!/bin/sh export BATCH_BUILD=1 -make defconfig all $1 -j5 \ No newline at end of file +make defconfig all $1 -j5 > /dev/null \ No newline at end of file diff --git a/bin/make_tests.sh b/bin/make_tests.sh index 6049311..81860f8 100755 --- a/bin/make_tests.sh +++ b/bin/make_tests.sh @@ -7,4 +7,4 @@ bin="$(dirname "$0")" export BATCH_BUILD=1 project=`pwd` -make -C unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS="$TEST_COMPONENTS" defconfig all flash $1 -j5 \ No newline at end of file +make -C unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS="$TEST_COMPONENTS" defconfig all flash $1 -j5 > /dev/null \ No newline at end of file From 912f0bc3515a39dd04c7bac7632ab5f5d6632dec Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 12:21:20 +0200 Subject: [PATCH 074/200] switch to stable v2.1 esp-idf --- components/bootwifi/bootwifi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 00d81d2..4c68220 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -131,7 +131,7 @@ static void log_wifi_event(void *ctx, system_event_t *event) { case SYSTEM_EVENT_STA_DISCONNECTED: ESP_LOGI(tag, "SYSTEM_EVENT_STA_DISCONNECTED"); break; case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: ESP_LOGI(tag, "SYSTEM_EVENT_STA_AUTHMODE_CHANGE"); break; case SYSTEM_EVENT_STA_GOT_IP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_GOT_IP"); break; - case SYSTEM_EVENT_STA_LOST_IP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_LOST_IP"); break; + //case SYSTEM_EVENT_STA_LOST_IP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_LOST_IP"); break; case SYSTEM_EVENT_AP_START: ESP_LOGI(tag, "SYSTEM_EVENT_AP_START"); break; case SYSTEM_EVENT_AP_STOP: ESP_LOGI(tag, "SYSTEM_EVENT_AP_STOP"); break; case SYSTEM_EVENT_AP_STACONNECTED: ESP_LOGI(tag, "SYSTEM_EVENT_AP_STACONNECTED"); break; From b6bb38329e2c4db58cfcdde11872425a4106a0a4 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 12:57:59 +0200 Subject: [PATCH 075/200] fix wifi event handling to work with sdk v2.1 --- components/bootwifi/bootwifi.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 4c68220..1d26f33 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -169,6 +169,12 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { if ((err=set_access_point_ip()) != ESP_OK) { ESP_LOGW(tag, "failed to set ip address [err %x], use default", err); } + + tcpip_adapter_ip_info_t ip_info; + tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip_info); + + ESP_LOGW(tag, "****** SENSOR IP (AP %s) http://"IPSTR, ap_config.ap.ssid, IP2STR(&ip_info.ip)); + wifi_state_change(true, true); break; } @@ -222,8 +228,9 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { break; case WIFI_MODE_AP: - ESP_LOGW(tag, "****** SENSOR IP (AP %s) http://"IPSTR, ap_config.ap.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); - wifi_state_change(true, true); + //after v2.1, in AP mode, SYSTEM_EVENT_STA_GOT_IP is fired! it does not happen <= 2.1 + //ESP_LOGW(tag, "****** SENSOR IP (AP %s) http://"IPSTR, ap_config.ap.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); + //wifi_state_change(true, true); break; default: ESP_LOGW(tag, "unsupported wifi mode: %d", mode); From 7dbb76ac0ba19058a0843869a2812b2cb992ae5a Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 13:03:03 +0200 Subject: [PATCH 076/200] skip unstalbe test --- components/bootwifi/test/test_bootwifi.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/components/bootwifi/test/test_bootwifi.c b/components/bootwifi/test/test_bootwifi.c index 15b1c96..c2db38c 100644 --- a/components/bootwifi/test/test_bootwifi.c +++ b/components/bootwifi/test/test_bootwifi.c @@ -53,9 +53,11 @@ TEST_CASE("test wifi AP","[wifi]") { // test_delay(10000); //} -TEST_CASE("reconnect wifi","[wifi]") { - test_require_wifi(); - esp_wifi_stop(); - TEST_ESP_OK(wifi_disconnected_wait_for(5000)); - TEST_ESP_OK(wifi_connected_wait_for(10000)); -} +// this test is unstable - sometimes it reconnects before we're able to detect disconnect +// +//TEST_CASE("reconnect wifi","[wifi]") { +// test_require_wifi(); +// esp_wifi_stop(); +// TEST_ESP_OK(wifi_disconnected_wait_for(5000)); +// TEST_ESP_OK(wifi_connected_wait_for(10000)); +//} From c0c35f5d92b0a88cf555bb49ff668a3c3cb65461 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 13:30:29 +0200 Subject: [PATCH 077/200] clean log --- components/esp-request/esp_request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index 0148ef6..29a8250 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -304,7 +304,7 @@ static int mbedtls_connect(request_t *req) if (req->client_cert && req->client_key) { if ((ret = mbedtls_ssl_get_record_expansion(&ssl->ssl_ctx)) >= 0) { - ESP_LOGD(TAG, "Record expansion is %d\n", ret); + ESP_LOGD(TAG, "Record expansion is %d", ret); } else { ESP_LOGD(TAG, "Record expansion is unknown (compression)"); //not error } From 24b4fa0ea553ec8e71061c0078e23ece13869055 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 16:30:14 +0200 Subject: [PATCH 078/200] cleanup logs fix #26 --- README.md | 4 +- bin/deploy_ota.sh | 7 ++- components/awsiot/awsiot.c | 2 +- components/bootwifi/bootwifi.c | 15 ++--- components/bootwifi/server.c | 2 +- components/esp-request/esp_request.c | 80 ++++++++++++------------ components/oap_common/oap_debug.c | 10 +-- components/ota/ota.c | 72 ++++++++++----------- components/pm_meter/meas_intervals.c | 2 +- components/pm_meter/test/test_pm_meter.c | 8 +-- main/main.c | 10 +-- 11 files changed, 103 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index d643db9..9255dc7 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ After booting up for the first time, sensor becomes an access point and enables Required parts: ESP32 DevKit Board (other boards should also work after minor modifications). -Plantower PMS5003 (or 3003. 7003 should work too, but it wasn't tested yet) +Plantower PMS5003 (or PMS3003 or PMS7003) Any push button Optional parts: @@ -70,7 +70,7 @@ take it under consideration during build, isolate all connections properly ## Building firmware -Firmware was written with native espressif-sdk [https://github.com/espressif/esp-idf]. +Firmware is written in native espressif-sdk v2.1 [http://esp-idf.readthedocs.io/en/v2.1/get-started/index.html] After installing and setting up SDK, connect your ESP32 board to your PC. This may require installing custom USB driver (it depends on uart chipset used on your ESP32 board, for DevKit it should be Silabs chip - [http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx]). diff --git a/bin/deploy_ota.sh b/bin/deploy_ota.sh index bbc8844..d515ff9 100755 --- a/bin/deploy_ota.sh +++ b/bin/deploy_ota.sh @@ -7,8 +7,9 @@ INDEX_FILE=build/index.txt DEST_FOLDER=s3://openairproject.com/ota -echo -n -e "$1|$1/sensor-esp32.bin|" > $INDEX_FILE +printf "$1|$1/sensor-esp32.bin|" > $INDEX_FILE + cat build/sensor-esp32.bin | openssl dgst -sha256 >> $INDEX_FILE -aws s3 cp build/sensor-esp32.bin $DEST_FOLDER/$1/sensor-esp32.bin --profile iot -aws s3 cp $INDEX_FILE $DEST_FOLDER/index.txt --profile iot +aws s3 cp build/sensor-esp32.bin $DEST_FOLDER/$1/sensor-esp32.bin --profile oap +aws s3 cp $INDEX_FILE $DEST_FOLDER/index.txt --profile oap \ No newline at end of file diff --git a/components/awsiot/awsiot.c b/components/awsiot/awsiot.c index ef49e0a..8268c8f 100644 --- a/components/awsiot/awsiot.c +++ b/components/awsiot/awsiot.c @@ -197,7 +197,7 @@ static esp_err_t awsiot_configure(cJSON* awsiot) { static esp_err_t awsiot_send(oap_measurement_t* meas, oap_sensor_config_t *sensor_config) { if (!awsiot_config.configured) { - ESP_LOGW(TAG, "awsiot not configured"); + ESP_LOGE(TAG, "awsiot not configured"); return ESP_FAIL; } esp_err_t ret; diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 1d26f33..730561c 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -112,14 +112,6 @@ static esp_err_t set_access_point_ip() { tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); return err; } -// -//static void start_mongoose() { -// if (_enable_control_panel) { -// server_start(cpanel_event_handler); -// } else { -// ESP_LOGW(tag, "control panel disabled by config flag"); -// } -//} static void log_wifi_event(void *ctx, system_event_t *event) { switch(event->event_id) { @@ -131,6 +123,7 @@ static void log_wifi_event(void *ctx, system_event_t *event) { case SYSTEM_EVENT_STA_DISCONNECTED: ESP_LOGI(tag, "SYSTEM_EVENT_STA_DISCONNECTED"); break; case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: ESP_LOGI(tag, "SYSTEM_EVENT_STA_AUTHMODE_CHANGE"); break; case SYSTEM_EVENT_STA_GOT_IP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_GOT_IP"); break; + //esp-idf v2.1+ //case SYSTEM_EVENT_STA_LOST_IP: ESP_LOGI(tag, "SYSTEM_EVENT_STA_LOST_IP"); break; case SYSTEM_EVENT_AP_START: ESP_LOGI(tag, "SYSTEM_EVENT_AP_START"); break; case SYSTEM_EVENT_AP_STOP: ESP_LOGI(tag, "SYSTEM_EVENT_AP_STOP"); break; @@ -173,7 +166,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { tcpip_adapter_ip_info_t ip_info; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip_info); - ESP_LOGW(tag, "****** SENSOR IP (AP %s) http://"IPSTR, ap_config.ap.ssid, IP2STR(&ip_info.ip)); + ESP_LOGI(tag, "\n*** SENSOR IP (access point '%s') http://"IPSTR"\n", ap_config.ap.ssid, IP2STR(&ip_info.ip)); wifi_state_change(true, true); break; } @@ -213,7 +206,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { switch (mode) { case WIFI_MODE_STA: - ESP_LOGW(tag, "****** SENSOR IP (STA %s) http://"IPSTR, oap_wifi_config.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); + ESP_LOGI(tag, "\n*** SENSOR IP (network '%s') http://"IPSTR"\n", oap_wifi_config.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); initialize_sntp(); /* @@ -229,7 +222,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { break; case WIFI_MODE_AP: //after v2.1, in AP mode, SYSTEM_EVENT_STA_GOT_IP is fired! it does not happen <= 2.1 - //ESP_LOGW(tag, "****** SENSOR IP (AP %s) http://"IPSTR, ap_config.ap.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); + //ESP_LOGI(tag, "****** SENSOR IP (AP %s) http://"IPSTR, ap_config.ap.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); //wifi_state_change(true, true); break; default: diff --git a/components/bootwifi/server.c b/components/bootwifi/server.c index 3adf887..f47e998 100644 --- a/components/bootwifi/server.c +++ b/components/bootwifi/server.c @@ -111,7 +111,7 @@ static esp_err_t main_loop(void *mongoose_event_handler) { if (connection == NULL) { //when this happens usually it won't recover until it gets a new IP //maybe we should reboot? - ESP_LOGE(tag, "No connection from the mg_bind()."); + ESP_LOGW(tag, "No connection from the mg_bind()."); mg_mgr_free(&mgr); return ESP_FAIL; } diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index 29a8250..59c76bc 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -32,14 +32,14 @@ #include "freertos/semphr.h" #include "oap_common.h" -#define TAG "http" +#define MEM "http" #define SSL_MUTEX 1 static const char *pers = "esp32-tls"; #define REQ_BUFFER_LEN (2048) -#define REQ_CHECK(check, log, ret) if(check) {ESP_LOGE(TAG, log);ret;} +#define REQ_CHECK(check, log, ret) if(check) {ESP_LOGE(MEM, log);ret;} #ifdef MBEDTLS_DEBUG_C @@ -143,7 +143,7 @@ static int nossl_connect(request_t *req) tv.tv_usec = 0; setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); - ESP_LOGD(TAG, "[sock=%d],connecting to server IP:%s,Port:%s...", + ESP_LOGD(MEM, "[sock=%d],connecting to server IP:%s,Port:%s...", socket, ipaddr_ntoa((const ip_addr_t*)&remote_ip.sin_addr.s_addr), (char*)port->value); if(connect(socket, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr)) != 0) { close(socket); @@ -165,7 +165,7 @@ mbedtls_x509_crt* req_parse_x509_crt(unsigned char *buf, size_t buflen) { if (ret == ESP_OK) { return crt; } else { - ESP_LOGW(TAG, "failed to parse x509 cert: 0x%x", ret); + ESP_LOGW(MEM, "failed to parse x509 cert: 0x%x", ret); req_free_x509_crt(crt); return NULL; } @@ -183,7 +183,7 @@ mbedtls_pk_context* req_parse_pkey(unsigned char* buf, size_t buflen) { if (ret == ESP_OK) { return pkey; } else { - ESP_LOGW(TAG, "failed to parse key: 0x%x", -ret); + ESP_LOGW(MEM, "failed to parse key: 0x%x", -ret); req_free_pkey(pkey); return NULL; } @@ -203,7 +203,7 @@ static int mbedtls_connect(request_t *req) #if SSL_MUTEX if (!ssl_semaphore) ssl_semaphore = xSemaphoreCreateMutex(); if(!xSemaphoreTake( ssl_semaphore, ( TickType_t ) 10000 / portTICK_PERIOD_MS )) { - ESP_LOGW(TAG, "couldn't acquire lock for SSL request"); + ESP_LOGW(MEM, "couldn't acquire lock for SSL request"); return ESP_FAIL; } #endif @@ -221,12 +221,12 @@ static int mbedtls_connect(request_t *req) mbedtls_ctr_drbg_init(&ssl->drbg_ctx); do { - ESP_LOGV(TAG, "Seeding the random number generator"); + ESP_LOGV(MEM, "Seeding the random number generator"); mbedtls_entropy_init(&ssl->entropy_ctx); if ((ret = mbedtls_ctr_drbg_seed(&ssl->drbg_ctx, mbedtls_entropy_func, &ssl->entropy_ctx, (const unsigned char *) pers, strlen(pers))) != ESP_OK) { - ESP_LOGE(TAG, "mbedtls_ctr_drbg_seed returned %d", -ret); + ESP_LOGW(MEM, "mbedtls_ctr_drbg_seed returned %d", -ret); break; } @@ -235,7 +235,7 @@ static int mbedtls_connect(request_t *req) MBEDTLS_SSL_VERIFY_NONE if not. */ if (req->ca_cert) { - ESP_LOGD(TAG, "Set CA certificate"); + ESP_LOGD(MEM, "Set CA certificate"); mbedtls_ssl_conf_authmode(&ssl->ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); mbedtls_ssl_conf_ca_chain(&ssl->ssl_conf, req->ca_cert, NULL); //mbedtls_ssl_conf_verify(&ssl->ssl_ctx, my_verify, NULL ); @@ -244,9 +244,9 @@ static int mbedtls_connect(request_t *req) } if (req->client_cert && req->client_key) { - ESP_LOGD(TAG, "Set client cert/pkey"); + ESP_LOGD(MEM, "Set client cert/pkey"); if ((ret = mbedtls_ssl_conf_own_cert(&ssl->ssl_conf, req->client_cert, req->client_key)) != ESP_OK) { - ESP_LOGW(TAG, "mbedtls_ssl_conf_own_cert returned 0x%x", -ret); + ESP_LOGW(MEM, "mbedtls_ssl_conf_own_cert returned 0x%x", -ret); break; } } @@ -254,17 +254,17 @@ static int mbedtls_connect(request_t *req) // Hostname set here should match CN in server certificate if((ret = mbedtls_ssl_set_hostname(&ssl->ssl_ctx, req_list_get_key(req->opt, "host")->value)) != ESP_OK) { - ESP_LOGW(TAG, "mbedtls_ssl_set_hostname returned 0x%x", -ret); + ESP_LOGW(MEM, "mbedtls_ssl_set_hostname returned 0x%x", -ret); break; } - ESP_LOGD(TAG, "Setting up the SSL/TLS structure..."); + ESP_LOGD(MEM, "Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&ssl->ssl_conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != ESP_OK) { - ESP_LOGW(TAG, "mbedtls_ssl_config_defaults returned 0x%x", -ret); + ESP_LOGW(MEM, "mbedtls_ssl_config_defaults returned 0x%x", -ret); break; } @@ -275,13 +275,13 @@ static int mbedtls_connect(request_t *req) #endif if ((ret = mbedtls_ssl_setup(&ssl->ssl_ctx, &ssl->ssl_conf)) != ESP_OK) { - ESP_LOGW(TAG, "mbedtls_ssl_setup returned 0x%x", -ret); + ESP_LOGW(MEM, "mbedtls_ssl_setup returned 0x%x", -ret); break; } mbedtls_ssl_set_bio(&ssl->ssl_ctx, &req->socket, mbedtls_net_send, mbedtls_net_recv, NULL ); - ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); + ESP_LOGD(MEM, "Performing the SSL/TLS handshake..."); int attempts = 0; while ((ret = mbedtls_ssl_handshake(&ssl->ssl_ctx)) != ESP_OK && attempts < 10) { @@ -289,11 +289,11 @@ static int mbedtls_connect(request_t *req) // ret = 0x4c happens from time to time, esp just after network init - sometimes it recovers, sometimes it doesn't // it cannot recover from 0x4e (no network) if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != 0x4c) { - ESP_LOGW(TAG, "mbedtls_ssl_handshake returned 0x%x", -ret); + ESP_LOGW(MEM, "mbedtls_ssl_handshake returned 0x%x", -ret); break; } attempts++; - ESP_LOGD(TAG, "handshake failed (0x%x), try again (%d)", -ret, attempts); + ESP_LOGD(MEM, "handshake failed (0x%x), try again (%d)", -ret, attempts); vTaskDelay(10 / portTICK_PERIOD_MS); vPortYield(); } @@ -304,23 +304,23 @@ static int mbedtls_connect(request_t *req) if (req->client_cert && req->client_key) { if ((ret = mbedtls_ssl_get_record_expansion(&ssl->ssl_ctx)) >= 0) { - ESP_LOGD(TAG, "Record expansion is %d", ret); + ESP_LOGV(MEM, "Record expansion is %d", ret); } else { - ESP_LOGD(TAG, "Record expansion is unknown (compression)"); //not error + ESP_LOGV(MEM, "Record expansion is unknown (compression)"); //not error } } - ESP_LOGD(TAG, "Verifying peer X.509 certificate..."); + ESP_LOGD(MEM, "Verifying peer X.509 certificate..."); if ((ret = mbedtls_ssl_get_verify_result(&ssl->ssl_ctx)) != ESP_OK) { - ESP_LOGE(TAG, "Failed to verify peer certificate!"); + ESP_LOGW(MEM, "Failed to verify peer certificate!"); char buf[512]; bzero(buf, sizeof(buf)); mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", ret); - ESP_LOGW(TAG, "verification info: %s", buf); + ESP_LOGW(MEM, "verification info: %s", buf); break; } else { - ESP_LOGD(TAG, "Certificate verified."); + ESP_LOGD(MEM, "Certificate verified."); } } while (0); @@ -333,7 +333,7 @@ static int mbedtls_write(request_t *req, char *buffer, int len) int ret = -1; while ((ret = mbedtls_ssl_write(&req->ssl->ssl_ctx, (unsigned char *)buffer, len)) <= 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { - ESP_LOGE(TAG, "mbedtls_ssl_write returned 0x%x", ret); + ESP_LOGW(MEM, "mbedtls_ssl_write returned 0x%x", ret); break; } } @@ -353,10 +353,10 @@ static int mbedtls_read(request_t *req, char *buffer, int len) if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { continue; } else if (ret == -0x4C) { - ESP_LOGW(TAG, "timeout"); + ESP_LOGW(MEM, "timeout"); break; } else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { - ESP_LOGW(TAG, "peer close"); + ESP_LOGW(MEM, "peer close"); break; } else { break; @@ -372,7 +372,7 @@ static int nossl_read(request_t *req, char *buffer, int len) static int mbedtls_close(request_t *req) { - ESP_LOGD(TAG, "Cleaning SSL connection."); + ESP_LOGD(MEM, "Cleaning SSL connection."); close(req->socket); if (req->ssl) { @@ -522,7 +522,7 @@ void req_setopt(request_t *req, REQ_OPTS opt, void* data) case REQ_SET_SECURITY: req_list_set_key(req->opt, "secure", data); if(req_list_check_key(req->opt, "secure", "true")) { - ESP_LOGD(TAG, "Secure"); + ESP_LOGD(MEM, "Secure"); req->_read = mbedtls_read; req->_write = mbedtls_write; req->_connect = mbedtls_connect; @@ -586,11 +586,11 @@ static int req_process_upload(request_t *req) found = req_list_get_key(req->opt, "postfield"); if(found) { - ESP_LOGV(TAG, "begin write %d bytes", strlen((char*)found->value)); + ESP_LOGV(MEM, "begin write %d bytes", strlen((char*)found->value)); int bwrite = req->_write(req, (char*)found->value, strlen((char*)found->value)); - ESP_LOGV(TAG, "end write %d bytes", bwrite); + ESP_LOGV(MEM, "end write %d bytes", bwrite); if(bwrite < 0) { - ESP_LOGE(TAG, "Error write"); + ESP_LOGW(MEM, "error write"); return -1; } } @@ -625,7 +625,7 @@ static int fill_buffer(request_t *req) req->buffer->bytes_write = bytes_inside_buffer; if(req->buffer->bytes_write < 0) req->buffer->bytes_write = 0; - ESP_LOGV(TAG, "move=%d, write=%d, read=%d", bytes_inside_buffer, req->buffer->bytes_write, req->buffer->bytes_read); + ESP_LOGV(MEM, "move=%d, write=%d, read=%d", bytes_inside_buffer, req->buffer->bytes_write, req->buffer->bytes_read); } if(!req->buffer->at_eof) { @@ -635,10 +635,10 @@ static int fill_buffer(request_t *req) req->buffer->bytes_read = 0; } buffer_free_bytes = req->buffer_size - req->buffer->bytes_write; - ESP_LOGV(TAG, "Begin read %d bytes", buffer_free_bytes); + ESP_LOGV(MEM, "Begin read %d bytes", buffer_free_bytes); bread = req->_read(req, (void*)(req->buffer->data + req->buffer->bytes_write), buffer_free_bytes); // ESP_LOGD(TAG, "bread = %d, bytes_write = %d, buffer_free_bytes = %d", bread, req->buffer->bytes_write, buffer_free_bytes); - ESP_LOGV(TAG, "End read, byte read= %d bytes", bread); + ESP_LOGV(MEM, "End read, byte read= %d bytes", bread); if(bread < 0) { req->buffer->at_eof = 1; return -1; @@ -685,7 +685,7 @@ static int req_process_download(request_t *req) if(process_header) { while((line = req_readline(req)) != NULL) { if(line[0] == 0) { - ESP_LOGV(TAG, "end process_idx=%d", req->buffer->bytes_read); + ESP_LOGV(MEM, "end process_idx=%d", req->buffer->bytes_read); header_off = req->buffer->bytes_read; process_header = 0; //end of http header break; @@ -696,11 +696,11 @@ static int req_process_download(request_t *req) char statusCode[4] = { 0 }; memcpy(statusCode, temp + 9, 3); req->response->status_code = atoi(statusCode); - ESP_LOGD(TAG, "status code: %d", req->response->status_code); + ESP_LOGD(MEM, "status code: %d", req->response->status_code); } } else { req_list_set_from_string(req->response->header, line); - ESP_LOGV(TAG, "header line: %s", line); + ESP_LOGV(MEM, "header line: %s", line); } } } @@ -739,7 +739,7 @@ static int req_process_download(request_t *req) int req_perform(request_t *req) { do { - ESP_LOGD(TAG, "%s %s%s", + ESP_LOGD(MEM, "%s %s%s", (char*)req_list_get_key(req->opt, "method")->value, (char*)req_list_get_key(req->opt, "host")->value, (char*)req_list_get_key(req->opt, "path")->value); @@ -752,7 +752,7 @@ int req_perform(request_t *req) if(found) { req_list_set_key(req->header, "Referer", (const char*)found->value); req_setopt_from_uri(req, (const char*)found->value); - ESP_LOGD(TAG, "Following: %s", (char*)found->value); + ESP_LOGD(MEM, "Following: %s", (char*)found->value); req->_close(req); continue; } diff --git a/components/oap_common/oap_debug.c b/components/oap_common/oap_debug.c index 50c3683..98379c0 100644 --- a/components/oap_common/oap_debug.c +++ b/components/oap_common/oap_debug.c @@ -29,7 +29,7 @@ #include "esp_log.h" #include "freertos/task.h" -#define TAG "mem" +#define MEM "mem" /** * this method is surprisingly stack heavy - it takes ~ 1000 bytes. * before using it, adjust task stack accordingly. @@ -37,7 +37,7 @@ void log_task_stack(const char* task) { //uxTaskGetStackHighWaterMark is marked as UNTESTED #if !CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION - ESP_LOGD(TAG, "task '%s' min stack (%d)", task, uxTaskGetStackHighWaterMark( NULL )); + ESP_LOGD(MEM, "stack min (%d) - task '%s'", uxTaskGetStackHighWaterMark( NULL ), task); #endif } @@ -47,7 +47,7 @@ static size_t last_free_heap = 0; void log_heap_size(const char* msg) { size_t free_heap = xPortGetFreeHeapSize(); if (last_free_heap == 0) last_free_heap = free_heap; - ESP_LOGD(TAG, "heap min (%d) free (%d) change (%d) %s", + ESP_LOGD(MEM, "heap min (%d) free (%d) change (%d) - '%s'", xPortGetMinimumEverFreeHeapSize(), free_heap, free_heap-last_free_heap, msg); last_free_heap = free_heap; @@ -57,13 +57,13 @@ static void* dummy; void reduce_heap_size_to(size_t size) { size_t reduce_by = xPortGetFreeHeapSize() - size; if (reduce_by > 0) { - ESP_LOGE(TAG, "********************** REDUCE HEAP BY %d TO %d bytes !!!!!!!!!!!", reduce_by, size); + ESP_LOGE(MEM, "********************** REDUCE HEAP BY %d TO %d bytes !!!!!!!!!!!", reduce_by, size); do { size_t block = reduce_by > 10000 ? 10000 : reduce_by; reduce_by-=block; dummy = malloc(block); if (!dummy) { - ESP_LOGE(TAG, "FAILED TO ALLOCATE!"); + ESP_LOGE(MEM, "FAILED TO ALLOCATE!"); } } while (reduce_by > 0); } diff --git a/components/ota/ota.c b/components/ota/ota.c index fe0c4b1..39206f4 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -40,7 +40,7 @@ #include "esp_request.h" #include "mbedtls/sha256.h" -static const char *TAG = "ota"; +#define MEM "ota" extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); @@ -91,20 +91,20 @@ esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len) { } while(line[i] && i < len); if (!ver) { - ESP_LOGW(TAG, "malformed status (no version)"); + ESP_LOGW(MEM, "malformed status (no version)"); goto fail; } if (!file) { - ESP_LOGW(TAG, "malformed status (no file)"); + ESP_LOGW(MEM, "malformed status (no file)"); goto fail; } if (!sha) { - ESP_LOGW(TAG, "malformed status (no sha)"); + ESP_LOGW(MEM, "malformed status (no sha)"); goto fail; } if (oap_version_parse(ver, &ota_info->ver) != ESP_OK) { - ESP_LOGW(TAG, "malformed status (invalid version: '%s')", ver); + ESP_LOGW(MEM, "malformed status (invalid version: '%s')", ver); goto fail; } ota_info->file = file; @@ -121,12 +121,12 @@ esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len) { static int get_ota_status_callback(request_t *req, char *data, int len) { - ESP_LOGD(TAG,"%s", data); + ESP_LOGD(MEM,"index:\n%s", data); ost_status_result_t* result = req->meta; if (req->response->status_code == 200 && !result->found) { result->found = 1; result->err = parse_ota_info(&result->binary, data, len); - ESP_LOGD(TAG, "parse ota info line... [0x%x]", result->err); + ESP_LOGD(MEM, "parse ota info line... [0x%x]", result->err); } return 0; } @@ -142,7 +142,7 @@ void free_ota_info(ota_info_t* ota_info) { esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) { - ESP_LOGI(TAG, "fetch ota info from %s", ota_config->index_uri); + ESP_LOGI(MEM, "fetch ota info from %s", ota_config->index_uri); request_t* req = req_new(ota_config->index_uri); if (!req) { return OAP_OTA_ERR_REQUEST_FAILED; @@ -166,7 +166,7 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) req_clean(req); if (status != 200) { - ESP_LOGW(TAG, "error response code=%d", status); + ESP_LOGW(MEM, "error response code=%d", status); return OAP_OTA_ERR_REQUEST_FAILED; } @@ -202,7 +202,7 @@ esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, es char file_uri[300]; sprintf(file_uri, "%s%s", ota_config->bin_uri_prefix, ota_info->file); - ESP_LOGI(TAG, "download ota binary from %s", file_uri); + ESP_LOGI(MEM, "download ota binary from %s", file_uri); request_t* req = req_new(file_uri); if (!req) { @@ -225,23 +225,23 @@ esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, es req->meta = &meta; int status = req_perform(req); - ESP_LOGI(TAG, "status=%d", status); + ESP_LOGI(MEM, "status=%d", status); esp_err_t ret; if (status == 200) { - ESP_LOGI(TAG, "ota file downloaded"); + ESP_LOGI(MEM, "ota file downloaded"); ret = ESP_OK; unsigned char hash[32]; mbedtls_sha256_finish(&sha_context, hash); char* hex = sha_to_hex(hash); - ESP_LOGI(TAG, "file sha256=%s", hex); + ESP_LOGI(MEM, "file sha256=%s", hex); if (strcmp(hex, ota_info->sha) != 0) { - ESP_LOGE(TAG, "invalid sha (expected: %s)", ota_info->sha); + ESP_LOGE(MEM, "invalid sha (expected: %s)", ota_info->sha); ret = OAP_OTA_ERR_SHA_MISMATCH; } free(hex); } else { - ESP_LOGW(TAG, "error response code=%d", status); + ESP_LOGW(MEM, "error response code=%d", status); ret = OAP_OTA_ERR_REQUEST_FAILED; } @@ -255,13 +255,13 @@ esp_err_t is_ota_update_available(ota_config_t* ota_config, ota_info_t* ota_info if (err == ESP_OK) { unsigned long remote_ver = oap_version_num(ota_info->ver); if (remote_ver <= ota_config->min_version) { - ESP_LOGD(TAG, "remote ver: %lu <= min ver: %lu", remote_ver, ota_config->min_version); + ESP_LOGD(MEM, "remote ver: %lu <= min ver: %lu", remote_ver, ota_config->min_version); err = OAP_OTA_ERR_NO_UPDATES; } else { - ESP_LOGD(TAG, "new update found (%lu)", remote_ver); + ESP_LOGD(MEM, "new update found (%lu)", remote_ver); } } else { - ESP_LOGD(TAG, "fetch_last_ota_info failed [0x%x]", err); + ESP_LOGD(MEM, "fetch_last_ota_info failed [0x%x]", err); } return err; } @@ -270,16 +270,16 @@ esp_err_t check_ota(ota_config_t* ota_config) { const esp_partition_t* running_partition = esp_ota_get_running_partition(); - ESP_LOGI(TAG, "running partition = %s", running_partition->label); + ESP_LOGI(MEM, "running partition = %s", running_partition->label); if (ota_config->update_partition == NULL) { ota_config->update_partition = esp_ota_get_next_update_partition(NULL); } if (ota_config->update_partition == NULL) { - ESP_LOGE(TAG, "no suitable OTA partition found"); + ESP_LOGE(MEM, "no suitable OTA partition found"); return ESP_FAIL; } - ESP_LOGI(TAG, "update partition = %s", ota_config->update_partition->label); + ESP_LOGI(MEM, "update partition = %s", ota_config->update_partition->label); esp_err_t err; esp_ota_handle_t update_handle = 0; ota_info_t ota_info = { @@ -292,52 +292,52 @@ esp_err_t check_ota(ota_config_t* ota_config) { goto go_sleep; } - ESP_LOGD(TAG, "Check for OTA updates..."); - log_task_stack(TAG); + ESP_LOGD(MEM, "Check for OTA updates..."); + log_task_stack(MEM); if ((err = is_ota_update_available(ota_config, &ota_info)) != ESP_OK) goto go_sleep; char* verstr = oap_version_format(ota_info.ver); - ESP_LOGW(TAG,"NEW FIRMWARE AVAILABLE: %s", verstr); + ESP_LOGW(MEM,"NEW FIRMWARE AVAILABLE: %s", verstr); free(verstr); - ESP_LOGI(TAG, "Writing to partition subtype %d at offset 0x%x", + ESP_LOGI(MEM, "Writing to partition subtype %d at offset 0x%x", ota_config->update_partition->subtype, ota_config->update_partition->address); err = esp_ota_begin(ota_config->update_partition, OTA_SIZE_UNKNOWN, &update_handle); if (err != ESP_OK) { - ESP_LOGE(TAG, "esp_ota_begin failed [0x%x]", err); + ESP_LOGE(MEM, "esp_ota_begin failed [0x%x]", err); goto fail; } - ESP_LOGI(TAG, "esp_ota_begin succeeded"); + ESP_LOGI(MEM, "esp_ota_begin succeeded"); //download if ((err = download_ota_binary(ota_config, &ota_info, update_handle)) != ESP_OK) { - ESP_LOGE(TAG, "download_ota_binary failed [0x%x]", err); + ESP_LOGE(MEM, "download_ota_binary failed [0x%x]", err); goto fail; } if ((err=esp_ota_end(update_handle)) != ESP_OK) { - ESP_LOGE(TAG, "esp_ota_end failed [0x%x]", err); + ESP_LOGE(MEM, "esp_ota_end failed [0x%x]", err); goto fail; } if (ota_config->commit_and_reboot) { if ((err = esp_ota_set_boot_partition(ota_config->update_partition)) != ESP_OK) { - ESP_LOGE(TAG, "esp_ota_set_boot_partition failed [0x%x]", err); + ESP_LOGE(MEM, "esp_ota_set_boot_partition failed [0x%x]", err); goto fail; } - ESP_LOGW(TAG, "OTA applied. Prepare to restart system!"); + ESP_LOGW(MEM, "OTA applied. Prepare to restart system!"); oap_reboot(); return ESP_OK; } else { - ESP_LOGW(TAG, "OTA downloaded but configured to be ignored"); + ESP_LOGW(MEM, "OTA downloaded but configured to be ignored"); goto go_sleep; } fail: - ESP_LOGE(TAG,"Interrupt OTA"); + ESP_LOGE(MEM,"Interrupt OTA"); go_sleep: free_ota_info(&ota_info); @@ -345,7 +345,7 @@ esp_err_t check_ota(ota_config_t* ota_config) { if (ota_config->interval <= 0) { break; } else { - ESP_LOGD(TAG, "sleep for %d sec", ota_config->interval/1000); + ESP_LOGD(MEM, "sleep for %d sec", ota_config->interval/1000); delay(ota_config->interval); } } @@ -367,7 +367,7 @@ void start_ota_task(cJSON* user_ota_config) { if (!user_ota_config || !(ota_interval = cJSON_GetObjectItem(user_ota_config, "interval")) || ota_interval->valueint < 0) { //disable for -1, for 0 it will run once at startup - ESP_LOGI(TAG, "OTA disabled"); + ESP_LOGI(MEM, "OTA disabled"); } else { ota_config.bin_uri_prefix = OAP_OTA_BIN_URI_PREFIX; ota_config.index_uri = OAP_OTA_INDEX_URI; @@ -378,6 +378,6 @@ void start_ota_task(cJSON* user_ota_config) { xTaskCreate(check_ota_task, "check_ota_task", 1024*6, &ota_config, DEFAULT_TASK_PRIORITY, NULL); } } else { - ESP_LOGI(TAG, "OTA not available"); + ESP_LOGI(MEM, "OTA not available"); } } diff --git a/components/pm_meter/meas_intervals.c b/components/pm_meter/meas_intervals.c index ebde3bf..429b1c0 100644 --- a/components/pm_meter/meas_intervals.c +++ b/components/pm_meter/meas_intervals.c @@ -27,7 +27,7 @@ #include "esp_err.h" #include "freertos/task.h" -static char* TAG = "pm_meter_int"; +static char* TAG = "meter_intv"; typedef struct { pm_sensor_enable_handler_f handler; diff --git a/components/pm_meter/test/test_pm_meter.c b/components/pm_meter/test/test_pm_meter.c index 43d6594..093e045 100644 --- a/components/pm_meter/test/test_pm_meter.c +++ b/components/pm_meter/test/test_pm_meter.c @@ -32,7 +32,7 @@ static int fake_sensor0_enabled = 0; static int fake_sensor1_enabled = 0; static list_t* strategy_events = NULL; -#define TAG "test" +#define MEM "test" typedef struct { pm_meter_event_t event_type; @@ -47,15 +47,15 @@ static void strategy_callback(pm_meter_event_t event, void* data) { record->event_type = event; switch (event) { case PM_METER_START: - ESP_LOGI(TAG, "MEAS_START"); + ESP_LOGI(MEM, "MEAS_START"); break; case PM_METER_RESULT : - ESP_LOGI(TAG, "MEAS_RESULT"); + ESP_LOGI(MEM, "MEAS_RESULT"); record->result = malloc(sizeof(pm_data_pair_t)); memcpy(record->result, data, sizeof(pm_data_pair_t)); break; case PM_METER_ERROR: - ESP_LOGI(TAG, "MEAS_ERROR: %s", (char*)data); + ESP_LOGI(MEM, "MEAS_ERROR: %s", (char*)data); record->error = strdup((char*)data); break; } diff --git a/main/main.c b/main/main.c index 9263d23..875875b 100644 --- a/main/main.c +++ b/main/main.c @@ -111,7 +111,6 @@ extern pm_meter_t pm_meter_continuous; #define PM_RESULT_SEND_TIMEOUT 100 static void pm_meter_result_handler(pm_data_pair_t* pm_data_pair) { - ESP_LOGI(TAG, "STOP MEASUREMENT: %d", pm_data_pair->pm_data[0].pm2_5); if (!xQueueSend(pm_meter_result_queue, pm_data_pair, PM_RESULT_SEND_TIMEOUT)) { ESP_LOGW(TAG,"pm_meter_result_queue overflow"); } @@ -120,14 +119,15 @@ static void pm_meter_result_handler(pm_data_pair_t* pm_data_pair) { static void pm_meter_output_handler(pm_meter_event_t event, void* data) { switch (event) { case PM_METER_START: - ESP_LOGI(TAG, "START MEASUREMENT"); + ESP_LOGI(TAG, "start measurement"); ledc_set_mode(LED_PULSE); break; case PM_METER_RESULT: + ESP_LOGI(TAG, "finished measurement"); pm_meter_result_handler((pm_data_pair_t*)data); break; case PM_METER_ERROR: - ESP_LOGW(TAG, "FAILED MEASUREMENT: %s", (char*)data); + ESP_LOGW(TAG, "failed measurement: %s", (char*)data); break; } } @@ -262,7 +262,7 @@ static void env_sensors_init() { bmx280_config[0].callback = &env_sensor_callback; if (bmx280_init(&bmx280_config[0]) != ESP_OK) { - ESP_LOGE(TAG, "couldn't initialise bmx280 sensor 0"); + ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 0); } } @@ -271,7 +271,7 @@ static void env_sensors_init() { bmx280_config[1].callback = &env_sensor_callback; if (bmx280_init(&bmx280_config[1]) != ESP_OK) { - ESP_LOGE(TAG, "couldn't initialise bmx280 sensor 1"); + ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } } From dbc319b5396fa511172d14270f44ec83126b22bf Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 17:48:19 +0200 Subject: [PATCH 079/200] clean warnings fix #18 update sdkconfig.defaults small log tuning --- bin/make_test_menuconfig.sh | 7 + components/bmx280/bmx280.c | 2 +- components/bmx280/test/test_bmx280.c | 3 +- components/bootwifi/bootwifi.c | 4 +- components/esp-request/esp_request.c | 86 +++++------ components/oap_common/oap_debug.c | 10 +- components/oap_common/oap_storage.c | 8 +- components/oap_common/oap_version.c | 2 +- components/ota/Kconfig | 6 +- components/ota/ota.c | 88 ++++++------ components/ota/ota_int.h | 3 +- components/pm_meter/meas_intervals.c | 3 +- components/pm_meter/test/test_pm_meter.c | 12 +- components/pmsx003/pmsx003.c | 4 +- sdkconfig.defaults | 169 ++-------------------- unit-test-app/sdkconfig.defaults | 175 ++--------------------- 16 files changed, 144 insertions(+), 438 deletions(-) create mode 100755 bin/make_test_menuconfig.sh diff --git a/bin/make_test_menuconfig.sh b/bin/make_test_menuconfig.sh new file mode 100755 index 0000000..332a23a --- /dev/null +++ b/bin/make_test_menuconfig.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +bin="$(dirname "$0")" +. bin/test_components.sh +project=`pwd` +echo $TEST_COMPONENTS +make -C unit-test-app EXTRA_COMPONENT_DIRS=$project/components TEST_COMPONENTS="$TEST_COMPONENTS" menuconfig \ No newline at end of file diff --git a/components/bmx280/bmx280.c b/components/bmx280/bmx280.c index d3e3d6b..650a6c0 100644 --- a/components/bmx280/bmx280.c +++ b/components/bmx280/bmx280.c @@ -112,7 +112,7 @@ esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { esp_err_t res; if ((res = bmx280_i2c_setup(bmx280_config)) == ESP_OK) { //2kb => ~380bytes free - xTaskCreate(bmx280_task, "bmx280_task", 1024*3, bmx280_config, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate((TaskFunction_t)bmx280_task, "bmx280_task", 1024*3, bmx280_config, DEFAULT_TASK_PRIORITY, NULL); } return res; } diff --git a/components/bmx280/test/test_bmx280.c b/components/bmx280/test/test_bmx280.c index f3d564e..c77890d 100644 --- a/components/bmx280/test/test_bmx280.c +++ b/components/bmx280/test/test_bmx280.c @@ -25,7 +25,7 @@ esp_err_t bmx280_i2c_setup(bmx280_config_t* config); esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config); -static env_data_t last_result = {.0}; +static env_data_t last_result; static void collect_result(env_data_t* result) { memcpy(&last_result, result, sizeof(env_data_t)); @@ -42,6 +42,7 @@ static bmx280_config_t cfg = { }; TEST_CASE("bmx280 measurement","[bmx280]") { + bzero(&last_result, 0); TEST_ASSERT_TRUE(CONFIG_OAP_BMX280_ENABLED); TEST_ESP_OK(bmx280_i2c_setup(&cfg)); TEST_ESP_OK(bmx280_measurement_loop(&cfg)); diff --git a/components/bootwifi/bootwifi.c b/components/bootwifi/bootwifi.c index 730561c..07177a7 100644 --- a/components/bootwifi/bootwifi.c +++ b/components/bootwifi/bootwifi.c @@ -166,7 +166,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { tcpip_adapter_ip_info_t ip_info; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip_info); - ESP_LOGI(tag, "\n*** SENSOR IP (access point '%s') http://"IPSTR"\n", ap_config.ap.ssid, IP2STR(&ip_info.ip)); + ESP_LOGI(tag, "\n\n*** SENSOR IP (access point '%s') http://"IPSTR"\n", ap_config.ap.ssid, IP2STR(&ip_info.ip)); wifi_state_change(true, true); break; } @@ -206,7 +206,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { switch (mode) { case WIFI_MODE_STA: - ESP_LOGI(tag, "\n*** SENSOR IP (network '%s') http://"IPSTR"\n", oap_wifi_config.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); + ESP_LOGI(tag, "\n\n*** SENSOR IP (network '%s') http://"IPSTR"\n", oap_wifi_config.ssid, IP2STR(&event->event_info.got_ip.ip_info.ip)); initialize_sntp(); /* diff --git a/components/esp-request/esp_request.c b/components/esp-request/esp_request.c index 59c76bc..29f4596 100644 --- a/components/esp-request/esp_request.c +++ b/components/esp-request/esp_request.c @@ -32,14 +32,14 @@ #include "freertos/semphr.h" #include "oap_common.h" -#define MEM "http" +#define TAG "http" #define SSL_MUTEX 1 static const char *pers = "esp32-tls"; #define REQ_BUFFER_LEN (2048) -#define REQ_CHECK(check, log, ret) if(check) {ESP_LOGE(MEM, log);ret;} +#define REQ_CHECK(check, log, ret) if(check) {ESP_LOGW(TAG, log);ret;} #ifdef MBEDTLS_DEBUG_C @@ -143,7 +143,7 @@ static int nossl_connect(request_t *req) tv.tv_usec = 0; setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); - ESP_LOGD(MEM, "[sock=%d],connecting to server IP:%s,Port:%s...", + ESP_LOGD(TAG, "[sock=%d],connecting to server IP:%s,Port:%s...", socket, ipaddr_ntoa((const ip_addr_t*)&remote_ip.sin_addr.s_addr), (char*)port->value); if(connect(socket, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr)) != 0) { close(socket); @@ -165,7 +165,7 @@ mbedtls_x509_crt* req_parse_x509_crt(unsigned char *buf, size_t buflen) { if (ret == ESP_OK) { return crt; } else { - ESP_LOGW(MEM, "failed to parse x509 cert: 0x%x", ret); + ESP_LOGW(TAG, "failed to parse x509 cert: 0x%x", ret); req_free_x509_crt(crt); return NULL; } @@ -183,7 +183,7 @@ mbedtls_pk_context* req_parse_pkey(unsigned char* buf, size_t buflen) { if (ret == ESP_OK) { return pkey; } else { - ESP_LOGW(MEM, "failed to parse key: 0x%x", -ret); + ESP_LOGW(TAG, "failed to parse key: 0x%x", -ret); req_free_pkey(pkey); return NULL; } @@ -203,7 +203,7 @@ static int mbedtls_connect(request_t *req) #if SSL_MUTEX if (!ssl_semaphore) ssl_semaphore = xSemaphoreCreateMutex(); if(!xSemaphoreTake( ssl_semaphore, ( TickType_t ) 10000 / portTICK_PERIOD_MS )) { - ESP_LOGW(MEM, "couldn't acquire lock for SSL request"); + ESP_LOGW(TAG, "couldn't acquire lock for SSL request"); return ESP_FAIL; } #endif @@ -221,12 +221,12 @@ static int mbedtls_connect(request_t *req) mbedtls_ctr_drbg_init(&ssl->drbg_ctx); do { - ESP_LOGV(MEM, "Seeding the random number generator"); + ESP_LOGV(TAG, "Seeding the random number generator"); mbedtls_entropy_init(&ssl->entropy_ctx); if ((ret = mbedtls_ctr_drbg_seed(&ssl->drbg_ctx, mbedtls_entropy_func, &ssl->entropy_ctx, (const unsigned char *) pers, strlen(pers))) != ESP_OK) { - ESP_LOGW(MEM, "mbedtls_ctr_drbg_seed returned %d", -ret); + ESP_LOGW(TAG, "mbedtls_ctr_drbg_seed returned %d", -ret); break; } @@ -235,7 +235,7 @@ static int mbedtls_connect(request_t *req) MBEDTLS_SSL_VERIFY_NONE if not. */ if (req->ca_cert) { - ESP_LOGD(MEM, "Set CA certificate"); + ESP_LOGD(TAG, "Set CA certificate"); mbedtls_ssl_conf_authmode(&ssl->ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); mbedtls_ssl_conf_ca_chain(&ssl->ssl_conf, req->ca_cert, NULL); //mbedtls_ssl_conf_verify(&ssl->ssl_ctx, my_verify, NULL ); @@ -244,9 +244,9 @@ static int mbedtls_connect(request_t *req) } if (req->client_cert && req->client_key) { - ESP_LOGD(MEM, "Set client cert/pkey"); + ESP_LOGD(TAG, "Set client cert/pkey"); if ((ret = mbedtls_ssl_conf_own_cert(&ssl->ssl_conf, req->client_cert, req->client_key)) != ESP_OK) { - ESP_LOGW(MEM, "mbedtls_ssl_conf_own_cert returned 0x%x", -ret); + ESP_LOGW(TAG, "mbedtls_ssl_conf_own_cert returned 0x%x", -ret); break; } } @@ -254,17 +254,17 @@ static int mbedtls_connect(request_t *req) // Hostname set here should match CN in server certificate if((ret = mbedtls_ssl_set_hostname(&ssl->ssl_ctx, req_list_get_key(req->opt, "host")->value)) != ESP_OK) { - ESP_LOGW(MEM, "mbedtls_ssl_set_hostname returned 0x%x", -ret); + ESP_LOGW(TAG, "mbedtls_ssl_set_hostname returned 0x%x", -ret); break; } - ESP_LOGD(MEM, "Setting up the SSL/TLS structure..."); + ESP_LOGD(TAG, "Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&ssl->ssl_conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != ESP_OK) { - ESP_LOGW(MEM, "mbedtls_ssl_config_defaults returned 0x%x", -ret); + ESP_LOGW(TAG, "mbedtls_ssl_config_defaults returned 0x%x", -ret); break; } @@ -275,13 +275,13 @@ static int mbedtls_connect(request_t *req) #endif if ((ret = mbedtls_ssl_setup(&ssl->ssl_ctx, &ssl->ssl_conf)) != ESP_OK) { - ESP_LOGW(MEM, "mbedtls_ssl_setup returned 0x%x", -ret); + ESP_LOGW(TAG, "mbedtls_ssl_setup returned 0x%x", -ret); break; } mbedtls_ssl_set_bio(&ssl->ssl_ctx, &req->socket, mbedtls_net_send, mbedtls_net_recv, NULL ); - ESP_LOGD(MEM, "Performing the SSL/TLS handshake..."); + ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); int attempts = 0; while ((ret = mbedtls_ssl_handshake(&ssl->ssl_ctx)) != ESP_OK && attempts < 10) { @@ -289,11 +289,11 @@ static int mbedtls_connect(request_t *req) // ret = 0x4c happens from time to time, esp just after network init - sometimes it recovers, sometimes it doesn't // it cannot recover from 0x4e (no network) if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != 0x4c) { - ESP_LOGW(MEM, "mbedtls_ssl_handshake returned 0x%x", -ret); + ESP_LOGW(TAG, "mbedtls_ssl_handshake returned 0x%x", -ret); break; } attempts++; - ESP_LOGD(MEM, "handshake failed (0x%x), try again (%d)", -ret, attempts); + ESP_LOGD(TAG, "handshake failed (0x%x), try again (%d)", -ret, attempts); vTaskDelay(10 / portTICK_PERIOD_MS); vPortYield(); } @@ -304,23 +304,23 @@ static int mbedtls_connect(request_t *req) if (req->client_cert && req->client_key) { if ((ret = mbedtls_ssl_get_record_expansion(&ssl->ssl_ctx)) >= 0) { - ESP_LOGV(MEM, "Record expansion is %d", ret); + ESP_LOGV(TAG, "Record expansion is %d", ret); } else { - ESP_LOGV(MEM, "Record expansion is unknown (compression)"); //not error + ESP_LOGV(TAG, "Record expansion is unknown (compression)"); //not error } } - ESP_LOGD(MEM, "Verifying peer X.509 certificate..."); + ESP_LOGD(TAG, "Verifying peer X.509 certificate..."); if ((ret = mbedtls_ssl_get_verify_result(&ssl->ssl_ctx)) != ESP_OK) { - ESP_LOGW(MEM, "Failed to verify peer certificate!"); + ESP_LOGW(TAG, "Failed to verify peer certificate!"); char buf[512]; bzero(buf, sizeof(buf)); mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", ret); - ESP_LOGW(MEM, "verification info: %s", buf); + ESP_LOGW(TAG, "verification info: %s", buf); break; } else { - ESP_LOGD(MEM, "Certificate verified."); + ESP_LOGD(TAG, "Certificate verified."); } } while (0); @@ -333,7 +333,7 @@ static int mbedtls_write(request_t *req, char *buffer, int len) int ret = -1; while ((ret = mbedtls_ssl_write(&req->ssl->ssl_ctx, (unsigned char *)buffer, len)) <= 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret != -76) { - ESP_LOGW(MEM, "mbedtls_ssl_write returned 0x%x", ret); + ESP_LOGW(TAG, "mbedtls_ssl_write returned 0x%x", ret); break; } } @@ -353,10 +353,10 @@ static int mbedtls_read(request_t *req, char *buffer, int len) if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { continue; } else if (ret == -0x4C) { - ESP_LOGW(MEM, "timeout"); + ESP_LOGW(TAG, "timeout"); break; } else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { - ESP_LOGW(MEM, "peer close"); + ESP_LOGD(TAG, "peer close"); //this is expected for Connection: close break; } else { break; @@ -372,7 +372,7 @@ static int nossl_read(request_t *req, char *buffer, int len) static int mbedtls_close(request_t *req) { - ESP_LOGD(MEM, "Cleaning SSL connection."); + ESP_LOGD(TAG, "Cleaning SSL connection."); close(req->socket); if (req->ssl) { @@ -522,7 +522,7 @@ void req_setopt(request_t *req, REQ_OPTS opt, void* data) case REQ_SET_SECURITY: req_list_set_key(req->opt, "secure", data); if(req_list_check_key(req->opt, "secure", "true")) { - ESP_LOGD(MEM, "Secure"); + ESP_LOGD(TAG, "Secure"); req->_read = mbedtls_read; req->_write = mbedtls_write; req->_connect = mbedtls_connect; @@ -586,11 +586,11 @@ static int req_process_upload(request_t *req) found = req_list_get_key(req->opt, "postfield"); if(found) { - ESP_LOGV(MEM, "begin write %d bytes", strlen((char*)found->value)); + ESP_LOGV(TAG, "begin write %d bytes", strlen((char*)found->value)); int bwrite = req->_write(req, (char*)found->value, strlen((char*)found->value)); - ESP_LOGV(MEM, "end write %d bytes", bwrite); + ESP_LOGV(TAG, "end write %d bytes", bwrite); if(bwrite < 0) { - ESP_LOGW(MEM, "error write"); + ESP_LOGW(TAG, "error write"); return -1; } } @@ -625,7 +625,7 @@ static int fill_buffer(request_t *req) req->buffer->bytes_write = bytes_inside_buffer; if(req->buffer->bytes_write < 0) req->buffer->bytes_write = 0; - ESP_LOGV(MEM, "move=%d, write=%d, read=%d", bytes_inside_buffer, req->buffer->bytes_write, req->buffer->bytes_read); + ESP_LOGV(TAG, "move=%d, write=%d, read=%d", bytes_inside_buffer, req->buffer->bytes_write, req->buffer->bytes_read); } if(!req->buffer->at_eof) { @@ -635,10 +635,10 @@ static int fill_buffer(request_t *req) req->buffer->bytes_read = 0; } buffer_free_bytes = req->buffer_size - req->buffer->bytes_write; - ESP_LOGV(MEM, "Begin read %d bytes", buffer_free_bytes); + ESP_LOGV(TAG, "Begin read %d bytes", buffer_free_bytes); bread = req->_read(req, (void*)(req->buffer->data + req->buffer->bytes_write), buffer_free_bytes); // ESP_LOGD(TAG, "bread = %d, bytes_write = %d, buffer_free_bytes = %d", bread, req->buffer->bytes_write, buffer_free_bytes); - ESP_LOGV(MEM, "End read, byte read= %d bytes", bread); + ESP_LOGV(TAG, "End read, byte read= %d bytes", bread); if(bread < 0) { req->buffer->at_eof = 1; return -1; @@ -685,7 +685,7 @@ static int req_process_download(request_t *req) if(process_header) { while((line = req_readline(req)) != NULL) { if(line[0] == 0) { - ESP_LOGV(MEM, "end process_idx=%d", req->buffer->bytes_read); + ESP_LOGV(TAG, "end process_idx=%d", req->buffer->bytes_read); header_off = req->buffer->bytes_read; process_header = 0; //end of http header break; @@ -696,11 +696,11 @@ static int req_process_download(request_t *req) char statusCode[4] = { 0 }; memcpy(statusCode, temp + 9, 3); req->response->status_code = atoi(statusCode); - ESP_LOGD(MEM, "status code: %d", req->response->status_code); + ESP_LOGD(TAG, "status code: %d", req->response->status_code); } } else { req_list_set_from_string(req->response->header, line); - ESP_LOGV(MEM, "header line: %s", line); + ESP_LOGV(TAG, "header line: %s", line); } } } @@ -739,20 +739,20 @@ static int req_process_download(request_t *req) int req_perform(request_t *req) { do { - ESP_LOGD(MEM, "%s %s%s", + ESP_LOGD(TAG, "%s %s%s", (char*)req_list_get_key(req->opt, "method")->value, (char*)req_list_get_key(req->opt, "host")->value, (char*)req_list_get_key(req->opt, "path")->value); - REQ_CHECK(req->_connect(req) < 0, "Error connnect", break); - REQ_CHECK(req_process_upload(req) < 0, "Error send request", break); - REQ_CHECK(req_process_download(req) < 0, "Error download", break); + REQ_CHECK(req->_connect(req) < 0, "error connect", break); + REQ_CHECK(req_process_upload(req) < 0, "error send request", break); + REQ_CHECK(req_process_download(req) < 0, "error download", break); if((req->response->status_code == 301 || req->response->status_code == 302) && req_list_check_key(req->opt, "follow", "true")) { req_list_t *found = req_list_get_key(req->response->header, "Location"); if(found) { req_list_set_key(req->header, "Referer", (const char*)found->value); req_setopt_from_uri(req, (const char*)found->value); - ESP_LOGD(MEM, "Following: %s", (char*)found->value); + ESP_LOGD(TAG, "Following: %s", (char*)found->value); req->_close(req); continue; } diff --git a/components/oap_common/oap_debug.c b/components/oap_common/oap_debug.c index 98379c0..19c554a 100644 --- a/components/oap_common/oap_debug.c +++ b/components/oap_common/oap_debug.c @@ -29,7 +29,7 @@ #include "esp_log.h" #include "freertos/task.h" -#define MEM "mem" +#define TAG "mem" /** * this method is surprisingly stack heavy - it takes ~ 1000 bytes. * before using it, adjust task stack accordingly. @@ -37,7 +37,7 @@ void log_task_stack(const char* task) { //uxTaskGetStackHighWaterMark is marked as UNTESTED #if !CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION - ESP_LOGD(MEM, "stack min (%d) - task '%s'", uxTaskGetStackHighWaterMark( NULL ), task); + ESP_LOGD(TAG, "stack min (%d) - task '%s'", uxTaskGetStackHighWaterMark( NULL ), task); #endif } @@ -47,7 +47,7 @@ static size_t last_free_heap = 0; void log_heap_size(const char* msg) { size_t free_heap = xPortGetFreeHeapSize(); if (last_free_heap == 0) last_free_heap = free_heap; - ESP_LOGD(MEM, "heap min (%d) free (%d) change (%d) - '%s'", + ESP_LOGD(TAG, "heap min (%d) free (%d) change (%d) - '%s'", xPortGetMinimumEverFreeHeapSize(), free_heap, free_heap-last_free_heap, msg); last_free_heap = free_heap; @@ -57,13 +57,13 @@ static void* dummy; void reduce_heap_size_to(size_t size) { size_t reduce_by = xPortGetFreeHeapSize() - size; if (reduce_by > 0) { - ESP_LOGE(MEM, "********************** REDUCE HEAP BY %d TO %d bytes !!!!!!!!!!!", reduce_by, size); + ESP_LOGE(TAG, "********************** REDUCE HEAP BY %d TO %d bytes !!!!!!!!!!!", reduce_by, size); do { size_t block = reduce_by > 10000 ? 10000 : reduce_by; reduce_by-=block; dummy = malloc(block); if (!dummy) { - ESP_LOGE(MEM, "FAILED TO ALLOCATE!"); + ESP_LOGE(TAG, "FAILED TO ALLOCATE!"); } } while (reduce_by > 0); } diff --git a/components/oap_common/oap_storage.c b/components/oap_common/oap_storage.c index 4d89eff..302f193 100644 --- a/components/oap_common/oap_storage.c +++ b/components/oap_common/oap_storage.c @@ -281,7 +281,7 @@ cJSON* storage_get_config_to_update() { return copy; } -static void unmask_sensitive_fields(const cJSON* new_config, const cJSON* old_config) { +static void unmask_sensitive_fields(cJSON* new_config, cJSON* old_config) { if (old_config) { cJSON* wifi = cJSON_GetObjectItem(new_config, "wifi"); if (wifi) { @@ -301,7 +301,7 @@ static void unmask_sensitive_fields(const cJSON* new_config, const cJSON* old_co } } -void storage_update_config(const cJSON* config) { +void storage_update_config(cJSON* config) { ESP_LOGD(TAG, "update config"); if (!config) return; unmask_sensitive_fields(config, _config); @@ -321,8 +321,8 @@ static void storage_init_config() { ESP_LOGD(TAG, "get config"); int err; - if ((err = storage_get_bigblob("config", &str, NULL)) == ESP_ERR_NVS_NOT_FOUND) { - err = storage_get_blob("config", &str, NULL); //backward comp, config used to be stored as single string + if ((err = storage_get_bigblob("config", (void**)&str, NULL)) == ESP_ERR_NVS_NOT_FOUND) { + err = storage_get_blob("config", (void**)&str, NULL); //backward comp, config used to be stored as single string } cJSON* stored = NULL; diff --git a/components/oap_common/oap_version.c b/components/oap_common/oap_version.c index 920b6ae..b8b3f7e 100644 --- a/components/oap_common/oap_version.c +++ b/components/oap_common/oap_version.c @@ -53,7 +53,7 @@ unsigned long oap_version_num(oap_version_t ver) { esp_err_t oap_version_parse(char* str, oap_version_t* ver) { - int i = 0, j = 0; + int i = 0; while (str[i] != 0 && str[i] != '.') i++; if (str[i] != '.') return ESP_FAIL; int major = atoi(str); diff --git a/components/ota/Kconfig b/components/ota/Kconfig index 0f06003..6bc6a35 100644 --- a/components/ota/Kconfig +++ b/components/ota/Kconfig @@ -4,11 +4,11 @@ config OAP_OTA_ENABLED int "enable OTA updates" default 1 help - todo + enable automatic over-the-air updates config OAP_OTA_BIN_URI_PREFIX string "bin uri prefix" - default "https://github.com/openairproject/sensor-esp32/releases/" + default "https://openairproject.com/ota/" help This prefix will be used to construct a full URI of a binary with OTA file. It is recommended to define as strictly as possible to increase security. @@ -16,7 +16,7 @@ config OAP_OTA_BIN_URI_PREFIX config OAP_OTA_INDEX_URI string "index uri" - default "https://raw.githubusercontent.com/openairproject/sensor-esp32/gitota/ota/index.txt" + default "https://openairproject.com/ota/index.txt"" help full URI to file with OTA definition diff --git a/components/ota/ota.c b/components/ota/ota.c index 39206f4..fac443d 100644 --- a/components/ota/ota.c +++ b/components/ota/ota.c @@ -40,7 +40,7 @@ #include "esp_request.h" #include "mbedtls/sha256.h" -#define MEM "ota" +#define TAG "ota" extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); @@ -91,20 +91,20 @@ esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len) { } while(line[i] && i < len); if (!ver) { - ESP_LOGW(MEM, "malformed status (no version)"); + ESP_LOGW(TAG, "malformed status (no version)"); goto fail; } if (!file) { - ESP_LOGW(MEM, "malformed status (no file)"); + ESP_LOGW(TAG, "malformed status (no file)"); goto fail; } if (!sha) { - ESP_LOGW(MEM, "malformed status (no sha)"); + ESP_LOGW(TAG, "malformed status (no sha)"); goto fail; } if (oap_version_parse(ver, &ota_info->ver) != ESP_OK) { - ESP_LOGW(MEM, "malformed status (invalid version: '%s')", ver); + ESP_LOGW(TAG, "malformed status (invalid version: '%s')", ver); goto fail; } ota_info->file = file; @@ -121,12 +121,12 @@ esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len) { static int get_ota_status_callback(request_t *req, char *data, int len) { - ESP_LOGD(MEM,"index:\n%s", data); + ESP_LOGD(TAG,"index:\n%s", data); ost_status_result_t* result = req->meta; if (req->response->status_code == 200 && !result->found) { result->found = 1; result->err = parse_ota_info(&result->binary, data, len); - ESP_LOGD(MEM, "parse ota info line... [0x%x]", result->err); + ESP_LOGD(TAG, "parse ota info line... [0x%x]", result->err); } return 0; } @@ -142,7 +142,7 @@ void free_ota_info(ota_info_t* ota_info) { esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) { - ESP_LOGI(MEM, "fetch ota info from %s", ota_config->index_uri); + ESP_LOGI(TAG, "fetch ota info from %s", ota_config->index_uri); request_t* req = req_new(ota_config->index_uri); if (!req) { return OAP_OTA_ERR_REQUEST_FAILED; @@ -166,7 +166,7 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) req_clean(req); if (status != 200) { - ESP_LOGW(MEM, "error response code=%d", status); + ESP_LOGW(TAG, "error response code=%d", status); return OAP_OTA_ERR_REQUEST_FAILED; } @@ -183,26 +183,26 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) typedef struct { mbedtls_sha256_context* sha_context; - esp_partition_t *update_partition; + esp_ota_handle_t ota_handle; } ota_download_callback_meta; -static int download_ota_binary_callback(request_t *req, char *data, int len) +static int download_ota_binary_callback(request_t *req, char *data, size_t len) { ota_download_callback_meta* meta = req->meta; mbedtls_sha256_update(meta->sha_context, (unsigned char *)data, len); - if (meta->update_partition) { - return esp_ota_write(meta->update_partition, (const void *)data, len); + if (meta->ota_handle) { + return esp_ota_write(meta->ota_handle, (const void *)data, len); } else { return 0; } } -esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition) +static esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_ota_handle_t ota_handle) { char file_uri[300]; sprintf(file_uri, "%s%s", ota_config->bin_uri_prefix, ota_info->file); - ESP_LOGI(MEM, "download ota binary from %s", file_uri); + ESP_LOGI(TAG, "download ota binary from %s", file_uri); request_t* req = req_new(file_uri); if (!req) { @@ -219,29 +219,29 @@ esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, es ota_download_callback_meta meta = { .sha_context = &sha_context, - .update_partition = update_partition + .ota_handle = ota_handle }; req->meta = &meta; int status = req_perform(req); - ESP_LOGI(MEM, "status=%d", status); + ESP_LOGI(TAG, "status=%d", status); esp_err_t ret; if (status == 200) { - ESP_LOGI(MEM, "ota file downloaded"); + ESP_LOGI(TAG, "ota file downloaded"); ret = ESP_OK; unsigned char hash[32]; mbedtls_sha256_finish(&sha_context, hash); char* hex = sha_to_hex(hash); - ESP_LOGI(MEM, "file sha256=%s", hex); + ESP_LOGI(TAG, "file sha256=%s", hex); if (strcmp(hex, ota_info->sha) != 0) { - ESP_LOGE(MEM, "invalid sha (expected: %s)", ota_info->sha); + ESP_LOGE(TAG, "invalid sha (expected: %s)", ota_info->sha); ret = OAP_OTA_ERR_SHA_MISMATCH; } free(hex); } else { - ESP_LOGW(MEM, "error response code=%d", status); + ESP_LOGW(TAG, "error response code=%d", status); ret = OAP_OTA_ERR_REQUEST_FAILED; } @@ -255,13 +255,13 @@ esp_err_t is_ota_update_available(ota_config_t* ota_config, ota_info_t* ota_info if (err == ESP_OK) { unsigned long remote_ver = oap_version_num(ota_info->ver); if (remote_ver <= ota_config->min_version) { - ESP_LOGD(MEM, "remote ver: %lu <= min ver: %lu", remote_ver, ota_config->min_version); + ESP_LOGD(TAG, "remote ver: %lu <= min ver: %lu", remote_ver, ota_config->min_version); err = OAP_OTA_ERR_NO_UPDATES; } else { - ESP_LOGD(MEM, "new update found (%lu)", remote_ver); + ESP_LOGD(TAG, "new update found (%lu)", remote_ver); } } else { - ESP_LOGD(MEM, "fetch_last_ota_info failed [0x%x]", err); + ESP_LOGD(TAG, "fetch_last_ota_info failed [0x%x]", err); } return err; } @@ -270,16 +270,16 @@ esp_err_t check_ota(ota_config_t* ota_config) { const esp_partition_t* running_partition = esp_ota_get_running_partition(); - ESP_LOGI(MEM, "running partition = %s", running_partition->label); + ESP_LOGI(TAG, "running partition = %s", running_partition->label); - if (ota_config->update_partition == NULL) { + if (!ota_config->update_partition) { ota_config->update_partition = esp_ota_get_next_update_partition(NULL); } if (ota_config->update_partition == NULL) { - ESP_LOGE(MEM, "no suitable OTA partition found"); + ESP_LOGE(TAG, "no suitable OTA partition found"); return ESP_FAIL; } - ESP_LOGI(MEM, "update partition = %s", ota_config->update_partition->label); + ESP_LOGI(TAG, "update partition = %s", ota_config->update_partition->label); esp_err_t err; esp_ota_handle_t update_handle = 0; ota_info_t ota_info = { @@ -292,52 +292,52 @@ esp_err_t check_ota(ota_config_t* ota_config) { goto go_sleep; } - ESP_LOGD(MEM, "Check for OTA updates..."); - log_task_stack(MEM); + ESP_LOGD(TAG, "Check for OTA updates..."); + log_task_stack(TAG); if ((err = is_ota_update_available(ota_config, &ota_info)) != ESP_OK) goto go_sleep; char* verstr = oap_version_format(ota_info.ver); - ESP_LOGW(MEM,"NEW FIRMWARE AVAILABLE: %s", verstr); + ESP_LOGW(TAG,"NEW FIRMWARE AVAILABLE: %s", verstr); free(verstr); - ESP_LOGI(MEM, "Writing to partition subtype %d at offset 0x%x", + ESP_LOGI(TAG, "Writing to partition subtype %d at offset 0x%x", ota_config->update_partition->subtype, ota_config->update_partition->address); err = esp_ota_begin(ota_config->update_partition, OTA_SIZE_UNKNOWN, &update_handle); if (err != ESP_OK) { - ESP_LOGE(MEM, "esp_ota_begin failed [0x%x]", err); + ESP_LOGE(TAG, "esp_ota_begin failed [0x%x]", err); goto fail; } - ESP_LOGI(MEM, "esp_ota_begin succeeded"); + ESP_LOGI(TAG, "esp_ota_begin succeeded"); //download if ((err = download_ota_binary(ota_config, &ota_info, update_handle)) != ESP_OK) { - ESP_LOGE(MEM, "download_ota_binary failed [0x%x]", err); + ESP_LOGE(TAG, "download_ota_binary failed [0x%x]", err); goto fail; } if ((err=esp_ota_end(update_handle)) != ESP_OK) { - ESP_LOGE(MEM, "esp_ota_end failed [0x%x]", err); + ESP_LOGE(TAG, "esp_ota_end failed [0x%x]", err); goto fail; } if (ota_config->commit_and_reboot) { if ((err = esp_ota_set_boot_partition(ota_config->update_partition)) != ESP_OK) { - ESP_LOGE(MEM, "esp_ota_set_boot_partition failed [0x%x]", err); + ESP_LOGE(TAG, "esp_ota_set_boot_partition failed [0x%x]", err); goto fail; } - ESP_LOGW(MEM, "OTA applied. Prepare to restart system!"); + ESP_LOGW(TAG, "OTA applied. Prepare to restart system!"); oap_reboot(); return ESP_OK; } else { - ESP_LOGW(MEM, "OTA downloaded but configured to be ignored"); + ESP_LOGW(TAG, "OTA downloaded but configured to be ignored"); goto go_sleep; } fail: - ESP_LOGE(MEM,"Interrupt OTA"); + ESP_LOGE(TAG,"Interrupt OTA"); go_sleep: free_ota_info(&ota_info); @@ -345,7 +345,7 @@ esp_err_t check_ota(ota_config_t* ota_config) { if (ota_config->interval <= 0) { break; } else { - ESP_LOGD(MEM, "sleep for %d sec", ota_config->interval/1000); + ESP_LOGD(TAG, "sleep for %d sec", ota_config->interval/1000); delay(ota_config->interval); } } @@ -367,7 +367,7 @@ void start_ota_task(cJSON* user_ota_config) { if (!user_ota_config || !(ota_interval = cJSON_GetObjectItem(user_ota_config, "interval")) || ota_interval->valueint < 0) { //disable for -1, for 0 it will run once at startup - ESP_LOGI(MEM, "OTA disabled"); + ESP_LOGI(TAG, "OTA disabled"); } else { ota_config.bin_uri_prefix = OAP_OTA_BIN_URI_PREFIX; ota_config.index_uri = OAP_OTA_INDEX_URI; @@ -375,9 +375,9 @@ void start_ota_task(cJSON* user_ota_config) { ota_config.commit_and_reboot = 1; ota_config.update_partition = NULL; ota_config.interval = 1000 * ota_interval->valueint; - xTaskCreate(check_ota_task, "check_ota_task", 1024*6, &ota_config, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate((TaskFunction_t)check_ota_task, "check_ota_task", 1024*6, &ota_config, DEFAULT_TASK_PRIORITY, NULL); } } else { - ESP_LOGI(MEM, "OTA not available"); + ESP_LOGI(TAG, "OTA not available"); } } diff --git a/components/ota/ota_int.h b/components/ota/ota_int.h index 8ea788f..c7a5f58 100644 --- a/components/ota/ota_int.h +++ b/components/ota/ota_int.h @@ -40,7 +40,7 @@ typedef struct { char* index_uri; unsigned int interval; // for <=0 it checks only once int commit_and_reboot; - esp_partition_t *update_partition; + const esp_partition_t *update_partition; unsigned long min_version; } ota_config_t; @@ -60,7 +60,6 @@ esp_err_t is_ota_available(ota_config_t* ota_config, ota_info_t* ota_info); */ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info); void free_ota_info(ota_info_t* ota_info); -esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_info, esp_partition_t *update_partition); esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len); esp_err_t check_ota(ota_config_t* ota_config); diff --git a/components/pm_meter/meas_intervals.c b/components/pm_meter/meas_intervals.c index 429b1c0..af0603d 100644 --- a/components/pm_meter/meas_intervals.c +++ b/components/pm_meter/meas_intervals.c @@ -141,7 +141,6 @@ static void task() { } static TaskHandle_t task_handle = NULL; - static void start(pm_sensor_enable_handler_pair_t* pm_sensor_handlers, pm_meter_intervals_params_t* params, pm_meter_output_f callback) { ESP_LOGI(TAG, "start"); _callback = callback; @@ -167,6 +166,6 @@ static void stop() { pm_meter_t pm_meter_intervals = { .input = &collect, - .start = &start, + .start = (pm_meter_start_f)&start, .stop = &stop }; diff --git a/components/pm_meter/test/test_pm_meter.c b/components/pm_meter/test/test_pm_meter.c index 093e045..9392556 100644 --- a/components/pm_meter/test/test_pm_meter.c +++ b/components/pm_meter/test/test_pm_meter.c @@ -32,7 +32,7 @@ static int fake_sensor0_enabled = 0; static int fake_sensor1_enabled = 0; static list_t* strategy_events = NULL; -#define MEM "test" +#define TAG "test" typedef struct { pm_meter_event_t event_type; @@ -47,15 +47,15 @@ static void strategy_callback(pm_meter_event_t event, void* data) { record->event_type = event; switch (event) { case PM_METER_START: - ESP_LOGI(MEM, "MEAS_START"); + ESP_LOGI(TAG, "MEAS_START"); break; case PM_METER_RESULT : - ESP_LOGI(MEM, "MEAS_RESULT"); + ESP_LOGI(TAG, "MEAS_RESULT"); record->result = malloc(sizeof(pm_data_pair_t)); memcpy(record->result, data, sizeof(pm_data_pair_t)); break; case PM_METER_ERROR: - ESP_LOGI(MEM, "MEAS_ERROR: %s", (char*)data); + ESP_LOGI(TAG, "MEAS_ERROR: %s", (char*)data); record->error = strdup((char*)data); break; } @@ -143,7 +143,7 @@ TEST_CASE("meas intervals","[meas]") { //check if (!result_record) { - list_deleteListAndValues(strategy_events, &free_record); + list_deleteListAndValues(strategy_events, (node_value_predicate)&free_record); TEST_FAIL_MESSAGE("timeout while waiting for measurement result_record"); } else { pm_data_pair_t* meas_data = ((test_meas_record_t*)(result_record->value))->result; @@ -160,7 +160,7 @@ TEST_CASE("meas intervals","[meas]") { TEST_ASSERT_EQUAL_INT16(2, meas_data->pm_data[1].pm2_5); TEST_ASSERT_EQUAL_INT16(3, meas_data->pm_data[1].pm10); TEST_ASSERT_FALSE_MESSAGE(fake_sensor1_enabled, "sensor1 not disabled after measurement"); - list_deleteListAndValues(strategy_events, &free_record); + list_deleteListAndValues(strategy_events, (node_value_predicate)&free_record); } } diff --git a/components/pmsx003/pmsx003.c b/components/pmsx003/pmsx003.c index 789958d..9909321 100644 --- a/components/pmsx003/pmsx003.c +++ b/components/pmsx003/pmsx003.c @@ -115,7 +115,7 @@ esp_err_t pms_uart_read(pmsx003_config_t* config, uint8_t data[32]) { } static void pms_task(pmsx003_config_t* config) { - uint8_t* data[32]; + uint8_t data[32]; while(1) { pms_uart_read(config, data); } @@ -140,7 +140,7 @@ esp_err_t pmsx003_init(pmsx003_config_t* config) { sprintf(task_name, "pms_sensor_%d", config->sensor_idx); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) - xTaskCreate(pms_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + xTaskCreate((TaskFunction_t)pms_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo } diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 86d2133..61d269d 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -71,11 +71,6 @@ CONFIG_MONITOR_BAUD_115200B=y CONFIG_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_MONITOR_BAUD=115200 -# -# OpenAirProject -# -CONFIG_OAP_CONTROL_PANEL=1 - # # Partition Table # @@ -88,29 +83,15 @@ CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" CONFIG_APP_OFFSET=0x30000 # -# Compiler options +# OpenAirProject # +CONFIG_OAP_CONTROL_PANEL=1 CONFIG_OPTIMIZATION_LEVEL_DEBUG=y # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set # # Component config # - -# -# Application Level Tracing -# -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -# CONFIG_ESP32_APPTRACE_ENABLE is not set -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y - -# -# FreeRTOS SystemView Tracing -# # CONFIG_AWS_IOT_SDK is not set # @@ -142,7 +123,6 @@ CONFIG_BT_RESERVE_DRAM=0 CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 CONFIG_MEMMAP_SMP=y -# CONFIG_SPIRAM_SUPPORT is not set # CONFIG_MEMMAP_TRACEMEM is not set # CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set # CONFIG_ESP32_TRAX is not set @@ -151,6 +131,10 @@ CONFIG_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y # CONFIG_ESP32_ENABLE_COREDUMP is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +# CONFIG_ESP32_APPTRACE_DEST_UART is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +# CONFIG_ESP32_APPTRACE_ENABLE is not set # CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 @@ -158,13 +142,7 @@ CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2048 CONFIG_MAIN_TASK_STACK_SIZE=10000 CONFIG_IPC_TASK_STACK_SIZE=1024 -CONFIG_TIMER_TASK_STACK_SIZE=4096 -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +CONFIG_NEWLIB_STDOUT_ADDCR=y # CONFIG_NEWLIB_NANO_FORMAT is not set CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set @@ -184,16 +162,6 @@ CONFIG_TASK_WDT=y # CONFIG_TASK_WDT_PANIC is not set CONFIG_TASK_WDT_TIMEOUT_S=5 CONFIG_TASK_WDT_CHECK_IDLE_TASK=y -CONFIG_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_BROWNOUT_DET_LVL=0 # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set @@ -206,12 +174,7 @@ CONFIG_ESP32_XTAL_FREQ_40=y # CONFIG_ESP32_XTAL_FREQ_26 is not set # CONFIG_ESP32_XTAL_FREQ_AUTO is not set CONFIG_ESP32_XTAL_FREQ=40 -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_NO_BLOBS is not set - -# -# Wi-Fi -# +CONFIG_WIFI_ENABLED=y CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=0 # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set @@ -219,25 +182,17 @@ CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 CONFIG_ESP32_WIFI_AMPDU_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_RX_BA_WIN=6 CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_PHY_ENABLED=y # -# Phy +# PHY # CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 - -# -# Ethernet -# -CONFIG_DMA_RX_BUF_NUM=10 -CONFIG_DMA_TX_BUF_NUM=10 -# CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE is not set -CONFIG_EMAC_TASK_PRIORITY=20 +# CONFIG_ETHERNET is not set # # FAT Filesystem support @@ -279,7 +234,6 @@ CONFIG_FREERTOS_HZ=1000 CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY is not set # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=3 CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set @@ -319,35 +273,12 @@ CONFIG_LWIP_SO_RCVBUF=y CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 # CONFIG_LWIP_IP_FRAG is not set # CONFIG_LWIP_IP_REASSEMBLY is not set - -# -# TCP -# CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=6 -CONFIG_TCP_MSS=1436 -CONFIG_TCP_SND_BUF_DEFAULT=5744 -CONFIG_TCP_WND_DEFAULT=5744 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set - -# -# UDP -# -CONFIG_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set CONFIG_TCPIP_TASK_STACK_SIZE=2560 # CONFIG_PPP_SUPPORT is not set -# -# ICMP -# -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set - # # mbedTLS # @@ -359,72 +290,6 @@ CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y # CONFIG_MBEDTLS_HARDWARE_SHA is not set CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set -CONFIG_MBEDTLS_SSL_PROTO_TLS1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -CONFIG_MBEDTLS_RC4_DISABLED=y -# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set -# CONFIG_MBEDTLS_RC4_ENABLED is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # # OpenSSL @@ -477,15 +342,3 @@ CONFIG_OAP_PM_UART_CTS_PIN_AUX=19 # # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y - -# -# tcpip adapter -# -CONFIG_IP_LOST_TIMER_INTERVAL=120 - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 diff --git a/unit-test-app/sdkconfig.defaults b/unit-test-app/sdkconfig.defaults index e02bc4e..0b6dfd3 100644 --- a/unit-test-app/sdkconfig.defaults +++ b/unit-test-app/sdkconfig.defaults @@ -83,31 +83,12 @@ CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partition_table_unit_test_app.csv" CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x30000 CONFIG_PARTITION_TABLE_FILENAME="partition_table_unit_test_app.csv" CONFIG_APP_OFFSET=0x30000 - -# -# Compiler options -# CONFIG_OPTIMIZATION_LEVEL_DEBUG=y # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set # # Component config # - -# -# Application Level Tracing -# -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -# CONFIG_ESP32_APPTRACE_ENABLE is not set -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y - -# -# FreeRTOS SystemView Tracing -# # CONFIG_AWS_IOT_SDK is not set # @@ -139,7 +120,6 @@ CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y # CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 CONFIG_MEMMAP_SMP=y -# CONFIG_SPIRAM_SUPPORT is not set # CONFIG_MEMMAP_TRACEMEM is not set # CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set # CONFIG_ESP32_TRAX is not set @@ -148,6 +128,10 @@ CONFIG_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y # CONFIG_ESP32_ENABLE_COREDUMP is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +# CONFIG_ESP32_APPTRACE_DEST_UART is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +# CONFIG_ESP32_APPTRACE_ENABLE is not set # CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 @@ -155,13 +139,7 @@ CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 CONFIG_MAIN_TASK_STACK_SIZE=4096 CONFIG_IPC_TASK_STACK_SIZE=1024 -CONFIG_TIMER_TASK_STACK_SIZE=4096 -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +CONFIG_NEWLIB_STDOUT_ADDCR=y # CONFIG_NEWLIB_NANO_FORMAT is not set CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set @@ -178,21 +156,7 @@ CONFIG_ESP32_DEBUG_OCDAWARE=y CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 CONFIG_INT_WDT_CHECK_CPU1=y -CONFIG_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK=y -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -CONFIG_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_BROWNOUT_DET_LVL=0 +# CONFIG_TASK_WDT is not set # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set @@ -205,12 +169,7 @@ CONFIG_ESP32_XTAL_FREQ_40=y # CONFIG_ESP32_XTAL_FREQ_26 is not set # CONFIG_ESP32_XTAL_FREQ_AUTO is not set CONFIG_ESP32_XTAL_FREQ=40 -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_NO_BLOBS is not set - -# -# Wi-Fi -# +CONFIG_WIFI_ENABLED=y CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set @@ -218,25 +177,17 @@ CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 CONFIG_ESP32_WIFI_AMPDU_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_RX_BA_WIN=6 CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_PHY_ENABLED=y # -# Phy +# PHY # CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 - -# -# Ethernet -# -CONFIG_DMA_RX_BUF_NUM=10 -CONFIG_DMA_TX_BUF_NUM=10 -# CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE is not set -CONFIG_EMAC_TASK_PRIORITY=20 +# CONFIG_ETHERNET is not set # # FAT Filesystem support @@ -278,7 +229,6 @@ CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=n # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set @@ -318,111 +268,20 @@ CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 # CONFIG_LWIP_IP_FRAG is not set # CONFIG_LWIP_IP_REASSEMBLY is not set - -# -# TCP -# CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=6 -CONFIG_TCP_MSS=1436 -CONFIG_TCP_SND_BUF_DEFAULT=5744 -CONFIG_TCP_WND_DEFAULT=5744 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set - -# -# UDP -# -CONFIG_UDP_RECVMBOX_SIZE=6 CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y CONFIG_TCPIP_TASK_STACK_SIZE=2560 # CONFIG_PPP_SUPPORT is not set -# -# ICMP -# -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set - # # mbedTLS # CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 # CONFIG_MBEDTLS_DEBUG is not set -CONFIG_MBEDTLS_HARDWARE_AES=y -# CONFIG_MBEDTLS_HARDWARE_MPI is not set -# CONFIG_MBEDTLS_HARDWARE_SHA is not set +# CONFIG_MBEDTLS_UNSAFE_ACCELERATION is not set CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set -CONFIG_MBEDTLS_SSL_PROTO_TLS1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -CONFIG_MBEDTLS_RC4_DISABLED=y -# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set -# CONFIG_MBEDTLS_RC4_ENABLED is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # # OpenSSL @@ -475,15 +334,3 @@ CONFIG_OAP_PM_UART_CTS_PIN_AUX=19 # # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y - -# -# tcpip adapter -# -CONFIG_IP_LOST_TIMER_INTERVAL=120 - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 From 2463e71306aeff9315c0c79640fb50b7823f7bc9 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 17:57:15 +0200 Subject: [PATCH 080/200] disable log colors for tests (cleaner jenkins log) --- unit-test-app/sdkconfig.defaults | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unit-test-app/sdkconfig.defaults b/unit-test-app/sdkconfig.defaults index 0b6dfd3..03174c5 100644 --- a/unit-test-app/sdkconfig.defaults +++ b/unit-test-app/sdkconfig.defaults @@ -255,7 +255,7 @@ CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_COLORS=y +CONFIG_LOG_COLORS=n # # LWIP From 338772f3d9c93ab8dddaa1a6e389e70bcf7d16ef Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sat, 7 Oct 2017 20:11:56 +0200 Subject: [PATCH 081/200] prefix all modules to avoid name collision with esp modules --- bin/test_components.sh | 2 +- components/{awsiot => oap-aws}/awsiot.c | 0 components/{awsiot => oap-aws}/awsiot_common.h | 0 components/{awsiot => oap-aws}/awsiot_rest.c | 0 components/{awsiot => oap-aws}/awsiot_rest.h | 0 components/{awsiot => oap-aws}/component.mk | 0 components/{awsiot => oap-aws}/include/awsiot.h | 0 .../test/1cbf751210-certificate.pem.crt | 0 .../test/1cbf751210-private.pem.key | 0 .../test/1cbf751210-public.pem.key | 0 components/{awsiot => oap-aws}/test/component.mk | 0 components/{awsiot => oap-aws}/test/test_awsiot.c | 0 components/{awsiot => oap-aws}/verisign_root_ca.pem | 0 components/{oap_common => oap-common}/c_list.c | 0 components/{oap_common => oap-common}/component.mk | 0 .../{oap_common => oap-common}/include/c_list.h | 0 .../{oap_common => oap-common}/include/oap_common.h | 0 .../{oap_common => oap-common}/include/oap_data.h | 0 .../include/oap_data_env.h | 0 .../include/oap_data_pm.h | 0 .../{oap_common => oap-common}/include/oap_debug.h | 0 .../include/oap_publisher.h | 0 .../include/oap_storage.h | 0 .../include/oap_version.h | 0 components/{oap_common => oap-common}/oap_common.c | 0 components/{oap_common => oap-common}/oap_debug.c | 0 components/{oap_common => oap-common}/oap_storage.c | 0 components/{oap_common => oap-common}/oap_version.c | 0 .../{oap_common => oap-common}/test/.gitignore | 0 components/{bmx280 => oap-common}/test/component.mk | 0 .../test/include/oap_test.h | 0 .../{oap_common => oap-common}/test/oap_test.c | 0 .../{oap_common => oap-common}/test/sandbox.c | 0 .../test/test_oap_storage.c | 0 .../test/test_oap_version.c | 0 components/{esp-request => oap-http}/LICENSE | 0 components/{esp-request => oap-http}/README.md | 0 components/{esp-request => oap-http}/component.mk | 0 components/{esp-request => oap-http}/esp_request.c | 0 .../{esp-request => oap-http}/include/esp_request.h | 0 .../{esp-request => oap-http}/include/req_list.h | 0 .../{esp-request => oap-http}/include/uri_parser.h | 0 components/{esp-request => oap-http}/req_list.c | 0 components/{bootwifi => oap-http}/test/component.mk | 0 .../test/test_esp_request.c | 0 components/{esp-request => oap-http}/uri_parser.c | 0 components/{bmx280 => oap-hw-bmx280}/Kconfig | 0 components/{bmx280 => oap-hw-bmx280}/bmx280.c | 0 components/{bmx280 => oap-hw-bmx280}/component.mk | 0 components/{bmx280 => oap-hw-bmx280}/i2c_bme280.c | 0 components/{bmx280 => oap-hw-bmx280}/i2c_bme280.h | 0 .../{bmx280 => oap-hw-bmx280}/include/bmx280.h | 0 .../test/component.mk | 0 .../{bmx280 => oap-hw-bmx280}/test/test_bmx280.c | 0 components/{peripherals => oap-hw-ext}/Kconfig | 0 components/{peripherals => oap-hw-ext}/component.mk | 0 components/{peripherals => oap-hw-ext}/ctrl_btn.c | 0 .../{peripherals => oap-hw-ext}/include/ctrl_btn.h | 0 .../{peripherals => oap-hw-ext}/include/rgb_led.h | 0 components/{peripherals => oap-hw-ext}/rgb_led.c | 0 components/{pmsx003 => oap-hw-pmsx003}/Kconfig | 0 components/{pmsx003 => oap-hw-pmsx003}/component.mk | 0 .../{pmsx003 => oap-hw-pmsx003}/include/pmsx003.h | 0 components/{pmsx003 => oap-hw-pmsx003}/pmsx003.c | 0 .../test/component.mk | 0 .../{pmsx003 => oap-hw-pmsx003}/test/test_pmsx003.c | 0 components/{pm_meter => oap-meter}/Kconfig | 0 components/{pm_meter => oap-meter}/component.mk | 0 .../include/meas_continuous.h | 0 .../include/meas_intervals.h | 0 .../{pm_meter => oap-meter}/include/pm_meter.h | 0 .../{pm_meter => oap-meter}/meas_continuous.c | 0 components/{pm_meter => oap-meter}/meas_intervals.c | 0 components/{pm_meter => oap-meter}/pm_meter.c | 0 components/{ota => oap-meter}/test/component.mk | 0 .../{pm_meter => oap-meter}/test/test_pm_meter.c | 0 components/{ota => oap-ota}/Kconfig | 0 components/{ota => oap-ota}/comodo_ca.pem | 0 components/{ota => oap-ota}/component.mk | 0 components/{ota => oap-ota}/digicert_ca.crt | Bin components/{ota => oap-ota}/digicert_ca.pem | 0 components/{ota => oap-ota}/include/ota.h | 0 components/{ota => oap-ota}/ota.c | 0 components/{ota => oap-ota}/ota_int.h | 0 components/{pm_meter => oap-ota}/test/component.mk | 0 .../{ota => oap-ota}/test/files/hello-world.bin | Bin .../test/files/index-sha-mismatch.txt | 0 components/{ota => oap-ota}/test/files/index.txt | 0 components/{ota => oap-ota}/test/test_ota.c | 0 .../{thing-speak => oap-thingspk}/component.mk | 0 .../include/thing_speak.h | 0 .../{pmsx003 => oap-thingspk}/test/component.mk | 0 .../test/test_thing_speak.c | 2 +- .../{thing-speak => oap-thingspk}/thing_speak.c | 2 +- components/{bootwifi => oap-wifi}/Kconfig | 0 components/{bootwifi => oap-wifi}/bootwifi.c | 0 components/{bootwifi => oap-wifi}/component.mk | 0 components/{bootwifi => oap-wifi}/cpanel.c | 0 components/{bootwifi => oap-wifi}/cpanel.h | 0 .../{bootwifi => oap-wifi}/include/bootwifi.h | 0 .../{bootwifi => oap-wifi}/include/server_cpanel.h | 0 components/{bootwifi => oap-wifi}/index.html | 0 components/{bootwifi => oap-wifi}/mongoose.c | 0 components/{bootwifi => oap-wifi}/mongoose.h | 0 components/{bootwifi => oap-wifi}/server.c | 0 components/{bootwifi => oap-wifi}/server.h | 0 components/{bootwifi => oap-wifi}/server_cpanel.c | 0 .../{thing-speak => oap-wifi}/test/component.mk | 0 .../{bootwifi => oap-wifi}/test/test_bootwifi.c | 0 main/main.c | 2 +- 110 files changed, 4 insertions(+), 4 deletions(-) rename components/{awsiot => oap-aws}/awsiot.c (100%) rename components/{awsiot => oap-aws}/awsiot_common.h (100%) rename components/{awsiot => oap-aws}/awsiot_rest.c (100%) rename components/{awsiot => oap-aws}/awsiot_rest.h (100%) rename components/{awsiot => oap-aws}/component.mk (100%) rename components/{awsiot => oap-aws}/include/awsiot.h (100%) rename components/{awsiot => oap-aws}/test/1cbf751210-certificate.pem.crt (100%) rename components/{awsiot => oap-aws}/test/1cbf751210-private.pem.key (100%) rename components/{awsiot => oap-aws}/test/1cbf751210-public.pem.key (100%) rename components/{awsiot => oap-aws}/test/component.mk (100%) rename components/{awsiot => oap-aws}/test/test_awsiot.c (100%) rename components/{awsiot => oap-aws}/verisign_root_ca.pem (100%) rename components/{oap_common => oap-common}/c_list.c (100%) rename components/{oap_common => oap-common}/component.mk (100%) rename components/{oap_common => oap-common}/include/c_list.h (100%) rename components/{oap_common => oap-common}/include/oap_common.h (100%) rename components/{oap_common => oap-common}/include/oap_data.h (100%) rename components/{oap_common => oap-common}/include/oap_data_env.h (100%) rename components/{oap_common => oap-common}/include/oap_data_pm.h (100%) rename components/{oap_common => oap-common}/include/oap_debug.h (100%) rename components/{oap_common => oap-common}/include/oap_publisher.h (100%) rename components/{oap_common => oap-common}/include/oap_storage.h (100%) rename components/{oap_common => oap-common}/include/oap_version.h (100%) rename components/{oap_common => oap-common}/oap_common.c (100%) rename components/{oap_common => oap-common}/oap_debug.c (100%) rename components/{oap_common => oap-common}/oap_storage.c (100%) rename components/{oap_common => oap-common}/oap_version.c (100%) rename components/{oap_common => oap-common}/test/.gitignore (100%) rename components/{bmx280 => oap-common}/test/component.mk (100%) rename components/{oap_common => oap-common}/test/include/oap_test.h (100%) rename components/{oap_common => oap-common}/test/oap_test.c (100%) rename components/{oap_common => oap-common}/test/sandbox.c (100%) rename components/{oap_common => oap-common}/test/test_oap_storage.c (100%) rename components/{oap_common => oap-common}/test/test_oap_version.c (100%) rename components/{esp-request => oap-http}/LICENSE (100%) rename components/{esp-request => oap-http}/README.md (100%) rename components/{esp-request => oap-http}/component.mk (100%) rename components/{esp-request => oap-http}/esp_request.c (100%) rename components/{esp-request => oap-http}/include/esp_request.h (100%) rename components/{esp-request => oap-http}/include/req_list.h (100%) rename components/{esp-request => oap-http}/include/uri_parser.h (100%) rename components/{esp-request => oap-http}/req_list.c (100%) rename components/{bootwifi => oap-http}/test/component.mk (100%) rename components/{esp-request => oap-http}/test/test_esp_request.c (100%) rename components/{esp-request => oap-http}/uri_parser.c (100%) rename components/{bmx280 => oap-hw-bmx280}/Kconfig (100%) rename components/{bmx280 => oap-hw-bmx280}/bmx280.c (100%) rename components/{bmx280 => oap-hw-bmx280}/component.mk (100%) rename components/{bmx280 => oap-hw-bmx280}/i2c_bme280.c (100%) rename components/{bmx280 => oap-hw-bmx280}/i2c_bme280.h (100%) rename components/{bmx280 => oap-hw-bmx280}/include/bmx280.h (100%) rename components/{esp-request => oap-hw-bmx280}/test/component.mk (100%) rename components/{bmx280 => oap-hw-bmx280}/test/test_bmx280.c (100%) rename components/{peripherals => oap-hw-ext}/Kconfig (100%) rename components/{peripherals => oap-hw-ext}/component.mk (100%) rename components/{peripherals => oap-hw-ext}/ctrl_btn.c (100%) rename components/{peripherals => oap-hw-ext}/include/ctrl_btn.h (100%) rename components/{peripherals => oap-hw-ext}/include/rgb_led.h (100%) rename components/{peripherals => oap-hw-ext}/rgb_led.c (100%) rename components/{pmsx003 => oap-hw-pmsx003}/Kconfig (100%) rename components/{pmsx003 => oap-hw-pmsx003}/component.mk (100%) rename components/{pmsx003 => oap-hw-pmsx003}/include/pmsx003.h (100%) rename components/{pmsx003 => oap-hw-pmsx003}/pmsx003.c (100%) rename components/{oap_common => oap-hw-pmsx003}/test/component.mk (100%) rename components/{pmsx003 => oap-hw-pmsx003}/test/test_pmsx003.c (100%) rename components/{pm_meter => oap-meter}/Kconfig (100%) rename components/{pm_meter => oap-meter}/component.mk (100%) rename components/{pm_meter => oap-meter}/include/meas_continuous.h (100%) rename components/{pm_meter => oap-meter}/include/meas_intervals.h (100%) rename components/{pm_meter => oap-meter}/include/pm_meter.h (100%) rename components/{pm_meter => oap-meter}/meas_continuous.c (100%) rename components/{pm_meter => oap-meter}/meas_intervals.c (100%) rename components/{pm_meter => oap-meter}/pm_meter.c (100%) rename components/{ota => oap-meter}/test/component.mk (100%) rename components/{pm_meter => oap-meter}/test/test_pm_meter.c (100%) rename components/{ota => oap-ota}/Kconfig (100%) rename components/{ota => oap-ota}/comodo_ca.pem (100%) rename components/{ota => oap-ota}/component.mk (100%) rename components/{ota => oap-ota}/digicert_ca.crt (100%) rename components/{ota => oap-ota}/digicert_ca.pem (100%) rename components/{ota => oap-ota}/include/ota.h (100%) rename components/{ota => oap-ota}/ota.c (100%) rename components/{ota => oap-ota}/ota_int.h (100%) rename components/{pm_meter => oap-ota}/test/component.mk (100%) rename components/{ota => oap-ota}/test/files/hello-world.bin (100%) rename components/{ota => oap-ota}/test/files/index-sha-mismatch.txt (100%) rename components/{ota => oap-ota}/test/files/index.txt (100%) rename components/{ota => oap-ota}/test/test_ota.c (100%) rename components/{thing-speak => oap-thingspk}/component.mk (100%) rename components/{thing-speak => oap-thingspk}/include/thing_speak.h (100%) rename components/{pmsx003 => oap-thingspk}/test/component.mk (100%) rename components/{thing-speak => oap-thingspk}/test/test_thing_speak.c (97%) rename components/{thing-speak => oap-thingspk}/thing_speak.c (98%) rename components/{bootwifi => oap-wifi}/Kconfig (100%) rename components/{bootwifi => oap-wifi}/bootwifi.c (100%) rename components/{bootwifi => oap-wifi}/component.mk (100%) rename components/{bootwifi => oap-wifi}/cpanel.c (100%) rename components/{bootwifi => oap-wifi}/cpanel.h (100%) rename components/{bootwifi => oap-wifi}/include/bootwifi.h (100%) rename components/{bootwifi => oap-wifi}/include/server_cpanel.h (100%) rename components/{bootwifi => oap-wifi}/index.html (100%) rename components/{bootwifi => oap-wifi}/mongoose.c (100%) rename components/{bootwifi => oap-wifi}/mongoose.h (100%) rename components/{bootwifi => oap-wifi}/server.c (100%) rename components/{bootwifi => oap-wifi}/server.h (100%) rename components/{bootwifi => oap-wifi}/server_cpanel.c (100%) rename components/{thing-speak => oap-wifi}/test/component.mk (100%) rename components/{bootwifi => oap-wifi}/test/test_bootwifi.c (100%) diff --git a/bin/test_components.sh b/bin/test_components.sh index bb59fb5..da30ad9 100644 --- a/bin/test_components.sh +++ b/bin/test_components.sh @@ -1 +1 @@ -TEST_COMPONENTS='oap_common bmx280 pmsx003 pm_meter esp-request awsiot thing-speak ota bootwifi' \ No newline at end of file +TEST_COMPONENTS='oap-common oap-hw-bmx280 oap-hw-pmsx003 oap-meter oap-http oap-aws oap-thingspk oap-ota oap-wifi' \ No newline at end of file diff --git a/components/awsiot/awsiot.c b/components/oap-aws/awsiot.c similarity index 100% rename from components/awsiot/awsiot.c rename to components/oap-aws/awsiot.c diff --git a/components/awsiot/awsiot_common.h b/components/oap-aws/awsiot_common.h similarity index 100% rename from components/awsiot/awsiot_common.h rename to components/oap-aws/awsiot_common.h diff --git a/components/awsiot/awsiot_rest.c b/components/oap-aws/awsiot_rest.c similarity index 100% rename from components/awsiot/awsiot_rest.c rename to components/oap-aws/awsiot_rest.c diff --git a/components/awsiot/awsiot_rest.h b/components/oap-aws/awsiot_rest.h similarity index 100% rename from components/awsiot/awsiot_rest.h rename to components/oap-aws/awsiot_rest.h diff --git a/components/awsiot/component.mk b/components/oap-aws/component.mk similarity index 100% rename from components/awsiot/component.mk rename to components/oap-aws/component.mk diff --git a/components/awsiot/include/awsiot.h b/components/oap-aws/include/awsiot.h similarity index 100% rename from components/awsiot/include/awsiot.h rename to components/oap-aws/include/awsiot.h diff --git a/components/awsiot/test/1cbf751210-certificate.pem.crt b/components/oap-aws/test/1cbf751210-certificate.pem.crt similarity index 100% rename from components/awsiot/test/1cbf751210-certificate.pem.crt rename to components/oap-aws/test/1cbf751210-certificate.pem.crt diff --git a/components/awsiot/test/1cbf751210-private.pem.key b/components/oap-aws/test/1cbf751210-private.pem.key similarity index 100% rename from components/awsiot/test/1cbf751210-private.pem.key rename to components/oap-aws/test/1cbf751210-private.pem.key diff --git a/components/awsiot/test/1cbf751210-public.pem.key b/components/oap-aws/test/1cbf751210-public.pem.key similarity index 100% rename from components/awsiot/test/1cbf751210-public.pem.key rename to components/oap-aws/test/1cbf751210-public.pem.key diff --git a/components/awsiot/test/component.mk b/components/oap-aws/test/component.mk similarity index 100% rename from components/awsiot/test/component.mk rename to components/oap-aws/test/component.mk diff --git a/components/awsiot/test/test_awsiot.c b/components/oap-aws/test/test_awsiot.c similarity index 100% rename from components/awsiot/test/test_awsiot.c rename to components/oap-aws/test/test_awsiot.c diff --git a/components/awsiot/verisign_root_ca.pem b/components/oap-aws/verisign_root_ca.pem similarity index 100% rename from components/awsiot/verisign_root_ca.pem rename to components/oap-aws/verisign_root_ca.pem diff --git a/components/oap_common/c_list.c b/components/oap-common/c_list.c similarity index 100% rename from components/oap_common/c_list.c rename to components/oap-common/c_list.c diff --git a/components/oap_common/component.mk b/components/oap-common/component.mk similarity index 100% rename from components/oap_common/component.mk rename to components/oap-common/component.mk diff --git a/components/oap_common/include/c_list.h b/components/oap-common/include/c_list.h similarity index 100% rename from components/oap_common/include/c_list.h rename to components/oap-common/include/c_list.h diff --git a/components/oap_common/include/oap_common.h b/components/oap-common/include/oap_common.h similarity index 100% rename from components/oap_common/include/oap_common.h rename to components/oap-common/include/oap_common.h diff --git a/components/oap_common/include/oap_data.h b/components/oap-common/include/oap_data.h similarity index 100% rename from components/oap_common/include/oap_data.h rename to components/oap-common/include/oap_data.h diff --git a/components/oap_common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h similarity index 100% rename from components/oap_common/include/oap_data_env.h rename to components/oap-common/include/oap_data_env.h diff --git a/components/oap_common/include/oap_data_pm.h b/components/oap-common/include/oap_data_pm.h similarity index 100% rename from components/oap_common/include/oap_data_pm.h rename to components/oap-common/include/oap_data_pm.h diff --git a/components/oap_common/include/oap_debug.h b/components/oap-common/include/oap_debug.h similarity index 100% rename from components/oap_common/include/oap_debug.h rename to components/oap-common/include/oap_debug.h diff --git a/components/oap_common/include/oap_publisher.h b/components/oap-common/include/oap_publisher.h similarity index 100% rename from components/oap_common/include/oap_publisher.h rename to components/oap-common/include/oap_publisher.h diff --git a/components/oap_common/include/oap_storage.h b/components/oap-common/include/oap_storage.h similarity index 100% rename from components/oap_common/include/oap_storage.h rename to components/oap-common/include/oap_storage.h diff --git a/components/oap_common/include/oap_version.h b/components/oap-common/include/oap_version.h similarity index 100% rename from components/oap_common/include/oap_version.h rename to components/oap-common/include/oap_version.h diff --git a/components/oap_common/oap_common.c b/components/oap-common/oap_common.c similarity index 100% rename from components/oap_common/oap_common.c rename to components/oap-common/oap_common.c diff --git a/components/oap_common/oap_debug.c b/components/oap-common/oap_debug.c similarity index 100% rename from components/oap_common/oap_debug.c rename to components/oap-common/oap_debug.c diff --git a/components/oap_common/oap_storage.c b/components/oap-common/oap_storage.c similarity index 100% rename from components/oap_common/oap_storage.c rename to components/oap-common/oap_storage.c diff --git a/components/oap_common/oap_version.c b/components/oap-common/oap_version.c similarity index 100% rename from components/oap_common/oap_version.c rename to components/oap-common/oap_version.c diff --git a/components/oap_common/test/.gitignore b/components/oap-common/test/.gitignore similarity index 100% rename from components/oap_common/test/.gitignore rename to components/oap-common/test/.gitignore diff --git a/components/bmx280/test/component.mk b/components/oap-common/test/component.mk similarity index 100% rename from components/bmx280/test/component.mk rename to components/oap-common/test/component.mk diff --git a/components/oap_common/test/include/oap_test.h b/components/oap-common/test/include/oap_test.h similarity index 100% rename from components/oap_common/test/include/oap_test.h rename to components/oap-common/test/include/oap_test.h diff --git a/components/oap_common/test/oap_test.c b/components/oap-common/test/oap_test.c similarity index 100% rename from components/oap_common/test/oap_test.c rename to components/oap-common/test/oap_test.c diff --git a/components/oap_common/test/sandbox.c b/components/oap-common/test/sandbox.c similarity index 100% rename from components/oap_common/test/sandbox.c rename to components/oap-common/test/sandbox.c diff --git a/components/oap_common/test/test_oap_storage.c b/components/oap-common/test/test_oap_storage.c similarity index 100% rename from components/oap_common/test/test_oap_storage.c rename to components/oap-common/test/test_oap_storage.c diff --git a/components/oap_common/test/test_oap_version.c b/components/oap-common/test/test_oap_version.c similarity index 100% rename from components/oap_common/test/test_oap_version.c rename to components/oap-common/test/test_oap_version.c diff --git a/components/esp-request/LICENSE b/components/oap-http/LICENSE similarity index 100% rename from components/esp-request/LICENSE rename to components/oap-http/LICENSE diff --git a/components/esp-request/README.md b/components/oap-http/README.md similarity index 100% rename from components/esp-request/README.md rename to components/oap-http/README.md diff --git a/components/esp-request/component.mk b/components/oap-http/component.mk similarity index 100% rename from components/esp-request/component.mk rename to components/oap-http/component.mk diff --git a/components/esp-request/esp_request.c b/components/oap-http/esp_request.c similarity index 100% rename from components/esp-request/esp_request.c rename to components/oap-http/esp_request.c diff --git a/components/esp-request/include/esp_request.h b/components/oap-http/include/esp_request.h similarity index 100% rename from components/esp-request/include/esp_request.h rename to components/oap-http/include/esp_request.h diff --git a/components/esp-request/include/req_list.h b/components/oap-http/include/req_list.h similarity index 100% rename from components/esp-request/include/req_list.h rename to components/oap-http/include/req_list.h diff --git a/components/esp-request/include/uri_parser.h b/components/oap-http/include/uri_parser.h similarity index 100% rename from components/esp-request/include/uri_parser.h rename to components/oap-http/include/uri_parser.h diff --git a/components/esp-request/req_list.c b/components/oap-http/req_list.c similarity index 100% rename from components/esp-request/req_list.c rename to components/oap-http/req_list.c diff --git a/components/bootwifi/test/component.mk b/components/oap-http/test/component.mk similarity index 100% rename from components/bootwifi/test/component.mk rename to components/oap-http/test/component.mk diff --git a/components/esp-request/test/test_esp_request.c b/components/oap-http/test/test_esp_request.c similarity index 100% rename from components/esp-request/test/test_esp_request.c rename to components/oap-http/test/test_esp_request.c diff --git a/components/esp-request/uri_parser.c b/components/oap-http/uri_parser.c similarity index 100% rename from components/esp-request/uri_parser.c rename to components/oap-http/uri_parser.c diff --git a/components/bmx280/Kconfig b/components/oap-hw-bmx280/Kconfig similarity index 100% rename from components/bmx280/Kconfig rename to components/oap-hw-bmx280/Kconfig diff --git a/components/bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c similarity index 100% rename from components/bmx280/bmx280.c rename to components/oap-hw-bmx280/bmx280.c diff --git a/components/bmx280/component.mk b/components/oap-hw-bmx280/component.mk similarity index 100% rename from components/bmx280/component.mk rename to components/oap-hw-bmx280/component.mk diff --git a/components/bmx280/i2c_bme280.c b/components/oap-hw-bmx280/i2c_bme280.c similarity index 100% rename from components/bmx280/i2c_bme280.c rename to components/oap-hw-bmx280/i2c_bme280.c diff --git a/components/bmx280/i2c_bme280.h b/components/oap-hw-bmx280/i2c_bme280.h similarity index 100% rename from components/bmx280/i2c_bme280.h rename to components/oap-hw-bmx280/i2c_bme280.h diff --git a/components/bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h similarity index 100% rename from components/bmx280/include/bmx280.h rename to components/oap-hw-bmx280/include/bmx280.h diff --git a/components/esp-request/test/component.mk b/components/oap-hw-bmx280/test/component.mk similarity index 100% rename from components/esp-request/test/component.mk rename to components/oap-hw-bmx280/test/component.mk diff --git a/components/bmx280/test/test_bmx280.c b/components/oap-hw-bmx280/test/test_bmx280.c similarity index 100% rename from components/bmx280/test/test_bmx280.c rename to components/oap-hw-bmx280/test/test_bmx280.c diff --git a/components/peripherals/Kconfig b/components/oap-hw-ext/Kconfig similarity index 100% rename from components/peripherals/Kconfig rename to components/oap-hw-ext/Kconfig diff --git a/components/peripherals/component.mk b/components/oap-hw-ext/component.mk similarity index 100% rename from components/peripherals/component.mk rename to components/oap-hw-ext/component.mk diff --git a/components/peripherals/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c similarity index 100% rename from components/peripherals/ctrl_btn.c rename to components/oap-hw-ext/ctrl_btn.c diff --git a/components/peripherals/include/ctrl_btn.h b/components/oap-hw-ext/include/ctrl_btn.h similarity index 100% rename from components/peripherals/include/ctrl_btn.h rename to components/oap-hw-ext/include/ctrl_btn.h diff --git a/components/peripherals/include/rgb_led.h b/components/oap-hw-ext/include/rgb_led.h similarity index 100% rename from components/peripherals/include/rgb_led.h rename to components/oap-hw-ext/include/rgb_led.h diff --git a/components/peripherals/rgb_led.c b/components/oap-hw-ext/rgb_led.c similarity index 100% rename from components/peripherals/rgb_led.c rename to components/oap-hw-ext/rgb_led.c diff --git a/components/pmsx003/Kconfig b/components/oap-hw-pmsx003/Kconfig similarity index 100% rename from components/pmsx003/Kconfig rename to components/oap-hw-pmsx003/Kconfig diff --git a/components/pmsx003/component.mk b/components/oap-hw-pmsx003/component.mk similarity index 100% rename from components/pmsx003/component.mk rename to components/oap-hw-pmsx003/component.mk diff --git a/components/pmsx003/include/pmsx003.h b/components/oap-hw-pmsx003/include/pmsx003.h similarity index 100% rename from components/pmsx003/include/pmsx003.h rename to components/oap-hw-pmsx003/include/pmsx003.h diff --git a/components/pmsx003/pmsx003.c b/components/oap-hw-pmsx003/pmsx003.c similarity index 100% rename from components/pmsx003/pmsx003.c rename to components/oap-hw-pmsx003/pmsx003.c diff --git a/components/oap_common/test/component.mk b/components/oap-hw-pmsx003/test/component.mk similarity index 100% rename from components/oap_common/test/component.mk rename to components/oap-hw-pmsx003/test/component.mk diff --git a/components/pmsx003/test/test_pmsx003.c b/components/oap-hw-pmsx003/test/test_pmsx003.c similarity index 100% rename from components/pmsx003/test/test_pmsx003.c rename to components/oap-hw-pmsx003/test/test_pmsx003.c diff --git a/components/pm_meter/Kconfig b/components/oap-meter/Kconfig similarity index 100% rename from components/pm_meter/Kconfig rename to components/oap-meter/Kconfig diff --git a/components/pm_meter/component.mk b/components/oap-meter/component.mk similarity index 100% rename from components/pm_meter/component.mk rename to components/oap-meter/component.mk diff --git a/components/pm_meter/include/meas_continuous.h b/components/oap-meter/include/meas_continuous.h similarity index 100% rename from components/pm_meter/include/meas_continuous.h rename to components/oap-meter/include/meas_continuous.h diff --git a/components/pm_meter/include/meas_intervals.h b/components/oap-meter/include/meas_intervals.h similarity index 100% rename from components/pm_meter/include/meas_intervals.h rename to components/oap-meter/include/meas_intervals.h diff --git a/components/pm_meter/include/pm_meter.h b/components/oap-meter/include/pm_meter.h similarity index 100% rename from components/pm_meter/include/pm_meter.h rename to components/oap-meter/include/pm_meter.h diff --git a/components/pm_meter/meas_continuous.c b/components/oap-meter/meas_continuous.c similarity index 100% rename from components/pm_meter/meas_continuous.c rename to components/oap-meter/meas_continuous.c diff --git a/components/pm_meter/meas_intervals.c b/components/oap-meter/meas_intervals.c similarity index 100% rename from components/pm_meter/meas_intervals.c rename to components/oap-meter/meas_intervals.c diff --git a/components/pm_meter/pm_meter.c b/components/oap-meter/pm_meter.c similarity index 100% rename from components/pm_meter/pm_meter.c rename to components/oap-meter/pm_meter.c diff --git a/components/ota/test/component.mk b/components/oap-meter/test/component.mk similarity index 100% rename from components/ota/test/component.mk rename to components/oap-meter/test/component.mk diff --git a/components/pm_meter/test/test_pm_meter.c b/components/oap-meter/test/test_pm_meter.c similarity index 100% rename from components/pm_meter/test/test_pm_meter.c rename to components/oap-meter/test/test_pm_meter.c diff --git a/components/ota/Kconfig b/components/oap-ota/Kconfig similarity index 100% rename from components/ota/Kconfig rename to components/oap-ota/Kconfig diff --git a/components/ota/comodo_ca.pem b/components/oap-ota/comodo_ca.pem similarity index 100% rename from components/ota/comodo_ca.pem rename to components/oap-ota/comodo_ca.pem diff --git a/components/ota/component.mk b/components/oap-ota/component.mk similarity index 100% rename from components/ota/component.mk rename to components/oap-ota/component.mk diff --git a/components/ota/digicert_ca.crt b/components/oap-ota/digicert_ca.crt similarity index 100% rename from components/ota/digicert_ca.crt rename to components/oap-ota/digicert_ca.crt diff --git a/components/ota/digicert_ca.pem b/components/oap-ota/digicert_ca.pem similarity index 100% rename from components/ota/digicert_ca.pem rename to components/oap-ota/digicert_ca.pem diff --git a/components/ota/include/ota.h b/components/oap-ota/include/ota.h similarity index 100% rename from components/ota/include/ota.h rename to components/oap-ota/include/ota.h diff --git a/components/ota/ota.c b/components/oap-ota/ota.c similarity index 100% rename from components/ota/ota.c rename to components/oap-ota/ota.c diff --git a/components/ota/ota_int.h b/components/oap-ota/ota_int.h similarity index 100% rename from components/ota/ota_int.h rename to components/oap-ota/ota_int.h diff --git a/components/pm_meter/test/component.mk b/components/oap-ota/test/component.mk similarity index 100% rename from components/pm_meter/test/component.mk rename to components/oap-ota/test/component.mk diff --git a/components/ota/test/files/hello-world.bin b/components/oap-ota/test/files/hello-world.bin similarity index 100% rename from components/ota/test/files/hello-world.bin rename to components/oap-ota/test/files/hello-world.bin diff --git a/components/ota/test/files/index-sha-mismatch.txt b/components/oap-ota/test/files/index-sha-mismatch.txt similarity index 100% rename from components/ota/test/files/index-sha-mismatch.txt rename to components/oap-ota/test/files/index-sha-mismatch.txt diff --git a/components/ota/test/files/index.txt b/components/oap-ota/test/files/index.txt similarity index 100% rename from components/ota/test/files/index.txt rename to components/oap-ota/test/files/index.txt diff --git a/components/ota/test/test_ota.c b/components/oap-ota/test/test_ota.c similarity index 100% rename from components/ota/test/test_ota.c rename to components/oap-ota/test/test_ota.c diff --git a/components/thing-speak/component.mk b/components/oap-thingspk/component.mk similarity index 100% rename from components/thing-speak/component.mk rename to components/oap-thingspk/component.mk diff --git a/components/thing-speak/include/thing_speak.h b/components/oap-thingspk/include/thing_speak.h similarity index 100% rename from components/thing-speak/include/thing_speak.h rename to components/oap-thingspk/include/thing_speak.h diff --git a/components/pmsx003/test/component.mk b/components/oap-thingspk/test/component.mk similarity index 100% rename from components/pmsx003/test/component.mk rename to components/oap-thingspk/test/component.mk diff --git a/components/thing-speak/test/test_thing_speak.c b/components/oap-thingspk/test/test_thing_speak.c similarity index 97% rename from components/thing-speak/test/test_thing_speak.c rename to components/oap-thingspk/test/test_thing_speak.c index 044a829..2d2c8da 100644 --- a/components/thing-speak/test/test_thing_speak.c +++ b/components/oap-thingspk/test/test_thing_speak.c @@ -20,7 +20,7 @@ * along with OpenAirProject-ESP32. If not, see . */ -#include "../../thing-speak/include/thing_speak.h" +#include "thing_speak.h" #include "oap_test.h" #define TEST_API_KEY "QMN6JJM996QXBORX" diff --git a/components/thing-speak/thing_speak.c b/components/oap-thingspk/thing_speak.c similarity index 98% rename from components/thing-speak/thing_speak.c rename to components/oap-thingspk/thing_speak.c index c2434b7..8e3e078 100644 --- a/components/thing-speak/thing_speak.c +++ b/components/oap-thingspk/thing_speak.c @@ -20,7 +20,7 @@ * along with OpenAirProject-ESP32. If not, see . */ -#include "../thing-speak/include/thing_speak.h" +#include "thing_speak.h" #include "oap_common.h" #include "oap_storage.h" diff --git a/components/bootwifi/Kconfig b/components/oap-wifi/Kconfig similarity index 100% rename from components/bootwifi/Kconfig rename to components/oap-wifi/Kconfig diff --git a/components/bootwifi/bootwifi.c b/components/oap-wifi/bootwifi.c similarity index 100% rename from components/bootwifi/bootwifi.c rename to components/oap-wifi/bootwifi.c diff --git a/components/bootwifi/component.mk b/components/oap-wifi/component.mk similarity index 100% rename from components/bootwifi/component.mk rename to components/oap-wifi/component.mk diff --git a/components/bootwifi/cpanel.c b/components/oap-wifi/cpanel.c similarity index 100% rename from components/bootwifi/cpanel.c rename to components/oap-wifi/cpanel.c diff --git a/components/bootwifi/cpanel.h b/components/oap-wifi/cpanel.h similarity index 100% rename from components/bootwifi/cpanel.h rename to components/oap-wifi/cpanel.h diff --git a/components/bootwifi/include/bootwifi.h b/components/oap-wifi/include/bootwifi.h similarity index 100% rename from components/bootwifi/include/bootwifi.h rename to components/oap-wifi/include/bootwifi.h diff --git a/components/bootwifi/include/server_cpanel.h b/components/oap-wifi/include/server_cpanel.h similarity index 100% rename from components/bootwifi/include/server_cpanel.h rename to components/oap-wifi/include/server_cpanel.h diff --git a/components/bootwifi/index.html b/components/oap-wifi/index.html similarity index 100% rename from components/bootwifi/index.html rename to components/oap-wifi/index.html diff --git a/components/bootwifi/mongoose.c b/components/oap-wifi/mongoose.c similarity index 100% rename from components/bootwifi/mongoose.c rename to components/oap-wifi/mongoose.c diff --git a/components/bootwifi/mongoose.h b/components/oap-wifi/mongoose.h similarity index 100% rename from components/bootwifi/mongoose.h rename to components/oap-wifi/mongoose.h diff --git a/components/bootwifi/server.c b/components/oap-wifi/server.c similarity index 100% rename from components/bootwifi/server.c rename to components/oap-wifi/server.c diff --git a/components/bootwifi/server.h b/components/oap-wifi/server.h similarity index 100% rename from components/bootwifi/server.h rename to components/oap-wifi/server.h diff --git a/components/bootwifi/server_cpanel.c b/components/oap-wifi/server_cpanel.c similarity index 100% rename from components/bootwifi/server_cpanel.c rename to components/oap-wifi/server_cpanel.c diff --git a/components/thing-speak/test/component.mk b/components/oap-wifi/test/component.mk similarity index 100% rename from components/thing-speak/test/component.mk rename to components/oap-wifi/test/component.mk diff --git a/components/bootwifi/test/test_bootwifi.c b/components/oap-wifi/test/test_bootwifi.c similarity index 100% rename from components/bootwifi/test/test_bootwifi.c rename to components/oap-wifi/test/test_bootwifi.c diff --git a/main/main.c b/main/main.c index 875875b..6e7bcd2 100644 --- a/main/main.c +++ b/main/main.c @@ -33,7 +33,7 @@ #include "esp_log.h" #include -#include "../components/thing-speak/include/thing_speak.h" +#include "thing_speak.h" #include "meas_intervals.h" #include "meas_continuous.h" From a3289b9b8418cf1b83ac9325a1313c387d063da5 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 8 Oct 2017 09:30:12 +0200 Subject: [PATCH 082/200] option to reset to factory firmware, fix #40 --- bin/deploy_ota.sh | 3 +- components/oap-hw-ext/ctrl_btn.c | 137 ++++++++++------------- components/oap-hw-ext/include/ctrl_btn.h | 17 ++- components/oap-hw-ext/rgb_led.c | 2 +- components/oap-ota/include/ota.h | 1 + components/oap-ota/ota.c | 11 ++ main/main.c | 44 +++++--- 7 files changed, 114 insertions(+), 101 deletions(-) diff --git a/bin/deploy_ota.sh b/bin/deploy_ota.sh index d515ff9..6465945 100755 --- a/bin/deploy_ota.sh +++ b/bin/deploy_ota.sh @@ -9,7 +9,8 @@ DEST_FOLDER=s3://openairproject.com/ota printf "$1|$1/sensor-esp32.bin|" > $INDEX_FILE -cat build/sensor-esp32.bin | openssl dgst -sha256 >> $INDEX_FILE +cat build/sensor-esp32.bin | openssl dgst -sha256 -binary | xxd -p -c 100 >> $INDEX_FILE +cat $INDEX_FILE aws s3 cp build/sensor-esp32.bin $DEST_FOLDER/$1/sensor-esp32.bin --profile oap aws s3 cp $INDEX_FILE $DEST_FOLDER/index.txt --profile oap \ No newline at end of file diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 7bad6a9..2e48cf5 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -30,93 +30,80 @@ #include "oap_common.h" #include "ctrl_btn.h" #include "esp_log.h" +#include "esp_err.h" +#include "driver/gpio.h" +#include "freertos/queue.h" #define ESP_INTR_FLAG_DEFAULT 0 +#define TAG "btn" -static QueueHandle_t gpio_evt_queue = NULL; -static QueueHandle_t btn_events = NULL; +typedef struct { + uint8_t gpio_num; + uint32_t timestamp; +} gpio_event_t; +static QueueHandle_t gpio_evt_queue; +static uint32_t last_click = 0; +static btn_callback_f _callback = NULL; static void IRAM_ATTR gpio_isr_handler(void* arg) { - uint32_t gpio_num = (uint32_t) arg; - xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL); + uint32_t t = millis(); + /* + * TODO is there a way to programmatically eliminate flickering? + */ + if (t - last_click < 80) return; + last_click = t; + gpio_event_t gpio_evt = { + .gpio_num = (uint8_t)(uint32_t)arg, + .timestamp = t + }; + xQueueSendFromISR(gpio_evt_queue, &gpio_evt, NULL); } -static long int now() { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec * 1000 + tv.tv_usec / 1000; +static void gpio_watchdog_task() { + gpio_event_t gpio_evt; + int count = 0; + uint32_t first_click = 0; + + while(1) { + if (xQueueReceive(gpio_evt_queue, &gpio_evt, 1000)) { + _callback(SINGLE_CLICK); + //20 sec to perform the action + if (!first_click || gpio_evt.timestamp - first_click > 20000) { + first_click = gpio_evt.timestamp; + count = 0; + } + count++; + ESP_LOGD(TAG, "click gpio[%d] [%d in sequence]",gpio_evt.gpio_num, count); + + //due to flickering we cannot precisely count all clicks anyway + if (count == 10) { + _callback(MANY_CLICKS); + } + if (count >= 20) { + _callback(TOO_MANY_CLICKS); + first_click=0; + count=0; + } + } + } } -static uint8_t gpio_to_index[40] = {-1}; - -static void btn_task() -{ - uint32_t io_num; - uint8_t level[40] = {0}; - long int time = now(); - long int _time; - - - for(;;) { - if(xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) { - - //debounce - _time = now(); - if (_time - time > 50 || io_num >= 40) { - btn_event event = { - .index = gpio_to_index[io_num], - .gpio = io_num, - .level= gpio_get_level(io_num) - }; - - if (level[event.gpio] == event.level) continue; - - time = _time; - level[event.gpio] = event.level; - xQueueSend(btn_events, &event, 500); - } - } - } +esp_err_t btn_configure(btn_callback_f callback) { + _callback = callback; + gpio_evt_queue = xQueueCreate(10, sizeof(gpio_event_t)); + gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); + gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); + gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_POSEDGE); + gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); + gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); + xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); + return ESP_OK; //TODO handle errors } - -QueueHandle_t btn_init(gpio_num_t *btn_gpio, uint8_t num_of_btns) -{ - btn_events = xQueueCreate(1, sizeof(btn_event)); - gpio_config_t io_conf; - - //interrupt of ... - io_conf.intr_type = GPIO_INTR_ANYEDGE; - //bit mask of the pins, - io_conf.pin_bit_mask = 0; - //set as input mode - io_conf.mode = GPIO_MODE_INPUT; - //set pull-up mode - io_conf.pull_up_en = 0; - io_conf.pull_down_en = 1; - - for (int n = 0; n < num_of_btns; n++) { - io_conf.pin_bit_mask |= (uint64_t)(((uint64_t)1)<<((uint64_t)(btn_gpio[n]))); - } - - gpio_config(&io_conf); - - //create a queue to handle gpio event from isr - gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t)); - //start gpio task - xTaskCreate(btn_task, "btn_task", 2048, NULL, DEFAULT_TASK_PRIORITY, NULL); - - //install gpio isr service - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); - //hook isr handler for specific gpio pin - for (int n = 0; n < num_of_btns; n++) { - gpio_to_index[btn_gpio[n]] = n; - gpio_isr_handler_add(btn_gpio[n], gpio_isr_handler, (void*) btn_gpio[n]); - } - - return btn_events; +bool is_ap_mode_pressed() { + return gpio_get_level(CONFIG_OAP_BTN_0_PIN); } - diff --git a/components/oap-hw-ext/include/ctrl_btn.h b/components/oap-hw-ext/include/ctrl_btn.h index b3e1da1..5e39c1a 100644 --- a/components/oap-hw-ext/include/ctrl_btn.h +++ b/components/oap-hw-ext/include/ctrl_btn.h @@ -23,15 +23,14 @@ #ifndef MAIN_BTN_H_ #define MAIN_BTN_H_ -#include "freertos/queue.h" -#include "driver/gpio.h" +typedef enum { + SINGLE_CLICK, + MANY_CLICKS, + TOO_MANY_CLICKS +} btn_action_t; +typedef void(*btn_callback_f)(btn_action_t); -typedef struct { - uint8_t index; - gpio_num_t gpio; - uint8_t level; -} btn_event; - -xQueueHandle btn_init(gpio_num_t* btns_gpio, uint8_t num_of_btns); +bool is_ap_mode_pressed(); +esp_err_t btn_configure(btn_callback_f callback); #endif /* MAIN_BTN_H_ */ diff --git a/components/oap-hw-ext/rgb_led.c b/components/oap-hw-ext/rgb_led.c index 3797b8c..9d2245c 100644 --- a/components/oap-hw-ext/rgb_led.c +++ b/components/oap-hw-ext/rgb_led.c @@ -39,7 +39,7 @@ static const char* TAG = "rgbled"; static xQueueHandle cmd_queue; static gpio_num_t led_gpio[] = {CONFIG_OAP_LED_R_PIN,CONFIG_OAP_LED_G_PIN,CONFIG_OAP_LED_B_PIN}; -#define DEFAULT_FREQ 1500 +#define DEFAULT_FREQ 1000 static ledc_mode_t speed_mode = LEDC_HIGH_SPEED_MODE; diff --git a/components/oap-ota/include/ota.h b/components/oap-ota/include/ota.h index 6a0ee64..07eeb24 100644 --- a/components/oap-ota/include/ota.h +++ b/components/oap-ota/include/ota.h @@ -31,5 +31,6 @@ #define OAP_OTA_INDEX_URI CONFIG_OAP_OTA_INDEX_URI void start_ota_task(cJSON* user_ota_config); +void reset_to_factory_partition(); #endif /* COMPONENTS_OTA_INCLUDE_OTA_H_ */ diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index fac443d..ed564c6 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -71,6 +71,17 @@ static int is_white_char(int ch) { return ch == '\n' || ch == '\r' || ch == '\t'; } +void reset_to_factory_partition() { + ESP_LOGW(TAG, "RESET TO FACTORY"); + const esp_partition_t *factory = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); + if (factory) { + esp_ota_set_boot_partition(factory); + oap_reboot(); + } else { + ESP_LOGE(TAG, "no factory partition?"); + } +} + esp_err_t parse_ota_info(ota_info_t* ota_info, char* line, int len) { if (len <= 0) return OAP_OTA_ERR_EMPTY_RESPONSE; char* ver = NULL; char* file = NULL; char* sha = NULL; diff --git a/main/main.c b/main/main.c index 6e7bcd2..5001e4c 100644 --- a/main/main.c +++ b/main/main.c @@ -50,6 +50,8 @@ #include "oap_data.h" #include "server_cpanel.h" +#define ESP_INTR_FLAG_DEFAULT 0 + static const char *TAG = "app"; @@ -69,26 +71,24 @@ static led_cmd_t ledc_state = { .color = {.v = {0,0,1}} //initial color (when no samples collected) }; -static void ledc_set() { +static void ledc_update() { xQueueSend(ledc_queue, &ledc_state, 100); } static void ledc_set_mode(led_mode_t mode) { ledc_state.mode = mode; - ledc_set(); } -static void ledc_set_color(led_mode_t mode, float r, float g, float b) { +static void ledc_set_color(float r, float g, float b) { ledc_state.color.v[0] = r; ledc_state.color.v[1] = g; ledc_state.color.v[2] = b; - ledc_set_mode(mode); } static void ledc_init() { ledc_queue = xQueueCreate(10, sizeof(led_cmd_t)); led_init(oap_sensor_config.led, ledc_queue); - ledc_set(); + ledc_update(); } @@ -121,6 +121,7 @@ static void pm_meter_output_handler(pm_meter_event_t event, void* data) { case PM_METER_START: ESP_LOGI(TAG, "start measurement"); ledc_set_mode(LED_PULSE); + ledc_update(); break; case PM_METER_RESULT: ESP_LOGI(TAG, "finished measurement"); @@ -302,7 +303,9 @@ static void publish_loop() { log_task_stack(TAG); float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); //ESP_LOGI(TAG, "AQI=%f",aqi); - ledc_set_color(LED_SET, aqi,(1-aqi), 0); + ledc_set_color(aqi,(1-aqi), 0); + ledc_set_mode(LED_SET); + ledc_update(); oap_measurement_t meas = { .pm = &pm_data_pair.pm_data[0], @@ -343,17 +346,29 @@ void publishers_init() { } } -static void configure_ap_mode_btn() { - gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); - gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); - gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); -} -static int is_ap_mode_pressed() { - return gpio_get_level(CONFIG_OAP_BTN_0_PIN); +static void btn_handler(btn_action_t action) { + switch (action) { + case MANY_CLICKS : + ESP_LOGW(TAG, "about to perform factory reset!"); + ledc_set_mode(LED_BLINK); + ledc_update(); + break; + case TOO_MANY_CLICKS : + reset_to_factory_partition(); + break; + default: + break; + } } void app_main() { + //silence annoying logs + esp_log_level_set("ledc", ESP_LOG_INFO); + esp_log_level_set("nvs", ESP_LOG_INFO); + esp_log_level_set("tcpip_adapter", ESP_LOG_INFO); + + //a sec to start flashing delay(1000); ESP_LOGI(TAG,"starting app... firmware %s", oap_version_str()); @@ -361,11 +376,10 @@ void app_main() { //reduce_heap_size_to(130000); storage_init(); - ESP_LOGD(TAG, "retrieve sensor config"); oap_sensor_config = sensor_config_from_json(cJSON_GetObjectItem(storage_get_config("sensor"), "config")); //wifi/mongoose requires plenty of mem, start it here - configure_ap_mode_btn(); + btn_configure(&btn_handler); wifi_configure(is_ap_mode_pressed() ? NULL : storage_get_config("wifi"), CONFIG_OAP_CONTROL_PANEL ? cpanel_wifi_handler : NULL); wifi_boot(); start_ota_task(storage_get_config("ota")); From 0aa330585978ee8ad19acbaf220fd191026cc849 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 8 Oct 2017 09:30:40 +0200 Subject: [PATCH 083/200] Release 1.0.0 --- components/oap-common/include/oap_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index a8fe61d..7f24041 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -36,8 +36,8 @@ #include #include "esp_err.h" -#define OAP_VER_MAJOR 0 -#define OAP_VER_MINOR 6 +#define OAP_VER_MAJOR 1 +#define OAP_VER_MINOR 0 #define OAP_VER_PATCH 0 typedef struct { From 1d061f6c9f8fa194a1c68d230f5c00a707d4c737 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Sun, 8 Oct 2017 09:47:08 +0200 Subject: [PATCH 084/200] update changelog for 1.0.0 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac29857..9b46b41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 1.0.0 + +- use stable esp-idf release instead of working version (too many issues with wifi/ssl) +- ability to reset to factory firmware [#40](https://github.com/openairproject/sensor-esp32/issues/40)) + # 0.6.0 - fix wifi issues ([#32](https://github.com/openairproject/sensor-esp32/issues/32)), ([#19](https://github.com/openairproject/sensor-esp32/issues/19)) From e8179642534c1d0f869edaf9feeb4b3c96a4e48d Mon Sep 17 00:00:00 2001 From: kglowacki Date: Mon, 9 Oct 2017 13:02:05 +0200 Subject: [PATCH 085/200] reboot after crash, fix #43 --- CHANGELOG.md | 6 +- components/oap-common/include/oap_common.h | 2 +- components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 3 +- components/oap-ota/ota.c | 9 ++- components/oap-wifi/cpanel.c | 3 +- sdkconfig.defaults | 82 ++++++++++----------- 7 files changed, 56 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b46b41..84ac8e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,11 @@ +# 1.1.0 + +- reboot after crash or when watchdog detects hanging task for 10sec ([#43](https://github.com/openairproject/sensor-esp32/issues/43)) + # 1.0.0 - use stable esp-idf release instead of working version (too many issues with wifi/ssl) -- ability to reset to factory firmware [#40](https://github.com/openairproject/sensor-esp32/issues/40)) +- ability to reset to factory firmware ([#40](https://github.com/openairproject/sensor-esp32/issues/40)) # 0.6.0 diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index f28795b..1728714 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -42,7 +42,7 @@ typedef unsigned short uint16_t; #define DEFAULT_TASK_PRIORITY (10) int is_reboot_in_progress(); -void oap_reboot(); +void oap_reboot(char* cause); long oap_epoch_sec(); long oap_epoch_sec_valid(); diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 7f24041..a559d31 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -37,7 +37,7 @@ #include "esp_err.h" #define OAP_VER_MAJOR 1 -#define OAP_VER_MINOR 0 +#define OAP_VER_MINOR 1 #define OAP_VER_PATCH 0 typedef struct { diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 93ffd11..7aa6e5c 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -37,7 +37,8 @@ static int _reboot_in_progress = 0; int is_reboot_in_progress() { return _reboot_in_progress; } -void oap_reboot() { +void oap_reboot(char* cause) { + ESP_LOGW("oap", "REBOOT ON DEMAND (%s)", cause); _reboot_in_progress = 1; esp_restart(); } diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index ed564c6..764f2ec 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -72,11 +72,10 @@ static int is_white_char(int ch) { } void reset_to_factory_partition() { - ESP_LOGW(TAG, "RESET TO FACTORY"); const esp_partition_t *factory = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); if (factory) { esp_ota_set_boot_partition(factory); - oap_reboot(); + oap_reboot("reset to factory"); } else { ESP_LOGE(TAG, "no factory partition?"); } @@ -282,7 +281,9 @@ esp_err_t check_ota(ota_config_t* ota_config) { const esp_partition_t* running_partition = esp_ota_get_running_partition(); ESP_LOGI(TAG, "running partition = %s", running_partition->label); - + if (strcmp("factory", running_partition->label) != 0) { + ESP_LOGW(TAG, "OTA partition! Reset to factory for a DEV mode!"); + } if (!ota_config->update_partition) { ota_config->update_partition = esp_ota_get_next_update_partition(NULL); } @@ -340,7 +341,7 @@ esp_err_t check_ota(ota_config_t* ota_config) { } ESP_LOGW(TAG, "OTA applied. Prepare to restart system!"); - oap_reboot(); + oap_reboot("OTA update"); return ESP_OK; } else { ESP_LOGW(TAG, "OTA downloaded but configured to be ignored"); diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 421db6f..5804b78 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -58,8 +58,7 @@ static void handler_get_config(struct mg_connection *nc, struct http_message *me static void handler_reboot(struct mg_connection *nc) { mg_send_head(nc, 200, 0, "Content-Type: text/plain"); - ESP_LOGW(tag, "received reboot request!"); - oap_reboot(); + oap_reboot("requested by user"); } static void handler_set_config(struct mg_connection *nc, struct http_message *message) { diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 61d269d..f372f6f 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -93,25 +93,6 @@ CONFIG_OPTIMIZATION_LEVEL_DEBUG=y # Component config # # CONFIG_AWS_IOT_SDK is not set - -# -# OAP BMx280 Sensor -# -CONFIG_OAP_BMX280_ENABLED=1 -CONFIG_OAP_BMX280_ADDRESS=0x76 -CONFIG_OAP_BMX280_I2C_NUM=0 -CONFIG_OAP_BMX280_I2C_SDA_PIN=25 -CONFIG_OAP_BMX280_I2C_SCL_PIN=26 -CONFIG_OAP_BMX280_ENABLED_AUX=0 -CONFIG_OAP_BMX280_ADDRESS_AUX=0x77 -CONFIG_OAP_BMX280_I2C_NUM_AUX=0 -CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX=25 -CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX=26 - -# -# OAP WIFI -# -CONFIG_OAP_AP_PASSWORD="cleanair" # CONFIG_BT_ENABLED is not set CONFIG_BT_RESERVE_DRAM=0 @@ -151,16 +132,16 @@ CONFIG_CONSOLE_UART_NUM=0 CONFIG_CONSOLE_UART_BAUDRATE=115200 # CONFIG_ULP_COPROC_ENABLED is not set CONFIG_ULP_COPROC_RESERVE_MEM=0 -CONFIG_ESP32_PANIC_PRINT_HALT=y -# CONFIG_ESP32_PANIC_PRINT_REBOOT is not set +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set # CONFIG_ESP32_PANIC_GDBSTUB is not set CONFIG_ESP32_DEBUG_OCDAWARE=y CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 CONFIG_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 +CONFIG_TASK_WDT_PANIC=y +CONFIG_TASK_WDT_TIMEOUT_S=10 CONFIG_TASK_WDT_CHECK_IDLE_TASK=y # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y @@ -292,18 +273,18 @@ CONFIG_MBEDTLS_HAVE_TIME=y # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set # -# OpenSSL -# -# CONFIG_OPENSSL_DEBUG is not set -CONFIG_OPENSSL_ASSERT_DO_NOTHING=y -# CONFIG_OPENSSL_ASSERT_EXIT is not set - -# -# OAP OTA updates +# OAP BMx280 Sensor # -CONFIG_OAP_OTA_ENABLED=1 -CONFIG_OAP_OTA_BIN_URI_PREFIX="https://openairproject.com/ota/" -CONFIG_OAP_OTA_INDEX_URI="https://openairproject.com/ota/index.txt" +CONFIG_OAP_BMX280_ENABLED=1 +CONFIG_OAP_BMX280_ADDRESS=0x76 +CONFIG_OAP_BMX280_I2C_NUM=0 +CONFIG_OAP_BMX280_I2C_SDA_PIN=25 +CONFIG_OAP_BMX280_I2C_SCL_PIN=26 +CONFIG_OAP_BMX280_ENABLED_AUX=0 +CONFIG_OAP_BMX280_ADDRESS_AUX=0x77 +CONFIG_OAP_BMX280_I2C_NUM_AUX=0 +CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX=25 +CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX=26 # # OAP Peripherals @@ -313,13 +294,6 @@ CONFIG_OAP_LED_G_PIN=27 CONFIG_OAP_LED_B_PIN=14 CONFIG_OAP_BTN_0_PIN=39 -# -# OAP measurements -# -CONFIG_OAP_PM_SAMPLE_BUF_SIZE=120 -CONFIG_OAP_HEATER_CONTROL_PIN=21 -CONFIG_OAP_FAN_CONTROL_PIN=22 - # # OAP PMSx003 Sensor # @@ -337,6 +311,32 @@ CONFIG_OAP_PM_UART_TXD_PIN_AUX=5 CONFIG_OAP_PM_UART_RTS_PIN_AUX=18 CONFIG_OAP_PM_UART_CTS_PIN_AUX=19 +# +# OAP measurements +# +CONFIG_OAP_PM_SAMPLE_BUF_SIZE=120 +CONFIG_OAP_HEATER_CONTROL_PIN=21 +CONFIG_OAP_FAN_CONTROL_PIN=22 + +# +# OAP OTA updates +# +CONFIG_OAP_OTA_ENABLED=1 +CONFIG_OAP_OTA_BIN_URI_PREFIX="https://openairproject.com/ota/" +CONFIG_OAP_OTA_INDEX_URI="https://openairproject.com/ota/index.txt" + +# +# OAP WIFI +# +CONFIG_OAP_AP_PASSWORD="cleanair" + +# +# OpenSSL +# +# CONFIG_OPENSSL_DEBUG is not set +CONFIG_OPENSSL_ASSERT_DO_NOTHING=y +# CONFIG_OPENSSL_ASSERT_EXIT is not set + # # SPI Flash driver # From df464cdfcaa59efd965c84c1849f334ac4660d52 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Mon, 9 Oct 2017 20:41:52 +0200 Subject: [PATCH 086/200] describe firmware uplaod, fix #16 --- README.md | 87 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 9255dc7..250ed9b 100644 --- a/README.md +++ b/README.md @@ -68,50 +68,55 @@ or in any unfriendly environment (e.g. high humidity), please take it under consideration during build, isolate all connections properly and use appropriate case/enclosure (more on that soon). -## Building firmware +## Uploading firmware -Firmware is written in native espressif-sdk v2.1 [http://esp-idf.readthedocs.io/en/v2.1/get-started/index.html] -After installing and setting up SDK, connect your ESP32 board to your PC. -This may require installing custom USB driver (it depends on uart chipset used on your ESP32 board, for DevKit it -should be Silabs chip - [http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx]). +To run your sensor you first need to flash ESP32 chip with OAP firmware. -To configure and build sources - - make -j5 - -You can always bring up configuration menu via +To do so, you don't need to clone this project nor compile it - you can use pre-compiled firmware and a dedicated tool to handle the upload. - make menuconfig - -During the first run, a menuconfig should appear where you need to configure some parameters of your setup, -most notably - UART port (in my case - "/dev/tty.SLAB_USBtoUART"). +The procedure below was tested on Mac and Linux (Windows users, by now you should know the drill). -In components submenu there's a few configuration settings related to OAP hardware setup (e.g. gpio pin assignments), -and "OAP Main" menu where you can change various functional parameters. +1. Get proper USB cable to connect the sensor to your PC. All USB cables look similar, but some of them (which are usually thinner than others), cannot transfer data and are used only for powering/charging devices and are not suitable for our task. -** ATTENTION. main task stack should be increased to 10K if you're gonna use AWSIoT (via menuconfig) ** +2. While Linux may detect sensor (or rather - usb driver chip installed on the esp32 board), other systems will most likely require installing a custom USB driver that matches the chip. Its type depends on the ESP32 board, but in majority of cases it should be a Silabs chip for which a driver can be found at ). -All settings are saved in sdkconfig file. +3. Once driver is installed and sensor is connected with usb cable to PC, do -to flash the module and read from the serial output + ls -la /dev/tty* + +to find out what name of the serial port was assigned to our sensor (the easiest way is to list this folder with sensor disconnected and connected and compare results). Note it down. On my Mac it was "/dev/tty.SLAB_USBtoUART", on Linux - "/dev/ttyUSB0" or /dev/ttyUSB1" but it may be different depending on the system configuration. - make flash monitor +4. Now download the firmware (three *.bin files) for the latest stable release that you can find here . + +5. Now it is time to install "esptool", which is a firmware uploader from the manufacturer of ESP32 chip (Espressif company). Detailed instructions can be found here: , but if you already have Python and pip installed, just do + + pip install esptool -That's it. +By default it should be installed to "/usr/local/bin/". + +6. It is time to perform the uplaod ('flashing'): + + esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x30000 sensor-esp32.bin 0x8000 partitions.bin + +Use --port from the step 3, and three bin files downloaded in step 4. + +In most cases, esptool will be able to switch your sensor into 'flashing' mode automatically and reset it afterwords to make it ready to go - it takes a few seconds. Some boards however require manual operation to activate this mode (esptool connection will timeout). +To do so, disconnect the sensor from USB, press and hold small button labeled "EN" on esp32 board (next to micro usb port), connect the sensor, run the command above and then release the button. ## First run -After booting the sensor for the first time, it will switch into Access Point mode and be visible as +After booting the sensor for the first time, sensor will switch into Access Point mode and create a wifi network - ssid: OpenAirProject-XXXX - pass: cleanair //configurable via menuconfig + ssid: OpenAirProject-XXXXXX + pass: cleanair After connecting to this network, open following url http://192.168.1.1 and configure sensor settings using web control panel (most notably - your home wifi ssid/pass). -After rebooting sensor will connect to your wifi. Web control panel will still be available, but at IP that was specified or assigned to sensor by your router. +After rebooting sensor will connect to your wifi +.Web control panel will still be available, but at IP that was specified or assigned to sensor by your router. If there's a need to force sensor into Access Point mode again (e.g. when it can't connect to specified wifi), @@ -119,6 +124,38 @@ reboot the device with a control button pressed down. ![Schema](doc/images/sensor_settings.png?raw=true =320x) +## Building firmware + +This part is for advanced users, in most cases you should be fine with installing pre-build firmware. + +OAP firmware is written in native espressif-sdk v2.1 + +After installing and setting up SDK, connect your ESP32 board to your PC. See notes regarding USB cable and driver in a chapter above. + +To configure and build sources + + make -j5 + +You can always bring up configuration menu via + + make menuconfig + +During the first run, a menuconfig should appear where you need to configure some parameters of your setup, +most notably - UART port. + +In components submenu there's a few configuration settings related to OAP hardware setup (e.g. gpio pin assignments), +and "OAP Main" menu where you can change various functional parameters. + +** ATTENTION. main task stack should be increased to 10K if you're gonna use AWSIoT (via menuconfig) ** + +All settings are saved in sdkconfig file. + +to flash the module and read from the serial output + + make flash monitor + +That's it. + Happy DIY time! --- From 6eb1c5aa3da967ef9bb7b888bb9b6a6584fdd7ca Mon Sep 17 00:00:00 2001 From: kglowacki Date: Mon, 9 Oct 2017 20:42:53 +0200 Subject: [PATCH 087/200] formatting --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 250ed9b..39b9a27 100644 --- a/README.md +++ b/README.md @@ -90,13 +90,13 @@ to find out what name of the serial port was assigned to our sensor (the easiest 5. Now it is time to install "esptool", which is a firmware uploader from the manufacturer of ESP32 chip (Espressif company). Detailed instructions can be found here: , but if you already have Python and pip installed, just do - pip install esptool + pip install esptool By default it should be installed to "/usr/local/bin/". 6. It is time to perform the uplaod ('flashing'): - esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x30000 sensor-esp32.bin 0x8000 partitions.bin + esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x30000 sensor-esp32.bin 0x8000 partitions.bin Use --port from the step 3, and three bin files downloaded in step 4. From 376ffeefe2bcf9ac14e2de1aa7fa017ca43f7c56 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Mon, 9 Oct 2017 20:43:50 +0200 Subject: [PATCH 088/200] formatting --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 39b9a27..a8f8952 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,9 @@ The procedure below was tested on Mac and Linux (Windows users, by now you shoul 3. Once driver is installed and sensor is connected with usb cable to PC, do - ls -la /dev/tty* + ls -la /dev/tty* -to find out what name of the serial port was assigned to our sensor (the easiest way is to list this folder with sensor disconnected and connected and compare results). Note it down. On my Mac it was "/dev/tty.SLAB_USBtoUART", on Linux - "/dev/ttyUSB0" or /dev/ttyUSB1" but it may be different depending on the system configuration. + to find out what name of the serial port was assigned to our sensor (the easiest way is to list this folder with sensor disconnected and connected and compare results). Note it down. On my Mac it was "/dev/tty.SLAB_USBtoUART", on Linux - "/dev/ttyUSB0" or /dev/ttyUSB1" but it may be different depending on the system configuration. 4. Now download the firmware (three *.bin files) for the latest stable release that you can find here . @@ -92,16 +92,16 @@ to find out what name of the serial port was assigned to our sensor (the easiest pip install esptool -By default it should be installed to "/usr/local/bin/". + By default it should be installed to "/usr/local/bin/". 6. It is time to perform the uplaod ('flashing'): esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x30000 sensor-esp32.bin 0x8000 partitions.bin -Use --port from the step 3, and three bin files downloaded in step 4. - -In most cases, esptool will be able to switch your sensor into 'flashing' mode automatically and reset it afterwords to make it ready to go - it takes a few seconds. Some boards however require manual operation to activate this mode (esptool connection will timeout). -To do so, disconnect the sensor from USB, press and hold small button labeled "EN" on esp32 board (next to micro usb port), connect the sensor, run the command above and then release the button. + Use --port from the step 3, and three bin files downloaded in step 4. + + In most cases, esptool will be able to switch your sensor into 'flashing' mode automatically and reset it afterwords to make it ready to go - it takes a few seconds. Some boards however require manual operation to activate this mode (esptool connection will timeout). + To do so, disconnect the sensor from USB, press and hold small button labeled "EN" on esp32 board (next to micro usb port), connect the sensor, run the command above and then release the button. ## First run From 044d1cbf46a423850b6c7d0e9792e7fca5cba2a2 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Mon, 9 Oct 2017 20:44:30 +0200 Subject: [PATCH 089/200] typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8f8952..1657943 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ The procedure below was tested on Mac and Linux (Windows users, by now you shoul By default it should be installed to "/usr/local/bin/". -6. It is time to perform the uplaod ('flashing'): +6. It is time to perform the flashing: esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x30000 sensor-esp32.bin 0x8000 partitions.bin From b686e080b324e2853e5bb5731272c887ee75fa39 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Mon, 9 Oct 2017 22:51:58 +0200 Subject: [PATCH 090/200] improve mem logging --- bin/read_serial.py | 19 ++++++ components/oap-aws/awsiot.c | 2 +- components/oap-aws/awsiot_rest.c | 78 ----------------------- components/oap-common/include/oap_debug.h | 1 + components/oap-common/oap_debug.c | 34 ++++++++-- components/oap-thingspk/thing_speak.c | 10 +-- 6 files changed, 53 insertions(+), 91 deletions(-) create mode 100755 bin/read_serial.py diff --git a/bin/read_serial.py b/bin/read_serial.py new file mode 100755 index 0000000..ca1d2a7 --- /dev/null +++ b/bin/read_serial.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +import serial +import sys +import time + +ser = serial.Serial(None,115200,timeout=None,rtscts=False,xonxoff=True) +ser.port=sys.argv[1] +ser.dtr=False +ser.rts=False #otherwise it will wait for download after reboot +ser.open() + +try: + while True: + line = ser.readline() + print line, + #to work with 'tee' + sys.stdout.flush() +finally: + ser.close() \ No newline at end of file diff --git a/components/oap-aws/awsiot.c b/components/oap-aws/awsiot.c index 8268c8f..ff100ff 100644 --- a/components/oap-aws/awsiot.c +++ b/components/oap-aws/awsiot.c @@ -60,7 +60,7 @@ static esp_err_t awsiot_rest_post(oap_measurement_t* meas, oap_sensor_config_t * cJSON_AddItemToObject(reported, "status", status); cJSON_AddNumberToObject(results, "uid", rand()); //what about 0? - cJSON_AddNumberToObject(status, "heap", xPortGetFreeHeapSize()); + cJSON_AddNumberToObject(status, "heap", avg_free_heap_size()); cJSON_AddNumberToObject(status, "heap_min", xPortGetMinimumEverFreeHeapSize()); diff --git a/components/oap-aws/awsiot_rest.c b/components/oap-aws/awsiot_rest.c index 413a3c1..55c1066 100644 --- a/components/oap-aws/awsiot_rest.c +++ b/components/oap-aws/awsiot_rest.c @@ -54,8 +54,6 @@ static int download_callback(request_t *req, char *data, int len) { esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body) { char uri[100]; sprintf(uri, "https://%s:%d", awsiot_config->endpoint, awsiot_config->port); -// char host_header[100]; -// sprintf(host_header, "Host: %s", awsiot_config->endpoint); request_t* req = req_new(uri); if (!req) { @@ -106,79 +104,3 @@ esp_err_t awsiot_update_shadow(awsiot_config_t* awsiot_config, char* body) { return ESP_OK; } } - - -/* -#define RESPONSE_BUF_SIZE 1024 - -esp_err_t awsiot_update_shadow_old(awsiot_config_t awsiot_config, char* body) { - //heap_log* hl = heap_log_take(NULL, "start"); - sslclient_context ssl_client = {.0}; - ssl_init(&ssl_client); - int ret = ESP_OK; - - //heap_log_take(hl, "after ssl_init"); - ESP_LOGD(TAG, "connecting to %s:%d", awsiot_config.endpoint,awsiot_config.port); - if ((ssl_client.socket = open_socket(awsiot_config.endpoint,awsiot_config.port,1,0)) < 0) { - return ssl_client.socket; - } else { - ESP_LOGD(TAG, "connected"); - } - //heap_log_take(hl, "connected"); - - char* rootCA = str_make((void*)verisign_root_ca_pem_start, verisign_root_ca_pem_end-verisign_root_ca_pem_start); - if (start_ssl_client(&ssl_client, (unsigned char*)rootCA, (unsigned char*)awsiot_config.cert, (unsigned char*)awsiot_config.pkey, awsiot_config.endpoint) == ESP_OK) { - free(rootCA); - //heap_log_take(hl, "start_ssl_client"); - char* request = malloc(strlen(body) + 250); - - sprintf(request, "POST /things/%s/shadow HTTP/1.1\n" - "Host: %s\n" - "Content-Type: application/json\n" - "Connection: close\n" - "Content-Length: %d\n" - "\r\n%s", awsiot_config.thingName, awsiot_config.endpoint, strlen(body), body); - - ESP_LOGD(TAG, "%s (%d bytes)", request, strlen(request)); - - //heap_log_take(hl, "built request"); - - send_ssl_data(&ssl_client, (uint8_t *)request, strlen(request)); - - //heap_log_take(hl, "send_ssl_data"); - - free(request); - - //heap_log_take(hl, "free request"); - - int len; - //TODO parse at least status code (would be nice to get json body) too - unsigned char* buf = malloc(RESPONSE_BUF_SIZE); - do { - len = get_ssl_receive(&ssl_client, buf, RESPONSE_BUF_SIZE); - if (len == MBEDTLS_ERR_SSL_WANT_READ || len == MBEDTLS_ERR_SSL_WANT_WRITE) { - continue; - } else if (len == -0x4C) { - ESP_LOGD(TAG, "timeout"); - break; - } else if (len <= 0) { - ret = len; - break; - } - for (int i=0; i < len ; i++) { - putchar(buf[i]); - } - } while (1); - free(buf); - } else { - free(rootCA); - ret = ESP_FAIL; - } - //heap_log_take(hl, "request done"); - stop_ssl_socket(&ssl_client); - //heap_log_take(hl, "stop_ssl_socket"); - //heap_log_free(hl); - ESP_LOGI(TAG, "ssl request done %d", ret); - - return ret; -}*/ diff --git a/components/oap-common/include/oap_debug.h b/components/oap-common/include/oap_debug.h index a31a8ac..672c685 100644 --- a/components/oap-common/include/oap_debug.h +++ b/components/oap-common/include/oap_debug.h @@ -30,6 +30,7 @@ void heap_log_print(heap_log* log, heap_log* prev); heap_log* heap_log_take(heap_log* log, const char* msg); void heap_log_free(heap_log* log); +size_t avg_free_heap_size(); void log_task_stack(const char* task); void log_heap_size(const char* msg); diff --git a/components/oap-common/oap_debug.c b/components/oap-common/oap_debug.c index 19c554a..d2fd1ba 100644 --- a/components/oap-common/oap_debug.c +++ b/components/oap-common/oap_debug.c @@ -37,20 +37,40 @@ void log_task_stack(const char* task) { //uxTaskGetStackHighWaterMark is marked as UNTESTED #if !CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION - ESP_LOGD(TAG, "stack min (%d) - task '%s'", uxTaskGetStackHighWaterMark( NULL ), task); + ESP_LOGD(TAG, "stack min %d (task %s)", uxTaskGetStackHighWaterMark( NULL ), task); #endif } - -static size_t last_free_heap = 0; +/** + * current free heap is not very useful because it changes dynamically with multiple tasks running in parallel. + * to detect any leaks, we use a time window and choose the max value as real 'free heap' + */ +#define SAMPLES 10 +static size_t heap_samples[SAMPLES] = {.0}; +uint8_t sample_idx = 0; + +size_t avg_free_heap_size() { + size_t max = 0; + for (int i = 0; i < SAMPLES; i++) { + if (heap_samples[i] > max) max = heap_samples[i]; + } + return max; +} void log_heap_size(const char* msg) { size_t free_heap = xPortGetFreeHeapSize(); - if (last_free_heap == 0) last_free_heap = free_heap; - ESP_LOGD(TAG, "heap min (%d) free (%d) change (%d) - '%s'", + if (heap_samples[sample_idx%SAMPLES] == 0) heap_samples[sample_idx%SAMPLES] = free_heap; + + + + ESP_LOGD(TAG, "heap min %d avg %d free %d change %d (%s)", xPortGetMinimumEverFreeHeapSize(), - free_heap, free_heap-last_free_heap, msg); - last_free_heap = free_heap; + avg_free_heap_size(), + free_heap, + free_heap-heap_samples[sample_idx%SAMPLES], + msg); + heap_samples[sample_idx%SAMPLES] = free_heap; + sample_idx++; } static void* dummy; diff --git a/components/oap-thingspk/thing_speak.c b/components/oap-thingspk/thing_speak.c index 8e3e078..c4a608a 100644 --- a/components/oap-thingspk/thing_speak.c +++ b/components/oap-thingspk/thing_speak.c @@ -62,11 +62,11 @@ static char* prepare_thingspeak_payload(oap_measurement_t* meas) { meas->env->humidity); } - if (meas->env_int) { - sprintf(payload, "%s&field7=%.2f&field8=%.2f", payload, - meas->env_int->temp, - meas->env_int->humidity); - } + //memory metrics + sprintf(payload, "%s&field7=%d&field8=%d", payload, + avg_free_heap_size(), + xPortGetMinimumEverFreeHeapSize()); + return payload; } From 83a0c07c8a9c186718d61e4d59004788cfa2b501 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Mon, 9 Oct 2017 23:01:12 +0200 Subject: [PATCH 091/200] improv mem logging --- components/oap-common/oap_debug.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/components/oap-common/oap_debug.c b/components/oap-common/oap_debug.c index d2fd1ba..6fc3d14 100644 --- a/components/oap-common/oap_debug.c +++ b/components/oap-common/oap_debug.c @@ -61,13 +61,9 @@ void log_heap_size(const char* msg) { size_t free_heap = xPortGetFreeHeapSize(); if (heap_samples[sample_idx%SAMPLES] == 0) heap_samples[sample_idx%SAMPLES] = free_heap; - - - ESP_LOGD(TAG, "heap min %d avg %d free %d change %d (%s)", + ESP_LOGD(TAG, "heap min %d avg %d (%s)", xPortGetMinimumEverFreeHeapSize(), avg_free_heap_size(), - free_heap, - free_heap-heap_samples[sample_idx%SAMPLES], msg); heap_samples[sample_idx%SAMPLES] = free_heap; sample_idx++; From 305b55606503d6652ad1f5100b5eca84130c35ee Mon Sep 17 00:00:00 2001 From: kglowacki Date: Thu, 12 Oct 2017 09:50:51 +0200 Subject: [PATCH 092/200] store coredump in flash --- sdkconfig.defaults | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sdkconfig.defaults b/sdkconfig.defaults index f372f6f..f44fce5 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -108,10 +108,11 @@ CONFIG_MEMMAP_SMP=y # CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set # CONFIG_ESP32_TRAX is not set CONFIG_TRACEMEM_RESERVE_DRAM=0x0 -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH=y # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -# CONFIG_ESP32_ENABLE_COREDUMP is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE is not set +CONFIG_ESP32_ENABLE_COREDUMP=y +CONFIG_ESP32_CORE_DUMP_LOG_LEVEL=1 # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set # CONFIG_ESP32_APPTRACE_DEST_UART is not set CONFIG_ESP32_APPTRACE_DEST_NONE=y From b76dc38aa94aa6bc96e81c78f2c5a2b5dde49064 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Wed, 18 Oct 2017 18:06:48 +0200 Subject: [PATCH 093/200] fix defaults --- components/oap-ota/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-ota/Kconfig b/components/oap-ota/Kconfig index 6bc6a35..008e728 100644 --- a/components/oap-ota/Kconfig +++ b/components/oap-ota/Kconfig @@ -16,7 +16,7 @@ config OAP_OTA_BIN_URI_PREFIX config OAP_OTA_INDEX_URI string "index uri" - default "https://openairproject.com/ota/index.txt"" + default "https://openairproject.com/ota/index.txt" help full URI to file with OTA definition From 35dc54bfde186fc48b103e9e5cbb03deda9609ef Mon Sep 17 00:00:00 2001 From: kglowacki Date: Wed, 18 Oct 2017 20:18:52 +0200 Subject: [PATCH 094/200] reduce flash freq (related to #42) --- sdkconfig.defaults | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdkconfig.defaults b/sdkconfig.defaults index f44fce5..7b6a5b9 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -44,10 +44,10 @@ CONFIG_FLASHMODE_DIO=y # CONFIG_FLASHMODE_DOUT is not set CONFIG_ESPTOOLPY_FLASHMODE="dio" # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set -CONFIG_ESPTOOLPY_FLASHFREQ_40M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_26M=y # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="40m" +CONFIG_ESPTOOLPY_FLASHFREQ="26m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set From 8bbc30910a7654d8adc0b1bd4b2b6eec5cb2f1ad Mon Sep 17 00:00:00 2001 From: kglowacki Date: Wed, 18 Oct 2017 20:20:52 +0200 Subject: [PATCH 095/200] bump to 1.2.0 --- CHANGELOG.md | 6 ++++++ components/oap-common/include/oap_version.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84ac8e5..a1abd76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.2.0 + +- a few IDF configuration changes (run on single core, reduce flash freq) +- clean up logs +- update esp-idf 2.1 to include KRACK fix + # 1.1.0 - reboot after crash or when watchdog detects hanging task for 10sec ([#43](https://github.com/openairproject/sensor-esp32/issues/43)) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index a559d31..375a318 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -37,7 +37,7 @@ #include "esp_err.h" #define OAP_VER_MAJOR 1 -#define OAP_VER_MINOR 1 +#define OAP_VER_MINOR 2 #define OAP_VER_PATCH 0 typedef struct { From 82b231d5cdec92c86ddf1ba7d557b170aec0c831 Mon Sep 17 00:00:00 2001 From: kglowacki Date: Wed, 18 Oct 2017 20:29:31 +0200 Subject: [PATCH 096/200] jenkins fix --- Jenkinsfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Jenkinsfile b/Jenkinsfile index c0143d5..3e0204c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -10,6 +10,7 @@ pipeline { } stage('test') { steps { + sh '/opt/oap/dev/tty_refresh.sh' sh 'bin/make_tests.sh' sh 'sleep 3' sh 'bin/run_tests.py /opt/oap/dev/ttyOAP.TEST' From 9af82e9a58dcdcdcfe7cfb4af1d6d158ed709c0c Mon Sep 17 00:00:00 2001 From: kglowacki Date: Wed, 25 Oct 2017 19:48:01 +0200 Subject: [PATCH 097/200] disable pmsensor before and after unit tests --- components/oap-common/test/include/oap_test.h | 1 + components/oap-common/test/oap_test.c | 15 +++++++++++++++ components/oap-hw-pmsx003/pmsx003.c | 2 -- components/oap-hw-pmsx003/test/test_pmsx003.c | 5 +++++ unit-test-app/main/app_main.c | 2 ++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/components/oap-common/test/include/oap_test.h b/components/oap-common/test/include/oap_test.h index 116f2d5..79454f3 100644 --- a/components/oap-common/test/include/oap_test.h +++ b/components/oap-common/test/include/oap_test.h @@ -30,6 +30,7 @@ #define TEST "TEST" +void test_reset_hw(); /** * init wifi, do not wait for IP */ diff --git a/components/oap-common/test/oap_test.c b/components/oap-common/test/oap_test.c index f038a1a..ef3aed7 100644 --- a/components/oap-common/test/oap_test.c +++ b/components/oap-common/test/oap_test.c @@ -76,3 +76,18 @@ void test_delay(uint32_t ms) { vTaskDelay(ms / portTICK_PERIOD_MS); } + +static void configure_gpio(uint8_t gpio) { + if (gpio > 0) { + ESP_LOGD(TAG, "configure pin %d as output", gpio); + gpio_pad_select_gpio(gpio); + ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); + ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); + } +} + +void test_reset_hw() { + ESP_LOGI(TAG,"reset peripherals"); + configure_gpio(GPIO_NUM_10); //disable pm1 + configure_gpio(GPIO_NUM_2); //disable pm2 +} diff --git a/components/oap-hw-pmsx003/pmsx003.c b/components/oap-hw-pmsx003/pmsx003.c index 9909321..00ae311 100644 --- a/components/oap-hw-pmsx003/pmsx003.c +++ b/components/oap-hw-pmsx003/pmsx003.c @@ -82,8 +82,6 @@ static void set_gpio(uint8_t gpio, uint8_t enabled) { void pms_init_gpio(pmsx003_config_t* config) { configure_gpio(config->set_pin); - //configure_gpio(config->heater_pin); - //configure_gpio(config->fan_pin); } static pm_data_t decodepm_data(uint8_t* data, uint8_t startByte) { diff --git a/components/oap-hw-pmsx003/test/test_pmsx003.c b/components/oap-hw-pmsx003/test/test_pmsx003.c index b756cbd..d4a7a51 100644 --- a/components/oap-hw-pmsx003/test/test_pmsx003.c +++ b/components/oap-hw-pmsx003/test/test_pmsx003.c @@ -51,6 +51,11 @@ esp_err_t pms_uart_read(pmsx003_config_t* config, uint8_t data[32]); static int uart_installed = 0; +void tearDown(void) +{ + test_reset_hw(); +} + TEST_CASE("pmsx003 measurement","pmsx003") { pms_init_gpio(&config); if (!uart_installed) { diff --git a/unit-test-app/main/app_main.c b/unit-test-app/main/app_main.c index bf54b03..96903d4 100644 --- a/unit-test-app/main/app_main.c +++ b/unit-test-app/main/app_main.c @@ -3,6 +3,7 @@ #include "freertos/task.h" #include "unity.h" #include "unity_config.h" +#include "oap_test.h" void unityTask(void *pvParameters) { @@ -13,6 +14,7 @@ void unityTask(void *pvParameters) void app_main() { + test_reset_hw(); // Note: if unpinning this task, change the way run times are calculated in // unity_platform xTaskCreatePinnedToCore(unityTask, "unityTask", 8192, NULL, From 1bd8f2e2393bcdc3f74ad8c8df678c08bb16336d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20W=C4=99grzyn?= Date: Tue, 31 Oct 2017 13:22:20 +0100 Subject: [PATCH 098/200] Seems MarkDown is picky about the whitespace... Don't be shy, show us the prototype! --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1657943..26fea59 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ After rebooting sensor will connect to your wifi If there's a need to force sensor into Access Point mode again (e.g. when it can't connect to specified wifi), reboot the device with a control button pressed down. -![Schema](doc/images/sensor_settings.png?raw=true =320x) +![Schema](doc/images/sensor_settings.png?raw=true=320x) ## Building firmware @@ -158,5 +158,6 @@ That's it. Happy DIY time! ---- -![Schema](doc/images/prototype.jpg?raw=true =600x) \ No newline at end of file +--- + +![Prototype](doc/images/prototype.jpg?raw=true=600x) From e5b342ed368351d98f6097daec2780c6052e54f3 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 3 Jan 2018 23:17:02 +0100 Subject: [PATCH 099/200] Fix esp-idf compatibility, add support for basic auth, add support for CO2 sensor MH-Z19, add support for cgi style get parameters, add support for factory reset config, add support for sealevel pressure from height, add support for hostname / sensor id --- components/oap-aws/awsiot.c | 8 +- components/oap-baycom/baycom.c | 134 ++++++++++++++++ components/oap-baycom/component.mk | 9 ++ components/oap-baycom/include/baycom.h | 32 ++++ .../lets-encrypt-x3-cross-signed.pem | 27 ++++ components/oap-baycom/test/component.mk | 5 + components/oap-baycom/test/test_thing_speak.c | 92 +++++++++++ components/oap-common/default_config.json | 12 +- components/oap-common/include/oap_common.h | 3 +- components/oap-common/include/oap_data.h | 2 + components/oap-common/include/oap_data_env.h | 3 + components/oap-common/include/oap_storage.h | 14 ++ components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 17 +- components/oap-common/oap_storage.c | 24 +++ components/oap-http/esp_request.c | 32 ++-- components/oap-hw-bmx280/bmx280.c | 14 +- components/oap-hw-bmx280/i2c_bme280.c | 2 +- components/oap-hw-bmx280/include/bmx280.h | 1 + components/oap-hw-ext/ctrl_btn.c | 32 ++-- components/oap-hw-ext/include/ctrl_btn.h | 3 +- components/oap-hw-mhz19/Kconfig | 33 ++++ components/oap-hw-mhz19/component.mk | 8 + components/oap-hw-mhz19/include/mhz19.h | 61 ++++++++ components/oap-hw-mhz19/mhz19.c | 146 ++++++++++++++++++ components/oap-hw-pmsx003/pmsx003.c | 17 +- .../oap-ota/lets-encrypt-x3-cross-signed.pem | 27 ++++ components/oap-ota/ota.c | 6 +- components/oap-thingspk/thing_speak.c | 7 - components/oap-wifi/bootwifi.c | 34 ++-- components/oap-wifi/index.html | 23 +++ doc/MH-Z19 CO2 Ver1.0.pdf | Bin 0 -> 706866 bytes main/main.c | 68 ++++---- 33 files changed, 793 insertions(+), 105 deletions(-) create mode 100644 components/oap-baycom/baycom.c create mode 100644 components/oap-baycom/component.mk create mode 100644 components/oap-baycom/include/baycom.h create mode 100644 components/oap-baycom/lets-encrypt-x3-cross-signed.pem create mode 100644 components/oap-baycom/test/component.mk create mode 100644 components/oap-baycom/test/test_thing_speak.c create mode 100644 components/oap-hw-mhz19/Kconfig create mode 100644 components/oap-hw-mhz19/component.mk create mode 100644 components/oap-hw-mhz19/include/mhz19.h create mode 100644 components/oap-hw-mhz19/mhz19.c create mode 100644 components/oap-ota/lets-encrypt-x3-cross-signed.pem create mode 100644 doc/MH-Z19 CO2 Ver1.0.pdf diff --git a/components/oap-aws/awsiot.c b/components/oap-aws/awsiot.c index ff100ff..ef9b63e 100644 --- a/components/oap-aws/awsiot.c +++ b/components/oap-aws/awsiot.c @@ -36,6 +36,7 @@ #include "oap_common.h" #include "oap_debug.h" #include "oap_publisher.h" +#include "oap_storage.h" #include "bootwifi.h" static const char *TAG = "awsiot"; @@ -132,13 +133,6 @@ static esp_err_t awsiot_rest_post(oap_measurement_t* meas, oap_sensor_config_t * return res; } -static void set_config_str_field(char** field, char* value) { - if (*field) { - free(*field); - } - *field = str_dup(value); -} - static esp_err_t awsiot_configure(cJSON* awsiot) { awsiot_config.configured = 0; diff --git a/components/oap-baycom/baycom.c b/components/oap-baycom/baycom.c new file mode 100644 index 0000000..99342f8 --- /dev/null +++ b/components/oap-baycom/baycom.c @@ -0,0 +1,134 @@ +/* + * http.c + * + * Created on: Feb 6, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "baycom.h" + +#include "oap_common.h" +#include "oap_storage.h" +#include "oap_debug.h" +#include "esp_request.h" +#include "bootwifi.h" +#include "cJSON.h" + +extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); + +static const char *TAG = "baycom"; + +static char* url = NULL; +static char* sensorId = NULL; +static int _configured = 0; + +static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { + char* payload = malloc(512); + if (!payload) return NULL; + sprintf(payload, "%s?item=%s&type=ota", uri, sensorId); + + if (meas->pm) { + sprintf(payload, "%s&pm1_0=%d&pm2_5=%d&pm10=%d", payload, + meas->pm->pm1_0, + meas->pm->pm2_5, + meas->pm->pm10); + } + + if (meas->env) { + sprintf(payload, "%s&temp=%.1f&pressure=%.1f&humidity=%.0f", payload, + meas->env->temp, + meas->env->sealevel, + meas->env->humidity); + } + if (meas->co2) { + sprintf(payload, "%s&co2=%d", payload, + meas->co2->co2); + } + + request_t* req = req_new(payload); + if (!req) { + return ESP_FAIL; + } + ESP_LOGD(TAG, "request payload: %s", payload); + req_setopt(req, REQ_SET_METHOD, "GET"); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); + + int response_code = req_perform(req); + req_clean(req); + free(payload); + if (response_code == 200) { + ESP_LOGI(TAG, "update succeeded"); + return ESP_OK; + } else { + ESP_LOGW(TAG, "update failed (response code: %d)", response_code); + return ESP_FAIL; + } + +} + +static esp_err_t baycom_configure(cJSON* config) { + _configured = 0; + ESP_LOGI(TAG, "baycom_configure"); + if (!config) { + ESP_LOGI(TAG, "config not found"); + return ESP_FAIL; + } + + cJSON* field; + if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"wifi"), "sensorId")) && field->valuestring && strlen(field->valuestring)) { + set_config_str_field(&sensorId, field->valuestring); + } else { + ESP_LOGW(TAG, "sensorId not configured"); + return ESP_FAIL; + } + if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "url")) && field->valuestring) { + set_config_str_field(&url, field->valuestring); + } else { + ESP_LOGW(TAG, "url not configured"); + return ESP_FAIL; + } + if (!(field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "enabled")) || !field->valueint) { + ESP_LOGI(TAG, "client disabled"); + return ESP_FAIL; + } + _configured = 1; + return ESP_OK; +} + +static esp_err_t baycom_send(oap_measurement_t* meas, oap_sensor_config_t* oap_sensor_config) { + if (!_configured) { + ESP_LOGE(TAG, "BayCom not configured"); + return ESP_FAIL; + } + esp_err_t ret; + if ((ret = wifi_connected_wait_for(5000)) != ESP_OK) { + ESP_LOGW(TAG, "no connectivity, skip"); + return ret; + } + + ret = rest_post(url, meas); + return ret; +} + +oap_publisher_t BayCom_publisher = { + .name = "BayCom", + .configure = baycom_configure, + .publish = &baycom_send +}; diff --git a/components/oap-baycom/component.mk b/components/oap-baycom/component.mk new file mode 100644 index 0000000..5548fec --- /dev/null +++ b/components/oap-baycom/component.mk @@ -0,0 +1,9 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# +COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-baycom/include/baycom.h b/components/oap-baycom/include/baycom.h new file mode 100644 index 0000000..9f48056 --- /dev/null +++ b/components/oap-baycom/include/baycom.h @@ -0,0 +1,32 @@ +/* + * http.h + * + * Created on: Feb 6, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_BAYCOM_H_ +#define COMPONENTS_BAYCOM_H_ + +#include "esp_err.h" +#include "oap_publisher.h" + + +oap_publisher_t BayCom_publisher; + +#endif diff --git a/components/oap-baycom/lets-encrypt-x3-cross-signed.pem b/components/oap-baycom/lets-encrypt-x3-cross-signed.pem new file mode 100644 index 0000000..0002462 --- /dev/null +++ b/components/oap-baycom/lets-encrypt-x3-cross-signed.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== +-----END CERTIFICATE----- diff --git a/components/oap-baycom/test/component.mk b/components/oap-baycom/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/oap-baycom/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/oap-baycom/test/test_thing_speak.c b/components/oap-baycom/test/test_thing_speak.c new file mode 100644 index 0000000..2d2c8da --- /dev/null +++ b/components/oap-baycom/test/test_thing_speak.c @@ -0,0 +1,92 @@ +/* + * test_thing_speak.c + * + * Created on: Oct 1, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "thing_speak.h" +#include "oap_test.h" + +#define TEST_API_KEY "QMN6JJM996QXBORX" + +TEST_CASE("publish to thingspeak", "[tspk]") { + test_require_wifi(); + + cJSON* cfg = cJSON_CreateObject(); + cJSON_AddNumberToObject(cfg, "enabled", 1); + cJSON_AddStringToObject(cfg, "apikey", TEST_API_KEY); + + TEST_ESP_OK(thingspeak_publisher.configure(cfg)); + cJSON_Delete(cfg); + + pm_data_t pm = { + .pm1_0 = 10, + .pm2_5 = 25, + .pm10 = 50, + .sensor_idx = 0 + }; + + pm_data_t pm_aux = { + .pm1_0 = 11, + .pm2_5 = 26, + .pm10 = 51, + .sensor_idx = 1 + }; + + env_data_t env = { + .temp = 15.5, + .pressure = 999.9, + .humidity = 79.11, + .sensor_idx = 0 + }; + + env_data_t env_int = { + .temp = 22.1, + .pressure = 997.9, + .humidity = 43.89, + .sensor_idx = 1 + }; + + oap_measurement_t meas = { + .pm = &pm, + .pm_aux = &pm_aux, + .env = &env, + .env_int = &env_int, + .local_time = 1505156826 + }; + + oap_sensor_config_t sensor_config = { + .0 + }; + + size_t curr_heap = 0; + size_t prev_heap = 0; + + /* + * heap consumption goes to 0 after ~10 requests + * warning - thingspeak cuts off abusive devices after a while + */ + for (int i = 0; i < 1; i++) { + curr_heap = xPortGetFreeHeapSize(); + ESP_LOGW("test", "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); + prev_heap = curr_heap; + TEST_ESP_OK(thingspeak_publisher.publish(&meas, &sensor_config)); + if (i) test_delay(1000); + } +} diff --git a/components/oap-common/default_config.json b/components/oap-common/default_config.json index d123a75..e49b956 100644 --- a/components/oap-common/default_config.json +++ b/components/oap-common/default_config.json @@ -4,7 +4,8 @@ "password": "", "ip": "", "gw": "", - "netmask": "" + "netmask": "", + "sensorId": "" }, "thingspeak": { "enabled": 0, @@ -28,7 +29,12 @@ "warmUpTime": 30, "measInterval": 300, "test" : 0, - "measStrategy": 0 + "measStrategy" : 0, + "height" : 573 } + }, + "baycom": { + "enabled": 0, + "url": "https://username:password@ota-sensor-server/pushvals.cgi" } -} \ No newline at end of file +} diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index 1728714..b3a1d0c 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -67,5 +67,6 @@ uint32_t micros(); uint32_t millis(); void delay(uint32_t); void delayMicroseconds(uint32_t us); - +void set_gpio(uint8_t gpio, uint8_t enabled); +void configure_gpio(uint8_t gpio); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 643b4cb..4eb4f99 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -31,6 +31,7 @@ typedef struct { pm_data_t* pm_aux; env_data_t* env; env_data_t* env_int; + env_data_t* co2; long int local_time; } oap_measurement_t; @@ -45,6 +46,7 @@ typedef struct { int meas_interval; int meas_strategy; //interval, continuos, etc int test; + int height; } oap_sensor_config_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index 3666a5b..a92e614 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -26,7 +26,10 @@ typedef struct { double temp; double pressure; + double sealevel; double humidity; + uint32_t co2; + uint32_t height; uint8_t sensor_idx; } env_data_t; diff --git a/components/oap-common/include/oap_storage.h b/components/oap-common/include/oap_storage.h index ac17e6a..ed3f379 100644 --- a/components/oap-common/include/oap_storage.h +++ b/components/oap-common/include/oap_storage.h @@ -26,6 +26,20 @@ #include #include "cJSON.h" +/** + * @brief get a mac based system name + */ +void get_generic_name(char *name); + +/** + * @brief get allocated string from string + */ +void set_config_str_field(char** field, char* value); + +/** + * @brief initialise config + */ +void storage_clean(); /** * @brief initialise storage and config diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 375a318..9b9d3de 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 2 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 1 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 7aa6e5c..1ecf245 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -32,13 +32,14 @@ #include "freertos/task.h" static const long FEB22_2017 = 1487795557; +static const char *TAG="oap"; static int _reboot_in_progress = 0; int is_reboot_in_progress() { return _reboot_in_progress; } void oap_reboot(char* cause) { - ESP_LOGW("oap", "REBOOT ON DEMAND (%s)", cause); + ESP_LOGW(TAG, "REBOOT ON DEMAND (%s)", cause); _reboot_in_progress = 1; esp_restart(); } @@ -105,4 +106,18 @@ void IRAM_ATTR delayMicroseconds(uint32_t us) } } +void set_gpio(uint8_t gpio, uint8_t enabled) { + if (gpio > 0) { + ESP_LOGD(TAG, "set pin %d => %d", gpio, enabled); + gpio_set_level(gpio, enabled); + } +} +void configure_gpio(uint8_t gpio) { + if (gpio > 0) { + ESP_LOGD(TAG, "configure pin %d as output", gpio); + gpio_pad_select_gpio(gpio); + ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); + ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); + } +} diff --git a/components/oap-common/oap_storage.c b/components/oap-common/oap_storage.c index 302f193..fcc3db0 100644 --- a/components/oap-common/oap_storage.c +++ b/components/oap-common/oap_storage.c @@ -30,6 +30,7 @@ #include #include "cJSON.h" #include +#include "oap_common.h" extern const uint8_t default_config_json_start[] asm("_binary_default_config_json_start"); extern const uint8_t default_config_json_end[] asm("_binary_default_config_json_end"); @@ -245,6 +246,14 @@ void storage_set_bigblob(const char* key, void* value, size_t length) { //----------- config -------------- +void set_config_str_field(char** field, char* value) { + if (*field) { + free(*field); + } + *field = str_dup(value); +} + + cJSON* storage_get_config(const char* module) { if (!_config) { ESP_LOGE(TAG, "call storage_init_config() first!"); @@ -316,6 +325,15 @@ static char* default_config() { return str; } +void get_generic_name(char *name) { + //generate unique SSID + uint8_t mac[6]; + esp_efuse_mac_get_default(mac); + //ESP_LOGD(tag, "MAC= %02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); + //using full MAC would be the best but I'm not sure if it is safe (if someone has wifi with MAC filtering) + sprintf(name, "OAP-%02X%02X%02X%02X", mac[0], mac[1], mac[4], mac[5]); +} + static void storage_init_config() { char* str = NULL; ESP_LOGD(TAG, "get config"); @@ -354,6 +372,12 @@ static void storage_init_config() { ESP_LOGE(TAG,"default config is not a proper json\n%s", str); abort(); } else { + char id[32]; + get_generic_name(id); + ESP_LOGW(TAG, "sensor id not configured, using %s", id); + cJSON_ReplaceItemInObject(cJSON_GetObjectItem(def_config,"wifi"), "sensorId", cJSON_CreateString(id)); + free(str); + str=cJSON_Print(def_config); ESP_LOGD(TAG,"default config\n%s",str); } free(str); diff --git a/components/oap-http/esp_request.c b/components/oap-http/esp_request.c index 29f4596..459fdae 100644 --- a/components/oap-http/esp_request.c +++ b/components/oap-http/esp_request.c @@ -26,6 +26,7 @@ #include "mbedtls/ctr_drbg.h" #include "mbedtls/error.h" #include "mbedtls/certs.h" +#include "mbedtls/base64.h" #include "freertos/FreeRTOS.h" #include "freertos/queue.h" @@ -104,13 +105,26 @@ static int resolve_dns(const char *host, struct sockaddr_in *ip) { static char *http_auth_basic_encode(const char *username, const char *password) { + char inputstr[64]; + char *outstr = NULL; + size_t olen; + sprintf(inputstr,"%.30s:%.30s", username, password); +// ESP_LOGD(TAG, "http_auth_basic_encode: %s", inputstr); + + mbedtls_base64_encode( (unsigned char*)outstr, 0, &olen, (unsigned char*)inputstr, strlen(inputstr)); + outstr = (char *)malloc(olen+1); + if(!mbedtls_base64_encode( (unsigned char*)outstr, olen, &olen, (unsigned char*)inputstr, strlen(inputstr))) { +// ESP_LOGD(TAG, "http_auth_basic_encode: %s", outstr); + return outstr; + } + free(outstr); return NULL; } static int nossl_connect(request_t *req) { - int socket; + int sock; struct sockaddr_in remote_ip; struct timeval tv; req_list_t *host, *port, *timeout; @@ -125,8 +139,8 @@ static int nossl_connect(request_t *req) } } - socket = socket(PF_INET, SOCK_STREAM, 0); - REQ_CHECK(socket < 0, "socket failed", return -1); + sock = socket(PF_INET, SOCK_STREAM, 0); + REQ_CHECK(sock < 0, "socket failed", return -1); port = req_list_get_key(req->opt, "port"); if(port == NULL) @@ -141,16 +155,16 @@ static int nossl_connect(request_t *req) tv.tv_sec = atoi(timeout->value); } tv.tv_usec = 0; - setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); ESP_LOGD(TAG, "[sock=%d],connecting to server IP:%s,Port:%s...", - socket, ipaddr_ntoa((const ip_addr_t*)&remote_ip.sin_addr.s_addr), (char*)port->value); - if(connect(socket, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr)) != 0) { - close(socket); + sock, ipaddr_ntoa((const ip_addr_t*)&remote_ip.sin_addr.s_addr), (char*)port->value); + if(connect(sock, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr)) != 0) { + close(sock); return -1; } - req->socket = socket; - return socket; + req->socket = sock; + return sock; } void req_free_x509_crt(mbedtls_x509_crt* crt) { diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 650a6c0..5ab7881 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -26,6 +26,8 @@ #include #include #include +#include + #include "sdkconfig.h" #include "oap_common.h" #include "oap_debug.h" @@ -33,6 +35,13 @@ #include "i2c_bme280.h" static char* TAG = "bmx280"; +static float getPressureAtSeaLevel(float height, float pressure) +{ + float gradient = 0.0065; + float tempAtSea = 15.0; + tempAtSea += 273.15; // °C to K + return pressure / pow((1 - gradient * height / tempAtSea), (0.03416 / gradient)); +} esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { i2c_comm_t i2c_comm = { @@ -55,7 +64,8 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { while(1) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.humidity); + result.sealevel = getPressureAtSeaLevel(bmx280_config->height, result.pressure); + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->height, result.humidity); if (bmx280_config->callback) { bmx280_config->callback(&result); } @@ -99,7 +109,7 @@ esp_err_t bmx280_i2c_setup(bmx280_config_t* config) { esp_err_t res; if ((res = i2c_param_config(config->i2c_num, &i2c_conf)) != ESP_OK) return res; - ESP_LOGD(TAG, "install I2C driver (bus %d)", config->i2c_num); + ESP_LOGD(TAG, "install I2C driver (bus %d, sda %d, scl %d)", config->i2c_num, i2c_conf.sda_io_num, i2c_conf.scl_io_num); res = i2c_driver_install(config->i2c_num, I2C_MODE_MASTER, 0, 0, 0); if (res == ESP_OK) { i2c_drivers[config->i2c_num] = 1; diff --git a/components/oap-hw-bmx280/i2c_bme280.c b/components/oap-hw-bmx280/i2c_bme280.c index 768e71b..6274f6e 100755 --- a/components/oap-hw-bmx280/i2c_bme280.c +++ b/components/oap-hw-bmx280/i2c_bme280.c @@ -77,7 +77,7 @@ static esp_err_t read_i2c(i2c_comm_t* comm, uint8_t reg, uint8_t* data, int len) cmd = i2c_cmd_link_create(); CONT_IF_I2C_OK("r6", comm, i2c_master_start(cmd)); CONT_IF_I2C_OK("r7", comm, i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_READ, 1)); - CONT_IF_I2C_OK("r8", comm, i2c_master_read(cmd,data+i,1,1)); //ACK is must! + CONT_IF_I2C_OK("r8", comm, i2c_master_read_byte(cmd,data+i,1)); //ACK is must! CONT_IF_I2C_OK("r9", comm, i2c_master_stop(cmd)); CONT_IF_I2C_OK("r10",comm, i2c_master_cmd_begin(comm->i2c_num, cmd, 2000/portTICK_PERIOD_MS)); i2c_cmd_link_delete(cmd); diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 37fd961..11a43f9 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -49,6 +49,7 @@ typedef struct bmx280_config_t { uint8_t sensor_idx; //sensor number (0 - 1) uint32_t interval; env_callback callback; + uint32_t height; } bmx280_config_t; diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 2e48cf5..585c117 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -39,6 +39,7 @@ typedef struct { uint8_t gpio_num; + uint8_t gpio_val; uint32_t timestamp; } gpio_event_t; @@ -56,7 +57,8 @@ static void IRAM_ATTR gpio_isr_handler(void* arg) last_click = t; gpio_event_t gpio_evt = { .gpio_num = (uint8_t)(uint32_t)arg, - .timestamp = t + .gpio_val = !gpio_get_level(CONFIG_OAP_BTN_0_PIN), + .timestamp = t }; xQueueSendFromISR(gpio_evt_queue, &gpio_evt, NULL); } @@ -65,17 +67,29 @@ static void gpio_watchdog_task() { gpio_event_t gpio_evt; int count = 0; uint32_t first_click = 0; + uint32_t last_down = 0; while(1) { if (xQueueReceive(gpio_evt_queue, &gpio_evt, 1000)) { _callback(SINGLE_CLICK); //20 sec to perform the action - if (!first_click || gpio_evt.timestamp - first_click > 20000) { - first_click = gpio_evt.timestamp; - count = 0; + if(gpio_evt.gpio_val) { + if (!first_click || gpio_evt.timestamp - first_click > 20000) { + first_click = gpio_evt.timestamp; + count = 0; + } + count++; + last_down = gpio_evt.timestamp; + ESP_LOGD(TAG, "click gpio[%d] [%d in sequence]",gpio_evt.gpio_num, count); + } else { + if (last_down && gpio_evt.timestamp - last_down > 5000) { + ESP_LOGD(TAG, "long press gpio[%d] [%d in sequence]",gpio_evt.gpio_num, count); + _callback(LONG_PRESS); + first_click=0; + last_down=0; + count=0; + } } - count++; - ESP_LOGD(TAG, "click gpio[%d] [%d in sequence]",gpio_evt.gpio_num, count); //due to flickering we cannot precisely count all clicks anyway if (count == 10) { @@ -95,8 +109,8 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_evt_queue = xQueueCreate(10, sizeof(gpio_event_t)); gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); - gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_POSEDGE); + gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); @@ -104,6 +118,6 @@ esp_err_t btn_configure(btn_callback_f callback) { } bool is_ap_mode_pressed() { - return gpio_get_level(CONFIG_OAP_BTN_0_PIN); + return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); } diff --git a/components/oap-hw-ext/include/ctrl_btn.h b/components/oap-hw-ext/include/ctrl_btn.h index 5e39c1a..736419c 100644 --- a/components/oap-hw-ext/include/ctrl_btn.h +++ b/components/oap-hw-ext/include/ctrl_btn.h @@ -26,7 +26,8 @@ typedef enum { SINGLE_CLICK, MANY_CLICKS, - TOO_MANY_CLICKS + TOO_MANY_CLICKS, + LONG_PRESS } btn_action_t; typedef void(*btn_callback_f)(btn_action_t); diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig new file mode 100644 index 0000000..b8672c6 --- /dev/null +++ b/components/oap-hw-mhz19/Kconfig @@ -0,0 +1,33 @@ +menu "OAP MH-Z19 CO2 Sensor" + +config OAP_MH_UART_NUM + hex "uart num" + default 2 + help + todo + +config OAP_MH_UART_RXD_PIN + int "RX gpio" + default 16 + help + GPIO pin connected to sensor RX line. This pin can be R/O (>=34). + +config OAP_MH_UART_TXD_PIN + int "TX gpio" + default 17 + help + GPIO pin connected to sensor TX line. + +config OAP_MH_UART_RTS_PIN + int "RTS gpio" + default 18 + help + Any gpio pin (no need to connect this line) + +config OAP_MH_UART_CTS_PIN + int "CTS gpio" + default 19 + help + Any gpio pin (no need to connect this line) + +endmenu diff --git a/components/oap-hw-mhz19/component.mk b/components/oap-hw-mhz19/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-mhz19/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h new file mode 100644 index 0000000..3e5c998 --- /dev/null +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -0,0 +1,61 @@ +/* + * mhz19.h + * + * Created on: Feb 3, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_MHZ19_H_ +#define MAIN_MHZ19_H_ + +#include "oap_common.h" +#include "oap_data_env.h" +#include "driver/uart.h" + +typedef void(*env_callback)(env_data_t*); + +typedef struct { + uint8_t indoor; + uint8_t enabled; //internal, read-only + uint8_t sensor_idx; + uint32_t interval; + env_callback callback; + uart_port_t uart_num; + uint8_t uart_txd_pin; + uint8_t uart_rxd_pin; + uint8_t uart_rts_pin; + uint8_t uart_cts_pin; +} mhz19_config_t; + +/** + * pm samples data is send to the queue. + */ +esp_err_t mhz19_init(mhz19_config_t* config); + +/** + * enable/disable sensor. + */ +esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled); + + +/** + * fill config based on hardware configuration + */ +esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx); + +#endif /* MAIN_MHZ19_H_ */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c new file mode 100644 index 0000000..d571c30 --- /dev/null +++ b/components/oap-hw-mhz19/mhz19.c @@ -0,0 +1,146 @@ +/* + * mhz19.c + * + * Created on: Feb 3, 2017 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "driver/gpio.h" +#include "driver/uart.h" +#include "soc/uart_struct.h" +#include "esp_log.h" +#include "mhz19.h" +#include "oap_debug.h" +#include "oap_data_env.h" + +/* + * Driver for Plantower PMS3003 / PMS5003 / PMS7003 dust sensors. + * PMS sensors return two values for different environment of measurement. + */ +#define OAP_PM_UART_BUF_SIZE (128) + +static const char* TAG = "mhz19"; + +esp_err_t mhz19_init_uart(mhz19_config_t* config) { + //configure UART + uart_config_t uart_config = { + .baud_rate = 9600, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, + .rx_flow_ctrl_thresh = 122, + }; + esp_err_t ret; + if ((ret = uart_param_config(config->uart_num, &uart_config)) != ESP_OK) { + return ret; + } + + if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin)) != ESP_OK) { + return ret; + } + //Install UART driver( We don't need an event queue here) + + ret = uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + return ret; +} + +static int mhz19_check(uint8_t *packet) { + unsigned char checksum=0; + for(int i=1; i<8; i++) { + checksum += packet[i]; + } + checksum = 0xff-checksum; + checksum += 1; + if(packet[8]!=checksum) { + packet[8]=checksum; + return 0; + } + return 1; +} + +static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { + if (config->enabled) { + uint8_t packet[9]={0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; + mhz19_check(packet); + int len=uart_write_bytes(config->uart_num, (const char *)packet, sizeof(packet)); + if(len == 9){ + uint8_t data[32]; + len = uart_read_bytes(config->uart_num, data, sizeof(data), 100 / portTICK_RATE_MS); + if(len == 9 && mhz19_check(data)){ + if(data[0]==0xff && data[1]==0x86) { + int co2val=(data[2]<<8) | data[3]; + ESP_LOGD(TAG, "CO2: %d",co2val); + if (config->callback) { + env_data_t result = { + .sensor_idx = config->sensor_idx, + .co2 = co2val + }; + config->callback(&result); + } + } + } + } + } + return ESP_OK; +} + +static void mhz19_task(mhz19_config_t* config) { + while(1) { + mhz19_cmd_gc(config); + if (config->interval > 0) { + delay(config->interval); + } else { + break; + } + } + vTaskDelete(NULL); +} + +esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled) { + ESP_LOGI(TAG,"enable(%d)",enabled); + config->enabled = enabled; + return ESP_OK; //todo +} + +esp_err_t mhz19_init(mhz19_config_t* config) { + mhz19_enable(config, 0); + mhz19_init_uart(config); + + char task_name[100]; + sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); + + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + return ESP_OK; //todo +} + +esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { + config->sensor_idx = sensor_idx; + config->uart_num = CONFIG_OAP_MH_UART_NUM; + config->uart_txd_pin = CONFIG_OAP_MH_UART_TXD_PIN; + config->uart_rxd_pin = CONFIG_OAP_MH_UART_RXD_PIN; + config->uart_rts_pin = CONFIG_OAP_MH_UART_RTS_PIN; + config->uart_cts_pin = CONFIG_OAP_MH_UART_CTS_PIN; + return ESP_OK; +} diff --git a/components/oap-hw-pmsx003/pmsx003.c b/components/oap-hw-pmsx003/pmsx003.c index 00ae311..2c1d5bc 100644 --- a/components/oap-hw-pmsx003/pmsx003.c +++ b/components/oap-hw-pmsx003/pmsx003.c @@ -31,6 +31,7 @@ #include "esp_log.h" #include "pmsx003.h" #include "oap_debug.h" +#include "oap_common.h" /* * Driver for Plantower PMS3003 / PMS5003 / PMS7003 dust sensors. @@ -64,22 +65,6 @@ esp_err_t pms_init_uart(pmsx003_config_t* config) { return ret; } -static void configure_gpio(uint8_t gpio) { - if (gpio > 0) { - ESP_LOGD(TAG, "configure pin %d as output", gpio); - gpio_pad_select_gpio(gpio); - ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); - ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); - } -} - -static void set_gpio(uint8_t gpio, uint8_t enabled) { - if (gpio > 0) { - ESP_LOGD(TAG, "set pin %d => %d", gpio, enabled); - gpio_set_level(gpio, enabled); - } -} - void pms_init_gpio(pmsx003_config_t* config) { configure_gpio(config->set_pin); } diff --git a/components/oap-ota/lets-encrypt-x3-cross-signed.pem b/components/oap-ota/lets-encrypt-x3-cross-signed.pem new file mode 100644 index 0000000..0002462 --- /dev/null +++ b/components/oap-ota/lets-encrypt-x3-cross-signed.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== +-----END CERTIFICATE----- diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index 764f2ec..9e8aa04 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -43,8 +43,10 @@ #define TAG "ota" -extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); -extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +//extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +//extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { for (int i = 0; i < 32; i++) { diff --git a/components/oap-thingspk/thing_speak.c b/components/oap-thingspk/thing_speak.c index c4a608a..82b8470 100644 --- a/components/oap-thingspk/thing_speak.c +++ b/components/oap-thingspk/thing_speak.c @@ -36,13 +36,6 @@ static const char *TAG = "thingspk"; static char* apikey = NULL; static int _configured = 0; -static void set_config_str_field(char** field, char* value) { - if (*field) { - free(*field); - } - *field = str_dup(value); -} - static char* prepare_thingspeak_payload(oap_measurement_t* meas) { char* payload = malloc(512); if (!payload) return NULL; diff --git a/components/oap-wifi/bootwifi.c b/components/oap-wifi/bootwifi.c index 07177a7..0da4155 100644 --- a/components/oap-wifi/bootwifi.c +++ b/components/oap-wifi/bootwifi.c @@ -27,10 +27,12 @@ #include #include #include +#include "cJSON.h" #include "bootwifi.h" #include "sdkconfig.h" #include "apps/sntp/sntp.h" #include "oap_common.h" +#include "oap_storage.h" #include "freertos/event_groups.h" #include "server.h" #include "cpanel.h" @@ -76,6 +78,7 @@ static void become_access_point(); static void restore_wifi_setup(); static char tag[] = "wifi"; +static char *hostname = NULL; /* FreeRTOS event group to signal when we are connected & ready to make a request */ static EventGroupHandle_t wifi_event_group = NULL; @@ -239,6 +242,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { return ESP_OK; } + esp_err_t wifi_configure(cJSON* wifi, wifi_state_callback_f wifi_state_callback) { memset(&oap_wifi_config, 0, sizeof(oc_wifi_t)); oap_wifi_config.callback = wifi_state_callback; @@ -263,7 +267,9 @@ esp_err_t wifi_configure(cJSON* wifi, wifi_state_callback_f wifi_state_callback) if ((field = cJSON_GetObjectItem(wifi, "netmask"))) { inet_pton(AF_INET, field->valuestring, &oap_wifi_config.ipInfo.netmask); } - + if ((field = cJSON_GetObjectItem(wifi, "sensorId")) && field->valuestring && strlen(field->valuestring)) { + set_config_str_field(&hostname, field->valuestring); + } ESP_LOGD(tag, "wifi.ssid: %s", oap_wifi_config.ssid); ESP_LOGD(tag, "wifi.pass.lenght: [%d]", strlen(oap_wifi_config.password)); @@ -289,13 +295,18 @@ static void become_station() { tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } - ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); - wifi_config_t sta_config; - sta_config.sta.bssid_set = 0; - memcpy(sta_config.sta.ssid, oap_wifi_config.ssid, SSID_SIZE); - memcpy(sta_config.sta.password, oap_wifi_config.password, PASSWORD_SIZE); - ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); - ESP_ERROR_CHECK(esp_wifi_start()); + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + wifi_config_t sta_config; + sta_config.sta.bssid_set = 0; + memcpy(sta_config.sta.ssid, oap_wifi_config.ssid, SSID_SIZE); + memcpy(sta_config.sta.password, oap_wifi_config.password, PASSWORD_SIZE); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); + ESP_ERROR_CHECK(esp_wifi_start()); + esp_err_t err = tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, hostname); + if (err){ + ESP_LOGI(tag, "tcpip_adapter_set_hostname failed, rc=%d", err); + } + ESP_ERROR_CHECK(esp_wifi_connect());//FIXERR 0x3006 : ESP_ERR_WIFI_CONN (happens after reboot via control panel) } @@ -303,12 +314,7 @@ static void become_access_point() { ESP_LOGD(tag, "- Starting being an access point ..."); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); - //generate unique SSID - uint8_t mac[6]; - esp_efuse_mac_get_default(mac); - //ESP_LOGD(tag, "MAC= %02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); - //using full MAC would be the best but I'm not sure if it is safe (if someone has wifi with MAC filtering) - sprintf((char*)ap_config.ap.ssid, "OpenAirProject-%02X%02X%02X%02X", mac[0], mac[1], mac[4], mac[5]); + get_generic_name((char *)ap_config.ap.ssid); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &ap_config)); ESP_ERROR_CHECK(esp_wifi_start()); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 2086da0..e0bce31 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -124,6 +124,11 @@

    OpenAirProject Sensor
    Netmask + + + + +

    @@ -181,6 +186,24 @@

    OpenAirProject Sensor
    Measurement strategy (adv) + + + + + +

    + +
    + BayCom Client + + + + + + + + +
    diff --git a/doc/MH-Z19 CO2 Ver1.0.pdf b/doc/MH-Z19 CO2 Ver1.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..58b486c9f682e173f47dacb13f7aad48f382b9f3 GIT binary patch literal 706866 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

    4RA1G#KbJ-9XAot=I<}g(=?-2Y= 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

    P9HFKe;mtRCG`84K6fE0_{p_Y9GdQ| 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

    >E?;~EWF&~xn4}C-N#;0 zUT637y1To%P&J7=Y4)PMy%Qa(@mV;K@?8H<^rW-BbfiC*eK#Hs#@78Um2sM$B(0h| zW3hc^SzRud^T~9USIfKQb^W&U)AjW%FFQXkt3prc)bDijRJqm9bXm-!s4` zyUTt*TmS>v-Itx3?LMB~ME+DSyLET^(N})_sah8Id08DkpuL(qJv1lb_ohR$nh0X${EXUtfmn@c6WzeHpISfE@nyWw;KHPwUy2;c5-Y z;a^{d>+txro;@^NN6+&kootT9T4^9l32H2v;P($rd3uMd2H)VbrbchCSG>HLUjo_U{Af)Hd7$-rgq&lgy{;`c$-Ru*PqMw76~cc;Y_n$F~)lVbi~y z@TdM-!a!$>>H7~K&*j~@hP9{f?T68av+xHNjCp_N(#bFDiTip|9?jG>@=KRse!9i* E2MM2)DgXcg literal 0 HcmV?d00001 diff --git a/main/main.c b/main/main.c index 5001e4c..a50ee48 100644 --- a/main/main.c +++ b/main/main.c @@ -34,6 +34,7 @@ #include #include "thing_speak.h" +#include "baycom.h" #include "meas_intervals.h" #include "meas_continuous.h" @@ -42,6 +43,7 @@ #include "ctrl_btn.h" #include "bmx280.h" #include "pmsx003.h" +#include "mhz19.h" #include "oap_common.h" #include "oap_storage.h" #include "oap_debug.h" @@ -133,24 +135,6 @@ static void pm_meter_output_handler(pm_meter_event_t event, void* data) { } } -//TODO share -static void set_gpio(uint8_t gpio, uint8_t enabled) { - if (gpio > 0) { - ESP_LOGD(TAG, "set pin %d => %d", gpio, enabled); - gpio_set_level(gpio, enabled); - } -} - -//TODO share -static void configure_gpio(uint8_t gpio) { - if (gpio > 0) { - ESP_LOGD(TAG, "configure pin %d as output", gpio); - gpio_pad_select_gpio(gpio); - ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); - ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); - } -} - static void pmsx003_enable_0(uint8_t enable) { if (oap_sensor_config.heater) { set_gpio(pm_meter_aux.heater_pin, enable); @@ -229,10 +213,6 @@ static esp_err_t pm_meter_init() { return ESP_OK; } - - - - //--------- ENV ----------- typedef struct { @@ -240,15 +220,22 @@ typedef struct { long timestamp; } env_data_record_t; -static env_data_record_t last_env_data[2]; +static env_data_record_t last_env_data[3]; static bmx280_config_t bmx280_config[2]; +static mhz19_config_t mhz19_cfg; +static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { - if (env_data->sensor_idx <= 1) { - ESP_LOGI(TAG,"env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity); - env_data_record_t* r = last_env_data + env_data->sensor_idx; - r->timestamp = oap_epoch_sec(); - memcpy(&last_env_data->env_data, env_data, sizeof(env_data_t)); + if (env_data->sensor_idx <= 2) { + if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 100 ) == pdTRUE ) { + ESP_LOGI(TAG,"env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); + env_data_record_t* r = last_env_data + env_data->sensor_idx; + r->timestamp = oap_epoch_sec(); + memcpy(r, env_data, sizeof(env_data_t)); + xSemaphoreGiveRecursive(envSemaphore); + } else { + ESP_LOGW(TAG,"*** env waiting too long for mutex ***"); + } } else { ESP_LOGE(TAG, "env (%d) - invalid sensor", env_data->sensor_idx); } @@ -257,10 +244,12 @@ static void env_sensor_callback(env_data_t* env_data) { static void env_sensors_init() { memset(&last_env_data, 0, sizeof(env_data_record_t)*2); memset(bmx280_config, 0, sizeof(bmx280_config_t)*2); + envSemaphore = xSemaphoreCreateRecursiveMutex(); if (bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { bmx280_config[0].interval = 5000; bmx280_config[0].callback = &env_sensor_callback; + bmx280_config[0].height = oap_sensor_config.height; if (bmx280_init(&bmx280_config[0]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 0); @@ -270,15 +259,20 @@ static void env_sensors_init() { if (bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { bmx280_config[1].interval = 5000; bmx280_config[1].callback = &env_sensor_callback; + bmx280_config[1].height = oap_sensor_config.height; if (bmx280_init(&bmx280_config[1]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } + if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { + mhz19_cfg.interval = 5000; + mhz19_cfg.callback = &env_sensor_callback; + mhz19_init(&mhz19_cfg); + mhz19_enable(&mhz19_cfg, 1); + } } - - //--------- MAIN ----------- list_t* publishers; @@ -303,7 +297,7 @@ static void publish_loop() { log_task_stack(TAG); float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); //ESP_LOGI(TAG, "AQI=%f",aqi); - ledc_set_color(aqi,(1-aqi), 0); +// ledc_set_color(aqi,(1-aqi), 0); ledc_set_mode(LED_SET); ledc_update(); @@ -312,6 +306,7 @@ static void publish_loop() { .pm_aux = pm_data_pair.count == 2 ? &pm_data_pair.pm_data[1] : NULL, .env = sysTime - last_env_data[0].timestamp < 60 ? &last_env_data[0].env_data : NULL, .env_int = sysTime - last_env_data[1].timestamp < 60 ? &last_env_data[1].env_data : NULL, + .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, .local_time = localTime }; @@ -333,6 +328,7 @@ static oap_sensor_config_t sensor_config_from_json(cJSON* sconfig) { if ((field = cJSON_GetObjectItem(sconfig, "measInterval"))) sensor_config.meas_interval = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "measStrategy"))) sensor_config.meas_strategy = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "test"))) sensor_config.test = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "height"))) sensor_config.height = field->valueint; return sensor_config; } @@ -344,6 +340,9 @@ void publishers_init() { if (thingspeak_publisher.configure(storage_get_config("thingspeak")) == ESP_OK) { list_insert(publishers, &thingspeak_publisher); } + if (BayCom_publisher.configure(storage_get_config(NULL)) == ESP_OK) { + list_insert(publishers, &BayCom_publisher); + } } @@ -357,6 +356,12 @@ static void btn_handler(btn_action_t action) { case TOO_MANY_CLICKS : reset_to_factory_partition(); break; + case LONG_PRESS : + ESP_LOGW(TAG, "config reset!"); + storage_clean(); + delay(1000); + oap_reboot("reboot due to config reset"); + break; default: break; } @@ -388,6 +393,7 @@ void app_main() { pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_init(); env_sensors_init(); + publishers_init(); publish_loop(); From c45cee7c9961de571173e2877aca3b2dc2125e79 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 3 Jan 2018 23:17:02 +0100 Subject: [PATCH 100/200] Fix esp-idf compatibility, add support for basic auth, add support for CO2 sensor MH-Z19, add support for cgi style get parameters, add support for factory reset config, add support for sealevel pressure from height, add support for hostname / sensor id --- components/oap-aws/awsiot.c | 8 +- components/oap-baycom/baycom.c | 134 ++++++++++++++++ components/oap-baycom/component.mk | 9 ++ components/oap-baycom/include/baycom.h | 32 ++++ .../lets-encrypt-x3-cross-signed.pem | 27 ++++ components/oap-baycom/test/component.mk | 5 + components/oap-baycom/test/test_thing_speak.c | 92 +++++++++++ components/oap-common/include/oap_common.h | 3 +- components/oap-common/include/oap_data.h | 2 + components/oap-common/include/oap_data_env.h | 3 + components/oap-common/include/oap_storage.h | 14 ++ components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 17 +- components/oap-common/oap_storage.c | 24 +++ components/oap-http/esp_request.c | 32 ++-- components/oap-hw-bmx280/bmx280.c | 14 +- components/oap-hw-bmx280/i2c_bme280.c | 2 +- components/oap-hw-bmx280/include/bmx280.h | 1 + components/oap-hw-ext/ctrl_btn.c | 32 ++-- components/oap-hw-ext/include/ctrl_btn.h | 3 +- components/oap-hw-mhz19/Kconfig | 33 ++++ components/oap-hw-mhz19/component.mk | 8 + components/oap-hw-mhz19/include/mhz19.h | 61 ++++++++ components/oap-hw-mhz19/mhz19.c | 146 ++++++++++++++++++ components/oap-hw-pmsx003/pmsx003.c | 17 +- .../oap-ota/lets-encrypt-x3-cross-signed.pem | 27 ++++ components/oap-ota/ota.c | 6 +- components/oap-thingspk/thing_speak.c | 7 - components/oap-wifi/bootwifi.c | 34 ++-- components/oap-wifi/index.html | 23 +++ doc/MH-Z19 CO2 Ver1.0.pdf | Bin 0 -> 706866 bytes main/main.c | 68 ++++---- 32 files changed, 784 insertions(+), 102 deletions(-) create mode 100644 components/oap-baycom/baycom.c create mode 100644 components/oap-baycom/component.mk create mode 100644 components/oap-baycom/include/baycom.h create mode 100644 components/oap-baycom/lets-encrypt-x3-cross-signed.pem create mode 100644 components/oap-baycom/test/component.mk create mode 100644 components/oap-baycom/test/test_thing_speak.c create mode 100644 components/oap-hw-mhz19/Kconfig create mode 100644 components/oap-hw-mhz19/component.mk create mode 100644 components/oap-hw-mhz19/include/mhz19.h create mode 100644 components/oap-hw-mhz19/mhz19.c create mode 100644 components/oap-ota/lets-encrypt-x3-cross-signed.pem create mode 100644 doc/MH-Z19 CO2 Ver1.0.pdf diff --git a/components/oap-aws/awsiot.c b/components/oap-aws/awsiot.c index ff100ff..ef9b63e 100644 --- a/components/oap-aws/awsiot.c +++ b/components/oap-aws/awsiot.c @@ -36,6 +36,7 @@ #include "oap_common.h" #include "oap_debug.h" #include "oap_publisher.h" +#include "oap_storage.h" #include "bootwifi.h" static const char *TAG = "awsiot"; @@ -132,13 +133,6 @@ static esp_err_t awsiot_rest_post(oap_measurement_t* meas, oap_sensor_config_t * return res; } -static void set_config_str_field(char** field, char* value) { - if (*field) { - free(*field); - } - *field = str_dup(value); -} - static esp_err_t awsiot_configure(cJSON* awsiot) { awsiot_config.configured = 0; diff --git a/components/oap-baycom/baycom.c b/components/oap-baycom/baycom.c new file mode 100644 index 0000000..99342f8 --- /dev/null +++ b/components/oap-baycom/baycom.c @@ -0,0 +1,134 @@ +/* + * http.c + * + * Created on: Feb 6, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "baycom.h" + +#include "oap_common.h" +#include "oap_storage.h" +#include "oap_debug.h" +#include "esp_request.h" +#include "bootwifi.h" +#include "cJSON.h" + +extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); + +static const char *TAG = "baycom"; + +static char* url = NULL; +static char* sensorId = NULL; +static int _configured = 0; + +static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { + char* payload = malloc(512); + if (!payload) return NULL; + sprintf(payload, "%s?item=%s&type=ota", uri, sensorId); + + if (meas->pm) { + sprintf(payload, "%s&pm1_0=%d&pm2_5=%d&pm10=%d", payload, + meas->pm->pm1_0, + meas->pm->pm2_5, + meas->pm->pm10); + } + + if (meas->env) { + sprintf(payload, "%s&temp=%.1f&pressure=%.1f&humidity=%.0f", payload, + meas->env->temp, + meas->env->sealevel, + meas->env->humidity); + } + if (meas->co2) { + sprintf(payload, "%s&co2=%d", payload, + meas->co2->co2); + } + + request_t* req = req_new(payload); + if (!req) { + return ESP_FAIL; + } + ESP_LOGD(TAG, "request payload: %s", payload); + req_setopt(req, REQ_SET_METHOD, "GET"); + req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); + + int response_code = req_perform(req); + req_clean(req); + free(payload); + if (response_code == 200) { + ESP_LOGI(TAG, "update succeeded"); + return ESP_OK; + } else { + ESP_LOGW(TAG, "update failed (response code: %d)", response_code); + return ESP_FAIL; + } + +} + +static esp_err_t baycom_configure(cJSON* config) { + _configured = 0; + ESP_LOGI(TAG, "baycom_configure"); + if (!config) { + ESP_LOGI(TAG, "config not found"); + return ESP_FAIL; + } + + cJSON* field; + if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"wifi"), "sensorId")) && field->valuestring && strlen(field->valuestring)) { + set_config_str_field(&sensorId, field->valuestring); + } else { + ESP_LOGW(TAG, "sensorId not configured"); + return ESP_FAIL; + } + if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "url")) && field->valuestring) { + set_config_str_field(&url, field->valuestring); + } else { + ESP_LOGW(TAG, "url not configured"); + return ESP_FAIL; + } + if (!(field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "enabled")) || !field->valueint) { + ESP_LOGI(TAG, "client disabled"); + return ESP_FAIL; + } + _configured = 1; + return ESP_OK; +} + +static esp_err_t baycom_send(oap_measurement_t* meas, oap_sensor_config_t* oap_sensor_config) { + if (!_configured) { + ESP_LOGE(TAG, "BayCom not configured"); + return ESP_FAIL; + } + esp_err_t ret; + if ((ret = wifi_connected_wait_for(5000)) != ESP_OK) { + ESP_LOGW(TAG, "no connectivity, skip"); + return ret; + } + + ret = rest_post(url, meas); + return ret; +} + +oap_publisher_t BayCom_publisher = { + .name = "BayCom", + .configure = baycom_configure, + .publish = &baycom_send +}; diff --git a/components/oap-baycom/component.mk b/components/oap-baycom/component.mk new file mode 100644 index 0000000..5548fec --- /dev/null +++ b/components/oap-baycom/component.mk @@ -0,0 +1,9 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# +COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-baycom/include/baycom.h b/components/oap-baycom/include/baycom.h new file mode 100644 index 0000000..9f48056 --- /dev/null +++ b/components/oap-baycom/include/baycom.h @@ -0,0 +1,32 @@ +/* + * http.h + * + * Created on: Feb 6, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef COMPONENTS_BAYCOM_H_ +#define COMPONENTS_BAYCOM_H_ + +#include "esp_err.h" +#include "oap_publisher.h" + + +oap_publisher_t BayCom_publisher; + +#endif diff --git a/components/oap-baycom/lets-encrypt-x3-cross-signed.pem b/components/oap-baycom/lets-encrypt-x3-cross-signed.pem new file mode 100644 index 0000000..0002462 --- /dev/null +++ b/components/oap-baycom/lets-encrypt-x3-cross-signed.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== +-----END CERTIFICATE----- diff --git a/components/oap-baycom/test/component.mk b/components/oap-baycom/test/component.mk new file mode 100644 index 0000000..5dd172b --- /dev/null +++ b/components/oap-baycom/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/oap-baycom/test/test_thing_speak.c b/components/oap-baycom/test/test_thing_speak.c new file mode 100644 index 0000000..2d2c8da --- /dev/null +++ b/components/oap-baycom/test/test_thing_speak.c @@ -0,0 +1,92 @@ +/* + * test_thing_speak.c + * + * Created on: Oct 1, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include "thing_speak.h" +#include "oap_test.h" + +#define TEST_API_KEY "QMN6JJM996QXBORX" + +TEST_CASE("publish to thingspeak", "[tspk]") { + test_require_wifi(); + + cJSON* cfg = cJSON_CreateObject(); + cJSON_AddNumberToObject(cfg, "enabled", 1); + cJSON_AddStringToObject(cfg, "apikey", TEST_API_KEY); + + TEST_ESP_OK(thingspeak_publisher.configure(cfg)); + cJSON_Delete(cfg); + + pm_data_t pm = { + .pm1_0 = 10, + .pm2_5 = 25, + .pm10 = 50, + .sensor_idx = 0 + }; + + pm_data_t pm_aux = { + .pm1_0 = 11, + .pm2_5 = 26, + .pm10 = 51, + .sensor_idx = 1 + }; + + env_data_t env = { + .temp = 15.5, + .pressure = 999.9, + .humidity = 79.11, + .sensor_idx = 0 + }; + + env_data_t env_int = { + .temp = 22.1, + .pressure = 997.9, + .humidity = 43.89, + .sensor_idx = 1 + }; + + oap_measurement_t meas = { + .pm = &pm, + .pm_aux = &pm_aux, + .env = &env, + .env_int = &env_int, + .local_time = 1505156826 + }; + + oap_sensor_config_t sensor_config = { + .0 + }; + + size_t curr_heap = 0; + size_t prev_heap = 0; + + /* + * heap consumption goes to 0 after ~10 requests + * warning - thingspeak cuts off abusive devices after a while + */ + for (int i = 0; i < 1; i++) { + curr_heap = xPortGetFreeHeapSize(); + ESP_LOGW("test", "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); + prev_heap = curr_heap; + TEST_ESP_OK(thingspeak_publisher.publish(&meas, &sensor_config)); + if (i) test_delay(1000); + } +} diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index 1728714..b3a1d0c 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -67,5 +67,6 @@ uint32_t micros(); uint32_t millis(); void delay(uint32_t); void delayMicroseconds(uint32_t us); - +void set_gpio(uint8_t gpio, uint8_t enabled); +void configure_gpio(uint8_t gpio); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 643b4cb..4eb4f99 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -31,6 +31,7 @@ typedef struct { pm_data_t* pm_aux; env_data_t* env; env_data_t* env_int; + env_data_t* co2; long int local_time; } oap_measurement_t; @@ -45,6 +46,7 @@ typedef struct { int meas_interval; int meas_strategy; //interval, continuos, etc int test; + int height; } oap_sensor_config_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index 3666a5b..a92e614 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -26,7 +26,10 @@ typedef struct { double temp; double pressure; + double sealevel; double humidity; + uint32_t co2; + uint32_t height; uint8_t sensor_idx; } env_data_t; diff --git a/components/oap-common/include/oap_storage.h b/components/oap-common/include/oap_storage.h index ac17e6a..ed3f379 100644 --- a/components/oap-common/include/oap_storage.h +++ b/components/oap-common/include/oap_storage.h @@ -26,6 +26,20 @@ #include #include "cJSON.h" +/** + * @brief get a mac based system name + */ +void get_generic_name(char *name); + +/** + * @brief get allocated string from string + */ +void set_config_str_field(char** field, char* value); + +/** + * @brief initialise config + */ +void storage_clean(); /** * @brief initialise storage and config diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 375a318..9b9d3de 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 2 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 1 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 7aa6e5c..1ecf245 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -32,13 +32,14 @@ #include "freertos/task.h" static const long FEB22_2017 = 1487795557; +static const char *TAG="oap"; static int _reboot_in_progress = 0; int is_reboot_in_progress() { return _reboot_in_progress; } void oap_reboot(char* cause) { - ESP_LOGW("oap", "REBOOT ON DEMAND (%s)", cause); + ESP_LOGW(TAG, "REBOOT ON DEMAND (%s)", cause); _reboot_in_progress = 1; esp_restart(); } @@ -105,4 +106,18 @@ void IRAM_ATTR delayMicroseconds(uint32_t us) } } +void set_gpio(uint8_t gpio, uint8_t enabled) { + if (gpio > 0) { + ESP_LOGD(TAG, "set pin %d => %d", gpio, enabled); + gpio_set_level(gpio, enabled); + } +} +void configure_gpio(uint8_t gpio) { + if (gpio > 0) { + ESP_LOGD(TAG, "configure pin %d as output", gpio); + gpio_pad_select_gpio(gpio); + ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); + ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); + } +} diff --git a/components/oap-common/oap_storage.c b/components/oap-common/oap_storage.c index 302f193..fcc3db0 100644 --- a/components/oap-common/oap_storage.c +++ b/components/oap-common/oap_storage.c @@ -30,6 +30,7 @@ #include #include "cJSON.h" #include +#include "oap_common.h" extern const uint8_t default_config_json_start[] asm("_binary_default_config_json_start"); extern const uint8_t default_config_json_end[] asm("_binary_default_config_json_end"); @@ -245,6 +246,14 @@ void storage_set_bigblob(const char* key, void* value, size_t length) { //----------- config -------------- +void set_config_str_field(char** field, char* value) { + if (*field) { + free(*field); + } + *field = str_dup(value); +} + + cJSON* storage_get_config(const char* module) { if (!_config) { ESP_LOGE(TAG, "call storage_init_config() first!"); @@ -316,6 +325,15 @@ static char* default_config() { return str; } +void get_generic_name(char *name) { + //generate unique SSID + uint8_t mac[6]; + esp_efuse_mac_get_default(mac); + //ESP_LOGD(tag, "MAC= %02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); + //using full MAC would be the best but I'm not sure if it is safe (if someone has wifi with MAC filtering) + sprintf(name, "OAP-%02X%02X%02X%02X", mac[0], mac[1], mac[4], mac[5]); +} + static void storage_init_config() { char* str = NULL; ESP_LOGD(TAG, "get config"); @@ -354,6 +372,12 @@ static void storage_init_config() { ESP_LOGE(TAG,"default config is not a proper json\n%s", str); abort(); } else { + char id[32]; + get_generic_name(id); + ESP_LOGW(TAG, "sensor id not configured, using %s", id); + cJSON_ReplaceItemInObject(cJSON_GetObjectItem(def_config,"wifi"), "sensorId", cJSON_CreateString(id)); + free(str); + str=cJSON_Print(def_config); ESP_LOGD(TAG,"default config\n%s",str); } free(str); diff --git a/components/oap-http/esp_request.c b/components/oap-http/esp_request.c index 29f4596..459fdae 100644 --- a/components/oap-http/esp_request.c +++ b/components/oap-http/esp_request.c @@ -26,6 +26,7 @@ #include "mbedtls/ctr_drbg.h" #include "mbedtls/error.h" #include "mbedtls/certs.h" +#include "mbedtls/base64.h" #include "freertos/FreeRTOS.h" #include "freertos/queue.h" @@ -104,13 +105,26 @@ static int resolve_dns(const char *host, struct sockaddr_in *ip) { static char *http_auth_basic_encode(const char *username, const char *password) { + char inputstr[64]; + char *outstr = NULL; + size_t olen; + sprintf(inputstr,"%.30s:%.30s", username, password); +// ESP_LOGD(TAG, "http_auth_basic_encode: %s", inputstr); + + mbedtls_base64_encode( (unsigned char*)outstr, 0, &olen, (unsigned char*)inputstr, strlen(inputstr)); + outstr = (char *)malloc(olen+1); + if(!mbedtls_base64_encode( (unsigned char*)outstr, olen, &olen, (unsigned char*)inputstr, strlen(inputstr))) { +// ESP_LOGD(TAG, "http_auth_basic_encode: %s", outstr); + return outstr; + } + free(outstr); return NULL; } static int nossl_connect(request_t *req) { - int socket; + int sock; struct sockaddr_in remote_ip; struct timeval tv; req_list_t *host, *port, *timeout; @@ -125,8 +139,8 @@ static int nossl_connect(request_t *req) } } - socket = socket(PF_INET, SOCK_STREAM, 0); - REQ_CHECK(socket < 0, "socket failed", return -1); + sock = socket(PF_INET, SOCK_STREAM, 0); + REQ_CHECK(sock < 0, "socket failed", return -1); port = req_list_get_key(req->opt, "port"); if(port == NULL) @@ -141,16 +155,16 @@ static int nossl_connect(request_t *req) tv.tv_sec = atoi(timeout->value); } tv.tv_usec = 0; - setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); ESP_LOGD(TAG, "[sock=%d],connecting to server IP:%s,Port:%s...", - socket, ipaddr_ntoa((const ip_addr_t*)&remote_ip.sin_addr.s_addr), (char*)port->value); - if(connect(socket, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr)) != 0) { - close(socket); + sock, ipaddr_ntoa((const ip_addr_t*)&remote_ip.sin_addr.s_addr), (char*)port->value); + if(connect(sock, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr)) != 0) { + close(sock); return -1; } - req->socket = socket; - return socket; + req->socket = sock; + return sock; } void req_free_x509_crt(mbedtls_x509_crt* crt) { diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 650a6c0..5ab7881 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -26,6 +26,8 @@ #include #include #include +#include + #include "sdkconfig.h" #include "oap_common.h" #include "oap_debug.h" @@ -33,6 +35,13 @@ #include "i2c_bme280.h" static char* TAG = "bmx280"; +static float getPressureAtSeaLevel(float height, float pressure) +{ + float gradient = 0.0065; + float tempAtSea = 15.0; + tempAtSea += 273.15; // °C to K + return pressure / pow((1 - gradient * height / tempAtSea), (0.03416 / gradient)); +} esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { i2c_comm_t i2c_comm = { @@ -55,7 +64,8 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { while(1) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.humidity); + result.sealevel = getPressureAtSeaLevel(bmx280_config->height, result.pressure); + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->height, result.humidity); if (bmx280_config->callback) { bmx280_config->callback(&result); } @@ -99,7 +109,7 @@ esp_err_t bmx280_i2c_setup(bmx280_config_t* config) { esp_err_t res; if ((res = i2c_param_config(config->i2c_num, &i2c_conf)) != ESP_OK) return res; - ESP_LOGD(TAG, "install I2C driver (bus %d)", config->i2c_num); + ESP_LOGD(TAG, "install I2C driver (bus %d, sda %d, scl %d)", config->i2c_num, i2c_conf.sda_io_num, i2c_conf.scl_io_num); res = i2c_driver_install(config->i2c_num, I2C_MODE_MASTER, 0, 0, 0); if (res == ESP_OK) { i2c_drivers[config->i2c_num] = 1; diff --git a/components/oap-hw-bmx280/i2c_bme280.c b/components/oap-hw-bmx280/i2c_bme280.c index 768e71b..6274f6e 100755 --- a/components/oap-hw-bmx280/i2c_bme280.c +++ b/components/oap-hw-bmx280/i2c_bme280.c @@ -77,7 +77,7 @@ static esp_err_t read_i2c(i2c_comm_t* comm, uint8_t reg, uint8_t* data, int len) cmd = i2c_cmd_link_create(); CONT_IF_I2C_OK("r6", comm, i2c_master_start(cmd)); CONT_IF_I2C_OK("r7", comm, i2c_master_write_byte(cmd, (comm->device_addr << 1) | I2C_MASTER_READ, 1)); - CONT_IF_I2C_OK("r8", comm, i2c_master_read(cmd,data+i,1,1)); //ACK is must! + CONT_IF_I2C_OK("r8", comm, i2c_master_read_byte(cmd,data+i,1)); //ACK is must! CONT_IF_I2C_OK("r9", comm, i2c_master_stop(cmd)); CONT_IF_I2C_OK("r10",comm, i2c_master_cmd_begin(comm->i2c_num, cmd, 2000/portTICK_PERIOD_MS)); i2c_cmd_link_delete(cmd); diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 37fd961..11a43f9 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -49,6 +49,7 @@ typedef struct bmx280_config_t { uint8_t sensor_idx; //sensor number (0 - 1) uint32_t interval; env_callback callback; + uint32_t height; } bmx280_config_t; diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 2e48cf5..585c117 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -39,6 +39,7 @@ typedef struct { uint8_t gpio_num; + uint8_t gpio_val; uint32_t timestamp; } gpio_event_t; @@ -56,7 +57,8 @@ static void IRAM_ATTR gpio_isr_handler(void* arg) last_click = t; gpio_event_t gpio_evt = { .gpio_num = (uint8_t)(uint32_t)arg, - .timestamp = t + .gpio_val = !gpio_get_level(CONFIG_OAP_BTN_0_PIN), + .timestamp = t }; xQueueSendFromISR(gpio_evt_queue, &gpio_evt, NULL); } @@ -65,17 +67,29 @@ static void gpio_watchdog_task() { gpio_event_t gpio_evt; int count = 0; uint32_t first_click = 0; + uint32_t last_down = 0; while(1) { if (xQueueReceive(gpio_evt_queue, &gpio_evt, 1000)) { _callback(SINGLE_CLICK); //20 sec to perform the action - if (!first_click || gpio_evt.timestamp - first_click > 20000) { - first_click = gpio_evt.timestamp; - count = 0; + if(gpio_evt.gpio_val) { + if (!first_click || gpio_evt.timestamp - first_click > 20000) { + first_click = gpio_evt.timestamp; + count = 0; + } + count++; + last_down = gpio_evt.timestamp; + ESP_LOGD(TAG, "click gpio[%d] [%d in sequence]",gpio_evt.gpio_num, count); + } else { + if (last_down && gpio_evt.timestamp - last_down > 5000) { + ESP_LOGD(TAG, "long press gpio[%d] [%d in sequence]",gpio_evt.gpio_num, count); + _callback(LONG_PRESS); + first_click=0; + last_down=0; + count=0; + } } - count++; - ESP_LOGD(TAG, "click gpio[%d] [%d in sequence]",gpio_evt.gpio_num, count); //due to flickering we cannot precisely count all clicks anyway if (count == 10) { @@ -95,8 +109,8 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_evt_queue = xQueueCreate(10, sizeof(gpio_event_t)); gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); - gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_POSEDGE); + gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); @@ -104,6 +118,6 @@ esp_err_t btn_configure(btn_callback_f callback) { } bool is_ap_mode_pressed() { - return gpio_get_level(CONFIG_OAP_BTN_0_PIN); + return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); } diff --git a/components/oap-hw-ext/include/ctrl_btn.h b/components/oap-hw-ext/include/ctrl_btn.h index 5e39c1a..736419c 100644 --- a/components/oap-hw-ext/include/ctrl_btn.h +++ b/components/oap-hw-ext/include/ctrl_btn.h @@ -26,7 +26,8 @@ typedef enum { SINGLE_CLICK, MANY_CLICKS, - TOO_MANY_CLICKS + TOO_MANY_CLICKS, + LONG_PRESS } btn_action_t; typedef void(*btn_callback_f)(btn_action_t); diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig new file mode 100644 index 0000000..b8672c6 --- /dev/null +++ b/components/oap-hw-mhz19/Kconfig @@ -0,0 +1,33 @@ +menu "OAP MH-Z19 CO2 Sensor" + +config OAP_MH_UART_NUM + hex "uart num" + default 2 + help + todo + +config OAP_MH_UART_RXD_PIN + int "RX gpio" + default 16 + help + GPIO pin connected to sensor RX line. This pin can be R/O (>=34). + +config OAP_MH_UART_TXD_PIN + int "TX gpio" + default 17 + help + GPIO pin connected to sensor TX line. + +config OAP_MH_UART_RTS_PIN + int "RTS gpio" + default 18 + help + Any gpio pin (no need to connect this line) + +config OAP_MH_UART_CTS_PIN + int "CTS gpio" + default 19 + help + Any gpio pin (no need to connect this line) + +endmenu diff --git a/components/oap-hw-mhz19/component.mk b/components/oap-hw-mhz19/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-mhz19/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h new file mode 100644 index 0000000..3e5c998 --- /dev/null +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -0,0 +1,61 @@ +/* + * mhz19.h + * + * Created on: Feb 3, 2017 + * Author: kris + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_MHZ19_H_ +#define MAIN_MHZ19_H_ + +#include "oap_common.h" +#include "oap_data_env.h" +#include "driver/uart.h" + +typedef void(*env_callback)(env_data_t*); + +typedef struct { + uint8_t indoor; + uint8_t enabled; //internal, read-only + uint8_t sensor_idx; + uint32_t interval; + env_callback callback; + uart_port_t uart_num; + uint8_t uart_txd_pin; + uint8_t uart_rxd_pin; + uint8_t uart_rts_pin; + uint8_t uart_cts_pin; +} mhz19_config_t; + +/** + * pm samples data is send to the queue. + */ +esp_err_t mhz19_init(mhz19_config_t* config); + +/** + * enable/disable sensor. + */ +esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled); + + +/** + * fill config based on hardware configuration + */ +esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx); + +#endif /* MAIN_MHZ19_H_ */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c new file mode 100644 index 0000000..d571c30 --- /dev/null +++ b/components/oap-hw-mhz19/mhz19.c @@ -0,0 +1,146 @@ +/* + * mhz19.c + * + * Created on: Feb 3, 2017 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "driver/gpio.h" +#include "driver/uart.h" +#include "soc/uart_struct.h" +#include "esp_log.h" +#include "mhz19.h" +#include "oap_debug.h" +#include "oap_data_env.h" + +/* + * Driver for Plantower PMS3003 / PMS5003 / PMS7003 dust sensors. + * PMS sensors return two values for different environment of measurement. + */ +#define OAP_PM_UART_BUF_SIZE (128) + +static const char* TAG = "mhz19"; + +esp_err_t mhz19_init_uart(mhz19_config_t* config) { + //configure UART + uart_config_t uart_config = { + .baud_rate = 9600, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, + .rx_flow_ctrl_thresh = 122, + }; + esp_err_t ret; + if ((ret = uart_param_config(config->uart_num, &uart_config)) != ESP_OK) { + return ret; + } + + if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin)) != ESP_OK) { + return ret; + } + //Install UART driver( We don't need an event queue here) + + ret = uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + return ret; +} + +static int mhz19_check(uint8_t *packet) { + unsigned char checksum=0; + for(int i=1; i<8; i++) { + checksum += packet[i]; + } + checksum = 0xff-checksum; + checksum += 1; + if(packet[8]!=checksum) { + packet[8]=checksum; + return 0; + } + return 1; +} + +static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { + if (config->enabled) { + uint8_t packet[9]={0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; + mhz19_check(packet); + int len=uart_write_bytes(config->uart_num, (const char *)packet, sizeof(packet)); + if(len == 9){ + uint8_t data[32]; + len = uart_read_bytes(config->uart_num, data, sizeof(data), 100 / portTICK_RATE_MS); + if(len == 9 && mhz19_check(data)){ + if(data[0]==0xff && data[1]==0x86) { + int co2val=(data[2]<<8) | data[3]; + ESP_LOGD(TAG, "CO2: %d",co2val); + if (config->callback) { + env_data_t result = { + .sensor_idx = config->sensor_idx, + .co2 = co2val + }; + config->callback(&result); + } + } + } + } + } + return ESP_OK; +} + +static void mhz19_task(mhz19_config_t* config) { + while(1) { + mhz19_cmd_gc(config); + if (config->interval > 0) { + delay(config->interval); + } else { + break; + } + } + vTaskDelete(NULL); +} + +esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled) { + ESP_LOGI(TAG,"enable(%d)",enabled); + config->enabled = enabled; + return ESP_OK; //todo +} + +esp_err_t mhz19_init(mhz19_config_t* config) { + mhz19_enable(config, 0); + mhz19_init_uart(config); + + char task_name[100]; + sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); + + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + return ESP_OK; //todo +} + +esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { + config->sensor_idx = sensor_idx; + config->uart_num = CONFIG_OAP_MH_UART_NUM; + config->uart_txd_pin = CONFIG_OAP_MH_UART_TXD_PIN; + config->uart_rxd_pin = CONFIG_OAP_MH_UART_RXD_PIN; + config->uart_rts_pin = CONFIG_OAP_MH_UART_RTS_PIN; + config->uart_cts_pin = CONFIG_OAP_MH_UART_CTS_PIN; + return ESP_OK; +} diff --git a/components/oap-hw-pmsx003/pmsx003.c b/components/oap-hw-pmsx003/pmsx003.c index 00ae311..2c1d5bc 100644 --- a/components/oap-hw-pmsx003/pmsx003.c +++ b/components/oap-hw-pmsx003/pmsx003.c @@ -31,6 +31,7 @@ #include "esp_log.h" #include "pmsx003.h" #include "oap_debug.h" +#include "oap_common.h" /* * Driver for Plantower PMS3003 / PMS5003 / PMS7003 dust sensors. @@ -64,22 +65,6 @@ esp_err_t pms_init_uart(pmsx003_config_t* config) { return ret; } -static void configure_gpio(uint8_t gpio) { - if (gpio > 0) { - ESP_LOGD(TAG, "configure pin %d as output", gpio); - gpio_pad_select_gpio(gpio); - ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); - ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); - } -} - -static void set_gpio(uint8_t gpio, uint8_t enabled) { - if (gpio > 0) { - ESP_LOGD(TAG, "set pin %d => %d", gpio, enabled); - gpio_set_level(gpio, enabled); - } -} - void pms_init_gpio(pmsx003_config_t* config) { configure_gpio(config->set_pin); } diff --git a/components/oap-ota/lets-encrypt-x3-cross-signed.pem b/components/oap-ota/lets-encrypt-x3-cross-signed.pem new file mode 100644 index 0000000..0002462 --- /dev/null +++ b/components/oap-ota/lets-encrypt-x3-cross-signed.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow +SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT +GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF +q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 +SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 +Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA +a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj +/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG +CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv +bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k +c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw +VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC +ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz +MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu +Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF +AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo +uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ +wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu +X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG +PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 +KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== +-----END CERTIFICATE----- diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index 764f2ec..9e8aa04 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -43,8 +43,10 @@ #define TAG "ota" -extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); -extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +//extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +//extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { for (int i = 0; i < 32; i++) { diff --git a/components/oap-thingspk/thing_speak.c b/components/oap-thingspk/thing_speak.c index c4a608a..82b8470 100644 --- a/components/oap-thingspk/thing_speak.c +++ b/components/oap-thingspk/thing_speak.c @@ -36,13 +36,6 @@ static const char *TAG = "thingspk"; static char* apikey = NULL; static int _configured = 0; -static void set_config_str_field(char** field, char* value) { - if (*field) { - free(*field); - } - *field = str_dup(value); -} - static char* prepare_thingspeak_payload(oap_measurement_t* meas) { char* payload = malloc(512); if (!payload) return NULL; diff --git a/components/oap-wifi/bootwifi.c b/components/oap-wifi/bootwifi.c index 07177a7..0da4155 100644 --- a/components/oap-wifi/bootwifi.c +++ b/components/oap-wifi/bootwifi.c @@ -27,10 +27,12 @@ #include #include #include +#include "cJSON.h" #include "bootwifi.h" #include "sdkconfig.h" #include "apps/sntp/sntp.h" #include "oap_common.h" +#include "oap_storage.h" #include "freertos/event_groups.h" #include "server.h" #include "cpanel.h" @@ -76,6 +78,7 @@ static void become_access_point(); static void restore_wifi_setup(); static char tag[] = "wifi"; +static char *hostname = NULL; /* FreeRTOS event group to signal when we are connected & ready to make a request */ static EventGroupHandle_t wifi_event_group = NULL; @@ -239,6 +242,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { return ESP_OK; } + esp_err_t wifi_configure(cJSON* wifi, wifi_state_callback_f wifi_state_callback) { memset(&oap_wifi_config, 0, sizeof(oc_wifi_t)); oap_wifi_config.callback = wifi_state_callback; @@ -263,7 +267,9 @@ esp_err_t wifi_configure(cJSON* wifi, wifi_state_callback_f wifi_state_callback) if ((field = cJSON_GetObjectItem(wifi, "netmask"))) { inet_pton(AF_INET, field->valuestring, &oap_wifi_config.ipInfo.netmask); } - + if ((field = cJSON_GetObjectItem(wifi, "sensorId")) && field->valuestring && strlen(field->valuestring)) { + set_config_str_field(&hostname, field->valuestring); + } ESP_LOGD(tag, "wifi.ssid: %s", oap_wifi_config.ssid); ESP_LOGD(tag, "wifi.pass.lenght: [%d]", strlen(oap_wifi_config.password)); @@ -289,13 +295,18 @@ static void become_station() { tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } - ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); - wifi_config_t sta_config; - sta_config.sta.bssid_set = 0; - memcpy(sta_config.sta.ssid, oap_wifi_config.ssid, SSID_SIZE); - memcpy(sta_config.sta.password, oap_wifi_config.password, PASSWORD_SIZE); - ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); - ESP_ERROR_CHECK(esp_wifi_start()); + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + wifi_config_t sta_config; + sta_config.sta.bssid_set = 0; + memcpy(sta_config.sta.ssid, oap_wifi_config.ssid, SSID_SIZE); + memcpy(sta_config.sta.password, oap_wifi_config.password, PASSWORD_SIZE); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); + ESP_ERROR_CHECK(esp_wifi_start()); + esp_err_t err = tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, hostname); + if (err){ + ESP_LOGI(tag, "tcpip_adapter_set_hostname failed, rc=%d", err); + } + ESP_ERROR_CHECK(esp_wifi_connect());//FIXERR 0x3006 : ESP_ERR_WIFI_CONN (happens after reboot via control panel) } @@ -303,12 +314,7 @@ static void become_access_point() { ESP_LOGD(tag, "- Starting being an access point ..."); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); - //generate unique SSID - uint8_t mac[6]; - esp_efuse_mac_get_default(mac); - //ESP_LOGD(tag, "MAC= %02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); - //using full MAC would be the best but I'm not sure if it is safe (if someone has wifi with MAC filtering) - sprintf((char*)ap_config.ap.ssid, "OpenAirProject-%02X%02X%02X%02X", mac[0], mac[1], mac[4], mac[5]); + get_generic_name((char *)ap_config.ap.ssid); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &ap_config)); ESP_ERROR_CHECK(esp_wifi_start()); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 2086da0..e0bce31 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -124,6 +124,11 @@

    OpenAirProject SensorNetmask + + + + +

    ptQnFyxr)6+9kw~hpJCfs?z;UE0S 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

    @@ -181,6 +186,24 @@

    OpenAirProject Sensor
    Measurement strategy (adv) + + + + + +

    + +
    + BayCom Client + + + + + + + + +
    diff --git a/doc/MH-Z19 CO2 Ver1.0.pdf b/doc/MH-Z19 CO2 Ver1.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..58b486c9f682e173f47dacb13f7aad48f382b9f3 GIT binary patch literal 706866 zcmbTe1ymi)voDIf2S{)UZX0(C?(S|ImyNr-2X_w=oZ#*d+#$HTyTjwl_doZZv+jFu zt@mc_HQl|Zx~jTorhhdxQ$?;IB1X@|z=n)KUjMNnBQOy&65APBA|vqf0#w{VK!C8J zlcBYp89>3%4CqMA{Bc+bAY*82M&)5nFDyq*3{ZA*a5i>QaR369?ChL~x!C`b$Qn9W zN!ps)eX#kb3N#`9AOrG$Y{&>eTa&*c{$ch%Wc`%^5Vmu+{on(TwlHzjCT97E9WgWG zzXj*tf|cWM!N&EsVE>nd+drKDZ7?wtfBZh0{QLkhJKKMV#F&Wx9l97Z@n2N{ zVl2c=fAt24u@W==)e<1aM$Gh=&qqfE2RmbBpp!P><0Jr7fNoCz@)r8H5dOE2{AUaR zS)hr9p^%-M_J>SHVm2-|29^>V|4C%(}!MGiK}bF$PECzhei8JJ>mcJ~aA!{{A)q z$^aDyLt97CKVvm^2M8+zM1U?9#y}-;p%3mVhDMGbB>$etf9J!InDM_)-9L=~YwE-- ztet=k05NMrC!h$>*v%z&w! z1|3aP2-MN%t|X)0=K{I&BOgW_?Yjn(P6Frgr!UQkGBop@d`G{jBx3z}2EE``s`-CF zWlZkw7og0P3$zV=dE3?3d|xOS7wznE$8Lytt|pIC#CXhnK4CaNvd+w~mg7h`Z;BM& zV5ps_5{`TA?X402fW|qQ{yio)$fI zL(UihwTXe^S*uX<6{3U*D*Q!q-L{L()~|9mD*W**ebZQ;KkZuQ^->hehFI=!%dRL%Q!3= zTx`31d+#7M)9pq3H8x4P_UM0zX zsOda&ACcR1gInC8s_<4u=m@RgR$8GOuP*eKXKt4M$-x_PqqPgeT^iJOKVe&p;wZnW zropmPEg{I;fe79WUPpf5ZfR2R_$fQtdky3evI%T5qtF;AP@+)}w&v!MgC3#kTbjQu z+``*6-PVZn^@t+(;MNy9z4R($|9mHCqxU&{3?T*&s6nzVR5B^I@wygI$A)TY*S)C! zD?Rg^03oDCCp}s;jx}5jw%~U|oDGFFv&JuSr1U+Pv2AP3@vgJDzMnA+#`%Cw!yd@h zff4H#5?@BnQeEi5@$;e!)S4IKUF&edfdy47-9ywmsR+LKgdevcx~2jC!7)z<2a1n2*7MJTB@6rNc4=-FS3iVJ zMPQ-pv`4}FnfG}u?xy!i22=|gA;~?@VXonYja=RzQti<7WssMD)UqL44p#2t04}`2{Py#6;6sdzLVoyoi^Jvn@F0( z%U#lO0}C=krUMlmQRx1kPq8Ji+hBf#NPF@8hAbRoo-47sh%4J7TR;&&?+I2WkPD&< z`hF$!8|1Sz_a0;@8D+EU$#3Y13E;wC`-D}q1;gnMBiK3C$@XN)2IltkG)`eV} z=G4c+MXG_msf#<;qAouJNuIqteQ9NBN5C<1z`!3ST#FpdgvKJ+jt*1X`73s*JWhP^jsg_ut?DPuG>=qoXZ_-F(NlGmJ|!MLtw9|^b^Bg*H`3{xlL&cq zUd!s9f6S|S_dI!`R4F&oX+2yyF5=WjXlqb5z(?Q;|eo3pxU$_arE5PY4CAOFbFcv< zfEH%vP9IRs`2nQXb`HuQLu26o#z%mVg_ENK&_USF24rXZkEy^3ko>?~2aw%A2uN&d zXzd6D{J(%AD+?Rj|3t+T?@)b}!KeG2%eS*=F=&?*Qngug)@ddh%W}nn8gdHDe8o@E z;o%5~q}V6WR-`VXg588zt$xU)F4UyIyi-m+lkd}5_D3yR5j_&DY#p*Eniz^l)6%ZJ z_J6W0&ypp`Fc1Cz+}-T$6vF!!B65Kjr=o7cciuAQ=yfYLESb`xE$o-QVXO48rko|J z3sxoGm@&Bc49Q-v79tE6U7w?OTAz0+Itpc&A>PhvY{rFd3G5v09A3F*ke zyJzq~i*vf5bX~8^$|)LMuwCLbkvlVAYZzbmg#axQ?>g;PFYFweejos zVwP1(zWKF;8<`81$*r#!kJ~OqH}S0lAI4u=MJn!m`CXS z!jU#QV|uU@Y`G3URgW-VkHF;17RsDF{NSBBiKmaLPxh#Kf*xcD%hK9QI zK!rTPDvpMv?qL-rVG9W1_)d1w*CB-~WmmKbhz=xQ5d?loh&V0J_%_6}|pM9=@EK@sARU zJSCb0nJURHf&EJ2jUXw%Pc#tYi0ubrqoIi@ODXEuao;PWkKtFN-T2V)c$?|lGrS49+PHME>XPfcW9KWyG%}Zbwm3FR$o_6 zKPi_k*xH5XeO#mTBw%tHI=B#WQK%bK2c*z)%AbPA+!!sNyj$Qae^^OiVFln)pM%LQO{x63P5Z-81iP6=<_6?APUos9d*k^{+M0-x2=t$pa7nZcncI;_fJ>NE`a2sQ zq^y>iFYxoz0b+w*F#cfE%-q@~Hm5KH*Z1cxG{xV;^bF$|8A!*CO8-Y+{DjF`&55FeGT=}K7Z~6f}*4mA)3F|yKF2l44 zj%<>>dKmc+`fD!gYs~dfoJ<{lkld&eXoXdHqP+67))GjsshS%Oo+9Tx+m|t^9W0Db zxgo(LvC8Gu2HWKauRK>Vhs&;W9iK#cMWFBnmA@y~xC-6GDMqg|fL1FW#375rqlk8$ zn|V!Z_ucEue$2-Cj&`sNHrN(8-*Q{cdpyr)-3g0leg-rX2^7juRLxLBjSIMf!Pmoa z7I=Xb>lqWi^`n$$Jnp(H!AIvVN;_mRG^VJcT(nZrR)HHr-9Es|Ne!a1*d{GJWn=IW z4n7*$gr3zA5o?6uLO0mgRbUn=Zm;fQl?!j@Jg+I<%bKb$(k~B;?ZGP}^A$LEqc6E? zgwvtT-{jZ`->!OO2&6%2Rkm*N1MA=F{UIyz^#nSPWlL~2CilcfOX{s}pklu~t>oxq z6Q&gXsK@~8GDISJy3QaM&y@R&{#nqkpkK3C<@X$&OUS1L*x@=N6m~5Fh&H&)#l&aR z@ETYAZWNn6V$;c9Gpk_t6|!OT9jiOvsf9OKbUP3gfXN_JPQKs!c$jS<$b|8}4vAYR zOk`j$53~nQ5(vM3OL8hp6kB`FCwO?{1%9KBJH{a$<@E^x34gr?C zV|ng-{ec7H9w`tQ9Agrz&-Mrm`%DxvPqjjx8?59Vz9`O3!gId_`PLLYwS-6;1c7wEq4xB`li=g?fD^>+R{%{oYHGQ-8i}K(a*gfu29+w zf86`AqZpeLZ&ZKHozjGnUtDsizL1{vlfmVz+uOPH%J5K;r1kvrmDD|yDWm>1An5C3 zf!L!TDvOH6-Nl&lsSHQq{e{O6s#Hje~kF|dfmo^ZLlR=gga%?(r9WH9M zj0D%{CaX7?{_D13UYGbgUGg||a4bd!lX6c=i5Y~ShD*O~(+R!nm|p9cByU$eI}y(F zZ9b2ex_76mk>C#KhEJLt;GDMj%7i!Vq}}$xnh-``%1it&yvWn3W>%nqHy9s8iTCEdh_nSaV^kMVAb^or%Le+oTMk`x&KYxo{ z#;SjDD9eXQS;k_Uuykru#4h<{i+cOe9MVB}R*J3)Av)MF6S<;zHtjh#!k&f0alCL4 z_rb5_=rvFC(s*7zt};dI&3JCpb=G5E>LF82;FEO%W0HqC;%U zSz_z4esjH6Y&Tqg;atnnku^Da5&h!R)HYkG#QYk((P12YInmSZnt!$1XUQYp2Rkdu@`^V04PApPt6HfGF z^_(#OI=A!M+bc9st34PmsPTtiBPOTQzP`oihm|AfGIm@5Bb5R^f?Fq(QhTolA1VDc z&Dv;VGWN}4*FI&Leh&?syEu}zAU?%aV))=U?Tf&-{N~i^xYU`WqiEq`+rldSc@hf? zSVLrjCwh8LPt=KPvnt*%&$ocMS7r%pH1^}_#Gt?_qN*_-=U6?**?jO&Q{Jj6QyT#y z9uM7OpAjMBX3o!*YSeUfuwtux?vFiK!BuspA@yGL^x~9tTH70O5=oY#FQeW3!oB#Q zL;@rh)1~p(J*EsV*?ow7e3XUr``g+*_BzGtOW@LuMMbqt#vyP)<}#xnh2QybK$-ij z%jpw$jHyANvqju%vRJH^wwhja6`ijFhp&atY!?_x*p#+vk*lZ8G~;UeffA1>FNV!c3)J>wmuKZv?UH%Yp1{Gb#RcfD@hOWPnt?8ODw(uaR$Pra5AKV2~!qKYC0iQO&ksk}H$z6FISm<_ekci<1 z&Ga*n!mQJpQM3GRS9{!rz;7UwFf(z|d|bIN+N-W*L0mH_R{s&-2Ak8@maJ~Ki|LCE zB&AK>m3!f$SRE_nY>MCP5s|!3ou_KiKPT5tN@gx2UyVcTu0eHQ%x^AHYfE zyB|K1RzX1aez_qf{gjNI*}4ySKYDmXP;=Q(P(kR#m`txs&sq}X4khaKHQivD=I!7Oi{8z0N9ye?m&Rg8tSaF3!n`<>OVJkHb z$dGe_1-GZDiSE2w`<2ArGbUW>_UvEF?U`orMgmmF(HZGy-k@0|JgI>l!^A0KOwI>O zgtZ0NqXMP&0IDMvA8x02d%l|($#~S%n1HNy{TH`MQ`bibl%dqHnW?F%P(AX^1i zI>4++zkLg5=?hBYg0;PFyWxI#&)&mqM#@mt2qjT^!yCT7 z0ZT0VCwqF#P0W4v+?8|WRtC2wHpIT>s4pvrS9E&b0UC}N)IZOd+@KF=KGrI{t3|bk z$_P~!bVDuCJ}E>C%a_#KNpDkk7$3p|xg7b0dQweR{;jttTj%hlP@_^x-W;`2YN9kj5NNE;cva-nC(i*B1R9c#RfF$N ztx3*&p?-@lGR7#0OuX1W*dl$o@7(W8T^C%d!L-YN9p9#Q?6>HHl>QLxrXNqpiQ z!8*h#==qeKU|T?&O9e5n$uOz34)SZO7t%FCzb{s{4}wchw`Y9$yk@GN!_@ZW_1daT z)X&0F(HcSXTVFePc@OlyoPK~91S>`-4>X^2uE29?vtDF99RrWKj|X^d0h~j%qSt5Z zp{ygqKy?S_E5gs%k?C5GJ4qQsc;aUr=hIgfF-j~sXK$mCkhz6rzIHPWB~VSPa!V`yb{y`Fj?&dS;iRx)Pj1YORdk z#e`sd@~Uj-K&GXoaKw8oaABX(c!s;%nhV8*$FYVd9$Hmx&Xb-S7bm@Qc=u%2?19qb*kPdc>6@f`OwKYR-5;3&Oz)EYP6MH6X$Mh)P^f8ku}%&mYneB(| z)b)ATun>06>Zn{JlZgXzu3v8j=SfeP2C$t|IejX2L-Lqvul%L`RI-+vec1*YgYgci zpjCI=iyJf^8*^1x-$bx!^>JSR1PNQdG<1DO11ZMzU7elZduyfLo$@@p4di?HG{e|j z<5=(@b`paaD?M{S=lcyWG?ZZciCBx9i}~(Y*ZN>sTe%o^;{h*IVND7=eHW^O&KlR3 z(P%7?vTy7F_?a2BBWjPPyY&aTuYeo_+dyj|R`t z5KZ;FU&fyox$(}H!3>-1b<$G-@J1!K*(G{?|2+E-;**_+=rd^ApqR4fmJq;JHp=VJ zAYU`h7|Te_`eEHv0)6Q>pcq7KAX%_)Y`7mnz4SG<>e>i5%_qx5Qi#m3TOUa{RlQ!R zm((c-s-jtTm)qSOuvZTXg{NN!?UZhBFP*Fv1nYlV$t@Bv@QZ_md7x@<_tN&zX)001 zXu>YQ;SHDEgYYrwnK#3D{Y@-jRHh4kP0tO>K4xIX(@pJa$GY0v!9kjkZ+DakNeb{x zv`QJfyRQ}FaCE0-!B!>AD%7Y)>&52kc~0xI zr!-GZky!k!@`JbzFi7@%9Hufsk_z=pC`^Q^KCmfATmCTa7xuR|^cn}RA78xP;!R%Z zArwbiCY8fm2JccB<^#>?n+>1$cmoo=DUZz?lAa64&3A=yf^3FK=ZR-ZSlNb^g^6F?JI z3tEwEvTCQuc8=@l+0f`Cw`;y4!-@oDeC&x9wYPnH=liq z(I7&L!u>F(K~E7!A}7<&oQZY$SvOzg5SChH2b|A2f4I6hn_{x4Q|A4@Zho#5P#OqR zx2!egzoL)Ix}_x_;&oRlJY_aWt8%j{4N#j)w&gsX_yIw&nxT#xlN?&MSnp4|0kVR@ zg5o#NpxYXdIpqe4ewYw#z-r8j0VT$vj3?yzCln7FFt(+6gzKU)4BPvb%GFusW5NC< z0;z4N-!HTh*HtbdC3<`3pSi2_3UKk-Ge>)|(*}*1)7hqpai05Tv_DC#r?`F- z^PfePCkA5~0EF5}F<+MSIAZ0p)H3U`>XR&NWw%Xtm0uN4XOvo6dW0_~izRj(lM6#} z?}zD7Dm}bB@6X8>shSXIPW?enJ<2_?5-7hzF zCI#8eM`R^$&BQ-}(bk)fID<{zn~W4?rAXchWbSMx)ZakDChAs_lAoIWO)B-8E3FEq zF}9)CZ+&g*->WM0&@H~O_M|tAYI=n;XS5S?*by4?VKfX3K!$!i13OW{;u*>ktwHP3 zNnUpys!GvuirC|~ETGpMI@g8mw=FnHsSc+nlxnaKQ@}YEJXQ!B4Mg*(+99*Q`}cv< zZvPH%6`DzcI0o(Ie~mEDe!>OwrlN@pDcAw+ey3hMc~bCi`z$B2HcVOdgrqOaieGbv znU&7y0$Dq$9lr|`@690fV$d5&s!9*THFG7m`e{X&Wu>y0Bheg~1ET3NY&E}q?)`Q4 zqKBu@4%IKr12SSq>0^X<=3Ng6NGaQM?NeYk@aR5t=n%Z&^)x;B1W=m0=vc&k0d^S_ z%MIGWCx}!`rFW#}olfe0UXom>FRoc99*Ih8h|b7LsUr498b$X1v%3Rs?w!2K6~Yg{ z#7<*s4?ce&w4@AkS>5Ye(7)#1#Y}-H6c34Nek5SXQi4P3e(K^*;oAy}8l!~asx}SZ z%PqWZRk8PAd>HM|VmTleIJB2ExiVW|u6Mf33sM=C%lj<@7b!i$<&n_#)dw-SDK936 z7M6u9u?E`9#L-`N%ngR@7AzNIYDtv|B&4ZYG4Y!%S1U5-tZ;8ChEvjocECsK12yE! z>izu#9T@5FZaXmtV;9k~zhmPTsQv1IQ)?q+5=~)ACiF5RSr{I^n%48Ql2@4scR|eIB0gQ#x^%8qkgp?g8r1D&wH;geC%IN~ z$C~erfm1@;B_OVUOYbZ(Lzn=Eu#cva&-T!YkQeV?ZMh^0LwPC30iM{HyX(v zVfjoT_ocPtxNA3eh}Lb~va?rIe}>Opw0%Hi5926lfYYF)Po=v9Sf@9@>PR85C=Z8h z_(Sc1=8}l8ae4J(*lnZwEg?MJCC^EVO{&r~AWx%m$`|*0^fm@KY|wUcCT(7gg*9&W zA1*ZX;x+Y+UX^B_<7Q^HQ=S-M$A$aD#}i#&3%pPi$C9B8g6la356N_cI;PMG*|D$G zuv^h9vh1w*V;hX!M0P%(%4odyn8gY4Eqp)zw^VnT7BMk%GWa>d`4x~S?}x`oeI)yo z*X{K=>ZMz`!TGQ=O0$lX3F8vvOw<;T({@z9JeJULf%Vg5)N5o^^Ti&mA$03K_wzaC zQ#6U0bM)hd;%bV%6_3l;GEWT&8YiJ`IN;CdEUGh$PfJ%9t#!QQy{DGcpnMoQK(jWv z8^5mT_>>aX(E4{MLBq9i`WD&jTUg$(&lQpf`(0OSG`=t71n+GEPwx$R2vE=6>7P%#|l2B^d$7 ziBN|EoTKFjZB!;%X{N$if zX9`L}KdB)sN6cZW<0%(+n?tT@bc@jo2akgvDBhIRBjeVVNHU~6YdcrcaA(!?DT~xx z5elm%ua!}_zKVmnDSIGqRJTlSP-|-z*Py=X#5>1JgKj%Z1I*Q=>ZWTa!$*Y$f`~+p zF&Bojp~sUYvolW}JlZ-MYO5EsKHxDH)0BHgX`0PB_8aZ+u$4#z>1;ytA^yZA`S6A0 z>GwqYYq|Ox`$k&J*qn+#7gm=6qsEBL2oz&uIJ`jVs~;!#p}^q5;?RLoSAv$9F|YXu zW0-5FOUPgBYKh^n;zh4+la{Vmk2B7pSwgZe|PpBYNtuBQjM;GAWcXnWN4$$`~^k-etUsDKVUIm z76KGmI!8T*l*MaHW1_5LrDIp%+5dqLbbO{phq63EdL6JMbx@whaDETZu++yDS+#HG z%NbjqC_IrO`!Mk||76e{b>rL8#5RpQquOX|?+$x}yrTL4F@NT`T5eEPiIG!^Nkk`-U;ZhG1q9#A6wgR zD0bcMq%jjQ+R#7nx=b>U2Ss@@L?2**9F0;uvk5wko{ta*)HYuB{1S=B9!IR< zk-SIBfb`95)A$)d0Z4H%LS);iyDfehTYhKr zpx>yImk>X;g~-ceToeE~J%ce|D zuA1VjcSuw&KFY_#M?Ngs_%yJ^70YWw5E*w|DqtI-MF<`Qs)RtM-F~jQNzOL;k!y|7e-f|WygUmgN73pU!h?#V(J`2B7^KxjN+zE460EQX(rz(% znHErqdeXnIRE=hHBcwd<DJAT3G{IT$llN^QqhW=d1rzSZws!>azVcV0*NA>BK zBi`MF&x5>+M;J}o*hi^3IbSnC%wB6~ z2|M!^%}m{L_0h2BY#pBkytJw}T zCV}~6yOm0#yRu8=z2g1I0zX-mRoa=*ZFZevFPjyf(#zg$N4%s`b}l?e5^0U-Y31t9~G5HWls_c09TV669cMkC$rX zKvKI+QLTM4Ra8SCld8(g zVkEUPMHsuUV!!KYus_W%O?4`d-2~^hJiOUv>r#l95HVA;{_A|!o$WW!pDXAS>!?qy z4x#?1!YM5Z?{Lme)#@UwT8oP0Hzsi>lPi_jZ{L??+<8MpsekWB6}(@F;{1#~w|g|r zc3%g-?-d_kc8y}`0Qc{IyMYYR2y4)#swHy9E3{E&*NR;28^>=0=hb}?EXi1b8%3hY|5vWtkKvA zMl-UTZ21BqC9(g=lu_NcjNhZIEd-lYrB<0Xd!LUx%i^ZE?k>1DmkO<*dzrrxWj+f3 z)a&I7J)aq_xTf72t7!#?-Ll29?{DW*?j@w*&D<4+#N6p62Vkaie)IL>)NTlsJwQHTcnw zN2i|;PKnl&?R%Ym-4zA{!CT&L_!sP1oGRdD<6<@bL0n@NG+2AJ-U*?ae~%f8<4 zoMsk~dnzJ==jD^RqgB(}R3#+I>S?kgFzXzH5%N!Wk>@L=e9j!vv5^JbNyEx9yZ%$JLb z^QZq}v+Qy}GtoIj%^4|(SHF38nyCv8ou1EnJ01R78~iS;m00JaUm()hR#S5s+Akq9 zsmVd58@+a#Hnq~jeS}^3hfsyok25QABsgN`n-I9|c zF4*B2nu-*&b{NwOfp8HU3i`N)!4d8pdnZni9`;nSmtMawb~CF&$Pdn5DHS|Xi1~QD z=GJrwZq`0PEb^|ga@V>p@6R6O+*oc=Nny-gr)FISRO$;#hClQZe5)g~!Z$?k^yn_# z+b-GMR#E3wRuv|%L)|;-CyF3Ss*kI$s$;#YWheIN3DpB9=g%ay)UsGG79;z9S}F_4 zlZ)ZN&SoX8`c!rfCQ!Roae;ld!5t6Rb0{QD&!yIUSUdx#a$_L67W5b>`6$)8KV^{P^D>A@m{d|)n~%?fo)eS!5d$$m<5K13M26vCWz;?yueTYw#wbJc6v z^0`vMHAcUU$I4PO36i&HW>bsR%@j3&#cf`vqyk43hLwQwd2Zi5_S`ALS zmbK8o{*UkeUJE4*NUNz$d{UyXnV%s3Y}2#ON%G|v!{z+ZA%C;MJEZolkGB@Gxb~V| zoGu!=xhLxZo5c}T*;br;6FwbhvZnKi=xf4c|9364O@YDlvC^Kj}Wjqn68*PO9CdRFO{I42l-nMZzC@u ziDj3FT!Rfqup)IT*NyOcwtD#-UV3_JE}xT!hLeg&>^D~DVKeV%FEn&qY}|YaDGAmq z2l0BXiqKclslFz+m)xK~O-oB!7QGj7?OdKJ-6Rn%-!@ApU)sDBA^jpEBa^;$gTNDm z5q$)ygPC7z4?kw;3+F2ahLx4&k8)K_&BX#MOdYfv+l(|8)38)2m5da*18{!dhc3Ws ztEcN9abd+^n*KSS)2~d7c56+S7u~{Ha^gQide0u5R@_G4-=yY;Rs8^2 zYK;&3qN}Z91l(?D=Y`+9Ak22EH;K7l!ObSl@C6xk=K1N`b_T{M^t-yhg5~&~fz1TS z_zG+xLdHY7KHu4lYBAcW^HtGws-HPDGw8Q??af+Hz}M$Sg27g4;*4)Y{td`cxqh&c_q7to1Qt$ta`H!4cLg*&(9B|C zT(?_eD=0*_*{k2MaUzRv5O(13EOGz}L1HK3%0Uz9wHO2l)46u>Bs5OJV!7;yqgkABA?42iEhOX% zO8W=|L;)NY?9WCB;NM{>QE@p;t>rzA;JPQ>QeJyV;0VZq!Ndo~*E1@0+e0u3pQ4Gl zK??I$l1t)-vanY zMn(`35rwg&czXl69N!w(Jw%)l^XcOPpHVsS1K60=%CJ-ldbS56V?JXO0(9ci!k6JI zo`4ILLQWTMm;FX~uQU065s=S!flJNa$LyT(2l}eZ4bElqX#v`AdMb_Hp7+_gtL6%7 z6*`h+CmbwhaobIqJf7n@BXUKZu$w8`%DM@d6QJ4n93Kkn0wjd&w_VnRDY)eNej|T? zf|Rs$tMg$5;J1W+1Zw=&mQPRA&y~Xq!;x#}jF%U$YH>lzJ{GUxt^TR@=Z)}oaj}CmPx;L-<{(%`DZ5v-w ztrf&jh|rfg(krWx>&yg|1UMgVqpHBBWLVl{!DPxuNcOv)kXM*9_vW`R%)s6@1x}Gi zZi>--0u7k`*n3jh>8ygwgp{!X-7LjJ<^k^YzDCob;ga^=1>g!IX`z8H5Dwx{_@S%d zQK41mYlXDG0aV6f-uUB7Y|xLt*QId`+JMf%S7*dS72l@>R7r*?bS8 zlK$v>$eexOTttjhWXVHD%=PP3L4y=0Gg~j6?`#D+JuP&911By@nVw- zBbjR(5$+0evCn_dYqhb=T2H|Ag=Fee#fObtoZ>OJ{CdRTT-J&RRSZ!-qN=o#-M;Zl z=Z9`qRu(`8pMO&hZ9f+3RyZmqij0YvYj#MO=DYin6)SEE{q2+%Gq>ymB4H?wy&$(Z zc5vjMnm~3J-h8h2vpXwpIF$FI*rrDz1 z)_87RR#E~E4!~hKukZG$#ZqI);gK(=w#yEwp7m{ecEL0XZUyc4{oVbo8PJr1@^n2X z6|=@0_Q{X{QJj*J{HOHS<7KYlv}=C%t!1>m4}frc>JGu+yF5+y}6(v_I$hg6-2` zZyDXA*`QJo`Sq#kKmIH(9xMmWR8upN_*>ztr{I7XVhFjG?#gZ=YW@BF+nH)aggv!e z&m#(}mi#&A-&ycw!$mY5IMd|@y5~{I0tzq*u}!f>XJN2xC}dvtPnQ91%g8Xo($XwR z>+cqbFUcEx6>rIJU2i5%Z{THX>S5QHFceY+@xO?77+Aq*Vp%Nl@D)`<(BS~#xS1TD zC@(P{-mi7kauMtFctM=scUYNH{1MFSJ$6eEep69$Wk+QT2yje9aZK{u{W9wdb}4O# z4DxC|XHIo2x%knVp@M|6Q||`P?GD5rlp;Y9&^|djI4CJC=Z;Hna92j-G%r$}nUTZP zqsxVZiHJ?PuPN{?{+aaDD4{sQHAs}hnYu05@GEI0DjwuYg=gp%yd4G z@)2}i+S{YZ=xkOPM7EgZj8piNVPa$c8M=$FpKB6^MTrlqgy9&B4y}iz55$%@l4vlj zuDH?e_Vgqa>#`f0v$CA;derK4$r3$QR04dW4o4!%gb>mPideu$K01H-Le>O9^Q zR;a3MKvBcz{aNyxY8fe!%~5vN#?F=MY9Ao9cGi z)7S>UaQh?}>uGNOJGL z-MGiW*yrab1F3I%&(F`wvBh19QXi%Ue`1dsjriAiRuZ z+z^!E8sQtxj}&%WMC7m8{N7J>?G?y0^&3Y1c*^7o@)v$xiLUEu&k}OhtxB4O?f72` z7fP$Hw)GeQgFmMkz9dY*%7(C?-< z14D^n5czn2FilFbyRfr2*vW5UL?Zl&>9N6*!~ZoizLRsQ(*%c=DfY>*+^8bIxSrPo zqIR->=<#LI(ef)J01ylH<%)<9x6~Xw1tE z9_IamV(H`}VPBp1j?~U^zFMfa1_E^fTg0A+8WyZ9XVYz^Crt?)7pIk!3~Lnw$77T~ z?rpbv^;ceKJ&XfQGqWt1&s5}sgQKxIrIjTDG^<_lyw35l2{OJ>rUe2b_-jRyPhAHy zJg#RCHDRnG1Ov+=Vyt0A9@e%QhFG4IZEV>;?A80^>d}+}Rg;pGHB%X^tquyejCLm- z_P|amKURZ;w5k4A*Xp6u4aGEBRuE( z@zq7!GfPL5PIGp9eF$}q08Tp;i5|Ys^z%dCDjwSH*Q9wR*$qZnIoK|lVy61I1o7xG z%z`G^7}M7DYvO6h`p#Q*eLZ&_1hhogeXjTMIvhHYsrj6*Xiu_+is-!v(GA7$6*wt* zG8~Fmbyqj0Qc{xaqlKF-?{RSrmJFTa1_Pq;APV@`ok{7D*XE;h?5Lg+^DS2k_&ZC) zD2N6X(L>LJrM6)5V)_r+wL_MIfie&eHqAs-tw z?DH>}nxBVJyf>@iq_>xG2ucZqwBWs+qqf$(pVI%iYd4|qmmyq`Q{6EvHF5zcffUQk zGToO%7GfE<&rwy;2m{jF!@$Dkd3e-sTFr5ehrWRym83&&nX{s(hFGcH8B3{qp9PriWR_9k<9RPvvDL z6?rHux4KRa55YId$_;2J_)ekND;@)j!#Z>$Y&7xs2OOE+^2;}pjn%|wK>&( ze*ebS!<=?}d)s^EIsOgbian;cwm_WK-(HIi4{X=fkLKp~_S*yUJ+dS`yeY1k#*>oT ze&Lq%@j~VHcIgpB{#X_p53lv|qvJj(lADnCi=yZ=v>qiWytG*j(tlsq{(jqb$+PTi zzUPrp9EE7lf(*evl^R+Zxz&0X-8TZu8e!!j%-j8XFFHekRhq9|0e=^+VMnK_**M85 zO>R8pPOGgij=Z#+?&j|1mtn}H6Qxk1 zZ_=0_AQY*tsHY|N9v=Wn{~pRoXpCkSME#4c)JuhmfJol1NvN5NYo?fcDmYiB-t|ud z8|FQDIgeL+Edt;TEiD* zy)=@g+a1s%1e>$O2jgD|cqAP0@(P6DC@L&cGA9Tc{&?S7n|89rOK+)eqHA-Sd)00L z&G;4X<9-Q#>mPKD$!KL=)@lRWkMUSHRL zGXB|Z@P!a}T8~=4i^zgIa8VEZ|J&wYbD>Wu?U$oNm9f&Uf7sPd6c z;cs}OoT1G}_#qQO$j}k^mqNwD2I%;enNbet`mtBCvoW-#6SA{50f^du1nXPantjAR z+J3WjwD@1`f4YeP9gQ6A6LVPX8u*3246%n11AX#6+w zl8fmhF!SF!Ju?&gM|KL(f5JD}IXD2{T+IFr>tto-_((h9_MaF}Ha5<`lGXnW^yFY< z1Ze!H7c(2Fjx68^W%sJ z{q$R)18q(GV_zT-3Pwg^&~AP;mH1)x@OL5qvn(;ojXq*3bdYFFrrzrfB{4g>9B|kqq*)R3|JL{ESyXDVl|5@kx;l}ab z>^EF2e`bl5@h@3oW@G=Q-~7ic{e8b-{H5Qp|I%-`Sbps{KkZX~NzcC;r_I8_{(cze0O4hzvKIit09a^f7-%S17#J8hI9PZ@3?xJZ1VkJ(bQBB%Tp~gOTzq_D zGI|Q)7qq1K_>>$}w2VxwtgJ*7Tzs6&y!0%r%s&bNgM))ZL_owwLc(Sy!6#wbGm#k81z;0RxACgo1{Fg@Z=`y`btD02~Yg z0vr+o3JMYuwALN89sr37g+{_82#qfP7UqRD2D5iWIxMMBSsSLp*a;cSI~yN3_~%&I zIJo35DJZF^S=rb*IJvk%=S4Ab2}vnMC1n*=HFXU=eFH-yV-r(bJ9`I5CubMm4}Sgu z9|MCTqoQMC+0J(I=i}idi(mvCnl$+XJ+T-SJ&1z zHn+BScK1%t&Mz*nu5WJde#8X^fcV=b`ya-I3W^IH5)uLu=0{v$;Eq26M}>qUVS+{z zl!tk1jsAk!8x}(-BE75)j+8~=1oNHE82ocG)>ZP;AEEt>?B5H_=f4%%-vawHu6Y0= zs4aq{LZAYGfa^QT3@`ZqFD9C{QhvId6ombca&w20IAU)OkoineZnOxgF3TSQEkxg4 z_U~eJNg2%1ci?FlIvmeUQ*b9rj~s4ip6`+#V&jm0$!k}Y= zNs2kQxn!-c8cL+uetW9hmG%hexzN2{1-55}uYC;~E4QFaolC?1PE)wY#v9VqD4T9v zbO`>SE!%O0H35Y-0^R^B`bECefbJvUgJt`*i%-mX`v)(=BPXIb-S#>qyf_9$%|fl^ zjAjQS%zF)#druM1Lmy8+W8<%A_j>tz)6OJG#Z*};VogyWU+|vqiKmrNNs4NJwxb+w5`CT6U?eW;c5bxx z-E>A%Te;LA@%{bYfdlBcI1>1|h6h}J1EQJ)IvX!uL^69AFN{vJ7Ix;3*V*H+}#n&g(vS#Q@;xPoLK+xDu-xspB3n2JhJAOVKFPT;UR#|o8( zC4>p$HbpPQ*;?bmI(x%asKSD1;92azRzKJS`wkH7e!uF*-6Pf$;n31T_uApKe^Ayy z#qy*SYU&cl-d*QdE2=;dM6WF`1>|*+5Ntj!D}^} z;yDaGXRXOZ25y*O*PKmK8+^uV=tk1+6x=CR8Id7p)*6Si)TJdZTG}99-qh48Fw*7AN?cWd{2P zasLj)ICL^55@)hE1)2F2X{GN^WWB$3r0&LXMB?RRp&%NehU@K#7YnX5;kA9WNZb}} z_~t&yd*qf%iNB5mab9xvCDYGtX}fM`Yi@g5@8HWL07jQFqi!LU(COXqmb6*uJIKVB z)O*5K;ug`d4}2$0OM?z4X3rYS8AarZ`}km_4zFyN2X9LZ7I$`vij6uG#RJyROdZDr zQ|oidlXfx_H)Xp~5CR%ojwAABl?uwK%tsL=3IZpOU0)4TDw;Z`xL! z7GP&=!j%Jv2FKe@J=@Qv(8TLM5Uo4ez-&foxWc#e_gzICIaVt3aVVEf9X{Wetq)s! z{y@fckCI*(lO$t20AK3tZkD@HdF_bWhIZ+U2VUl;zP2EXs19vK-tdWt8sPFRRZxeh zXn#Je$-#o*2v_)?l2eJ$OO@@tP;SOl%CvgqR5ybO#Q^g6@4&%JKE<`_2-Cq>_H!M^ z2Zq|zgzbwG2hZU8LZ&m;ZxTJ`T}gLA=lx^j7X+&6?)B~=6(K8Mu;ni)ytOP*Rb++t zNFz6IoOG;jYrd0~hOaG`7k?Yzc}eK4=BcqX!B00kxXOlyLwEiNpnGAye{26>KiF|n z+R02zZ~l&=LOK#iqI~RudlNa#@?t^UCNs}pKz74Av5Hp2p35kp&-7bh7m&j82Bym7 z?sIIRX$?CE(+KJV86RJGwq|Lv-Df?;lkWVj))B-!Yg&3(L_TcQ#v51d>eJ^@1eYz4 zr)2tPp^K`@xO+L_w%g~gGMs2$GbEyv-X>PcYi$*-w;=5#`p)j*hR4`=Jr_i%W;wzL z+6~eAoKfO5lnoj@p_S~3c27d%r~MY}5nze~bFQ&NUnPx)hwAERkMX<{8co6>gs2!9 zO*2hF)=(>>Rys8}<++a~-OJi!qqs2i@EOdOw3`-@Q~J#b2FS>~0g*lB*2}g%{uqU9 z&caG^&L(sY%8a1Fw2UB1!0!{pMw9e|P>tv1+#}$ERM~Vo`w>8**>ZRA2)IKnsJfuh z8{r8ja{BmHeP^DQ?pqQb=c_cw=x*Sr^;5PE?$eu`9mxBi!C(Cc1U2wF0 z_2UER(h+UIb|BN8ipL?P3ue&d zP$k;c`S=l#HWRG0nzJn3{*Izrm3y0T|QfOn2WgsyRX2} z7U=Q%BE(Or9syjXS!Ua*AFhD!Pp2AU`WL#-QY{#Pin_w8$lS|gE_kCivg|jx>t>nyvJZff8U(~#rIwFJVul2)ydDz-U zlzLu*h?e!tN}PDc0v9!ubw&|4w9eE~NM?m?!5 z?mR5JMn$C>dK>BCZOoT2a)YAXH0mZ}P6n=0^SM*88;m46*+Z|`9V<__BgbT7dDt3* zQoHGUK|p~0cZyD2&-uy(j5JQCt3!SM52`$;8kfcQbeQ${c)@<4s@j2j#$#@-(=4A^ zSBPiFy>+j0l5dXmJlT%i=dK#ADH!pz>ue1D#6x`rv8zN`GO^kcpf_FBQ&%T&RsDvC zYG>GE=R4dzOBTb~mh(O^bKo3e%&v=Keu5IjgfZH>$d8 zC|J9MsD5-pFv$#kW&jA|!<2p+#ZHa%F*l%V9`%uv9y!=ikM~{T?fBM~*+4$M1)0gq zh+v)?1+((37^nfHk+?Rw{AA@AH|cBiF@}Nr<%6S=X4-w`UYV-mBDmRSS`W@d{gte` z!OTe?g4HU+`}KTTaiHA$Q>wP6r$N_J*u&z@gb~qD1fuZ`$xdg=a#TW4wE$`s7o3HMMp%B_co>Xm9LCoX2N2+ z@0lAKC#td}Nut%hZV_+3o*>4-=C2)c`Ebpx>R+jr-cT!HP7)%LAspF?s7D~9cyd&g zdy_G@QB{3*c=!?lt=!871`=$dRBA7Vb&ra|(CrZ4KyAfTJ{mv&!ZO#gdvK?4vjxkP zXg-B*@~Fc?rS?tkEI!JnuGGF`$E(rfQpuhOh}t{vo_$@)NcCX!$k&pkMqmURZc~os zM3BLloi@ytN^iPsLt6=B(o39tn14}!bn4`BEm%p@*l8AH%^H@(%JRS=EYQy zt{%!bP3b-lY-sXTAI~Ncw_m1 zI)WgGpI?2njxM_ghmX?gsd0wl?}7L5_4Jj^tE6JuGS)hL^wbzn^!vh{`t#E%hn%n= zrf=ejZl*XVT@gJm4s0I*U~H=~$1T_~vOZHEA&dLp+}W3c7k`nx7E!tJsc#AJAOgKl z@a>u&>#eJ*;dfh(CxBVAzMG-a0iB?P2yU>k38>)U;V1w$GIV-Qp!@r89PNppr>zv0e7;MxKG?5|YG*lc7}#!&Jk$LQ z>H?vsWPv3FGrLjY6PPOPQ>9f1W+LAv`pd%eISaOa_F7S6J|u+SLt5Xh zHSO|CaLlf1RP4;YlOPVm?nYyS&m08{IwuNsd{7B|`woR=P%GSkXw7WWtgV@OkI3ZI zjy=djQ_}#_v$8Yl&b*WYj?gr3zu*vkxNx2yZucAOp|t$l!AM$acQ26DWTQ@V^o@0{ zr{N8{Oh^cCo}pzSn)q(eQFs4j@nU;WV~N~Nh36FmgzU5Te3SXGcShFVu`Wwf3a35T z_cV_xm)K+%RT2W~Ry;{{WMp9oH6*VwjhqSVPK0_`OlLOil>B68$Uv8Iopv?KK4KJ? zmF8!&-{ab(xvk)Q@zg z;J>U}mBrM#kybPt5D8PZpCeN+LIfiFH|PcAzvkZv(U$1@);l-VjCm6$tM$E!$Fo%|dUq=sik{({t3#E8DP-nTPpZkjbFygVk{AsNU1_J*= z{sbOB=~hJj6o`=18{a$l(=W%d8FklnOB|YD6tdc>19y{`3x#S7=2_Ksfd)Q;Rb&2w zm_BY)t8_ff1G#FQFg!V25D#~pB_S7V=Q?G)6{goI`e8Q-r*(lnFB@nkQ8(8>?8&q&P7QGNGn2!Cf|5e^_USoXE=fo&z{dNAdKug2X2mf zRJAUsYwPe2n3)(_N{rT=PLbDAYQM?D^v z-J#hIx_ktL&O8Fn;3uLV0UnM-k>TGH8-1E{Vek}MY|s0L&-lbwaz1bEbNiP#ew;l2vq@cLwXz?u`+#XlDW!@4E7v399 z@`fX6%t82C^UIEjc_v`?0hiyIZFsarG+==2(|+7lZi_LbyCodS&IMKJ)sPhi_|o-l4eTdQ+~!V9B! zgOEYa6u_lCls0XIs_&10?-!}}GA_!PHPh6O04Bm=z7Ph48*SkC3o17unO4Gw8rVm;%}%f6h2Fi ztU2NaX+jyA%@dSuuFYV$%nFb8R;NE(4I1yv?Omn z-{LZl^n$@&r#7q1$Y6;kSUX^kT0H-Hqv(M>a@Caad1fXjlHlofih+01Dv?dlM zY<-uVk-YcX6TLQCVRpk!@MK@~l)hj-^uDIqmhzQ2B|P8)O2*(3(4KhGbALJMd3^Q= zIAz;WQl`E{D}S?!HJY8Z>o89rW0|V~{Y;=i(Yg<)>(U^KndInbfbY?8GSX3haAK=6jK-|0MA% zPY7EOhNE-t$WolDv~lHROl>w`>wOaUVTF*SX(kaWY+=~GEEpS1u>0NvU)58h08=Or zfDFK>sw7S;3a7vfN_m;f`yDHT%MEsY%0omx60 z1TBdxYi&YSkq235!d&bzzl$U;ti%zAiH-Pb93nIK&_{AleFh>xq+jD=b7&sb{h zN=;8(P0@BxWeQEKOlFRTwmRUUAYgpEUFBear&w#eDNuD~L3~UM{F5P_m0j#B-aEF_ zWqLQcYjYWrdN-bSJ9{{4QX9`)i0ZUPdXlmlPuZh#1vo}9D5x8g8?1n`(`9aY20-7H zuxS*$uiB|1?&~z#Lg&&AnbIG>6_!c_2i;t>Szqx)Fe(lb^ zr?7gM9I1#Xum>Xtw!7T8-xa5e$y!#Rqq#iSldS<0@ltJVc`VGf(s!6<+|J!r`V`7n z%LHp|v6Ek+caGZnE3fZm>9d=_G^gMWZq^!(2j-M5nmR;Dqq+xsK5+_caBqZ_wo{ny zjlJrJmz1$lc~mT)io{TsJy{8jMa%Z%&+lNIoG%3tj{8jryFZp z9k3j)wh&}-N&;yoZmkzA-x$2NUwOcvv0X>O{<_ora^eC7eb=Fe8|~wD@1E8$0AjFj zM{t{H*gLr;^j_j_q|=;z`_&|UWcMLmP=QomNb)lQK3CPTGl>Y1afww_j0zTf0E~j! zHbWpZ`l+i7`vR{I9il7$(PD_+0_KIxQl(?8;`~r5wedVhTU#48aM+7Ca~&qwe8m3{ z_@!$0VeBfR<-n2DVJWv{Vm$lgxU-n1qXqdQ@KU(%wz}GGB7QSc(ApJi*kVHg zv|}p{afx#pipj~y$6`0-4AFu)acV(QX1{2_BECa$kpJ{Do|#=3g44C{s19VW!Vx@vWdQV&ZWr!KePKUq?7|^q8Ac@^YADl0w%t#7lm$hXvhn zp;_xx=xDVd+9L_CDem80rNvD%p_0Lcpb6f}l?oKjd_7M?rf5wepJHWeI-$?!O*C5) z>oc;tg`PITfgw#J+upy-zVTZ*#@O+|;z(=>HkzVyyO6DD=oMQ}CW?>fa+&$aPq3r& z@)WA1EU$-D8vH#|rn$P64TmG=)r$&#`dyCtT(5_o9CaCc#=4M?=|V%5M#=Ed&ivt7 zP8k!cSt(=__lovLdT{S(*J5Tq&vLf)P$XWo_|!LN7daW;nM>VmohjGPm-71c;)w$i zw=X>XW>Q|5^LiD>iuZ9Y@=@9GUNxMQ9Y3w*#Yj+DG3zCvZU~5^2ThL&2>QGJQM0RxI9{W~u z>B@zGeAv+vXwNITYi*I3QK@)K}{84_z3TYbBkMiT*-KnN#MUWC{WwPd{kYEB_wqeR~$;8L~rhMoaaG*=4+a{w|< zOm_*}IyC+YqDgkGn55K=ym)SRdhC0_)v}-;*sCyAK-7LK4lC^Kc?Tf`=)HYvYrTJ= z5$VfpJ$@w{k&js90z_TA+AsDAS*Gol*yk<5JdGva)dp=V)HuAe4mqzRT(X^*ZYcer zgFV&Akgls~I=w7Xz6c}O$S$_%P%4sU)b~IW)fvanS^Y3m<3FInFV%(r21+oQ0^&u} zak~ag(2EH+O-ro3vajFEz{NMYzR!~QdcyX|PmI@w6Wy?Ma@Ta>X)AQRigm?c|CXa7 z2R$*Om_oBa39)5K;KmH9Fhj@a9{Qe)qdi+stg<3J7UcCt3e7Y>mT{t<8&`$rmsYYy z@9{N3>?L9{AGqT#n`QnJ%kW0|;vob4vPI)Qh6D?JJApca6K3m38eQelM%&d?ND~bs ze~XM*2{}=#GBMtv&Zs)|+SZY@%QO@|%|peN?Xc3~_27}p1mrF~?-%$7@9%uu?#;|r zi2^KmW!8dIu}zD}QKbgGlH=m9d(uV-Z!U@n&{wLC3a#eDL)p}GQUs$g6kn?3bVIx z4}>tBmzTx!kf8fj!2j!$=i}Tz6!`r_0{tR^`JwpvX9^|OKNU*9DzyG<;y$LIqP>5r zP-6d6LG}}3^ov62$EJT*-~U`f_FD!2wL6dt zoR5j?U+Tzy3haJ~`tN`ezh()9lwkZfQzNMl5;23sn z5Lg>6qAoymHx8NByE%B^=1I%vQ8C9BUU5rb*G$+lcW8K?dq;B1+pG(GWN&_a&_URhj87{}sa(lBEcNvY{b0QzWZEuQzNJf7N)F4S1!812>+ zZJ4Bl*7|4;Pe5C!n@&ZC7F6nZ?`V$B;Ks2h&_C12vUS>esV%lhxJ~j!V&`7F!;k7*$T!K|hOIr}YeTgzb&-sNAZ3RswO`j{k=Sn2EDW3(tNrQ#plU zY=27;c)LM(8{}^PPXa^C-M7gqUC)XDvjr_+@%{ax(B*i+B0!)eeh?v!L5>28{~gClg33nyDu4Mc?C_@wPl#aP z92tjKi88(Gb7`^CBy|jGtgTv0#CgqVc(ab%tLNmMxL<2HB$R!Wgs+~9;S(cSys@+B z7xv}ZZ--ivcFI&;wJ}b&4RwMIZ3oU-aLv9c2a+S>QukMBE4P_wTHK!T>NV@pp|8LJlovuGyooXZa7jp zM;2)Zrtto~#2kKNeEG=yT*8A$DOsdt9$AUB9PKPoNup}?#o2~#pP!GyM}z!cFv#ku zRv$Zr7bXl0{12)ITS82<8FCu5_Pyay{6Wk)pF@DeQ@T0F7HI4qKutQdlbkUi&``b# z_iMh$$#-1H;@87(VAMCZ(n>rQ-{LV16ku2=X)u_v_P`I;;(hTIL5Tmjh|1Erc=pyJ z*!{S|pqde_ab~>Put+W{qSjEWB_RakVVTha`#vfPb^8YN&00n4iIeg+W0 zE`q4LLw-Ud^gvFIC^QdhJ^38+McG6Cd7+!)p`^fO2Mp}yH;z|OE!ljZF!)^ASv&YB zYLgaJp_w5UUEBJ3(Aq6~EM1vN%69FTZSY0Oh^&5FbdzUEHR6)~fGABTO~t{H)Tq{k&0FKSK^eK0nTbuLM7~4D>4Zcys z`VDEil+s5{?o0X(%_ly*&pdS;D;Oj!t3}i9zSJXj)oe^A&)y*OBQl927aj1qc$)Z< z)254OVnL9Ju>0Ys8*i^p*sOgf7=_1*&(1;0ntq-LKJ!k|s@#M2xwfGIWeBnR;dsC% zxt!p8!ffOo_CVj-`=Klt3tts+w6wKskvE&4Pq!&bIouM%MfxO9w z7eiSABitfp*!}6fu!tlAUa>ovC~&CGNj8xvC^|yre_Q&5vF$< zA)#y2-5cnrYQ$sw*x^Y8ibfnKE5yIC77};8=Rby$$wMmS>j0yjUhGz0YktlvP9X!j z7DyNs7-HUL1`l~?vF%(uryenGoM3jp{@CKju?%e=cvSeopmDCmJDg#enzF>u`uvT- z7_+f;g^1fB4aIo*;-vI!>hl&u@I+$TDn_+>bHlu$!)hIc(@ObmVi&6Jmsl7T)s{S^ zr=!a{1KWevWqb8F!2-1KrL6rLC}G`R-J*UJUVJg7W4?sC<_*!_Wr~E=+A6lAW|LQ0 zHcf3&8m0m#*oxxM?A}X%55F?k+r@2uQOW;$z^gJlp`69hm-IUBS*XZ46FPUi1krk- zDEPvm9Cz%iRmj<>BYo@0ZA^-68SyVPul2Q~i@a{k2oK?E?DgbEgAZHkY%w&lvZ6-S zg{%UfN59vKiyKaf*r+&Pz`1QM_QuFo75qMg!h20Tgw_O{azYNj6K}nzcJ7`&A)b)j z*0uY__-$V+Nqc8eDZaR_bt}A#TO3^}t)$e4t7$Qc@|=eF%;-umba?5$ zCX~7Fmu~blQ3#eFWh$KD6_^NvjMXoE_KQ1|q|Qp|DIcQBPWD{;zObUKjW4M}3^ai4KYZJSy&nQyc(h7={O^;rLL8Ij*D;0dHF@ z?i&_jhmprnw=Ir@0!nBp-KP>PKYOY=-D{f6TRiA%IvXcwBr81sTG0+6<9+}21mBzg z!&o2ro2C(1qUzeVBir8IM4J2a=#*#*Wn-NRN#%{veG09!_%(^>aTa_&g73G$-bZNt zH({e_;&Ul{P_>kJcWT8_5$6TrX<*)qQGKuc8o=T{v~?YP8_BoSqX2GNyPr^vJX8f! z?UYJEv)`Z`ouM}T!_QlOzVrFzz0(2!4P$R{-96B_af4f%wId_qG$p&_5pkWXmHCp6>}8uAGZ z`GkgiLPI{GA)nBYPiV*|G~^Q+@(B(3gob=VLq4G)pU{v`Xvilt(2!4P$R{-96B_af4f%wId_qG$p&_5pkWXmHCp0A3zeGd+v|{;XB;!x#oUOt@xW`*e|9!e>HLX8SsD4gor`X9AsX^!bl8y{BVr=ZIOwXdMxi5T?wTgj{}#GuEYi)_TKzqgA2k{8nd z9S5Y}s{Oy?fW-VuvVN5ON9+9O4oJ*wY(I^Y{&Ya9Qa86(TN0h zi~F;5a_y*^ELJHnZ2jTR^*OPD5SqTWWy$AJR#@8S4I}&w2q?=% zNiN*D90y63(3XjYtj&cl4<_E!YJF$N<}WU2>lrK32}yLRySdW5x>_Rt_WizS5c_+n z4ZUp+T}=@sZCqsN@yH1D%yp)^pYAf<9B_DK8JWqBJpR*rPCg*I1^IW=I;Ns8v1aU@ z+01!QCUX>a`q*_yZea-=W~6F)S`GUzjxb~{;4=hH@JqsxVJsF6m#HASFsScJ1n zjXU2w2-K#(rMcpRGk%E(JfodccDEu==ykFHr!iJP%QzqsvC-@f1J)`OZES{p0YX@k1__(7N)+tZuVdCzfn1_Wb9ZchFZF zv-t#S#U#`xipuvee}v?KKqe?86}t;;~)N+Xf3-wiMsVyf5k0 z!n0V((iOp?)Y*}%7kdBv10Skp*1>Yd4zvciZky6MEfLCHaaLRip~3Y~m*cUx2zMH( zW9I}~@f9TgJt|mMq!woSBn^BUs>u~5b@LS&mU@a=33zx}aNH7Y=vFyzNN8S*K{^#j z@{y%F@pNZNi**5bZqTh}tc|6-oiFpYLD})ibc55gM*VHO2KNKk9VH6F_&{1kFRJWQ z`oir}z2R}R=3!y?K)0oO=S}Qe%kZ#_{Vr%z)nG!7xLZ^U3(1UyHY++d8ovctL~~|0 zphTaLH4O^d@Z0|Rp<6$&w>!xQOP_nmWuyu-0|%<<7Y1kFSH8u=&wG8&9$qnI6LxSE z$$7fd4d#CC1xMpzAMU(F?x}C}0nT;d}2FIk3t+3A^EwQjvU-5h6OR zUrvB2bzk@|;jb(maw6cV=y1ZQX4wPa3kW{F_wcxyc#Jk2wiA=Y$nTPd0U56=KX;#d ze-e?ktfkYUH@EU_>|M84PH?KHlbwbWOPE*z)s#4i&^ybY1bOt9W{Pd`BvoyDad3~wPxKJ9ZFO8My(V0^H+jrV&h^Cvc zfKQV8MqVs1d+%F5s;X;t9>Xb$%i{YtfuBFmi1P5s;eN@>`o=;IMr^;lxs|tsE=bgR z7FegEA5Fh%qLeBgp_L|8$uki4B4Jhz2Ej`oY{rqYxtV+gEjXPlm0Jq0SWysB^(A`i z=OG129Kl{l?I5V3%x+s8uV(%gq7`4MlqtNeen|G$5lFGE^L(=>&UZc^1dY!{gbODv zPlNo~uUX%+ra~mYSA2{p;LXQ2k${xZtfA`Bpmmy^?5wC@)iK)(kznMl=6PEv8Imqf zgt1x>|F-Ibv@&NLqJpIgr*l<~hlQf2ciX$RY?&iwZQXYH4+-cbG-Hz=Rfun=@UQku z;c#wXjK789+qi!-+qVHPmbfP*a*zGBf%v(BsKVk zkYsrWGRZ+G`MuKN;tD2568(%=VTP_jwWqK5Irz>tZnDPH-39=eRxr!YRmH>e4d33< zI>VKP;6;gsa&TbbP%l&{LK14#*zlWk^Mg7k!Al>>38i-R}!!(9)@~r@XmPSeu7|`MJ({_ zr64ld3j>SvVOa8%5SJq1tJx5Ik^N%thdlt757YWm1U<%H=x2y=o#i7(6Y-d`%j|T` z>^I-#m1Za8(&b;je|yDJcRfUx&lW<^>0^H}%xwhME?ki@Z-6B==Fgdnfg^Dz(f#13 z<$$g!8mR1Fn8AZB$^nC_y*jL%6qo@^KekgS2QZqEiK}>t4Aiw6HGQ3C)y|j4U48#b z$K3|jgj<%!4fV@D&Y->cdD9T@ex%_PV&0&p(zGBUncVB$E)rXm8v8x^?sw|W7jD7bQOCCEpLj;cMU9lx!HDU{+-7@ih^A1Tvamo&!e)wn4#d?z<_ zd}E}%SM0_*f>Vq$V=;8&J&rsVB17Hc5?kF6KL6>GYQ?);p{j&Wka1qxDZ|)+ljs%q zHQ&JMSYv6P6XKvXE9C%CG1yF5LDo(xpUC`^16cGJX=Y9@Xgzg94 zvzgEki>FKLBtre2B zR`eF&=;z)=zrhLA)#3$2c$}$zQOqLMI}(W z(p2TcJbuku+w0&X*2=WKk-(`3m(~QP0GWYi9OcOn29;YSp{VL-+Q~VGZD?b+S~m6q zno!e7l|z~HV(3ff_AM_yRCBz~U3^9`Xr5JU?ddi@5&MP6ShKS-X3Va#i5wiQ(grJN z(`24-gV5Lv;q0cQ9Q>XJ!eAh;oS_`~dpev5Rnh9LNq@Hwkp@m#>3bc8rH7)TFzA*L zXwMcn0e!h_4}}UEJ(3)jz2R#+Wq*IydNI;h&Dd{Y84FM#_sZ7%JgPhMUvXYW6i`u1 z;CYTHIpIOrxve8_=Vp_?714SANx$Sn>Y)5m)=iSsEYex2HctWn)F>r;Iir?3{CS}<$q|L z^Yixnk6Xx}_xu0KIERIa^AA=xGZPDgu;qJ88%3+PdIliVTL%+80|jv*1|btWTR8(8 zVM}u>ON$@Yt{~F5$$L8k8;1X!)y)LrUUU4_tn)v>x+MS-|NjGOPl5420kwaE!vCKK zYG05@Pbc}xg69c^MeDIP<$-&9t@#dNWG;K5*Z;4_VV)N1JVO)Q60Gb!;zU50 z5e1BF@WTVqN#?u=UvdLMF=h`DUVp-n55A{^;sZwN$!E^}T$FF$9s$$2hop--!`fk; ziBQ&GPdeDSb}=Hwp?ynD*+kFHz}Jn$OpkAPL4;O11~M?kgjJyl1K z713?Lz$3st{3J7ljV@;E|%Zc!VDI<$Y*z;2+ROZ9TE@s zE!SO~P95TpfRu5RZ-&NO+FiZh@Fx91bmUd~vED}jh~*cAt9+^x=DE2VFonbq+T37v z0Ye3NPmU}22#71aw;L}Ftc(KjpM)Q7S#9Z8`@i8{C}Z1y=3e#bam0CN1;#nDt?G{> z2t$0qU)cw6%EWjVhc5??Du9s@^hPj@d%|li#4ya~6G9l3C_rJ&3(bF3+C{-z*nQFE zRDg8IejA}^`2^({A@1V7)$)ljrx0Wt8%{-Gv zCmFf%4d}PgmYA?F!>kik34+1=sT|>p@c5`~1h#_xf<-4$G$4G3p-uB#wC~@@ThTq2 zYl0F3-6lgwez?x-40&x_tJWwFVP!)lblyr7sw9bQYPEqlW>rSNh!1ZC;nQg?XSwHs z3qg24W<|@S*d=lU1Hn3UOOa?+eUuX%GCjr`Z|_X6muT|hY!p+!ZQ~2ULsg7@&Z4HQ zO@{fHz(LUg_y$DCG$_X(v9LNF0%afgsr@S;9l0wO8f(StNZRn~Q>D-yp+oFK7sD^2 z;a!ZHsH*D+AS1cJFKM)cZr+Wylam%$YYy2zYs!&*kX*;QwJ5q-eQ=U&G9n#Pm=Y=qK zIEaat7%OFgN`R-c2Q?(xiUTMj!$|?ig=E5H+`|#yi|NmL+N~I0KW)Fvw1iUgN^OaT zc0(#h6)*qfs)irU?sztW!GlSt=y#4h%Aa*Y8HO+;HvnfaB8S2@Ik3_z)Z2aMD5`~d z?&^A~Km=V!On2EmjB?i&N#)8FP#Iv0@H$m)>}dK%t%oE8-+4C%=c)umREwVffF-n1 z8eeYNUIIXxh3~IF$r<8TPrO>mGONw^s4etBk3dd$%X>ZkaUk`TC%4sWmPutgO7^hw zu*t=-#62z;IV8qJ`6vOTE;@RuHe)aVc4mpSlxmP%CBV!2Rs5k}(x_ohm(mozaQ0%a zr~gaf&2H8e?&6uc?odK%$!kw;{osgKAMHloP#fag-_!Vg-o=!_Ss4qf+)|X_%r}6A zV&Dz3x^1FdPfL3P0RL1iJ|0(Xl7%jSv@a$VvX!NLIf5|*0fXdhxAaSQJ!Nc8@S)Yi;7 zE&fgYsnRw_F5x2pC?&myck}ur;ax?&Wi_0{QV2@Jp$hT&mX*pXZzEz3&m>FXBfxMG zhgf2Gdev3w&WwMtsk}Sw`~799$hm(9(s;WM7b%4G@aA>)v)AQ|n5bps5~{lsiB-sM zSugo=fsTA!S#r(qzc##$tOG8u*Nn%PC`Qu6)Tt=RJg6XZ+h^<7EubWU)4+*=r!1bU zg6Ga-csV*7!F<72G*r71{k$qt7+wr!lhnl!WgD!lVr3=l{s<`M@83T}!!WZcCh8wV z0jy`MM;QlMCir8-UR`6x=$|6J6Vc2WSpA^JdphmKuw2lWrDdTq5`FK1IdlWuXo=Cx zuNJ;lm31h(b4%lg3q1igwXN03!f)EYVF|ymoUsNmCHp;b*#laKXR0t3ud|lA-rI)l zi&?)y659hLrck9Rfe71O_=+F9L^?;Ax}uR~^loD9!#l2P`QDM9uis5w?`j1SFPzAS;x5}0OUYtpeW zTd1WI$Hgkm@F~o7?*xd<*Y_iYZn_^Jio{eVERp+2iNAE9*|1EPn(U(S0M1xWKQB?$ zyb#VEE`8DeO@boVr2>rdL9@4Z<&Z$s1@=7tMp*^B`>K^9YVv$J1x)o*0#8^|ZI__A zm0^t-Ekg1(0e7-o9KS)=xZ4L(N*(77{jCJD&7Sx)&f$rk(w0?0Ljwge1xN3ONf#v) zPU+dq*;?b-*duN${z~57h;$~D%OIxR5e-002lgWLEAti9iTwxHX?^e&(?KCkXAvs8 zh}zSI#0eWO9@Nz6mGx3L6+4Gf5M5lHv-(r@)a`l9Yf4C+7-@}O_CmKJWIjf-;FH~j zA^}w%w>pflM}RBnx~iRkaAg8Lt;J$}9M&SW#+t)uR_z?+pd&)&*jH3wkuWB^YJ7y? zkhLU#G(@2>yG7K1kv8d`FSzE#3V>AdQdF{)#m9w)w3cVg*T~Qlz)Y#L#N}Ti$KqUK z{y)sUbyQp5wl5w^(IUlN6C7FyQrsoM3DzPlh2Rdwy%Z=;0u(J8+*{mQq!7HtwYa+$ zDA33EocrEA@4oZi@7yu&xZ}4+{@6Q9XJ*!3bI$ddbKZ$QoYLE*seIbApISa9)6>fo z{0BfgT-0d`_3PyW%=3$%6(xK{sLSeY7D{ogA$ejyz6<)6sTV_@UBMcXRU5kGa2=&UD<)NH0uVz{zjRfrZ5ZUl*y^q4zXHdjyiyX8 zvL@OOWt}#2ia0w~&x=B9-7pwxWHB<$ytdUJT}wFH=lN1cFdYe(8jW2^v$b1xcpp9r z7N>VN5?3eY8+;$x)Q_dlFnoT?L-(TX=yv42hgEhr<@dYWqdXdV0mhho1{IU^AOk`zy6`;OqIcyw)PHIt2T=7Orm zbVTjLEQ^mL?vuvYYQeKS2h^wW3ae59nhJ>mwk^X{OQh=zrtu2T6y zft6d%knAs#snnafCa1StzhANZekwScK0{K-ZYx;5_Dtzlk+CD5lYyJG2^Irm>#eY8 z1CwBnk)}XqKrUK((XA41j^rv3{9P6p_6+WLpHa-aVBbG%uXT9N`=sE32N9m+IcDQG zpPhwA8p>kpuo@+a&t{%;*~b;c!tV&PDKGCM0|$;F-47dPKUM8j&=?sUGse5n^lU9P z&u>aHm4PR zcM&yNzqiG1e1%L$mSucY`*5$AfytDjwU@IjT_CVzy>63^f`~FsEP{U84n#~mtwLas=?PnIW=WMtyd34KDdSH#WXkkV2N9wZqGEGm8{CYR-j={BUd49%+AT zEd!a{zKDGdv#lUJs;TfBhf<`le(cyJFAi(Q_fyn)M!O-=6S^B^Q3?6Rg-KI@8COf7 zPXDG5Ze0OQ@J7vb$P}==ca2gH7Kd$)#p^)hd|?>AXDiupU@ZPjS1p4*P7DaIxGsWd zIc6m@OjdFnEz9AI$*>J5rq6T@nIDfKKWF{G3&sqIuMmGt{gO~31dlm}5}=)fwf;G7 zdLt7k#ZM^o7GvprH|hx{!1Nts+HN`+<9^MNG*r5tt%Qb4(%*U)K3sG_f)LvKrxpSN zI5@Vup>qZ9pKQ_vh`!9!V0?E($~A1C1`5|7i!4lE1?(gR^SA^7xJrbp)3w}!f7Hsg z+_C9A4%`Cwg>6duFNTS3HB%>L@1=Gkg7bV_=d#=Og2d|@j!_+l`ulA2CWt+K@h9(0 znD*ZHs)uEnFb4fBER0+}vs%dKd5euRTR?piYYZIC1Y*%do5hVct`0d&8&ToA62QBI}5hBm7e6+>KE|3RLAQzk>vCBP@ zHuu}mmD1VA>p;D-+)J}a%&lJ!Ypy(Zhy?b(Z#JwOeh?U-cOB;H6t?J_r7QH)xu4?8 z`y{&!M}GhjDVV>(XCzZpn;U0jt?{y?H(X37QI;QV2 zOE9a8D)p!5#Vy$C0sp1FyUw%Jdtq_0A|A>;C zSlbTEW8rH7N9Gf`^Bl$DUS8QHzw0p!fa8diKwMr7Q!78) z^nA#4fNhAqblS*EE>E#dd#0Qr*xUYmY!zFD;SGu_ud+xEQTD& z7y&*$H#?oG!|UtV+|~clTgiQxq$xr)!+7>J0#j7@QKg#eNwA+)g=*GIx4P$vnMW!G z4>Ek{_kOvx0(IoUFiR z76ltNx+k1*cYaL;0z>GStg+HzW#6$lX!b|5sTOEy>?~0F{LyKrPKhjl1z5ySsJ30JDd-c z<^`jCvwTLD)nx}=l?8rfe*xeFstcYI8wLFo9br-}Yhj#V_9ws$m5rA2#>ZgH9HZXv zPgWLNTTPdfF)jNXV@vT~l^$0FgM=>TLOKggXh50^5~ zPxz8@^1yTUo&;Dw~snV1U^z^l*eJBk@y=cP%KzHh_FS!7=7s*NWxxzrMp$M%{-b>AKwicw_<#1zK64OAd&pATtZksVpr;ammL z>kF{XS8RmwO1Nhml@`H2%JwSg`VUcaG^j?Dt>&UIUm1_?l`Ext`%c>D-_`G!KW`Wt zt@iM<*MI)BoMiQ_nOp1)ulQv5vp||~>j>khE4W;epULYh$;ZBd6p2;4ltwY%y9#GA z)ObARXa$|D{s3&_ODaokw|;D_SYuHQ`i95+KFd)411OZQEu-q9zYH9T?Bg;P{;tk2 zDlRu99EVY4LEbA#YneF}y&>QoxZkqh%Xq$S6d3h%DQjh8L&63que_JYvISs79lwlU z-EM8em=gWDbN@CKNt~IVkxf)BJ`%vf>rpAb*%fQ}zMjN2UYRcyD??yg^J2i=>*2wJ zS&eo|>0()#v|`yM%xUx5H<11Ik{(ByMY7E`4Ls%- z-Qv!Ul+?8>+*SVhbEdUH$xDy=Wcpm2SYa$q{GxFCC+pF|?#8O&Z$O7kTfHa!8<{6| zO`vPM+UQ%i0vDB6x`sNWqaBAE)RE77DZLk2nBG{^^y+TEa9)+cv2~@4Qya3{*VKUt zI^*q#SzXnfQNYl4S$s{V#xH`ZZTJ~#cva;?W+gmid?M)^oKR;Js);+QNIxogqCd&$ zuzScD^}XG9+>W1X%8SXa+4i9=X)p%2?x+`QJt_c#%<)fAeObwL zUBISUiR;O(xx6aVZepi8=y-mxEPcpWl@Qio;?lrvz*<}Q%IGZaAAskGE2l~ICLmCF z*iKw(5+NG5#6{TOOkYN9VaixmxI@*zR=$E<5i%!mjqN6jbJf{tHoePOe!r+2n+G0< z_Fn(pq4H8ZWVD$@3=}UxB2T8dX}Wav?9y#crYpJf9l;delIU&L2esa(FF+o*}I;dQ+t-hBZU zuB*$No_zuCBjIy(MZOrZWDE|{(cyZ&@_}Zm^8Ay6B$X4D++@MW7m7$ZN=OIhro~OE z-b;HUu8A9-#!etot*so;5l}Mq2f$d4?vZZWMdr7(NHz0ozm2lEIM(6cD7OX{7YaNy zP#+I={kpA+Ek2qcWn08p8xA-L;OyK8i30SEoaSI+in6DO{kn!78H*N`CewwG2S)?4 zY+i2(Xvr3|JKT{|%)3sFrV`H5sBlOpWxWKuhg^;IXT?q?y~P&&CIOgG!U4Ic_%i6Z z;D{BKR*8v5RzVECCg&-Ec!){t!sH$8wnK2uYZr=H>QjIy-SS-z%UP3(& zU;7cgEyO2sakJ4gC!zv2<=|gFbR6-|{Lvtp6+FJ|1GLfR`YHGOE2(&ttbDP)R=-&B zdn*Y&Yf1BR2thV?3`w8EI5W6jFTs5_nA>D~(o4PPV#3<3yd|2#A?pf9k}=>|UuK#5 zXgMvdqG}S{dY@a$Js2CR&?6`MYd_9QjrVvtS;6;L>8Ee&?em-428EM@np_9q&Jp=h zRj6goT%Sw+t;bEQi~C*?t_+2+`ETv!@q^aiP3cfkeU9MJAF|6T)!z)cz0Be}E94xT zQtZPL{1>082iUkfyXdIB{yvwC5lWC1;`6lv_pvO*RuwU$qI+KY-ZQ%$ck{Sp(sYoD znP3g^Gsm*NJNn){5Vn2!tF(d!%rzoUEXZr zjIP9SzKL$tfvLG}_@$lUEb6Dn?f4Wp>lwQH*!1Rf+c#kRu*|k|)2(P`RIB-UXjWjb zfpU=rYNtMhN`$}H()GdNp_WuPNT7ae6h% z!3aFc;$42=M>A6pEbFdPmgp!(V3bm-f==QGR;k&Hp)`HPPuAmlmMadd;<(1>@)5z7 zXf%4i1LwFR=u+`aUf_aNIuRmsVW+UvhOPCJ4%pJp=6Y@QNk_R-nWZJPq^SY07XPzK zrh@;aai;kSZ&s@7kW)OC4MSk}*RzrPqpDRy$5t7X?XfB;8VnKP_o0c3*XNMXYLl^^ zCjXr|GRqf9XB~maf>VG}<9_mlBW2iO^3PI>T&YKBM(#I^T1O3z6ZGhSfJC4dP45lP zXz>B}P{io3H_Sc}_Z#>43B_P^`7sc1Do-SMR~OWiiInZa_I3%{F8u?DwGw2Fd3FJD zosxF`1E51KPy?E`6|LjXvu~W@t-8`^=kjC)BteX+30Cg}suwm2zq_`0_nww}*c{=R z($r)!3=8}LBov?Kn$?8;FwWdRO})2a25uJ%xC1Q!YmsDICYZ2-)>ty}LLKQ-OoYjA zNxMd+?Hy0_BQpE)~vdBsOl7a;w?TIz`B z=6-IO-|{}TTJNih-@-CMwF%s}*${^}56)#6OH_bF77iUOmJh(s6QogRn7iqQwT=fOgg9}N3 zZ(_(V5!=Q3^VzVyAiO}mAkw=UKnw@9?2b&O`@cIyHl(J4fta_Wg&!|Q$xASc)F+e2 zwLBaUtvw<*8y|4TU^hPta%WB-di)>8e!)=jm)jjrpE&*zvo3Z9=DMst?L_dremZ$yBxi7tb7B1#3`eNOx`O>eolv;asljBhiEa} z9UA%P4n`$BCR*)!Q`QcvCg##%YU;6r|8`53acE$3joGgM1Gv%9MD74LG?akM7H@V!--z-HE?bNf?}t;u}P4@_3_ z=W>T}8)cVG@bo)6kMNDv0n;INngKx%ww5gMNzxZ!#Kz1pPBZORtdy`dg%R>gGh*UK z(#7d15a*KouCNW@2IfH?S*7x>_!TH?@nc~$pI0^#t4?zGVh&!ULH)^hCOCCgetk1aa=Jhy$8*)H?guDGs=$uU1 zDc6l}DO4MuIFTDIyBpu^dNuZDEANACyJ@zBcvfsE8t1gwT1$jW+FY`TO)rz!c~?1+ z|MyD^!e-gZxp?)M$1=3dc7wXpKhSSyh3N@a6J!LDT#7^~Fmw$6oR;Lp^-4CF1P}9L zr83|TV3%p#pz{im3knUn^9@p+-{2gu8KusA{|l$@>;Bc)S~!#i34Tn7dXSHEH8Gm2 ziv!H6#r5HEXB4Nk5L|w%6vxIz0sufwF3t-BVtRRd2UG~IOa~IMWmHG?39!Yrx2UT{ zSE4ae_z+JYQJc@=@#cEp4?6aczZt@an?DU!?Fs6v!v_E^%CGXD?;p%~ZaNVG?vk*k z&ptPJ(+dgk>x=SHpH=#)eC%v}n23KnSf%NUX=-8#n>mr~WLh^_$b5i{KBapYM^|(B zVqB=uX;9AO`c&V2NR10%X2DQee_)RXwE2K{yYNi97JJYtp}Lnnk(Nq2DLf1~B~*ly zE-Q3;3A4)n#=@E$&Yh{3aaruHNnQA`X+)TnzN$?TrB^fdKr>WmP1~jHMmg2js?zp2 z@(ERZv%6mMG-@waI2dHtNRJ5oq!9(kiznUxgBP)_hgEn`rU|HtsI$aRs+2k=rB9uJTx0DM@dHxST zJX{NZj(=mp^=@C*pT#!&^1{Sov~)1KwDauaW24xT>09*!$(OiWpLj>YquUV@*qE>VOM}Z}mogpjS%ix1lSJSfkqWa(H)7G6K(UeY z^2JL<$4@E=P1m|9o!itHEWp`V1%;Oy<^%mm(vBYqCp@?&SDp?upVX`qhh8z#g3Odc zqP%W^9Fn;uNlv0eteNS}{FqWW6)LxdUw&d9msKoRi}yf^f;xr1oDLU^HK~?zR~Cms ze#(f;)UMwB+BHn+QpLG0PuD-1jjQ>w7qPD@Gkbr~=^glHxkM%Afa&8)Mmn8QZkc5U z6SFRrPjdS)e*pXXBci=dwgaWg%I@)YZGQl`)BB8EvCF}0q^Q-&czD>pYLRXJ19@#92aQet%cUcmy}g|OH(kn z#^B@#wWXx`!41LTn#2mmzVKK4$zs&IFe7iLP6A7Y+qA}tR`HQqXK`^hg+lEBbNaTNU(@rw##(3K2@=xTg71oYU<|I<;NEiPg&^u`tuIy9)kSKo590fy zI5FP#lYD(uQWSuEdS4g7WD(8u1{Q#%5BQ-(4mkX*D9&7PVsW>W7X^?+F@y=^>ttb( zYh$WIROHl2*nfPxzwfr+;`(V6*BQn2{uQ5l48GTg&`X=Vgs=PySm8hB=KlYL6@vd4 zsPG>kg~m^zPH;}{12r3 z8wDzEuYLa6eE;vBJAy+02!_1RT#nAg000OcFv~3N`h9hH3xS!a*;mv}8nsO0z#^U@ z{y7nUIY#}%q87PF^>!FSb+%`{0>oM-4{2eN<74Xtu`3@C9ZzA=P8Q)Aozx4wfigiPY86}rE? z7Ni> zf!^L{@r@)GMM7=bzh>JO$AU^syj5sdpG2;@wPThv&{sQw;(g>whlW<)I)0pczB!^ zJ_|uP{tgv72q0Yuv z#X}el&N;Qlm5l_JTqZRk70635Wf5N-*q5W!Tw(g=lXsfGhLp{ZHv6i?lGK+C)WSO8 z-s+u^I_VzBm%}nH?RY>S&K4!h6;$#Ef-rdgIDhhMarYP1YIP&gr_aoZlA*}{^;j@&whJTSM>29-yaAdRqL5Bc=R#*hI-l8c7Cy!_dX8gksl=vFpr zi*E`94bwfr-x0C>?yG+N388GF4DnQHS(NJxb2Xy#T4$pWfq5w*0|kvZfrNA=0qUwJ zn7?|SQc^L{plrOzQ7rhjZWo>~*m!tiZ3Kr?QXnRBE>Vag+W@i?*rss86eeWc=7+j! z0x@Q!)gC~~*t;3dnNo02eUKBAMNkFKsK2JXNs!WtdqQ0h%as&#GpQ*YIVpki1g`59 zptitx8PJh{K5zRut?SAQzK2yjuMtwz5fLeQ)kcCsqcD6nuTp{E=_OOSM^E7?0 z*{}6r+1J!PbSM@gU~iT-&m-xo zex!v7I3=bph#$N_xxR0Jwo>ylH@&{4MV&L+axow4-ISo57~z0s)+?^YWmCM809vj- z;stt>KLg4u^xkp=&vEZF2ygO`-dPKSBZ;N6@Sc~B_C+E;FmUZb=iXc$tSJ&nd$f=9 zsb70X3%QpQE1`~fM^S3b>{p8){0-|PpFCrdfn+-+*7hLA>7fnm%}Ss>>?8NPxlHK2 z!M)-xG$KPwH><-MHi+_O9%`PRPrN}S4MQ(g*taBL<5V^9gF8K#AM3@^x?Sp_)ke3vTCP&8gVuk)gFVoHKYDZW0-(&`%n# zg_F)Iy559jtU%I#fiyf+JHrW25}w?BblNb}iEa4uK!TUkbt??S^ROZp^^96l92u~9 z-zn6-N^C-bw2+SBB6l7EGJcu0Qhfl8KDU%g4yvJ5rB#MrXLW{vavQ@u*q)XQLlXB7 zUaO%dChGPUkMj#95TEwnSxcjJfPFnV6a1w0jn%Jx(c9IfW)yC}J@1(g_c17Xe45BnvnVf1-M$=QKznMZrllg9gL9kq}eR%JDaHNW61 z2vYmNQpM{D3l=H#dxbH}xi61LuL&goXPH1E?ZUu>GY%L}GCdANNKqefs3$+_%y3lh zgwk|cm%Y+p2h9Z-A`^EfXjONF847@05v0gMU&Rw}$JC(}T!L9E{OreRv%Yw@q(!1Z zgF6nO7MscL2MM&&Evd?5%`dO|5!o6^@w&XG>Y@^{;peimwjt!?LSSS_#4#D586 zpP{3_V54*0%1jEH6`FYoKTi3;idDJs^r39I+$A7Aw&ZuED5Q3>9%(63RsJ>}dhnA; z_BPawwDc}F@ZYzuetXa@R;~|Y!#|f${_@rSm$&x+E(zuDVF&&*63SmK{$(-*L`46q zB@{t^VbT8}q0DQ=t<_WDnBke&P?>%OR3R9ukia#7a`D$_UiXJgmg8vi5AN>}0*{^o zEhrVt9ts@(Vub4aDIK4fh+KdFUP`!>^jkb@i3&_p=jI3O{L7QCr(;Uu3e6B}2-P;h zHtR&&+dh8W0nP&IV*4sXkv&716`zu^$vcJ}Svkol>i)4F zV%M#-1iq|4;jFM4om6@Um!ie*AFC?4bwYK`*@P+ z!S`%e(&XASFN&N1US(7S{8)=d(tqrS>u zVq|fJHE`e*;=jvN+ssb?6B081K@WdyrG2R?7U_A)T!I?w-yYvgECr%E#qa2$`3cf* z=8A?!qfjp2?rmC(wgf0rjio10VzNFJWI&AGGJLG}i*&4B-0=^e_j-@|K(Nr&h?N3i zJgTu0mqS_k4_;6`0!3{}ZJ+C=0+~mDs3V!2#HH-Bm0_5w-%tl6r2WU7c{8L(;fQJC_(%6fEy6JqDjXt*t}Zxz5Ek*lL~&D!J~o~2zBOV96Kej zE}N!%iEv5cTeAu)#jl(A104h#uFVzlfMR0>LvwY$A5l!&*m(TMshfSTly}atOV+eU zDE&X2+)_dXO0+=Z1STVl#rDi=#;XRAp5c&N+y|VcE(UzWYTVJ+Hk10TX8S8(*CGOAyZE$sesJ8 z^ownCjIX~vlkcrff#5ug#{Z?&E1lF!d@|UsGAil%i^96}RuuTd`NtAzNk4=Ef=%&O zumn?mEJC=%H1RG({wd^7o&~l>Wzq|Nii5;e=4MQ1jh!7r(#=-tvrjOrz>bS=W;ZjKoLb$5O``HPhng zgBaAZw9Mb1yq{P-TYkKaiQmQ?aB}yoeFm(vo|dnmt}5_Gs(2No-ba|&DzvOfyRE5h zPcd4}O2}r2`zhaeXYA~C{5URDS#og(5(UhXJjjv`Eozi$ELT9l%;k~EcYDa{LsqarC*%QJl2-TP*QVybYDoivIxqL(f5Ga>K= zD@6#(@~iS31u4TX&6QzU+RGjyXVCfl+j8E9D+8ablr5+DH8F`7jvo-WKoc`LGIe9EqvT5;Zj`P&ij}j7{)UKvGE8QFNY2xQI9QV3U}mIj)`BJT&A0c z9V(>8uc4^%Wzxn^nr=l(Fl=dYe?i@zV)m6oC!EPjNMXmmF!#jqA;{Q+u^4zpz8Ca? zh}tcR9$3QHb197IiR^YfI!BqO=$(+4uLge$%hr6P9*GK9wDW?r`XeF5#UjA8`c^sa z#SA?ywM#)##z@-b604cx0CKNSZ)=L%UDg zPdH1wAC+WY%uk}k;~B?^pq^-P+Aooy0f{y@#CQlf4xLkc161$M7XOmEB(?sM6uRM+ ztauiw=bX54GHZs!pmW=GkW06Xw%F zz}28oJ$SU8J+dEq!CvxAEHXT)E(w1^I?G`O3eKC?m9S z4fYE=WC1Nx#ZJoLOqeM8_#}2cQdWHq#3-~Vi+uLL0Mx*Gb?{`HEg`%)0}^X1b;#i+ zksZ;C)STDkdr`JjB(I5XqEUeG|L(l2ZevVN~6tFvbZHs(lE5VLUdZ?p`B7Z#efgRD0fG%%}AY59nKQOv|FA%=d zK&H5v>1a~!JjNf#JY)+N;)R@Itx*eKKDR4n=&zh-OBRC;K?5TcdwG1Ecz%kzDqTc< zpS0KE`xE*L$!bdu({)5dEoWPHbg+k^8 z@)+X3;FbwFSM2Q6RqhwDAdO7+FH!8&#G$-CYQ{oLP@}zKoVqJQwA>KC9*8Nw z5Ja@vZGfWQ{gCk)h{2b&%JAf@mXsC#f!oo*12g6rbr|5KlmZgk!}7^&jqK*U?P2V? z)6Q6UbQzyI)c@SkfMhr(J`HNfTyJ=ua_f`}u@)`njg@xp~e0>@F z`9%d3G~n?8QJ%P5idzF!<}N@UXE6rpH9%gwhm_{5K2bu&59WvzH`#5Vj(RW_uKL5+ zL|@k8qgaQnqD66ZX!UC1R?9Mx=lE71U zBL$d{-8j8fwxpS#*i)|kWZ58>C&>Y8lvUnwhh;+wsgSuOWr%p!edol7EqZ1G58iX8 z$7`!hWD=(otRDez*6Qf4b9b&78m4x#17y6+P755KtRk}vbQmOTI2ZdY*9`FMl!ONvp{Z@3MwNgLO~O+4%q zuJ|JY;zIwGXKlEFYhSR`m6L^fcfh(>I|{M_`rePbZ^7t={-~2_@Hti0dt@2H(O(Z)|P8 zpW3W1c<(Mv&A*h2ua}+$)nXhPXoA_q`jXZ_y2wOz=zqn-RU=$pf5Z?tcu9WC^g*4W zjNK%5`$iXE^zWm1DHYPi6}3S(NR-%S5^aIeer+o$?*nq?GvJImdPpf6Oz`S1#TUhE zoc_O6QnK(I;Yf2BJh%cS#?DA(!#@eMY(}7K@6NG7+w*08LWwrM?*_kxi#eCSsuM}u zF2?xvEv|}vOtpZK)xGAbPxa|9LA^B{ACWY}%GpP0t5MRpX@&=9l;B>9fXCo?vMAt2&9N4V@(!>O@%?ym zt62YQdTQ}gdnk*W9FJj@0u6%VIlEHsd&>N&AqP=tm-be6B+La|I2b7;UdN+UhhaMG zhW9-O4x%^G%u8Mw>v(>i{T1)nTvgCZo;^=hFEJ}Y+jU_&k;cSXQ20vHlzHs4(dzH5 zkPL;bj`FcP!E5XVOO0>|eWto>Rt70odY&y^o3FM%yZVFc&u+|z;iw^@X4TBqujGyG z)#2`3GNx!X3hs#DAOiFZSea|mS{qfpSTB$dx&BAFx zWu2ICyY7s|_c-EtS5kIliLWnS{rIfhz+#bKmS})l<;a7gSK>)Oy|2IdYM{y>^~`1v zK5G&wsUh#E5r6wV2llt$V=I0RaYfXoq#8X+D?bNWH-HD~gyEpS?+q7br7k3vj?J@ zQ%*+7mr;J!pa?q0hI0>erS&|V5kCcMWqfc(KP2jOSL(MOuK2;4SI=att7zA(BZQkq zPUNuO@BYpGygEt5RnrJWSSne=AdkJ_HIG)^_!$^pGuRzU8;JdYVGGz*BPpl1rN;wi zSzj^81-P51mj|EgWujJ1BT{#pp4hB@vEWHTdzU=SQ&Oy8=(Bn|8J8!AMjdq*#(PCC~|}=6{7X0%Urr%_dXkV zoU@7GQ#`!mQP%^v8JL^+H|0%UV+Ry5Dup6{RBwVC;2QpnXF zfFzR<%Cm>{7Q7%$v*oHNRV=YVS-<_lo~X?P95d6)SC4@S35Y;E+m(CnC#kB~i!oHw zc_w1Up3r`OF1c3N2Jx72bCo;tSAwOy%b=5&uKWAGgYxJw@_hmM&-6L3vQfde&q7+3@$ZRNV) zK&75VmQ_P|=M?MeE7_hybT?mGE%*@K$OGS*mPs6}<`85Al2s*a`@2WnbMaA@lS<)- zv2OYMnqMme)s!cc`ILkq`tFUgg)N{^Ju3K~1Tfz?KNMd2OP0M;u#ST)KkN4rZ6heu zCbU3ZlqRNiWvYDyhKBp)%NwP9b9_WJR-^}&v(<0f z?20T!Bb>`;=?}9Tvzs)OGtH|wy6&=nGO?1q(kz4?WIkiIDB4VTjgv@FfC&#zLE0wH zUGkwXIS||I9uF3Qx;U=f?eEnuOX1^t+*heih-E-_KG)2JBFzPSaPW`{Y&bldSC2vS z3k*I@AKV?DJ)ou8eza2VJ~ce+WST;EmqwB1S-BeUhhQ^xzh5R1z2>rAE@i8fwGrkm z2p-Y_?>pT3fdm&>bzgA^8blj1z~@Q8EBmb=i^2maoYL7^4}Aa9THp|TiQHC6levJi zUoDB~4N$SFoPEq!$5wDsQ6BgFiSAf)-j7oEi%|E2hLa6UeN?y7%)bTD zd;yXbd~i}K9DvU%T21uFu5v^|;F8bu=qeMosldhB;x6XA?~Np)+}rXas z130#0E;|CxR(>nqf9fZK=B(vHzNeqL>z6YNu<3b8)$Gl=CyU^=*S;FKb>{T@{J@m4 z2P~&Fk1_+>N%zG}vN}Ir2=+Wf}KeK z5U#xO2<-2m3r6er5zX}dx)4qi(@>4otPviP)a85iii{>(TIDG`hw|0oS+tBj1TJI( z>bmbWZ1DYvr+>y11mf_(A|RV!gy%FoW^;~U9xlBflAk(y!Y6q@QEt(+azQ!lWqEeD zHi1SmnmyDN`-7NoZ$h1O=)ifDD%qM&k=5Zw&XG3HRR*(Sx*ITVS=SgB^25pl+4ff6 zM~des)>yHGqdYL`JJqUrh>zHrR(-{3wx))~O&GcT~=G;nW zVq}4eeYJ-UZq!&j314D;?Hn=n+4B*2p4dVgj4UHPj2$ZyPJ=u=;y~m^oxEtV0K3s? zL`^4zu!?=Iogq#p8sXxFuVlr1=<(tdq&dc^8R-!hp|BkG{`1I5;wS6aUf&Is&yYNO z&r|-ezCqPODBMUu#p%rxcwq4QZ8|}Q+|xiSL&x@_XHI>xjYl`C1C(6W4XV*M3{Evy!Y2|q4HpTgD0Gj`osPbGNS%ol&M=~`M_i9cg; zPP|3(T}~dQDOSPHu=#gb8D<>O{y0xvQzYZ%t(K@5fPKG0%J^uC9j#{$w)j@|T%fP- z!yFK-aG4vSYgZEYSK$o)XA90ba@{T^Ya%omPr}*3l-mWdD*Se@`@g1>(ySqyA&2xL zaOo~q>O%c^H#YwR>d5)Zh?&S3hlJ;RXz!-_#T~W@cHY-wEH9C^=iQqV_F$x;`CnfT5w_a889*6uifskCnAENWI3WUGADo4f4`2<4N>kFqcE zq)L1AJ+DHPdY#j^2)&+MDPadb$^D@kKH*lqO7K#6>(53~C#PZzylp(Ni#v<;uI4&c zd^Ub+IJZ+n#d$rkw_7#l<@ZK;Wut|v?7{J^hbw2XnRbo2248~vnovIEfpPS_ZeA>3 zkYyEasgt@>*Bl}}hp~v&JJl}s`AYSf?q{!WRRcdE17EE1m|(yknbfHovwo%!T+nhi zG|-pkj2txl;P1JBZedsG+T^=eeRz9b`Tef!Lx26Vb3)Q5nYpTTg3)(Iyy=bbR|IQu zo(KEOf|mo4)@W!Uh$&uu`Hx#b^Zi#Nf0amrhoFVbLznMh#OPk&sev1ktM9&A70YST zpYW4d&)WECnyR*dhK;-Be=FihLuSHN|F?(HKTP7WT)+OgI{lAPm;e8QZ4>%?nC<_> zY31Kq{L5B>XW;*8ZCU^<@E_q+)5eu3k;m9(yfT+R=&1YDj)xz-c!Ab@{vhAyy$Xxx zP8FCw$8l@emh~e^MbjJiD}q83%Q2ypfZ5%xx%T~k{{&t`1cw*>f6+)#4A;MQy?!;P zxf)$>{kws~AwzW#vEW%fM&_9jMHOgPl;v>l@-@E#raGon&+>cu;wRjA8f%lGK4O7s z#%}vlTN}g2c+U)RKZo7tpBr@UY{o+Mp3bTfWKH8^Y`yxNQsZuJZ}K@{$jRz_oL%9S z1zmUj&PB$e`CQ}TiE@k3&qa7k_2P;2T>PKVk2ncuU!rDuw#Xz1tM&cAF`iIyq=|Io zJe-Vn)YZ;(c8IDLlk#Rv;e+W^zi|{#+V`wC9}sxJESD^ zWsnmrv_QW^Ygmg1k|ueY=`xi&boU9?b71M4%QEXGG?+*9xcHCpCVI{Z*>OE{Sbe2Y z&ogKDOrratibt)OVBG(10B(3#blSGHLMY=8f8v+kedoMVQfHDxg{fh8Z$eUJR z!`4`E(sJN{E})G3gE|XoLjpt$_PJ74`ZM>x8q8$b)mP3*&mnO>uE`0BY5_n@)7k@} zDi>%^w%#Yd)_O`A+_|1iFLz&X)R)dV)q4qRQ0&WV==PmcWbh0)oIY)CETE*?3*d7? zR?U(!iz2f)c3LfrsrD^NeqBpn`8o3AbiK}o z!$Lo!Y+q(fS|TS~gSySr16?gpuUqHC>hef!&cpS{o7 z=bY`ub@{^kKJ%F|#y#$FkNG}RBUI0{Z&@iT(m4S`G|6iq!rrIm(>;Ba{Sy}>3tnSO zo~mqwpT5U36(`peWIK2tf;3=SBS?fL(`bg{p)<$sDn1+x*F3pYsz|a>m^7rOHON5~ zD47XA8|2ZspUxlCY1rAWjJog=nv6-N&xh1^)=E&m7CpZxS5r@(RbDhUa)jE_QI)u5 zoU3=h$*DNd2{mk>5xQqpdJJ^jH??6fC1EeWmYANTqwTElXgcp#&#)LOH+YawOYyay zz)(7(h>q;xT+JLMKnb*s$9l9ao~U$T)U}lq{9v|{BCzs1Dd%;yYKf%o3+X@W3#c=2 zJGag>Eh_KYF}ZlZ_x+8tV}hN}g1UZ{`ow-=*@o;*$L`wRpsCxmct!Q{2bvTBIqI`_ zn8Qy_cmLf`@#~0!|1!q@f26!J{kOM4|GMJ8JPa0gmjCIUw{)!kc3;c1*)T;b8YJo&W<~Ix2LfKwqd#_dwQV^-!A|=k$^o9vfKXM zhmZ*uQG=D#m&8`uZ)~Csc)8p3dlQ2TT*#Qy(`1{aCk-o#(oY_X_5Somsg?hTDV?tx{;60`n7+k5}`Zq{HEBVfdk$ z_&1@wP4>sd!6`zX?-)>X)`B_>TXDp_1SK2s%8pQK-2B(#E6UU0G`a+nirEw{VWrKwa4oVKouY7eQbmK6i6S|n2uyAYI_%)H?cbsxDoNwOuHQ``1 zIjx@7C`+`aT={9R?3_}Te$X@N-{h^+2y@Y|q=&={{V6Y%+PaebkzMTPI)08X49;8_ zvq;w~6{*x-(%gRLy~ED~C`x9q_Ma)CVKm$NCqtE($b)w2hU_)P1JQIjuDslQ80NM_ zHj8G~xme)l4zx}X6rw{~*Q2PMtLxjHbPaVDxGP`UJJ_29^OmHj4l=acYO$y*1x{B4 z<8}7hoA`X;EIFc!&b8B`ob4xCTo*P;Wh$}b2;BXGUlKkXb>^%jscTQ=CVboO%auf@ zmy-bL%h%SAJogwY*wCrPDPCzmlPlk`+Y0gJhZ}bl{h5^2UZWNT%u3Y`yQybXh6*1_ zMRu`Un9fY#gHH0?6C5Z>LQDkbR`<|YOmrehlhAjIqxO1tZ3;>?sRQ{FXKaRMDHWP4 z@^yCo_b_)YI*w%}r!V7^FvNR%dvD?kwgT3eWfANIB`i>pvn}gB!zoEl4!oOhg~dTF zmaOnx!!KjqHO1;O8fC>tpjZ36LOMQ4t5iOqHDgk!)oRhD*KWsoU2PIAu2y0gN#h~I zLdR(QBWUPYx)x8w6-H&tTD`Sepc8>o1twHw4pbuqmek9>9M3Bw`l_%5QI&czxxaH! zX%Ta6%t!0j6(`D1Vb!k;{YrKNKiQ`}6iA|Kp{_Ku->oouj_*GxbDwC-AXY%^JskTj zrYEnBhLBrhO73mG2-a3=e0ZB{*Z7b+!bel@;yC-QbK}rwU3CO{wljV%r3IW?8>I&m zsl|K3(-x(@80vfVEp{)p+m7;o^qo6Y#@JY}^*P^+I_Iz|3Cp_}pTinwf3%}g87r4& zi)0>q^Ic;Sa|ySxLt%~EAqwfi(XmdTUj3x_@b4q^|HdyzF#Wf`9P#Ul|1v@|GP3>; zBQzs3I4N${PJjp@O@uKM^~&OT2(0kxYg~_Sfu+3FEL##}hLFO&R6;(2+$-b+ z+Wg+jEPc@tQg61t-p3kEeSNdP6l^XVfehuxGBA{S4o%H7G+UMnrwU)3ouq+hs1Mic zu}F3r0=|m&xD?W8PJd`2+Vk`$r72P2X(rUn~DK|hKmIC{8D@5dV%-lF1 z_Gl_aX31mu$37jIi+NfjD6q_~BtPSrO`dJaQqjOz`W%d#$&pc>p)%&bD~RyPQJH>D zsV}m#o!6R5fN_)FdZmSGk&7pdon)XT+m#h9On#@IvoRvi%7mO*-a42^uCXd3$fPED zCK_Lu4~ZSZ;(WQG0g z%(CvH%tYFb5L7}uj;b@$Ue4}_h$7ym8E$8~J?_C=8~Hu_{p`a8iI390@0>aR_ig!q z<2G8R|MoW8UswE>ZJCwse|i@!Jw5%uHRfr_@C=sc5E?Sd#R$T~GB#zO6E#AZBy_`c zL!O54QUn%joUY%BYF9ay)|Fs#`55=E3X8wwBiMr5P&*N&wR(5y{r8_Gl>0_|3uoy4 zT=`fkEV~fft7i_W-z-_?kvr$STn|iGEmFS~d1SwPJd}d0hJEPKwTFCj1c|C)+JfR{ z_WfQR);tC2j@FIkQr&?$FWy^If%I*M9v zC@1jTkvq-DEqpVdGJTKJTxNNOdv#3QY4lOCko`_nUz=^)mT9@$!cUOJqo%kMCgk`Q zGb#AHz!9DUVQlYV@WqnH8(D2EOR>(!1V=5G_C6nWTUeKyEl{kwL{AM25Hp6%n)Qmf z&dqN0MRD4eAQ7rHt%I|*l;ApcIGUVGJboqdR%7~&XUVn$O6O0P_xQ9d z6Ieon1_u7EkX}>nP(I&%qy#WI;^-y?*z#+e9gSvWwY(L{UIpz7+BLK?CUG4$aU7;= z$GpLU3PuRJc=isR^=Ahi&rJ!O_DFZIjp%Y1l0SN4NmKLS`B}M zAiUs)5dAhOO{Ll_IPIElE(Hy7)D6J8L$!dkl+Mg&6-6NdSELYea(ts=kvMm#*SZ&G|9JhX&oidB z`Jjb!YR)2ZX8nq8Edy5KFAewGB~~VzTU8;hrZyM>h7S{eHGUC&`%D1J4=V14AK!pg!%<^?131eZZSk zZH9!#B5AtldkxZ9o=@I$$^jlZDqnH@BMe`L8s=rmD&EM0OzgHx98<0ww^5gC+^P-u zL`1z_BERrXD_;uwpjg~&xKNv7l%Wd^iE@&Rn06IyZ+*4PNwwqVDr=wJ&xo<%XN~)B zdF>%C`!v95l6#=fPl{+q*z-u}7>#nbck&YmxUwJukj7AYb@qJ$A#Rc>S*+f-QQ zwYxta?@^~XyLuB#ji35E!!~Udm_|#!nUcsro?5@w{zOzlZ}DOW!Ke5_3h|@kF4-v{x3*{t*b zZ+7zlpv&=F!Jp#Lo{ z3NaDT|2||-h?Rip_o;S5pow4S@cqAXbRN_1F8t3No%ajWbaOwqPm~+0_if_Q;`LrMQ52;*>{1^}s15|*lP&oj?He%Fe5zac zuoH=Lk#cN&Y(I+RPAu{iB8IW2#>`GFeqli9!pn^5Nm4`o(gAk??Rm$^hCc1Z^;yTp zfbP-J?#=l=t^S7k0gL{@PR{G!* zp3l~FSxvF*wx%9%;^u63yil_?rb=ayS#D475*Tw+BcC_4My_Hi)>zxZI(P4Bzn(WI z>_RQ3T*STHhwO@(=O@|YE?XFI&?{G4JNvQu`u3CP#P%fJv?^yavyQErk?yowIpV-j zm15OgQAgg~c1qyOu$H@0cb;^$;P*Vv{0Op&e8~CDhH|-`P0y6KNbRom&6P&v2R{4c z7?^~Hpb=h0>o<$dEM!Cgcxoo$(O(jAab-kw;8 zHM@n}wGC8Xh~Xn*R#k1*AI&f1GR?N#l#hy9_t8TSJEWZIxLu#=$>u@sQle7}+co`^ zXlO8-BL;6F2RZo0rs_+_C6Q?GNKsdLhrPKvx_;P`pXYW>O${M1Bg;~{BrO!SnMT}% znMkP`KbUi&KN2?cl~#o1xz=Xfe5s;YhIl;7N0!89l{RT9|T z-`}*pD%OWZ4WrEUT%$Tgh*l$Ng?}GWOD^poY+6v_F{U7l1^gW|K@^vpL(4m)#@wS! zLpR2wy<2~a$5Uyq&K=PpHLfLenJh0%VSD{PBiSs9=Z~Hq+ucRY;iFxj>%G4RXu)YvY%y6 ztIqW`{<5!Krp1ZFk%co%SzTQFGvSv(89bbiTJRc~X%*}2j{RQX4iA=6s(o7Y_+$~S z-W4QC;4i~Jq4(+&kz#rWCKKv2ctnI%lp;?9j|7q<-JtHJevvKNic<6wE3B>E@oc&#<>lW zkuouz8^#*bnBp1u9wxQKoKA?MhjR{`o$QOL<4gAGCk@78ID$cx&M~Vu*&RmKM=!Vx z_4(4r^Uk6=L>rwHWiK5HAVbfc+Qy_Ypr z*pPlL6s^5P%X`uoU;Bk#=_Pc$4pZZEf{F;tt~hf2R&lggb&svICGF8q(Ag}J-GwTw@wET|XT;V@KW z=CB(6Od6RlG9mJEpCB;1ouLK$oN3A6&VT7=33odgT`=F+W`X%cihC^*FT^8UGn$f zM6k|l_nuDS6;_xMmQlFcU$svx601EecKY%b$;&!ULEx!HwREnFg|cHqhVVcxV@sS) z!ITs(3?+ubZV`vn#e42^q;~I#pNc-aw>BFnKN!OJL*FzMv(fc5v z1REe5bSy0(Y4FvH^g7|wiE!Wq;#deq(kV6CD6fPcU%K2q5urse zymvpPV|0&kfBN`+$riR+PcG!Q5Xz475q|P4n`?f^9`olRG2I#MMB)So*)K!i2u*iq z%UM~-{6M~@tW)9jO0Z>TW`9Yf6i-dFzoo7=eO(0DnO*r-QN`1bWrsyu)IP9?q>HfqU zfzV^Lc(u0FIOd@JV*@KbMq?~XWGO*oqLV(K?3l~<#*qmlCg2B>r!9e%5SuImqOi?WrHC))1k+oQ zH{mp-kD1iu9dwVMM{Tm%mawNDt&p|kzMoU3QR8xe9@!=oWjtrxnOT(H+JyD$NA^O@ ztIxL7XuGlOx_$AIfM!Vu&$L8DMtg(iIeXW{boYdg`cVZ7ijb-Fkfe-%hz!aRwGX$khi{m*qdx1^ZioswPG@W9SJb)Csr;<}fHS`2 z^=_}wQd{%+Vayh9>^HWgVZzW0h2_Lg+;NSL@p5nA;Sz?EX3kXVH0d!ui~I25O2H?g z`DNhOHdhlGc2^M_b|1`qC0LTpB;*+Yqlu?!Ox$@U5Mv#|w8~rH5j|j#J0|gttLOF0 z9O=>S7N&bw?aI3N|PWwYy2UP)g# zaI=VqIo-{av#M&j=`aLXD zY*i*cLT+w`x)f{U_DuseCK*=S)67qVXcrq2tK5Smq0kbq^akD2hC&a|vBk^8n*;DF z;TwfyG(GsBQ})x*;MZhY#QM_tvaC}yBKTm;(!+NGK7ZgU^3h7wiA6>0iWSsKl^RKl zb);_dLB(+?W~wiNbtyckXb9!*DwX*5RcT6Z;6Kt}-<9s4plbX|{tk>OT)w9Pf~YC7UpD@HHaU^+ z*U{|iufuob*az41q1b-3R3jyKAI(J8LwS|I3>VfxDJPDZ&A03abD_!|%D!KwD)y75 zXE5p%P)3*ZsJVfW>9d^m7!*+*rAl501g6E?S{9~^N|7RG3o$(&n~(Yt*KR)B-MKsX zo2QR;GNgGDzLuK*_}m4vH>|o8tv3#`u^!)pmRl=K?WqNE5A?itgh(^qdj`lM3o9dz zI>F|tYg=rWRcP(Qj#moxFk&uGT(D&v)>}51vN@mhWqs>ld$zP&=}wlC!Lb!e7Yv%H>s7sHU55$+TZb8>U;jYf+}ckSVYBNIo;~JEe{YI{w}x8M6P5 zsqP)le2P^Si?D0QBbzvRzUO9{h?(oFWAHY2NlZ#v(W2I3*$__&wHI!Qjs?pm*dd$TgM7#!?;cRT9k#R56@dBhPEd{6;1VgKRI#F6{-sRy&KjZXTzgS zk#M-rU8G^|Y~OSqg?}IaW-6&azK;abW@8e1#FV#MM=f8zYBnmupyL^hjo75i%6Vjp zy@Me)#FLbr<@`2mO)5UWKa9ul3Hs?PY|0RPeJrydy@{(i<&NJ*>MD!7ZWC8!yp3}l z-57C@2hyaZTjQ)}0;-IucJ0m)h2}L?wy|Bw99Ul6+|5Wp&!c{vCc!q0dww7`iq&}0 z{b=c<`7U_43|F zx?u^cekoYifb1dW$#E4IM<(&fUS!3Y=?JX=bum3jm!;9zu-S`owBxomhMM*bOkrPq zyiBIUA3YO(hns@4OqY=@xFHc8PTkK?i1N2^Lx`M~CqKW!pVZ^mu@Km-PaAt0%um|G z=HzjS&l}v#hXW zz5|NH5yx!f+ybBX$DSSvjl4?}OIIO`|BalkWkfBC4oRt8p~L{!y~`_Y2%PMrP2D5cmw1N&HM!G znZu{tRmvL4_0SGZbPgqTGb`oKClTLaK(j>f(i$XubAuMJDg0E1#A?R*0m2Ll3+^*c z;E+)vaL8i48o{b5ef__ z{H7b~hnZle&`MgOHbf=mwJHc1LAZwh+NfSzJN}CL(H%2g&lpLXsNM%1i|jpZ<-He9 zY+=%z&!R8UUtRQNQTaoeh-*PQOL*l#ommDT$v{VN3lkYz|2T_%;w1{7@=jg$r@UTI zv&`FWNds^0C*;CIJ>%ee%e4`YlfRKhww9oM$Ye`x%()%v$698w9i!MQrok}{2@yOlIoh8R z3y4BTYuI$0{9}`k7W#SQ%|G2I%&w`^!eYqJT~MdcrP!9{UiPhLv7nJ z-KQrsbG2m4UU=w5uC1Ajat0DM`^b^~sS1cN*$lj1j0%ZfabMATHupQ(6J-}n^#YPR znb;riR6^VLfP;{O(XQsuynUUgjjdVU81}PUcu5Vu^~?&XH16+R-rUzC4&8t4P9qmE zFv~ExAKyYYVYgCUEcxv6vC~vdw-y3Z?7V}~%SZ4`4r+|Y$AUs|u2hU7C(~~YU}yLH zit27L?CnWwdJITIzP`wdi;H05leRD$bR^A+}G zWv|pz;V{HzW3CQUZ8y$i;Qafcq-@FwQzqqj{(Ma4EKa@k&w2f0b`eo$x{ zSrrqPh1_}nXpizhesRq}_vW!4#T0Qy^-4AQN9J|hHcg)6c^f|Z&j%759o4Cy?A8|T z6o`EGWCe#et@y%Bl5yrj9da~@ePEf@s)DN&vdZSH>kw0&q;hV<_wCcXp*?UC{PFZc0@&u?pRW%EEVt(FngIpM^>eH zYT#Sk^U2^z30;jMTE!5<#7DcA-=b3(gLzRTSNG9(w)$5hlb9`QH;&oL)@3Dk%U>9U zC$PNFe`#H8*kA8IlsIub>}Xvg)8GDLn@)R0-ipmq%UtD*adBMPKHw|Vb_j7v&|Xe> z-!xZtPsK9waK!Pv{CZ9}<@gK7f~bCxiC0gso>{yx&0r_K?Irv|%z;K3t3$AuRg5uEKc34bi1>iFYzHm3OMh2lRJbZNuyK7 zYD||4sh+tf1Xvk!npIB>lPj(^aT!#Gt%$Zm@7RYXozL9TGP^+y|NFA^zifJa5R7T% zY_)70Ep%z+t!#CFZH1N6G}WaQVx{HNwATIgiMLjUnkH0y<|aC{f@a$0I)-NYw2Fpi zZ_TU?|N8ymg95tN+E#`ZHs)3Y%zwzuhE~=#{05p<;K7Zw5}JR!rU&2UR5aAFF|a0J zr~f5YKNOz-ly!ey`lqb>t3&_X_AiKv2prd_j zt^II(H9IIUK6LKkH8lf09WB46g@~@9zJUz^D+3$tTRZ(<-63FNWv7+Ybol)X0}FWT z;ns?Oe3FiiR_Twc7?|n6*IqRrW`cl`kyg$|*Hi&q{p;g=eC7@+1k~W_U-u$l0MEL7 zxQ!~oKaKKVp04?8s{dLHup)GSTLC_P0YO2^zQO*re=LEh4j7N2jU%<>^Y>wO+K~&+_KNq5_hd7PNo%lvY3y6e7Spf;Z(Ht--8`n(3JnF#p~w@zBcO zP3WN%E=#Kj`u?j<@lSpK`-3FkS?TCnft7gu=WWOdXk~Tv4Z(v!9bdl%wE|u62RT~{ z3lm+_2MeJ4r`|HItqndtv!ZVzw$Wp2!1CjK%vFfadP zZcP7yxjnS^+unc;KJ@hudjr-6-ugAY1mG^P$#a3G+g9| zI5Bah2)3ty7I|ZOE{SJ)z$k5Q1)t3OYi0CciY^S#>2Gj+%#p8=1jjLqiNzE|1u$mp zT@P08oQ4v?>7Q{49A@?SZfrfa`ujyi&`j%<~m9ShSC21T`m~8Y^i~vA-7M1Wbcw~wnhbs!q_-C ziqsl@9yHx6SXJca=1NIPF_pOB#YuFQ3#qH~ z5D}%%CJrTYot&R%-Q%%a5wD4^T?cDwYQA~%#sq_0M?8jR?U;rH3=We_DiQb`7K@3J zjm>EkrDA6=PS)(Svb}e&ORa)*JcxR8fj5@82`)^YksUN77-(XMX)!Y>m(3TCdsWo0XLnL!-K4 zH2?<(hm4FIh)G)*aRv+FZjT=vl_i;gfsbFvW_fkIhU)+ILzy0!Pwgz}sgJ6vxyFl& zi#E?_rs}OXq&PV0Vq>xDt)D?YY5mLf5YIg)6VqwL zJ8rP%Ln9f&2nYyE4wl$61Ib(}L}9P-GnX>OV}wKT;hZ@jAeNIDO=p?lhkcQ7V%6Uz zy%7}5K>VPhf`g6C(A9(U;sv#Gc}{ux=~^nf>lXC+ltZkLCIj3wW`ebeoW z?r-1SH324~tSt75E#7TBN5;1L90KAHIWRDAY-;L$J;A)UuP=`Lv~9V?D{htkx$)Y@ zhA>(JtNGpOmK<1I*IOq%yrj2Yuq9K7z@#v-Jtbr5()j(51B3_VEPYX4N>ywxHq@8sVQP`TEh7Y9Yh=K8=BjCy){wq`4KV(GPGhddix(3yn{ z3~~w!3kwQNKYqmJ;0bPxZSvuAyG!gl6BZJ}e(_=;iK9wt5+AI|d#3StW@Cko!K9fC zHW4eU<8;BmfWSa)ZS6HHc9@;R?`^yH3~<-WUMSN)$g4hG+hJGiE!4%_S3CyRj}?_^ zIF{8F`ci+1PeMc__Koeggan+4g3{8_si_#xOg3N8VQi!UyS>?t8>jobTge2L+mj(4 zT6LtQ^o$I*+p{T8&qwQS8HlmKG~z)@IavpZel zc(M*azLD^^$s4c+1_to(@E#*# z(HV{BlxTOUHMy$JB_O$1!H}5zJl*m`dAV3^x!UfJwlF`xySpnPDS38wMuIBp1&b6- ztKRq+!n@S*M9OlT9*@qAPBm-xtYjQEK;u6ZuWoz`{rtDY6AS$cIT>4;Gi@blIbv< z@3=e^;g(giZfyO$Az#ae(?K}Q5okgLe4&GQ_O=z`IiV&5ktcYEuN6W78V*X@+Z*!p z6I9sLCvZ?tpAjSSK0}2iAQHiHCjzepz(s=K_2>Ux4Umf}fzWSeW~QaJ0+zw`k$WvB zHg^1%FJB@e^UcFicQ`P2+WIX!SKPoEfBaIsh#CEa-X<2#s z*C|yHjaW=)pPys9x!t?FyH909sk`1?>CgV;a=lSfnbVOLukc1kN5^|((>*dGb1t?s zSpZCh3zGLW9*3Qcl@$XEi(Wd5-R?9RnbgOdsc;f;01LLyw)+A8WW7s~sykAir-HH% zfa~k;KRr3gmETlWpzn;Jkb} zbVIu+l5dQ|YL-Z+=~+4Ts9Fo{{O0Q99ru;@`A=M2TmvT6F_j|-g4nU_cXc&2BYEL> zk`fXw{@xQ@v(}sQH75Xf%NvNA;Ueg;jjk>)>53wOks3K?LM-3w>gzLJM*|pom%=UB zx-GA(n^{-Ku`u!B!-rWl%w=y>3}BR2YhtRZ3%~#u>+DhLUP72h_4oJ7WC+Q0Y%VP? zYY^w}b2^{rf4V*g%mi5D?+e#AHuSZ$w6wL+@bH3NA?tm@!^0Qd?myLh+~3&=^qxop zA%?|lUWqgUkK09QZs$>=bZe}3itFX~$2YeK%X{)5I?S0j(RaNj(zNyK&CJfu&d4a! zY=bo|La;c#JkoZOQBqOK&dfA)R!!y3@vfCoQaI^H7*jP3Ix4F`+iAhOutPukc#`T@x2`r) z#EHYZyG2Zko_xk9G1;H5>DQ|SkpV#5EcXcCC+oxIx7ymPDBPD2Zk2@`ZZ}6==1sR* zdle9cv7w33(9j0Xg1o2G-f;;DJDZz9SoB1cln5El_wIr{H!RFmy?hrP1*fO_@n6|scIA2;2HtFzsSR+y4!l8})2LgzvFd+=ZA z76~<5`G5C?K(n5|)!Wb89|0BC4zVUt~=*tgLA5ExHu^ zG1XvrdE}a{m#1UzDx6O$9{n{msXDmpA-B7Xg@hvXe+-0~go>D$IFkmjb_6&m8D3xr zU_|A%Y+b6wLZbt@&=4%^xuY|80bAhAg-={--g2T^}1=+?fv`rcs#C& zomvGdRd*XHZjn^~G>)WNxD1gIJTpVX7wG6`oi8XTDaj<`iNi!dY)I3o5s7`kZ@%9X zJT5tXvM~hwYKwcQzdwKL4L={>SJ|!6O!26HX|!)}kcE-)wMG|q8k&&X zv;H_nn+it#LHW{;#1eDHkRJ&jye`Oon>4?;co@*^jt&wouB0R^3=F%iQIhki)Kr36 z-}iY6&`t9UQ4JR*aLVbh~%83(#t%prCL%+s-U1as!A(@-LH;#OYWH za>vTbN_`*CZ_SRv5dDL00R>W!mWJ?T5FCR>g)w7!IS4pJyUL_xlH-xEQ0 z*+@t8g-$Xjif&e`y$ggP9yOYn9l&w7w?~^m3`9ai{95q1i-hR6jmEneTT4qz11bgh zv8|1b!K#LV0h_^aDj)_cDhW~itxPRkn&mas7T-N1BG3kQH#gZdnjzHH)j|9PlnFkr zs>&X$Zp@zzR){M}Ne#xRyOKxr1O*3QpKh(LuY;tt>U?i*494*KDK@sUj7*x#FE8ZF z2hn4DB5#~_wkaOe6l7&lPZFtUXc`@kv_Wi?v|OA<$AGT4^BqX)6;wQ?AfWtAI|lZG6XI|e+z`DTyZ-i^nA$$SjAs!EM21Qj4nZ3QeU;lRghyKkKYeEh14{gNj<$U{QG*@X_rZ<4k?ULj2 z=PK92QBqMcfdujTqve|Ag0di?i>fU*>oQ4EkkJag2@xqgB`b5;$ZWF@v3NCyD>hdBdY>L^Gk zf#|>584OZ2aMvhWaCl(jLs;zij+^wxHeFm$K%iJ|^Sj1Ua2j<#z;P)!1Y~4|-!Mw3 zfcuMKn=RDJbX1xz4Z2E)iDH=w9iN;$M#2VQjzOiAdaNDvN9dwP#Q;>ZsA#Fq-u&E5 ze`Jz?lk+2KM1}Db4I$y%o?kJ@N6GU3<8&OOJ_v4`Gu1#q0-Pu2o;1i;wapJD+tqe& zmYJFP{Tgc6FQQSWObh_r;&8czDHL!yF){e-l6c^PKz12H$HvCSXS3k_4SAs9cUXJU zBV+xeqq2&MRe;9>y1x%>21HWjDl^I3Y)#0kSI9 zSgnD$42z7LlbtPmo34pnHkJqd5FVaVRt$!T)V;Sccf0)VcR&uD(<3ECosaKPjBA5H zt2++>7o$%h?Wd=wS0@{+M&q9s7(_BDET{Y5myh5$v z{~b9GKRqxxrvDtoI=D0^CnpEoq5K6rz2Okyejyw9V{=km+|1d|R2)aK9bCqv#Tskj z0zcFTME?we{z@i;CW!H4S(3)c+iXs!ubok*Xf!L_f0-ye07}_7y5Xm&3K3xa4i68r z-=&O_o}Puak4A#!Sy@>D5j}L2q%bulK|cfGHqo0*8fq zjGTX7XecTQx1ieKboT8Wxgaxh%@YPejYp9fH4Bayu^r)oNh?Xd)&#O_f0Fg)FrnQ~ zpacTP|6#?hLQ^Yq`}6F2w`|A&XKp!4Fc1S|s3n+hTba^CTPw{Llmj1tF~$fEaEGiE z!<`Y3z+HHtfH|oUQ3AnjPb%k3dNR}-;1}@Sh`85bB0zBfpe7^(T>k5Z5s2hKe0GO~ z3JMAWB9AJNhCaf>jd_#8<>3L8NslcCa{v^VDVIb%1L(&Siu`cKi}mc*8*~8nR*%>E zfLtO8N+e39I&jQ8X9#+_x=46$B0IHqRlU7`1syFkJCN%FPae~I3piHYK_dceGDvzJ z!8yMYi%m--wBFbSg4}s3FdTg|vq6bC23>fLZl{HM#}fm5H#fI+MPdmw5vmxWh|71TjNzl3N7U9Xo1uZr8d;13z_F=(eVPUD@ z;D#J;{e+{Upa2l5@qrRl`dssqZ+nwdP*F*UiODjwfv5zy&2=AbQ}JU{BF%VdR?X9! zdZ0vn6^#H{>J*qY52(j9A4-Yo>BFvZ*g)g2Sy;~Xa~OeDt;f>MKGMlGy9U?*an;f6)?rQK~#yF05nReS?)#ecIWcyRfdtXK{**NHg>ONHb@+vB80dh zWQg2?Bp8VJ6P1Xl{yI08M>8`s6qM&7#6kOyX9E^Nx&q*Q7ZwfpY;JU70*}RH8U%I&Ig8WH zk=yGF`^{kwn(GnamzkNFl}{Kdx6_PXtj`N0*MwlUO8GF2-WMR{OcCTKM9$c zE9?&z%NJsSkDI=Zq}s$2RRXac$o#QKTMw)5FA_`2MoPua-3S~K=piyPGP~_Sc03nr zyx!;F;%WfW`8UpHsD}a3z$MUY! z8jh0Lw`ZULlwqvY5*Q4>`1O$_Qhg*bF&7Jlpmwu%h$Vo1K!y}ui4MutUnN+d3jX?;>WqZlRLQo zp%4-8r*sBQrgnqzoUn$5PY+dr66My({15z7hoIO*@!<;=T6A)9Balze#~Z~qx3?=z zX2SRTSzWhZ04wbB?&$0sE$ahB12C3dfpbdQT;nCTdoC^sP~c)pRrozE)wqN7mMa3e z@^9?-Kb|u(2l!coS~A0;WV2z!$d(Z>6b54$mOzd*({a; ze6gA@&IA8D-5LWV8UQL#oo1|O$4Ddh6OFp+L5x^-mA+l+2s}GI1$kFgY;1RZMIUic za@A?7lCtvXs_p(fd(`jw6K@4BvIm4WBcodVA^i1j$Me*m<>lpfx7R>?qHVn7yDI5T z7oP^x2rPZJ%G?cjAyA@O2l=7i)vBEDFNlX>bJ&?gkVU+`*1lP3#@_G>993N3No&FMF&FRrQTGnP4JWsDrNS|cphAbAFrAq`hS5bt{w z)k=klzX7T4DT0e}nH3WT0vy~6kQoOD2gk+52@s{J5JvO>hgPXD5>)91K2?9@8OcLN zMz*g1D}X|bL&L3lR;GjMZbm{qsEvTIiOXRZ1ywSMry5 z2Urb6Dyc{;1Q;Bs3`nC9=hH++MHPG~BV}L+ze4{-xFEp!J*`&O*62grEk2v5LacN= zJWbM)HesHgo}dO>Q&)En((V5Dzeo~j4&-pupJ_A`SWLGk3+5if!y;ibDWjX49{?As ztF8vVOQc!<`^HL=>FMb|tQ;%K!T{$qibzgQ1~QYi`|Zy3mIxL|pdoVLP_x>B0{>cx zA+Eo#&v<)0_wMd4Pod!Fo%+f8z=_)csChbr2$C*{KpX@#FNpE4c5vViGEPpl$_S|1 zt$@?LRs-uoMNXc(k_GMu>h09j18r?kaH}w=un^2G&-{B;>m4jdzls8B$w)Pz61ZeC zFiheT%3mZ7!pPH`TzKvscA%jH2|&f)-6DnfYueEuetpiJ76d}DX8_c`kB*MOqMcg5 zed|%FDE8|24Cf>iW74V-laZN&B<*{v&;I^Cr9%D_B&7E{5tkxZ<0zmO;_vSd@=pL= zx4^v~K!EW> ze8J#)a|x35g(kO@RnG_Y!$&DM>LHv0n#RG#_S#kU9cct069=FK!Tbr*o*B?D?5IH4 z4?t|$oyY^(af62kBv;DT5-3rE0oekAb<(uC0cc1CfZaGyAoo_|;O6EAR`%(1Gpu$A zJr5lhO~|>@et-VO8=D-EnylzMkS{?(LViS^=6_J*v;b`VKXSPdxtkGTg{4xRF)5`Q|M(dW6ld=*@5 zAOM1aRKkv@8>kv{Qd3hC5`G6I0)T7Rm#d+M5oQJkB13N5v(qKow5qiNuP{xQsB{6+ z{j^=}L;|JK+IO$#0a@X6xunx|0#POyn>oEtDw&g=l@(y!?-{d{z~T}|!DZvUP3P(X za6u16vu>_=Dho`dq_L5E&!@AaBljZ_Dr`Fcwcf?S(o2B24bT9sO-xL{o(sT=MQwSW zMn*(fgW2;(BO9ejk*CO1j7UjY0$@|Kdu<34Inj?%W(W}r~ZN!EIND7Kq=b+}d!nY8| zlV8&z90j^o{QIV1LmaetQK%E224Ys#@ zE?inz;G&?|Hob<5>-8QfNZkjOp!?g4rCkARL$w+!pQ|_u7VS>NT3=wu!;}!$+++pvp5j2Ol5*6cNB*;qhD`kiCZor$NXD zOh|`e1{CWK7V0jX)PV?)t3XIdsP1}|Syooo(7?6VJu^McWHujrmzjcxi<_932(qOH zP;_@Ptasg|*+T;r;!j}b$Z2|Uaj_C$a$xFxYW=_EN+_9`71q=^W=kaj5;yH%-X)HM zVW-kUYy!4vh*i=79)Vv=F;HcQy8x2Z9A_Dr60)H4o%4ew9?e$ov001laq@NY*);yg zBxUq)35@#49GS|kpNoo$qM|0io{GpNHDbg?S0>-%<6}@bFRQ3PLPjo(#y6S)tP2Rz zBcQ%bDj7d~61NTnb3@<(KrKl`v)n*n&&;n!YgCnwo~8UIK+Bj~yUASaOQ!AfUEnP`IjR4v33C#LaY<$Z6t zGC!fF?F*u}C)1&#q45tvuDR{!zrtM-nXfd(8Q_0c7OzkWR$i^()am{~SO=1gR~2q> zlhf%YVVFpc)&z@9f1MiuaHi$-7hwCs|6%XFQr5$R;bYM~G+{ zSs_`ej3_E3rD1QPA`+>0l#J|*l9Vz^_8#wZf7SQ%{r;|VUFV$Zy4}wC+pFZEd zyx*_!d_Kl~Jf3)o%7BS_Hbh^&nm6lO!;*<7zce@2wl7Xp?X?7?Cpo6NPH7Wddop?g zVq02Tin)?M6YZL4c07aHUg6D}&mW^e_ijTi+a1}V)I(?*%EK>Qpb*%=JQ-b$PTt_| zzUXh4FHjmXG80G@C}P3iZ)n4hk%nqc*xRcXen8bF^WI~ib`uyVlsxgl!yJJf%QzrNfPVlQpK=GP0wl zol{%39O10o2KiXNth%wWG4kCVWkr|sTf7-Ob=Vo41&5@!T#br4o>{bBL`=-C%wv16 zak+9l&lw?0lB0>H?`dS<;`4ovM^s6g(HsY!OI&%Iw;_B<>n@MNIh6pD;$XnM7a(tF z-Q3#Orz|2uP_Te$>k|>B5>6rQy6@`QgN`T%>ArFcE}%=n$om?%qO-d@TJpi+VI59q z1_R~;oiag=QLQBOINRM*mLd8h8{)Dn1duo24q&ffFg5q z^H;B4pu=4GmmAN14z2Mxs zDuh)l+BcjUN8z9OuKnkAU-as9wWQ~+gX;M7BIquI zuDyLfx>3heXaSF#vzz`^CkMj6foa#5p zo=53fBCgSh6Yp1a-g60@LG@5Pk?`(#F>Q?m8^f!CGtchcwFU@3R{uR>$?3e4jZVpE zM;@E&=Aj?A@7&qz{&^WyaccZv?9o@uTR1rn-p@D@cKLGW-$#fFx$d4$)SJB|vC6Y{ zPt`&uZr)_+x!6!!YdE*VU7Nkab;#^x;MsS5eMwwm&Ea!so{ELspeOoXpYZedHbd`5 z)C!PIVHdNB+8mXcpRR-ak)@ym0Alf8CX=~(b7{6yqDp#BxSSdkx-hL zb=H5?{@UIOy*d2~1H-p)QY^XJdG@GKZuf!kctWYE#k`Be=qKzC2i$jHd= z?k8FoE}iZwy11`E`iHSX`8Ti&z-Mk6iJsyq*f2A;L;~gT_EReGs49WC9i1VeE%Ws) zEirtPzq+L^COp(3In&_N=@_;_uc^Y{dL7id=i_fEH8I1|Z2Ao> zqeEXkk4p5J{dM@6&7r#`NPOgDV-4SOb7!l>rZ#OoZoIBVLx7dRls-$%m}w8o!62r# zyqhL5>i+K@PPFRjj`Cgk;k`lc;N#XjhC`m7+QI%a@*={Ac#|V)d0(xmnGfRr;5GN; z*d*=cp!YFNON_Snd_H^*xF7Vvc5J5i)M!aMAy~a~TU*K9Slw%8#0+$eh)5nf3hhW} zWszeA?MK@N_AwbGk(%X@_@g2s1b6RlzkK;^J%gS77qD7$rG4k~;?zy-(M#O@$L zwK09Wsbx?yN&6Tz*CgO&^{upLHR$|*K#c+M7@+U$!6`eRWOVIct0S=j9FJw#IWyfy z2vD5+h^8=!atmD(q)?GZQ=wMD_pU018XM5-)E3^;P%?>*S*;$P`Lm2 z@nan|{khb)XG%6+`wZgO#l>aVQ~aDO$`p^EfI8!Mum8_43J43=)z%I{+?YUZ;oeoG zx-6Z!{B6&f^sw#eRJw*Fbj`Z_yI3#$eOQL}>7INK96?vdeb}nCd*7J>ZPWKayN8~h zhMVGZb@g%78pd^K=+NcKpI<&Fa8>o+cPA^fd-pc+qZgoPlNQ*xI*eE%oE7dODlI7E z_US?q7Qn7Ofp_lRJMH4K)Ot`%Xu+Eu*BSn>2;!XGmPKEBefxTg>_bSeqw8|STP@$c ze-Fj;)1smq+^cmEbAww4x#ttWW^`dgTU}i)dbQRkM}d7khHADyjP0h)=apfTE})c9 z!Po|jme>Wan3cLb(qS(ry;xmzX*aXcMb};1*l0FCWXkSzkGH|o*LQAu`lhj{-HTt? zfrEotjCAV&s9~KWaeftWpxL!63s9txoZtjL8Y)G!9E}YPpZ$OCaT3+-br_-};JoFq z!lv%-!wYFx^qyx>|8sKQefd&F=sQ}I>^rE}KE&lrL0;JQB4`P@QCFzIswDSjYqLTS z-N!P|w0RAPH9O+OdYW0!qB}$g`gU_8m%QmhnsN?lJcFMoClpBIsM}V6Z$KkIRN`#A zHCsHD(dPMC2KnsVB4n&#oq8}?re^j)emg!2(vQBpzu%Wv%%-aJ~*Gz5RMvJhZei}B6jG_*n9V)-nfDt@Sn7{1R${AXJkjCa^To! zMJ+8Y8}E6oN0N@&;w;RH*3&1EQzJJ7R!3|?H+SGkW-hO&=?C3C?IZb#WnZzgdWC(d#P9}FORQd34f`@VRd-V6(M?tc0@=bW-f2m z+dIJ`_zOr2p{si*+{Gb$8n0hCo-X0~a*n}5L^XMNP}N3cx&PXIo4@j+vWu1 zv9ZR;$_kKUVcMAoN?*7^=N6SubW}6&5TJoKG?oN1nm@@S|Rc z(4du(mSzdKFzhUMBlh~fw>32>tj6ah$`a4fv7CkU9?0FuKr=3+<_c?V2$S9eK?`=# zV$_Mx%E}bZ`g!9b)&tR&k(69q>LZKxep90p9t1e+vp;p6g~_>dvbt;8B3N$j;^SK@ z)E6{&KUTmmpVXXHQd&CJl6G18osM6;>I`}Qt#Z-j>&mNTx7G>e6hRp}6v&|`hggM5 z{FNPc#(4ua2t*H>8bR4-^|*4n^Hr}D85y?D7YYW@)B$bkJNGTR=lc97uO@qo z&!0bkJ#psDV{hU2a5D%^fv_7Gr0YG_sN8d``?+sn;2_YUxGESIgo4>DvbQiY42TGG z??0R0`aGWdOp=WIgDs4Ec&;Kz73hv>9ysuhu@ZY{54S&7|K$C&9r2Q;<&iS*C+y+o z8a&)1^_~pfy&)_1P)l+@5eCvOZ5NQ0wJb1Cd!1RMo_1E}vL?Bz^*L&!NrU@0ZX7-G z3Xo^ILYbP;zG7Ab|Dmof%Z2v|yAK-+g)Hxig3!9QkC{!0UBW@5WIxec01O8bj%Rp8 zXw%^4ByE4Wz>lK&ycTO|#-q@AFd9{fk!O-eK_;4KWeAC=guO z!}i#{*yh(P5Vx!Dqx`Qdlxd)aZr!?^y#=uNj#rfeN~R$5y6!{Db&0@_ppesgS5^VgvIes908Xx-uGR2*ydS#I69abeXJ zuy01QnK64}!uSg$i9n{BaB+yfovtv%L>ckTf3F=*h#0MM`H zh~tKaH)3Ko?Vjyo%D+d)zgUf;_pWKf=uR@jMx%Aipzz{(+Asbzvh*Q^u5bOa0Obb{ z56=$Ua&MjfNyk+2d-9$}0e*hab#8IJbWT*Sz#LokuvrmONe`n&*l;<^42hS;+}1PK z=UY`nLdpw5$L(zzuzbX-mOG=Zo6vOrj<2~r;*o@Sih^=fOIf%hvWYr+dZrGf3(`3o9n+%GWqd?4@)RRPMR+ z?{79_3197i$Lh^>p6kxt165_^<){&V3=BASoyZ_XtX|M1m_aWuFVllUOzMhgbWDaw zUxkWAIR9b0eWt(7utTQ5cWJY4<=N51oo1$&==lAqMx@qCz+$vO?~ZnCOBxHz1P>d^ zu0hJJsiA>pYkN;DHQ(1Wgr$m^23n4|nXO5Vnf}G=P=?@#h{SB)4~4Vy3;A8FnLmx& zH>@+heQ&PJmfcUdtIU)C^b88Bcb7eq?VY+GXM}{TTXdoeRo;L07bsWfz85RdZKhWv zD#Ez{H&JSs`_Nj``nFPAOF7mL6o&SpLrjz#&_6@kFsZ}o;k4WOX+w2&I?^So4Te(^ zzZQTmgH=Xp1SzQTns(=z(Dj?qo51-{5Z673yFY*`c^#`JZJGCQ?A^O}!@{U`@O9^w zm02pJQeE9H>m0HFN*M)$1I!q^MCqR8nitwePZGY5+5RC0x_|0bTA@PPu;wd0U0t$r zass<{ZMfP$Mu=qf?l_!2{VCT>ME1b*V{2P(ou7QS%Rx`$W*y4Cw#C_g1Yg z=55?{I-SIFfi92HlzsbJ4Hcf?WeMR^&~>EGSl7&F)Ldoz`0*ni0+t$~#Gg^#vbG%c ze)KlE)=!@*5MA+dH$qJ9Yl@`?q7Nl{5jNr8&@b&0384r{^T zcOPo*`paj(NUHL;rD-w3D|RX=Xdh5=8JSYISDT*Jy?YlK9S!B{5tR6BM{^vD&HbiebwC+!QWNT8jdO1VCJ_WeD%y#-5} zVe1Wl8b(j;J&OJkD|-GCD#aZJVuFH97He2FBOXvxMGSXm>EAVXx&{@kv~<+hlv*~s zKutSa3NO9Ha_acwCUsz};c(S7+ z-j3_mu4VE!?HN!eFECz`JWfWXv-l37V4-ZCYwlu^2oCByQpBVzcRa%n8?Ax5_+Wv zx+x@_I``@RUhFYIVu5uxg`np(7mq*=$??N@O$|H3$3bmN& zDCpG-Uw)%b>PlHwO256a6Sk&?2Kqg&XU{$rRRXa>w>0sVr(XIb82qZ0*}Fd$s2r*L za}sr9Z{HsJ^2IP|_7+`U9ZGbd8Q+J8Bd^RYPc=2&-#_=Wu*lf5f(}c3LwUt>nmt%|Kxp7`a#UP|Uk6VC`Zz~lG8+JiQ zq5xtfb5EP{QFMGB3mv;_zCoPUKRv6-)RO(R)C(-Ph4k z0<|v|0xmtTr^~IUSf}AFcwLrl+jhIVXB-&J5tlPmfe1;1+92iO3-l!Oe8L^ZAY+Xf z4kala89n5kEq>$9odr}qGXZDD{eBk3r={_;YSLeV(!KZ%Tt7o;sUuiC76s-OjnoXU z_M`om2ULu79=s@q_@_eG3Wb8*XcuE~1_BP&u8Z-bYYW)2>G4t1lq*KJDJI6SlUsNk zJ0IRpNazF<_t36N^m>3$ed(6RBKh02!Hz1e_=HVn`!|6~SfLBrrR@Jy4qUwhzJrl(2Y+=*jqeaQ^ zi($_=61ex$xW%5KEE1(`lI$IP>!XsA1L+D7G(^z%-Hae*7cE{eDGgjW6Iwpx5Ed2& z?#_rlH;aVW>`=tAWeeI^v)vIw*ioH`x^c0w&RdVznVNco7%MgcoH9N=&B6&$cI9l3 z3+O=8^XrRtsU@-QR2fQ)iCH6{IMpBpsBB)IS4=p6H6nnD@Fw?^wykZsW7^u+jhw*1J)ckkBU?>fJ-2nxjwfG5!5ieT~!$qhH0sMN7+_`s9( z;6%uo&X+-y<57OVz!^szb`5r#S}uFAeVXpbluph6r?&T@;!Ph zjAgk8f?24?(zX`_iLwkl^Bv>nuwE|sK6pS_&%uU@c%AQWD;)Xc3em{R{KHR{S60BM z0`23150IOC6^1CYf+i#-4aOFpu$1m?ivH3)9|2O77_(pfQ4Hb@Rpsv8^!-KGuNxpb z1M60r|FX_|d#+NJN|;W>v-X!n%P@?rehwzcnlBl;yr33jDQ4sBmd6W1nS z5kUg0TOL-R+~81qkzLYaeY`HHH$jcflSho~nbquzTER1@s*=ijR}2-Au5IDGtg`VO&*8MJMnff3=U9x$i5SwW7IYnF%G z)P2Osx^w#h`&bg%8<8zXU5zEEhQI}#pZk4e!Bt%%sR3xR^NACn1kB5Vd zuxd)_*gGn;oVK#Ey289TKMyNpVXI&@ST&?&U=wIA;UBxIA*`pSC&B3XrD3v8%{qUW zMmw(EQT+;f@W!c`k&aZ=OwtZK*&jng5l`q6UOB*AwP|Wu-2h1A-h~ZW(*SO2LtGCe zUHs=EOUHxX28L_c1vVQ9$G30a-~>4^0hQSE#5aMdTwAVs@*iiqdeqpS*+C!~R|(;m zm8GTjHyK!77y<3HnWL~mh^-AzX6K5;{$WZ@7`jfX6ZuVNTX9Ze=gv%IOS~Oe!WP%l zo9CY0d~Ou@m&2wt2(zJQzMES5e9`Cyj@XfFhP+)=TwJ~NIcNv{JN$fn)pzD*W>^{f zjO;_16g3K2cG6s==&`Qe$kcsR?1g2U$QQypdX=3quqb@Ytvp@j0~=psb_&)hky3lts-x%@laj4=O7gq4wHVDa}ul!davd zhWF0U&>uQ2ICRu<|?cuOq zxTkGusi>o;w@u#LQAOn?;G^ow!^9)G4CJo)B?9|-sE+Y=7y2*r$Y$G$M4W1%0?;Cq zMWWsAADJTZ3xZJ4Vqf`RIyjsZ7S4b0#Rd0cfsBZ!!A@Mw7Ih1D4!nmhL_t4)|D8K_ zh|{&vL3RO=11j=cA1cy_&jKu!UqNyJa03{*wQC*VIls*%1hL|4%c4bC4`5DZo@o?9yupu6F8Tvwa&rRaDb0>=bGUD z@af!qNpp_j1CC9Unz4S{#WQZNp90%Rj=b#^VPVq{H zR<@cCX@6;uITHq%-UoYYwTRf4LPK#Vz|*2z1M|WSZwETXpKMHo3wBP((b4HHvR8)z94#bj zhX{GzL%*PCuW5J}ZDNm}Ni)k4dD^Gz7E|gD6dKNuIWG?G)mO9J!;m7bLF3@WDxC#& z$*~MoPizEicE`&paxAiZe0++EM~X|K)M-8y7Juv3Z#e9d4k=OHl0-@M@y#3RQ<=bR z_v+8s+1i(vm6Z)X2-w&|l7q=hrN9x-H_eQ2fsc0^S-5aasL{62c!d3i%X@nhq^1uX zUxyoZAv%icO=F6~hsSZ4767=Z3p7Mqo5?wQ_}v%t#U0tQWO#Wg9;K5mi$XKeoU-n{ z9#(aYu5-x+LG}Z#5I<>a*D@+Ee;FC+ab&%9`*uW=5+eQg0IpD`#*3uY#m=g)&PPg| zJ2ty^G0~|%w|8}oCNJaC? z(}p>w;3vSPckWO=bo%JgWTcgd2+k}*6sD-4fH&m!sm$ndk1F4Xv+C5Pn~Kw42eD6-On(YVKKi5oX{ilNj&X%W%;iW@R4CU3)Pl@ zZ_zRkHyG7R+FycE9v}6^T3k}n`5qm#P@Auwhi0#I#N=`)QxFB+{MV~u9{1r^n0(}W zN4Q0WpP3MOyrSXh`qSSL!5CC%Uga89*|UJiK*RDmzodyN&aj|EfybtF4Qiyico83C ziog~`W7L^xn$eSUa|Sv(e!q4O9XkE-X#q4S5IVYt=Iskp|0r%5%uURjSZ%xTVT?-YIlZ4tdjm>qu zcJ%K&d|p-%YzVOM+(r zMns@q(ueTP?HLdbgJ=sqHgq`<9XsU82-CNA4(te(7KFubh-?S>9biK6S*Qb^Jbs)g z??YG@?$7CjDQ<#FN8nJ|!-Ga*Oc&apy-s8G&M2C^(s#2@gja=W8iT}oMsFS3ro?etmM|v(AaHTF|Sj4<=QpP zIOC*m&b6rUQC6_X-Ux?{@$0>;%*>I+R_UYO+4#DTW2mKvo&q{!T;l^#?C7swi9?tk z(z8QAz%x7YtlatKGC*|?tE?xQ{G7r=k2IZ{s(T)uz z#uTslaxMYs99|s37vzb{p%I{>q5@j1+blFzF?9_T!ILLbgHOb&{5IxfH8nv>zxB;eAMW=JWK7wO*oE_j35wx# zE5&&DI}=7$O_p$!FOD08qXg*z)3j{)^Fv6od(c#h6FI;d?J?+1wTP$5qzDq=4JKE> zb73h+j6DFc=+u!&i>dzq5BjgqD4iMA11dI8m@kkuQ4@C1gPnp*r?$wkB^CL>>2VVf zLSl`gK3H6++9r2q0CF7MS0HpBSx}9b{QCm<*0|hL4ERuAUk~mJ{s;U4 zb$}HT`;l@rQS!tU-HbC38-B>YgIO6Eg>`H$5cc4K()?s6D(urPvyOX!urNU^7{N4K zTs`#fyNg6Tg+^%af)p_cqoILiE0Z4dzSNfpAH(s>mJLrY0a~y+yJ0J#{sU6e#koqS z4C>1wo@K3y_U5r`oHEzwq%{66ml&0$bv52UKe(a*HPnNcA+!eF9Hrm(*C=^VKzBbp zvVS=w!MVgAQLom}L|fq8{CG-LRWRDdAYl|9S`ZSgu8aj+G%nPz+3`}Qk?7g}u1!kA zH%ntxV%MKx!bAk^2DSCHwDZsh#yo~6uVNb-8L%%J+_!0k5I7F%>lZjRffPjPNz76q z3qX#Qn*z<82CZh;R?)wUoEFg-4moxUqw@+qZ=Vua1ncn>JpX7)uYjLQZ|3@eiJXPRngIlESJ`Q1|CKG zz57%W_MV%OQ44UFs01(wH(A09;1!LTN9fJy>E#RLR5(|Zm-iD2vbeZ77iJT@Dd1R; zlVhUB!T(%oGJWWg`09%kbZQe*Qy~sann2_F1vL1D^3&6gL+z}M^>e%=WFTcvysiNC z8E8n|@CE=wnlVQ6zW@Ar6=gjs*7Wv86yeyq+I#fw?$eL@aN)s@uU5VlnAh5amJKA51F}_Y%6OB7UC;>!hck=QP8I1S zdXB&E*Lkh(a;clXpLp#Gaa$V8L&Pq;BzE!z0l|=UT^<~=< zfJsvsD!%~5V`>2H`t_UAw&jS2Aei@YedAQxTJvHf`l$Jqdo62%*M% zB4T0m6K1Hq;D~Cb|H~I%2Z?G&k|Q(}wsF0vsWx&eSVlF771F*s`VL=!k#05*lVRpL z=L-=B@LmH0gRENme+BDYV=F6phw2C*y=V&xTCIz^5J4ahQvlq8x*NHg<&CGeH?&vH z$D6urPBQ~-z!p-s1fCE4rAc8*FORO8(ga@&&zSW?D(Q6PE(mghY;DfWK{6zlf6Lg)mhI4P0x5^Vi*GRJkJv~3V z7qMSVq>-Ky5eNASjcsVp`p{yoeB&W!3st24dv8!;CnIUN8n0`mi#KHC%R!*L3wlVJ z7>g3P3+)T@W}WD*Qq-PX8UV?*r#lP}LQe2v=7V+7M~tmXoMytB*etDK*y20N_i_b*1^fCJKbU563`a3``USyYrVXt0D7Yx zvAVLIWgonPt8^zL{*{?7xXoJF1Db+-mkivcCbtohpF{FEEh!rX($$-~ycIq8XlO@j z)}3%L&OzZjRMKg?fss);aDM!l7CYwqaKEiQ^PP_MpU+H{b1vcdk$XhctdomyZ-9-? zpfayDS&u>^^8s2GQ%g$_WQ0W>_23Bz0D@P3+Qp=HNHVKUQ&qR1JJCA6(q^E1A51LT z4-`|a&RK~2x8()txqiXKg|QIGVpVuV09;Th8|RpQO}Ggd@Cd}tmzgG|W8tSp5Sggo z>4BS{o5S}13J?OFHz%~tVVeYULP*>S=a|s%aC0kx806&Se3V}iidh1{kWy*48}MWC z-uQ8L3*25-*4A@BI~f%}5~EV=HFQSK@_T}@hZM$te%u~+2Wf=A9TXcE+p$ukw!5syw0Wt|(+!F{5dD-WaN z_aUmm|GR$3W#I4h4N+7=7$N|T52OzTH`fSZNwI7_zwkXFHI+~QY{2(A*3%^xn!t$8 zxnLDRma~A1pIgNWe(!N<=ndZa2tDhE+kO~Zf_@ai*mC~er%!>fgG|yh*(T&E6#c%K z0807ip5MZ6+9PMgYpk2m(9-JU7F7*wQd-KdbvJ#rL9D{i(lVkH-wB=GobD2f-)Fx; zE=~LB&3~R~e#<2$%mK(piG?Hw;;9uPFIcs<-z0DmpJcemQn=%Fsh&Y*x?NCEdmbH+ zC?u4(6v;pB$Z9Hs{rxSKmk3-GOIghTwP6_L=;)}Tq9Ps}d@19o_!bryzc!;uFdK^7 ztQhk5@{7|mGf85Q9t%zUq45&0*o;SIU5L=4AFd zd_)VaV%@cTmI{qUtJ-JCKnS}VY`pl(j2P%=6IDehkML0ni~P}a|GG)EQBx?o4vM7^ zegRd3h-aZBYzU~`nqp&_g_^LsLrIW6y7aih>h%2i5^_k*p#dyo=;*|%mW>|(=|ic| z3L{AuRzPz$N!dxW(cw{JT-IW4@~l@!60 zZ*^1#g4Cg$%>He)&2UmIIKGA*5n1%ZnNNTyzLcS4%RRLa*{>EBBag^%BOw6-u66+6 zfT}xUM-hRGjIk_$q~|qy0Cd>IuSw6X!2T+c{Y69-co4H-w#_$h-P*{xui^7&+t<4? z-w}Zhi(d2W?@z;HV;J>H-8((f@e}Rr-tPd}1tycaU+Tll%;rD5&{k zNvL_vvK|T-o_orX2v9e7>=bV}E`hj=msrJMmiaX~F$HoN9G%(Jaua#kJ;0Z}wVmUw z=eBY$hFJR+6`jzW_4aAqBAYuOzqA#!R8w_~pwyw?dt>OttePs7yGH)SO2Ih&mJ@NT z%-vV>f4*dU)#^*lnz8RlH|4Inin;4F8=s3-bhcH-FRoNDDK>RK@j801Z&j(u>pc&% z49Kt5xn51a7{tF}sXcr2k8o@uOoY@S=pgKVUOXnkOG@6liMobFQuFhBCg~r4TgX_Q z08n=AI;FnhhK0E~VQ{Gaipi>9H$q+xEzyzS7c@^5_~;Wi*&AYHgYMSK$)y#SM9fPe z1lcHyqGuQSU(>|B+Yv+^@@lXC)YKGG$(F0%d9*$hm29$aj-m|_W}y?RfAK)UkGbjy zT`|}p9&j-*1aXdisrx z{KN^WwQCrHG}Bt}>%<5ibR8~<6}E-8g;l;|4`%t_+)@cumExn%1^y`4G|3toPHa_scF4MGLXUMYrxFPc(PQlJ!7 zzzmIvQ9x{GU_)t2QYK%|3T?bV8*);k>*)+(SxyiIuWG%uA9*kKv7nI9yPq?{^*02r zqq7xWLrei&%Dr`K%jMVG7vk^VUzzx()t&X^Nt>f|&*-d&?DF79&nc()pqothFwie> zzDUFDtD2NfIZRs!GY`F#MNV(lV3+16J>9cj?E8nUXsnF|AaC6xAdrE%Vme8dyFYyV zn5VbXX6oFDg#)RlJUxwOVUCPyonD-AS^o-!R8Ekt5>mG~Mo5A#jvQM>m_nC}*t#-4 z^+xRSziwrD!E5~{feY#Fv3;)lKEi!@^8=C(u;bslN5$E9)ZCFJi78vaE$VV{u+bE9Cx^0)4MbEj|idLMi8d-a{#l&$1zA2@YuWCdGVKg^5?)<{zu zy?i>yQOVj>=hmgFyU!N*Z+@!wSaXTPV__!n?HykQmN}7y%DHa~^XFGyefi`yw(!79 zZY-c|?u?rS+yBxN{=fd=X?4H@{iDZGceUQ7r1%7uNnyf(OV;Bk43nOvcWAiJeSvF& zd@jQV{`tq#K^s&ek$J(Y9Fl)1uedt@t<_hIfJyW0z;}6#aKss`?L#{doOx(rx~tn_;%NNID^O8xf9-Qo}g)?s)zGv`}FV2 zci6~a9w0jO>#gJWh?xbIZ*M|Od0{bI?@s(_;4+G$i< z7gcy4F1codm~DOS8E)Pu=UB24mjdS(N+z^dUMM9~47L4b-#3r!rz!Yw(cBukc4FA1 zKg+e2fBvb(c~fx@t5w0ef~Tn+e2yg|#a1*{t_SiCG&@@mAJ}un{AzN?!)9kL#}d|p zEvk7(Qaa?DokgtnTrz*Imgke)VP0%SS#UPY{HID@fny1+)hOMc@B0772Nx7<3{!&) zuMwCIh}@;btfx5p!&%q$DIf0bb&efMLHFr!z=K z=&#XYjFtZsb$=_rhT>Z+->#s^*uc&5K$^+E_=5)Z~yN%LGQt!pddfL1(Xip)hdMkdEP2{0qdzl zF1lf=b^6>3rGKs|>yoL!x7c?5u!HZg!k2dlr>TYgV z4_AOFAML}q+rPJb@zX_UBxOY66BDg$Y?i^?-10>=*^7Y_`bo+d=!VW->C-q3Phb&7 zA;7AWw`6imuR*_bYI3sT?!V(nLBYPty+3^*Yk9D_(qJ?0;B-$N09%asLDl4i4h5ZPD_AFe4ABPdO9j<`1g(?o&In!H@_8G@opZp)@U!w ze=euQ6W~wVN94x0Gah4=bI=Mr1qG0|bTk0s48WmwpU9k0AwtbU8Z68FC+^l1{4Sqx zNbUY<0m~egGE}xuMU6-1RN|Bo2u1R(OL4lu%j2IKK0&NIrTI^^RrSrgpZw2<{J%VS z3sVyj7mIq?fZmU1^RJ)gnCB#Z%etWoQ&d#)SjVkgx&4k!xl9oQ%nLoMYLX#J=~)^rP%yi{utOpa!*MI$tZb<_2fR@jv7XFrVFxAwsQx}{ow&a9O9h>`(mPhamh|k9 z?x_+cOce#c50-U6JMU@A#`2?YFt4AkU^d~lqFoT2$yU8=Rx1|8@;#0vRsTwSTAT&5 zY=0m02$D8YHxTcF%eA=2?oXQRFY(8m9r6KhNKspzc~UxJxFEO&cZKo|0GOX zbL!+tO?RPU4wd7`_@IF>PP#Qp0m5|ugX>F)Q7;P;o=fCDz6%dXgX<#CZnFiLto*b` z+rU7E-|opt{pl^Q7E~xS-Ylr(UwW0ibpZ=BwKM_-R16M^mtf)HG00oPvp$J&$G*sU z*iJG!%laBN&A|Hz8b(NwDdF4;j&Zj4f9j`1#0G0?5&Wa$-Y;UsJs4eNLU1q#4_^IK zL0!N@%Oey=*f6bW9t|!f&-%zzFBv5zB^`Yz!B#AQTY%TFQtb!^BseT2N>c2?2#}1l zh}(}HY}Z=smBjm-{7WPW29lkv>}yO`0TNR?ShWGkB)Ifb3{LS%Ra*z zpvpqYlJ-bz`_VQ0m##Q!w9sxzWI2%2Dt6#pu-_*XHR9m`EJQ(8%Jb9|A;k~%m z1G!U}PyLwrzdWvg|EEg0>A0ESJ81s^sgTF})z^t~Q)si9x#o77KF@J}5`Sd;$g70r zG9XOCI57(09GokpZM?ikQF|g~@kkzz0RIxPi61B~r~lS9Dv6kUg1$KCTGKtbDXb@u z6gXWaoqz3j6+=U&Tm@hF%t7`a296ABT}E6Sfex8%p|h|2?5IDy?`;s*AR@wxZ* z8;qADKYzm4X8772a{k)j-{%&mbAVEEQDN$m<55uN@bMLwl{v|czG=#>PIQebU;eVQV1 zJPfF8%z|VnIZeUqgE6L1M8Jx3EizIFrWA#b20ndlZBu>ZRbM=-_N?nuJQQW?7n=6g z22&j6B|oEHV5FcQQ10XOq)t`HffNYx%xEi4c7pWi{3Oi-$UWhT zAozy0N{NAJ8F<(*=A^GGxC+xK0FAVpujkk}ndEYVd}b8C4G7HC(D3N_`n2q9094}* z4SG*01Q2I~KR-Tku#Uj$fwMEPi}T9K9bP^Stv(L#=t`n(AwcUT&qsKm!~rpD27Kf?FeR4a2)v7m=1b+S;C@4tSgNdvsKvhGif)?awo-TGll%aPKJ|hO-CQ^YC{#Jca}^ zklPi#I$uD!2I|<5rXQ2P8g@Xsi~xmns;j5RviBp<{1JZ48Nt*V?r;13CXcJCs>VA= z8^EnL5Pa;?->atExRD#SPjmAvQ;+lWiIXwfZ8|$T8f$BlCGhs!_YVQYf|}4|r<7D1 z=96q(17lq3NmyCCap@>DES62;9opyN>`gyUGg;N5vg*Y!X?Nb}$vx-1qmndKR8B4~ zCKXbr=7my)?q%uSF}AdPo;<`ZzLn zBb)qX$n7PvrneI387QXf-oY?7=VcK2_m#rRDQd}@>xh+3eiORj?~62`mlgzYo#j1j zIV=@?rh2PwrqJ<%mIrC|%jhUTR;Um!odDLsh_xjD0lAWo%(?l`_TY>oYE&%crl#wD z&oDcZZV-Az%p!YqqIxhGRuk51QBgROga@E*&JHeGVr1#8L^AFStvL8eK~YiMljPrf z;=qOlXM$CL$?zxMV6R|=ICfI&#S6om45_lFGpnCId9qo#6g$v)u&pJO4vslVJHci> zoJ)YIe6u)T%s+D3{rC;CO~|slv|t>HV08HB&*}kMM068Og2vJp=m(w;)Z_=Pt?#}e zPI!p*!$Na*bOh%DB)4F4>}8USJNK06WL1nRu_mfo2s{LnxLR9VyCm9essIIHW*N+< zH7KT)W;TMd%GM%AgX&5)A#$P>L4+kv&Z$RSM8tv+Kw`{z)gVziaxxfQTl>=dfNPk_ zo9#rX>7z9q2N!JeltmIz6QJi+-`mNu+b_g-s|CbML&;zPhR~Ki27(**w|p;@`c;h?EJ=;!a_nR zPyG)c-rC{DeZ3P-RA?!5WT#MMqs=4yoYO+s;wQxzPPogzZEkO;r=`8oBdn_acV~Py zx{uR~&Ve|#dl4wKN>5*j@Oe(|nubFG1I8@651MGMi(2GzoEl$kb0n`X+DP-`!qtWzsJcq`S z<^{yH&f|oz0OQTDIlMKPy!4HnoQC110*b#GCnj9Zqnn}n6M-~|LImoghGRCu3ud4p#lv#x$RyrM`hhZY%t$4Pg0OfEMMc^5;rF$r1D`mhQ^8A9I{G25tdnj2gg zMvh4GW8xekdt=zCg@?p2Nk+wjMAE(*jKNJ@dsr#j8!+U6Kqr8`s=jJ!DlG3?OFTL11t@krFx3jurt-sl6xs0@Xv4}H zPn@7xu5)d9FmdFEa)}^Jo5W~(Op1`GA-#SLw+7?d3&lo_%)!rmV3o#jG#u%1Cn-tH zuj8S{s+WP!lrl^ec6L?h>Ao7Q&W&_j^-pG4+3a^gGs5`;PCcmpG=6cC@RNN0{J_~| z?_)ey#g0ZYIMtqYP?Ow?jpfU{jq;V%#N7M?1;ucR{DHlBSZ`1_q&g>6RVj1vpHsku zUemw7>XS&u6kHt&UPU~v%)|q(0TK%s9iepsKY@+2<6oC`|A+EuUWu&=#e5Ph#oNiM zRwL5nBQ`e9l@}<+m1~1<@C_(m*rvJ~!m^#bW`K5*C!KbIkyq;mnfCz7Sh-8fG(u{t z>uNU*C~I$;WT?#@ z=RV?WiUKw!id7nXoT=6VF;olmGL+_4V!RZ~jJTX^(aEIQRJ;jHd4RP@``FesU#f`9 z^NAsYeQ2Ktw=jqrE#pxX#kd`DH93RIqiQg@nw~^WB)vPMhVlYg1vjXpNQPhlb3^Ir z>2dO2M)5ztF#IFf%}sPP2}>N(U13qtTb~`)z6>TVH2pRiX&1=~$DEC!*@Xw%lx;J` z>N;HSj)G;F(=A^F%3Xhp^ZF{lZWsUa|FLj!1wp#}u720fostVliHUVlDJO%W*TBFT zEJ`T&u%^&HjhwV!Q?_w|Q4RSo@#)fna}TD|Ac6>p1>;dLAAa6a<{%}7ariP#%I#$`inP4FW?-tmrzcNpF^G&~FmHt-zGX}K;(wlg=Mo&0_fbe}wB6t|+4p4d?do~2l&n4K)U z#Sv8olvTK}mkeVE$e`N65o_y(#lnB{xr3tT=FkvCUBSu6nniXa*gE>-cRKQ_+ z3yg-oSk*UoEEwnqUGa4ueBwKtKC3*s=k!H1#Q>)ydtk`WQxy_Dp@e zkbk~XSwQOg+mBVj%KI}RhZuj%y%45%O^;J@lIn&IHVdIWnMtg-(7I()$zoPC=h+>2#bt>D19(4-nW z5DX0!iaBgX7_RO}nEfWJ90|eD*C<%raq&ajLVr}@#7F!xx8de%!o7Hu2RfQ{2b6c| z#FCLB^vE%*lA|>H$WCpS!Mx!Q2ghglF^2{S$;rLz)I%pQ52(0;V7qoZblCtHoQT$r7GZgtrY z{ns#4bA_K5idy7D=VBSBR*i!PT|g=!tjs*FpfGerJC7WE6$B+msCSP~rTe+>Fs+4cD(X zx1>_dPz_m*7y1wW`W3b8u7Xb%1^98wZIC#1q@f@NQo-q;o$ja|V+|xBtwbKseSi?k zPv*oePzWznO^6i=VV*ml+Piun$q0W;3w>V@z6?3{maPs#%LgZy%Bqa)fHFlpH5z=R z%jA7G$dlN)6eSmz6Oei+vKfGbAk?Y2@{+$>G)^k--1!59u+I|>3SI-jm+;I}xeH9| z)CO-gLhcX~tHSn2`KN%{=4cJzKx?nB7lB{l8cr9^?Qd4D96T0|^O;GjCnQX$sHt1W zQKktjv($}ZJ`L(0F_0LaKc9zp6~P9d@#wZz!;>3iNwvx4ruus8Cnr%ZuD|{keGcFS z=hpP~46?GaFpKFtZdsGeoo`#2n0U%y0jFN<(z`tlT@jno$kV$xula6t9dX*%6{DF` znH)-ivJ6#zQ<|~Y1^4V>prsw^ev*ZT`ul~<%$-!15GA2n#gqux0;>(KEhlVZ{-NwD z<~%AQBvj(mb`pCWF9~ffnq@#vySdgPrl_f_=Y2XN@PXc?{M}>j#+9<|c=E z2Q`81p}-;Ie_UDP(Ln%24c!S?3mMs`ggF?R4{|(n?#PAZ2VP?%w^Juh0GN}Lmw)_r z?L>B_NpDsrZ$}VR4JcMyTXvw;fqWE0K20qwvcgldv-Bj12Nb(}ikmw(KmQZZBSYfar{EK%``!5Bv2e|0S}(%pe06f0o6 z&MMLf+V3{EDU4t}d2GEcS>5^$$E*VP7zRx+l?dGliVD)%{|;G$aw=(7aQ&Pj1(Sg| z84E(qRVud#I0v3Sc2w3CO)BSmWYf2&8g8quuR1$wwX>h9keuQRGYoh;DM)lNz}84g zb+w*WXOavX4a*o(+woG<_@BzdC!ll3Y`@(j6+AvXjtR*N@Ou^UQ%#XU29_2V=YKD! zP!UijsAR;KJC^;iY&Owwcp{VLro_p@??$NJDzaHZ~fB$h1imLj)+Iz3H=9+6x z!`t|Tgwg3FJ2q+>2^hGxq6#c0`hiX|cFoqlel034PP@Al4^l)gU$VOG!PXZ|A^!_Y z01D^~MdzRG?Wnl8l(u8UJ?rFM1;JNq?ML4;9sO~-{lGN6%BHpG&18;J2xx<+iqg%3 zPQvZJgZ?hqE<@!&_q*W2{m;#R*VJT$9+I-}F!_dbIq=<_NKR+D?f*Ci?hM4}i1Cfo z1BLp_tBq8&w8mv4h`?6(q$w%mCKiz{F0YxEV$Z#!TFD7rI0f4B1Xy>D)IGTT$i za|nh_0P!Ci_A#XqU!O&Rsxt|Rt<7MTor}u^Og*Adk8{0<$;j*?y1Kf+4j8z`B_L!=m%fZzf5<;zW-hp=^uc0?I|8wP>z&rI{fL`MDOc*}i=owN#GT7i%^ z8a}}QRGdatvUBR;=hq1BPRPzunPUH5x`NvhbY#I|6u|m^4n>hg5HpTry;78$I{->G z{@TMVycn2fKgY0wSvjy5-Zp~-o`7zeSeO=2jgNqw08k^WgJ+SE(7Fu*svmq@ zfPsC!`Rftv!sCsFh1!g`aOX2WML>wP$hPPl;;Wd}Pgq*u3JGlnqbdv()=-i?-kv95 zB`6u!pVKeZ6H*cNQiL5uvYY*edjEHch?_TraF;FPWuWl%zk!x7$(b`>PN4-5!t@9_ z9nj28IuC%Di;GJV1WZ!sPuu|I18eK7LnwX4@+|)#A^UBDq724}N}i6vNd!v<%jkr$ z*&9@WuB%kgvv0<(f4eVr9y0*|p+a@i1jBg1W#B1RMR!FqO=8mCT-iT_DIjBz7;z)| zVBejF1Em5iv29-jZ76&merPfXSXr10P&7d>`-(gYLlFf|z@=2BFCl@I0)pVy*c5&T z|46viHT|Iio7$>PA+<71x_Zw0w%9=n_U zFq8#xkA=YR+BN(ZOtSh&4{`$Q&kUqpfRo|Hei{ej1cvb9OoR3l+#BGx0f0)<&T=Gt z@l`Sgaw*`=ut~Zkg@viY-GaV4Ohwhe_slo?DG{*%M$l=UCXCs{6!Z+T;NR`1DE)4a!2_Kx; zOwfV}2S_7pO$BXj-OEjc!WQ}#iG)r>`BUWyt@~pYH+c4aa1iv8uX($HzF3MYW(Tw; ztZb7*>U18zj+@^yR|W3w2eM$n2<<;%^< zfleKv=nDQnM;n$p4(kk3*)Rq1qR#znNGXPYW9NG}$=UR+4Ga_?sTL}t6H`-DVM(k! z9yYl}SO7EWidLSleCdXVZ5_WD=sKQEfouXZWHdKYdocQWjcDN109~iFr|+8dsjjxR z9UEHPG-G)brXGN69QkjQf(&74+Ye}y*kFMH*EHzpgL}=k%_;G+0_Z;d?qfK6cBINi z0a`cdRfGr>t=F=;$Vy=X1_0&Z9l#A}NBnaMpe+hq4^=CKs0|l8#y*tusMTk~4DLRR zL}KG#u~i-*S^$ydJs?p_M)AOUfacS0$k8vu*fCQj0zoVeuMK>Py8EdKzBI?4mSvG zkNjJ;&@-SV3BethP;e&RUcM-S0TCPLyLTT0_=tVuj~B(*#6gD|eDMsK;86YuS#erC z+|m6%e;m8CvoJvWf!XbxUNlSuV8b?m%s-Ei>kKi>(v{GP1Vj3WlC*zrT6StG=&YNA zBQb~WbC(sN^ie?-p=2;?Uu*7sOMs~mY{O~_iO7*E;WrE;B__UQ zJqRk^vaye0I1*c({f58*?x~-wS2R5gao(VKo`7QuL>qu2Y%8~NzrnS4%VEN3W}#gS z;3wobet&+wERn^&m(VdxHh90kDFuDaTesLH5x2p+Z$kl+ZCLo~UgyBvfd{##^e(og z1r7N}T8cM5yjmaVcR9)Rd>j}sB;COK@DST&?47BxC)-URT;+-_U$n`rP14sn($BM; zskk8x$RwOE14^N|lU-d;ZwH+rf=^r<@@mL1OSXl%ze6yAf>W5EAL?6aR$QkA5DfN# zXj9jIce;5TW^pVm(r(K^8#M8UDB#F2AtNoF@=)^;^?R&^%op0ya%#jd->WqMQ`ZLz z$wr90si`NxY=MajI_hCoDt|s1GVIyailN;94Nm25ckiz9D*muahV>gK zbqoj7{R6_lD%35}yrDU2iUF^<6Sf?hR9 z1WE$r2YD472PPYD`w;z322%i#11f;!OhIQO?NOVC7zc!l;h$&>Xvn|;@^7?(dg?v~ z`7m?^iKFNSJ?xKQCS$n*y%90o|6NhW!4Y&MO9D{_s<;tBjPuilv{r-xyfH_~E+hiF z1pigsl{p;gXOK%jMg(dtw#t=RpaF~08XlU)2{gu*eq%`7zop*as0ab^KSQi(Eed(O z$G3|TM$F1|Vj!G6-pRrQ!#m4sIXv^m6Q-?PzGj{{8|C&Uv6%g zdWfG0g&Eo;$^?8|xN;K#47fr<>gEPQHL&X-bmZpR+Sx5^ZUT~fv*RfVqJ|6fGa&PU z56%=S9SH+tV{zz6%f&A$RbtO{TlA2vJPhmtR48}83b@7qjRM9o2>POcsI6VcN;&|g z!*HmmxcJY)jc#>3U>F)%Qy@yzK^cc`D(ML353zDwASw=6P<1u%G+-XGi%0m3`roo5 zTdE(LT%c>GPjn1M?f}u8Vl}FTgbHH;oN<@&@__!z`(bj^WV!bH05WkiH93 zXK@fpCXN6Blum>12Z)$}67aJNDQaTB0nx!aO+g2$FkWZBpeZvxp5t3)X%W@{hbaJF zuLYc8eegkz0Lo7wn_dOu9VQQ`2$`7${@EA_C~&er1y)n(ci59dfzf(hVGT zSV?(Og}2bO>1SC9R@sfdsz=Z`C^8A)Ba(snv<60Rkdr%O>qmfDig4`hmmpRf+GO#m zm?pg9FjZRy8+s3@FF4bVU|Yj>ggJahHa44Y7<9@R(e6L3bU&dv4GLPR@{b;XTKPYR z2ImpBhXGxe3F+_J%}$Ed^+?Dd06BpSz&L^IWymcw5fRZ)mZlH|;1TYRfpb#S3aqcB zUVfZ==Lx`HZ#Qjj<#95~W5^FU^VpoB}n4yyLjKVt`VOd7w=m%ndWTwqHOa`3bb}B%o7YcpiO(V6k;|?OK+5 z`f3i2IIt06V`jbq@6J46Sf3%9zY4&J9t`CBKfjV*=}re5)iMJmmp*QHPb45 zcv1!PaxSu|>FL~DTqIVm4y}2}tDBDi>SK6Z1}Qc$jP}f?&@(uV*Q#Ik-L828tRs+y zSFzXK1z95t6%{)$oUTcEN7A;4V17Ca(eP0e|T5bemxr zgXXfmH2YrXoR}&G77N2@hMUV!r1ktg_-N}fYpdMeXMP4O zfg;9@n_CsIbU|G(;WAylB?W@&!?ME2JK((m`4M;>89J;5Us`KwJRt_g{=f`7)Pe~F z#GHOyU?xGXO4)M&C48R44osWN_*41y2;IAS|yx2y*6`}j!45I8Y)w>}1kTM@qC zT*1HyR$ghTrmpV+Pk`wT20||=tisF)?LM>OgVwx@!uu?1#9w2IahMdqg%UhnH0^y5 zIXl^#$d7h7;$NV11}Pe(^1v7|zLMS63iaPul?{Vs;JP2QbbY+Nu^)j8H-#s*kfM=1m=kL3X(T8U0AexhbGrrC0jj7es52o%DrTGjK%gvb z9}s|Mc-(FNrCSzr+1rTv)v~6J0*pP<8w}5(yEgPew^H9Y;x#Y!2J|CV^itLOG0q-3^FAT08_=_+F zw5dZI~ds1{(&7ptI@EveGlNLy?LCG#^yJ)H~Nyj#v2S0F-PxdNm6L$9%5AjL^CDZ)gF zapQA`#9DiM`?xJ(>{|#kV>7((xw2)?K7hop$>a8Iv45E0z;DihOl%nI)=)V6IVkT% z1sY%#K^>6)@9nL`sgi+-9F9WX3YpUtW*0_$(+#u&*0!tyl21rpvBl8_98zc?_}vaz z#X-c%!QF>K_sP>0^lZhHXAA36sh5?q?wYYB54{(gR- zUIgmb*7UuZe~Z@& zQ{DC9FRpBWhC1{Dh6{RYfxy7B5rQXjl6a08fky2=-@umFOcb)67+{cz^a(og?yUjX zBJ*%(5w_dbi4EepuV*|4024rhegM@E_%uMpRXIgtDNS%4{{H?zU-)o}L?}*wQ$-tp zhly?-=p)(KAfY&=7&(B-`_aWljH8ZDHynEF4p9ijEQ3IhU++3RRftMVr1iq|1qKF& zyI_F)wzj(3F9!XF&V^G9AW2?JotOsS<@=^4zuDqmJ`J7?W@lICwJagN#23jlo6cPn zenI>FWQv5bsH9D0S{}zW%kc1X{O)`PP6c^yiyioK4Dg9N^Gb+=Z8(tGWAd`CYn`lH z(_Js0{&|S`==!VsUaz?L%Hyn+?o6(SKtYBi=V@&0d+@C0_7e?emx0XcwK1vG77Xpg z{~!cZVC79Rz7H0k1cfC?2cT9~0AC>a6f-0CJf>RFp~u&4Co92K@$49K&9iB%RV3d3FZVKzxxfvGHUXjuW*AdRcNQu z^KgEw3jhTQsy5;6L^p-xO59dZf8wfDeA3t5oe6+KVIh~dqKyq(I>H_t_OQaB>o+HF z(w)K<0p|}FV6H+}YB+IW7xYJ=;RGmqQLO9f4CI9%b7ag%wF~Ot-JsqK*&c*$_(Xx& z-~h7=AH3wiY{ye6$W{T`iAzHC`c$DiDDV~q8o{KLf$e+=w$%yZG^&DAKsADCdDx`k zVPO=|3BC}ocnkdFps{@Mc`)xW2D&OAR6xC!?8j&hOj0|+$R6;?eVR1(4fIbHK(#xo z9K0R@L5>Sow6tWpfe`?4S5TqmBL{_8KN7zd^hI35*nNDZVL}@W_1o7BSBcwSXwQ9N z1L0Q&1(1=VZr%Pv1`=SQgkg}i05b^c?eP;NF;m_rNO1wvq1ko=95%4}X&weLWhiG^ zK)>9-rtEBE7Q}n-Q@nnS`EXbr1BoG|hw$kbmZWYh9%E+5vg$E#T3Q zu3xMB;PV)uoZE0Zf$;x(z|hZH(r!f{r)j`X$1v$NUs8^uy9v>Zj!TgDT2tzw@ zrUIO_g9N{7U!yyX(9eX7-*@Ioan?^4f-}-ExdvleOX(j0@7|^Z{*B;0J!qOv%I~H9 z2vLu_m38tEbi)7(f`SmHhaN`FCIG?!xGwZ^dfW**IZ~DZJ3J$P_|nr5pfdiXmKLOv z5$bk0jer-ff@`C!=~CCMW2{TwoAUc3DD#)R7*u{F;SrZ{y+zj^DQz!Pp>mkTZV1)Q z79Bq2QB=pkJ&TJBY56Gg7MWKQQsNlm%E6^p59|mPEuII$c_cO&|yTc*M@3SP_26CkV$7?*)MALbv zU^sGNbgl(5kU zS;$7sQ0X=-pD>UIoJAXr=j51FAI-Q(;2oeH$7}3yS3oe7VjG(|F1-Zp4_yd!a{bWP zB`FB;GT@XswW+y-1wgKZrqBQS)jOtnSHN4zlUlD?sdkwmkU>&M^NyuFZg}a@tFX9N z{2P|ST8CLB{2ME@=3d)sF;id^3&fSXTXD)5aF_Xdx}d}NJ@8R5-EbOpn-BgYIPKIv zu-hSi1U@=lOwP`BQ6$*!?6UyzXf z&ig{_CaDxKbPU-BR_XO<`AI2*xe*gzCF^|(05rMA`yEdCy*=-TQBJ$4>{vYv^!B0o zmYbh14rR%;L$Nv9iDuxqLk|Ghom9PW`eBYNE* zSF!;sMMVUsJ>aRh@0Bz#pX-D2vraJ>)UJNr;Vdp3NE8duD*$y4BRCPCPea1-{ktFR zT_&--AofT?0w1>MAWIKtXW-)M)v+4LihyOB%Jzz>0_KdEm?q>pZKtyw~L&&h3?VZd4L{3gdt&vHdM;k)YJzuYCzBd zsNcby@u3dfv$@GELzjWcW+zs*{d_TXztmA~(!0E4eolBQOG?EqwhAS*0YaLF#9 zVb;Kq1ot~gC}H9~_QmnT$yE*j?|_=+jr&yR<{eC4Dg{#s7E@>VK^4qiM=-F@mIfV6 zzt>4n<%M?HLIwe_`qM9Was1uKvZ9s4H=R_`3=Y_#JEhkhn`>)8%euOjn6^fj{%;4 z>zLY)~Pfc5}@TZGLqbL&C0}tbJt}a z=&XW=z~p+Tb$50{;kMsbnanPMXxtf&+R<>rgp?E_<2e^#WN$alJp|qPx$7Vn4o#XC z=OON%R{UVUZ-F})cz!sU&r7W$OF87aiGxfGGAjaofZ2_!8(oL^H73u=+pxBQBKofR8I5{Bofw3T+#0;Qn zD_eoXkPhu0rgWHD`2cwIQ1_6iV|y7T^be#;(Bk)q`hNwUgHZw4C@Nb+Lqqn{>(!L? zTh#DC!zjk}#fPVkvj+fUaBPW4OLtJ1H)@|%qT0uA^91@m)RR;F{Zw;c2G7g+3#cP7 zUS&_c4A9ZgFjfU+_~E9{0Y+W$Wk$vcXpe$s63~KuAh8E+L5d0txnB?r9{{-;OrgOs z1hNcJ+Ph~RIE4J3Pa{4YC3lMCf4>eR6R?jjtT#g5+^D@v^{IKNs@F&OO7zBUHEub{CFjCMLW`&yH0)Fg3q%of>tsud*J1YO+$=q-w6-DUs7} z7>Ng=OU*r!V>oc}n7~0N^0Ew2;Gy|E?Emb|8q&dmJ6-v%g;xtY1q9I+0{}v~FYrAB z32OMEGoTC$q;EjZSuU8`AD4CQVN5&`9{D*}k10XtGWcK((z8mbc4B2_#Vs}(8eAo9 z4UOl%*r$bYr(wbrIWVLD6$)`Y*D$B53KQ+!T?IO>z&-`94B(%^Yybl*>*m}XbSPfC zjPQq91;(I(ZQB7!EKJ}5E-dDF;VCq1DlKZ4!2<2)MFPi5V0H?38_P{uxqJbe_-$!jF>Rg$&px013;|6yHk<;rInf zG%c>(*4LH7-D5h?-M>-{f*L|X6qlG8b8&)cIccJx0RWaO;J_mVbfD*Yb`MRh^-q6~ zRxn?pKcnXsP8}+RHP;?4hYpgdnOWx*^&fj!>Z;pBo$a>5BfOAz`0wpqnju{PSjv(% z$XJngx=@?pb9i~@Dh4=B8t5GbHqCp$07?O$ghZ0==OHMw zU<&DBR1O7p5oeO{nSBUf+0X8Y{kDeG)C86bB`tPo!#$J#?L>7{Wl{SDlvto#O~)L~ zhV3b^vn&36B@wp?iD5w~v2ZMgq)xGFdorGjU*U1k9{5gWGKm9hcL3$TY3D)&0=Jo; zL-(|_qH(3Zu3{kMA8sogfC0ickQ{gf?5yWu&BSbOI1)H8gAG<#@&w%mJP=+vF7(q6 zmqT;9a|5+&BCwBHt7SZ#BZg~tl)=@Y3U&$dJ%J?wVwsM$oG^dDe=8&geeol7b2)mT zBL$AYXb8%Hjb^G-`PpFAPl0PlLxFE=ID!vBTKSp=hOun{S@!DH&h9Q;0Vreg{mz6@ z7yvJ-VZx~XS#BAn*ePcG@mJ`_Vl5D1H^0ox1Q(Q4G;}%@r{BE<+9P~MP&8nrCITWJ z4kCl8s0WeZxErlq2&I-se=Z?|R~b}qp~hg<>SfB{sLw7h6AH7>h65VgcFY%hUfy!| zBsc+08yfi>EuJ)nDIU~E>@*RML|pE`TzH~!46&Zz>L^g86nOwX0E!Z*^O6Kp1@2|% zHlxA73Ok$K+v^TI=4gWH=nBjw70{k|OUE^2Ncs037GTJi_SyK(F*DbO(SW*bfg&mY z0J4r6I*y?14AO2o+X_llxPM<9$qW8>3jn2oZ_TUk^OF1nKpNl#R1TIVfHx-qKWG(= z_CNoRcWbhbwlUpprrC7iRntxh)Z*yo)L0lpg)aZeY z4s4`5quT?D|9${{8w#IT{&0f1JuLdhEoeJTHu-2<`%%6IYV{dX(&(5NP^PTYI>rd- z)YB~u8RGqWRg9RVA;0e?nwUY~maN|gSCP`b&fCf2fDNIozA*}`H_xBhMVr9f267U5m#J@T0eB=U% z>NnUrfi!@S&?ZooVNQJkmSN1xE#k;s{Y;sU&Vo`PJ;pzbJWPVn2%JJNwvkANY(X4; z6^X<^9C9ksQCR>X5o&5`ksIpjJe-`@cFl48I8L)gY=i$Ea%F4)6LieDp3Y=eCIQio> zUhc%Zt7wVD17s7f-!9MBVNiPY=^O%n^@T=hE1VG?^It; zFPxO)uogl4mVaYaJD(B=%gD-bn53Mt(x6sI7^1T8M(WOREMdz+&> zu?wXzz;ww#EWD`K+t~@Dyu(meLm>?wVYG``2?=eIDj+q|)9ple9M=Uxyk)hu;?a2@ zoOLk!dwV*>!3L~?&DS{jaxf(spc)^0`|886xmJwqy;+1i*)aE|OO?IIQ1-qw@s80^ zDLFYT!|Bx^QsWPRJn`v3)CSEU!q@)ihXhHD}f$VCAe`R%be@{=v>s5uy zwxJ=~o)Rd*f`%SHc`{z`08&vF{6t)NLZFj6fho+WuU(p{8qVRdjiDhm6BEp3eg~Ef z0CHsdYlH+?X=EcKkm;el@!Z_>n2ic-7(k%}Jb(nZY+$QE?V%!oI0B1WI8|q+rcRU9 z@-T=j?F;e5!s#(jqvPUc^r%8#0lsrKwF+@efA(x)ets?7?jXqv%vZ!t73S9ZN&Qw{ z`hxH32xQN|ZO}NJxSs;q7u9PRx!v3RVg5SG7v7z*amXl9ur+YYe^%A1tU=2IPGp#o zYQ6J~1_~;uXl7sz3LFCOZCK9_s#3)!!3Tq7Cw~;lGw8|I*RgeB#XRjlhL#XunD8l8 z>f3Ze83CcC&6T$mePZm~*9QYmpT0l`<#??)dtJPM%yNBxzHP$0%{A2d4B$m;aO z5yz%*>5UM+5-I{fKuBfFq3siEuTgrttPFqM|mEoQUG*ck(GsJ8I~L`Lm;yX z?2}P)&~!I;5XG&>$;i*opIZjJ3GwkUUiL15u`58U zlG8?O40FC6S5e$?aKPFKnVW-p0Je7~yq%#I+Q>v z`UC|xXzRe7QR{vOMbO4F~ymshA1LqyQ=X8mKoz59_fedqbMFosnLfP{R z6j0gNW_bPMN=Tim63QB=Ug1*a!4bsA=M1C_tlk;WL7~dzhg zB4L>ppMz546CD1Z>AO;%LwP6}otuuY(?$h{1XrJxMYbr8Zu9L)az@n5Iw zXv(tZ!^8h;F%Q}QS{sw`15Xb-V|(u#!UosWgiY-Iy#ILt<$wO8^3Q)Xtw1qfSl9lJv#qj+-wpUx z5q3#g$xGt!+!CUfWW}u5L2$&~8!p9*UFx3~QTO!lxd(5=x zTW|Yo_I4h3?1gpg-5tH1*u^D9ME^&XlFv79c>R!~5BL*ik;sL zJs2|4y|Qtjlzi6oO3h+@@|_rbj zKW9BYURxRoP_RL@G;>L()J~mNrPM0?N=Xr3F57?5V)Oe=_7klb&!`dnxIHsTD(T zcg}T9Gryx9RLniG8AIEvXh)Bia(qnr_mC7hhk@ewcikWwUiR?djd8 z(q#&By>b)pKMH)aNIMNpk!(&GUl3bSEEU^P4ft5ob z?_46mI~GoJ{57}ibvu>sv-7z$UM*MFw+VRI4-=BILbbjRRckM_=HR;X^^D%T;b5kF zr20~*!C+s#f9wpK{Gt(uWEcHb#`@3RcqzelB@@%(;Nj*R(&^}QIl;a@Yvizp-8WSw z^)erE!vP)hu!MeHF7MF*-(3rGGCqf-0O>_vtPmd2JZoLbHZ^xrSlS>f%v z&S4<#+ckNoK6*ebr{V+=exh235au5Mb9pI&pN}NWBFC(Ac>{0txB3^nTA*Y=6>b-O zdg?yIc=7;!tx;vn7VqHtwR>?&Tlxhmo@QIG`u1hhXIZ#TC?gM}d_3dljp&-kZZF<$ zPD`U97@BLLcJnYJiJ=(!kzsnv)%*LjK^dvbSyzvuG;?0k9Q#~>){hyZVPp@4N2UCq zG#&~`)KlXnQQ7lvCFzWF-|)B^CHdl3|7eY{@MRlg_gabbM;^apo?3gbDg9g;-R`mE ze(bftX^C%2%pF-oNGw;!Klh}c%h-BYaP?l>CD(Ji0t9DNz6M9XQR8;Hef{N3x|3^O zPjvZm+#)r9U9UZD$F~J{yn!kF`+NCuMfnOXIKhvaB~yBuD9}_NKmM?Iuz37Oa+N3_ zC0BHpR8wb!!L6oPe^D!@S%u5cBItJR=^Vean~E?O=7J-xGDkRu?HHfY*=dx7#TZN;T*vaK|N z@RBj>pYu)6+a-Q+C#pVUwYei)9T6^B6-M&tOhn)^$5Oe3w|q>3Un>H5ZRmUxb})2E8oPQ}AX>vPYqe){v$ zy=0a<<&A;K2*EjfEm^_5OwAY?O?oGyd2Ri5M{ON0w%m(?=STnaGaTG|Hyy<1A)kE8 z<)`ncGpM|)dD+Y7W5#;MGqTt()dRQgwWUwirR3=OdHB~p@nC+h9%vf+eNBW{dp+?h zUYr`4JgFXE(^I-c5>7X(@;5zYdSjL4tT;QXLv=EI=|Lm{8f&&&QtoXR+}bp+^3h(3 zRSI4hc-c|oK)#L3@*;YC2mcy%wY^$MVE)162iv%Q`LpXOGX`LOKt{{*?+;r}o(<_R1Z%UcGyeEYiqWW!Tc$C#U z*qJU1YVvz?rb+}$rMoQPIt8#ts`MW|jwt%5IY_<`EEe)7#Mh1YiHCXYr!czg?M4Ki zxm5(7%2^8Xh38QpW;vdz6Fwc=pD(FgkN^7oPLhb6C1c2+YZw~Gw3bKolC30u9J>n+ z7u;)#Zc?naoZ7}MzC5z6V!57ExJus7b-(HAZ;QU?8gCx6T=aHkIf)c^QGKJOef_pN zRl_H`o_?CNUxVhAb{ETM4epbs+`pI0|n6>;|tCIjdu$ z0S$RmDY3>WKSSG{vr!t4=xz}N?l-1qksC9J;o~_oUaJ2dJu)t@cRVYS&>UuCP48ow zn`$8QaGvb5VNtNk`9JG*ft}^Ajsn>dt@Py2W;PO}>R!FWVYN!oCO>O3rJ^T!3E$9R zPWp<7POX0(zV11invSzIvXviRHu5QQt$qt1G`t%{BkU`iJU-&AB+8GkNXxf;PKWoy zh{IH$N*dJ+FEhSOa#n`ZbO)_Ygp%OLyBahk4$+zdB_oLsN1VPT=RJB#&Js+|p(PUI zz%{S?Re+C;#EDOBK{U2gx#XVC&_JrxnKWY8^Yeb!YyD_xw3#wqrhVc|w&=_&qINsQ z*IW8gGNr3XzWidsySTJ-oloh^-8dh+qMS`pM_fLqN9EGiq!Z`8)T@<#Xp1-#)Hi7r zB(W;V73vI-#~AQW#Xg^3OVGM;E3>QQNRwi-t8JObZdv*nL#;fU`|tr%^+1xC6bf#$ z7T^6>-0b`2eR-lN8TK&h-j1lgW>yko27Z%l1yRGg(r8`QZx@Q?GCXD<#A?54m0u(u z8=9Lt)cR~#BYKHc39shKPh9J60%`aaoS;CerefK}E^uO}9%u`F=FMH@kvWOpf21Cj_00a9Cx1j})P+eJ+)~ zaL{x0IrbtOz$I)vq?jp_IVl|ybUsEZv zL{hh6+*F*s>SUS3L7=DUy{?pJ{J_}gwR7EI8f|P(e)46N)-iD5+zDX;g5 z@(z8}g8>>}zAyHk5GZ@9B#?hQlW|SMy=0K%VW_Du&?579z*$Iv;Pc44L33Gb~@>~=(o>b8)U{qHL8X{-!2_R&S z<~gUHH#aK5;&pQNY23iGa3k(wKTJhf#?Up5i0z+C*Evz1?4fk}*3Z-i9g>*0lujp? z7C$sg%`86-bf9%mXpQrJnyp=aZ?s1D>$PQJCI!uOMN&H{8NGwg@@xWxeB__*=?(G4 zaA_8cux6N$+LfvqrAm~UxtBE^xMSZOdE^0w1Sne7MZm9T*l0lLdq`z$+d z&T)QC71*Ozx3Ue9w%?=8NY47iSAW%fZnY!jl(d!RgeZW4ne~(gantJ?b8(bza6Nt3iFSu^qom&E4eXE9I;)j-1PuuSqzs{|V=`@KvXq zL0*wCiCZhq)!N`8S?TATEiycM!qfQvq^WrnlZ}H$+$?H${q+9jN6uOAt@Hb)Cv-I%X-V`SR%gr>KGdlRUtX6W%8pbM5NK`|&8@6C#t#$8Ph)7jY9Hr%*@>{O zSt>$FD{L3@p=`u&mZQW!y94FLeaJ6 z{eiBNTn(`}#yECHBP(94`N=etocA@yC{v>@<%~54wbV`X=<5!4FFtZVs@t(o(Ij&j zuV!lHBhV`hJ+N=&slKABJFrYAnQeNn=0aA*w}gcYR2Q~ZWtrszXRi*4Dv&Th!Xg-b^e#d^WR$c z-@@;2LHWP429S}G{#OZ8N<{SkSPAn#3d(CLCjU`R{`X!1P?Y{>eJLp`AtV0Z7nqpu zm{|msmYSv-0@~GxTkt;w<_AIrK}<+UL`Xmk6nPR7Vp4KC3UV?saz+|jN;+01w)3n^ zEG+Dtmw4DO2wr4i;g#kS6ah>`f{jO3UPesrlDLEz_DOJH-ie%y{2T?vIWZ0v4iG2( zfB6UV0YOcSYk_BnhjRgeOO1m^jf44wU_&5q2;kjf-|&C@!NJADCmv` zaB=YPaPjd72=MXY(NEy#2z+V+8V*q-W$< zBs45MA~GsEAu%cWMM`Q~dR~4(VNr2O>8qOBy81T_jc=RU+CP2%(((0M=it!r$mrPj z@rk+lg~g@imDRQN?Va7d{ewS;N5|Of!a?Bub6Nj+W&hK4QNwlN;^X7t6Jf6l2iF(= zk4KG9z#&RVqhv^Ad!P1#SP(Ita(wRVk0ckxjkeC-_8cIk=aiV^+Qwem-z)n+yRhK@ zt1J7@3;VC@nm~}_;lPK7M~zTG{5j^$3nUfD7-{yMdqQ~nQ_{+Pbacr?T$Mu>u~*jA z5hdY<+soW@!!Ues+JTHE;rzJ;8B`d;b>RB3Z&m^T5z zWlk;9TYZrpu`lAwe^^b1iaora_%feSp(N)_c=WO`>dBnEuyLYJ%b44(=BVK2OC9W) z)ITOoH@!YH@q{NZjMnqsec^e{!6@MN<%L~3oLbd8Hx3ikn)_{THVktl>cm>4ud*c( zoOEn`R?0o>YR|g(HsOcb$mVbESh)_3Z=IF*v%8}a(|K>x| zY981OpVJ|kw$5R+k_b8h91 z{IB&EH*a@Z+}}r}TV4FrB=z1_9-Um$?&C^!HsN|7sp2=HtqXyYtCb!a+cRPH8~fFR z^<}PQMMhn8cNT+2n?x1KROt+GRP8q|qm$=;aJ?V-ombo7NFBu~N6-FTLFLF;B93OY zX+QMOu~|OFNV%Yyg~3(2ZAtBZ zdIbhS@+VB;4e~Vx(IAAZyE<@SQ@i+U*VpaG{?uoL_pllL+rPi*?vy*~bK{XLx7Bue z!BT|IaE)JzYD9axO`>6#ciyWR7oMe$w{p;TuvhllTlg%jj}xT<9~t3*zJ{Ki+8y^^ z@%;%Tf3f4jZ&I7}vO>#^7d6xGQb*77+_%k)8w|YcB9JxO>^4_*W`<12=6XYIqtmBg zSP%y45ZaSCT^!EpSnF`_j{S0q07ICu+=% zwr(|Yj$tx=k}6u;zr!Tos|hLSj0w5B7xsS5w|iSnqL7nwCOvw2--Gq=hEl65h53#8 z`X)ujy!dB|^8CwH^HvN>LvyVounyfEZ^d_U$lO-4jr+g^S5+g?N3%N7n|!sj*hOU0 zLh-uxWwvC}z@F?J_7Pp?j`QcX3I2TdehF)4#TLmg=2ho|UE4Rm6fVF$Ub~#s^dPs= z^2gLCMZe6KUC)V6iOY^>qU!W1ROy;}3n|idKHE8K9z||MV_!;0PCIXU)o9~IQ>fV5 zYk}Iy(kmvy(+c7IEl~>!6o=1#X+M<{jf)g%YtT{ zRh{d>-=n0td%(kSdDIduH+-QQoe)IFdhN z)z0m8nEJfs{K?U>hH{orpmWON(wtEp&V7HKm?rh#GpiQP5+s}@uUz8SUR>TR|C1nU z5=PQR{cZE7ir+v#;Hw!yb?m!m-Vg^UR|)1N%>1 zyTW3=+Qnps;o~9=4Xyo7+WZ4bxzl_rEma>eM@}%)=+PP-&^*2kfySW+% zf7NfiX3w+yBL>1wwO^uYV?Ud9ghAL|y_uKy)mc&v9yq$Cc*|L7zg%VA=KA#JSgOL~ zp`hmS*5@m=>+gU6Vh0lbdwM%JY*3?jTRT*%cl zxM$gDAWHKnaKlJC%KJJ>;k0EU22X2(dDG%Z36-8>05NEXozbTcvx1M=uv6;?eSo0D5>83LW8~wV$G=%d1Jdc93|`b!v9N^o8y%) zT-TR)xHQ?>di0mfgyl5zosT&$k4)#1U%uNJ%i2X-9}-iFQbpV~v|wV3^7f!s zrTBTT+JZ?C1!jWbDR8K`S|(k7kXC6qIo0#7D~hD+7QI3aH}+V`9F_B$dxCpZ?qlUL zF}P$R8m;UV(m&E;{3%^3qDZOK#Xm-B)T^f4SoY|8wV>!Bt`nYh^w+^=?R;1NJI625 zN>scY@x;2s*pjsZ^^mxf3nqI=mO~rsR{G0k^=`hNCe_hmUO~hCMCz(umy6?2e0eU$ z&c|7AUEO@o%!u*u2s}R*5X$zYY9otlpjn#S*!6OZlws!&J7@jrt4TOjs&?c5PeGz8 z&u^$b;39ZWV>f%FMt23vwMAZb$6ec_ej+7RFX^jSw+f5OCv?BOb!FY@MwX=fMq$68u4n>myhn#l4=G;P6Wj@Z}n-?e60Xl>eNNau} zvd`0O+k&;KdF#)uoB5fPs1m(3yQJ-OvfRyo1Et1$kF@k(>gj|Zn-pRbRi z?B-@DCRIJk*GCULJKqi1^9YK^^b_u%jfb`3>W1U9R!?lKV{gWA4OJl8mi;N+A#DC7 z*{8PI)uv2_R>ujhov0&eM@CfKk|MK-xwt*{lw7}@=lmjlv!J0yHrCe2m!7p%E5&lV zA-ws@W5N0-x2JpO@@a_wSt|YgL@KIwGqC)Jys!IYOsNrjueF`~bq-a2&i?*BU6XK> zw+;0T-TV3LB2(>TZt)AS(;wzg_zR>BHb0uv^)P&@KP1_8Bcs%-hWGogySVzRd=m}N zP(nE~@54(gCMG6x$Okm^W+}B0YrI7l%kr8s%g94E^m7QGB^g{cRJvG}wvDoknZ_Np z8#J4%nwX4Kee<|&oXwYIxyj|@_Ok|s2syS_u2KUXf^VLuQFHc=%KnZfl~%HXRg~XVt2e-^%5X5Rxr^N@^4NsmaC~RJ7o;rCr^)B<&)n(p>d(>I+ z+ck%dN&<&N8}me)t;&?L9-7ZwOEo$JxnGUiW#B~8+|X7@yWQgzbyS1|gxcV_65IIHzip0Fj zFQO4T27FFE2(EMa7h<9jhmzpfiluPKTdf8C;G=C@HcqS@PoW?qjdb8~e*7 z&*}n=OLFk(Na6dUs@SUy`VDW2{qHvj@S@?{h#c$>2@ro@3m0BXNnN7O0Qc{`NzJE& zFVE~58h)8;XQ2+im|cO;+)$iEVWo2)9@Xf3b4TO5rbI0vs! z6NA0OwCDFI{jtxEeO^7M&+rD4$mg-Ip$0b{A2$a3eu@6R8N?SS>}%nC%!426TN3GO zS@Pm#ZiScmmak2Oj>W`mt(!mi_WJ&gx&S{qxC!L7>$Qcf2iI>9Gtq_bJn|)vepjGL z`tF{-5lNrr_y1Z=Y@Zq~>lQ}{uZ-DgN_<`D>1=-V@g@f0`~I$(bkv^Yws5$|o_V8) z(4@6R(xv(4{SJRpDI#O-bR})Y^B&t`5BIDb+X5~|Kctx+Go=6HQm$NQbViePyT0}E z?0yy1y6g4>B(Y5v^#31nZ-!G^Q=F{@t4{E*Q+48-6mOH8EfvoMGJKOhL zOP%>;`(Y!|v;B9Dvu^%u!AzA;B}+jq%i&Q}o^zrQN3ws*W~-0VhNah`jim<->dHHM zixAB^zu(zC`ctA&=I8o)zM@%%bjghQJ}M7O7I#=moLX;kd*2$3 zQsw$tdoBLcVAtzHL4l4pU*HJ*({r<7D;f6tSvk#;b$VP~27@7^ z;VT*i8ux-y+)3D$m40)YtvXSaRN_mJZsliwx#q`>MDZOJ z){Rg5-n?L0=vIE)p%dM=wHya08l)g~Q*3=F>fbj9*`yt&PSnI3c-USdTn#6p^(_${ z{lC1Q#%(J6OdXJWw`TWl{QTr3xd+ei-g51}kk@s6s-D6%GkUQ|H`~Sp?Xr}(Q@idQ zM9Gv~{?W)Ok+K!#iN0IA?!m^9hn~56+u_lZ?Pv9=7{rc(OX~pzR6+v{NoV+feLO9L z(&w09HT#fN8iQcWKQaG|LF|zYC~RH!K#N<_nN0pj;6@%)J;fka8S;>`-ZLnNxJ?@d z474GyVGtkIS`T}i3{~3`xcx@tY%mDL9{3TS0|v2Rl5ezayHUKlfS%!kf0{n_&U+fc zsioktExTb~NLkpOjdBlqG;edXJBUGSaqFX{%}WaJEk>!IsC>pNe3lT0tY z^>SAK!yC$;$Pxx2V(TajB4`M?o!*aqLpm75|8zNQ6D|Mu58Hlq*h+-v^5;Pl>0%IH zT-+|+9Qh@ucx+Z?=ScP>X_E8B7$v*Ry#lJQEqN7YZYiiFRScr~X7=%a?;jD@%B)#4vu54*bzS#86A{h_(RbJ!wv?rn-zrN}LH^T^<40(O zX1wR4g+Ts5iFBgcDxQn0^0!GivVnz9<>D*TVDR&nj@ z81&@ZV!qybzp%`w#wkX`ilfx_TXr%0Z9y)?o-NQJ+kZ}+HDzQT>wpvXe>u~gvjS56 znl=h}=Ml;OwEXYa@!mTb<2=tAANb8w#vIGLeDm~8xRjoRUG>dgOB`&xN=GA~A~rzt z%sW3??hm_ERQ8u6V??{sAxVJ;9k)rSygW^b%peI)shBFrMY_}!s%M@wZ=I4Q%(YGKC^)8slbfo(?YinuR<*q(A7)DqY;Ia<4M@yHK>T zi1k+&Ox5!dx%NQ?E+bpk8<>YgS-Gbc3zn)WI~@?IK^&Du!DciU@A?>q1%@?F0ZB^v z2tl0hTKxf=xOnhF5jrRo;5R-zzT#KB%nFkIz_fpN2vGwM(;|crRGFzy-J7$GT1FS0 zZ0s-6`Z2lD2dz*j#h`^ik!fTP@&~=qAtc%Asy!E!B2k)3mHEh^5GjOePWYunO5fAh z8XhNew?$LJravIYwtpbwj+xv!k!-6h%fR=gdzXMcQ3iTeeN?m z=g5IKa+Iljt?RvDfEaf~$>!yXqL)u1MUGA1FovwTd}5$|Gp16p_M%VyhJu4rY8&@3 z6@D@Q^_dIp!fBoF!^GC*NL+S(URY%BdCh(|jgpQWHSlWnk+-%y6J0t;)L#nYc8ixZp2{Y&cO*Q&Yk2D2ac`&N*ZAQ% zS9|8lElX(7Q|NO`H0w8X;>cXYv%I8S{30-U$5k1kf^m0}rKkx>FJNGaSH2myb(`}W zOo9EX84l^Puhl`@!C{|BEdKi|1005)+Z{pX*n0Dzq{`5F^9oB46^f_~d< zrFQB_IrFE|d(jbai2bp0^Tu|E(xN5#%r}Y7uW7>u&o_$jm8pycb3gH95LLdtAbmVI z3rV>s>KHarae&tz!+iGQ>8hXc9W7fZTths`2W)f5`BiNcR$-*}tCa(76x*BIToNvm zUO|SvA=;#_BoLRhhU`Zgot0P9WRvuUwMP{)8c#Yy5x4kSHwcD^)7tC!mAtjhTGzOs z>0WKW-p2*qMsLC&e>HG@hwt+2$BAhut{cg93t2#=0v;B`&)zS3&;IU-UcJ(_XrtvO z+)~J1(D+$x7=xC13`y2zzrm=Kjk^`u3dQ$8q%%BG!>Z9K{Zr5zC!r!|hurfxqw02^ zO2rH_$F~b+_L&Iw6U!}WA$!zX9S%^iXruAMo|H!K)1K^=9}FusD{6J=trc9OXnTTG zw|{n)e73XO)Ro;gJe2|&=8<-02=iOhS;n=I43h#H#o6(X`<>*(Nfd(6^B=6c9V?It=~p;Bu;eftCsr| z*d!R33G6vdN?_jP%vJ@{bfvsA);hnv5Le|pRS#YBN7%k#Sj&mH9%S2hW9f-bfcoo5 z%@T!3W5Vh;nCODI`~*FYbuv!4zWQvZFsGqa`a-dFpezMJP$HRwOlw-P&>V=hptzbt!t=2v^wg7sh1kfVB*j$cR}=0tV{Zl+E~S4pPrB)G zw|O>wiiydDN#)JJ0z+D0S1rS{Fq&*Do|OW3I<)=dU22xCjIq;8M12m5@dvy(>8 zOkwv$3${;Vnyn{w-UKj_hZl=rcXG(p)-2J<(&KG1lV??MX1x|>?kw-bc)n>3YZyKX z3mS4JtcZ2Ztj%l#|BEwpM@)=Zp02uc$)6~FM6kq3E?DF#E7xt7w2)MqJC2StV>E&; z+dS7t6?ipD3cCkXIti0QPx-}+AWR2Su&x+A_~ge}qx40`-twDy8PXs5S6cu$HJ8TqcxN=foE3qt=&8v8V%-0`FtO&!TpL(iwNmG zlHtc!cib?3>OmcK@cq*Xcg0C_(;wR*bk3u5^=A{t797>JRf{9n$E0V5b(_8(LSB8| zM@MC(8ji$4y(QVr;(5E1in;_xRN-uv%XWffc`_{?Q#Xt-QVkw!yE)Su6l<{$Dmo<@ z%+#HBLbXQ{-?vg_6!i&+&_f?+Jm>U~(lHnHzthHZ>FxK9)XE^v6E{*mH`t2xK*>kU z`bJs0Rtn#%GfQexEKh0Hklek+2vI+y3JYmnH_P)P*q}VMQ z>UTb;N$8pr&dSMY|AebW%woz6@4FHG#N#iyleSISCsi&3PqT@+dMM3@v&ot)z6sKBzv!6F# zUN#Wwhw{nr^>O5;+O4kb)=};$nJV==+cr;8tX2hzgf2()yfiAf8dt_KyG2aBIM8-6 zK}2~r{#HjqpU1^{8pl4lr{yvMsxRr7hGZ5v&n|49ahrDQOYL#ax|UQGv%`I#a`7>Z zR__(c`=qzqx~GVlc#NGBQ?zym+><@lX=Y%+iBV_Upt&^_TO(601y;-gZLguZnr{ONKWqhg@>N5!H*F#|kgOBqz=hddezBsH>~91yIpbzmf<+nM21HoB!fm72)e zzgn9L`fT#E&rE=7G!^O*b*;mxzx~#Az=HnK=M$Tt&$PGgaeoZ{wSNr0-_OCfqCvKw z24v(PcZ7jEe(CvZzzcZ{|Dff+w=9`xXZ!K;{ZnjNi|207k;cq(5+$cnoeNjGzc^dzk}`^jC+QWelH|M6 z^Nr;4-LH2^&c!_12p01mbg4l{NkcomN$5%~>AV+eR+>zMD z1Vp-@iX54QDHVk1_M(~TDp2=`k5sQmNHTYJ(RO0eM{-vk+esjtsQ}4kI|p5fs59kn zV-f2zZNY5qlK1>)9Zq{P?a&-yZO(zWb>G6qJGX~oJn-^8}4BgU5> zPHC?_3&|MeFKX*av2AK8CGp>Ud7H8Dh)qaRbXwV?mRE~qE-brN)py@|Je2HSp$OJ# zWi89CnZ@6#E-fwWe(LWo+QAw+q!{mTEq}!FctemEajt=O$69c<+owZ_m3#gjjsYRJ z08Q%ziy+5kCWl3roNy(fw&I?Y9TR^1&0tXu~mYQUK~}H zMxhBk5RI-x;r0=*J=W?Y+Wy;Bj`qrrcLJwi6Knu2qj*e!PUZxNco>0F9=5;Hi(Z4f z0iKH}ObQ?^G@%BSG3SEH4EES6L1lu-8aM(p!L^TYiWj!m=2)m~cpzhAu=Y;dsQ_Fn z>jJJdWnnF7#JPfNE+1VZc$OJomF@ZC-d1U&~dj$-r> zvL3U{ne=s;zJZ)#fPCNnAI&!f;iAx1!i#OxpQV1x|19;}Sp4e+{~?x1^_1wV)8U&eWaa_#`$(B?vtigR3FSiT@@XCz2$6LFvT zn=}Tpl{5HO*-)e;0ZbJBBl>de=o8i(8P@B`@38FJS6gl}w8|PixoPBk-c!e}RJl8t zAEC)GNw|t^0*1wE2Z>dR!0eS{l%ncO3Wf*FW2$2!*RS!JV*P^MCDsOvP8yH4eLaqS zbYCGpBc^$srV23;cWhOwD%gx?Sydp5>-1YqUdUT9Y#%Ygg*H&g>g+svh<0;+PA+sq z_CiZ9BwOKBWOQ|}=TST^?RGjxkmN3wQpAF#9N2*>(xoJn;J(Y_`Y zAILZ8iKu7ox>B`gknJ4oZlGo%*D2rpd`4$M_0CMoo>JmxyWo9^3bJiHms5G?^OY-K zLp50)S-aEO1CDi9NK>iM{a5l%TxLWVL5^n*@3jmxxaZqFjydXz`iuq)`U z@(D8MOafGvx)p?{l`6Z$d3RzNeZ8!ThS;~3ic*zo*QtoQJ9NJ%PwDW$v`agty0*EO z_E=@LPm5VkC!5SRKR&@X#w;VC88cS*SP*k=Y(BE2v(`O5>%vP!SxwIP+IT!0o3#Xx z{=eF_=gGd*B_vPDi!tBTlN@@`BgCDqtUoDs+VE1z8UDoP$NccMK$N-vW@F5i;@H%& zy6ZVp-2OJD$;sTEZA0OZtW!ez`)JH#?4$(v!^BYrt>X zm>!p>*c9)I3ZEt{5kqx*Cvmc!xKhjD*vya7f=PnigWad?A_p18N=P`$v>hq>cQdHS zW*rRZwH9JhVxBWNre=)P(?vQL9@t#+e(1Q;3OUtCoLh911|;LgEIC;t)+VE~Wl~aD z;A>y6I?;OUwqDw+((Tmr@0nH{R5g5BgS2m+Zy&gf4qU$&Gpfin**hx{c6Y?Ob>*Z8 z{fWZ&B`vfGxmw z&Hy9YQS8v8{;oePdd;{8KN_1ZnY2+E@JX+c{_W#^gurp)A!hE6SqA42=%F1ajblSi z2NKKmAIAh7SGn%SmY*yAE~egd<1c0(LW!UmB=zMjLiFpqxoPe;GeG3eY|&2^EkWzb z9pf^cEeW;ir5o4S1DN`QN$I8xK_7D`md?u6(D-!D9*?9Oxf`x>OZV7q92agrf2f)91NS9$ z$sVa%ti{K737TfT7YcVG+pj4#eWS~N=_yM`x|VQO`zI%8YTu5vc)W--emQx-yj5(w z3bC|r&@{?xd#*0&n`Sm>)BQcpW)}Yus}q14B^?kjvR&_@V^XjGXEXn7u2OZU{fN@V zZovbcqQE$>N$N05*D34CQbpft=Jr{ZD=zkWk}|$^wC@@)=C6}7uTwjZlWl#P^k6!K zWCCCn=!9-FB`!J^>CXvC`Zu2x5GWH6%BI2SceMp!#iV8%uTvDqHBCfqQ%8N;<5lbt zde%d^sru_5t3&t-yQ>;`Cdv1v!Ek)vlpVdyL4g!HG9um9|;e4f)DcKP! z;Nj5Q5p$hJWNP9pi;nw~({EU2B{VZCDXX0#loA5%VVvSlvx%MJ7e0bS9oJX7i?qAe ziNT|KcNae1oOgXq`tn_a>p`EQH0^0R3TJt_fLh^r=)I^PwE9*t)h2BR4cGc%Du^e& zqhdPuv#02S*;IA0L@yt8+^+eDclzz`@nzjC)P}MZ><6tCP&!R=GK*~Uk2V=O}#CTQM#tHn_^k4Le-GjSF*P9S>n{H;^1MaYS?q|TH#B%h7UJ>z66lOdUHyDHR@ z^xIhK+33m%NonI@=Y*Vyd`qSc z;RJ^6Ha#5BaSp=Qs4?u#@8u}%nGitY74ffl(OVXA4r(cmY>n+tI;INC^{5hGk3M|X z5B9yd{sL1)=yhJuq4u5#qEsMj**Nt~>%s1>@a=Tg(`;Ge?lK6+_h*?o6YP_`;2IKB z77R;uET?-416b)w%RL+E-xcTB4fjduVnS9|w{nRP!h=t9sejy{@#~PH7GWkKVdezd z|6gVcqH+{3ha4gFpJX+q?U*NxKL{89L%gM4NjA%x^YhqjXc1U?rKNwa>$<(ciFvH? zXGp zuRCw4RPjWw;`TOEJR_-T2x$pK zPRLK7fLB}>#(M(}drwO5WWqV81EV_h78i0x2DX;`xBusa2r7|^;PWO8u+*@PWaysq z-~O)w2gC(6!~#NkiH{B;Tznvh6Z-3+z5UVU1%F+xCO<}n=!HJptmHy=a%f&)c#U)^ z2p;X}(-51?DTm^{A0I*n(urWj;_{%!X#`b3smXplnx9WNXZN=z{?goFf5_ag#eY5e zA71Q;$~92P`52LIx@^o=+^GvlxT%&D7eDtoQDl}uZ#l!9C3-q(!C>c974Y=Eg&+a) zZ^Fobis2rM^+h|!PLjV7452X>)eALC8Xb72)Mmvh^6ma~=oR8jmY#*834PI@Q6&(@ z%mF`~v>>iF7TMu#z6gHkB}9rlk!;VK%zv>V3daKj#LEs2fHE^39AfQTVMUc?7 zph6lO!lKp<@j+-uBGLigqE5^2=8R= z0V6369UxY;mzq5_7xEBOl!eAQ#vDSZidOecSYr1ETMr?P2%pKQ5N(42O@kTQotr<~ z1D}lYx2rJ&N_Xy2{Tx4UhmrV4`+6EW6c2b$fvTZ@USI?+fR&{n$C=PL*S9#ObrHf@ z)QtbnD({LL<;!c_+U&;Z)W&b_GNJ7((Sk$Z5rTYc*}oHS=Dx%L2asOfCNdn^}u;$ip94 zt6qNzu+4@^L-a4U_tT8x@1}RQk{+LoN2MP^%-u8F2;CJMgsuunjSoXNR|w3dLjYi= zX7Qdus4Nu=hqaQ`wHpi%dZvj`v^0@-PnMW@c69oa%5kze7&)VK4bD27A40U9&n%hI zzJGGIutY*YN9f(8yaoGaZPX6-M*z$F^(Qm&iq}XmyA?{xSy#_Y)6QeR z1SMbCiFwd^6GcT9*?H|{tqdut_0l%Ll;DSR9TU!25bNpL9Xzrq^Zg;bF~C&3Jj1u? zW+K7;EN@H9;&T6@!2l)eepF|(Q?cG&>8(-n#D)6jO2n?}z*Lr2N+chakpbr$S)koxYJ9Y>O*0>@K`*a&txVQt?0TW3a z2!MGR$gw3PK?IJwwh4@0L+T*}nSBV^o3T|@-o8(|6Q|#_gq$#mM^3))Mz7-0hY+T$ zxYPA(rmQM71eTtZ1Bb1?POJE#8MBj3P}oE6%l-zco=7vbAHgLA8X&498mSyY(7lHc zoNdUS)*Qh*NS<&A0e4?-nNCk$d`rG8TJ;Wm{YyKKX8GS6ryD^<$bb;KG6$Hges3rA zAA|A7;6yYl%P+nqiB|g&qTOC(S~Nn5QS-TaIe3xpa?1PR>P9AYl=%#S1=$SifGrIm zqjTabcatTWDl!8AJGt>ECMS+t!{Cs6v4k3+;U-1LBvMlf8Y_*R zxI+1FP5Ed4>dj=Q#`Zbl!R!CoqLC0_4ykP?unj&`88QeGJb3k`l=NmNbTMOUZEjo&63KuyrifY#>RPO7Fr#T9UZc)%efj(P8JhGog!|@Pec42?F zgw`1B$2xl-Q3HBm$4-m^5}S-q<78 z3X?^6qjhW_-yGN!e(FAK7XuXe+sPjh7)jPeY?V)DlD1iS_>S_hwC%=wHU611cRV&w zt0i+<-RT+iEjpJM9yzclG7rp$YrH{P>_riLEZ~HF@Th}2@Ff6a(icGwW}yUOUD#l$ zB?v6fBcDDI53x$BgdNxccq_07-Tel`S%xfQD1qI@0FOC#1DL^bgTa1K+!MUze3Aw( zD^wbwN=s)@z58F)mmO8V{YUlionl7xIJAEc#ap>c#$5}{-Vt1tl1x5?yZ}cH^Mv7b zUi=xX?+iIW8OaAaXUEpae*`KP(H;5YxM((0%`=CD8eqbrR30?X%PF>qPlI%@pSvH7j>e~yj( z&(=V9WLR5QC2IV^;)iAQZ=>pI>G^Rnc% z#9c@lHs@s>l{H~}*cm9|UO6{f{?O*}SI1u;^mfL6vUOTWoO4O8o z^X7GLgBfEim+#I>z#-(08x(g+aXtCKNg9OLszM0I)Arg~YH~O7@zhcWcK;h^G(~UG zf|vVe%ZU5c25!wcoo9nngdRP(GQj9K+UXRQBmW8}%dLdbvyEMOt zO6e+nHb#2S=@0_qlYr{v8WW1T9dkw2jCcJntyzXfGLU$;*0QFt!%io32Pm4l!LFFs=mkjBDX+)*+qYsasLot%rDAh!DG=u)#k zE=~UBDB)a^{|tBy#1Q}z6-R)u@JA3cbp;X3Ur#`+e5@=UR!q7<3+s3CGF(2MopP2s zbMfYAX%nkt4=e;Z9q$}M_*w$R5^H>eU9j3lApJ`ELeq8}lf3UATxk`KwE3zrn6?FS zzH14bdwy9sk-jjk&id~W_-LCFl`{Od_ZvfuGBCI8FT3Ut>s2{XX!ga_+&H)Q@0!op zu{WQ;as0+MX&#I3Xt@G;qiBO)G2=RW_R~^gJMzK?iTCRqxYMNgWL-RSkeOWJ0@@)+ zjHN4S32X3%C#WIXF^ucO{r6n!DEOlmRJM5^W}bzyu%akN2a!&gsXJTrWowtE@gi2k zIQfOb&1c+JRM*V2zETn>ygBft*pN@tZk)LfgSmtRUHQ9nI2ydpBWw;V+acT* zwrLOBJq;*0x6@?qPwZd-W`eA4Jt5gBmC)I+h@ItjmWiQi=C+`}T5tM7W?k}CMq^^5 z@u$II(b2riB18>O-ku?_=V#?U)c0~@8X-K)94cJP0j%aXC)wO#I%b&aQR*Id9%e_;a z)SdWr?_6w=zu=?JQm5v>rYE`qTv`R9>hh1lmPY>TBkgSjESSH}FGlf*icSx%`R|jM zI{w;}QHv&%a5`g_Ph+)PR$q!-!)+)slZHFw<`VkE91bB@Xyt%2R9Gbh7o{U7jGVa% zK5^XOeTl*$$fg?ODXf^y`s61S1i!>sbX#!@(wY~@TdJB!+*ij1*`L|c=8gi&N6>gK zmcc$3M`o~|OrR0=LeHCZqSvk>8$3n*|HlP#6epo|%hy}KmIzDItzSp6e+sQLx}Pdb z@3UTNvBDPv*%qC73NjW00KR`*fy6UPxXir*;)I0gL2J>vbV)ylxceuFHjQK!+68G) zQ_<>Hfmmf$bTZ>tI9@JY(8y*HVJx87B*bf&?C8&#PN(7RyhM;YS9S=|yL1TYbj}=+ zcGd_+PbVy)w>zPD4*x1~6n@54pr;u&+LtUskY=rC%JieU@#AEh*pjS)dbf6gWb;O| zR?zvn%QxQiwGvitE#0%0VtOX%cPzeC+sRzt+{Li^b^4@vxlF0pU)c z!FDsiFd3g1SNBhhAp6(}GI?2j1yPB?m*ofKJ5UPP4tdZlG7N@39662b1R1vO0B1g5 z%E;0D7dWI1fASFVHL_$U#xf!1wQWksC%wuiQlUm>?-N=28@NB_AZudU8YVg zP~VZSVR*8Db^XeR&!@eMt8Y-C1hs)XohIwN&erkd+ocqquhVN4;qu2XQE!CL5UqgqjQ%>DE7 zO!E~nSCcu1+^yZz0xC+cS;SAy?8ubP(Q~vD4R_k7q_*@Xt38=&b3c8tb2fi@yTZlN zs3h`qtV!4#LdU7wgfH0Mgj7+LSA}mURQP+Zabl=c)E%!+Ubro&?0-!xn5D4rmA|(7 zF|m-n?I?ULE^|Pf73BWtgX#Ww35lmEnhFCtQr6fCbQ;l*1GD#UU#(8NDNZ}n_pa^7 zlu+)|bhey$QOFabONLn+1#a>bsZZguQPYOxfMuAA&hGPJfxvN-jqFo(&qkGbvH598 ziHaWPV-nYS$@}3+5u#7Nc=aI)$a$F_$16_huTL->1^x{8ob=r74s;w!eSe4s_DYdg zI4huqi|sl~xS@9m4Tlgv)Q%)(j}WyS>x68?FmA@BR`AuBv* zaE>#&kwL>ty+-fx!{Xi0_pdwHC+LYq4EvxD@Z7YGgWqFwaM#dPow*4W#b()gY}e_C zci!wt`u1;X$WQ5i3`hDwRh>(NMD|H%WM|TLH8#?0Zs!&&tM}t69t9Oky(lCs5>#Ex z@IAPU8h^((`??!9v>R#4(n&1enct4_z{=4PEZRs1B$oq~ZNiTA58+nD z72X+mBx=~8B~F?t^RwG6$Ga|OA*C=bl)M@XTbFghi%xs!R`VhQ>H&0J#SFCyh(*$9 z*}AfRbG*9C$*k&3`NSa*+?j%g@cafZ9J(EI3?{~KVfYJ#s;K=w<-tm)vTf@LmWfb?6Z(LHOZ)I`q9Sf0>WN{9IZk;U! zFp44Wzfc6K!JIi#1U$Qmrl0uV84U+sLb7Nx*Y5mw%C&UwXs`6?uy)mQ_tc#{$DJ7I zWIeew%3ESjeDS;Uun~GI^DSo5iTa4JE4}$k8G1SNMo;T2;rMU@E1}Dzn@Eq!x*)#d zQiJfVZ1UO|%$u5Kqw_@tunoMeuMxRs*DH=b??VWp$ko8Nk~wA1e!q9Ua5u0*e`9`w*V6FrAP=hzVe=sbH$sjF+Ut(o$X+%f`3~^^b3m4+?4|wN7nwlf z#FFBXFv6S2{A`?v>!}Y{s8ndw)So>*wjsN$PsvXc&DK$q(9}QtRrQ=a-#lc+-P_F6 z1KKNoUuvN}i^hatutK%}6xk&--n?gs9L$wlTlLyPk>4l{VwlAR3e7YyC|Xy&b>n2& z&ndqptEgq_uUu9;uYbH(=xxCw4|~Kjm!U$&XwvpT_}&b9fEm%Tg+9B$AQ3fi?fK>4 z%Tgk&cK63dpNZ$~3Vk9Gt>UszR?y}w%u**{0Om%CArH2SFnU_r$eP;Ds2?4V7c_iX zG#jx?+KZWSfD?xXq$2y-cR>=rc5m`cWWf*g-1jj8o(DRxW3V}AbqMi@%<8yJjsEYy zutlGL!9d_%bN?Qc#*2|3^WA)AV%IO;XDk9b8uDY|I24<))l z8kvTFk0o#97%dq#n!GX&-6AUi51^}0W3WsMHk~wz?7t2~KpBk64uep7lK)FjmWXJl z2^9GvEx+FAytc!))u4?w6UK_ikB$B3QqB58_8RL5mkQQD=9-vgD_U8duFI=uV5g!p zGU~DGju|_9*CDO>Y}?wNOJBy1iL&{zHD6~%pzndX4!L{?nKT7nN2~_9bq!=9644$) zF6c`DtLN*FoHwih+|%gKBDM9fts8)Dj`0C9EHr|D=f81)kvgEIo!O1A1&h<1UIP_I zvlF&O&&-UpQDBzi9fHgRqZ1!P$`0RqTXU0(>Y z#&8mar30RK^*vBjL4h0Viug0a$lY&9oC0)!E|<3wmS^K(;PM0Zzc6-!fUj3puMz6& z_uc0{14Wg20*0jlfdfbYa0JPO^Q)(h^j;9DIBtMbaNfnSvs?x3_gN+Ehx{x6c8vlB zYJqKf0T4r7$InMm`@cALSVMe30C>7UcKCH>z<(dh_0``VB>eZ*{(P{$JJ)%EkPz@& z-#BoWsxQnDuKqO@5skiq;;O(T`TK1C(cAPKakI&$=d%&w()RS{KVP{l?y0zIZXEIC zNh~t@Li4&(Ko|~_;HIL2?bL{Lkx~8^&8iH{UseKe{*PN%@r)*VYG%xSd|Qko*Rh?m z3hdPWY?bj>@77%q;C{#Y*rE0599UZ{^D;>~VQ_e;Q9usloz6$neSOy&ffLZ)`eM2u zO`J+aDf$_wm002@el>kQN9qdumGjlFWTR<@0TKGOD~pRN6uHi&2~G((1(;*~BnL@={ee_%I9p;$CRko@8xfX}^D;To$%A*Y6+YF`n?%BRzOb52Gfnlq zRJ*v=?bus0$oxoIQ}yxXmIR``>xfUO=0dD3am9G#w^?tl&rt#zV_SSrAf7e~Sk`U9UZnS|w{vnN?RM1p zP%=pm6%YWIOX+hG-W_~tn7QoZ=yU0b>gDAr4z{Pev&B!^`!N3U6-$|Ur%C;;7#8W| zT_g(IPDM$<%j4Y;Lzz+{-&#*Yn6Mk?$V+qHOme2pZRWj7RLkY9YY{MadSptoE1+n0 zZQ)j#YE6L!G3k(mdqF+%!NW_rW;+@xZEVMAO3YB#gpX-j!X66fD9`u4ZGOB?YVbKZ zOODZt4r13RakXIH(MiFhGn#QZiSOb_Pz66#E)xSPt7|ANZ5Q2?o7ugZn;W(NzE}HA zfm@PEH>GMZ$QZ?jYK31YGk_(eL|a`GhtZS@ac5ZGZ4_wOc*b!?MwRzYU!Zz@wI74- zsg<0x%6AmWisD|>iuw>H)FWm1M1}pvq+3M>&*jG*gO#2MU&rm6iQ8k+{F2)oX5580 zt|(<9+y|Fur7W0stJ%AI<(DFSddB(cncnM$AD`>C=^F0EtCxKC8O5$FpN_unPkTJ@ zY%($Rvr`vWcnXTNJB1jk?LaaeP!H(idK-QuXfOIVi+@^Fk*p8`dpXH`QrQ|dFQHpLh zFJSm51lEa$Q>_(pV9;STp3`5-gToT~&6cN_jTuHs0<%j7>JTq+Vu?H<8SE8|Rfmu# zsMZm5t3`$D9Fu((lEfWNI3IN3KyevndBEg>9CUK2*x3YIoMZdSo$rAKTtNS5Uz&t| z?>dA8svv8wrX#^2@Ap1%r~%-=b-A!7?-qLbjB~4&L6N?!!$Cxe?n)z1Icwxp=naWX zc>;wzSX0gXLVAA?x$bX3TAu+t(<#y&|KUIOov8azyRkfknpg_dP`u4TvW~9RPFfhe zQpoTzFB>D#mF2j}_VCN{V$!Ydxy>Avu?a=L7h)4SRY^Z9~hEw1o%QHzO zqD!9pWy~b*@-HjIHJH~`k@aQWaJ*14p!07Q7hWK`J44o47eh|5%*I}-bWzZCT|TvA+4i^UTW;;d{~L*O=^aqwb9q%8ExONm{IM+Sq6*WTejK(eZJeOWKr!fLlO zh0j+M71vKNUBEnNKp6|u(z;(mLpMH0Fnq{~twse6B408XKz}6L?w>o+iC#9L!!5+9 zd`nssNii|D3H9*olKwEKI)d8Lt5HBN8$t1|1&Gs)Hum33&y8nbo~su|$f~Nutf0qZ zx`H%R&S~uGRoS}|q=D2>5%S<+k7N{ZEiBQ5EfkjL)45*`Gh?Z7G%g}QVEcq+E}~M_ zzq&U$yk+2v+)&(7#O@f(>A^vC6ZnEZ!<%sq%$bdDC=GIN5C^+|q*WiK9sU;HOj%#W zg<&YbM87!&7NwXQoB@;;Ac8~453o)uo}sg+ut_M6W%ofD|25jT;*@mX>9~)bV!^eO z`eX_W!x3jx6zw>$rI%E`kKI{VZFkDS+}*RVb1I&yv)xx_k@hb9fHGr)V#$zW_iXfv zy(ikZYkS*h;!G(}_~%(pvRAjCiKEi)3>K4C*{amkFjQ%A-Q?EN(q7ofFf+EIuBtRT zMRlKA)s09!J*m8f>}U@V#yWk5PMlim&FIXUF71NM2rc?^@Q2b$>&%soF_ykoCogjr zaSPslXr1_lx*H_-V73|Hcy9~jmMA2OK%oF7P>$`%iTe2@9dpi z=U!Jp*}nNwo_DM#KUnSXK)H1&xSsG{8*OP%?Jc{!s39kHP0YrMen)Xqa(SBw@j3r< zVOKV5VScgy;7K1!&Ty`fFKXot!3X7r9Y#Y zxku4VunE_nxv57fwH)TZDRT~bzvXfR(M|iGqT7kTiEfCR$|E(BRQInWpM`0FUAa5r zb7ToSRrD_##42RL3sGvbZ2pgW+6+CXKw^#lq+)J=u}R%z_@oea!*y;zD)VD zto9u0;m0_kZ|~CibOilR$ew{fqi4f%Nszpk#P3n}S+PG9NpNb@Ktv);XS`^moSPt? zFm1)+S5G#tJ!fLBAlDmc;B-ic)qAx>b+A>2NSF*u5K>-^5xH_=VB|@|uF9<`34s{< zC=;&YwZd<$6-1sj*y&ESg8H@5HEFVfwLo6EAM0UKGpBU9uOQV-pydm(lR z(ceX3sjFPASM`n8;RG4pb08#81(H5UY^RVTb3jByjv4|HQCa$hMf8sF9ce1%XSDyx zzxV8pR5tXH%Jw$_?%-bpIMyQp4#*vUXmhJi14g2n)&$bB&g%HRh}B9ZzCsbpQc4{= z;jXWMtSQ&e6_lrnifk5;@x3H}W?Vgdme1;HEQ{tNH0T#tWy&5U?E8bQ<8BaN!XreU zTnI1pI?=Sv5>Ve_!j<9XkS}ZBOKftG&-d5i(0&JztgvSu#tNlIt8G@jlD>8+x=1tR zQyIURF?r_ErX9;tx>3c9g|_ElAEhZtZe+7)H*zVvgb)tbd!HjPS%M48h7-z%kPG)5 z?5l+q&ER|Qw&AbI^t-*Hirm4<`}r2RA#bW@fnDWL{uQuEBK~ zT0m~_|3d~#p#HlrS&9Yx&KAQVjyRCa{ZkYR{ypaQ--}`(`ALcN>e(ni!4Y}&FvVAL z@uM57%VZ{H5zI(O|2xNSLccDJX6+OBLDH)<^Qv2khR^ft4hn&xH(B zTLgVTemc@n=3cBGRR?I{QFT54QeE684q(CC_|u>|5dWJJbosy0r(fCtH%eP7*h@OA zp%$X(bL-k{$-TmO+0(Snu^hJ7`DO@3UBB)Haq2f^M^EE-^Dp0T+MDFhb%Oe5250E2 z9Aw{p;M2Kwwbyc)kho>j4s$J|%iH4KGq!XrF1t(W&!;P5IyB`1 zi7949nMyIF^piPL7uVn2ZleBhV_9x_YatPHhBZKY0b!Ol`fOBBTCkx$RkQCE_l00F zqHTie!2nM@yWc7UG>p}(0X~D7&}iHjv}X!w2>-kh8ft}HDjj98XxSKRULLX&vZ~LC zAc{B!eyH!5H7UA;sZ-~gt^AoA-`MVNvSs6ECAc2|Jd>?(KRH;IjY;tR$ez-?Y}?Hh zbZ$55)Ax0S5pGs~gqd-e65qEk#vXS9Z!{_zSYGX_3ae-G8V6Q;hK}V`7c*A013Eh4_XG@8-2(=@wi?dB1YSq<7oy|@Cp398s z6^dZ$mJe>Oy?(?tA!vg^X8Rt7haNPDb%PD*ew3H zD~GzVy)oDfMQ-vL&o7#)Fg7m_^K-4dW8+%>Dsi7f0`Vm8-|xxu&+ybJM|)pg zH9fjRfBZ{{jmtBo3jfVM=A~z4A<%vU^Y~-E&+VJyb(#~nDOn#EJhd03vaiYCHXvVM zn15|PXq>$oR?#X@$N0?VgULs0*d=W*e;#XvEs@+kjcVXy60H=#OAKCCGT4Ovo*2Qq zN*Ls?MB%tUCPi^U1y<}}Yq>7~D!w}kERSa^feKkuwFXv0yIK*5dG|CFq?yu1Pj{C7%B=f$lRvtp-341?MtF>#%+8+jI@xGnx)waTswy|{;Y~d6$D}KokX^2Pf?8Ue&fk4ZL0!d~3 z1=zjKQ&jXHW&U#6fBIO*SAXIL$hVG~=bnq5TdMvWqhhZ$s-rIHNkMFA z_04yG!3qCo4g1ZpL*~8&sNgQ_&j;TbF_^hS_^d`yebKyA3PXcT@fgWI(p?ac=`v853{=LKXzVK? zv#5~~P=5Cu@>KwaK86&1#e=MF`@SycWGbXZ4?z{WL}D-l|AzXnngKm(1?m60MtH4^ zfw4$Tw_LdxS~EfI_bkX0!W8z(Kxy)=Dn>MevvebgBfjSYldgIawo^%zfxAIm02t|} z|0Y-U6G&D4F!x$8pbDx`?X#{VJ{U35V(}ao!p%?c0c);aFd~uZX63J=I>kfbpY&?! zAD>{=idJ%mPm;i~T5(NPz=Ms@5B1v*mKr$k^h$WyPu_Ooz0+Mr;NKE+0%ukVJ8ckOiJWU~?q;8O! zE($Hr?k*Ea88v;q%d7k;M2z-RltR#nj!%0ECz38HDG&;c>zJ)-;0N~=0^IynV!m*& zS?}i!7K-Bfq}2Dw5>m`y1A6_vc(s0XQepAISGi4gK0X@TV36<}(MHzB?p|PrEv|q8 z^pt1G;{GV!*)QN^%IP3_V0J^fvKCx}F)C^ON@xjysB4S`9l%Z>l|(wVxKRGkziA z9K0Q9Pvucn#O4og+pjq=?tm|;s}Z_^W}Ck zSL(Jq5XBgmbj3E81h5iN83x!0Ov~RJVPBXgEdw|n{Z5VEHqqf0vN~t2@wC0%2ZZBN zJ{S?DDJ_kvr2gHI*V5YY%wx9Qe)AR_Y#6H3E{ig*gXV9;)e|9sjWsMz+dQ|mzTe{4 zlxc`mP1Ax9ol)&NORLMf;EGdmauBUdH{;q!(dXCjT@^uu?>y_EH&$c_UQ!2#a5@uX zY8DaaS2+jzo(!5Y49{ZUKZP}Dq$6US6n!(l8eEm)` zgQVHQ=T`hsA7T!c0g}sDoCa`k`^V}&CIfS+GFw_2B*JPFQ!MKpKevfh-QwadP( z4hRzPSzy-cM1bn|Q}fC#Xb(taCyj_CmqoZsNanhV|(7@;J)bM2m2hr_nO~tx0Lk+$vJUT;fx6yHRr2O7&pWl zk8QQ8%zy7Tm__ayj_#exTo`9&u`xUSv|eS6AKn$JpyeR?p5`nANNno4#x;H=-hmd5 zw7(#@ha>sh5!ya--Q3b5EeD^aozQ_t1{3C^B6M(+e}DUP)AM~Co1X! zhRJEAN&HKY$*ge-lGJH5=$*X}Tiy^P<0HY%i6*_mOFB!C&Wx_*CxOZFsUGf3P?+n( z_d&uueE1Vm@{4Z~vtpPVQX5>I%xGS4q%4ku)3%5)Lpww@5JP`iT)D<8C|WGO+cyGL zLgNCqB3WB~>P(T)wZK;J3EHgqkY9X6*C3m$2@ zgvFvij*2q}JNjcM;6XgCX|+cNiaFrY_g0|ak6eqO6Jhk*L|`=|pj$WE4v*aN%Y}=U z`rz$%e7dutjcrmmQwgUGSC#1V@3BU%%xyS#DV>!F1TD~SGdoX5@2EiEjP5=`<&6;R zePd=XN@&XxW~Pko@xLg^P#D64+&G&mOn{n(ksX!)uS zAxpORb6)HnIcSkJbGj;L`(ET&Ih9;_07GkjqV+w$s^^bxI?96z9>yk+i2 zy`X0lJ-z>AtI%eJZpyL#p~1&G3pK8Bnrk~U_z}L~7yG(sYkT6$G#v%QDM8UBq+S05 z6X>E2Kbp4#cm%By;`llYdwG~ALYLB&hDA*ir?$k}Cg3|LuTL>tJ`I}md-?hA!#^f< zee$RCHX^#T!au)LVvG5~wSTB6an1Ah*p}F_2DT1{D69R`eE3)1B`mY9Aj5^?!O-(D z`;gdc9tY%v7c~U?UU8Qn{VJa}oGFG45`OAL63;x1>?|A9T(8g1vhr-Kcw-3Pr8-~~ zYg46`+R{Y~WSXf4@;Ke%Gbmao4BW~(GSFSBYX(6yL>C|LYcHPjT5MW6>x9ZhEz;5% z={&HeiJO1?RN9~VV6#`gVfq`yC^ycV|6HQ51 z0PQY_E%QE#wFvw@z1qtClSn{^c3HzJ=8#YT7!Ey%_{#bKjL09ru>2`@L*A7KRHrla z4ldulYxt|z}4pXFUy zws%8@e;GY9*Y^SShei>3gePP zl?0>x;*3I%7A^2_ME;WF19WiI{vMi%PX_WZ+Ff}k?;FDEeO*%f-=Mx!VqHX{sR8%%%t}cUAcM~rXfiI~8%x1Ejq;<4H z&}@56)?a3IWF4*G+N@Vr%Oa(p6gy{lNAxDFLu!+s7V{a-QU4mdS*PlpM<#E6Ms?t2 znJIX_R9qN`tlM$J00J)ylm{r-_2)mD+W)1Y{ntLd1>G7+fQTyGL=&y|;lgNa@g*Q} zPh3|k>H90aysPOOWJE1N#3J-y*_rFuGm7I4G& zbyJLYd@+~qNdsS69**M3yK{shBJ&w%Yx&5920veHc%OcbfLO#iayDAiw?ZciJ7^m< zC?{t#++aT6wy z=t#I;Fv;%y_TC%%Au~JKb--9Hc`){C)XaSO&DkBC7pig*1TJ*Sf9~BgIE0yQ0+>nn z?_s7MHI`pcrnF^1SHBNEZ34I=_t}k-z`|PUaz@_ka%L(ySy#U-}Gaqf@jRhc7)|lyVV~2*e zw9kxmzfU)T2JPwYr}@a^CM9ncL4aUM7p_KhLOtjK;k|)K3GWdN^(Ts_&u^tuo=CIG z!Xo5*EcH!3lz1=%@j*zHI0>oM%HWdU(=wiM8qFP5%AG-al5IKNiC$`Eoov)_LQuIp zPZtn3${aK&RNlWqLjH9%DK`R6V4KWYLlb1K|D38F@HBWIdVO-Vm3i%JZ`Asd$-|xu zP93@A(nq?kML52^2HPC?3dTUY^kg)>&q>=R@d}@J$P4o#Gf|+r`s8>1W`y)NNK7Xv z>Cji=%bNdhA%&}4|5xh2Vr zZ^N%4(%^_)EQldeK$Y&7(*W{#^U%!!J=`%cKKr5!F6kqe0Fv!~#HE`_@nm6)8)}yW?U+Y5~2eU;0vfc$Vt$zD%V^9tlt2t8-H2CniB6BWPm^C2E%(+ z0LE_BGMMS80a5hV1*jN5$P8?punSB}tP>nK+F`_cvpiO82?oAGzkjvwR=iE?2>#uK z{cJeG(tv>ro_Ke@$FvSBgG-ncpvO~zV zUZ~uYp@0{!Pu7c7tvQ|=FVqh6MM&J=v#n6Q({uke-Bcg>xl z5bLo{d7OQbW-ry0y7av)OjS5^#k>#;VtD!;**)-BC+HTny{Oz!!ZQHg&0PfOGoQP1 z&~5Qz-M4M2lCa=i3bJXOv;!_x?Lh8+wEYQRWVe!BvR1ZyNa%Wu=>Y)(a8o|2pz(g1AB1OB*Vwbh>q2Cu2bHp$j3PmbA+77g zdF2~K9WkIQzvI$N&m|#zN8M0Oyd!MN5&hw~P0W=w+6a^k!xa7ep1*yuha^30t3wdh z=e_kP6NDbGi(YYqzRS2i2-2ym@f5mWj!dM4l;)5}tIul$9%T{+>{Gr6Irp zKNux|G4~>3o!c#BAMX)~#6#o`nd#kbWKlZ4&Eel*v%wX6feBU7FrFv5lg8Max z380?y)%fInhMfZf9w-h1rVZbOrHIk3Gu?=_qgH^fpQQj2HRSg-oz9Z-{XB^NF>Uu#m`pjA$4p zJ|a62?Ppx|PlOVZ4@(v?RK26R*=0rWW0I#A{qM8RJ`0kR0}c!}*;^z_RyjHd{bkTn z28%9q+&h^4yg#~ZJWz1`XTib%8}Xnk-|Fn>SF=7^i5DG~F?u(p@@@O9$5eq5J#Po9 zObl3{Nax)0_fI`z{f^3PR;2Yf6=nu@2{!e3ZS}xq1Tm+IneUm=yM&n1Uz`1XK}#TT z9r{TzZzjgH=q~I;BK(+)^#?3uE_|-sY;$-vxlVmxo|+;$@UeNM5~p2CotouQ6h#NmIUP z&etUTA%^G;A-x^zvSeV&Xg@q|yhtr%;IyRQ$e5S6+`^sE1p(+wMz2(v6ce)EP*dmN zNS-UH`4-03BJ!le%p29+nIo}jO%ww6Fx;AW579LE2sF4KS6b?lU+`vf>;m;ssqXVi z!?|q}8d-@wOnEQaI=ZEOy)1GER&ennS)}XI`U*bokg3BU;?z53iW(V)m zks@OJ8}nLnM>0)~@ZkWbU@{rcm0MSZD@4-SI6LK_4I|)Y#LKL(}~0j)$=F zee{NNz?n2sn@Md?D&NOJ11nQC`1}w4&&21P7PndrTSyDyQZ-tV=0gXE5*IeUSbi2$ z#(LQe$=`n{XJ%oAIbz3SJu}4Jo*yOJaQ2I+Zh)ZevJUYZf#%JTLHp6hI+gdN35D+7 zLwlI8qo2`He1oKsBn*6HpQzm{C*_c}WRe3LPO2tnwOTN(pd8TzqNAq4^#Z||yn1$;~qZY<23=ryNk;d&+zlN_JgBU!foR@n$ zzwkg9y&LHeSxe4Gax8p@EGN_5Xz<19FwAAf56IeZ8*Yn7B|#&S{WM*5uikFY3d|0v zs$}xnHt|FU40vg@TC&J&PtmpL-;9%?SZx(_GVT@@qVvohd@RnOY7raczRvJfb z?bk7$#V9ODSC}Uc~4-(VR}VX`E#D!WML& z5R`c5^3l}bPk>$U4A48aphw~1d#kb?c1^Av8CrJ=6gdWy)N!E&x4ifJYYc*f{I)qo zQZ|HL7vVHz%^_NiAvCGYDnZsBfV^g4kPLUPZnz)&CEN2@&?!Ejk>}4GiAlOurC#AA z5Gk!}f#{d{mUm@Nfq)=S9ry8pq`)&978*7T38AZShh?l(X*ZfJYrHUIq`{o?by?wO zH4kJr$U3ARiRP(F`U7du5`z(KlfFGyzt8alb60{t3I^P|EF#cwFD?!nv#-`o**jTX zQXlDY+AV(B;8fLoO=u*fG7dOZM;|2GEh2@M$vcO%-Pc5$qNpN*-hP@WVEw{fdSFl; zi7I}=^wM7Ej!>(TRwK&dg%M|n<)__uPM2p&mR;0~JF@5^2PGw z%>Uu6MZjdaHG;HqDn<{{XKr->6flAO3D2@b8QXZ4=4m%^$ug~`dzk?jOxB9Ns049g zP=ccqXkSgX-@`!+&nIZ#bnNE zg)apjK^vKQyHIb%fMRuq=?(Y6s`jAwgQ)OA{y$K!nBykTMMdo&WB? zeD7oDz;aB%cLA__$S}_W4D(yqh5s4kEg}CBph8Z$ijC25X@tm@Dgza{LdJ!xDGR^5c8^NCI=qI-*+S;DSx|{Se-13*Q zGwR1O=+1c4zEC@oh2sveDq5RrG8=ZUxg{!YzweWY@K!qr?k!>&EBO?pTVGiN+hrQ~ z9dnZz*E=RPj=TUzs>{w6S(;6@nFP4p)#EBS(gs6pWw;;jva&;-nBS&+Au2Z{hHI=j zF&JUAz&|Hp_hyvziGG`C!CEu6ax6LGLwT2GQg5{ByKs?dhh3{Ky8R-YIl6tTDglm= z>wJ-{l9TWERa%W|n^}9Zz*+-O07`yth8Vjx%}noECv=)iQ+Fp$xAGFWBunaUe) zapJMQ<5@VK7ZKocI{GV>pRl`s8FpV0_^u0OCX(QjanMBl+Sdi%9F1Z7 zbFDb>p3BcBhY^%$a5HH^Ag!Yhs+Rt`%W3nxl&${#3#!3GcZQa&cjWmWIj7OQno^50 z{{}g0FKeV6H*|VXndRc~nwODRs4x1=jUn>Afw)8DI9ycYx|F_vyas8T&Y$(O%;WyL zpj{%G^iX%}_qy;u=R1sej2wyrQ4i|^vXM)cWZ_N|wbg}qDaUIp$ZK4m&JZfePwHIO z7S1LWxb`K0ol-qA<_n4P5HtF{XrCLHVnsk^b;#A6NZr@jIXH%ae&?F{p{4dORBqCB z<3H6RIC1g`bN|Kq35Tm+`7hW0jmhfw|IxLN_sqB9?*F*OsVFP-cuwTQ9-b?60iXQm zb50UM>y&Rq<|&7UFgnp*J8xrY;>OJ1dWl0^!imuDKNAlRd50HkG^yrz)xuYwF>;M+ z>lm^RouW4$>?<(0DMp`=O07#?AW$MdDxR);8Hbx~-i$Kh!tu{9>#+T#vIE(#ot-_k z=lM~~oN9jCmrviFi}QOQl*yZT6ebp zjoOYA`cZNO1x62;YFcDoXX z?lmW*U^wSi{5W2+JhU3R!C<1dO#+hA4s%^T7|uoRk3Y=mZ4-b0gPvH3B`kQ%SnE?~ zsYB40@%Gn?RHULlmR6}MN`{pUi5(@vsonc89}rU@)$ z3r%Q;%~J?Sksr)6PzW>2!kY))crCi{;j&~=D~s7Ai*`b`3GjNEit=im%=Z$~>TiB> z{_db_wdBnPl<3>NUMA$0CEp#ameZ3Ybum+mTrGY6*AV$wC{y=-1>n33fvgm@ zJ-R2tdQXoM!xM*--b<*iqhp@}WWG8MXF;_=?#Nu2SAHhFxXC1wWgu-HnIaopQyps%lST3ygZL~Z_S0$CJI{(!t$x_@4#S6_R3 zi7mn~igOIcpza_*ud%QeowUN@-#EqPz(o3(v#CY_2Ad|C`Upk+$c>@O4K|Imba4>DVJ>l@@M6jZ|0K@|APJRYUNjXeK#K`?RP zXfzRz4LcM-i9!!+KQb$4LbBe@HyG-M0-fm_kIbg1R%{{_|AK41SI`q+#I+g zAX`T&PQhF7o|NR@6WfN=@2o&Nz|Y0I@s;Nxl~r8d8tA5`qHPeof^z zu@_*@lXj@lB+QMlb!=&|ani_3z?ZK`E5_7YyiSL-t-7THME?K66`&k|))4y}fWk$M z9?+Qob_JB+3P9@KkamMR+O$lHEF*p7Ytz(#tR=N-K^t@w{x$o?G7vIun7vKI@FzdU z{~`Xp?N+%{;*uGRk32>a=H-B(+-snZ)M?8N>*izlp#Pz)$OWEz$=x9PlkPiAvOHYB zt9OREta{KP+4_BCYpkSlM3dQ*f@2b?N4GCjrNh{U&&ep%NHMbcMymq%RG_i`V|D9LxRnZg&r&X;>Kbzu# zYoul32;2rgsuOI`MSDX#w`ux$F@DFaFB5usE)ofu4Upt)Fw6zUOosQ zG6X3Cx^-JEbc+V?#X(MmopuhqtKx{L15r8Po7{Jd7g6^JkL!8IWMj)zl*9i{@fhY3O?^?dBuycrZM>#MMFoE~{ z%>uU~h8nhUWe-oc+s6J+E;eC-A2B6{!AWh#0Epq&3xodk($!Ksq`E=A+UT{2Ma~MB z;{S54uwSnQ4M(!X7c=G&-1BIlBVg z$HMB7g}^#%2)46^2y|w+gfCUjA;AowaeI1BvxuiT06!~2td0R`NYU?m1pk!LDm>3z zm?CB%`ZWU8gP85yZxhy^y|BQ9aaIn--OO>df&6eg(MeHs2t`0CJ3-i^VKeeklp+nJjP1@Tmq2 zlf*+=rhn`h{nvH>g*@<<@Me z11dBqRG2FBHNV*2tB9{ie`b>_Z?L$iJR2B#om1Y{Jx6Lk-xtm)`9NlI$gWQO(#1N9 z-p@$|_cJroZ(n)8zLh1qWgJ?k|FId@*F6j8VJ*No;#>n}Jk|4=-<-=kGjo6P1-}3e zn|03V!y_X36miYYL<68d?WkSK$e(>d zR#WDnZJ|0M&YKRayk*?wo~O7d;YtM)G6Ex5Fc2;V*wJsoyvhGoY%gkw&WnEmVo0+t%n z-H+C2a~VVWPP>0JBCw3*a*!Hs0BAM2Kc>l*Z=6kD!~0UCtn__;JVo-H0#SK|1%psc}O6Wtv3tYI{AB#!!R%ZEMwX^jM|xBvKE>3H#6<*)BU%V91Of`~`-ftOuyK}aoV zM-&Am0_2Ziu|GEa^G^QJ???agKJV zrtPBC4PMm3CvnR6=S0Lvm#^3-(JZ?1UVF&YMguZ*M!0iKCsnL4;xS;vasVFc5ilWL zl-edM2OP#jzU=c0K*ec`Z(M2|%rk@PL5*9Lh1NO|L#~?#F9Bt$y%KOjkHrE+>Z|7J z!D+xwJ$yiG``SleLV?`}SRV#f58iCsCM*5Z9=U%#o}Re-C3n!Ipf7XcM{n0)O_m7oJrCp=e{ub47lwf9-wykL&#g@kW%~05@k&`UjabYFelgS zjdc_G8XzqArYFZj`)qJ?bMek6ly~;lSzu0_#r~x0(T0KF2HcQVU9L0Zjl(2L{bCFz z`~HcbFa<$HF}e)8+K~BkSR1^Y>($Qi8^b`nJXh4e3CF6N?Wz(7y@1tI?2v2gujnU_ zn00d5w(WZ=i4Y{>m0-J)^t-Rk?>2>h>bdz*i#q%~X}p2+bsfdHJopCLap{4Qe1m}L zw^{@gMfEN5pEoWpl{y-4>`fF?6+>5-QuF2gCG0?`Q{eUA|l08V21aKs%!@@@2H=3VKHat?2OO6R-yj=o6u?dQ zNS+>!8dMw`^SjrjE@eKS&Yf7@BRI6@jQ~@rNt=J=+}U^#uutgWB~U4T{PB&%TB7VA zt>E&f1iu^q|6cyleKEBKwWvLUx!-TLIWR9~&LIfv z$~$njx-@7OnS_eAJX;>Ny-?7H6cUnND|j#$3OR{HYc7oTvn*qLwsLVBjGAjtUcm!2D39+8j%(0H5pf!MgJH!={t zjqO%a*|hifwZzrDuXb2w#kXnBFUG7@cgd{~Zoxe17rO-6RR)2vg-i|L1o&LA3q97*s`0vL1N=hBKX<_Tv z21aHZcw4NGDZT6pdp<`6Ek|h1ROW1r?ylv7@rV@dixuod;8B{R8xPhl(MZF1*%~e_N@-r z()As)B9mT;B+IyE`n)c>CdNoXbP~Gy98_b^?VQ!-%i?L5j*@vKb|y2+Gm}`1Fq<$~ zNBzG2Jsu7w`|jzwM{&B*;mEkvFg1!XG?{3+&;9Ob$t0quYW2rI8(=@-*YH=dL1!Iq zW6&8XN<7z+$P+}Bk_41P0}91cym@POrI{b_w+dp-Hj$e54bM5zVtV8$_*c{J z-QOvi(x6id^vXEnO?bucwVDrHa|Yxd>%0+`iPEYCJ0hU|`oC1L~obxEHQmnOavCZ&)`xt97FT*OrFaO?@s8R-G3s#^BUKJ_3JhQ04MP1Q*}tnGK~~A+k10Ro@)Ez zLgS_4EyW(>#}8*IS>FTNWLyet{YJaJ|Mc>eLUmAmq06}-@`;;0VWJq(gMC_k>l;K~ zFdJaML3e;VydO(6X#dotGb39Qv;8tR7McG*aR3At@H{V#T+Kf2rgx$ooBn0_w^=X&GALfS;5 zf=M(28nv zn8hlEHg}@6>$poFIc$u{b@DaCRaP24rn{4OsY$J&LR07(o2<;KA15IV-ZSsF;Ft!U z^P0qmJm=&V8fIAoCRz&gx^lRW!&RGea8=I*=R7<7r_f^-c4U> zd(HC5`|DTTZeuX5mhGUa^04C+%c(l z@3SxG&hP10BI6_N|4H!+liT^iU0V^=x=|4jcc34Ztj3!d~9O&8^k|Rv9Ckh2ge$C z5$}$v#8HDH(>mz6D(ZmEu4(~dZXI|x$#2s*W;r#y5aq-g*KV*y*H-pxdI-7tM^I4% zk47f(Eq>9STrjZB-UV@3xfO_00Jx+BCwU=y3XZJJJ)I??CDYYn{JBVcrjZMGy>H#Z zo%_fF;yi51r4Xe2W&m~QLpf(H?wu|4&R;ys*g3HPkL!APiamu>;9zk_gz)31?ev)Z z4Gr}E=L)HwX~ar4XTC4{@%m^>E1NZ^O;Se*CF^|TGdC8fkV0p^kTi-zw8zvAuax&H zeO>ev^>aRBQpP-x6uz_hD90jk%lKUV=iAIRA5!0?^yafNk||f2n=-v`6SOdX#!po4 zGRv4Arj{GnIh_lD8p++^m=Y};Hb;d@?@itdM@Yl;T@oR#3wl&;6$%Y&q%Nx6jDDT{ zH`FOsrqm~FILQSV4%Utv^_w~eZs?BW;|dU#4r~NkSA|Zfh(D#6gK7Fv$=wqn`+QPY zE1G2%LOM7r$tkLbJq3MZmZsF9qYLY;zCFKg;p+@>D4BiH66#l|8ruv73PS8=0`2WezUPa#FV?u*1|H7iCt@@N(dX^WW9AIC*kE(o3aP-T z&ZMQ?k&yWr=V8(YpmG9c$2epi3@a3iGXXQ%p;)&#lOJNu5fqh4^`u?LWoz|Fx#fxA zP24nQ0w02;FFYyJi#{hr9Pmc7#h7oJ6CGdro+<)ZZpps$9*wE#n;Fqz;d5j6l!I7WA0eUY0-0 z(7-3dfSeVIHfu4dyTDvg`49iv!+PT1{gAHoB<2)J*XtxaO6WfHO3FlYuO2fg(0pM@ zGelzdP&CdpAsur{--n<(}7kGm7q219;wZ6w6*W!q! zW3T$w%AOZ>IxVv(D`EHcBx@@kREZnfeg=w6PI;v}FR{AbK{4d2Y-Kq|Y0xt*wJik*(}nLUBCGj+8MD85R}W ze@AX&b0@szNTC2)LG)^m2EuV{*?=i7#9TtJVP^{2Tpn=EEaZNt5Dg83ZLI0KeS595 z(Hs2~yrw*S^CNf}&HP~NdxSn#9P+pa`7Nb+u#Hs<(H0UsKcFGoh-9S3*Nwiq8nhw@ zd+=(3GGwj&?kK%fug1;029>Z|cv3Sj{CRYqI78iZFX(8~kXVvMUhNY)_Gn9DsK#`E zFct>yt$Xt_Im)b{fVX|{cB})x!l6WGMfZ_5@re^T?{4I8$+CJs3LXkLh_oFvk1c7~ z4{$V29^a((;W@S@VSDCv8>Q?e|NKe&GnpbMMa+TO`r{{GeA0F1pCek1UDHB*2;9tb zxvB}7n?qTBUUy4Y$;xw+ky=m8(d0YWP`!; z!zK2_vOHN|Hg-0R-2JHMaeXoS>d0QyHA)#JZiM#wcbxPKrn*G*p$JQX6Mv~sxx za*OhFv)3F16`5TIL$Q||+dm7RfnM8ixpVsIkiqNZ)dq^JNXQSJ@@$+;`q#M_>dI~m zKc$Nhys+iMwd^Nt_isV)JlX1a`p!)IN@BhF$Tu~E{X-HtriwlHP|njH1nVCXwC#T} z&i*S-^QZ4e&a4Diu{Lu0C4OvB1cX)>gEU~TUeR@R!y?6l_GI<3ffvtsg9tm(@)ugI zZrqn9PLiPo@L$)J4q=g$d52u?cFj-0Qgr8JnJ*ItF%u|(!rvJ;64mS;L>|88>Doca zo|eYWHPo&e)!Rq!y@H!&3Rt1yofdZJWsYoZ;ZgI7@CCOoSvhL;)0YV#kDfVY0WsEK zEI@y*Ni_TxMym9w(XBJ#@A@P6_CfWlGc~Qj#&|9F`6UHrwBfGgzXbKaNw!@1@9H;& zfmDEM!is?8y!m-E#f4mrCTdzS6<=-66}Hhu4d`0>3T(~@ypxbgv~(Sl*=!71z$kZo z6rVR^9$gCsHxlGvFV(EU#Lo?2X+oM`H)zYJ*iPFEhwh%&)2T%W36J7Qbs7%Nbb-*6 z8ib%30I!IPMBoU5%IQSAjR%lvkHH*G*k=v>(#H2+?HA}09D>M0Qk%K04b@Hi*vLtm zbyHgN;?BGl9jKglbu$P1NpHx4%u4MJ{f2y6MzvpOG?5+tWa1O0@_Vt=zzmr=E1(+u zH+^7gnlW3cbWo~44Efd-#kB2#u9 zv3Eiw+;W1ml||AkL+Fv3OcMNbtza^Jxye?P?HA~UFEt144(JK_l0MsbIP^|?qQ-bW zAGv?$#@ucQaz`G-(a)c=wxxK!&kujW9AlXTx2>fdp=^`q?VZKzqCI@A7qTa9?I)j; z>}2G3R$QJZ!-lGXDA7mANarI-qPQn)luhRgGim`2SMDbZxods*b#3-tzgG!n=>f-S zpFhk~)FJrcGV{OpnTYvtCh+K}OhI0W9PM3rRX4HTq~58@+WYw~7gtixlY>ar1LMY0r-DK~x_;SVfGbw7y5!!B zt6RG6Tm?a|y@()!ab@J_x=bE#Z{yM@FKoMFr=RAZ4DSCfI5=ERx{_dOkrF6i6d30A z45%bTT7LOWCE<1iZ*OoN%ZW1tN7}CCuYe4FHkjWq@SS@RAiA~Qn^jv=4NTLMrY|nZ z3)0YLhGbK(F%!6h$AQ?Y+F4`zivoK3s&k@YC8uvOW@q1>hKTNiTGxqx5*_}Nb$*K=qki;bGesv-Mt?|*;|t6>gyDT@+VIfes*dHPv|`5IE#Jy4WbcA7%3!;s}CeT zZ99;^2(2y9)J+&~S(G!g^Lh}@R(L@;{$@r@De@i>Pu)L9V%|LV{NCyeea7|B?(Bn6 ztu=gXx@K*MnEg>%Y6}QUq9HMVMpwGbv9znzoUa?&RiGqazs^_Cb}iX8l`S$~ksgbH zyEOu1?y>e0pdZ?~{e+|sN&-bA+x&83|Lj(QT+ys8BWKN5FuGIS$?XJHue_j$XCb?N z8?E*Q3j6HDd}$5CbOh7OTHKJojOH1rztlXHgQnWXjUmj5H1p>DqKW}rcXM6^yrO@q za@qz#L?6kl?3#0p<9_KQHL8gxcIyw-I;P44Ull_fk3KF!j54If2);HWtG_&YOLOob z>y_|@&!n(B_1X582)cCsr^YmnLXWRGz2rl!ajFSVM5~hvX7W;w#BXRd_`5KKH73kH z)dF&;N}4*@7ft4DtmPSj&^34v}FM6uP8`AFg!%o zV&vDHU9a`oktENy{U|(xPPx~D-2ymUKF+BXcFh`h4JB>DxCxFFZHg zntpl2R?}}BF%IjloKpjM2|)q?7himXD1r$`R}V)Vl((%Sbbgs`Xk`v{5r6SO3jfjx zu_h=816v?|-y)&^;Sz@_@vNi7v)HxR1-&g+fW~-q0HpIY!T0@G;m!sjpD2GkNEC`5 zCap$PS5<=D>stZg8zktm^f@5f027^soeN8}*ML;&##d^m2EG>s!@t2#SR56XqdpOXG_aClA2% z@j06Vf1*JO$Fzt1d7$gt8?;Ql-^ z1D6GA+8!M}tyJ~7X3k53I$r|WqU0`xNHGnN-FBF~GMO@xIN!>e$HQNKQ3wn%A3pvA zfZ;!Z5Fqo!H|{g^ZL^OuEr;$7IwH`UBvCt+18s##=DkqwJgIgI)bfBeU#y$86bGhPGEYs`R;Ss|(sX)dqpd^j8E{pUck!Ph3%0N%su^ zoea%evFJ%X)g*iIq{h(hLqZbGyy@|O#`6%fr;;-jmOXUx6`jZ_qe~i^iy`Uc&dBke z=BlnrZg%QFdMfn?iw$&eKn{;7BU&oultq(2aQ z0(G9y-sd21IXxGl$+6uxVCahec<4^`wJI;ZlU~1X+YR0Q( zTa#A4z4c0RIL@sE=#w7*3&G=i%@Kfu!65X~bI{vUA?07Wk0*O})Q`~l-nM+Gkzt8e z>jYWF>w3$9x-5-TLcZ)I(@5uf|LVe)@$!51vTqGbi#Iyx846x?nJB=w2-kUf6*Wq% zEk<}|NuNw(FGoaP1cII~LK;0s7FsRqMc1x`zBizmXIn12(`ssE&69cacC%q5nf~UH z!DH4j0JM49F@QAk8f-~x1F~)6W1I0q&7R^#yTMb>U8@(I8XjCn++nR#GcJ|2wNa5X>C?Zih?@h;fL^Q;HS4zN(D7UF^9!zO_Tv)xgauZ_-3>L80!JEGkB0+Awjq#Q-4vXv57r zAY3@=#}bs0K4{W=XJJmdQODpY{ZQT8G01V&K~=Jfx&_wbt~x21z;C%A&M4=mMEFAM zq+G*?AqguYnUs$M=Fj5Obr)3kobt(!`wSRs!Pkm+2l?Bk%!Y;hJ~Jn5#J`2CN?dXP z2N41_5}7#gA3sP$^p*E*1SO<#!*-!t$i1Bsykajuay(ZPMkxY7U?mhUo z>&RLAlTPm(Y4KA*2eU?zcME3qxG(8j{!D> zjn;}-Pio?**FBSU8=Zd1p*=L++HW}=&HO)uF)5}u*pebB&Zk*8Po%Sp)Nc2Q)Nyz^;UHq~lUC_~qheJ7kQ<}7U|gPU$#se}zBsvKcG-p}CKT_vpM zIWP_;6l*UI$mDAq!bwdVb4{P^w_P8)&ZEeNnL_RBNo}O*_^0-qH)RKEtw@BlhZ0Gj z?;YTh7hKNX(AF3fqLc1gHYGY(_7564Fv~3TbwTrdCa$NjlL|(xX79BxuzOGo$IPlo z*pxWrvK1f`)dvQ%>V^vZuWvGZeO1mWFCuT2%j758mN+`pW+c%XTAzD6WQEWgLTX`i z6LDW5z5dhM=7W~KIXjWm^nwc`as)h>bgib+7c!3PE6)TLU_|+<(H()AOReZrSQa_8 zYE6~3bt_+s+VHu%WR9u9>?cGOr(^H;0(tFsh&ktVB>s%@H%MS_#34I$;JdOh4{!qq z2Hy`wFFhMwLje#vZnYkUy(N$51G?E@BbOf=_1Q{X3!=i4ey-dS!8Uw@oVflCQV*us zm$n=SB<{BWp5ljCFIfRq#=l!h_fIR4gyXE%CTj)JwWV2HQi3t43(Wqbdd*Z%)%Zx;9+k`{p%`2LRU*#Vgl4v^iBx-aT4F?QhdEBc$1ZLeF48pg1 z#3$~AH}D-2|46t&D1VG5&{kA{GmxyS>7?PlTg9g-k5UB1HYzf80SJcXofm($!P3Ba zKbiB$PzqhD@WWOeZXa@E+c&+j8r|${d1tL}WZhW($}wQsB2ArfV#C9-RDCiH`oMIc zKF-l;BC1@-D5tj|Skl4NBK7lfXt@5T$&UmhC4pM^3VQ8!a*9XJzvXPAsHy)n#Tiqd zHVStZDy=Q|#IJN>^v`pzan7i0+0zkjWDe1rBnKJEPM4YUg^3%?}cr|~6 zH*9&6B9f-|TFFHvJ(@J)x+RfJPmufEmp>E^h)z;3>ywNymhj`)3}~_vX)RlL%Eu}= zOFcJQ8e87m_7$*@uLWkiq;@G)1~tzQ$Yf529W$~j|1$gudfUv2UKIW=JhFA_0@nCp zd5M8(>VR9!*sbatMMG$$Y7J4}+MBu_d<1Wr?Tr8qW2Z-fZF@zwFBGw7@I3D(8U9-W`d>^tSBe8#O}TGB*P##-oyZlwp4b`( zSH9P2984enrT?m$o|V&LpY13bjPAoV$q#MMR%iP>Fg`WoZX~qmcM}ImuwD+B_s^4<%ERHs7SQs{QJ0hj!};BDS)`@hKsEuDfYFt*hU5v4&|XE8ArH)d*jCczp@wc?#QF6ME=bI{Q|_R338HnI56WwHKMR%~Qpj6a`YML@&>x?SMV zdwSbk;202MBVZEvIA(bD$*KXDtM{@Lsu7}lT2mc=K!DJ~IH#>;br@#zI=>B0Ju`t~ zSfHP`IO?3=gq}+aJH>JNPQCo{hSwq3@T_Lg>nCL{a5X_xNMCH^%NTzl!wNT5f$t>_@<<9H zdf;bX0|_}pUX7K50zWD9yk?EBAnMVeEncb~J+N5XWTgE9wO4%guiF2mZK>+a4FV3XD+k7cX6qtRI zl0m`j?JxQ%d4V>84_jW-So}{k{C|JR#e_c+oSqZC_Q+g~eec}QYA2DSE&Y2jzz>%V zp@OK&tv`~4`#_R#&|i{-|LsHOG2*R<9a}f5Cl=qOW{vt3gUi8ruh(q~?2;~#+5`@w zV%zqWQY&_>CHT;F%1HSOm$H_4XaB<-U@P)n%k#_j1!h6+b7cI=v;~c5r0qCGPBnt3P4Uo{dtIX(g^htFGiLs;y9JW ze-vD%{PSgS?k+MPHIb0x@-Db{(T%@IwxaHfPWgPGKdsK?gCsn!-g`sah*v0e}3ri~s3Wpd!EP@#G)Y!{d3qbqfKuO8ws} zDKK|y$N7A_zkb`05d>TN5Bxov)^N@|soGOOy2IZt0?Q{GP`~ma2xQz+d!3Mkq*mb2duC7 zZ!JPn&;xt^{u8qH|5OGU4!`SxDmPe4Bo)Kj&igr~CXoO=3dA|6 z^KgPbeF!(KCYx>Xh(Xi4bkVM>#tqAV>^~9#@LISrcQ||wi183lW)PvSp3c$r#(YkT z#(ViW%kEz0S=z^UUX=|D7}thP=F#42ifUgK5|iYP{iihlgGrGUxYSL~X&?L5&{xw0 z14M$`Ju#^@jYh@g;xE5AeVAa1cgh`o-JQ@7!qa70PHgY}isV-CDdTmM&^0M;kknj^;Z zl>hXo|4ncFew5eWp7ig2{?nt}K##k%{p#_Y+OF8vIQAs&;}C^-wu?MQ?D>bmAtL2>kLTMn?*iBnJ@G}j&bim%{FZn7lzf1xUhrj$9QS#q6ZGT#UsGu<5)`!k9 zi=f#P8!Viw2_);zo|+_8L1(Jz`r&fOHZTgV{VRPFY-e4{Q|&S+1k|q@yyix@wy~d84@9?%l{4l_gvY6V@1i~0y2;!UMi75hD;J~ zHCNHcFON)zR^N6u9;}t?V_@wp#2C{w`RSJ_agFU;ip3oge);n9fj4YOZM9Ovm_KFi z1=leRetL$R%@?7qMn)B9qw#dF7vPpE!q&b**4$pO6sFoCprbB|DF4&@85^eBVE!F0 zD2Lm4^0nWLEAL>V&hFEn0ta(oTBVGXu9N-#{;&NpG*HuB!jEGRO|!xtrsk2}&7P!n z(MsG_KIXPKk)80ltsfF(jLBny>yyJ3=UN#_cP7`v@`}hS4HBn(x5y%h>$C-G<53Q< zr?_s(aB%!Au~iXjGJEAVM8%o2H8pu?w1) zs-Ult&DZb#`jub0g!49WAC#$FU%&-S#5aQlyi$3l4_aLFe%ewbwz$LNq>3NE!D?b= zriQPHNfsJX_#K97B*?Cd=&oHpPJ}C#53mN{)YT`lFx_Ksp9|oe?tbUW2O%l77Ox&& zG5=U<$-rYAV%71wVvj81(f%xEi0!Ik`#?36yEceha^-;DSuvnFH^tP=v9>v56!G#1 zj~*Y@bMh{kau7!ItsJ#!DQ7DS<8P5)s{AETFuy`poE^WTvtGoNw)8~gS@bI**esbZ zZy9|Xvb53byaE$BsAKszQ1MVAWq~ri^ zZFQX+UV88~a*>J7({7Uiod(U76QNQ~sA6J@T=M(N9MZCATtSq(t}1|yzJru<;$&;~D~siWzm z-R7c<3>9b0_V#A#04q-g+p15*!&Ix9Y12G|Sl|1OgKw_HFc9dy8)Bdc(}TZI+kk(= z$har)a+p_({G!S%k*MU|fcsV$Tz-!PzVy^uA)q>uU%>=(NH2J}_qbT6V*4Qkk%%VJ0h^-kYykL22YkUx02oG<2T&N4}-%ESXN>v&f|!QNoOaU^q- z_mCCE$UlXR2UVYVyRQ7~X|;Rh`O@x;Z6nx3b@3B=ff;SBv-sCq|JFU_qVlRZ5+y9n z6!8;IBBl656I2=hFOE5;hu1I4PAA4bPAIOt%zm$c%0amq)ET}>BMh@XM0Nj03qSER z31g{XUf{a!I3IcT)+|DmXl@JhI9w~ZNs;hgygJ|Z6p=?w+{XpdNGIty8J81b1Ecan z#|!AoDt|Ciszs$0aTl73lPNrVA(0Xt%by8Ll#MIjQGa>65=0)yufX!A_icEIb3>X& zr@lQ~Mdiot+qs?4&m2$UXTNUTA3Pz1l(taN^21*ZY+3OJNJ|d52GVi{QxAV`b>l}l z%M6K2r${PT~ahF;-0vBi^sR(D942i{LtXxqW>V%#rzyN&n4zMF9=N&@i*spCteWH zcAJl~EL<=gX@CXK8K!+FqtUoaPeR-Z7D8Lq-Utxh=9V8C7`Uzek5J+Vm-izBE%DY0 zmHXXt+nb+QG47jAJnu5r;Bj~(scMBtC1^9Nb}A%~Y@`Gy@oBov7oFo6x@NkNiF~UM zO09m^!x}^UP5IsKEfDYmQ4x>~B^)4pIk21I>N({>zitJwG;URb*=pc)xd=$r4O~IW zFX1Qw2=$hhAt-a%&p4}**`0V247R~O6p$q-u`WnrI>&hO&;jgR2++>Y(tNk}?dWqq zb&LydpeFa#M=A;*W;XX)L9cOc-Ck3{71$0V>RgA}RF!_$r^~5;GG^xyy^mdQbepcd z`;aZIsz!B(Vv>M!c6dgV_>>>G zDXtxjjPv5yWz*1pdWOqU%ha(J0eL#7c6^d!Qbk8CQnP{8ON+DDrIi}K0aoq<$%yMK zflT*i(#0yK<8UhnxGr>Fatky{t>ZpU5AF!;PO5)=5`Rf2EiqrKF9UoY_7&L=%d`P- zxK}Y;&g}-(opG$?$_zB)Z0bx ze7E{2e)?7=hkj9(Or0#cI1%Ii@uE36g+KQ)@-R&j%lt#-B%bu$&b!Cq@q zklE9K{i8^n$jCl$AyZh&HFIq3*$LjrCoPfq6Z__Z%9Wy&HkqP9-DjqUa_X&ZwrWq5 zuAk1{j**to+T;{!6DjI2i<*e+Z61>5kPmK^PfHl!E04u@onopqtE)_zFsagxvCf*R z?Jgb3e^iy;b$rc;#HhAQPubbd|XnK}aQT38fZTJ~eCrrS%EAL;|MI^-2{ch$7wcD4q03XG&) zmD2OMlU@IIkt=K-GZb7;c@FdR)D_q!-0v2U7<5Pvby&Y+F1JFz_&mFM{jEZau{qA< zs6706co()5O)>^4F$afYh#Oyytn6y|2Aub#lz>+_?Kri0!qtKyu`DXD-o-u9AkC8j zeb`Kk@eY)^shImiikk$>;L-Oe}0hM4RdpoeEQU~ zw@xAt--~o`qGqbk)nEa2E%t6XNq#8bQa|`~zdnvR8@kGT*sH!zQkf@yPCl1b%aJ>W zpwhD5L@{SG8TN0;ACi$$B`>=O-#jMP47 z#QbUBZF-lxCGgu6NJ*{|v&l1T=zx3o;-o({rL%nWkr-b$`w`~qt19OY4)-V)Cs(UT z5{$WSxObYr2>J>$6q9tOm~#6J#ZoZk+lYKI9VUP{`l4v9k zaiHb4r|zMs9^7bRaowr&x{aazZiWWkE3v1ehW4hGu7v5sHHsx@BcC8!P2JgW7?wkLBemah5r$%=e;1g||@bt*Y{%CrNH~Mrd}YGnIb$q0%)q zdq5~gF@dB|vt0eOnRUyBnfB*rmFjl{$R=Sbdkm@cuRYOQZO6z6XdpX zQ3)QV?4jC=zE(YdSvsp1oIkQR_`#yK>~ZCxT!>QO12;mpF_Ycs;KA>wtwFZ47am4~ zj#5K@B|_ZYcSJXwCD51^t)!rHm&)dX<=frenE{47w_ov%9tO47n>WM_kT#2SEHX4y zdp%OM%skd;nou6E8g!uN?peU!vqUJcw`B-sY9E^m4i$~>QB5S_VJ_F+)IsJy!TDMzI3!}b{B`}f!fB?m2pG^F`Qrd~?jdeE4|TiS#7 zw$I9n+s?!-h=)WimMu7G8^zk;jP=8s2Qx)gl^=S1fAQnEW!?o7UN;E3kQPNQ`iFd8 z#w^)6wUYJ&#Wa}_X&j|iZVShPDaOfzhAm~(sXQ(54~v=PuOW zTwd90HmrwEJJwN8Mf5roKkK2Kn^28nm;855(FAAE1+@n@@i&4Lqa4k3&j$l+8V&E} zH%GYAFasHuHRErOB=nO;E+Ws+bn{Q0JA)HTHBERN#$ZGm^4{JSeLyip_O`@^KLRBi zkca3Tb9{PxU~_-?ZD`Tj;Dku&A17!^sGXAJ>m&Uqj}Pd+8_@$3y_Go5KPo1ht}i|c zmSrmvyg`{yPni#K&3s?KDB0(=0sWW543@To1%xHFxJ@!=_k$?MEf;*dE{7tWk^5zh z_pk&<+Mlts%NElyy?9=I97w{rr2afe?9dqO zT0jK&9d^*NCg$b=d4GIFWD zd^^E$c@N1ioAKwWe*N`47GPL@U8?%yl0Y#p2=fR|5dpdxV9#APsB-QYf2mX@IS%wM zl}i09^};UkOx`6G?|L;m)%ix{xQ1KQ7-V|FA3o(1~n`$3LY2UQl> z;s5XTA5R3_da_jzV4h9AP6$JChBu(<>62mq^r3%ulXGXr>lhckjQ)6g4nYYNTSwZE zxH}{K`h#hWN#4*k=61M#q~@E98y!5hL&}3qN`ZqW{-0y5?oqhizO&k~&y; z6heqSCh1Wh!Ykm6W@P00iN@dlXHhiNAmc-?E z!5lxB zVi^1RW+pG{u|MP|RUWKcWf%V9!zKO0!{xa~+@he=hiw&hw~X%W9(_;mXVd6bA<*7? zQ9Ce>e?uxGFnS?ttQ&0pqRN)x5~5r`q*qqC9hI$*wZehbf%2k(GNC}0vrT3nq0`Kr znBYEgScf}wfZyo70`IsfoH)bc-8KM@z~)im&(4`%JvHEPnjl{~A7K7aR&LVNdOJM4 z^34Lo2G*axRvvw7FsjN;zVyDR_(oZUNoU8Kn`GvgJ+>VPK_X&sR<+m;T4uHmKEpYE z_G&+ZvbVzJl^u_Jf$ZwbA$PHyaWm!#__367t=~;JSekU*lcjY99Udx3OpgeyU`?nvPC&MQ*6C&ObigX6NxN)dFoy(0v8Hxt4;;5q;Rp zj6uh+Vcix}ZN;^kWCmF^$s;z`9Ad5hIA5~8{3ScJ;AK?r!}nag#G9q86ZwnkH-}VT z)PybO6n#|*=^@}GBQM(-&4-vu|9M$a)2SvQrSJX)!-#S09kqv4i+Z;VQ6W1mii3`P z!s^9!!COK=DiqD`WPUtJ_jVZT9t^HaiTp2H`&VsY$r9%*3;)z+$6SQ?8KA+ce5XP!%meajipvMtZwU?tYfOjSM52p!x0m| z4@8Fe!Ysf3K&0x4dUDPDEv4K$txbugA2_#X?r8%~4;CvJo>QUYBf-q-Lj* z>a!I$=VU&$JeiVl>7A!(>B)Ds{?e8umZB|dv-W({t7SB>K=^ct(SXPUM}anRa5K6m6YuGAeU(r$AoaY%ZS9 z_n)Do*Fww(M))Ihrq>89MpX&vm)`gPR$=Ye-rbyNwvV@iDN9o}6DFp5(r?xP^|gaT zzcR^7E>`|yaZiw#n1VKL=v*vk%#0bX;Uc9}=f_kwe~a|y31p}8`$DEMEhefKhq10)|=h(2vf(~K##b*cza{WPLS;N#il`z z!0pNcbG!-F&_lj!XG(h<)@QWMb=pip@Nu`5@-NBva%f5TRCZ-C*wY-O#x~1}y^Nzm zdfN5C;JdcE9c7hhS<4Mm#4wz5d1cVt&7I0rfihVeE zX@Np0aM8jDngB8H*Bprk?*$7!f+toQ)zjZgCyWBKDe^C~iCW8}ymLP@bB3?B(8rPQ z`7;ze++9J;iq$=Fj8z~QI3c-a&;Z6qaCR=F^b zbXjNH6zx~C1iEG6tVR;gn4c;8?+u0{EjCXo5a^*o>Dp1B13qrPw38!@Tbif;++^C6 zCi=p%qxA?Z)!C3D*Ke6K-JRT##UB8>_ahfm7eNqN6b}&w+eAzwXFM^U=8z*#%##{m zfHIy?EJZEN8|o)|>lgJND`Cv@DYF@U)491;2#M=FQv)-;z_uRk1wk-wNcEOl_8xlvJm0EC8qD}#1`|Vg z#QH$>v$l)p6+}v{fyOG4Vvi*;j-U!QY*HhZQ&&Kj)X1G8wBqVz&MdU#(*rbH56?bG z%_~v4UtD0ut<`0#?qV%J)E{jdH9UtRBm2X-Djp=|O7rKs-hUVS-i>^5lrE?BJ0TNI z_|QWQYp6P8ETyP~PyI+)qI=oLBmHyxO@>&qWn(@dYezXMBxJ)@2b>7w?WkOHEGD$& zSEN*_=;3A0VQ$VyV6Xy~tpicJj+=-#R7&*&Z7)CVJt^MYCa9W74*cDbuFAWDlbDN(>hlxQNt3tfZ9&+=a8( z@Ybyz=d@&H1G6by7vCozo@gc^@fU5}FfUTUJp83#>ir-s%?|}Jcaaz=IDtob%3P^t zkUk}B@I~!V!i>3?#m)yA3`!UZ5(n`G=es(lbbGP;!Ax!O?aCBNkV3{DsaMY-6t28) z2~!vnjDo9n!^3S0>$?oO67*;s(BCH52r z-?qK$4Oq(+J6-6JPDjxzR5#4q4fn}?@k_@{0UeW$Z0z=0d6>z)tU5ne;&##3y4}!N zamv6C@LuiG`vLiDgy~)V+Aj8TgP2%0VN3J6ZG32LW{~N$0*m7iWy0^@NHB-*Uh`r^ zyc6gBR$Ww2VuYwz$?yQ$C2wZcuDQ&Uq<(1lJKbU7gIgQURefj(oWRrCHIV!y;lMLe zIe~F#WAZOKOX8SbmG}bGVc`V-c=C*?r}k8mnMrR<{EAhp)n{T46I3(*WlI3hq;tsA z5;2EKebT6`62;l6R+bz72_UDYeX^%qQ`Y~uKHx=dWrdATp1w(Q(dMIfuil;4Zkswt zs~jnRP_5}_WGxd#QCLmYyIjy`gQy}`z543Ita<&&WV1A4JSaR0yl zYe9yuz!M-$2+=<$Jq;(bBw_^-;L+*Nr!Ny5N8S+*p@i?xTVV3>Q)*WxgzrW6FDR5l0$Zu z%Gp0f6{M)L=|x^xN<950GZJG!G3{$QH66{(V*D)Zyw2g4-m%;!I0&#iizxfSW=zr{Q zR)UI(s=d8kTt+6?-~W^Z;{UkFeX7Qlg@r}2a8v^(ePcWG{rmUbaUAsrBN~jg`wHUX z;&O6w5D2z#soC(_NWMlAzej5b6pD)*6&tIrq-1~~$E6Bt&W;Wb$08u$vYl_fjYBgw zK2DA8&+I%75iBy)Y-@gJWNi(7^yvKZY%7V=_6Z|n??eEDTvc;xYfmg&uGw%-tKv6{ z@oxuf!|P*3`rwta5UR2&=dI~%#mwYnQZX^Hg;SMstEqIU=;;dECf#Rhu+*;#Fr;3GWS34mf!7UYzaI`y6xnMt0pd@!fc0>QgBq0eA2i)L>?Ue&p(UZNbF7ynBH~2+EhAAK>8`Kf^!% zi2Wuk=j+$)p=?Eu)BU3Ia=hMr^-?n&92|0zlEa!e4^6HvFIrn|oSl<+oUK$;qDqag zLu4D5I-}9=5k8d^&Q@~z*(Vf%Hsf-GB)_@&Md(iJC{u=XTvSYqDS`l{AzYvCUJ+W3 zQqHK37ateb_yo%}$@}>#Jg`Fx4Gj%j&)SpaxF=jLsn-Qf?GY2D3|dtm2W;%^HOeev zN;6R-9-w)@?oH%FK|#6glcJa@v(l50$^?mcuD8nLdF}!l`y+yyEb2uOzB)`)P~uZm z6g%jcNJ-^7_mg~$^4)G*NVw3NXaEJs7JH05Xv1tHv!jOgN4>0OA8CP zgSGU2lRQ2$$k&Xqv9U5scoemw=(#Img3VkOoof2_?b{;-S{enKT%iQ(qlM*%4v>Z) z4%}1dQ1{u{S-B#;7OiTh9SUY$zoDTa6jZd2tyywk8i#XL^ZAG&Uzz)Hd@-PhM@P;M z4)M%}l1@%#pbN3}{rvohxg8$F^cU&~^lwval9yp;YU4t%v5bbF+u7Lx*}%RnGE?V) z_3)tqeF0?iV@L>xHiQ20_S}sdH!?QDVq#8~qIH7tne?c@O{t44M@UZ7h&+cFPF^UUW*?M2mUV@+VK8rB2XGL1|`{mj0Hmbgar~|VSuJ9Vu1E0 zET{{T_pu8i_brs*4NfQlM3Nmmu@7}%p)y(Ul9if3;AA^DrV@0WBhO-TC zLtt(Y-N(pE6U5j8X#t(@rv)bDVMQi71Q)cGmYIWP-|gZM0rzlsZ)R}szTPkx0$SZZ z*#(p?KATyDLiYadE;mpISf3w5)ZYER#_4tGZe#Ox?DAwKskfuU^%~1{h!nDFF>wU; z%Uwmq#l_|2I^PWZv&SUS>6A))h#tm~nogG_dLr&7gHUAHcW7Q4>Pkh>42%Lb?wytc6?)C5?Z_PIjl5gWMs6pwZZIFQX0y8Rs8(< zb6#HFW&u9|vEWAp#Khf|Xvt%bS>$qFym;ZTK9Zl^!abR(oU6jznyr!_%fxbie%=~P ze0B)8cHW$g~g7b8dlQi#VUtcjB8=G8}d~Nrgmhx#gb9k90ht=dP zcM`;(hZ!~fM{U>5Tek?zW4;LcmYEJN2XRb)wRw~Zszxl}d44qGB`Yr8-qW+3nh23Z z1LgghSb*LwwuG0_b*5!xw6?Zpq@}5G2FnWxp_rm1gMpLFnd}Tiz{~f{i6JB$zh80O z>vbt?1Zh|hHA+?jV>>JH1eE(k0NH+uY!H~2E@AC=BWM81;FT~ylf(g_Bk?KnUb2qB z#YKaMHy|&Cz^z43S?;1W0rd`aeP5NMx$Q{A8Ii4M&EbSO(6l|Bov@cI=x^pfb_r(d zNf>=3(`xEW)*ckqMdOPziF)=Z?FQ09lTKgVZRL^ku z_G4b-xf5c-ex*kXd~FXUMRF68c>DMJ$v8Nim%C!-@9Z#WulrpTz_?0J-$~RM<8=Kygq6oVBUFoai)qp z=?KIWB4YX;r4LExau7D8(Xs1+LpF|h#KN752uZA~bz-Bo$n zAnR2x0`_7t+B6hRmy86u)c6O30h&Lf)HG|Q-ID*};mOI#9b7sv>%JBj^8o!w_IU>Z zm%qA?X8a!-rv?KI#6hh^vl? z<=EFRW4W)2jqn(?-P@z3n=8MX4b!Nqs)iB(06<6eY|l+yWW22|apL)Pf3X=T>rvfZ zjS6QyeIg=}0L%cr!3rIsH+svhK}0~O#;f6+9U|f)4F^V-+wWrQFf;T<#>MfNkI-Ra z93CDDf4E!eusVP$C7e6_!N*6rK=W0g4p2Bvz8G;Ht_6+zPyr~RuKt4hLHY&9<&VG; zvJ3MZ%lMr88WjS==j%3*H;w=U12CgW+g0R?9IMsj@y2*@#>R7_x zR#R>rVdSu*O)#zILIf@=z{l53AHcx+?TI_I@2?IjDk?5%nrgQ9azZ^g!E9qc*o>BR zFl7=WJMz79IKK<+gvinPiGSv>PAo3AKiOR>w;0#^F(Hn8orkYVQ4!~^@bl-*9Z#Hq zr~_R;FT0Zz930$Qol{v|-J2vJKuIZPqz@7FBO7U2XbVxzS68MB13ik@+xXNOC>8gP zoY!q;YdIhd(9M?yHej_0v0pkHsAU{7pfD$kuHb)3}=BT~t9mp}Xva<5x^nhhr z1*ji|-GY0+WR|%pD>-=oVOi^+5`0uP|wx*UN3HNF=+VgtS&Pu27pnJMK0$}O`w-M?(zcA z3Hh`FdaOH^jf`dc0jMVu$^qLAK>{*h%pnlh_PgQ$YeIHE5qtv38;Rve{kkBKc3~sI zhsgVVyWRlP4k5*eL6HcdX7S&2Q%XgFklb3hr)Xzyuc)8^1axU~HenjV{stZc}~kDmp+E~~fd;K2FC z({_0cpo&y91E1ZZIB;JBnL6%@e|yUE0u{>bVAA!O3AmPJWo5U08o}A(=?beqe~wky z>f1h>sjyvO>V5>#eNvIb!gttlOCy3zah?*q#UAbCB|_LWUx1fL8f zjDR6c74k-#|M`%NlZy-3G36||$AHQh98`SNI{*EfVds4U=0#xdLrixe5D7Hz$8>ag z0RE>?1xf%nQpC&as>*TQ-%%r9B>-JZQ&ZdXWC?ihpV^o}C+#w)e*J2*HC;PTg~P+m z!vl0BA3y&kAP}gjsllw9XOxhT&~FWt&sLhxBH^^r1;*6JSI5(6Hz=$!4Npy3J8(Uiviqh!9$**R4D0I5=)-1UjZVAvX6B*18M+sYfOaNde~ z)l@x_{csYI5JYVh{4{DmD=X{6JtBXcI@7@njH^kXv18zg2nh-4S>nlJfO#iic&VQh>lQ=&UF+Y_<0vtRB z2YY*aJ3DUM`S**5Po$a|uL%eU6g6&5Rt`o$krGrH6B-l4<+g89R14H3b+kP-9UV3f z0zk50I4b)6&urzB5iCiE=5VXA`Mqob3>)P5y35pb61J6#?K zOv8rvzpxT^H~V2BHa2LKa~uwG_JikD1=ZBlmVQLG*j*fq>cs7m0o?<9+-6&z*NxYG zp3fl=2~klLl^y`D0;_{$*1mWywqq7Ak!xsb%%l%aVr zM;p8x%d2E%wFztva4aXMru6mno|bdq--R7+U`jt>*6)m>&p5vc6kk_&U`_xwz|5>eyY|KzvSxyJYK-74(Qo=xjdEpiSijw4Y}=* zBoACnW5+2z$n%jJ0Po_;=Bm-h_mNs1*>gnUxs#k`%oWuqme3 zC_6qq^ws8qxBD7kGo{=;%e7qgnF$ z0IL8kFN@m3oan5ot{&^s*V`*gH+p$_2^`TVcaC$U%{G|%!bV96&>mB(>ewS<;k8_+F!p~e+mZy*nOxj@wWzs$Z?mSUq3bc*oU`Ei6C>(%O zEb|IAxHL2dU;!zs>q!w2tiXT)Jr=N_a#zpTcx7?%X_zo;@v$tR$$AoakZNVVwZcQA zxW3vuAqdt){e{v{tMC!TA6-~zI-?)#TA+0@eBzb1W;N4OeLj`q6gf3~Pn+A~&@tlb z>BwP8Nr^}RE}PlV&uKeLb935>hT|k4mjLmPeKQQ8Ruw)4WJnlb<%()WQ@N0?#?C^L z>oNf*{(J?FZ*EA4ETD#(AA4M$yVh!7-871cwxOcifLnX9!cjS~lU3I5X zushc!a)9>8BsdmK#xY-Mb0tZ(Gv<_4T~C!j7e zWfH=6M%aO|2Rvx#cinanGLV+8b=@=4(@QyK;o{-~5s=(ryLOZ}uKxZGwAPx@`aEiEmktc1ZF5SIx6+LycI0EFjp+V~h4SOYighv&?;ivU9E?ZRJS&=CfJ z;@r4#Qoh`m=K$7%@WaXJdSRhXJwG3xR_hxi{tP1^3^D=~wsai3qn#a?t~8O7*-8@= z6NFd$`}>cc={9tPQ{K6A2RgWj0tsuLNDL20LTE7Gxp;U2$WN#3@~b+BhfBe4fDWXl zqIza-fSiHGqADsQ08LL#PBw4OKR^uUj(%p+|9}DI2XU&$!XF#}&?6-kJP*%W;)5M7 zE-mrZUEPAb@qG|fWYF8X$OztaWu~DU;mouB32*p20nNEQ;H%kSlL{^)*zggG|8(s+sSveyL%R=Ku^L# zLnGPjUBm>ceAv*d3&=&!)74BcNkRAr(2dcII_$PKpx3&(?-q4O(y9VNQv?&^NeGCC zB@dfjnJ&b~#{>T~U}0o@+!c7--vqh<-LD>6M@sG950`eYp>>LN+ifMzER)WKDiz7Z zC2Ghn;Sw4I$AyJG!F|oc!vlpTfndbq^77>%H)GVg9~NcKuvt-AZ#B z-qt9$I@sNPxI=pAA+C>~z~juo$*Fe!5in_hU=U+9hfoRm??-!`qx*>j^R~Uw?ztU1O9bi=ZA?}ctHFVePW=4YgEH|Osy^DQiXloLPlkFS=7&J}Zaa=gzhy1^%5haFn+NvNyI3nu`js@) zH<=3ZhX*e}-hkWJK7 zVCs#!>A4OCYA0JZ2w%>4)%9_fR!mK;D}SZdux*IW>>|7kNwgb}zVFGK0ZR_A4f3|m z6;s8@2#!AsM$c-+uMt#do{njOrfHy7^PFI&FG1#lqDyWw+&R^vn4U$VuLuF zN$CU#djxp*_4hLYZpZGdtE&rG8h-=;yoFlTMkA9YuR6{~K4zU*Y^}biwKY?1($3kk zUdMc91Sc>4aP3W|X6sTaQB?4nT%F;SJSvgWgFD4y)g040UN26SKYBg+_L!A*2q34t z1|6@9(#6B^@o^TTt_RZdYin-%KjjrY0WToITxa^EY=375v-&Op^HW->d2b28$+K&} zP6d8$)XeWaTVD( zB>CEByM2zX`u^k>4R2A|%tx?09YG|bNyiJ9sI9pf5O`{IqmFAs64Gp|{=`5@cT`xl z0?Z3S(+0r4KXC=BTs{BrEssAsU=%={mmKYAe;=FPavrZ}E3DP@}&;?ntuaOsEJ z{`85Me|B^h5D)E8?X%7lPnknc4`Yw;2y0Esd#*9mJQTy_idkz%aR8Th1>83@G72W) zo9O8QSji3$Be2bEWqqw)i3XKHE6^{te5?LDM1!F}D>5{Z6 zc@Ma3uj+s{!$r@3{^f!13jLSt2}0Ci3BzU zZ>_YwBCeOv;hRnRSn3SoT!58y=10uUJx;tJ=5^Ty6BhmcqX(U(!14kXV^kX^O*cvt znd5PGIR7ebwLJL=3#r5*u{v-pap~2S>fBw6s!jZmrp`b1z1*V(>8nqiUlH|BA_&=G~9GcBcODLbc2+1Sd<_r-6bI@ z4N?Xn4N@W{(%oJE+_?9%<9YV;zwdW^p9hEBvDUTLnrp6WX3jZhm~AolwObs~a#7zK zEJny-U7jt$P2AotwY6H$cZ9#kr_GSR>^9opkSsqsdoz?_?|iMZemOv7;97$fjmVTw z6^GOqB>6|drlBqlI5yv{BdG&zHlNvT*-BaC52p%|<6FaD&tAAN-<9eMAqLmoD^7&V z;WVE_>edHsY8e#Nx8|>5R^JPa0b7)iO;^QP^hu=XMsI12?4G4y{B0XGg!B8$S7yI5 z=C~bCYJ_KV5|;DrE*ZR)P$VV zFTey;R_+tqRN0PwI&HtqCk9bAb+lesObjZtupMvkPgT19`EY;RYd*Iu{a(E5j}K@? zSv#Ih(;VC7>pZ%j3AgiN$qNrYIGo`%+D&I#;xd@sRzV~wH8nSX2S;?KE45x&8(dL% zeUXIE`DdL!0RJr=k?Wh)#}>=&<0)C&jlrMaHC=p?lw#@=GdubIP1;Wt#<%KU+a_Z* zjXm2UEar0Q39L8i*ntot^OQ~YW4_s5^&4EyqM9d|nWuife30Z<*z&G5@Nk5Mb56b~ zn)@mG`24PK@bwPvxW?*4m-U!MtY|c`2$P03dvZOo``p|eZjtrzd(_Ch1vlH`)X+hX z`}ETJ^P1iWgqQFX#KhGwhoG}xySssgkPUew3cwlV4cY?(S|moC-^2zDCK3bD=?AY+pk@y_G6}c>h)lQ`un7=y0BQnN0FiVN?jGeGLz)gn zH}K{$#Jr3`MIFCj-9n+Fb0Pl^26#0Yo!mbUcYiOA3zwLf7xnMJVAyLVq} zW@Tps1;UVCRaqHwC1&6rqmtPI##)f)cX6rkKXVhABq?V6rP+PCdK-|X>({SC77)qG zI`^#{q7S=+rQyn(H*Xf9qy12ME#ZaoL|0c|+46(u9~KryT-|FAlU#TQxKfjk^@N3= z_%|L~8KctUn@&I9kxUu;oaB5%LM{zV=6fAxKeHWnL(#AxXN30^;Pt|dqUNGj{^GU8 zNogqLP(O3k`J*GEve==O~(2O9|fM(masCM7qhAE3nIZb!@U=_uL)mQLLM&N(C1#p zi@-oOPw{=Q4D8DjSk$8)8}26D75h3|nj7=oG_i?mp@Vzv?%NKJT^cdG#p#dNBgJ=l z%&K^{NcLW!Z9lRYo8{jjC1#3sI@xbr`PtcV56ZA_ zdLAY@K_0XXi60kfo6R zw6S4wvAk>ig=4w)xCS<(eAsF;e+rLedF>?uT0rUOlPos<$s zx%>N@lE*Q+w-T}@atRSR5{@o9){pMpu`-%rHfSY~I_(^Yr5-e0<6QGJI$7 zG9A4v{4Wc`wo~P@ZdeM_At@NOMhVW}gRpCReBmBnMb%!){h1RRe(Q zUfm75ttfNwtS3l$%AV?NM7>8}@EMv7!O3 z?`tXO)_;Vrf+^l}Cg27O5Dp&>LBV=}4bP8P)!EV5oMQmkx z@TrelIwHz3{y>oSV6~-oyTZhDCT>`8VqX0VBIkQaYk7w6(CmoOh}jFA@X%1?qXo6- zb=Z?3sTRq+GtL2NEgXTJB=J-rr6z*!51Y0u9~W#eb2U7&`TZ@0SQjrw7~RgMqoSGs zqz4aAOiZjn@PfrNAD_Dht?|6uU(=-LA`_F}AGDg_IL#h)dOgp$95(x=E}uAyE-yU7 z%n>t!4UuhdYp8Z=p#5cxo6er@6;kHi!;e@#fq{WAX)WcC?Cj!P60`6J0zf=iH2!Kq3MoHzjE4e&hfbo~EIeWA+_8IR(LPCPwDfL9~eAh-H-3I<@ zq^6-1^N&eQ)9Y)Ua`bbnCO&W3c+k7achMrEWNtA+5<9dAZtU>mU0eH_NpOPpzOgW9pwnP zQUJi1@%Nn8CZukUL8_FOi|dO9JIUQFwTLC~@C0F_Y|){6+brwvS*ZHOuYz=1`FL-v z_sO^$&GyRJnie9bYqO>Cn0=OsRn{#}vRqF04Er@Kla2&b0DK1P8ky8e<%z+;Cgzx! zjy)^|ju+~Zsb9Z-1#$^wLJh!c1axjK<2o$|hf0>(p;KCK<}JQjb61o5#EC!1DI0^1 zduJXyRSuL3avhK7uu5OVK?H>yX?@xk(K2K{!*s}~>0)nhTB338Dew{@U3HOEz#UTj z%T??592_+UNNhmYJ-)iMWc#tBkSfJ5;A*6I6iZfCj2m$>}Ayc!4#qLC&*p?uS8zUf*$mkREyp^I@?csN9355c;U zy03f;AOfceD5pFwYj5slWN+hRA~F@_+*loX0ze&Sp!II7@bkdu=aYJvX;7O%FpmcAdJp}ewk zaB#3C2uMG`d2#pj6tKWSv_908o4#-DoOJ-54b5a0aAE;O1Dt1SDk@QN@#ZXE z$OXV&3NAH$0l9@uLm=UFN219tn)kUp)riS7kCG$*qwS+Kr%|-+&GQ>peFmShN8>Bg zmma>x238=f%2&3F6B9iECkGL8LgHDe!4VpG0!|spphMybNianvxbZS-v`x~NF07p_6CVu>;b zoQF%SKS@`o?|L4clKeR9WU_V0jYo1$byd6!JTSsfu$=?12?`kaJP&q)1XS(jdT!62 z+Pwp_w>JNwZXEn~rC36M{Bm#8iI%=%sC1mCapPb4fB`_i<1)3h>eXEF)My?@b7kf5 zx%Dc~VYxJheie-kbZB8}?o-8ZA9Jw0B=+EuR`Tle3m(dPI$MCj-`8c^Kc`374h94= zYxy!e0HOm%leVNPf58hEcCXu zuACe*AP!A|pftKw&hncsI`@L&`E&NasixY?XzU|8PZ@a$WL4*Df6%?Uz+#1@fZ3I)_N=#_0KfM8 zF60K=7nUXA2CO5uj*6Zp+9NxzR_|}kZ?1%n&2#2@nXDe(usT?p+yB|8WFH(6AAf_0 zh<03+h>U_l*w)Quf(safO?ZU;keC7Ja$&f#3}Bx%V$tThI_-y*uP~YC2T(-WzM8XZ zKt7|h)>TotdiClQ5C&c_)6j@-x->A(K=%Bd^=xc{<-C=JLH6w0kHF!#r+fG2_p;W) zqEweHZ01K?dlE?7Drub|=MNs4mboO(Eo-K69zMP*z#$=iv*^oVnUwg#^b)dgyVO5t zW>75OqI)=H{t&Bu%xMKyhZ>Zi0KYIJV;Y>F%VquMB{tQY5fjA#z(WM9oH!l%Vj0Q@ z)HuhB2wz%NGVQAN<(KK~OubEZGF!O5Uwag!PH?J!)&a8g1>mpCEI_nSzX-9k;NA=+ zL=(~9R##U~CZibQp|zBAb8`Dv<LqjG|DW7bYC_3Nt;<3y0!_G>#` zxq3BA;65vccQ4)HBO^IF&ct?))Yo3f*?^Y^>tj0YM80muHphq50dt1T*R~c0@ULCV z>@q!C4ffKiROvrmV|WA;9Y`vuV_dml2YF0DZEet=Q`qOnk`GGO5RE2ubi^5U2%>dwzcb?Nu7cG`8MroYKmh5XsOk1&d8$G3uwDqP|S&>MIAR_8$ z+{>4X!8PTn2~>_Tgt!*A*)?K4V3pClv=Hb#FGkDQLEWitO|5&dsG|)9D{u zqb%x<%ZCzQuYd&uh&=S`3~Xai2mp;bx$+DQ4B%tB@%ONj)7|Oo{ZP9q0Ws69TOmW? ztsysncL~z52i8bd7VRvydN0&Y0VJUF-r;SI)qoJKhU@3o7WRkm*ya4DIQjEmzt>Oa z3Ki< z`bUUITv5Em!jXxqLE_y|L4Z{C1^%p>qv0p*^~Q3Lc=2Bk6oV@yuo z3dQMrdIcT9d;@%)S`QAOH>0lx!`{>IYqKFqcTU z<#i6oPhLwE(@WLcBLH1ryYL2h^mYc|;@r!ym^ofW{4jo{`xAmB-~faB0%6_pOlq(( zn?Q1MG6>KRGbRMGm_$eeh*0qG3Qg%~X+b4{qTT>DwalXb9@M(H9u1Bj(LAPd`s^d1 zi^#m+kgos?h4AE?IE5r08}cr#jxd9j6%_+)`e66<^z;ldiE6=-A|zM@w9#|l{W-82 zT3TNC`xEjwWCD~;KMP(Ez=?ikKIrd=T&o3GSZty81ze_8Ske;8*u*&Ll*mq{p>p^=TD+7^JS9H_JdfAq<7>?EmBa+=_%we|H;uj9je@jOlWmgBMA;DG|Ej~@_6 zsO&+xjXhOn49v{$Ac(0ZiiT(zw1YXQYo|A!P~6TWj^C|x^|t8kAi%a(<1oF`rD?u7 zje2kb=?PdGgch)>uk${#bavi>B_2rpCM~VRYEb2<39_VMF7x|27tUeGM&6Dl{}>k@ zPMt>XvOF`hGZA`!YHDia=lUscSMs1&At9Z>n=%j^vhUyr0yFq?`-`a=5IcWwRjc*n zxA8usgrr7#?xnFo@oIjT>A~UQq-P^F)P-|@#XEyT0vrQxEPg;?fodpacVN4L;%0In z1%L?5iXqol*ShmIo$YmKCC~;!%|pO1cf6^L1R->Tg`O&moHx)GBseu z$Yg@T4`X9vSlmYYP%d1S z;{lBD=awO+oUW3g&ybWv;5G6}nJDHl<3tjK+6<(j;6k7^Kw)$n58^D=$o&a59H@iE z#l;&SiDwiEY~EEPa|BTZ)SvG;y}c(4Ak$HUQaz=h4Eg$}ht!;HsAo zplT9t(bI#r zk-qW5Xzl2?T}0=z4JZc(KqXzK0@&)H)6I;ac+Jhtg{EK7%gTUNbMXd`(vmFfv4A$D zFW60ddF4yu`lY@;E!hMU5!Kw@&Ily%tSq?Z&EVR-?PVJa3tsD?@}VKEmUQ}unsm2r zMF9z6C{_d9(G#Fmf%5e>#OictN&aVXa3XC@n*E^o%N0n#00TnxEEG||&cYB|_`ymx zqZ>*W>UYfY0Xbg7qw*e%Q^^KAq$V^}5p-YQz#uxn`?-Rm;&SD(KvN)?C7o*5lH~gU z11h+>qF9xdR#uQdNr;T>@65npbAhl7RY3j=dV=JUj63BmgjyniK7h}-y1BJTYC)Lz z@qy_K5o|8g4eduMg$NTJods02aQ0rrC@3iSU=dPCF%@(H-4RIT>q8axAgp43L^ipjyqcQx!Okjh523E7 zrQH6}BNA>qs*a!NWkOJ|0fj^!9v(q9z1O%N{y^;@V4#3tm6MYL+Cy{mCZHwz_6So7 zL&F;a?mHl8);hy5F$sx|Xk-RJE^8roQ@c)KVm9kSf{4g<554RK&_@0I`~a@Kme>~} zIBES2fCnI`th|ySd9`m0t4I?~sJjc61@J?lfIJ0|25#DjwG=V-h@QC>n;M;ujkD|>L49l!EL*Ep1q=<)}jS zjA=yDTTq!E;A`H-wt!;(B`6$(LaB8$HpGYAo3$Qb6v5*s+S?|#4uHB^aDr@Y&mn|F zy5=`wx)XuA?W`96?%g|B!#+Ct|Ia#G{627}^PyM57)9NGZhwOOd;1ePRJRj3Jv&tA z5>#ttX}dmBeP10#Frkn&q|6nJ&g7KN3S41Q1t$r?H6aj=uY&+qRzk!0}muXk)@ zoNRx*V<+SM(~%rxoE)g{1O%AGZLA$&ba584lTVn$S;@FgP7_Cxu`vI7#YV<*GB6x2 zXJ=!eXyl;DBqu7)q-5mm@aw*WfBh2q^-D^d3=WkwGBnc@wsF>kL72(dx!DGq zm-itO6HYbj@gnA1Q?|MzlP~yp*IEW*4+V6G2&CUyMrBH6VdS9jXQ*^B||JbWHPpC;(!VHYH!6L5vxeDR ze{pZcFo9>jjqxSs;kdbWuE497fEo(Y&JUhaKO~CY@NW!+lf}tfp}jBoobDwta1faX*|gxW0a3X}z;i zgSJ^Wu5VE?NzC|dmyja1A@*z^d)JcTvojvu*3u)oy06u#o{XsMdzAQ}mSlGaEOAJ}pqY z>8;MOKSa}B_x-%-{3inE`EJuQQn}}IrTt`I42>7u`|8LerkiwXh0fHxeQV5Hl`w&s z&#=)%poUlwcV6g57i+L~*uu4$L;p((=V`4>H_wYOH@-SV7jf5qq4lOxMG2FHvO98^ zJ}`x1ep6>_V^(KeI1d_KC!Wpo(hZC3mFHvM2K0;K;CDZk>?m+rLV^?-Sf@! zZQv=$pf)7DaQC*%Vxiq3&lElNhkl;xOab}JWsFr6UWW_R?}wHie5)@_Zi^=AoO&vG zee^*lUV!0H?b*xUnVm=InzR&dx}MI^E&R?sN^}V;?Y3$o;qDuMGj`oQ%lV?VfSk1( z10SC?E0L~o4JccDSrYJ1eYwQf<#fOE2ipBZJ#CUuLBoe~mEW&dR578EwywEgSzZ(i z#P;RTm_1`oeJ25zDvtqi;m9|2D(_x(+<_>~c?I%xYLVn~RVtq^O^o@F&A({E@w(L} zbNMsX`L}7M7xzq86uzZfu~y#6?vEU;p|sp0AI&@a&TMa+^s9JjjP~tLnSk4Kd7+ht z;*J@CB37^R7^moiRYxyUwx-({#$GMam@2 zABPbf1&~!7pUWU@6`>Z4^rcmz%D$}VW|j1*(lPN&xptx$5`6_H6E`qZxOi!f5B&_L z&5?~#G54HJr?!w=!(5e1)MG)*ug?0fpC}F#7UhJ0{wAU4Q1d* z*{S+nH1Se@JLb=R7p4egf4*B$|!GzMeh*0{7ldcS6wmEkOe-{O31`YZ(JwS{2enM1O9Y`3x|d?$??sXWbsB zTqK%Tx3`|R$2YCI&$d^jCOGrKs5Aeb?9=P=l-&B?q8+>*)5=m!p6@wM$az&!?c&vG|57A=Z3YeQq33JbGxdK=WxO=QkCFQk|@LmJ$Dbbpj7moBBbJLyeO;CD*+<5nkTjjH@1U<~*fXrC zd-6cr`}i@IQ(gaBq5_$es+9P%jl|5emVp$8ta0{yc7%CqPfJAtk_rnRF)S6Gw({j) zcF6dgG~FiIAu?&7^7RbXoJpY9t zKF4@j*5)3^Hpp=qZJo7;Y4wtdz>q}sxi6Prn!hO~mSpFf;S~P9D48J~?xNpBJaku^ zUM{+tuFSb_T>ROT*+%?u(p&Q>QR6B{nJk-ia`uL1aV|{x) z?bh?Up1;OwvZ$FPcm%_3sL@ljXk-ZAILOToqcM18f=7i#>cL|ylO0+Oojb+lD&u$D zhj;OxCbbhzV~^Q|+dluH;eAcDDE;W`L+u6oR2)(wp1#75;p$E=zTKk7>^kDIoyM@3 zbiR>Ke#gv{s@ zwk+FB@UtI{CcU?GDA}DMq-B?=wmfMicb&(&e6z_$ijf7c9XFW*ja-S6Oy||jgCRwd z=f!m%Nc5KH8qqb^zEcn|GkhE`nnS0K{cvHa{lkTf1vKaIS?_igvBzEo?}|TREXx`* zA%X{U;R=`}&y$CK_@w0XXy~5`NO6D3-T&4xK|^3H&Bmcwglbgyh;{Mc`Ex8m0@ly( zp2}GeCn^%q-1yLby$6T?oxwX!z2K~~UM!*GG-rkVX}m6k&7U7|Z{MyNkuZ$7Z$=feg;2=lx@(60{KX1i`voNz;U;R!XNoeieSGpCIHs8iqWx8CHef7z8%w~;J-m^!fIWn*Qp`{+m zv-{o8`HwC2#BJ=X{^C~t?)ClQ<8hO5{N@0H*T-?<0s>qwz$E-H4~~_Yn~|BFjFp*@ znVB6tI9WXhJ2RAb$B2YxWhk$dnGDIu&dtq&dI<;ov&)5KK5^9k=(raY%4_ji=+ZN{ z$48&T?Oyc?ES)2N{xtrQLROLD>DSEMe z^!yr1-@Oon%a@k%BxUv{dz@x!nDQfQc(EGWrasHsc$9UY8=So_u5M&|n-^X7T7PPcX2?VFws(F@jmh2JuTic#x2-XS zwY362{A5$|cMq@8Y;=Am%)W2_F8Z<5QRC~Ey$M%yM6_=tAQL+>VyT{G9}BI$QyHYB z7z=egc70TB6)@iZ;YE5tO?}&}yefB@!+Ffy7A;YYxX905Xe{yrmH#=kK+WG@)BrWh z|7xqKWansfq8#`1te_tvHO@f^djmVOhYmJ&WE`AuZ3UQdJ9`HaQ$5rNOfq`Ey=Gxy z|JBaXo{XFIB&7I@mySC1-){Slu}>nDlY9Oz_X&L+P3*~#tW3Y|`;N7Vr4bne3kM?` z(;a(*lctc|ED%2Ydd_wcvQk{sM{)FYE$9VgkCSwXX%f4yPhLb9A(U-h>h zl+4UbYQLSu%FYZeB=u0zf!>r5hZtF@kg+kJ9R6$3FtBlRk)f^y;S&-`2A4s_MSqG< zP^;|Up8SsqgJzh_f6S7iiRCIWrUgPO?vvS2vQf4+ zL$$gDv7^=`gnNIwIO>>_i))f`o=l21*&pAYeDeFP{Yz1PyM^Byb&5!dqOONhD%M}E zJWtdKK31}kkP?;Ed&u_Jvi*2Xr_-t*)}|E5fwzam^!xb5G< z&OhB4>WtrS?7p3$ksZkY*6)|OO$NK1i5cuGF1PML5NHG+C^|lTXlZ1H(t(pUpT9?k zCs+A>q?3j5*W36*?|ysi|EOckzv~w~9s55k81fGV;{YlApG2<$|3f1c+PNZ>Dz`S*US|7aY3Hwk~Y0~}xgIR4!ZurhLT zaG~~~|FIbW1{vyB|1bmg=f@_$Iu$7~_aixqnN`n9jZd;FF(ZUUPK#jhU$}4@Kjc}m zup}c>tI_1<{%2vaa47vDtfY|Ba&?j&Us^vYkW)oQwg{2m5G`M~6SHtO zZJ>STylPj0zR7#1jhXE$vgDl*%V)WcPH3R@QK_S@6U$P(Sp4kkdx(~Hg6IEPK>z2? z#y<&&9V7#e$iEASlbh>AEZ|oBPXxrm{9n}RZxVW5k@oz_tAtn4&(r>_Pyu}_UH{Ue zAE(&sP+If}z5bF2zX&BID@xj=**ce$@$k^FA7+L>tv~e7BRB0a8?IL=P`v$&CT;nOwkQzh~@~dUAsm{HN9px>o!G`o)HsES3W^^YR!(E5`jl^5$8Y4 z;NQ&p-(~RUKF@4iEWh`8hG+YK(&w3tlk;yd-{SCK-h3wB>CVk#!9~h=1~F@lc5HO9 zpw-U1*L@r05@NX`9k2h6>i*?-XZPr_$D{2{W3-)CO6lW!B!hx}GxkppD=&mdMQ29( z)fnzfRuD+wZX(irlAdO7b`@SXo)qEpc+&luh^O;X|)@f9)ZJb(C6Ri&%(_SZ9; zz$HZ>9^A-#UdS3b-z0NbB%plv9&I8Nq7Q`Wx;(9K6EORc(ZeV2XNsq=C7LYPBy|^c zh;abvU+(PWjkm21v~M{&k0~u*U}%4A;@?cn+@C6tEtV}e(3JK)SRYsa&L;)Nd0+Ef zT8%9^mHpLGBYVOh%>5M?TYg#&`}i^T>WDkI5YW88Jmw)9xi3P$&2%nTT&Jpbsn!+KRhhD#Ry{eY=>@LGxsljK3RmkQvJ|JakF|;;= z!vnP^1(wu?s#os?`q5m$t*)LsBRhUCV0}4lHAZQ(c#T!xDS4c)C%Bz zliuXBvqQ^CDtUIb3(;NCjP{ORl^fBglwRPD8P%e>@)yNB_<9)G?_L?yTcuDC5Wzo0 zu)ce<&a0QQe7#uz3d0~*K4+F!&YhB?80oXBZHwd^cI{)*M3E*R-w1s23Y(u;%L_2V z$SrAJQ^67G2&Hf4F}s#fbOiklYF!*?wD_SvmNL)*#z`w{GJnQEUFSlv4ox+tnPFPI&Y ztQpKl*8Lo&j0nHrIa$Nf)%?7`ZuG4AK!8T6L1&67v_${Yzn#_{(!Dv$EpL|51)`Hd zO7Bo#&Q?eF4|jX~zBxwU=A5*A&TiKM z&zCcH`_v8Dn))!TZDX{Ke!TVL_dJn)*8aWgYSl*1)G{=a^6oh#rsRumObSc53{x(N z*3G%(jIciO8|m-}h#-iwDSa_hp}!e{E4pE|;N;_bN9N5Q z8XZ>b&epp%uQuy{KVNxNdBe!J93MA(y1=#NEZi=|dvm!C19oXLiWsH;^4wnOd$#F) zCUI8@vO9hk(Xr5cQTm-TNR&l+mwui#k8w`X#ZQvW3VFUq6~? zl(|DED0knH^|~ZaBb@+eZ!8dV24)twm@zJ`{BfVs?w0v)=1-&2$yT$Gps; z!0#WYj_58)Q4__G>DLf`Vd_1rHHlDDiEfDKM06{sstI7UDj%|i1xupkeAqPk({v*c zD(lUo7Asap5o@mXv>GYdN8}0iE|HuM@(KmAuej}`@PE_}*wvblz-`ZpzY?abF`Q{S zAVk;|JSg$1^?U++;yPe@rHwPwLYriqpErxu@b@=`VbSJgjM3F%YC;W#FD&DW;lGgf|uRdisp^Z z72SM1DkU)7gd>7@^#naK_WHQ|pYmN=YL{(nYaYsU-RvJvrvVVxpu09HBz$ zJelgfBrp5~E?dz&E_9G9%HqF@>v8M547$;5lCiQIJ;k0}arCL?uXozA;192EB%317 zg{3`>QC@`YPo&Ej@0Ro#_U!KlxLu8p#N3Ycmix|p${x&Ke3loD8hfDJK2mX}J2x_3 z{0B>NZgjOJUxsb=EA!XEGY2>)qc+4>#tA1{S1+)k_r9@Oe8@(zXR9i@+;2Hl(QIi<@&RA6e+=r0i}*t_Eu*!2eWzWZWP?%$LT@cqtyRejx=w# z=1ig~8no*KoJ>xwokfXrxaPZNB0IM054e$6xL+vcA}*RgS~j?$ALm5C(}x-TIn|u zj;q!=%KX%oIBmcdqwEL_E4ACH_w{tedKcg4 zGBJT3l^5PYLG*w}+SJ=9+|2SE_B-@ltanLs#7k?058j(!Zu#pHL;PG*R{y1xk}ZSJ z|DvAo=3$48!>`YTG)5Rt{r&6z`aUVLHgtWsCG~#d;P*4$!SUTYcH41-61ZPp6Fw+5 z7gZ(bofK&-GU7mtnrhFOYA=;r@|CTx*I-yK8DAN8ohc|7I^$iVabapLIn_^}fal~| zGM@rgKfAaajA&zbku`KD=R(&_2@D`Hgx08J(-~T(A;{F>`b5Guhn){ z=`bv&BNt6ZwM}mf>qH#%xY+N~`;=eajz{~^ibwQ7J)-l2G0!39Ag#g;?Z|=PuQZ7j zgr8#z7)a*?GOA1^)mua7X5P1YhH>n+wp|nO$b63!EN$CS#W4&P;q{SKoZ=uqg?r

    4RA1G#KbJ-9XAot=I<}g(=?-2Y= zduKp`!uK={W;{;_`vhHqUZt{w7x`sA!bF$J`C>wTIs4jdyn~!c0AyBh+J)bh{Of@V z>*$qgoYZ{dcKbkZ1BSX~{K@8x?@P;#KI;6ZpdfB3)5rZy=S5}>O~`^!b86o1#-Z;U z79Y$PjYpuqT5-9l8Sev-4z?}Xz{met|CPk$3++pH$pe!sapzRYvv3x1#CXusUlZ&H znO7O)2jz{?nWZggLt3G*qweOM+)@FoxWcBnb_hLS^%iuCj-POol<_!UHzd)FZW`XW zEm-oadnQm+N7w1-C~sHD;n^&~{v#zCpB(}!K^_qpPM+|ORC=_R1g76V+#d#2Of1n9 zSsKh(L@9BAL@F^mNoqiLS-#;40`xmr)n;IjOzdcGv? z!4r{{8&>zx6Y(hzY?_!OPdEcF^IEAzxfUPx;^H=FE>8qe!z&v*MjtKaf(0tKN((qf zjbhtyE(Mw74arY@cJUujY-Jka3Jd@*R>8nDSDc^wX=H#*2yClTgdRX*3SNow|Fl}6 z5B`9l@4~KtQiTeFm)|lpUr+%a;kawUMF#?)we=t-Yy&>s{~1SXdc{|OjDfWnXLDTv zcYO~aTb5u9jb2{iI9YCx03K=wdSC()8JC0BlF5fL0~`7mz0;f{wFmtP=cKknU|lev zUIk%TqtskXt=hKndST{pV|RNuN`@4M;0K$qZS?%fpt+D=aG!kC6^I8CH$kqe)SHaZ z<4QMdD6BtzvG#L!G=DB@+jT7|&q z1j|QoLVrRZT42v6zUPDzra1%rEs&)`=Q3d2&<~!44f%F|QUl&UJ<2wk?3R;#Yr+H4 zqYEJ31OK23Qb(Q%%Ca;D%nwzzNzxLm4>p?$R5PUc7YpGE1qjitP_qBMFjK*^W-|$< zE}`F;sV7ORJ)l9%hC~m8WZ6-*gZ4QBPXa}1=!eS* zPa+5^TT@d3nm`x6@c(pCku&#^a5)JHe{-1tb6?^^*&07_p%vxfeyI0P@pC889nnlL}+h`2Hiu43wF4YVgB=v7%;ZK zt^*JN%Q_Uhh~y69`B3)5C+l>=(#{|THY{h^1kD(PSg>|yo=6wpl`G-^cS9r;9BwW& z(20#Gb}@Px?)T6X^SU8X2?fj-ivp8sGGt;F42Od{Wfqh&*D&q)&9HN660W4Jg7&<5 zIcXo19+DHREtO;Mi$`~temp-Qc2V@FaQ8T$$n4<=6rQ!GnK|QWD?Dsg68Wa~;w zz=C-O+|kQW-o0Z_t6+oj%U%MM)eHS->klux=m$Yu;)`9*s(4wJvIB-l1%|Eh%cY0-ZYqQ6DX$la+y zKJib+g&9K^Kn{Mzhk3d%v+|uRf|mJ2XU{P|#>NJV%y>($au5dcZ;p_HUmdC-M$!WD zX2^weVaE6W_qH%V2|zQ7SkDl5K)%8;Lp?!cDFKavy;AZ*1Vh61h#ml$PMECjcrFr- zU%nzYJ(%3a8ox=Y zvPenByRrOX?=%_?$_p*7tE+=6O1D_d6|!DT_P|vstzMGsD{h> zi?)%%F$?6W4nO(~R&XXj3i*Ah(r7tU{<+IZ! zVC~*#2n1^p?}U-|*%HgC+s%j`>hzPGj>k4r|7RsjjCV1Oy;=>5hm~2Zj~{rMO+5(7 zmVsb$LD1MP9l4qnBZ_z|`m3nZ(wKhm!W95f88(O3J2W4!gD2|>-)2m_9biVvA05h% z`sQP3LiZ5zw=H4;=`Rn21Ch`@1bq$e0^6^*@hH)S9>z6CR2S|5sT)#{Y^$bjcy6fF znQLIcNtsTqLO@s|bp@%i39=y7UnU2|>FZ(x>sL-F1u`ht-uvHietC#0_h**luzyk@ z-GwYzuT69}Bri6F$lX&zTQ($?>U_WxY;Co{Bt`E@=?j(A+38!zG)QeJ!F$B5 z1^hlzXYFABPRY&;+07h7_{P0CKhV!^RqI#86vdKWXpKdY6aiEf**Zoc|56ekFZ{S*YOvd5c`=_OObDjCr!fh>np%r1l9-w=)D^9a3&b>RX zoB2-fhI7VXuwK+eTL6cl>Y~ax-KqMon>u!KIBA5MM0Svw4)GFqyZN4?0XWehzB{(}lr|pu1+;);cN^Nkr!kSZ@SZ?GevKb+`m5{LEc+yek=E zL)p5QNPW$T?U}cX7nuo*&K1lz3-GJk@z9(QUTnXmW6nBJmps-F^GVpwIRNUV=DQ5s!rTeTRSG6)%tl z1+1^Ng|xNV@-jI~_3o>1+7Vru4!k&Q_vhUX>;`#AfI3XF)RW#(Yjk5)P6MHMi0iG# z9czd9#C)L#mltQ=w@Qp(LwF)n+{3I*hQRlqtLUrezQY~I9$|?ehu{?U!*cxZ<@O;& zF$s$pE93+9^G?a1mS08?Xq@n&xQSYR1Y3-}5g6mTJ0mGvL@w+YDdUk`ZqbUjCwW$hrr)Kp}{4=hOOxF z(&4fZbs==YbU}4%SU77jTH)P6+!5Sy-SaJKmIT0;{oVYZ5oLZMfT>OEZ+eYU8?rMa z)gsqI)XH_5E2l!MgQ`O>K`lXdgRpDt>rM+OefKGy{FfW#_?1Q;iWT;iH@n0ZT4kXm z-RrlW@dH~l_gs>V+wBP#nRfcM)%M{=UTkqKI3(wX!{ZrjQ*(sSAz<#qtP$ad!}eu1 z@yHkbF`f?1fx%r5J=3@&ob#rF?pZV@vic=XLq}e{T;lyb$0CUFk`@bDHq-OR)RW@V z>BH%Fx_<9BKHCQceN_$T-eb97tob~uwu09Q`=&8wlrf|xeZ>@RLo4}h8AE-YO z>3KS(Q^H4-apk=Leyra9;7@o2EmaRaC0b`Sy{Tn&U%_YfDaj%4m76j5HjSTh)v3t) zo_RWzRl=vRoI4RVmuo?jc-86Keh;uZ&vPmh>FyGteePE`Hc?m4HP^q? zHy#&36*V!rkY9S7R#{Dtdna9etT!H;;g#_Dk!*TAJ0A~0JYtpeQ0jr8oH#4of zw5yh^<^A={)0#FpTw}01dhL-dT2}2)%gf7UQaxn^ik9WkkaYPOtTXT2DRZ@KCYZvL z%i>_pvnd`uFnze@f{K+%bN-TJ7M&w6G(|e%A-mbMBXTS`;#pNz*$|Z-AMn4~lSpje ztEwMM-AL(`+;daX`jiZ^o!>`sQuqfrs z4L7}gP~oEy)$(8Jd|l||-ZD(TrS>eg{5sRYdi243{A4I1RL&KZ`Gi(kz+Cu4XWdG` z@xfq5rR+*#hNR3bT`lOD&a=VaMledoQIWw>(O0z#DAY2jQdbdLwyH9hv4p?3``2=I zo?mp|BI1YQ8Cgf3`p=6YrO3M3wz|e^XE}5m8DFvpNekupW{Fh5Kckn)p~?@ud~p+=$> zUSCQovwdG?T#jv~LZJ#fRxMMWh+bu^im)}Vm+Dw9xmcJiD^N^WxKSQhE`(GeQ;vG5 z6jw1!Q{yQjknc4-pyNBB1Ns>4846d9Sq_PzY^RDxTe()|sw(E9NKjfDsq&wyoQs;? zqu8vTO9?8i{@^?rtuTe6^rGZrzH)ibnF5RTUtFo8MMIACvC@2N>J+v9#Xpg1WQ$Us zsxiuirP*&nK0A9*-3;5;bM`a$W@;(KC{E`Kcrugy-g~gJG#y4G`-y92RXR@9W3`(-4#cvWm zqD>1eXFBCosbyxWl2xj7WsGm{S`Tgl1a#-8JOp$Rss?s*vvWdrv$Knec8jx%Qg+L; zi<*}UN{^juMTKXOO_Gv}QPz2cWbzB30uuVlVGr0=<*{WZ3kcT(_SMzp6$>JI8p~xx z?Pd0J<7dt7@<#&OK@Tt3|Hx>-$A!Q(*~i7fZ>LLxv{aU|Lu7 zC2CO~09hlHvzD$u2^=gJzdA%sRs~$+hBBl>hwed;W+1K{(*OrJ9uk=&4L9`c5yv|` zmaNm$_w(rb$yh~Y{GrPwR{Xio1!|pK*YXvQE@B4S{o4nhRt!WF(DR;vWTYZQZ+s%j zh!4>(61#(jSKl@AKF_ZqHya1-l9nD0?d8m%=DpP3MHn!&K8w!PHW#jKo+~s&T01fl@_V9!VNjUP&93T^?CZ>R3j#m_*uA zUR)j#ruNhC4wN|5zLAs}27h_}vsI@?CT+f-Q%R zs=Cvn?rm#k%~2Gsb$~W;u42>z>Fq!5O3bM8Gx*1l(&BDqgNTxafOFoDMKVANTCJAG!U%~__q z^rj-0n2L++ChFt@!DE!=)wXN~U7qGdlei1_dL^Vy{^F%3pYf8i4b82PBXNdUtxRns zp}=?Us;16*^<$|26OanC*NniY}q{v58n9hV@ad zchZqr(1*8B`X5<@*JFSzfIU5YFY)LB7Lq*yd@sq)nz*i}P0JrI0AQWQ05(1v>CoN^ zUjfm7IlNLPHQ`3MXrvNW7oS|%IB}`Z(dj#E_xaNkVtEj;OrxepkN{+PK?x4XG!?y4d)ua_S<@q~c?kpn zGCm&(-=Bt;Z1uwyrZv+efV_lH02#E8#IM(A{3nyc@aYMqybKcn+pv%M@0W?}2b|YY zi-X4Lk!b*#g}21iTeK}CSqE?gRBWv5=Y&1-65s)3SUwVruhF_sIBjQaj*}J#?b9QO zc?nqnvKAkStC#4HJvPT>ivx|kAI)^KXCH|~9|`3TP3gyU*o0xZaF2=L)?qoRpJRcO zX#htUm=jG&2R{@F%eY+UGZmGZqo$Ev2AvAJPKbGT2vogrgAiV2_=R9Q-22D2|XYSP*d-T^NWW=B>b&`cnb#{g!>i{wH5TZXZ0CJ zri&m&m>J`VhY%qOM(TxH!fCZtg;nvZ>(k|>Y||QIG{R|x$d5b6*qgZJC^bVrQAU~w zQcr1~WQX`fWg}@OyA#W^(d;#HXep(7U}>UM!0`CCDXE*&MWrl`nVYo~OmkjJufu81!D*wYk2umV!|9BT8H#J0_l(ck;r*>Jy!&(hUj^M-O^$kO zeMFmaw>D&SCYf& z+}WdKV9?J!udoX9Y{AU9O_M}DQf<$xPP-DtX0ToG%)~v9?#TN3e$e|~tXT73mmlTB zMWs!vycgFc^Omgg0+HuukgI=#3c!ML+aQ|pfNl2g{i@z8s%I9|JhEq4=o~X{_3&c{ zJL)&%8z80_>4BO^cHfd;{x6ahsr;OYFPwal6?=~PjNF^lGzihWZKkM`72#xw!h?5h zJmzdkV>+O4`V?M(&s$vf#O5tDb*|+hCzmdD9!^`j;>1f^-sWMVE_P`iO6FfoV+7~9 z#{u-3%(^At<=>o#!dx}idBQc>cS}Knzd@d{JaUpJ)C7h5&Vj$raE_^XqW49ou=o7plRKf}UY;8`G5;i@*@p>ABCaSF4poqENsb$JR1o4W-iWFG`C zdA|gCUf?p?ZmU;Ut-V}%zJz#Q>@wbNw^`>~cctBx*OFaIbura@t*oTVOL{Z|UsdExj5)l&gM2NpB{fKtH)C7XZH{L+9KXX@ zm1$13d-#F7JJ00(u5a*G8yaP-uehM>7+*F;T2&bu*Jl-eO7%H7udn%fNOBnaa`eZi z-cAfUSpS)3Al*(7J!Iz5jg7w^OSlu@k?CfV97j69=24GL+CPMN&CjN$8Xa|v%%&|F zJ#`GtrV&hRI2d+p)}_W8RX8+$&G^vuCFw~v7^S$gd5w9!)_Bd)rA!;ga4gcL=t-+M z#BEcrPC7q?%An>NlXq;`AoYvaIpl29yNc&KjB`xeV0a$sa?IOcLK+FWi|4108!5a? z=Vw$HNxDn^kj_mN9A~?$7C-6QnW~C+rZiFJdbwXa+2V=<}1t@okF)LXPeBpn)qYR zOT^QV9hb8@g>O;KHl11ak?k_Yhm}(?<#Jr?G~RZ(@t^O1 zSG+yE(o+J*-AQ}@+7DRMI{KP)*AZI<+e$X`HrcMUp0mBSx_0!PncC7e>8{j%BqTSx zcDI}z+FCaGu9&X$o;A2eyNU**n=P9zoA2Wfw*t2Vw*j|bt5B<9tD?J%yS2Nv zyQjN^yZKAuP36t-?&>bjZriTM?(54F4qyEW4gt{Ok3f)d&pnxvPR+H~V1uX6HdAJ# zxwB#;I@7#SWxk}i+iXtkDaJJeFXK=+%R^E+HRYUD<%OWhCU20-IsH zyFbQWqFQhH2+Vu&#;;WpOcTkqgi3Z-iE)VEP*b%|tP(@@bSo5HIJmf(eIAy-PrPzD z8hM=4(t7o+Y%UU~7JpQ*BWEP-$@H|Cx%)xc(C(3sDKaYQo-h zJ8XMx`6ttf`k#K#GI6iXt+wgy@r#pb*ih(@GI1k&W3uUq_DSZ`@a5~r@OLo>=Ox_x z_tV>(U_)Of$3snZ)_0DLIpwN)a~i=Ro+l(L-SNEVWM$N1Wq^K$gi(%d!Ln2XucwVk zM^7v5(|gk6&2z;rdDpKmCrIxU_cWd{ zzJ0b=u$D@t+`3i#u)8KT;Mm+O3F?MCpS!&Lbz0#$!~eDuP}fpbuN+PLZmDp*yIwX+ zkvG$r{VrPMnOwV|{6?yrdc?NKc&xHzrxQ`C1lY*E-pX5{EG0G-?p1=H3z=zAEkziw zR#d_ZjJ4NwtL8qM?3eLoO%yB1K5?uIS9u^2DmdIhd{H7EfWPRlNB2yI&2@Nl`^8Dz zKfhw*#$EGM-NNclKeZ0$G3x$6B*Ljt#GS-3m7`Z$nZ#{B->E zp-5EQbaySFOD;fathrTGK_0Nklfre+R6(hq@gNdwa9 z54#23XG6-{Md??1iEU)V9U0U6E{iZF_`uJ1b z=LHDg$gjHo3mCq!*t-1-2)@zZb$KgRPi%bsQ}s?4{2f5XdfC)k`u`+9NUtId#1mVo zuA)p6NR_{1r{?7AxLtASKeS26x+lkq1p^(=;)*ipDs{92C!DN`9;iySs!D%ILC+P! z%TMA&7f-Dm%VNK%J(c`eXJi*t4Tzc-^5hoO{Rj(U-_XPbXmVNS&ll3_=RiJ3t0k#Q zEK>u-m469H6w+XgPdcjD^UvSZ64pG@#1YoW(=c@}PKG69<_*?y)B2a-!`1842f)>F zt!8=3AzAd7QG2Du{4=&?$CIacfXS7MJ3;y2NHMKg#iboYU6r7nY_6|T#eA2q!}d7* zBd>?|GrL}Q{s8yX_od;r42mgUUsd60Zg_%|Nv}j6K};-gKrW@K1PVGBoQNSNB*aXN z3ekYgOhRk;%McR*2Ad^JufbS*IU0--;if#U^rYS4y5oAQW&6Eb)@PyYD)+QZ<#@sG zYhI~vvyPdqHFGQhS3;taj3S>rm}gCqb3?#58G3b3-UIFEMBx?f2wM!21awz0K`N3t zZ#J0ccZmfli9l9vnAiiar$Ax}*PKo~sZU0CAn(lbNtRShxBNC$Hm`hgtg|$FMkGQj zOhB}BFtr3FelD3);Bi_)@ZT2(Q~CH0&Uz9}U!ql1en0;Usn|#4RWv!jXndGzLGf6K z^*l74&r(^gnIbL>QRmsO-&kH_xwgCPdrH3KCA&cqU^7yYH=QI>xDTkPm|U2n{`%}E z6!4xjf%;?4I9)N8jX_&M?81@+GfHv3Qi2kp4=Qhvvr+Snc$T!F@^(The5laNiTp+a zqnx@zHVQNCR1pdeibSY6fCPlY`&ErA#$lM5k?i>duQ@_T%lX;POEwA9r>Xv^p6bFI z%FY;i8oy8c3{XKFaH_~?yl4m_TRQ*S_`uuv&|Bm__YveRyl6{o3=~Zr1QRk@q+)2Y zP}8GRsaR73`0&a5(?hAK14FNPP(5J{61>ESE}v1^1`K>~xxMRB8$(}YR6uBgG! zruFQCz{HXUa!=@Ae@k{=5PjkEU*2s$oYs8#_W{f4Upfu={0w_u!QsTF43?Ef;HNg} zel9=6-I=5-^uwG(Pu9CrYhV(;9<%;qT3|K=P;1xqF{c3?X#Ne+p5#ytf=LP#LC_ol zr#}G4gad&u`dL8XL;OQn{X^Id^I>Wge>Q?(j)7v1fn(BwVbX$P(t>0D>{bqj>G;e^ zM2Z_;rr+sPI&6>&U%(uLAh+9s5fGy$C-o&-jbpPr;_6I@SB7lJSnB*GJ)7ko#o6AVYJ6B3zCjvxd3 zFA6_&JEC_8BIW>Q`R_;~O<5T7Q12~PptP9mUWAw=Y?){+WSM9kMOi=dE~^-qjk2U6 zp0cE|jj3en2 zRYv4T!-<+d86pL%)I=Bs9G38FA;12Tov^=QY>M^dTR<4BP0^q#D3f*D3wcKja;`+U zt1w*zfsa}SBUc&UQnG48ng(+QAq?pV{TePJmfT^DCvm46VGg{?Mi^cf4&5UlCcF6^ zpWu!)LTx1Z8qF%Wa{O+$J)&W&M;Rt3vU_?D1lqzBSrAg-Jxe-kJc~N3{6p79sMJ;} z(x}m>&}iT+q)Nj}-OkufQ;xQYvWfOd`KI?E^&s{jr^@6>V~s8w6=ICT!hjhuXspFT zmWq}YE@d3#}Lz>3LcnL)SDEN z$7Z$RzrBNGXDbwNCS;}jmdsMqLad8SgH02TNe(*%tBj*3k#{=bY!r=yHWbZbK^~1^ z(!av;D;jNo;=ynO8>twJEjz-nAYEw!n=%(?JlaG#19k$PGHKMPn2jxiM~<+;f7Ak# zO*R9pI9_WMorPio*PNgsV0FOOXe|A5;vuX*?pwPeIB2{m(%8P&&6*fkG|JJ2$>0J)O)?J{PVR@xd9es zu64Z-`h)7ZSI?MfKc}3jWjgN>KjB!8X%5q3 z9srk>w)^Ekm)&}=&jBP>8 zt7!dq5$D$=k-c8GkdqG|oR0>Py$G9r%h2g%=Qgz*${ zM*W`ht(~Jyg|KGTSbgcU9lr9GT)$N>-=`M@1>o*pu_MyM2X(iCblY_O2ikwd3;a3O zV&7g=B%RZbPK$q1p6C+xrWoy{?!@ca$rXvhlj@#>x!!e;*^YnG*+5{q2eU2=zMRy0GOPH8j@pD&2i{;8q9spLb|ZY5$eg}# z74cQ?yhJtp;k)8%N$K9IOz3RkC*fw|#SCloM;xfqP$l$Y37lLO@HC5cb& zS7mB}_`<)ej^WBto>LET=K$p7BlQ2IFr{G;%_PX^(db0eb0@G@V_?SZ6DhQ6F3eZ| zw~beFV;o9xB#vDln|rW)vq-39;{HJ#whi0gVk)0c~-##%mHw@IT!1c|+$bcZj zo&Qta-9kgahX9A}1qw6&LH@r*z;iqpWne&rp&==DIt+E%NzP_4rX=iYRN@B;gxXzm{Y?wacBZy`wQ72!Vyyn<7#TC$Uwm+go@aGR{@_TxL#~^Skz2o8(P( zey#X?zZO*f(p#nPCe0G>V%k$mC*4sDGUwru*J$1Op!`_9B&@tx&NT*{sss)MbENJe z?nEU&Z0w^^l1s$lr&OAt+gFm+wX`grViDwG=b;m&RPGbzrO(J0Oj`SV)s8*u?4gM! z74Gkox7$+L^C?JQuDgD}yqFR!|2JB=hgO(GRl8PR|I}P5)>q$5|B6>YYtt)3PfuYN z}D?{kCtpP1u-@dIQ_IP9a2@^1)z2XF24ij)>>>xHSpLaNYHgR2u&sxT~mZSQ|$ z^yPmIlXvUye-*3kZ3ZFObP~=@xkkxz;jTKkFY&EkeyO&7Le_zcw3rrQgryff`E=T9 z1e*lprHWbp?X=$Sf2FkUaWlZJ#%Gm6ZYwXW`fhAFH#krkX7?+@-Dz`@kVxro0D9-u zE1XlsN`&_WtprN`}_PIMn&1t{ivVzQT zqO_ZHG8{d+B=(p~lA!hBG|ubziX4AmEJ&-3waMRx@7GLi0L`n-*kng6T?alUz&M?x zLqBHjVVMfhG|rwCG`40P?9a>g2EM)C%|1io?z!<8J;}>+=NrW)-#j2WTQkdN*y#t1 z7iDH?EP6jqJ*e<~m+ic98fTo{l&05ev50E2U7hjkXDON62MwdgBj&TtAgo%*o!V;> z6~b4y3r;F9^*(Pq-+e+zc)Jz)DD5`?>Dw5uuU;6M*6mG9Iqp_$Ls@g2=eAbP9rRF4 zZHm09q@Hy^lbM*k_mtV*22)1e0 z&?n!sWJLE{&965()(;Ci-owE{_zMP16PY<)GhY0h$&eWoIr&0NCIT0kSjiZp6*3={ z06mkPme<~t^%ch>byr=6PWp#(IyxdQ>Sd1QZJM`u`pow#UE=)`C4m=omTZ4S-{oUN z?;90kj7qK>zjJ=xH)s)a^zmqFsY|6o&{^AK!|5UlUO&z^$H(2-;Ja31ytMzb`YD!! z>rZSYZ-oKlnHs=sgJF71-XnT@_9yr$j%4=8r}u}$ov8UDyZv}AWGg2%XVt3OZDpOF z;VUz;dEeH{<6S3ZsHOmavR2$iHckKBb$HJzgy`uKCNFW3zmnR?dTPTi2IIA2dbR3) zTAXX$Yjx3%PJqYu>!q}>NV>jF2QQBO^x{!18_jp@ zAv2`pCpLLK80!maZBh89u%gOa<@)!&oWAGuzrf2SjwA%y&%$=5dmg()dmOH&l7*0z z<1VMNR^7&8&$UZ`PF445^KP>gZpD)ctcJ$qcnJ0Yq0Hg;Z%_ z_K^M8Kn=j=tu34kc6-zRF!m16k#*m`Xm`>{$F^-(>`v0LZQHhO+qUg=Dz49Rg1rgHTS5hU2Dy?^NN_`|ADum>=D>w_{839q}M0`C|ZUZoC9uS7~Qi~RMNtW4)utv@G%6;wY5 zdtjcHkNr;3m(Vn4%Mq&NQzm-swL0cqZzGP*;+yvuR;DhxnGbz8QX}SCPJP<{KHE2r zzn>)0y3BZ26n};FzYX8`Arpm8?}%;1+`LYA72S9qwk>Bu1<(``v0B#Y_NiVN5zh8p z?O#H_YTd}5w|}}!PG)PNAGwrl?cDCZ!t014;v$UcxP=0hwG3Ly({W0{N7_ zXv3Salbi}fhzujd*xL$b%(LHn`!2ZKlp_M-5AfNm`~YE3rjbAxivI>@F{N%Bk-Scn z@osaXzUI7{WBDmjN!j*mio>O}_~{mqfm12|@H3_x(L+|HhP&rcOl_e~A~=Kw#Td60 z&+@g`IJY@mOfCDI_F%zI*sH|R)^3BTWXQSZq<)F%P9jA#3;tFV^RaM;*uh5p)_hE1 z1YUa`o>uxO$)j1@Ub(aJV&8Vq&SO)DnV7}!rEhi~YmFm$^iZ4)D4l3#d9TG;f3Je;;e4LOLELqTJLgV% zmU3?XA*zc|z}5cL3?|~djPIhsWt^J+bl6Gl(2zAW$5T_i!l?9l-8CpCx7L+F4XgEr z5=<5HT-&53b@Ut3>;d$(NE-!Cbi}eR-No|I0^=>(em#;jLAJboBhYI0f|0H2v*Qo1 z1b(S@*hn*yBf#_C!F1O)zkpXK>LT{$&g`<+D;K$k>uh)xeFaVJNIhCyTH2O@4PGYl zg7q*0wj*dLhEWCsccO|#Ml>=813f#_@Dh(7rwUtb;PLe~Auxo!4z6+|#VC1{#cEB@ z-28OP86$1kT4sb#l7K%0@7K+DVwF=v4ZTB`1zzbQnHpp1vXrdY%+rp-5_M$xFzFsd z)|&mf;a%WXWaJinYklQFjd|<%WY<}?2@CB)H2(XCQ=irieM8_RuA&p2;??6hB{K|U z{7J&6ysNuTPixAPJ0+Id)T~q|kN(u6>Fn6x5g_xE+|7w@ zAL!4_OPGx~+EtUP1FnSzle3Ta-QHPj^erqMOlG4C_nf(?q9Cy9CuvxKZ8yh2dC63U zLsNn>_l840gC>Wrg;{R|wbD^|I2%1D$BbdR*~5(mzJc3P#kn{(9gKoXQiZn%lR;Le z?A{{x-;lNNH%`8lVqNy^GRBP#Cn?>+?o#zeDD#}S6* z=0f$lSvG7|Us#qNpGb1n-3xo*(nao4IgIa9pu{CIFkx}NLaF7CLT~uSneCzTWW4Br z?)WLMW!i9>$!o!sr7iO0YVRVP)OgjsFBUTZ@6Nk|vu0~%SbVJ&l8}(}NWPJ9^2U4K zcSrOF5|Ug3)s(lY7f?Oxw~~VMcHhR9JIgI(a0%k~_OM-|*7$*xM&w6gzbJrjrLqwZ zcE{`H?mDPp^VCQiwTZD}dC;x(5L@t9>t!VhYwq&rtCPJZA*B_(?AA9*o*N^!6u&_i z&K_JPKfcGd4DZYCyRUoqb9l&TM7v_b%l-}yg?DB5_|*IS{S(R~J^=|R_({5aXY}RE zg0egKvd`q-PB+!Z_`G;Y9}1y3LT-hsF|XfC1)FL%|IDLHTLZFk-Wp6}G9 z2}{YHkv;{39kINQ~D zT$CPb8!V5B$atx(TQ(Q#eLQ_5#V1xj)QIA=QEuH?F`Mp>Bjp3mZzXs(4H28|W)g7JNlHD$MBM&b9u%Zn*_nD_ zkk4kBcvQ)GS9a^omF{9O9#(bLsd=(N`9jSxUQwAyl3@@*mYfL}=T5eqY@zl+=X0#M zR2E==yVvZ*bm7F=J^fdDynr&;LBwY;gT_)wxPSWyaR2%Hm6V=z&iR`nm;(o@c}O-N zn8-toj%@L>z7-Z&t{nwT8}ZVWLIdBv6W{mJcWQfg-DK&T$jPC8@vr_ zVlK`?!mTJib_U-Mta(Q)Ub~e~)eRe5Hk`C?fm#0SHz%lUQ37-BETw2v$E$McbIqc- zT9$G*xkGinmr2+r^E~18S$E<#b~`6lWqyBg>B!yBr+tV=c5O%rn$m!&6Pb@}#ztEQ z;akym=tkNmNj5nV-<=gs+i473zitGO{!{53dI z|DwzqJmejNfId+q9eKjsM&p(H5T}zk>)d)mtL|)_FC#E|%9K#x4o^;|1xYtb?Txrk zohP}kz`c3oVHR{iEj23fW>x-?wJ_#o`7-n>Y~|kg_`3S*HNm77os$yXL@sNYM*J=# zs*pr2F|`uuBd6my2JxihhhY1}?+AajrpIiGS7$Vcgsu1X-vn{Qd5h9O^;mujJsUHg zefVh6CM<@Qr@%?bOIH7^%d#8yvn-P{t?zpd#x&S{xDwCn^NHdwTJ?QR-MH3O8{ zPBY)eM!#0QCJsEot!uHX)D7|URg<0_PC;c=Eqb<}IrBxCU6D=rAlWt!75p{sbu-~X z6Y7VBIXNfe%$6`}T|A@BaGclA*YP^P-`ZR&?dD~*_@z4Z$6p7Zf)Y(fTkf%$W!P`& z?xyJVmz3OOHSrq^J)f!@?a+BkZusg;M&ICIYo!Vj9;b=DyXHoH8uB2yVTwB{&T1M@ zUr9-Tn6q#7KyWhokXF1x>1n-G*!N!4g6I;yBu9LuY0?6-l=|Fxo5MnJFt8CY5d53fAYfu)_$vJG7XSbt_=i{+7zkKcng6TDKmC~4*#A@e zPsYtJS3ze1iAC~`L7YhsP|Iz-B3=IED@}F_c%>N+%uk?Rp{F3A! zuKz6!+y5oyzZ$V~{Ez$$1Z+%9|E0kfBKtr1U#S+s|8Apy0RP)YO#hc`j7$W8FJk6k z|Cg9p*a-j(tOQK|>dEqD;Qv3w#P%QDe^CCTBkLCi3o9c53lj$cE8rigzVKQ8$+LYC zobI!>6HTpmGOw9j``^Pf>N^zJUL=D>pa2u$iT!kv+YzrJkdakdc9np%J~L zk+q4VDFFu~J3Hfl6&MK^IRMN|47|LsQ2*`Au9@dqkh%&=i_cSD^kNxRV(lbmbH!gT ziPb{vpn4X^f+7_4RsONndI~yGS`?w*)0iz#`9zogZ%n0ydUX&5rLB?SoN#;H+o4>j znzq8ZC!gys@v|V4A<gr<&i&o&n ze?APGz7FkdZmS4Z{2n>fNc0}L2tZ%|t29FVZ3Xt*XemGgt;rwreEIWCRmbPBZEQ02 zQ+0#TR}9P7uKDFo{m{D@LQ(f^jls`n+3gVrbO{l4Lwi{W=wYP3epY4Z~nx`9_M)h%c3F@HA;=bCn0 z-KT+Xh+tLF=(LwrLFBgFyxCi;tThiof)QGs7R;x(f2^o=wjL(Etl-CIqqt$}cK-B5 z*U)s&tVVaQHK@B0oO94r{P<3x%LDeq_d3)M)g#uob_5r$HzIujK5HOqv zB~)4VldYH^Aaa`GM}bX#-oI}9Qg!QTIV+B$6GHw2;^!}PvQVZpieX;xyd}_>d;JFS zO=qdD32@fT=OHNka&G^nN>BH zwwZVxeX@{n_0a9mzZ~(nFY~{Cr|+qGU-jM7a&9*o=<${NAm)q6%=JOB+?CMf7Q6Dl z{dDvU&|`oJ?q$IExPk;;T(6j=EX;LDV}Q6oI;(zcv6Xv!(fK3xl)jVN!ikU7T*z>P ztGs7)5{0E?eRw_lc>Foq4<-=#JGn<8(1uuqI1mx{_#uAr5+CpO~S0{TTxi{iwT5^>XkL?Hv?1nZbO1d%JZ))a=t$J%QtHG z8S}m`y07zqT{IlzO8eV$S9V^(Tn-}iUVTcN0bjjLW|#Sg44z`?Y`!R`4Ijq7E$Yx7 zGmC(wJ|8z8S1RL)Oh&KO`C?%k!M}y=t6|9IgDNo<cT(9k!Kkg|wzQY5Y3Qi^-&$!jz>Jg4qp zX_zclM=NQ$r*53jk2g(OrEMM~Yt+hzsBX^K6-{m58!eA{VxnKN?Ij+))Snw2@Rs0W zS7gsGeZLz~cyQJj()-i9)&UPQ-}r+iT=B2owjA#OFF?^oQE3bN>$#>5oKR!2`T&1?IaFcvW?lGSmwZl?9#ErnugcR zBNCM_6t+%4!zp$VRj+yXu{=KW6y)M<+t}E1tK|Xigb_3UW^z}x9oPQT zX$oAbaTB~`ENcrC8hvCPTE%6m>ppEJB*1;ErhI&j>4>NXaRYxT#v>95j50{UhREf3Y}pwQp<^XXD%eA(bCPi?iH?{KDycsRPX zO$spz+szQpku1O$d*$Hze#K6EIdWY3NwtT+y{gB3jt(kjS1r&ClC~ldkGkkBK8f5=C8*vCcjxi+6>hVY zXPIF68VV>zjiW@n1QS8?N1_45h0Wu4#71$8l4GOeLv`lH%*l;oV=~(m{^VM%%EU$O z5?gems6p0z>$*MR6%|ssnvww`rw-LamCM^&6nI@}o&&P?S6+5q^cx@Fy7KCrF|t@Fzd! zM?{a}9J#lN(vAwk>^f*$CJx3N?B?F156Qgk{18)+e9~f8L;_@LV=fK-1@;tHj*_0| zACao*4`20Xsattra04(gu|lrIa3`GCOQ!R%dV#~Jzc&l3Dq33d7{B5ubWlQSS#gfe z3+K#+dGv5Q;Ur^^6=5zIcu^lUUfcP$#4W)}RHe@aT4S3dL@2%_F8ebrgCv*6p4z(f zi#ym_*?up2rDojGSlPF*zm>+GGLK(Zy9yA0v(hMLhmR2LCXTN+>N)oM`;HgTLvdeAyi3qE;~H&83b+O70qH~B z`Rkc_#|dZ=sA7iT0a1gXP1Y&2@ew56E$Zrb&Ar0`v<5Z=nn1`PJ0oW2v*wVzrzLVh zazV%-G$Xe|#2_~#HX}77up++)O8a=?0Y#SgW2Qv7g%f66p}DY+!kJfb-yG9)qtOW;kQIgnidH7}ka zS@stNc_N}XBxxYy5BR)PhIEE-hIj^lhD_OgHgv*Z#9$;SNI?j&Ku-ZY!jxFzUxwZd z&b|0_9uGAaMe@)FSLc z)cpYT3Naw*mxh?05{4(n{Q&(XGmS_Dq3$1?OI8XYZVt#q5EcjfB^`?>;-hk1Nc8KgwPK86G8{Mo5)k_+5ej3;VEs) zRK!z!`HC$+piTzj^BOyZkeBTI4qE~d|0T*O6dn>EVe<)l4DsqE3N_RP@(N+IxOj`G zQ!MIl7S@`?GxiRw`FV}v)xX{Z`L8n-yVJ|f`4D!B2Kan=)5BBdma6}<6l!)+batK` zpH$QZ5%+J`_-hlOG!PDmJb&+O-X4+eoteHVyez&ffNMqe44E}w6;m5_jluGlVh0f@ z49tOme>1S%GJ=0G7$m?W;ogoZ`?Y=*ljhqxg%3cqtKl<7+QsvU{AtIA+7=ORnM-t5 zHk_5{@-wM3OTI;JL<6!#Ht5UKUJT3;&q`mT0-FM{O+}X!M$St2v4Bk8=QT5OVln?tteB$Kc@J7g^1{5**-2U~52Qn1!1>9e&Qb$24o(k4O?CD2& zC|nBGgX+H~w?*N=M_PgMLFvJvzY(!tQkPWSXR}>0C(e{HC8Z(B6j9}8PqBsDu>^_&A$qb6 z*z-aeA{i28MKJ^@2=P)dcm~~)(jAFV;OBe#-tvxmP+aAA28`XZj%rZIXQ;;Uc;tnEk2kHY&ffVWXFofv{19e&`zk9F5 zIc6!1F?Xv0xWtsdEv5R7!qHnq9Kn$j0BQk zbwN6-28whj7E@Pm}8duQE=pJ2tUf0SU@2n>kS0^Kp*9k^A_TWyagS7YAxT& z^NhIV7&W2D$v+o)`Eh_xfxmZp`O6LLz$h_A_QU^{XcU@as(?GB9{WHokuGt_ZlER4 z^7o2=J?4RP_p1Q>iYv#CK2XgY6fbDm6PRY041l>*GzQWDC4n$NM<6p$ zQ2;qFjvI0#yKoQe8Ch;(@~Lm&$CF&u4#cmDuvOeu z6zQI{>+RZ9x;*=DPY?3l+raE*ZllJwG^$%$Zw0P?W7FS{(nWU5%F#z0o=K(W z=bE!~lJDTm*S9muaG4oot*NZamBP3Y#9mt(49sLzURzuz(=D5@qC7$EypLry&Ga?jbuL;gz8PpLi?=yFqHxuc_SG_733Qd9BF9PO~`H#Dq3-b24V}D z^!!c;KYm?UorOMIzjb)hSz&0YS(GLwWh0g{Rv=Em&~>|B&M)xb4j6yyDC+?01nJDu zj3TbmvxO1XljY*j5+dyg1ajf=a8(S#QzBROc@HAZHdIcl{6)ZG6{<*k)4*z&x?NPV zTVr)6R17O=RlX`f4j@5nJ>vwPIP-f$S~)p;Coi0%EnoRfk~f(yl|CZIiWPTKj42u(sk}xRO_f z!1i)yYsc`hiM4Sb;kkap3l@oe0(#l#W71?H-j|-lS$v>oP#cqPnO-|Wu zmwMg{kiPCSUiP;TK9MblcJ5_$#c9J;ark*2$k&(98r@-QloRKui7fuvc=_iie+`$d z{KuN=t`^PRuiE(`)l-FMBnf8&F)9(G%@q5dSoP%yr>9Hw$et^#Gk1snkR2d)=*7?r>Ibl%<3c*Z1aabM9axt{H#Ax2#q38gP}6^Dg8u zTaD{Xo?jZB2%31@?9pc>O9tR={s9*YDa&)S>I836KDh%3)c4*_edWN zFs+R?2l>}NK+obI+_b8%bV820B2MV-T-be+58u_*!)kW!x}T4F->sj);edK4cL<&l zZzE6Fpv68y6NHjkl{|8HGVd?w?>|Ir!D4>N^e9e2a_}JhVF4dZ{UZc{6N9@XPSi&n z4D!@yTWm;Gtf!7f=ygSY9*EVyJGFhhO|GxM zKCdNbr1XvIg4r?c=HiiK`ejjvvKB(29Oe{UzFVs#0E+VD`P_T=Tt{9%+!fNsckJDu zv31v(H@wl+!o?PX84nXLBm$wQ2NlG#LJA}1fO2?r6onRy!hSx2=wC=pfy1djKGguF z?!bcCpM?-Ao{&k-(D6p*ERRRM1y+ZA~>@C_Y?sTwr+w-m|ySXcCV0_02*_ zoNpHG#p@`g&Fv!3j#C*5aMvGUy7k9h?IVhm439=%qI6T3<7DNl7Ary98$D;8ET$%| zKg%tsXDQ?9F%Arb1Yr{?rX|txv zw0W=ruCh4-^4mCEMVnx729@z%WZcIl>^L*zqlDF4m>DT)1RBY?aDoIeX_G0(>BvSn zS)lf6*WZaMgjq=u*u;vZFm@eLg{YY=qXca5v-t9fCURYac_z^&rAH#;BE-9rN8E|> z=b3^i=jb|?5em?LH!+^RWV_7ZtAGwe%>b&l1NCYN4Y!2!E*9CHBqOn&x9;n4Ufydo zPg|KiYd118u#;y|GhLy0VLTFF+d%*_sMkZrGOD1`2;}=Tm(IKQ?GdRRTvHoS(pYMN z(&i`cNfY~r%y|Z5=VBw#gu(v6cM@hXm?y`IVJJ=i4eM=dJST1{YRAM$Q!PfqYgu_` zXC!JJ_sNl+V z96r2E87O-GAE|24B!0x~Qa^oK5S8f9^cC>&Daa)pF6=HZ=nnBs>$;8& zle2o7zc(tGJN~fx1{N0-bj%x`y4^JC;+JY#@kgqEL%bLfmCE3z@v(kvtFx@x?(feO z^vQ>0HAN`7;&9nhO{F_3^JKS%bp^WeGWLSeDkU?ZQHQ}rU0iV@$zGv{PwSC4c#Kq( zq^&B^9`4QJID6EF8NIcSuJ>BN5uBKKOHfAEyT|DI+_TRSGZNB{XZ@T40_l46Payja zxU4@1yO;yIgIgk^6PlSf+Q;P}@zoJbBr8|vyL1bb!Ylcf>?Q0CXd)<2Ke7+)U|Y=8qWbbeVcWbanXRp~(wQ%rKeR^+FpeLk zd38E%!`H2Owuorfyd%g)cmfmXNIl|r0x6_riWDAccA62ZWra)k?H$AU@jB$o_Uy8l zY9qUP_e^$S`K65I2a45hSaaddl{2mfw;9SnEEW!#y{jrOd59)|MHKZu<_-Y!+XJzA zgsnhSk%6;Lm1N_UGxaxm?kvJNx(Wp4Pt&ZCBEJWy+TEY529co5nh`BK^CP6zcEzeA zk{%U#2eyA?t($ki{*E8v4&JKW;MF;`DVx?}Hk8QB$Eup|SEeSOx2NnDO-M~S9Bwh6 ziKf-0?ifnfTl{gUkTzGfc+c+ir+l#j73w{V$T+{L+`T7$gHFaz-!-PPiGx?$ zBUPGWv4&~4mL?k{C zC${R{*AoOkdRySUC5S+G@#dq#ri&i8=A?$RL0OA|dElLQVj)N)qu||F_(c59X+FLHK5KRo@v!0nPF_lqd8IBhHB*QfyXa=tj()tKk7R}5bKcz! zm%zNZf9O$Q9ZXKK?e8_Vd^C5#sB&}diD+=|GrjqCDR3UtdwOpsS(dTuWW^?=$0OGu zf~brUAv?q;I3N)Z{E_lsJr(xyZ)bQzR1u4o>KkWDu9OdmhDQ$Kb{BT6@kG zRf4l1W|Ob4tM}m=qd{t4fpqDXwu>nEt*%mTRo$qBb|`bNNHA!*1IT|-dzTYDKI<8C zYI{9619%K?Dr9(H6v=z%s%EaNk=^%`;Qaqa_unqBKIm+^-wm-T5!-0I-Au6ffi|Zn zP0*$+kgW{XSni-$w{uN%80_+hux`4|vpE2HKG&TG10;qNwOp?n8}PexTW@#YUfj@m z#QLc@@tAatt}7GrmkBGuKuI8EJQ8(9lZ3-!A}1%Hf(ADio|s26HMkj_(!1wE9BcOR zkhwuW>cjKI)?~O#hF|gh2kOT@I&asvjmt-*Oxmhn2PClTK{hy0Sum?4!n=ZQb`PNO z)W80`FS(*pKX4976P{9M?5Jc^z%3QWJAj?+1UJ!!FtR0|@Qm0r8kYS!K6Ho$k81sL zih@;i>(TK<&|qngc-uH;h?%MoBS^+?ja$sAcsh8N4gbW?-loMdm|_<`v8Ou8n@c|Z z7)gdHX2uXTU@CV?z$`q9>UT!lX5^Vdb@>+w{;*6Ij7#9Do)I{qp>QjI%Z&EX z4~K=m)f(a-Ze#<18NlBgjujJjuCt6Wj{Kc1XOs9oJpAdndBwDo5kAKsgY#;A={$QU z(sIv#`Wlta<4rm$phDDDWKZdTf{d?IGW0e?fY;Yv@$`%Ku*}R*9uFs zJ1x8?Q8+XeQMRiFm?XN`ZA2~rG!cz090N!2QeyE+!er|E3(-i}DSZ%EwE|@5b@EKe z1K3=D2Y}>gvu41C569vX6`6ztdZX*%Ib2%Dt6b|u7r{_NDfuLT^8>iO2Qs~@$6KE; zd2hvSvISc2y9pN%Niq*VP!`3)#Q7v|fwCF~}V>~e}mX=_DZhjNUW;^hg4E>CbDx8Mt>`DA)m}pglyFI6B zmCa1{60aHinior_Cc>lpjMFNJW)>!f4#5%xa-QIcR7Q*7dz|x3JMX8+yP4vSh-VGF z+m0?;3=402l;;Wu#DKkX{l5 z0VJ+dwwBW`7&RKgG!BPJdY$L?cEzj3Di4dcmhx=Hw7V304x-av;z1m%k^(NyF^p)m zVaMf{>YP4T^|QelGUr;w&=XWv>RWP?luqJdK#m$4k&Q!-rT)*>Vm-4})}FH4_CS$7 zv7$_4Z!L#hCku%seh)j&RTLJ^h)gVx>0L_amyO`z_%#)t5_-BPC6ifHLzx@p4;DnE zD=I2hVhd z5&{^QxK?>Shl4us>`D`DQhVXINy?h|*xco4Q<9N`c;s_b*Qd8f1f43jnnV|LkTT`t z5$NY*Ov| zllRzyR83>%#xUtUG)3?(xw8H&BfHgi_BO<{IG01VJcGTp91&NOl#oE52(tH zOE+v5)IFW)0FL_Ck3%1Mh&bOG7EfCi$nwrMTx7-`n|;ZT<=FEJdz$*V?SFN`g2}m6&%9M{q(kqUrCa~@VrZ8Aq){ko^V0KsHnnhYqEN`EO-zSo};`Ru6YxXG0U%u zWVk=TPZH6K)M7X8O~So$v}91lxKOM^M_CMA!)~TL+H5i3(^?7|TiR%7_tNQ#cjhQL z6?gY)xAYz_j2SPhO-U;0`u%d*)NO@$U;0qE#xlR7v;VfLI*^%M{~MdC!sb}aETSAJ zWMh@vqQLMuC<}&mi(G*Ki#+kN+)6mfz8e!ZtY{*)Crz>|Bq`Ej8Wq~6 z(lQq7b)RmxAlm)sX(CA<<-? z6lo;H z@##|*-s;=2)m^&F*49zi&f#uwHc6xxwolMY<}=xKA-KIVqXPs;=)#ah!S?|MXIz=7 zmY*Ty(mC8EOhvStaMecK$^O4_*Vk_A91f05NvfY?;iWd7SRmD7QG)eec(!lfyT7&# z#z_*!om&1z6B(|4rLyyg3a%;7EZf~>O0h5LB?zv>9mw)P4?YZHv5z~pO4%Yv8ZB(+ z*RqTQA~`FO4k1D991HYvr&Zbq(S|=J{ZuBKS8t*XRNWu;4*m=EhGH(HWy)e~k9P=S zRhC%w*pk%3vpDF!YP&WTQ^BCB`QQrg{G@9Ef9ZCX52+!Ek;aZ(z>>D8*x*xb6Xw1* z5yK29#bnc|w4ST($LY8g80_FzrO35m*1Eg^`-|o%MBmrfi+`I!{ z?U{f1dI&ucS&C_~)$-8|2}uSyouSkFhr+m_)*DO^Db;2oS<^D}s$OZERI!i}>JHY` zwv~we5;fLgMVF#b&tYr%EAH@wvEaZeXoP_lSyCSN&0KUBv_Vq<{Ke+O!C3;QP8oT! zS$i9~ z@oZ_tMD;gf1JH)I(+n4SDO8i{iu(nXBAR5dk@hCS&-TS?jpRg%{hRX~jdrU#tf@?} zMbm}l*?4(j%WIDf&2k`;WPIp}a_Cd`k58hY=7TO{(uP-6Dsvp;MVyf7a@)N;0P$2} zBkELx69lq@cg?TmDgq5p{Ob38E9-WkSjkEjIuHi=t#DLL8Hd859A$^c_QMH04~iUxV{*gvQ?|cb4~CPQK%HKfu#P`*w|Q+ZTAYA8 z3VR~tXBDXZ-j>Yq7&tXwxOzKm(Oc8SY4B&`w&KCW1X&5$Ru=xPC zXu|eacB9wbGM=Fd;BlqiTi3K6F>uOk=N`|=8PRZxCPR{C*~O;=W+82sb_Nr>jkrC{ zXK^ykEL)tNCQB|?rWsCW*LtnA5v_`RXQUd7FU*~Ci;*=1n`m%yE#{(XrL$C0f@u55xTP4)8f6gH zA@~yRVmvD2>#6^EB-Bb1R18s>?n0$M`=_{leT)ZFxMU@5DT|wi6fW?iWco@ap>$W% zx}So#^&JJ>wVhDlfmm;7)5^MwQXK@;X!P3+o3aYmf_04&B^slphaIq*fX>Fw z%k%uiB4jvvzA`sCX%v+z!FFh$<_e=mqV_zykayq zEO%66p!WV7zedd2NN-U99*8E<&u>=7(dUYUfJ33fmLV>%HaCJyko#E!--Ry5OMCiv zwv$l8y}vfq7sQ#|3^q%a?H%Mz^+ofQNF$2&Ml=m1T8fxV;8>jK&a6M=y4y7Z znGnasm6+UWi@O>r4i5aIpwZ||Vf0;wbX7zx>e9t`>3YP>9oASLYd3K3I3sq`P^Hpn zapjUW3m4M4(M00p%XA3#Ti6jn<~l-F{CPrQF8833Gr3=Nln;|9+C-PZ`f~$K z*J_67tr@x^tQQ(Fz|b!eR7$tDwn~*GQB4+0la@Ia=>SdG48R9E>UNg-BU-9jyxM^nPZr zFLv>#E~KVL(v}w`mF5yF?(%S?iJ{TmG0`y1_z?s-_qm;^3%3uiQ{6 zIyz=9Ee@_yWRtD$HmWBy&_cs@C-9{4R}JPSOc-Cgq|OoRgiRLT4@&kOMJk!>EQgO5 zL~|L5>NHERI%bRwc#CHJ6e_2Y;D@Gk5c$9^G9oU=qCiR{azcmNju`-41&($LSknEA zi}nwFk~9UAwd<9Ox60LuWmaXlhdJzUId;$ErlR@D2DE<45+R+$KE=op17tZ6GYYxy zaR?lE`CNB_N6a#8kXZ4ecP76qO^MQCBFRt62`IhAi98g>U$90;vHoTrH^4ZQh-$2> zCY$@(*bEO$^MULnDvWq%=;7%uJQ@?VR;bqF3TaM`^Hc0%0@6S13KGR5e)K3AsUkV2uh)Dn(r}u~jUN z4->-5VC)ErY&h>ahn$vWTutmC4Lq=it?zSR@uX6)e4;vE)HD93m{;eaZUrS+k+0SG zt?9@h)?!L=L^Lu|Q_` zn7^u?5LuLob&_x%+K*5ZzQAs{;=tOF*l=nqsXteX`r#`!SZuiBEMT@c&`#Er9B3g0?}N z5G=U6ySrQ@xNC5CO(3{Kg1h_0-QC^o;_e#U{Q}GT{aahLTmNot)znPSoOAk&^h}NP zJiVAl1bA}}kXz1nMyTfF{ciNuWx)Exd)Xb16=n45SuLc<*ut9*Q2c{+q~Js?{6G{E zkz}jU!r(P!gw~JW_rxjLs7@J#cMoGg0pES?`D1{dC7SY%IYezZRF*-XEJCc0Pr+O= zW^ObpYIK6^s>5%vdyw>+`e!}G$n6()j{cDd`H79<#9jaVgp82%bOW#ov+Iab+S$O+ zaN?tb!O&M-q)fgHs5Oo3v7aq{`Pk(?$I=C3<(gjQ*av(L+ z@(p$5PI2yBHLG#tg8s0^o#cl)+Eual>dsZgD*aNZ7zGAKmhoOnc%DV+JRz*mI_QHK zXhD+qD|v5igm(f7Q1SDXjCQ^$rzk=}*_^Mnk&}yjRzaiJ8rj-mwOADam|nW2?cC6& zRnAluJ!BKXSJmQLL8T+kZj(2|f1@q6DhzWY=-)3Lwm-aY2Olc3s#^oP>!}!w;HXc& zGefzzNKbw=Pajcpc~X<-nu}tr+8FhzU&-OU06j+$0rGF^IsxVDPTx zdhQIeTml|3X3A4)$npr?CmcDhKZBLBHyM*8f{7TR#`|^F0G9Nvzimbz3T_tJphbC*Tk;4xADPCu%lW6(^f8UgJnD%VF-7z|w zEdzpkpDR_nHG^sQ^)pbg5dj8mRHVT9Y2+5PLlILtiT_QK+LwI|`euC!sa9YB7`#x( zoG&XYt`j2xg&5Ar8`+)0=02$zwM6vrCmy>rIe|9Omr9n}n$`2-*m)fnB8r}E;tpMg z){G5fTvJ1aYTs2;LxVQ8O178@`({!1YnzqEsvTQDP5bOfo1U=)Cu8)|;?UrZiv9Ar z36f)%wUJ&`s4F=Tu~om~n*BAWfitPDG)9jrZL+9bYTor<|Exy2bd|pIe%Xu(n}JZ? zuW3D#NBl#5SM}dKWn!aJ%IJnL?F3hYdsFITZg4cQa1y_6T9)mw^Ue6={gez9sc0rq z(8-p+2@ZRclEYB{E=#F9`juyIZ(h+#j(+XgVWC^AtsVaxGs7%y@xHP4a7=pn^dYTs z5Zl~(LfbChRK=t>dy4dkHX1HVN3CSmb~|+V>|d9)sPgHRIJ4!~qBnk~RwB6vZ%2#Q zw4(v9Tj%t!xE|IUwsBz+u!GUHH z#l`&)QTUl=>x`otW}4Y@pv++f`@;n|iVAGCSqhp;&$MI@_#M$(?kA=fNw199mKdY4 z_7oS=C{JV4Ut45+*o#45tft|S{w(!p1nbKU#!dUVhSqqQ&25C-Ije)9fet;&A@{&n z)bez8r+ydbe|a1sV4b{3_xph%#dmUQMnR>=p%GuU&e#wh8G%`o2$k{^HSAGhSn|!upZhMLh)J&c z_T5ty1Dr{V`<=rA4*kzr5%m!bhBJny_wNnBmLSh;>)TXy#hLr|yOQJh2$v_9vWP2YXY zS}6u*q5d-wNlXh@GfaodEqfSMb)W@tfu!0O$+@}`kJRU71PSw?7S=W{v;C&iL)H69 zs%`?C_?Lg0@8(X2_!zF35HQ{7c8S(WprIQJM&Ms_yoztequz{ZAym$_W+=((#xnSF z^tA<0a$~iE0S8oC#KSkZ$x^igA=)gOfoD1o)rnFyRCyWae?M3UWeEOi^xYW>9}G(F z1P4)NQD1T&f~IHBFpxhN26lc%mW_^!t3@{wjTdG1hHGsHx2N&hClXl5w&`yxDUr2B z%exXqPaU(1unxNBZssNieRa8h8#*0M&spW;yK=$Unw96)_k5NvRkCj9mkLzam)XFM zDzC2bwb{90&Zlzmp((!2-`0J^x;(D*)3J&x_N8TTeoJ|SW?dzaasY8hr{QU<%_%BA zffS=X>q7(9<2hLB`|JQlSf?-TrqLb5qXJ&6I$ltkBShUB9R=Gjv_yn^O;~58A^iIW zj6aNqLh<^x*uZFbh#_P>u5DSmD!o&cp+3|ud!sR14~_&B2Rzx}WqVY6B+HKyR*&5U z370G?Pv^Qya&^O9Zt1ij!xpCo$Ach0@a|6e-7P`+#p*nikjWB{W5?}&aw^lpj32{< z!Uv4_VaakJ`ZEs-yNw6Tc)u2QpH__A@gU2zVG(9ME&If}^SZr8AP_t&Gcu2N*Y8eC z@yHTx#aDspyuYLs)lC8sCCe2R0FB-5UX{5nqQ5~P-mu5Vz9@|=m6IJ2{>i_k8W^}VON;U|;acU%&LdaFh| zb#9vr-PM8-Z^9n8tzqZLJdMD!BevKS)F6fs<0?+$iHrBs|CcQLk9+JN>!!Et5BncH|R~S&uV27bCdTGVrR_E8Uip z7;4DbHmUSibj9oI36UTURnN{RG&Y3T3X5tL<{i5sAjlwbI*mMPrY*@C!=_b-+Jfrq z+L?%OTFuQ>#1<2#y|CVrm9eVy83~)F0&rTmyM2qg^j_kww6hvtCGx7@`&NQ zdN}anO_Dg1!s~_S)euX`KLRDWku1`h4JSc{<`jyI7_8eGCy7lfhMy~}x9*Y~3m9i( zFzs!Dc$#~>lO1qsW7SHrQ20(5A^0lL>GKmpK`D9sl*6C!PA(#czZG+jJH+P9{xv@g zgw)dJ-+B&K?w9dj5O!C0{hsX*+2TJc@f^PF!9WJfy7=ajN&; znsIcgeyVYIcplZrfZuVrocVpQY|#m81xH{j_fSv3 zfUL-4`TM(GA!Nv~vC>p@Vnd=p;bH7B7V8*c=`)+5{=^}Id*M*d+98K?uu(13rn9ru z#?XZgGDG>6o8R9~O71+`iRf-n)X#j*fI>FLUnX=Rh4_prrc_y!Nd**%fhQQk z4ymp0-=!(VsEYCU*l!&z=dZ-;DcHI)YVQ7g(ZM4aB2YB*j=+4@eaiV<87%W%{ThX! z4k)jg{5HwK`loVKaa>sV&5kW*1>cI?x2ny^t@=_zk_mSc z3ocW@Lv4!u3uIC|r?i8pxeI1|8Hg<`7h(@O8~YZEy>U+F}GG_>(V353;!DyTpt5}AdrXv zfIk+)Aobu$;D!_X-v$!^OR<_mFAPeu? zBwZCxM_#`)QKi43cQ$2bSE*0rvLYxk0mp}67P<2EV}1Lu`l4jea1DG2q4?RrAEtm{7?FO4YU{`*(kBR5ge#hUjKAa!YTg6M1h(%p@<{djaC$Z!lJ1iGgt1s-MUC*EPQ&e?Pn3x_GSm?|3 zw5%T!h;;%q>$h+`RM26gWt4xX#$`2}Y|NPOJiC<9hY?eavqbAN4);kp7#gp-l;`1%EEq`d{`mB*vgU@X!86@;xyvQ9!T8kO;d9c&)DjJ~I36fK7CknfPr zrSRaFc-ZRM`_nZS#B>IIhAbULIN}0jT|j+6vF#QSi!vQPvIrl?$z}dyx+3E)%BRN! zA0va28qpamhjfyjVefkE#$8Z1AzE_ofQo9LXV*uDbp1K|PWR9h_AXfD%zi0;gziN< zd%#WgW%D)e`wtO7@}`Q&k0P2C1F@T*(aZ|5CJ(Q(00v71ISP&fLY22uuedfjpJSa_ zaFEDqwDrHVZkAsxdU9=8iNv0OSsJ|DjSo} zWSd>4uf49YVl`+Q>Fq=2;l$cnV4CjL&lkqi&C`jK-@(t&vpqI5BB1L9AX?Q~)p=3r zN8rJk?RUR<{Aw~o@7H6v>o@Z8^Sbh5{NFGXYztm`?*Es2*^;?qDL4LuN&e@Whw{tl zvRmAj<7Y$Y;HMvuYtM52Z(#f$$amo$(RW((oqn)(58Atwe?Hh$dVpD!yXQa}u>~=E zfeh^f&Is^2H+~1RS55@szO%$ExB01h zR7%!FfG%hQEaz|h{;P*9U0D8B>WKs@`v3?_NM&txTu=L@kq~A+C{vW)Id+WjkB%=w z3($`MHaGbaI$kGGd7QxCVH*$To$~0LXskEcwv#W{SJBf=Si&6Mkq?BwIS+=PybR$5 zQ3=IJ`x#2mPJFOfVd6Q(I$0ndZh0V3{1@fj-;; zORo9!rX?ibJD-Tal{Vb@8=eua=LowMmkdc@6Jvjf^%Sk>_8Fw!R6C@bC=)}8<`0om zU-)H|N&`{*W+)pVD>ZS_*g`Wa$Sj zoqZm3Qw^DYzycjD)_oGR`T^sk2-EZr9xodTDFF6WGDHK*`RgnJ&9X#-;9THoK* zmmw#^5Mp`K5qcdtzlh{Am-qWE>hzsxc*s)*gwpKY7XXxdG63E^8-Tzo>&$%hnCCk! z&#}$^p5Z_KOy%GHB+3ba?hB`k`a%eSU0p>U$v zuaNiPYKT!n_AfWzDDeqkWE3HtdW^qOdcaIi0+5y`W1ueJkWm9EVM2_u@nB@6Uq}bV z8^AK@#AJe^**Mdr(zDPlnU`>%+`=D%kQ|{;jQ1~!^L+s$B0ppO;LqXlHevUBE?!09 z0v+DXd&puv06*W^wzYBTUIRWNtN>TuXdJA8?-1^(-AKHBA5d3}9|AqMoR*1x#J1LW zOe4?CpW>n9Pr>Pvyz8N3k(k`t(;dziyHC_Z_Ebuc?Spv5`oX>ZWs*UE%ym zV*Ly~Bne(cg$9xApwT{mC9UA{uUUj>6Q!YGeYAmS-&sL(58o$*dW-Bqs(>IAoi-HJ z3Czc2xpLe^i+x7SA@Cc^F<=>qBW`~gyzTM8xvpE*4G0pOC$;g{K*~ig`Vz-;J<{zP z&UlZ)bw?oQI6Ag$#XOm(qnRid(X&=}G;1Qwb2y7G%`#b7`0s1GP)c$xtruNNGDWqO z8gr%51xdABSaP^AgN7&I+VHqLQ9en|lro9ya25%Dv^!I- zeuS!9AO)K&34GhyfIEx&A8SCSoZL(-xK>XmSpLS2nMo>>JVB1(=cBv6ET-D;qgi@0 z)%AF}@?Rml%FLCb)(42B2-u^}p4hX2*?${yEXkPuX-gyi|BD_ulCsF=s^-{8yW~w; z39bHh^$)3qw*Pa#5n&;2gR?60i)r63c-}S9A2=bV8_;2ewyz(qxNe44t?M zy^Km_+3&2IJHbD)hD60Z=VZI{Vc$~@Ox{4*f+KYlcuTtiTg3JtepLT;$_VJ6ys~F0 zfXii8wcz%96*ba9kbMyXbcDD5l0w8+6{KvUTcxPlhiJbpdP>=dG~LuN+vM4Svqt_;pxR#4Rdo(!+8<|?#VS*}5qYfY?+g4f&+KmRFRw5B7&h0cE6qo% zjX@`_L`-~SzlqTNn)hOdXEzt@inZ4n>~JS@qtzU15WN9vpLS5*`p; zS0uckpD}GHn;xKIvOXl%(|V*dHhezTTN4E2s1ddy5DIw%5o!N~hSLpvVJ=}rS4lKU z`os8blwF>h)kr?CuqAOgPa|THUdQH_N34$h>8z_3QYc!57}8fx|8TjUP;|ACgwMm@ zRyS&l93~&Y<*UaLa4XB}V#V*MJ2PXOO_;zo()o;CqX2uYG9>M9qZs0Dxq8m;0{`Lz zp+l^>LorF!oEMgcSCC-XVho>gHsminj}F)p!EqC2be>gwb(_;wi3aZU^=ucZfz#}D z^l`akkE|R#w7MGFVD;qf&IyQ-MaKY>4!=+dx~S zWq38ZK}tD|HArj?yWb{xP_~=qwm=z4<5W13U83x*e7>Zj&6x5_J4M`IS@xujM?#Mx zo6byj<2!|Dzvy()SZwTT^(vdN^oWL{?8>2Rxfqkmo(^{}fVycDr$^ju4?S03O^zBu@cz6OBFs|nW9tgMf!}}<3ms$I?gh=-Hd$L?-%a+d8+`FnE_rK9zFYd}wd=6_ zGTz(+wWE^u`_v^@@QtASRxQ(MrlCR0=Yb)P|*Zj>iYz!L9v6GV$3KHNZB_$E1s_NjDRg^Izz%y4P!7_-$?#zybPxL(1)%7&Y@;Ucw1XvGh4CcZP zN~ERWBqmLvB*Dp+L%{~zjOFbrOXQU0OjW}wDX?m3$xO$R2TNMh{4_L85So45cRv%1FWK{Je z9M-_TK+?xLSq~TO7Eb8|tc8O?GFeTm5DjRJ0Hc!lU*pDep4!?6eLZ?`#I#JP*qFi4 zg;)VKneY_(vN;tEfnD@+Q1x<0CBc=^eS>kVNpeS6mT+g**=ks{EG1f)v=tUNi!J@m z$KCG6r0P9-VukV<;jjk*Cpl-q*hg0dWxv@5`;+9Y0y0%ajf_Q0)=%VS^>~{}2YSNA zKh=(h2VRi$G_^H3C7CBAc*MS`ebr0k^GwVV5Idx16l0U0GlmqJq)Vcpw+PJ*%-g*Q zobC`QoRE=D&h#$D5}mO1l(0^HSqeeyTeOp!6)8N)iPb;~k&P&4r}=?{!c>BfO-qlW zhgC-TX@fKxkI!kR?{C^c?GOhd!?;v14lKjbpRa+=I8ls9De9Vk%Fps{x(fUeCK3*O zwX~5(BcK*E29W~kM$bebZFLCgS&+veCk+aM-45!@gH>QlCsAYmqH!jAtFsUty3Qq74~9mLw15UIEv`>JkgbzCFz>)B4bw7oQ3YbPOE z8Y^WC`AuV5&C1%S!)>s9V^NFCKezBM5Ka0-d{#Z29!E1#1Dn!yEETaLPR!dImcG2d z_k^{9g_emi+58YY1vVyQy0qf2PFS48AQfz?nuVwat4TM*SLbkdh0L>jmB41?IBLD3 z(FNmfV*~|aPpq2vhbtCg#Upp1Qhwy#i5e3yo_ze&S*g)mC!LXHi&Lr6yV{`6d-n6m zR(ms}qn+@=O>vf_N7rBPz29XwH%zaeI(JN}-$~d+3hGmcX_+xC>rHv3^u{v=CZA4P z$#DQae_Q0Tf74NiY3x#83$UqyCD!RThZ4rO5c~ph0E{P`DTmWwopjf>MLB{hTYqloKAlszpoQswMI0G|x&3!)j;slScuY z`w*hXlkT64OS(i1cR|rx|3U~^jt%+V%bNM{@2iOf?)#&a?i~rY{%xIz0rHA@S!UpQ zhfgi*n)O3=j~!B-@dDQ7+>N*AkEGZ-jg;opt>Jq z@w5U7c-=l?csic%o)Nm5L-h^rQNjjC2E>ee-kAPDe>z45SoVTouQ-T(i~2xJR~)Fm z*u9{Qt6NrZ2LzzH_mhQnATVa)zFy|> zJuVpqaMT0heR?JXPy7Y4f*AvV2Uqpzz6Sn4p6w(1r?_r{4=CSgn+25Wrk-n`bChA$ zr`9jNRsKN1r)MHTVmhysC%x)$zPZm`(2iJ#HTfKH(t( zc>0tOz>NMR9_(9)|0i!qHW}y8jE2jIwAC+9tuVetJ)bRv5dZ}CgQ|BdnZOl6z{)F% zk0P>%AbFIW%};1>ww**Ow=;)4Ke z*+jLe0ZSeii%)~@GwyEh@LmQzr9lg}_Y6BnAy;ZBfQbK!`b-A~qx)uu0GD*x84 zZ`U87=}YsJ*<0wX*OXl55#O*t{jcGa$Ngf^2#jwR>VHD{2@lf`QrbR3dwLcEcOU}1 zK82@6RW1m)bLET-p7;a&d*%Eo;a>rM{=mnbVr1X827_pWRfrbc{gK&Vey2vkmega~ z5Fr1PHVQzgA2fb-%MCvJ1BAYs%Vks z|I6x+ZOhN!!U8V)Ks28%@3(CIulr}wape@!Th6WCTdZ@%dy;eA=3$4#$EtQNiR*FNbTwt9cSowV5$BgY~WF-&?Z!vdp%cTZQ`0^?!7e zJXiTjy$X8;`)k}lM#y~NyxH5gLtFsi7lW6yuqTJ&s$i=Mjflkw+ z_k#M^xv}&lcEJImYu0U9+RygSH{#8~Ds$_Ek&@|a=(;u!yno=i|0skcNucgOkdFOC z>|cA218W7THlDvfjr>|x%I%;2yJJ^NuOn`cVA0r;Su}1PMJu;pcR|d_6M_Spw2TLl^xJ12T?JU6Atme{pmDP4UZOv!H`-jYOfFnelw zav>pxtwmw<-n->=OG{8{Z61e^P*IBg@$oVCGg`!(k#}YNKK{xZ%pTtjvse}-Uyeu) z#kc8%@9{Ha{E5UCmMKX|xw8)9ay3|Kp>~N0>$q_U&E9s}amiK;I)RlVCUsL)LqqsU zIo`z;^K+VJM6X@_=QHc0G^^o<55L#GhP6~Ko7$b#yb56H)>bBKTUfUH^qt#|*o>4- zut@lRn-r_q6}D!anS#;1#_ijS&sWD#V#Q9{xqY@VlZ*<`Xd#cvnz4$a8NK7Jzg4ne z7Q(kZvt}VK<(f(DUG`v$xc*A0j|Cck)^Ls`>Wjcz75D7Y~VrWohZ z*;8UAL_K`Q9q*8)pDy+=Y(>4HKcT`yRp-fj!WwLsi!jBo$}g zLNc4F0&HNy*V(`Y_>^tuzM>8l66-!0WwW$A=Ef^*4T&<^W{e;PonlPEQxeV#Mx6s_!XF z3>_WD$YT4xB{^LvDu|b}9odSJ(s|`-)Ej(_uV#x~tAy3Mx1Iv++%omc->c?x75T&# zo7AZEYbg~*`&wPR^4FR^?e?UU$JgaqkDdOa$5P|H&!qz%D%c}5U9Yrijx|--YqPU^ z2&MCQIKC~7DDD%PVbtXsnD6fzKP*+(oBR0?dA&YGrYgoDh?$88rHd6fn>OSRHCJ%# zx*%4san7B`EKzg}Z3KPg_Z~gfuNF_d)RXo&r&^Q$oc350$sEYdy(`mbXuoX z$UlBfvgc91aDWg(PS8wAURZ#+*!k*DZpM*+_4zRtYM*9s;_Z$8!}D z*jz~095h+^YG%}#_Y>Pw>T>0zn`k=hIPEFRIXTVh3-8oD;wPPPehvWttj7@~_L?Hu zq}EpVkxZJvmys*EwlXrGT8D~dv`R)9&c2#u7@7-N_S0i|2^+~0rnJOvGOyW^^8DIq zoKu6RRkhM_deWVvCf~=31kTqBgBwn&s@&^}7PaWZDEL@uiYqE=%g2w@Myr_bIvBDu zbl38*rxnLcG&`amb=5FHNuyP;k~WqhYm>Yx>VrzZIpOp^a{8?Gsg!S7UiC zEzq<#npKIkEcG9fk!jgTUnp>v8oC!WtKtD!o;e1n)tb=IA7y_)ngo4{Bd>8v8gH9X5C(n z0){1{&Tqe&DV*GrpY_sNdPCb?wX1O>$=Yf;@|^ZI0}7j)-t>|6XYTd6x+r(#?ogj6 zK<8EGHfNFF1#D;1{tN*$PHbQOQzJshpf-e|Xm*^fy1vt(xx8|^om64hpZnkRC6}lS ztVSZsXiL>4&3$vmI;kvb%^$R3kWs7@?~450FsdLsp}oyikwUPh-%|K#|A;ip-z*C1ieZkmymTB3pgB;cPfvQ9W~qy!{~Xv|XaO9Ztgz?9(~%~uUS?-$_9vH9}+ zp>_xUZe<Rv`cbotV<@yRBX z{Ds~?Z@fOT2=oHY{ZQ|!cxbixPVhN~(wxC?k2 zKJjPq@1Ho8R<9k($mEcjHl4h4klMM2Y1FP|BrBUGeoXw(X7PG577K`kapL&~RHIz; zv{nZy9G-t%xHwLQ^D%^L=IGiVKOa9o5ZG!fxGHFi2VI)E_(=2T!Og5#ce4F1;w7Zp zsFG(-EZA#G1jct))@N!5@;KYTc@-NdYEt%Q(9skTQ@7No0_3g-z-f2bP85j)fo%(y zM~T9^;6b`Ok2wk=2FAAmml616xdhY00EUMiSDUi$Cpo@s#TF&-i`gTEr*3Oha0`dJ zUvWu zRi_3!iw)imq}B!g{F^Et?fTX*4yDW@H{MN#OD^$ro=9DAf2RSeq(Rxiw$3BTGfYTv zYvgraou`A0bLnr8f!q|SV83y^==|=NG<%%u*5Trsmlp$W-lUh{#3>Gg-1Yj~Tb83$ zSOqFQ)p2aGk3jpSWxyq_4_{(i)Mijr z#Zz`_e{ef?WZihurmlbaV@YcM9>K*&QvdU|tJC{s)heCA1}h!vKQ5!x#-NlBKM-Ms z_?RC!YmA#!OTd(&|MNrSLeSw<+x#Q)lz31b#uO(?^&ivd(gG2A4%^FwHtV@!c?x5osR4I z$D5~}u&d>p?Fn4=_0=htvcm^m89qw9*oByd>xWOyvif7}!$ay)Woy?4CvK%%e6C;5 zrvyi%u6@T=6UMO3yvDL&!m>Kr4=9~zU5xbLC~(MIrQ_n^V^R{CN@I#YZ~m_*52KqU z#plx`Y))-r?9~-KzWuVUFHq`E7*VF2`%n%PG!7f%Qv|a-Ee)GHZ=uFvQ|Z$r2#dcy zzaU?94B*{|Q<5 zJX{(1Yl$q(;5AaI2M@dtso&zYjEDyX8$@6t6Zpdfb0OQpD)gfOUxz$UW$_k&Z?4`x zkP`J1^>6eqk!Em6k^L|;5O8W`V#y-uGU|bCXV&BQq-8%b*&19j&`W-cWU{R{9N!eQ z_{Q!%5m+0=cdp7@+G-XR4|0M(5H=gfNb#0@$z8WdvYC2=^7yCv(E_`t8FlG)z+13W z)*)w8G3(8vTUf=Xo7{fb7iJ(WOIU86m7Ed#hluCgiK`Nr|SSMY4Nh%D&s%5Ibwl0qwNeVV!pK1&uwW- z2ZnA>ZT)ke3SNOu{iAApbNn~tOQ5bUyO+g`s??d^<2Sm*?dA)a?T4J8&R-6c4?>Tv zt)L_ejdjCX_GMwi2~ZXg@X_?V^XxWhDB$-7jyWPp-$G*-d!KI2MHEl@dm|Q7=BbgT zk5y4tsbjF9yns%O(M1MUZ7K8=xqmpxN36q6WDI3=x9c58glFt9-jR!Ije8|$k!q6E z!S=vG*5fpuxslMt2DZBQ?Y2hXuo%=mr48ERbi1{GJRmezx4adueI8t--=&9fNpRWP z2)FO83-q~FwB{GODxd#tY+l$@TT?%(&d_ddyO?_kxc7UeF|a+q&Mqz9D*b5DEs$#E zXw+piyiuxf+`Z;rnp0)e2b6wdabOQ;?Pfnl?ESJgzg(rW*7q;@wo`vJ`wz#e*HFm%pU`O{4C0hM zVKS5oeqogD*Q};3L-gCHG9sJeL#Gd;37k6O^7H#X0d3-uo1YK-yI9u&P74+TZ>Dw< z*G|V6=Fb;c#OwjCX79~{pz&p?7a02{>Dg4w=%j&AG*= zK2IaC-Rd)_qEo!pw#NF+mn#>=eu0OY#^Ywxv?M|ZE22~5}Pq(>_Y*~Be+-oLjt z#i!f}eu&!~{1{J?t+|+pBT&Nvb`p=(WtY?+v%H%&sI?2^=Z0 zkl@6^_&}8yoPpu1{S#h=U?R2BlBp#wvGgIW4i+*GlREYzALgKy!}&DV9Y-7rMkb)dkxX@2eqM2Q<(W^|QZ@6i!7Xd_P7=^F;8;}lY*`1~-zvyv z@#|hR?hDJwGSQnz}^XQr#!E_8l1a4$a}=-i}5XFPHnc1L%Jcw{wp!wXa{!Z!fK8iO9FV!hLd=;n7xpnlIDn@kTtbeV25uGufiQwXRu(vP}r6H@dLo-4@TPuk^50T zQ&`zz+9MY}I4-!y9~=wb{6_8^(ktFF79MqHnSRVrIwpxgd!aE&^!4umO+)yTXo|mj@%kgY@F<8*wjEU!l2cJ@~jUY zX6(8uLtj8NZV!`-GeQC&<$5=^iGQ-Rpn@?Op{sA;-tqr!cOj;di(`mDdywn4qsT)q z1rdmprj~JqzE8L(`{s|#IARO?VAEn?-N>WADYAY4sKwp)p7ow~*by z<_tg;;aElxh9L>iH)%jor)@EgjNFY z2F2^d1dr-Z)2n7ua_Z5A8YrHF?2U{PbO}M&hA4_g3%8KhEfs1PV|e$Y%}YAVmhw{g z2MzYUgl%(9qwaJQnbjI)!#Q({jESRt53zrfLO0*Z z-dGMzUwrS*Fm@IITpwkA%+z#30wSeK5|=F+>-0|Ot3ZiYjRrv0!|-^0z*!T|Sbcz% zSD_%$hy#mK0d>P}VN!&3VW6gy71eN4Si}Jy;Kq(b$5SNxB7f>3j^op|v0QN!U~UL# zZCb)T?j7aoWL2E#NB6vYIZ=3szP|Culrt&}0;&{aQ`3eVZi z`I$AHHs549HVJHT=w|&drcfmQ7Bv{&UxcCBdmOIPJSLv`o}j!Dbb3X9e({D~?OEDp zeS-5w#Eqy&OkK7kxz%6dy-hupWkr*RT1xlQ=eZIhnxOo!_*wp3WShKlG6rAYD|mBw zO9W+nffM*e>w8=9rDxYAj9hCsK@Cb3@VYbe621r2>i0zui5Rjw=Z(hWo%6B0#V`96 zr`3^%%3q}21!d7gduy1=FjQ%9e$Xu zymRi=cYH#)E!E^k=f+#Gz-&ca`!~!0lf`ke3mjj~lalGdx5Fv-J6ZC3dODBAX(B6+ z`Yr_|Y<#7)K`bi^jP#X17TmdM3ja^?`>~MKDjVlHZn`Uyf`d}J5}u0=%2mj+{t#|y!<52^mDrzrlvorU;ce37`%kc*y;@5@{)P;pFg-FP_ZPQ zB2|0|OYq$-0P-Hw{69%ge9;O*kqScp$%|f#N27YLnw5>^Gc>!0FWg=*8A5@R#AMk; z#`OZVD_P5DigvCv+~b~m_Kuk1wR1ts)(ozm-vsOzEF*S2$!IYoTnUA;cu#0tU&69{ zO^Sib$NzhB7~9PxLZEgqYk8O0?(z$FGknHc(BwJg&~w-?-`x!0(;-dOb8S-A05_o4 z9-^r(;ptH7<1y#MYx+az-v{xXAJ0oS!5bj(orLVY5ba}j`XlQfnE3bm7yj-9+xaFG2Aj(pL97~0W0n3?C70({P#A0rUXu;xOyd>_K`UM#)+rlw91vwcRV z~P?fT%yeNHh-r!r=$S*zZ1@wT*GSrdFAQW^YZx?_*`=(X_AwiHbp8NQU4{? z+bY)CjtPxTRxC4~$vT14SLq0oXgWqY(nAlH0<5<^e+FIE1l|5$&V9dCQPIOBLoh}@ zd%Eah&nZe6d#y3|(AOT97bg=wI0%gtBN9e?+ne>P9t1NCPQc8zNi4E2#E^e2DZCz( zQ*WUWAucL2bV?9IPm&Q-%U3<*DoBi8N>)61$fdy2Z8m4%gWMIbJCq=TW?*s8-1d?Y z))TTj92mO-4itFQbGr?DwPl3tj#dHN4b2j;6_nD;aLB`2r=)9nvA7t7Y((LX!FlDK zuu@+Gj$IE{J-e@xoH?g&N_w7KBe?s4z4NzHbm}2ezg$yU&leW$HlRIvYkQK9=3n^2s^|t5P2=f?m zgg~xgbjK_GIcm-L!tJyNA>JQSuLoJM2QfYXwZLCJ7S1zZGY6Fy`DxPUqAQ2wAL^_q z94Lm-;}ZSm zP}zZ*7PdLSX0-)+K9FBoX$5!p&bEDGucj9UOn5Y;w~5nT(xI<)(#a(^8QDL+%K~n zHkm*LlqhD~&(5LHc#Nr!;%TRF^Z~3U#%)WfZhFKpjNu!JsLBzd+&T zkK_m{$(f4G#s*nU;fd&c>u3n@hb_?9Uv#pCEdPT3wE-zm)xv6OI!wgAWCIyl#;w76 zw&4PCWu;v}TfrXpIqPu~gD=wZkjv7b`ZgUPT-CW`;8nSG`z8#!eXTUFr|Zp`#ee5)n7&p`4hG({tFjn7|q>H-O!6Nx^ISev+T-;7m{XI{Z+AE zh{*C^hvnY7a>bi8XFW68WQm*!eNir4V@dz-`FzMIt3ITOf%Y1bhhfN6tc4|_(4e2J zD80G7NFhJoql6;sr+82Q$BXXu`pFpG@0AOh?<66aMpGJs?|hG)@+ey>{+p+$S0T`U zTK|(uR6yBHsGO#^l9dZm~$ANFQBWVx7caB2N(pxP0sr9CS!443;@G5e}`6`t0S~Eh$G!q1^w4 zPmcsy+et;{o61lBD_l&;YxaD+l-5CaG805mY(cTt4ctaD{@Ov38aDfOEd)}Wo!A4Q ztrP52H33>SWs}Bb9mZiDgkda%y3E!8TLzyO=dR@?zG(PM2OLrVp=Bqdph*+Tbc$+6 zhP1qE;_1R6nh4w*D~A##FOEuj))t_H_2w^ei#0pR-NKGWoxdo}_yFG%GAYzC|Mq6uKXM>MSu!ZZCt`EMe#d{`fGVjW zNYvZWK*a2ia@+_@0;afE{Y9isc^pCiL<6Iixzb!b$@z#6;pSG{YS~Go{}Zb}vy(%88xLsztgNa+t(sk75OG3isXS2a6hqkj|DJ}59V*PJ2veV9I@G^0b&Hqb!mx&wN z{3aqh?RfSdl4L|B@|g%o{%i|qwp&Jeptj;|)evci>1>^+IaHOYymy{ICt5WF`Emmm z;XR+6G%<+`|34J);R^F0+fgMo*xg>bMu?@Zb8_&s*F9N=vb{+v*~%=j>uw484Rx1~ zWX@>V>C-q>wrRXoL|WYZP^JS`cv!h&tZkMJo>>aRjO5gtUS5^zkpH>GBB(}J+%VOi zq8L((5Wk(G`=+4rP8@X?zbB1G;5{9E$m;XxRJtDk8uvig6t|j?e~{!DV}YhhRcL{R zdU2K&fkt7Tj@19$Du}QE?p(HIP11yJyg?!-d+UtNMqke>9eoL{Qqw~V-D>V-%L;?2 z38yV@;VVPj1hbRdpHS9xFIvABEt{-4;1**p6gH`GH8gf0j?BGWfFnX8CR1SJjpN(* z10e^}BX~8J)m2``?x)aplyfoSa~|>t+Cw|?kZgPIKZc7JtQ}^T=&W6O{cQv=T*D3x z7^z{~#1W}f(+Ra0@}1*Xn*2a zLSV*ZhoOthw=@GI3Cnh+ZzMDL!0a-spDE_Rx8DMHdu{V-Auuq&AiiDwg9N6PO3+rG z3<@bCfFv=*)kthN5{3OG+VX31u!KDWR@+kMhc-^kK5pib(tilPRJ>~L)Ue3K$Riam z4Bu}jhmcGDdko)*rsk{5r>xC@Wf*?K5)+Kvi31zBDDOo8T(a`QH0e8 zehR3p1Tgh~6R|6*5efpVYp}m9YBweHNH>Pvsz`}sxN1MHw-OU|^0N>6^?HvGyL9CV zNzZX?N2s`h>sCf7Ap86-UHL*va}L`PYObk&+ak#xBzEb{&U>=i1^M6 z9p&F1-^TGO(|?{lEvEk)mZY;lG1_Ml%XU;+=xIq2V|T%~2hu!4dZRMOt+{Rmx~@>p zzGS+TT?8!CPok^dGFs9A6z2XwBz=J2R-UN=O8Ou3d4=>Zji|lj{p8|e5eOTesMz!F#H);405Bo^xaOTm37K z`UzJpCKi_qxbU=CU9h86FF|49@po8@N|-HZ>;mL}BU+`Ml-AeiV(j8l-@k*_%J5yr z%vJ77g6Y2#gW)f)=wqo~qPPEhBGwx)1^n@^wA{~NAuYhwo1`)bb~KOW%1$L&`y19+ zeH=V?`tsacK|o&fz*zmoty^{JTepH`c7wYwbVEsThj^?26gAdRS8hI^IncMo4)7Yv)0t*l;T$Z zl{V9}JtOu7>NfsKKs?j;-Rm~C(*LfwD(EDb3;KLJV~K1hO`63qkh|40XvANq_ral5 z1b;UKoCnO{K3sU$lgl0}EPz3;{6d*-=(#@#DYV8W83aJ;o;5w?t+*b&Jqh8p6E1G` zVZAXd5A;sLD_JCBv_-Mt^++ox^iGQrsfKq;p}jdaFB56x+rRPTSh7+fmL1Q+T9*b6 zy-}`0a;HXcwe7Fg8d;b)F>o7@3X+w4z5nf2#ll0HkI19qHUQPLuabhA!?jEoD9-0X z0QOBIZYACqOFkuL$}8BZ*(_i_(XCst7A_;$k@oFqV}?8OTX7<3{jMjbZt2(!x6j@g zFNUBU9R_!V5s26_nZQx;k5T`7wnOUO$$N{D8aOXBSNDD6)*$*R73Yny`*_BOKHgLj@=Y`O%3 zxlSb&$7Bu59j~R_I{B0?!YQCN12uJ0r@5g0!{Y2WO>yVNew%Zg1*^JJN!)K@I!zI! z%%Nr~^Hmq!Sq;p+eW49S-F?9g;9xUJW-{Zck3TR05A?!>)9Aw+a8H2NGjPvW4w9%1 zt#lKBUHH~f?Iyp;XIxN<%N*mx9h!;TW3pCIAu`al8Ux0QpC-0)OR_Paj08k&h@(;Z*z+64kykwGad)Ay1>t zje^a4bni=oYj569^(YcXDr)#X^V}>&b_L=r5l8oK{V#9$OC|TrV6~9X0y6tuD3_u> z#F{D5LIp|u?ORR1UFL`X#PW5Q#-%RfEepYYyp_+x2{}||(?pgTnckf>$@5bw?FNLN z+Ph{B7VT*`u7Gi{78mFu&NmxEY(2%#b+C)0wyp2rhjEE@G2!Tob3p{SkIrVxlBjAV zr-*e!ZTc<2+dIN?4!o9`E}GofzX4wIRA*Anw6TOdo}u22^{uz@^=EcO)R^@tRv1$ms6A>It+OTgcl+i{WbX?)mfGUwcV-%A?E%u2pSdqvXx#uI0w>4jYPSRzWP# zMV5JEM_>~5uD&!o#_U;v`%)=AuP{5^U6nKNeMBGBG)lIy!|=UiAH?P|GainCJ9p^`%chMn zY@IEwJq9;8*i8=eV;hE<=lvjIG>t}2qE;a6{()L_BGPikn-^#6rS6*v+d0U;Mb+@ z@YsmgtkekdhKpw0p*L0gl3k~{dTwggRt%)u7F-yQc^a)K-K>7fCb#K-N6EV$g)I_( zT&hCJOZXa%Okpy-945oDe+FvX3BO@qIy-p1LAsU-Wp9$3=jo}>HFbl3F4*I~vHBP$ zcmUaJ#MOC+sERd`Xgo)CArp!Xc6Ai4i-V;FTl0sdy${D~4vgoU@2FR} z_-WLQ?dB2;o=9w5MLUUZ-`dWL1;)7vGZ#SVSSJ8JxlGPFau}P>k$HHxIvooI*c}FaA-Vc;SGUmJb++pxQt#^+ z=&8r%rpo3v%y2=xHWt@3%^0lu~C|y8+aH{(dJQmNHW);%U9xj1k8IFXj#8DUUWvj< z)^SMK*_JVxbJ-XDB7L-(pZ@UN2k1WFY)i@eA;E5c6e3i$qqJA2R=}3qoo&hQ z)v4CojY7z5e}@}vC?yOI7gsnt<%db=*Y$nf=lto9u}L^rCzZqHyn`_(D8UD*wzql- zsoq3K5q$S&C9L;gT|J@Kuw;3n@bZk&2Oj#D{4zEVoxV}`%&#+y5Nr2;{76BofA2bLH^UMjVK1i{ssWdG*r4&r{O~iTW_e{hU0Qx3q z41p)kJj%erU@e072Fn$x6!g5J*cnqV=DviUW3zHE61Hhmcji7OrnQGklFhtA$(XYa zOUlKt6;E+!C1dY4{FJeG6@IEMml5{|W!cO#J+xW^!Zn92s&>Q84mgwQf&EM!m#UXg z@Eq;83^zXWUC&ktM=lDAH|0NEy=ll^O?~a=%<|Bn>JHu2h=yA^$JJK=!}m3^nMmde zr8PLSe&ApdBfdV6VvnV~G}k9?6zP)!l~}OxYr)>Q&VmcT3bdLCPcx*cLMfu4FrmEA zrC!IZn$)REe$csoI}XE__m+B^N>m_~8%@4l~w6HPv{h`42*l zr5&_HxYu|$HKB-(@2tF+=e1yRtuGf~N~!phG(f(#rcK2jLId@PZLT=)#NTpOjK1Nf z8ZPk~W7^}}pE>YbgNM*P?tr-t#c|Zmw>2I|)O35h> z$gRDOpST94Sr^lOX(|rmd8!z=#qlB1XhKWq3dF2iEBqnDs1C!)J(0Ijp(Yn!kLr}HkUCe78o zgG3a@i)(BBe678!voYU%rvuYm+d`;KQ>K{Gxin5q{q_p<8dfNJ4?6FVrxNaTh@*6C zu+7Q1`(5TcIh0E_ut3&wzC99{yuHvd=(IKfZE!z62pE@vkho4qvpKM=K>;SWWO8gb%3Qy5}t%6GvJ@S-iWZQi|aI?z4D8bs=a=C0giGS z>ouekZfT(}P`2GElIrcz?(}jzyILIFJ_+UWzBxf;?D)z^tEHJ(oRLEU_?U+DrTWCW zum!%L5txT;_LtTabcGoZWTU_tku5Qu#>d7?3vAyhXjnsGml5>-9ljeqpN`U84-p8c zx;v@x`w4yLxid8704FHt`w<)437n094edh~F)p$yd}FrX%BAr0n|Jww}X|tJ5~3NLaZdb#_~O5}t_?xVC^4!he!)zB*zrC|YEYj)0_hI2n|Pdv-zjSx`NU0Oe0bMje&4E;@i-aG~V#&sf*f+q*o>lal zSf|Vp$L)*3wv6SKORigi`zISKc(6wq?U2LIdck3bB>mwLsmIEhPVzEt?!7}txCWg} zm#Dly@k)$M+}yV#TlLkbI%y|Yz0p&s$MZqd0XZY{1e!`SV#2((nw#lgUSqYk@IMVQ zW}oFLUQEQ<#c~}>4X&^^)6zcC(EDCk_F7nFnw58LbcpYSvbZLv1fC-;kzOB6hTd0Ep?n8t28^Bu`!L1(DXj zVg);`Bjs10r*124d~|rlM9!+Cl0Ag>zZN9cJymcZ+V2#B5nYIPe9(`ex|(luqZ1xD zgXG#`=6^1*))9NgZt2^}8}@BTrgWxp;k&vbW>KMaZZ>7m;>QM}E`KZ@=O_y0iBu!c z_`TZdjTO)#z>8!6#wiSNO8+6C+>;719kk`#s3tuc4+cIH(RX!`O4+otF7UKx+i&A! z4m#6R*9M9B(U+l@7}NTMD9Rdf)g6*n|0FBPM*F;rVSO6FGD=e<0nrIks%lK#PE|{DDsWON_Bvn* zC{=dB@7vX2$#mZ|2MI%y_IS=e!($9o_8l@w_S?E8B3L9Zl=GD&qozm}FhZ z`uOOu#9VR8af@ZaSU30RPePZ(2oG*`q!X=-v|`@v`l$e-2T=>7D~eiSTD?RUXnY?b z#@s~}zk=O&6ts5Prea;$By7k$MAUcEaqLwlYkRW(Tx@8m2Xli=jcBV)L_ z8Ak5?FyVDP?bxhA_~_}kjsgBb$A)LFM%=(e4JNDQ7v0|V1&gmtcev}tza^HlQY*!!X2Wpv#<{2 z)B@tio`UHO?o^{>iMGmJ%I#g7qlo!Y<&vfEo!R&M^7p>l!g~Xo-N|&TngjRzj~;Hn zEQPJp&8RteIG3lF!`5v|N-&sCBMGj%(CXo4@JrQDip-F?$t_`Q(t&JKmIwc(Y}_4SmII~=x6 z6qvFD3aHBm@||tx8qAFrrg*rh`Tn^t4_% zk?=RF6_rYrQsRXcSBIB>PQmTEC}0mWaD3M#%Gt1+Qj9(a zG0J9t1a=b8~?`V_RQEqhSD8Fj+zd~F3)PSw|Tl3M~Ul3dZ6?2>xOe07udM-5Rk+yU=>T325q8mlqj7&}8=iCADiBb^nA= zZ{Yh_2};l>VpQ^4A{gO%3aGHrz{lW~p2E8-SO_E6cDL&#+`d4%Yx7T?g z)}wTkMmXXsw8`LR^r9}e-6t<$zAT)MLlH-olfs z-;u<;7NbHhP@A=lIl(BtkG;<w0y(H|&A4&eF%p{jr z!OCF>QjL|!$Bw){%zGf9pDMeSVOTQk3nclg#8E{YLkP1x&5qdX_sF*@yJDE>MmO%` zCFKS``&3A@Gps`nicbf~1TGNT_%ehY(NYekN3CmaOO6ePq=4rU8JLS_2+mg@+Wqw%$LF<7P;477Mi8j(KY7r2vN1SJ*f!)W$9^k3dx*Ua*P?wGU0Fa{FZnu^3MFH|fl8 z@6|s7y`;dnq~CGTj|e&DX*zY=-NJ}LI4dm1_``1hjw*0Nf zJnI4R(wXs{+3|mg_YFP(gC^V(!;p!R_8s8z8Pm~qoZFrJe`$}!Nx7J*=xeJ33ICq- zPaoZqS%lOH^OL74Je;CQ^_=xl6aDV{aoSZET^xTWT=w=udj8N4xC@&$v~MlU<7d$@fn^&_ZGYp6OR`>mg(HE16_3vjo<5sk zh!80-loS4;AuA#JCi;qRI9+;QCguil#n&^Q;wq&k&yf=l>qwWA`tI$@>dR|P0kVcX z34w$&g*u(a5Bn#l{;{IrKgd=cb+7YdMdOAgjG~OwmNmsUz&E>%n|2f~S&--Z0&ug&6bOLrii|^xoDCuw5V6S1dWpQ>|2C2oZQatc7ZE8F+tJNmzVF`b@EvxLkowb)9FSlmzUO3kpR@#s7 zfSpbqHpFH5#tw}#&w9hpvQ`CN(f#k?aRvnrxkOvB32z#{y5(G}fY^zjK%Y%~wQl)n zPeJ_bAva>t<7@TV?`q2FafulZOI>W+olIMi%Hp8^%Jd|>RRg+li3=p68a%3K3HyYV z_|o7Bo4@-aL8)xy8DsOzCl0MA@!#YRvD}Cn(B{zuM0gQDsm=gDk=HNu*K17Y(4A4y z{3Mzqf1?JKH7Wux@mfsJ1(cCE)dEx*Cr5u$2F>p0L)Sy>L*Ya@w?Cis5S`nyHU4XkMG-7ysiSK7R*m{#MqQiM^3p4z-Q(nypx8&rwb+#H;;GxwUMN$z2^s~x1Sz$p?!P# z=#C@t!zFxClpQtJ@0p0$TW6_qRO?RQ4~IC@2qjLjAe82gPp@DYdXMEFuZWm71c5K2 zjwm_jB|1IbgkUJMFFGG@lPNuN^{a0Y`9zcW^o_q~i}xq=MD%?$>_>wfUe7My>g( z+hV);#U2fY2S&kb)?c)<$4-3y#;<45K!oKwol-YybOil<)bL0E+Km|I$wYTYznMZ( z*FKKK($G#bJ3Be}k?zv4?a#+HXhMqxD9&Kth@&Bndx1`|uFDN#B>75)$*t4>ee*<= zeS;^htzvvx+xn=e%57Xn*qTN36vu0m_HvNCkt^t+zn06HfNMIt-;`<21Kv4TG%?v^ zzGEpBPa>d3yzjejMh{1U=^|2E7b^ymXe`rA&f4!2z5 zA^er--a~P-%UDifITFe&jE7MUr=LvH#Ooc4=ub_GUryVe=e9rB6@N z^=@ScaZy&u5sHHZd!HA4`x2zA1(bK$DwgS{ujzJnh(fZD&PlGSH|6RllItfoQyJeE zN@1V2%AHeIUwH;<)3p*}&l7MXSvj{7;wo~I#%R;RdulFys-FeqC{GaR%T?>!r#FoEnij;;*QGsgiEJ9?X81Wk) zVgc=}Z_GJ3!a_*!vXv@v#!4AT<(WYqo*66-&#m3Q6{df6VCn(k73s=^POg5&cgV_t zcC}5cEbSb1pSi7i2s?^U)>0nmDkoVuLg76*u}leoxSoMo4%>Q#B#RhdU;BJ}n<)_D z_~mm$S@$r@4Rnt|LX*^WF;2ca z@q^~6X|xYlfoo@UU8|<{$E^xW4#l*=e&B6w#SoX}QBLQjzR+c5=YAGfjq;F2lvSVn)ckAYB$8PD@pk?=PIZWjh>L=1g@@Is|Mcmi zUf3}(Xetip6ZA;+8oc${DGy1mlN&fGRjGveHdGc7Gby)S8yG(&t8cPh*HKxh7*}-{ zV=Za8-#b|h5p#|6H)>@>RLhl&7+S*w*AFT+x7^Rgt`e=|X*FeKDb6lWF&(Z9ySfWE zX@Ok#z+oy)#J$gb+BwfJzZrgif=_XSA;uh0$$F1`u%YG1mY?a@ruho-lTy52cmO&? zU1b{VS@4722De`fa`@ZHk}O);*0a*SsZ-8HX~zBv6U{7$Q>F+c}te}NH3 zsBV?PK$4xUpc*_$hwo#r*A9F}wJGtsW0Y-PK>j*PP0XIag{;Gg-^7u$2Pg* zru!C~ZktH$uWq?M9A{zPCm(Wxnrp*eHXpQnJTF0MYqn?qmYQ;JJ?v+%E`Bd^8t4!a znEeLPJ2c!|@|&%1D?u#VkdloG(xj%3v&kDMD zmH5Vk4!z?jBvNal+yG@fjPl-ZeTtr#F5-d>HNmgXFW)e#Nji6k?%4Z{QOOwk46U)} zMJCuoEICpmHB#dP+{F02(uHecA;F)NDn|EIu)$zZ&4a>#b%WyfrJxJt=p|0(S-_|# z+U7yb&d<)A@^q%LciVfbl@dVr7x1x{F8)E3)aC>n*kzwHRxJV4ajTjZBj#(oZmqxO z#6iD*$)TH#NV}Cj8Asd1Mf^xCQIki3a_5>?4c{_0_^HGh{=hr4y-j4|c}_JGt3Xl99i@<+U%^uU)`cRUOm@z4XI?!hz*3@Dd^A(u zE_a~1bYA`@^T&yW!CP1MT(UDq$7y-}0%1e^7+r$eF;6-3t6ajRTd84%owe15IKeqP z^MOuAM{e7Xv}8$6u_8!Pwt@4>a%6paNm7;j8&Dz-8s9Y8JD!QI z&Z>#;FheI1$)y@N7R~g?IfTf!Yfp)4LD6%D)^K_-tC~j7bXc#Zubje(M)L zG9lip=L?;777E1`9OqRzqapF5Of3kV5=?4aaUqrWcbx4-fFay%nZ}=ZH)#U%sJjYo ze9OBsTCUX>5bzVn{7mRN2A%;&P7M)fMwpzw#N7bNn+7QPPG?!}=nEBDiubA|Wfs#B zUNd-wD8&=ehq=cRj#?(Vp9~{hX>G(JTL=Ymc_C&hwVFZU7}@Y`oVklv|1&S8R(v*%Do`Z$4HuOm3JbX)wUOAO*UlEdFpc!CyPPjn!L2i>hzJ>i+`7(K{Aqtd#K==M&0g3K^CMI6gkaQjqJ&r-J*}MzYbeTJ83T-yedMA z>b+gatT-(^uF1=s_b9kKa6|KvDgxRTDI-^gN7Fo&4`!XxxUpbCua@nPUOK!=zp->E z<(Erk#lo=&S-`y(a-JD#r)sxdmUIYm)6-+^?Fic)SQ9d6ppFlIk%c>S^fS+abGbwb z4dSo09Lq1#uDW5mf&X6FW$;yDs_5X9ahem<2|Br$x`BaDmL@)EW?aEFnZ#TzaB;-q zkbAthD%@OCaYD4=014xoaPQmNrrbSu_F1Lerd+>m7nv2A6_~xNy?MFu{32n$Y%qHN zX#Z%CZPu`sUf^K|9Sp+XRR^CPNn4q%n4KRinQgQ)+@QPAyU^P(b^Yn-=M?Ih>6z(N z;2G_iyXswFVn@*_3hML)a|P|8?dUavWt?Tb`tg@^W%K&clTnk4 z<8QWcQ|5R=ibIO`uO%h2TEg*!ZUgFDfIfaRi$vGoRj*m@#)nU4t^k~e^_OBlNRVCk zk!y|jM)xnu3w;ZGbA?C6x|&odmljr$a_Jk9XP`KgJE1$FweR*Vp9d~Sp)JN(IAdt<-k4neZw`0c!V&^q|H*p`Kw_&OU6<+UMfI+$fG(tgkY+b3A&?wlQ1+^`L{QO>s=>R4!1x{AYQ7j>UDd`g9Y83Zp!n zni6Br^T#l)er@E7p~DWXdi`yfcSCOFFwAj|itwRft*GIxwcUM&9XUZO~ zXk_2Q=S9TzKW-?ZS3lKl=#lI0ujhN1JAmX>0daghJze!;Npgf9*mSx8T~BO4SWL(K zscDd@3`n}1PJ3B|G@bJNi1Ou4&>bAo>bLanVCxWjNoszfRiRa(!8afwFu{E&02lyt z8~QHMNQIishYyPIxalZ2I#reW_S;QQghR+h);xj=_Y46*5HyBD!SZ*`+;nxF zY~Vm?i91b1>85!T11a9zQi9}4mczXdB4E?5$&;JIqg#yKgWqFPj5`@eWC_Xd!RXP6 zbU*dt?i1rprWiO!8gkPouVfIz@!|U!_;*4&s~MDV3i#edNW5g6&%);1rbLtBsYB&F z6|pV2`Z5PmZCNkIZS~=$uiLa@{XOPqw!ItLksjyirnmZub}NyJH3~H+T{$xlq3e|q zz?R+p+}8fq{(bD}+1Aco{#Nu>%H7R~$#BgLHlz!3aEwfCq!&T3DJ-NkP9Uv4 zrq}nU+{paX(^HdsE>t^lKe39RX5zZYs&81RH_Kt}ED?p{#Ah_-5jP zMOSF!D{BhambJCuv)ke+A3$vlFJSi^Z`(HaiwEt@I$t?`@c!<`m-SM|4b8EH*qV<` zCBQAdE6uI5yfe_vXN7d^snkN3;&kNat-AA0|28_Kc$SuFN*H{rA})w@4Vel@b;q&Bg{+m_4* z_bNTNYs#!>BHFW&h}Swvd1V4&Om<2LPjsW7t`PYaKQy6QGG3?+?d_U7{yw^6SwWB+ zx!NTKw**ZP)Qio`jSAKD%>xFi4KK|F4zF4)0FE7ulJD8>lT`!mFS$dX^jIZ%yV zB>5O$|4#Qkb#w|mgDGZb(OvD(Mi8tCy$Q(oaG#@&j`N-U1tI(rp!7L z$osvr$$7s$I#P1jzXRd`09`_y|4q#|8!1#YeT45pm*&op7qdz9<SEdweTA`ZM$t=Q9#L5*W3*WR-3vH!_5Db?ja7`=XI%YS5W>$$w1h(BupaC zyDHMz%9K%dvfs3b^j~nq^~8qEx7Fgd(%W zX1`nLA(X+bnJ;gz)7DFr+VN;`l|wf=9vc(R!y#w;VmK#<`#~YDhx_zP!xV^_t%Fk{ z;8MCTt$a9$Py%d12&^ZnPYAU>YK$|6-K5|65ie=hjx9@j9m+ez)KA|@&f3hD67P-I zr*vr5wAj9S*j>$R$7QEA>qn*(;xOD0vq|Y*EiCgP_HNDHxcnmZA{B;BmERF7*(a&M zvEV!ItJ$zLbZ&?bx<0r%2t!^@Pb{;nWVAndD8??y+kknVd$|VCZA>=_l1`NSUXGdX zUT%~aNvBDQq}vYn#l`Ft3!%7#97U+R=J!N^^kVTyh}M3EhdH8yAIih04k^)^GY@O8 zKsStGWA)v$7ZBH1PcujOg1cv#ER)d zdD~k1WW(9d34rw(%tajJT4~X`d z;S~Tl7yUGh>bHz8LZ(nswIa|=aENJjW*G;o7s~+e(kk$*7 zQ=|E-!DaqUStM{{EDT&THNz_3Kyi9wSH0j`eb<=1cR^v>bYOYoEpvUxCKWBHNx`JL z&F_+WIC=yQcuKn@`Cdtt9>=ja_5?V}n}iw?T}`w?_qj_h)WI=cws3({ z2c4M3Tgt+vT2RJRU2II*S#5*UM`!YAq&0#n=*a0s{8uQCrUPMYr zxHvu2EM0>u-=dZgqG+D4J!+Ni5jWkKyB@RgUMfR9i~z2}qH*wJ#&cT&A?N+8;B$5Qond+yVf?t+Cneni6$4BrB_&IH*yG#UcBC?w@Tr$#0W|U~iW;HL+i9cER4gy0WZT%X zC~j3*bfo&S%(57CC|QWMETt;nSB6++kw!qlnxWN*0?W9~SH%(IrEp#ygZ%4)_8+ylO)-jEWj;6 z==heppj0YD8X?7Exn=-<&P=dzn`IUzcs$)K$XRAN_Lopdmh*L1OtIFt|5y?k<(r5VJOGgb)F!&=% zW_!NIOr<}$kn8h)k$CW;Is+eRDxemt`z*EZyzej_zogY0cV8C+$cm#d1zjy<{-dK* z{Ed$8zJkuawMlJB@mk}T_?u9ci=0$&3{Lb&*H)Wj6v~J|f)KEr*+pJ^etGuE#hIh$ ziwRDXM_gE@pA$JM`-!#8Kj`w>tc};LBc+L-*%*%QKK_onEiTqoq00;auUmo z0o{yhO2#?L+sv>m(hMFEeSUUeD zy3z}1a|NxcW$L{YmZqTnwZ?;*oz^~VpH!(AU#d5*nO2|#Xtz&NhZK%zr)Lh*KAR+oI}>w`9YKExw$V4MT#ijubEeyvsU#!pP^7+71l7f&AR$lI!u$(c{e3{ z#>981`r+}v=RHz!Q*jaD{0%ZMs|Gm-o+7Q@O?F9dq7WlyzH zX#7_7R&_fEIf4_OEk)PlpZ6wJE%i9hT6S}=Gm_Rv|F7iqbfsI8 zQi+#+SWtVt?!$ejlO%- zU*k#TMQT191{a$Av>(MY$CgES1a)P1JwQ9@B3hehS~yAe22#xdm8*6z7Z|?84U*Pe zC>~_*@n%fx*9>@%r(N{&E?yTn4_4+H)Nzel0NH#urmJh+$=-!@Crh9Y6>~re$THXCmRoAJltAfWj$?4_H#}Yf=cS**PnhFrVhfjkso?um1 z)nJ;g;`>KhT=7+rsaIBmuasi_nP-=O&JC8k@^%&WVa@B*%Q|lq{IO`w)uMY1=46ft z8$YLo>m5fIAz}Gs%dw0~l4*qC1)|G#UKahHY_6;KIn5Ho^NP9)!IvfwL7^K;z)0&r<|%3}Cb4lFhMex}~5+=BwRn=7FNZ`U@v zc!^cKy7uW%1eNN@E5_aFyIpSAFfJLp`0e)t?>IH>i~7=iR9zm z@~H4wzlBFPe_&;2X{6KnT#3oq!&<%lKDMFvX=~L&Nwh-s`6i#{dpSb;a+JN!YsTam zyc=aQQK|2t&_O-PRMLjkY-9bYn{7v#>RC%KxeDyd%`J~QuW8Hxnqc%oPiWparD^jNxm%PKJ=eu)7Xov(m!k5m}Y zCUcsBf1DBy^SE8{7#cgDl~owcJxN#Dcy1+Q=ZDw2R$m?)4+eK6e0b0NR%SF@sV|5c zJ_fw=2Sr zN5M(4!-3^#ijd<8g--Ql+O+Zc{V%6muaku!qe_GBF)&< zD9_7}XAt4RjlK=hyMMRzc7E8(19prX>&ed*L z{WCA~_#N8&m1z%2Lp$y;D0Qn9^a$ytF}A$X@I2PIDB;y$`|VRA7ib3g>IDf}C#-mK zd(5o*+=5=ZteNDESzqm{SnWCWD|^L#qWXJw(b4c{Rhk7)B$@;^AQYz?A{fOe8a8-Z zA`*jIS%x}MzW!_fl5^V!+T?RnGfrA9W>Sf0>RU-M8C2>L4AcbWqVO-jA}MOp;?8iX zXBC+QQj=|94!~&P?{}T;?T)u8R!XzWjW%9huS+LWSHfTAzYZtjgq{koWp{`B2h&9# z$iiwmn-m!~6ry;$=cLGT&uR+A=tQoxpqGhR+>GM@m;z-Vdn>rgB5UP`JH>`{AqZ(V>r`mbL3?g zS>W|`HuLzf#}komjB46&>SepeHTz1vhT!@Y{nK$8SC{33$>z5Cr~9Kuo0!^>Yq z4ug`mkPdcd`Zmxh_PfN>kQ?nKsK;a=;mUyZ&n4D_`=xq4$LF13^>V>7#Ala&9PJ(6 z;U|%vMN2(uPpBWf4#7E3!!?kLNfGdIwGr}W*V(Jj=<^(n+3gC?-{V5tGeddw`9b;7 z?m%bUV?gT*Ra)oe5bHb1s2AhlcaIyPdZFnO${zU!J8_v+bzx zydPExG%UW(Uh!^%N?(OJeHBq3zboclKPC(fZHztgd%uiVgME%y#Y)gSY6R(T3QQNc zadsP2j4aMID*Ar*OZJ-`TTBPgLCUssMt;p2Lubox_dMVD?5^mOpI1KrgYOT$X5FPc zxx60U{zDY3F?(A${c*Xc&qwmKe69b%s{uN}CQ0y8lk9ca5^?eT_SOy>#c4PGS91`D zq*&VX7Y)!0Q_Y<)uCDv-^4AJ#v+_Ah>~qI%iaR4?C~yC?_|=a09xm1-Vq7RuPl!V` z($!^WMhov7f;}KP?v1;X`Hjm6yFlK!L-iv8A>9Y``r59qKTPn0r-HOc<7wjggZ=zH zTc@4qQQ*w+JB8$>RoAvbzuO^n?=acEp=Wb~@qL2U&tQYcj_v7{CpJ2XO zdcLf+VYkakJcg+D1m5Wmo?PI9xbHifP0OLv5aFo1BI)*gH2OnG4|;VF|44m5`NGeP z?GxDZgx$K`jBChi-%-SUogaGGABgV{6!k4~OL61|($lH?(S9GYasSMQ7f|bt^>uD? z+Bb&7KiVmXg#qwkKQHJDv4Bl`aCmM#dFXqUML$7PNzC~wBhMYM- zB(d9n^06REE`8Ezn5gT@U7}E;e5YfW_dOM&(Psb+iRUff?YO^RCbYL>oSERO+tpO8E3~>Q;WqmjBIjut8tiuU z`mi4TOwIaKC~&Lb)zkx9XcDl6D=gZKrF0m@bIdGVN-2J zHij>awSgZN2RvgPa&THm+NyrAO~0$F-U@l=&5<6yIS6csp3T zI@*52U8dJC_1V)^HJbvC2*7^35S?7RP_%P^m`yW>P9Yh9_)nw%UQ@`LNK8(nKbjOg zRYIeGqSW_ejtjX9WVX?@)ipI$eo{?}(Zwn|k$Jp@UNjp**C<$*g;;Ox)1;msQ})>hbHX<0-+EMB`|d zuRq0u%|`c+WJ4e=$UNt0j4#8ijU~>M;7fZ;{4zB=nGjB9emOX$f3a!@6GHhf00W_M zgxdIJMfq|jmZmK>`yOI-3lpK6BzZi=?h))QJlU-_h8sB(3)0p1GD%A>~Bk%gP-e(;rru$OE1B~AGmYtU5{)Yi1pD@ zj*kW^Dx}PRQ@bR8M1yc7;+8evd*SX6(iN1{9JzN24m&WsW!g2YE+A{P$0XQA{Q`V6 zaS6jPaSrqZ`6*T>FpBnHAm$5P=*mjE%W#ac_d8Y>lU2rN*Q>aP(w@Rpv=+o((`hWA zs*fX&BEt%%=p0}fR=t&Vin+&r$6iWLZKc1-IXJB? zHTD|r%iR2xaX0Nh^VFA_pw6Q1M}JLQWb8GM#w_Z?e|HC_F^K9rtmY7m+(r|d>Y#>S zHKFFv7;!VdSJC+VCXIBVSshuJU3Q#oyY|{f80(sP3uzMDoO8BoPITbOwHEfDjd}Us ztiaH{ePfj_vSdfrmzI0@r7eE3SC#6p!p*Wu^_=C8z%N06_e;?DFNpIisC()w$g7nw z_5tiaHu=RQ|6_4uxyeauf)4C>7rAX2F%K9T4YS?Ti`I>w<6jr-|4hn(@x)f2Ie9;S zn%9v3B>!pkPq&XkLh6ZW_a9Cj-dRaRLVBJD<_{Y1KV^8bzi}t3HveEXSRsq4Xes{Q zLRiAS@qH>aeqSY~Xy_X;uUjej=ClpNf#zgMU7snkDxZH|BI%kLTh$%rw;8`rD74+6 zh1tv`0m>$Lb=cXKI{FP-wKHgOBC$GZQ@5 z36esxL9U=o3dtkw1+fL~AWLkW3wy9)dw>LXFn&+Z7L6>4g1{V)e~smfQimOpgn6Po zT4t;=$xES&Vx#bbFfM>(oj=( zld+kxdCo9-mcgl+U`oVtwVCYk{r48cPWDI-+Tr%Mu^x#3U8R%#WT`)qO5SvYo?9qy zube7dY85nxS%QHfxpi`ekSvZwV2xY2OD<*qv6j77|=;s^)PPOg=PI;3*ZV=8W zx*5Bt(U|?bd)fB5Zx~mWJ#PH8+-?Hh12(73FwW1e_O`Vm-L*O=F0lkL1P98h!!?)^ z{lY)}{nR?)KFMy#)agD{-Y7l08DJ|ric*X;>we0R&KnTUF&8;Vo8Bl_VhrCYcVbL8 zCX!Oqef@6Y>DrP^OrD2$M6-nGv}m)!q18^XULs>*p389mJ3={h0iORc)zf%gK$*xO zH93UvGX7HN)tVab;#CH6#y5{Gev{!)iaQ)R5vmTyqLwY4dJcse`yDwY)M%ZL8o3KG zDKuZcJ2}oKO!l7^elB)hO-E4&3S(mAY`qwbFfv)utX%St)VA0-OL_E3kynuy)6r|u z)sByRN_W%;Q9QzmSBPpvm#Q?yoeJ5c33;MceLZTTyrWSZ!|0@h%stv|=pC5_xNItJ z5mfXN8T($>(@)IzCvrhg7%A{Ol;ptUPvH~cN&pqT*k^jC7H)3lD$2xUT%DnE#lqO_ z6T+mYL8vd9)q1gOD$ToQznlJlb7Yv(IlxqFxhw$GaXU9y^|} zW+jcnYyLL+@jNT$C&0PsS&+mDwq}RcTC|ORqMnF%R3j$6enNBpVNDT%=Ih_aq(e{} z(apA0kMMZcoZge2lwIDWz=?b#H!(r4)K=nFe;JZ=&oCFVY?xO2UGp6W9s@x_tO2e4 z_eMbm0!h0onX7_#uQ{({V6-#Vg6Ty+P;+M;yGa%ytoB#^Y{ zpW6a*7?Al9<`G55y#WGi2+N4WYY+hNy}@>)^I|cLz*I74G8Ce6yoj!AGb#40rrP|h zCa^wje*=1Gqc&<_`=Of}EG=C2g{`$#{UQJ6}(03JCkQf>TI)bf*goK1mEv_!^y}tL0 z%SGi(B6pYymU7y#q!@VrY0K};MEPW(U=Dc{%<&n%%tWFWu4q=AC0G|Yl2n@|$Q%Ho zBz{7_h8{!K3}uo1GuWNam&e!JPTi2QTG^spo!me-n1`cDR4h_%pk1t79%`p7XRcqk zkT;2Mg0wcFcGS;F3tAzF6tByRQLD?30n`~+i8|El?fkwEpVl}cLo$WBqaw`Hu=vf7 znOjgVH(2v+re4}YWIXSd_yI?mP@+g&D>|odt2Rx&81t#M9>ZoWnUeX)wV2@jO;Zc% zllqXlQNNll>{D>;GjAGm46f2g+au#%MV*Fr6>RER)6c$pkxueC;uf7lMyrqy+Aq5v z$tFi5XLt=e8QY&=YMmsGZkkn06rpzpb446;Z#q(0*bhh?@4>?85ibTs6nWY+enHa3Ai|y2 z8-py*n4A?G+!gwdI*7g2ke$}Y0C`6&uiT@Kj4QG!t@BOXq@jV!Z+}ux(^EWtCXu!wJV2}7;i4<*W!~=*2$&~M;e;r&u8xg`jY5= z1fp*)bWc`GL;i6wZY+=bl(5HXtlXSalPn;9KeKl<_d@eHc71|Lw7;Gj`I z`O~e4<~)z7--O+vbsqq`0ODnz5faQS@P6vuPvYC0Yr=S|-8)kLaJpT_evczfMHgQwZaSfp7=W$|iaB#ZFe zK`2HO|H7G(DTny9)>SeCxPX(Qjc)#&K+D$vPGpiTKGn>^$pAskC>c0>Pp)z3ux@zY zgywL>r7c7X{@`@y9M^B@cPJNB7gTrCf9_EBX0}O?_*1y<+`>f_$shQTI@=ICpQY^& zF9%Xo!f8uUH5j5-5vsj8TW=ZE(LmZ00vwSzpmYWqEK+JMs-oWsQZiUc;iB83`0dH6 z^kd=D*r;|(sK);t=o(9?8Vab25v9FBicwc2{m(ZS194X;{c$ScM5U2w1F}L>{==w{ zOD=}J`{Cg5iQk|q$u29%E;D8D-SF#l0N8q&GPLgOOkDD>QB1d`V5{qimYk}d7pXEN>Cf<5|*USR;aGW z5yR~jJc#N>(JYc0VRal7w1l#51?yiIz#Xct3k@QW&lhOQPT*=rA@rKr9;} zyrqcXh`>C;wh3tO@Xr#CC5Pgc;FRHn^KtCL47pPmo6}K}vJ)ri!mNvOUHD?C(stqt z@{96=TWzP2Qh#aT%B#P=PZ`qk>aUM7g|Mi7E=W~FOc{VG?IQkj5i>+p1FfU1nyRRs zH0d-_;&F#M(c3j0q={9gxm#EX~-su~!|fRkDA|K~-K@V_)h*#Fb^zM@I~ zhbUZ>{+Hwb*jLQ|pYSXD55>QM@ktR5z#aD8qNsxnSk631;28{79k_98i1h{;K=0fPO^Imm^)j^5zdq;j!z16TA z5Kn%%Wf0q3Jxv~5zNQ`>Bh)RAA>AVE;4M1KE#xBXcU6+)5yf#uvfIixx`(NX5N1{S z4MsuAnt$q@rc?=j6rTt-dhxveoxV8a`iYGB(0YOxqeP=bbqT7184lGZfZCHbjTMKq-J9IPBk zF(R1EF)oE;`FNJ0KhB$5|CHg|MrC4h!YBM~rQsm0=BUOpk7b3VcfiV{pMr88;ttR? zqzu4tMUyh5jKFYB{A&JVWe^ehxcloj{QC_nfE)Dvo_`Vpc>CD3)Jo(`dM@Tl76?Yn zs;nQEtmbMoQrfxoCp*iR-03 z5)jonXftPTO%6>4JhI~}tVOe##8#`Vht~jQD51(WOj(veqhor9h?SeA=aN|(FwbK; zV>;%eRzbUCM9GEWpQug30+vB;GwTkjFkNLLIDfN#DH!y0D&R=Ch*aO2ebdX3F3rT-d(o2G?vYpRg z0RpSGKxHIqDwCu@WkKa%V{`jNOO6D^)^kc@KM9KIe5$&!?vZQ4UkXTX8xT~*xQOm1 zUrd*XFqPoE&vQ{nM^RDoBIDTFij`m=y579*9kH)X2S}m52O!h>P!8n-nZ1x(aX`- z-0#}!`tP9+sXvy9#DK&&bpN+VFRTvOC&oG5Im9{3Ij%7#gj^`O*aIK|K{m|9RqNsG z_Hjo_AM?4ERFm4;JMB&I#wykNbm4~UvewwL1hW_f_YF70hkWoS860u$; zaCBtt6EE(otG+@9_&c(exj4@qPCg8kVCo2Xh_pfSFYcp)J!9pyKLDu>hC>YF+UZqJ z)ZY{&hX5zBoh>qojk&#(KeCqr^f=4{v5I$`_bOO{^sx-0xhIk^*LCzE^ikd%DYS-G z?R3lkIEI`V8Jm-zvqJZmtnh6h@)7t3EFPFSIlmWncWFbX|#kalLI7WQ>fWANTg6;V`BjM$i7>Shv_wSm)j$ zTo>Q*T~ATq``vNLSjnZ0y-%dny-+{b(z7Q9$g&f>ccsGR2Bg984JSyx8IPxFEj`7m z>kcpjxo$$I_dj3{Y3a{=C~2w}ik}qhw*}kwJONN|?5Q!`^C`?OTEUP!@2%~+21WpI zrs8UxbR|yQ^sfaIA3t}%#w9)*Z|_s-yPXd4=+}L)X`RkWUd((U;7?7T%u?;@&Tj$K z+qSD`9eP^2oS8E#Cvnvk_W;Ii6Yjhr)zrmR9tY)YofztEEAGmnMOQj5MfZqn8ha;5 zNL#CTe_lL{ot)60J0GE{?6G#3S-M_j`EH=KTgX&nOQUDQacTDA2Xj%5YcWwIl1D|( zgK}zb8&K%2aVl$f?3xo|NOx>F(O^<4$Wr2BFcdY|SnyEaA|0%Ai%DxT9dDiq5oei6 zWpYP{-Ht}kxUI-ECAURa4SGV}nh8t=SFSf2s)5IUII|^Hzn+EN%~m~#fGf|?7ZiJ2 zp)O6Ip1D3Fh4WMQ8=bi(1f8upWUQ?w5}lRi_pF6lb^5P9uX1>s4FB~fL7ArKVNGYx z)=JZJNU4hxOxAhi3fEDTn>d+qT7SpIb1gIBoAYKui!(}OSIhn_)%2iVI#p$}vKi4F z>T{|}XeWR+xV2>MGNkMFPq?2fySsFki)qFl4#$!UUU$PDytQ$c#a`=Q)6u?@hG+1R zN~pC}ERWYEZd~P5$yW62h^Jyd;z7buLnyvgjyA6wnE-Dd<@47wpTtJ+SQ7c@<~zX= zd^-wqYH?@T#nzTAYi?WTe}{o~d+FeN?(NDU-2qpmzOFUnyG}PFy)H6~wA^3k(C3J* zjaAzWty_ZqYj*i#`c8pQ(S4Lv_I_tYVF)$HAiD(WNbg=1ZK`cI^UrVr)Y!D9*0p>wAbCH14vb2k``h@CA?_fk{-5tSs$!-JiL(N zbkd&iXc<>QC~cOEchHE!R+;U^k*ktm#*Mj=44&{Gfnun2U^WW%o^?7CIp5BFcaMT-KlU!sbIw4eHhLQ~Rz#jsKTPeT_15 z?>4xu)n*K8#)TCur-5p?K^9)+>%u=Z*Vht7(zsVn)yWpSd%M4ujaR?m5i%>G7md|~ zUv2Mk9^Z8kGtXal?3xJk-JIjEjRl8&@moiH;aUfLu~tlbz;tbUqNmNv-*LBin+IPv z4f!v5Emv&#i*qWq4^em==y##QDs$M*8*%649FXwq^wg&{ zY+Qc3?jcDE?${0+e8&FuNoD!G{2LVOeT_ba_@GAMfbp#THpcH?FSxF2?l;j_nE{h^RQcXH=|h$EE0S- z?^|b=ft)LsPt}m~FoZ#gXiScA+B5L1$MhViS$4@@>DUP7fDaMqP+OQngf7V&zg5n> zT?e6gpjlPD%c=lkcS@8TJP(>6LYpYh39$@qYbpJneqj-F0F0k#(533j+PBa!O9%1M zF8tt|4o;j5$ywwBx-WqzNQ;~tq2?g{j;qU=wDiw?{*W*(H_ql6<=UD>jgLVm$b^I) zqK>ucMjtwf%@$bX8m}8}nbAC1A(E2F6g6iZc3_LQZRApTN{Ut(ws0wT2-w#po-gBJ zcv*{qC(!T)M$^Zh1^5oBo5>l})@}X(o-tM1Q$XFuRAf^JknZ!Ch1$i{{riJS#cu10 z1QX3^>vRM~A@LOIP})GuG}t<tvD0}lB&@T6&D zakV_Ts$=uEKrgAqxn2h9A8njDsVh1Xf+@HVJ~XLL+Y>@gx#rweRdeu6gIQ$*eZ2nK zOvwthfd1O~H4P8?gQo@G1na`t*U?hXC^65boa!ibEiCfZwt4=c{n|`XlDM|YvzV6B z(-!aVa_jBPw5LY?mFK<0a(M65DSdTa0RQ4T_rJ=m!wi%a{jOzpZu@XQMhM9Y1(cj>f%A+XhC2aH!Pu}hD0)CIi^vFrd*-yhWo@51lYTG3eHLSDAboR5>!~b* z*Mj0tx!vuWlIYWlHz`Mfjbw2yf6!KmF1pjC-57a~f9=Z8He8=|xky?V0R;68wzcE~ zZH(Psd6VEIm{RpDSNfX^&f@kp|1NIFr8Tx7`)2C(Ccb{v%;*yQWtwdzl^iR26bCUl z03K;&Q+eu)#PQMg3k9+vabO8*wS2czNnI+vJjwjGW%X_G`QPIYC4(gv)dbzNC4Z_n zg@UYdui8fscwlTJri(48cUh8FU4F*@GI1oK%{Z@Ck*Adh0n9R&hyyFlEu8^FBSFi zbugj8F{@zpKAFS(>)hK!Yr4&Wr;?*qu)I1IeBo;A4w@DOBrT#9U-!iUr8I{s6Cc z8mZR7q0G>5ZEJBW_{~Xw=AbvCPXUd;W(lFJvhIJJj%7sLYvGJSOi5U(o)!52YN+)U z8bD?s)$Ioc8sJU0_cdo=@$?&D_ZFO5RRBI^c#)*dL zByG(%b$LIAiGqQ_56Xl|Q#DymD~GOiMY9Kd)g+Df`(tcxB`^6NJwivcq14dk+w9qD zs?&uU&PB?5W<}QEZO^$Y&>!TT14l@rE8^a1s@R3-#A$j>VLbWa$!TgivEQe{9(Kxq z`X{6C9{gVJu=)jMDyHf_Y7yi-F^#5|w_jU+B=)X+uQ_@0Vsbi~;dD>ST#61~)u!1a zLC>UkZ4GadLFwfRRr9CR<01IvkD2F#VC%5;H9j07M<$=74}oa|@LLmi42SD9_x09u zPE@|PQz1~MYy|&K7da&Z+rwC7e^R#7;W&RX6DPx5?@}ICp1J1Mw5)K_s!J>XEQ>W{Dz6=P-uI?(!qs7hHT%m}E=?auuZgLc~B~23LkxSX|ocA2=W;tRZ zaGBj_rgn8c6G(+Dc*u^n1TpPtL$c`IcZNjIrvKn6LVsknB~<2;vx6A21{~cQ%*O3vW6CBay(Lp zwz}1Qzlpp8x$zpvbc;RaJHN+pAIsZJs6c|SKJ*{Dp{Zi`CtA$3QZa|DqM0dh(4%37 zaM0yoW>Et%qhV7GR{>13hS9J`7gH0LZ-%Ra4Uk%71pt)Y@>+#bdr!F8c?TXDC9Z-w zvdCB}IK^QHp2%NtrNc^|G?gl-1%(*=A;<2Kf!oXc4YkDhv@ULHH8kZlzMEaF{QUfz z+mB~8nK^y>GyLQCFH!BllxJeM5&gNY-uu__4(z(z`K}4Xrx>Q{zKQl%23UZ3LJuJrjdBI-N zFd!K}TvGl2uBxAE@VUl@Uw}MgPv1W8V_gMS{Td3B6hYgk;muW^if+z2UY%zCO-r4? zUda@HOvQQas}MWg!ose!hwVb+uCzyjeDqG%*PlGA@J=oF*J~fp&KZvqLXf*?uy&&9 zCji*v6a1@p|A48-uW@FDBj+VTSmDu-Lx8M!+<|Dtca~hgAQbIRLHe&R=?A-Gs@ML{Xe5aRxPRt-tFQEitehen$U$6CkmKh(@HWwuT zmX0cC-LH*q@;lba>)d@WOHff}K*tqfvTc{(=y4HmfEtBFJN68#!(31=Zqo6*^AZcS zfX}b-qF01IbBb|nqG%IGAL+i}>$!9YeM_bv{m}-vDhK08rYz*$od!rMm+P1lX3^by z1|%x`w1}6cr`}$HCUS+-7?lQ<-D`Ov4o{~+UO!4}s8_&92&_$i5)u9W(KC&S@#kH@ zBRA#b#^oEoTrMMywOQNS_s z5+@qpXx3v4lp-s(k8vOCuPLr%*4<2m9ODx2`9Amw%x&vyG*)2dHs^ruBmFnV^(F5p zg0w%G-6k-0&zDeU>Ac;GkJ!YzLDxBzhhQn$cidzJlCT^o90G?*e>SKIESrhn$n2nH4va5?o zLwQG04PE1yjg6F*6{-dT$yIHwa~TUhQm^(oytvT|fEJ3Y>qPCnqnidpFm#6_UfAJ3 zz<28;??$pJ2L*vGwSl?Y(Q35RG)1?R28L(3w1kvHCjk2d>@!3oS}?$6tTOi^p3#N9 zUijG&TdU=Sv|A=E=>qc&kZ9zvGQ5&jT&-%|919xL4yb2A;Tj-JG;4oz_r6+-1MUF$ z|0*Odl5{rLUcsz0>R+6y@G-jzbwlmuc^l`d0J=!dXd2b+oeBDuW?kg|+&7dS6j!7F zUh+V;m|@<40E_yn&L5ri*%mlZkYeXf8My$rbzfR*WMwQ;Jv~ zDwF*6Vx1<;URRU&Z*h1VJTafL$>FBXJ|eatKF+9>#r&`seXW4H`?eO4BgTHrtQwW^ z3)50!TkQV0ry$5&@KjV#RQOKuSk(E)J3MC02R5cCf2=@3PF_w46-~rg(VhDz={^ZPn(M=9SzUk&n$?kRS1%?}CtN9q0VY%68t36+kIXh{Q)o#^pmBFzYXe&Hl z{n~b!dUWRAlWdxMsnL!p|I1CWrQ{@5L@CZnAUrb4QyY|BW>(;8`N2X%b_&W!C}Wi5 zX2UMjE=00OE&Sj+ohG~1%QZ%gll0-VHsT|p=0^AW?aV*P34~1p z;h#6Xf9Ut=JawUPTu<_iM}Z-4Pr2Q0+Fug;r3;P`0TpjcpZ`~#{;LrC#Pqesv(+0S zOxn}>8(fyo?iIWgSdAQ*pDdW223U-$mkPDDhEatHxmsrEsvO(72Hg0RhI}`|*pa;Wq*Oc^d zx>i&o@NlXHAG3n;fSV=0DZ^}=nI8%JeTU#lbf9vKM=aedNt9dd7+W9DKTUhab%d7Si4I2-nZ{_;*J8 zA|(c07U&CaYRrC$*W|IsPb=Zlz#Xd0_WFeUCVIpUcr{W&T^$C<75|zp)F{thP`JbO zFs{Q`nF-dT`~+4E~yZQQT3i&I7*YRV$0|lOcal2cZ4JJS^cG5%bAD6~o$@ zB3^?(_W*mRzL)=t-6emouUtbbi#ed;F7}=w^hiXEGRs=@a_I_MCKjx9yz?^ zBOyZsVOF2FR*1s!xZzGqins$P_D=i4w;7hR)`Y`NqAM;W} zlKa8`?p22P;)=RS)~@g0-&rU%QWx{PKk1zsLxSw?TpJxj8tqPGD_V6H zt0TKE!SaX}H*`2Uv4gLz;PStF2gz3B4OrW7yrU^cU|ZD2H_k!8?osR6hWsU#TUf_1 z{|-B`=T`49NZOkwx6cgZ@y5`dp1C9Y%-hs5vfT&$toMPkjm*-E zd|Ud28n5IVO$4NTw(w2Oh1NPqd+vDpED+}qXJLZrHZ})~S@ie)kUViCA3+xzH;zaZ zlx}>ZE;zgq8_%WC&Jk+lOEC99o4qxQNTo!lS0vH?uqZez7aN}sPrdr7ouknB#ws?> z8lKuC)c7XO_B~PD`JKGrY*lR8DZJV*_1KeP_Fm%)#U8%^g_qgO{Er{8!+k$t@9|S0 zJmc6q!p$Gj!cDQ09x?RD*E%!JL1_^jX(%?nh>g!@29Q@OS3!t7EtuURjcr-xAi~q> zGC@eMUY@U~u2S}M&HC#oC=rUIUtnX8`Fn47vMs{?!sA2WDLZ}q<88>nTGAT%P6eUy z-8kGaTX4!NZ@qWp>W-n z84$+}r7P+Uo;Q*dw~OP92qN#n!eqCd>T8fMv*!bcih1%69g*2*jQ3SoW42BF8g_=st^0DBq`~0FcA% zr8~n?_CW3?0z+T+7EA6z+WywyVMkPpczy>);eDC+ z_n`HQEszwIQ)Vli+r@DHeJkIv*2aAt1TgOkw`F-#Y-XnfHe-`d;!OIPCpNpmQSQv* znPRvdkae8e($Br8v&VNCt0;2z<5~TT`x$BZ5(&+@-K)*^F<+kR_|gw1Y!fomeu4jK zgzHjZFxxqfFL?e^=`z~uoW$DZ%<1w*5?pZC;)tP@vQ75##0DJrM2$SIe-r+5+vM?_ z%y5Xmr|NR&_6Tg5pYZap*RE3U_FbdX@#m+2w16MH{qVf>+#}!S8|1XG?Wj-M zf*bs|7$B4Mwrh#X%^ z0U~HUV8o#@A1pG-RMG^c=NzF(Bqb}pNHb6*e4W#wZY+f)7X6klO$7hv`K>MzFu{c% z_GneKV|=F0FolPHa#E(=k1Yf=5&^svYdE$&T{|R)1LwzEdgF5&NEF zh=W}W(@7P2NmopN3`u3x_uvbosrdFil*Ty9EPXoVM9*rOuQ4y9X0;*tNss3yy%zY`H@;CGMj* z4D!uyE)64J1c%=^M0=e@_*u|S=#9d%SwQEr3l7A~{iPHRe&4C3R~sm7%P6;#wZv)1X)pyN+>dIy#zK;&a zbs6U6Hn=qy?DohtIh+*<0J%+5^=-3fT3r<^sJ5ac#&xmjW`Gj1+nK$&ZKP?5!(-E| zUm)(ZFus0)<(fOKu&Qv8^fBHu#JeNj&R})NATS=e@P)9IPC2xJ{#fo-YlJ=j%)xhJ z_K9-|ego=hwWwLo5#cq4q|A4Zf-jOW{0!^%r2nnm#lVjtxXKqWBDp@q>GX{0U0@gL zQ)B-L|Ef#UL%T8D?=rZ&$CuBcWK%(|#FD@z{?|r2?KGm=D3|iLhL*C5Y_%9VhLpE# z!ht1q!a=HIdEp?{cUa4!tyG?qU#;COY%=fP)Gff)HKIgutsP`awSQU^4Kl{qTG=rP zny)g(G~G$<)BDW*9!Is{`E5r(T(o+B2WydIAf??)+{{Tw-<*|_D($V;j#uB88Z~D* z9^AOZayVbTPPC#nj;YU9KApvg<)l9Dq7OmnCDJQkGA^(0I8LvR>v6=}J(23wjXwcM z7t|(vy1hw98@pO~g3I>Ywk_?`IEsE$Gw^XPd3oSr^+ues)^A{)9yaRfZ5yZDbF_cu zj`ATiE3e6ZYM%L=;_p@{9bK0Hb;cXMj^C2qu;sS0dcb>Hq) zEQ_GqX)5mu;sHFnt6P@D)|K!UfD|J;<+~m2)a!;hEtys7&3T>G&wbi)fe)(U8uoe2 zPGaf5IL=CSaTf?2wgqH;%#Xa1%{X%`-% z@pbPzRn<9iH*+Twruot@6(YrWf0FQnkl_ z`&or_=Gq62wWU+)JdXLeS6bV|$2D?{4{K{Ze>>_>kK@}|W5^wBk6MQ>)!{t^iRB7o zYj+$*RY4!ZZp2CjQHjpXgv}6r2Hry7VJDk7yX{|r$$fWZBHcG!`=d~j$vuK^8p|^L zCuzb0W||3@4yVTV4Le;nT0CWZ0>LSzZD_+F)p9s}eFDxYSG=;?H6g}uzdNIsVu_)a zTCRaK9f%7dcvZJK&o!CeNOr|>X=JI^#hT2@grG7hMN_aNcNGt9WcJ@f zo#cwKToCCwtZO(ysJEH)yM2tkf;ZAO>ZSkkGm+r;_V*#b5gv2$6$#9dq~8Q=v6Vpr z;!DE06lZy`;SzM7P~1X^BbLVvzuE7&>v3N!>Txq<)J1bCEAn|qEzNnf5Z@8B5PbqF zLroJGXRyCaSYI^aiv~@~=i{>>-oj}iPLfsR=l*woMSVX89%CQFAL|Rljb?VnZ!mCBC^l)Zj6U)gF!up5YtZwEaw!P=%;}sGE9v3Pmn~L0_rsY(im)q+p+xqCzcHe^ z_$&gy;PnLDGhX03i%8s@@f{bxwBmfj9bW=PMv2Foc=dFN37YGSFifV9XPrUUZ09#m zQ2k#{hl3AIW40MdM*jx`!0gvJaKL{pDj)(v-h;pyrsmHT*hLv6LI2AQ&TJe`y}}0< zUm5`$td%I;aX)mPq9*d55WGU5fFWYILtiM^_Cu6|Y-u<bd;MpP|qt%U&=YPw4ai0kc3%zX5twM46Na zdNhlya=%3NLN8{MUVK^ojwD{w{w(za>Kw{Nl)gY;w9y~7TJ4jz+O0x&(%rUtTa&F< z5&EF5o<5AlMsF4RsExO|6rqpXWSdN%gdiqXB=kAR^N`RN zY=cn3DcguDql(a%NO&2-v4@48v5ng%*ClA32+4ZM!L1@(v>&uh+h#)|OxWgCS=cJV z6x3=_5#fq$*|tna!;vi_%n8?RcZHj_Rgg6-!YzKrwnl5|=#U6^=-90St{_r^EdBOqd#pWy=s4WTo@^Vnr(tWfX99BU`SwElZhM)%!ZvQV*e30JaVgmH z><#v2MN{c~J8Kv19(y}&v3J^B_HO$@x|vS4AGRNbR&KW+x1Y41wx0ogErT8?w4bwI zuwMe5v)C_#%+M9~t3(5H=p3c5NWKQFF}Sbn*8n%{OZMAzj(r8rca2#&L3xd?4D%9Mb`&5NnPT@Cztw7kd@vBHR@#YC!s- zP1A5q>`RUZ9R9?co-=Uqz)(Y65|?Bh0$n-IrE(dVlWa{~HtXW@=t6E6S8VU(O6f9g z4`un46ZgPg~$+5Zct{nRrW(e=h zu??*6&1vA9Z3{e0cIT*jb8KsPZw@!h+*J4H9JGyZyGLhS&KiH)5*42%{+0UawO+GEvSJL+y7x>=~eXY^?q9{NP;b)A-^HtmJE_+ON0Ap3`Rp0+#{CEXb_pv zXvkb9g7~~zGM9-Yvlt!md85cIMo(rjJIKuCF*0+BAwI8x_`FXLpEs7wS)L@bm8TFD z+Z@Z2XCnI!t<8wCc0&wv6zf6llY7>zosWWwW7f_$wSef4L9Bv`VFhm{JR*_-Y1<%E zLB#~bIgf^lD-h?aC{(dqfwe)2D{cYqK)MW2@h~bLKy3MBRO;0-_Nu_;H*W#E4a6<* z{2pirbZ&!gz`<>Bcngj`8Z0`9j{{DA3{ESs#3*?4%p>9);KIkl5(n|6M}ryb&Se!d zDy}N9Br35P`p1$2>1%)+55tW0Z0VC>Ne5&>`nHM{!2QjrK-)mK1u?$|pe-sAw*fp) zMf$_o+SV0WkA})!5a$94J_c~EvKUaR<|}$clx(j%qzqi93F7icLuD<*MuKh<*MuRI zr%8=z01xT9jeCWo(xs*wKN*!WpkqrJ)-7;6jLIOO7t&7Pon|Gj?BBjV9}5ZK-v;{u zJ=>sfGb#r*xO)@dhWIkXV}l#~Qh91Kf2`|Cc)y1FCDcYEVQo9QxlZex60Vye8xGkP zE=$#UOU)L&#{D@47za!OrmdY-xDGJBRL(2M@iXBuqH@7X#u6)VY~?cGE?^Y^&u_%z zR)zAsMi{G%c&vhcF~YS*xW9uBQ9&N z+PZdJzv_77w{e;WHW1|sx-w6F= zJREktMd>^I+X!uM1Rghn-5F1-d9-1O-3D97<;-o6W8D~E!^YTkl!amI7#kWd|2^Ym zyLIze*lpby1H;BU<5fj3jlloL8)_PK&UjnZSrNNjAFM{af&_R z=c)q!tpfh7N>}Y7WCtoQVlJ)9QhBas!$ztK6#l~3uXEs5+uCAR>-?hHR+Y-dSpTa^ zlsc|o->BGI6GWTTZAvH>8wn8CHO8)N&SZ9&l0N zVGD4YWlH5w;7iLD_1Zb>hR-w;#-qaw&Qz~FvkCk*6RmI;<_{CE zj47e~Ch*rx;D?#O4>JW7eKZ{cfInpdAICJP_ywj@YB|t;Ch$p2qY5A6{x^XSVH#I4 zskAw6I}^Tc76874X+hy`)1sOmdb>Rx3xLJ2cscC%UBD_}4I#Z25FHlB0ulhpN`4&c(*T)(96&yx zFf85;C<9agEP%ag{surZfCY#E51<{;3FrnK1RMq&1sn&Q1e^w(0h|L|09*oG2Fw7i zD$k|A2DqWdOJQ*+|81pBNj$G!M~9tX0o*75;v4PI0l;2&#BId5eRd=QQo`bNKvr0s z3nC%YQ$RJ`2Yl1^E7(%1hh=BcMi&jSrWzqYluhwD%4xz!4TZ0TTKf zbC0>te8hare8N10p_9zR=CkJW=8NVD^OX6DdCq)Y=P=(i-!k7Z-!nh3Xe@dVgC*XQ zWJ$GTSh6j7mR*)&OQ~g##Y9kRsVBdiEVPBUxCmrRhb3s~HBVU%=^U1R%YbE&;FM*= zGHMyKj9Vrx)0SDwJY2V6S+p!$?pjtYYt`E7=<3+&gzDt#wCYTYt2(DTzq+t`cXe5H zMYW}RZ*@a;b2VEn0zCMd>h|i+>h9`;)rYH(Rv)iES$(?t48ghT3)PnhE?3VGT&=!F zaHD#u`nFE0UQy-#dJ3oS*C17NATgHJnm9OqO_7?!niN1{O*%*xNN!C*O;PnqO$kO# zd5saqgimez#Ra5(aY0YMxDZXgxDZ3WxL_b(T!_`+FD}H9FD}HBFD@jIFD^VozP0cv zL#p8w^sM1?hEnvh;XMP5UNtxjE$DTF%iu$A8vKU$k=d}{5J1(24-9{c-ZK2iZ~=7~ zCJq0JI?2};PX2#fGm46%M6zGyJbDSComW+WrSH6G;g0SC3YFwhCeB++!M&);U4SLC}1Bo%mnG?+^ zAnE2TBDv-QbCJ2kTy8d+YlzgD8_ia;!|XImaMW+!52+rwB1^SK#U8OGo-m(>zIuXu zX#jrk zh{MPZl6FCu7x^uc{vt`UB>fUeze%pjhA>Aht(uhP$7f0YdTk~SBQ1E>Q=|;(cx^fk zBi#_5A$h)oul+4a|Mo|uoKAAwuGC7cTQMoQm88qbagvVw8V+^eBFDc(j=True28oK z+l9!zq_)N6iIi(!B6;2>wf#IP^F5OO6Ov{~&0ix=N0V!D`jv=}$dQ*x`a@E}W8`c( zInI%iUn9p`NcstqewF0OA$PAQcX@)`Qk!T5t+dBRa*J>wwKiaR2c8R&mm+_N{2=mL^`wr+^!Ks!_VGHJ~h3O32 zQELe8-U?sy{2)J?ZP_83VR?UKTMxz}SBD|o9xbw*CQH8xTtuyG=!xNEEDNItEQ_PZ zE$d6;mrC|eQMwrW{@5=?ZV5B+xgVPb<~_^W<{ir%Q=(QR`=7v#=!colEPKe(PlE%f z6(Fw@!-iPqp&u!GKZ%D|kk?U~OKC0aJ5zTrJYjCP`tFe|kDJ@997kIf4e9;C(Pqm% z#;%;8k!-wE(K@TC1P`V(mf_|2X#_K=n-3Sl`q3XK9i%9U!71cza1UHyZqghj&Vzv% zpN1u98o~aytx0YMvAjPn(>x+qccfNzYE`FJb!=Xs^aV8A(M&`0Us?%%70H%?C=Zq; zXc{4xu^#OD42EDok-FJvJY+BW21;`QEJR<(Sc;L0olFml>0vSbDUNOS2tQ(6^;v=S zv2R7MO5rKT=n<_hN*Cj8G2RyAZ86>!D@t|++CGG|8@d)VsFlI!_Tz0o<2qrFJIkmP zZi3Il)0Eo17S?1Qk7Kz59)icCEv${7wPvKT`)Ct<9-f9QQ7!*Wdeuy_ zcS<&PMQwu5!_%U%*&y)U+LP>8!rQ^)AxoTd+%Xfn}c(!)%8 znCVLCf2KKPM|!hc$#S8rRv>b*Bc2x{XJDVfyk|&bXJ;glhZ>!Y;Yh~Io)vBDrNm#FBGykk z*o_=mGkV%`f85=2Hu@u?5AE)Fnpu8EyA{oLEc>$yGGI&mWQ*Z!En}H8}V|*Ejmwi%?L#=-X%HiAvt`NmEVQ+{Hd5Q z8gD$$>{f4CT~mqM81={Q#~#GIDXdA%o5GqzzA3Cp{F}m>?8m0CCUemg%KjMrpNr?( zj6I*+QVcU(?u!3NrfO+fM?LXRN%r4lW;-M}%&=4%dp5~`S4vyDEJ5A!emLtd#2AMIsdc(RXrlLro?sY%Y+ z$X+`mVe_H?Pxgyp_D^ayZALoGIzP-#Kg`ZOtbLjydl0$Aus7u=7#aO&d6sBBY@wFR zKguwN7|SH}IqVVr)3T?_b)1hQ8Q0*1eS!)myHP9WSkK)wcKNrNr;$!TMsay6A8w&P z;zGyxQFxT>v6QC;<)TxRZc9;F;=1@R#%-NrO{togZFfX!Cm_Z->=Q3;c@KcJ0%3}c*NnPs*qpJ4M8BRZ&l`cL9vsm30)Qk0@hFe{?P;h{S7lsZnJ=x}+`Mb$7tpk(CqKe_=)(@i)gHMw zbvv6EEjt;V)bk|Ub4RiI63fi6nw7uD+bQ@g`YZ9!#!R#P5ndD7JsuePb{;Lhg8d4! zQR@w#C*d^o$MDb|Z(EQDq2Cbgq|aLU_v>lRK9!BLoUcr7^_{H$8{!t$ew5Lk8ZO%B zL)Gd`eEuH2%f6ey3KZYb(|gb$z5!kgvtT;x3+Gz8XWbkuTf&^Uu`-@y|C1E6U^?sz zWit%>*?60crU#mVk#cMrb<@4ofo{vNxnUb?$I_wK` z$uk3NlrH1hJBiOE-d=G&&9hqJ_{qgjE`DA|$Zl&(UQ2Ggxz3~N=U^RQES3bOwEN8Ps&=dV%MSmmmtx+d- zw^)Q`8Id@!C3=S(MI2Gnd}pX>;t<(C)`%kMM{X z)%X0ekM!Q7?4#&jYyY@z=;7vQpp9ocWq31Ga<~#cihg-C+H#33eeCV&Z)xgM_Zl%C zf#sWeJ7G5J-9@+?57+B`h^b8JOVoNwOq`4U96X$cMc5DIW;#jp9=@#X9qvTF3bqhU zJ>6%``JBr$u>U7B`?(k`!={B~Q%jcNOtQ-N$ipeUkkT4r+zAiv23-WZ($;0lf#DLp z@d&%#yWY@eO1jXzuQ^b3jVL^Sv72_ZU!pVwgt{1kqUpHlcC z9B0bW57N`D7`=%+3BJaC`Dbp&FX^ezT*kBCnv@)fdUCTYLDPs*d$PoBi2q0|E5dg1 z-Ij0Q;X(MlqdZuappl1_SUygz)6$sJXn69B9^-s`j3?6da01-H6Xqv8Nv`KPb_qA= zq@F76TGA8pURvx8Usk4#YT~n|>PF*{$2(bmEKAT>Kha-wQ%(eoD~!&uycRzP=;t-s z@8&r?R7z2PD&eOR@p+E1Jg4|X?Ib7ejQp{dGhTnPI_ z8P;2=?!wXK@ocNvDt)w=(#~SI2Kk6=Ocn0V>#-@3eU#4LsSEpZ7k-Xg@DE~CQ_pG9 zc-4wK&`L*qzRUUe6`oh(?LJsZH*T|v(x=!>8SreCp23@O@-+l*VY+FzS;=yCWkcCP27B~+qZd9wCA8! z*XH;s*17ihdgRlLVhMG3lN(=_Cf=f45syIsCLBV3*iGH*;rEH=aGFj)X`+NyRN`Fh z&w)?jlZ+ZJ*InCOrF(}N1T#31Z-|z#x{e}S`?wGKLEOLAaO2BkuYDWW0Bv8mL<`!;kCv;CYyn76n>V_UnSB8&=tIyFPa>DCm z*Fi+!Q^`Ro{E*V?;-Ow~ZZe>2gzwUj+&HsXE zR3sYbaTA}aTfCWIzOy|XO08@3d=>3uwX8Qcl8ZFnHPl^0-D_AawTb*eID`JIX70}A z{`e3x{u-yua^|`Nn&)+oFx*DX>)3a}+e>1!6}gz)9wSfUPVGFjhxh4@Z@ywLpRK1> z(@Xt~qG+))2K`*bYFW**;^c6H)t4%g@uym)_9POgiRN3Qd3lOFKS6S|KhjzMGN;up zY;GYFo+M8WrnIUU{#B=BG)p~3N?*Z&OSBsyZZ-D%G%0@mP)O&!~ z6U|b+4KO*<$K&Y3TZ9wn?{s+Ju^k3tlm*nVCS!&O+;;ifrR8Z#NqIcN@X z!=1$)b1Cc#Kjtn^e}bpE@jb%3g`>Ki*}Z0K1%Jo#DDB>(Ctg#C&qCET_apC3@nV<- z)1i9uquvSFo9_S{$tH~P6@8)|{x?3e;6V7MZocLMyvx+!Q77#0BDQtmQPF0G7j!x!7s9=& z6_tr*8$R=-52xd~9{i5{Fw+!U_M@~F5nc-C$|fyS5lABr(Zk#~k8pZ!lbpDnGjs)| z4-w(XMDJ2~KWl709x~-K?L|Ei#gA|sU1QeR(z{Y?+uozY=Tqx5k2{oB&UDGvPaZR# zM}#G}(%T6$j#i$OAN$;RkyZlhwiawif0oeJkf@4fwixyxo|Bl*2jsAR(CP1?e&kfP!!I9`)pGVT4SCDgI zE$lmEvlpH~-yQila*W&iHlkfdAK@zg*0bhq#y{d$14|C$*P9axs_2p9fD-x)}e(Zd}MUkzb@Vgw5PokbO56 zJe-vph4f#$aV0;n9&X0NF!XKR=&;XD*0Y+y$y`Q}OV4xZVJP9@z#s3jli&oq^VanOAZAPv@+{9^=PD@?~D-cQPd!f&!mWS-6;@~aKBYN>I2=?hkGO@Gr&g?D zcr#px&Al)W&A5~|#r9le7x@J#%4U7io+&{kM*1@Gace${{vRMFKcr&Y&dRKFOT9&B zCHs%U4`IOA-%<>158FX$$cJGk{A`8q`v`! z&^>S5insTmI}=AE^W@;KCSqN&{E9Q8ikoqr4nZB{0xWmI-DLh-AkREz1mtXuh&ALmFe97R@_+=Xnv2Yy1v=z+dR z@-kR~_*5YN(r1xF))A$3DOqPhQ%dtv97S&{u$yG_N-DNpp!5S_Ei!*kylqTTb+3f^ zd@^!`Pe2~$ZSCU;o%qd=o5crh-R8)D;2HR7zB|;NPb%9-<82D<&C&Z(4Ax5T zZIXS|g}UcB57Gx|;Tr9!aFw!sScqP=4yiOs$7VS^gg#TWdUf^9)^K0>aC6!AO}GpjsH5O+_U^|_}27yTEoFC<*Q)2#uex@u%MS*VET;uFKl@c=@6U&eU?_%@@lY7dv@8y^!t00n_EE=hrn0Cs{wZu0 z(_(*WEk$k#GlDd0vmcuVfmVC%;B3uopidjSO7=IxBK zhdjx_$e@n)RAAR?aJ%H7YVeizKKgZ7=3-fkx}AMJi3NDu>;FT~PJX7ZCrySPhgq=kaeGnu~FNQQx1pnir7YMLvdnEAnG@ zMSUJGvz!Po5u*xX_}{PyO-)!)49a`=ORB0`=D7&e=0-QZiIZAUUfyY5$>Q?8S+lp2+i$q0vg6^ zT2XfvvZ3??cm&Ng$bFF$v^7KYe?fN9`wS2FVRJ3|?dY2$Z$N&RI1r8SIk*{KM6J&g z`TE?!&5Puy0zA*n4suOc5nkzLN3wa>&5`7AFdPNP;%$0al^U-Lc7o?5U_BGV@}3!Zvug9(e$~ z8k-Who6-@`>Hh%9Apv{Y`~!Bw|C{h>xDXriVX%~12Ux?0&@dMPV=*fsd)8czWik8| zuE1Lp=65apm>i=I6gUJBX!@$>XKAF^@`qcF^@A*z8Jg_~bahnP%j+l@W0cKcJKh zZ~h2f9$jMucH?kr?O=?Cx#nro2zA}45ThUou-?4tJ>9`3{DTJ+n|H%H!p z{4Q}I8sT$rGrWkpEh#+@UWp&sqUs=$448}=@qbzpT`B<2yljoe(&2lFU&J^6xCx0ZfHrVnN{o`*pB#NTe~%^OO5BYcP%9Vt4lJKRu8aLLWTG7~_V@|7 z1dZEq>;lsrIS;Y|qlU;t&-8?CsC7N^0C+VvC2%*TBcRj&0kY!)R=)WM?1uk0;nQ#- zHe`=rDYXuW{vkBPFrd$7C1i!0%dsqmpTZS*Yl3_Xo8GWL8ZuIheay~H+=x9{$i&FB z5|f3@QOHUT4zJ^0j2xIcr@}b*cG3LoF%Q#(!YfdE9#9| z@Fbf1Q}4U<_U{;P&#vZ8+DZ4u49zmt3O+^?V1EcMXN(oaUMea$-JLnftfQ)?S?Rp$-OH_1XYs@n_>MxT_W ze-h1Kv2RG-rzmZWoJDDj{Ac9pShlD2&#^o}>0OeOIqHw;?ndG1`>w|&hiB2&`N#zx zZ&uM5G@G&CA;!kj+Mp+47B)4I1Gp2*G~|lNJw&^PBrm7M7m?>7FURs6SjgLa$A6)9(B9b35|UREt`T&5&=xesFS)-n>cgZAt1aZdZKHr*sN+&rtkr z#^b#xnmNo!KK{EWpQaD8A0#>0pq__~CEGRKMyDaQI!j~gK4D9rNUpN6VukpxCiQl7 zg-UJidYbWSL|J(F#!KfN{wi{y{+;Iet`&U?!uD1@e-?cWB43R$ek`BSUHGq*e9YPu zV>2hIm47ZiD^dCuY_4AUi(K?HI)56>mVJuQL0e0- z4ry_!m!Z9*c7wIvS$Z=`#17G74*F8KfmvQkts?ri8+K%Mv6iACXp*uIcb4nZgxclb zSsuY>zH7zJ7yIjYYL_W8vyc;_e*4R2S5}dk0k6;+h+C^P`b>R@dX=AKE>^-KcB1N@ z>v|&DMnm(;*)eU2@F6rClH;{{H5UH>bFmxyG}tJqUm=M2JZQ1{7G@;> zMq35!h!TB9KyN*IcwSPU3JojQHv!TZ;|q-X46Q5wYS!v7MZmn^=1Z;nue#MG%a}E0 zNB0INyJFaoJoAmq8`^_*bc*3omBuU7ieG}y?)0h;@vKVSX6%Kk(%V}bpE!t7x_TJ) zWN-G-e0e7o0UMJdX5m^aHKHEL&*0azn8iw#p9#r_sjHZeR!l6PqwY@X?qh{(o!3%K z{2EC<$D#DbO*=eBcZM3x#Vp`cj%;%BcjMl%+X=F3zw-4E7nlv8YCG)<7#l&g_ zyE2n?I2-%5t`@Bfp+5&0Z--O{zJ%DSm36F{Ic^mANt525P!Zo$(Jt9%3r=>0 z>)+YE<8{y-kXB0B-36?)hWIa1yLN@2Vtt-P*2>_l$>3DtWMTbRVx1VW&;aazCY#Ns zCp)}s^4^2=S@J@ABH49LG-|L`1NjecBL1(s?3BuiT{wl?kipt=Ud#VtERPb65qOxI z8ikc(m(S<8y_P!N^luEO1n(j1MA$^ES~Jp;|S0;+%(tw;B3~_MD&%}cT-pu<0X5)aH4&PW+L__sU2O!ndNeRwz3NA zp`v2$eaW~6xY_5tUgk>4tJ~NeHOQh%j6~G0dW8}ZzLCa`i#DSUMbI9 zhld{6EN2bhf+iFD_fsrjUJ6+4C5*Iy(XHYXE~L*^lRQ!W4J#ps@!n=FpK&K9wMM6& z%G{Hi*5NzUo#NH8@*9kCHT~ZuCY#G!`Oo?-EX%>xW)$!D_VGrJx1ec!_T;6@#&R&9 z)=A^x;l@bcP3;#S)9<7qrz1BXTzyE$Pe$BXOw89Wr0HMtC6^?Y>le}_m#veWyf0p)Ur0+F)+ft} z>hL(fgtkZiovdHCu<{A?{Q6nq8RRRFZ_)3hMH}@yX>N>hsqE9LN=~F>d79p~z|SCT zYEjyiakYgf81-yQ*CHQBpNZx}sDCS+omL;8m(cofJ`*oN4zT$Po>vm35?TyseJ1iN z)NQYCBRi`9Hio;UPpgF79uH2RO&`3<_n2xP{a=*cM5N=uKP@T+Sr;)v2d$c9$FCnnR;w4l_^ zPO>R%kqF^~*zAE@u`Ea5oIbCn&&(a)9t_J4A-93KYNc$0`cU=}@-8ts81_T6PnKoH zif~GQC#(Rg;inq%1lWdJtEu%Z@<#N;r)&vry@vih$;ki@%y_B~KVh?zTJ_zh=w7-% zBkh0}=G{Fy-^=*(=%FLLN%@2BxXpV}C(v~{SJd-tUMw&7s(BT?*sJX|@Tz(jd97@G zJ9<}pH+cQ6k3V@6ynDSo?^f@2?@n)e%Kl6*;hpC-^v?F0dabRO%e`y7KHdP^YK}M2 zyU!cq4fhJXvEB^+|Fy18B`?ipoJKaIH?!y3#oiTOcdxH^vln>RdG~mK@rHUMyiwjb zZ>D#S7k2B_tE+c)PS0!Wd4qfBTvN|mh?na89(7%t(=)Bd=JrY8O7AM~TCbls&U*`k3#{K3UR(QA z(An$i_4ID^2HAc$_OACPd-r>P_C|VRyu0l=?s`zgtKgmQo$Fm_J+$;LvnO>oua|d| zH`tyfO}t!hiZ{)>#b)6D4>FtJhp+_h$iMB*k!CmC3%`Ru!Q(I~MkfFE zy!FIK(nL&WCrviEt`>5YDq~5if?zU=b{aYvFp!mht;=3)~KO z!cur(%$;OB#t6?vg3-#tE zu(>DWKlpEG_xZVA?f)yu=SQ~x&x}01_lj*^O#A=#m*Fob`(EAu!83m+L!0L+@O%FM zFOqMw_y3+%e>VeWB(Prfm!CSP#Pr|ID!-fO{SQ|D-K-`IEk&EGfu z=I`H(r`nER|9#E{zxlh@Z~ngP*Zr@(^w;I*t^M`ijs6#V-vMSt(X?CDJ#+f(%$(X~ zNy`!>=dg=p5EPIsNfbmuauNh_0rf)(f&@hn$vGzxm8d8=D=4Dmq>^*a>DCk@0`lG8 z`+fiS-}~H0`k|{QoY}6os;l1anKLKvL)-c9+vf3?E#aZ#J!M;Qe2BfPVUC)2WzM^r zTkLbGI96p3_HGX3u0S3PxTmk(|~Ugx3h=O5bc@X&V0hqi~^=Vja|GUB1_#SfleG<~#ZEt>P zd&`4XEdD*$#K<(oq0j=yNVILj1$d+m@t?@BlS!_Kg^*X7)_Rp_H7%!=yeEXG@D!hS z7S96Wc{~paFX1K7^b|b>7L}uNoHu=cQ2J?I$^UyQR;A=U{I@mv{m~KrWPaXG#j}x) zFb3AbFK``Ga38|ls}x=>P+ldkHrJKCXSuGzy^rCToRMb>2|VX1MMpua81B|#8R_ruN2<$_8giuO{YU6q>ETA{;rG(R-;ZpTBU|Li&vHb8 zQCxVKxyt{RNsNkNR8uml+NAP899>yg2G?$4Hv!LXW;cU~-NJ4G zWVf8U6cg$z`jio;`6l1f5GdV-#SOjL%-uyuTY%Od`k zl`2w2$VLsQ0c5A9)D&`1b7~GbsU@|9T-27@LT-AMUgbd1fjU55N}?plN1drN&5fr75>0>BHLun`! zr{OdlO3+9e2_n=eNLZ41)589p(4$v`A~@#(n6?AU(%OQg%;Cds7gy{2~-n%KO^?8&c3o5 zYOt@Yg_^XUy`>g?%idL+HnMj;OW(71)uGMoRnO5D_NwRUXZEVPw2j9|J=(!zA zsI4SxB3gD+yD1j5o7>Ital5765)0X_?bcY>e%*c@i`bp)PFU3LVt2t}_D`X{SloHm zX^dx_J}%;IFUEUXz3IK^jZ>dRnnl{E3z2S-57c#16xLzNM45CnWuYuOhO$vMos4o& z4joImD3?x7c_@!gLHQ`3PDur*fKEk;l&DivAu6Qfs0bC&X{Z<#)A3Y-O6asyic0Bp zRGLcb^zsWVVnDytu(@>E`Dq)JptXQGDGP-muQ)J$ig7Suv#rB>8RXQOu1PG_g~ z)L!SH*XT8!lR8l+or}6q7oD5lq&IaQ>PFpkUg|+TbUx}$y>))-OMP_#>QDW30u7)6 zI*|s_KwXdq(_sBL4WS{r5DlYYx-gBP5xNMCqEWgijiE8R7>%QGx;Ras3AzMLqDi_W zO`$2e6iuUP`U#prGjwU1MYD7nnoYCylQf6s=%?rl`a+kbc{ER#qXo1;m#0OvNIy+q z(O0?xeNA8MinNrL>PobNR_MyKidN|=w1(E`s1worHt1*QJNiynr%kj;*PtKh z2VIkXq#t!H`iXwhwP`DD)z8v)+OF%+PTHxTqusPyKTrE>w?&jDW&{||I0u{Oyx&=C1I$WAZ&)?Db z?`Ztr6OI4yzIgGz+&$l!Yo#8|w3X zp$+r*x0ny~hruukCc!M23yWbTd<$D(7yJgt;XE^Yzz}*-Z-9<^Jt`^cO_80V-V)h4 z>K`JzM7_;2iCgc8Op59zvQt!dk)5M@i0l&eF3V1QUN4bJQN2ZWih56E=cqm+yF~S4 z*_qGlFET0WeUY7_J`mYCYJkWtQ3F|a;qwNGOp5wQWT&XXB0EQYEV4^fS5SPkC)b^# z`f}Yl>O-!({2Pc270q9d8WtckJV0hdfXv7MnNa~UqXR_71c;0c5E&mJG9f@@Vt~k` z0FlW7B2xoIrUi&h4-lCVATl#R)%A= zivW?i0V4APMCJ#GEC>);6d>|t;45DR$Se+!`8q)6n*f<50WwPiM3x1JtOyWU86dJM zKxB1*$eI9=bpayl14K3ih$j$(fT>&Dy17Fz_AhS0>W?z8J{s5U@0%U#-5IGPaaxg&T zP=Ltc0FfgBA{zyfErQ4n@s!{GO+=0bh#U_PIT0XoGC<^1fXJBuk+T6J=K@5|2Z&q< z5V;f}aydZcN`T1K0Fi3}A~ym=ZU%_l3J|#+_{yET$T)Bp83*qoKA;ckL;A2jqL1oh`nW!!PwG?pv_7NH>T~+MzMwDaOOYb}Z}j12+{}Mqod4Z? zT~${FrK{`epmj6d94y^Rw}z1Js5?SfC+Q@J(w%i@W&&^MH^9|hbyx88JNjLS=+SyK zB-e}eCP)z}94RcT4DsMt8LY>w)O~Y|C(-w1PusR_+dXaDwr$&~QaSaKs&{ctj2byjW6JP^m1$#xHkZ$In|PXuD<08xPje)1 z1OC#AK(Igt2`9<6ulZs34JJv&=KZ=sN!+i{aq5YERos+tr{O3Fr5L0YiY7LrpQ*EM24MUm zePdBVIr&AFe>R^Pdey6^&0aZrwH&ARkM3SYJO3z$K9`yKROOFokms z4=71mqrP|S--f#X${#iI1B#*_SKn~DMHrSR|2cIF)h_+TH#Kg5W95sj4H3O1^BJz+w|)Un?NibKpELv$k5jF~Ug^`) zfVeOO8T}ENC$R~-0YI$53OK2}LivSN*TJ<6!mo`pnQ>eOcGn?14Km!)h-ZU1Aj0<> zasrD3Fh}!H9FXPuEjdBV0l4BtFb+uc{ibce>Hut=a2y8|yMEiYLHO9p)XM5yRo5lw zb5B+EWo3r)w{y|QM5}!4$~0AyWeqk(Syh&0on{3(Rhnh3X2sg_mdYG2)n;|PC2Omo zjRLnyU8~lOqNhqmJavjC$*XeZ^Cq`tELXK0<&$Nw zAJH$Rv}H6`RbA!PWjI&mpT)n72QT>L&eYV>R4u%5S{Jv_>|*;_Ra2zD0OvxotL>p^PjHdo74xOzUvP5v`X>FE@}>8k&v8NUi2j-MrD?ys`OmFe_-3i|pIx{3 z&GP#{zt8BeWopZmdw-OzxAhGx+r}1co~oP`dh6Ea(GBaX#wYDwjb5!@O^B-C6{3qe z*CB2zyv8_fimId)s*5Jq5pL_8#u;sls^}H6iw4)>4lCWp8f}iMtQES87T3|ZwfbW! z<&|WXqv^%cpb87>jET~y3aiQta~W6V!6nva8QX`d3gcXs*{qJzT+jX`4u;G$8IZ-f zE*tEOk_G7fgl_r+j%%{>|&uJId+APw=aTj*oDV$^32lTX>W7~(g zGqa8?{L(Vd)ql+0)83`=XVz~SU&p==fmjCotRT~b4+&T{{OrP03M^Bw93)c`EE6&8 z##0(BGcg<}Qz9(mGVIDz6lN{2OH)jF8MD(EW;Ge+$5~)z1>c?f$25&=KDIqf(o;%} zQ?wj3Q&No+RqWPNT8%SR95_?0$2^VmHq5(O1XE@YMe9a>%mP`}W?AcYZs|E@Y3sI6 z>D^{|>-K(3y_vgHzntfAnZu`%oR@G}MyH{i7qXelrm>t?vRO{1Rh_4GI5?(cohP^0 z-3JiGSe9j27N=oZ7N?jorbL~`b=cLjIkGu&TC@E*b#q#C+_UZE+{?lj7d=`+(SDTbdPG> zR@^c)yE(zYhA z(Vi>4r@OCr9PB$g^*C7#0!b#hGIPuBtnSi z6VfFbBy31MNkvIbNmWT*N$C^GkqIPmBrzlj#t}Vf6PXgJ61ft|64?^z68V_9naP>i zndzDNnTeR0n5me#n8}#gnCY1Ln1!$TC!?yWV%(Gu(8LuqZ?en(I{58Y<^eu>bXQjy z2IRICdSN@s!mpR{Tp-p)v1%bMSA!o7IP=9%ksK75--*Vx!^!ON61rSf?pK()6&QjJ z5{cxrhO3bw8|*4=M%@_uUsX4g1 zy7sDZ@4#u>xw7kWzjm{$4q$YS_$Dp+ zS1VERL8D~#9pzN5?XhgUU(!CgDd&em%z!DC>A#~i3Fx-(+t|8 z%XB1QuBVg&T0&h8ov&)Dibbm`ybQGYy7r1GG(&8Tgn3fsoLXCUiFH2utq|wSIQaFQ zqyKHrT$LyMZME|ue>|nJIMu{hJte>i@|y8rIg_zWnzg(?^{?P?+$)>p^U{NZgZ(>N zv;M+A0pU9vPTUFqg9KzJPxniIGVHkl?_?M$yZ2@`N}lQcwtZCh81N96ImKH8)^z~h z7>AMW7=tpyl#4a$`m}MfuB`v`dH=jsvB8(l(T&NFfpJ0htmHw}t)geeFe801>}}cY zqUXgB{G6UPKY3{S)Zn4nZKLPL5T3R;d35Aw(sK2A>Laaq_~$*X;rdeGL^rAwQ|hVg zvU5iF#_kVp*Ik092hRy0=i1J_w)6YhN2Y?Z`S4Kro0Vqw%~`LMQ%d;mTglCjki)z6 z3!=f!F;3wbyuE!rKMqm4}jt7^YE5Vd>#cpif57 z09^p!A89&Fxgl2oF@U&@Ux!x*m*eGm_IC3&2|#hz>9FpgxrJGSSQC&nkTRI^6M<}Y zVEZ7_q0oWg2)_us*pCOi0p8lkKAhU9zEJJ(>|%KeJvQQba>(VBw~kodwE*~Ku}LAl zoH;o&9zhS67QEx0ZdiKzyxwT`ofE!_SgnEYsaBV<&wk3=#2~~)OO>6ot+zHVaa)d- z0dzrpFgKgQ3cy0Yp2udgOA!h3CWdQI7-`a}7k0IfZRh~i-8vs-HunbjPnjR5-_S-( zv?Hrk5olcPD#Miq07zUS`Sq&s5x1_Km7fh|E6ZB^I@Xnpn;B1Z&hm_zd8_jp*OiW& z9Z!7D>WukGE6f^{TcPfpAFlsEo+FLj;8h!l`#$|vthWQh_2B0V%vV$|;1_R1_$?!T ze~|}l`~eiNrRC&8+9R5;s{Z2YBb=}D?n3Khj=y={aHWQn8aC}~ix6{r7TTz&FgHCq zNm?-5G|ZQ?C0JVs)-v)GinOC+J}U;s#NgtdpejA6YrDuGj6&Y4p)h^@T#U4n#V{FI z7rf*jTjR{RBH@F^gy!;G*|kFJ%F7+$>#Vez4_HpCKMhxtIx8HBPU? zS7hhR;72$=@j#?2ySwfN%4Car391PQ|E8ZoL?MbNm@NPreX#vArs%_fdMwdH5amEC z03^zlOAutlJIW0_%vDMdjEuV~|64Nds%%XS;UZDrrJ`!1jvfntuB456M%*X1sdC&I zTbi{&v&-x*UV!KSrpMl;zCQNnP6qlT*e%898-~tGSQ2u>^yp5)fu@~k1(g_Yilde5bC(Us8g9j)taIjL8BMK>PeKnm&2q*%HM+jIv z<#9J$ACihreGA2!NH#_`Mu3Oe7re;Br8VQGPXr70!X2&+k%?=MOR6AJZe&j2!VK35 zHLE%NJj4c*HYTV&6HhuEAJ;QOKtc9}`+!FMYnstREobmIboB7Oe)Lf<(j>!=p-nQN zOfsBI`GKoBxCubea1HJTsbXY(Zu_zHfiZc3)Y}91r#R<#$})3Ao>L1p<61l1?&vW>>pr z36Q^TA<7T@5xCdN@`JWIemN3afcT@kZPTQp{eADD>+jH zO;y{m4v5pUnrFu~4pB7oSn3#X3>*{S>O;oT>Wjz3G^9+7eS}Ox!q#C~n)-EcV+%8^DR(9&U46}P`TYUuLs|_K4RMh= z90Nf*93!Lcc0p678m$959D~F<9HWIgt$ht&4-^`47wWf`HJi-lidCv)H9Q8UHTr|p zI_^VOI`ISMZTP{eI5qa+ zgF3rV;(4Bk>zv=O{860QqC);~yUT%OefsGBIr@~%u;i|%7Z&@w_gB=nNq#fiF z_^9H1`DosifYJMvE@e~dxK|8WvFp`r9np)}qLAK1OhB^f8i@R;?@hBw8j$?R8=%D9 z_1T9RMA%2#iL(H_3Db@}W9Wc?JtlZ8FNw`QGKYx{KdlIZ86rE-=IB2-iT>cErr$8K zE|S{sXw-XW)DC6T9%er+F7kf5xed6FHAE=YEZY8u#Dq zc$yOd3A{d@@O0Agn~Nf>Gta_2RrW8?9Caxw87l>1fI3eHN1Uz*YNhiZKP`n z_kzx`&xOwk-AlhKzXN*5w2sa#zH9zxjAxGLeD5{Bb9{ICjYtLB^Lxu@w-qnY$ z2ywlpw9(0nqlbHMur5%Bd74wcYqWc4Z_%zoJ*L_=^#Pi*lppbTDR0v*ite(m20gCY zu4h(HRH8x+DLJZBYTcrXTrs%q%epkGm#sFrQ#UVf-+@@Z-YKLeYe#r&6cT&SJR?f>!=LLt9pP&X7*8jpSxZ zz8M0^4g#jf3UTHiJO$XZZ|;LE0|b>Y{^dj;1*Ny)S_1@DF#aBDFT!{Lgjpzm54{&* zT>!%4*5(wh-mOtO9V=4HZA)F~b#mhRKxfs7QTewz?OUzpt$G9uahs2RreR@@ge2k zyrR*e!bbAQ-eS>w#zVQ|L%H=vvxi2rs7ABNMzbnLvr9&^ob~3|_2xfRP;A9;UN;*q z`ZtkW_KZfKObmX|`(>1Vl|%Bbx0B(Nm<=Te3E$uTtHt-(5SCwnLc}(I>>XC^3!-d{hFED-h8NjD7;_ zik4o9KlEFbB5)O0&G~9eaT|-)OOYLOSxd2A3ijvHpO!#y#r>=yVe^pKqQ(}uviXv% zp{4V%KVfc5cwfN>i(hnwwWrovQZyE5)dj9ifjvdC|3E$^1m@K?Kj~RYb<#^A&eAwqMwm*j; z=nL}|VDGdp0B$NKkWP2Je(C-5uNOj78-9s#>Z%Q^EXh@8C{I&iiBrYnJnz2RRrgl8 zyD8b$f1yT5HS(wb%4vO%_RqUcDA^J&3G&Cd2~;|m9qui1_czr2k_7nN{x-}Zpk?5# zbolbfXOu!n4O9ABvwKpo950y`pu)pf-P%MzpV2}{WkpDtLP-7H+xeM7^U=+JFTWy= z_~iISJKWxb+<3`-PoKKG+qd5vTOt4(WXSuT0m@>8Ef0gBtwdtPxjUyqY`Ne~y8nG$nCpxCe z`>lqAMz=e1$kh_1`h|0@RH?EhSN-vvJN&n4ORkLBk*9G#BWt44$$_VAV)$z7K3ddM z1>f#O)w4ZE{^-EX@2I!drU`rcipdJLb+od63%`tJ;yr{Wct!Q{@Jn0Uc4am0*?(}d z#y}m^R=okoxifM*bJO;6^~1e=Q@8CiY&&|h`)X&)Z&vTR*MC#5|0=~WZpv`DQ37oS z{}I|iWs}m(OYw@Bpx)ljqKOHyOrySXk&%r5d2t;te?a2CL|!rt(O z(?pTq@2%-l6eb-vMru)F-BPpFilsNP1GQ>4m>qA1M_~tP%UN?Qs@Ea8YBoahuD(HP z<(!;V0ngGY=UJDd3u#%oTi+%^hkEk!`~0pFQ%Qelit`$`4l^d3Z*I*-SLn3KOsCda z)klW*hojAWN?jM@uJrA9iK&d+pYV7N<){AqxxOB!BH&%xzd-NO1@3^*P)1i zKk&GEx=Lc^U#6;1eUGb7+L0Oi!>!b1A!KAEBs35Dr7qxFY#?ORKZ+7O{SCu+9+`0y z4rV*Y$5nOfC;liBl3_I-1s^V*Tbs*%@&d4DmEq*KJPxp7(C_AJ+Bg(#9hIBV=&-Jq zETVw3QMpYam}K{U_;)#jbAHL~Z#3n71|D~_Y_yZ9zGIbWs{N+)Ug&r`Z}>Ou$ePJY zo@JI#7ckkR!0q$85sq4g`ySF-WqIcDL(&`VH{;GPJpGh7q9;F)IcJf^5dz| zRY#YL+;c&z!0wXm=D(LXhLpFbtVY0i2Fh`$mwkF#z4ZOgdy3g;-j=bLP<#axA30Oz z+59;Zb;0QEH4}r~wL_`vsH3J;caqUH3&GB-ozdvG=lkOagOAQTJFeG~F8|)ZZQDRu z&rlUl2WjW6Qc=*sX!~wTi@-ULgK*?v#!O!IyWB?WY-f|Nvlr7$=gM&Qpn z`}sWUAhoJQt+I7GbX!*nB_EOx;yn@u4zKO_6td6 z#9tv$uQcK@<+W7S%X<)B`RSV)^Us4Gl$c)v6cEWE5Hv~jJr5(~7CEISvX$EeNveWd zfU9)AX_s;~f zoUoe8c72a>$dJKr=tn%Um2D{#c7IYg3#tpYq=?_~si)j;UKkwAH_TFdZ;MWvfN)An zU^fGXUMbulFeV*}_WfdF*B0&CUAlII|b7{EA7bRP_(=ryhM(7WtM(Bm!BumgzN zF{~8SRj26MxpUwlcBtblo7HAx7zIwi+G%z@)S6}nB(FLwM+*?SYAJosb7SmOSWDDd zPsN0%%8%5kt3Ut*Ku>g(5rJ60ysWgG1cQHDl$U>TDAb!zio4yfAj1ACAG7cKq61^` zAV@DV_AeuVbZ;e>y8VGX9G&DWip}M!hCJ-5GK+nVZg*36Fq|CzJW2s{V$tBeWww^lx=Vw~s1p z#+J;uZ}7)(V!!=~{o9rtt{`c-uJd2jdmpzNk;8}6DQWc%>67!Gm|&~DNdib~S{vp+ zT;qS!nzzYj{v;!hTBPT$b?{chEIPSUmlG|M_HCw?Yd{L#W5$8aZ&62I=AXs&`B$zH5KQYyae zdMXs`pYRIEq8#gYsar7;wZ24U%pe6|FGgf(%rKn8EP-(qf@k#2EF}8TJ71W_!{|&uNucHjK8t6V*R)} zqcioWA9H*riiZ#yC_Y?S=Xs>--j`)uS=$iQu7Crx{^}0DCS`_mKJ=2r48LBS>%gn^ zRKLMp{O#f72<`f;s4I}QJ}f_lQt+bF?)I^?DfxbhNR8~&sGd{Z+H{4g{Jc(v%(FI?aK z2rpl-&UUho5d^t6rP0;6BLcGvoy4Ul?S@T!PJU>ok-4N3=24Y%VmTN}Ep;g!p@NXV zdef_jPIm8LbXK*fi`pZnGf6p}J2-=C5vy@+_QR?fm;NG9#J7*}mBL04c>BCL>-U{o z9YaPzVW&$7r1rxW zDw1lH>eG}BgCDP)nlkL+J?3#;RR9ZqK^5)nzP&K9-&GIagV_~d6-UN3XEH|JXK<2w z=o>+u4@-G924vc_vz{l3F``^Hx)JSx93m7;aRIjgR1SpO0OoPOW!Y4>;ah zye*)+B!{7!y%kMZEm^laZIAg4mMNS-5uvkz|z3-z$s6!^itq0#Qe z{kC_-=h$gk1Voq*4Wy!n-_qS3Xcx_BAPqWT|0V9j0~GP8Ncr0BqT@&(w-eNnDj`^0 zQo)Qmr<$0m9z-K`VR1oqr6Vys^Ua|@urR+li+1o5ACOrcW}pQDd?RvJd6L30i(?)U zNBr?}rZ=E43Y?3FJyz8I^3=Q`mcvQpZcNPyy26%^9<8ABwpI(g`%Fw_1oAZ!dODr- zQ}D^FCaRNKRAw`E_mIHRqDvZE6!ff41_5h(kMeAFk#h#i=a5`Yu^>}o?Q6p3rU$~h z&STU&f@SYQqVw4O_xSSV)eF1P>SG;igz9shIDS~~#9<@;eIsby+K2o!W_2FtK{G<- zh{3t4`sw4;`17AyLN~RT7>fA0$(09kA|ZEhi!;(cVk#F+#B$?HQ)NH8g6!hxyo3&k zst?^_qk8Lt18kiWdh;Y`qiiy}ND8xs37y|$cv@XJ3cCTQ`=4@RgIZ29m%-9#!xTk# ze`+KjZ`Oiy*q0^R5g3@G$|x~mII78gFhjSzMq!t1|V>&(r`KV~7N-Z7xRK^1BQ zkz8Wly~H~H%}g#m_XQ6KBS=`_>G;tn4`nO)Y}_XwZuk_TRT92{cyoY^W{xZU)BCe( za_9$T(t`@j9wV#DTTf_|U?GZDn~-;$-&8p_QJ`E=<#z?OILHD(p8WYHLg8!9hgWoU%CCFXXf(Oaoe zp>0BE(0s5jr*G-uE!Wo0D@D2-dTf$G6y7bZIEFkRPgbp9i^55VcGiE60>Q>$@I|0R z=LowngCndbULh*(t0z3kCSZEB&aAC<0p4@?Ay*_C+h?%o`2wEt-=C%tt&L4ovt7cf zS&;*AoeX;aF*;F+U?=t`&KC zrEJoHnmDT~@&loYO(pS_;m0aLbB#&ARHY^~oePv*#B$DpN0WE>4(32YMLwh;etUrZ z%(Lj#C_n4L54bK_JFocNdHSl%>GaJN5R5!ECXdhn`WiGxi1%mZxq4myts@VJdOZYf zLxi!`PoHQAMEeRXiDL?N7avaRL*AcjeDwX{ zg^sW`Sz|eOJZ#;iH3l=!in}C}~Psw<#%yVVWG3xo>QURuuc=fmLhzv9BC|N)RCV+ zgGFap)riQXdeS$S;%f#fOIfvPm(QVR<7IfLMrtATWiKcnTe+(~7PMPsOwh1@(Gv+* zMkEFSL&m>`>aM$Y@3*pCSKSH*9LzqZ<_9b&2)2B8ccFplV_pe*7&bQJ1divSAgjGV$y#gNrlAP>b2FlafJimq*pR5=JhiG!?;8?M zS;utmFfu9k$~l@P2ikcVT+SXuOQ6C`t))(S+e{U^w@$C`NW@qGA4k;jt<5mj(hal( z2vKnS-8Qzo04X`f1ntV7PsG1UVwVk*RbQBO5`Aw2FA{dw53G=I_dy;8v?E-{DkUE% zM#sVsk}DL&A8N?yXbDw$f6CBpLt{xQ&MAm96XPAEu|-Hk`km`x`FM}$jMp1l)z0jO zJ_G1)l175Xf#;hv`T}o3N1XN9L3<8WmlxYj6@a+QJy?31K8QgRSpc(>ZSY5n&1e5u zRj6;iy^!aX{JK}(=%2tu&ozt9z?IT^TfOL0h8#XM=z{>mjf8#ce64L?w58a zxvpDRgMW9=^GHcuvuxaMcCn;kK?}BSFeeDx2eXvAX-bu*d*tXQ$*Q;AZBCeVk%;4Y;R)9AY*E0?qWg6%*n#f4+s4} zZ}-U7ou7^xBt!(->y!u7ds8y?UI{_kETTKD5wLGVNVp`Tv5UoU9bT!AE`*|?@|%f` zFjZzb7ZsPxhi7=gq{1sfflPK`!#9O1QX{ialeW48#>?cA#?V?fe^O#gj7bf}^JOsf zD>g3A#K-u#694Q#F)PG6-Yd0F+?L-U$Q4qVl~h&w_UOH?{%LdkimkKRg~Uj6+w9Ej zjoB;>BtPY39W?(Hea)FJ7yDc4SWR^DuQu8*vajI-Z%u*Qn;8SI^93wvjiVIP^2-?N zxN_d-D9s>hBNZPg==yzZl_Gf2IWX5M#c^9%%oLD449dS{81ShF5DZJQ-*t`ohX8jYhz!7Ie*xPAy$qz0smy`*3`K1ow8h2nfy^y)`x2 z7wg@M3Fw(QZo}}Vu^lH-y9vnC&nC}S{{}@mvy|f(t1kwj)cTd)s`~|j^))!92hwjg z)12vxFj7Xqiv;e{84RTuudz|SLlD->*EHzPc#8}WCR z&9)kfRer!X`I7&hd1JxN{VI+}h6OV34L_ps)^*d?bUWh%vTgw>UVUC?Z;KU2R;uUQ zKrrg9o^?Dk*0uv$Q-ML$1-NQqG85cOh6r`%s09<7;jD|+DL?+HS6>Gi`fXY@_( zfbv@eb_TDB4P&=7MG;4E=9n}HIG!i`%YnBbG_stC?3>3ZnhXY z{Za2vwciYrcmyS_vFe1Dzz=wiLSTTgza^!57q^bW9E zyt&6b)PiQe&$ZeLlZpuacl+3d{D8Zi>D>zdh1?6J{pAle@S5=K@Sm&yW6uA1{FntJ zBCROsg??u`W*pXsV_qXagDamml7i5j16HdG1o0{$=wbxg96mHquqp##QrRF&@gkRM z-#Y>7XE1=?g6@OLM$Svk|Gdhai;yIeMlLqrVwwyI9bnUePMfg>&<9gqgGj#LMf!J# zdGh~jwd4JG?8Ccw&bwXOg>R-f^zIpf9hYNoJZPd%ek@?kVsd!)TLk~w402F9s`PJY z{jSV0uh8!_d$jzk*3zn()=ID4VRA=B7oCa0&c?p9x=df5VPBEU;XZSzsmfxmBFDgl zfgw9RJXNBG}~+ly&?>BxvtD#yBlVOH_!ZFG61 zKu?_h<)6yP(bXn{>1z}#t@2XSLUMD&lfLYI;`$lVx4a6r$fB)@65I40Eo&=`Ph+JH zQK?C%k{EcFjEps*D(UkIv`?LIjgwmaT^5~H#pusiizOHt7~J!HVoXJA#)|%A|H^T` z0oj~UNhm+7?J6YvWN!8<{jrKh*Vi;!+rNL=%*kNww3+y~zi2Y>>1a?&}W_LXZp~^0AF*2+!K0?Vat320- zfU@;-jTs{c^FXlevETPRV(E$_CzyQTX~#=B0pzp@Wxs5NVI2K3GNw|c#pvcDvA&N> zY?Cnx7BPXOB@H|CZVbrY2gvT!)Ec;SnCH6&lgCplYe@bz_E3!Xwky-p3*ATyaJ>W{ z73z;&oi;r)Zr~1x z)<)UxI%uoA{S^amjB!0{S3jM8*4k9`z9DNH=hh-c9xUK50G~z`OW8coo}<8{lQFH6 zP=vbaQ8YKB27_kA$1lU?T-O&cNoKkpwK9dY$w?CO7eHBnP3x*7kdEYp&e}j6$fi4I zF=aDbe5)?Q9A=Yv@{*GD#++|7K#qN4EnBoPmG4tOqsTMfcfg$z4h#F}=EUQ996i^! zCN!Sf$fQGhxHm3}7r!k*-4Z2PNRS#~OCDaa9pXLKP#ilQ`>Lh2d#tAXu#jTAU={8* z{!<^N!k^^iH#W5I5T+mCUDq>*si#J@OL#=l5KDo|5gI*gSW?mMn(k@`?FvbpOPKAV zVwZH4m{E`B!FqA$#iUds<}yi zAjYmj%j!HmX&n`PdtHIW>)`jQ;e$<>GiF zFEBe;`at26Iv&fm!H{QEyK;6$rzSM8l@d;DSbF2+0UA-}ITjv((&Go%-u|--Pw{zv(NpNaQf;hGmNpqC=Anp@laI_8ZYTIHaBXkIB z3JR(wi}vjh(I1DA6&RePEBW_Yf9O2NuQnEt}7pvZh7`%N1Y3r#= zi3w-at1FYP z$V>JuR*J7wyF4TT3Oo`&v5y4XC?vt3d*1;9Cm9zvk- zpbfPN)rx3Gz9rI@(9sj?7U4hy03L9M+9k>+U{oWVA+aIPmgWqvi*#TI&<=zAXh=WoQ#%m3Go<( zHpFUxcR*(Vcfe+VR!Ehw0-7m_F<3z|U9Oxk8D#=;5wZjsl>U#&hz=Chbcm4k&3VRDZ_UUDOC2(TS6iiHU;$$VreCBgcfG3NaH!{*jO%99o2Q zWF0_N8bLOK1P{tZl$}Fr0)-QlRZz^63JOYA1mzMGLxkiFBnbeem%yaJCG(Nw6ylV5 zfdR~hFccfM3rMo;^HUs|hsZ_C%FiF8S>5lCnRy!a9ppx=Q5TnDTJL%4_j28MVI(S+6O;_OM66e zzr+3HnEtdC9XWE}JS#mhHU=^qm>~vH zo03dz$TY+-5J%gH8?gNiBn*gsIbj{t2<_N5M#NS`M?pe6wEa$%C%j5eepRm71{6;T z{j@tp7vmAXD=Mt`{0~@Df{DRQG^}6ANT>o6a>;r5Tft5o6Y$9dMO&dx6cc!qtwkS@ zN9@T2g&#miYROlWt@&G3*W+#YN8HKQiZz1m*hkdKG>SF9+i{QHDbp&vnCV5=!y3>` zVJ3XgzRCPC)qaEfgRX;MZM6qdU2^84M3`z%ir<18t*zW6&XBf2(F+L_#Lr1{20L&Y z{)i6s^)W^(h^9-X3zn10P^chIK$-ri9hUv9&JYbD*#6&hD1}fRK=c!oWn>nRRzXqu zq?EwiElY~2s$&R>BMSV#JqeEDDIpxW{NwMzCoU*!3%a82p(kz}H1)(@=_Z6J1w_}Q z?+GVBC^-O1TM^6?w&e2mutRlp0wOc(zcERxC}0uM5v|4$9-z>L*bMOv>1DZc5yjI7 z>ckO2`3=U~u80D|w<+TbAc6nTnImagE~h1!N<&FQMnjb$YC%RrPKShskPDF%1S-gv zlPn=OKxUY9NsJK|qbxvHfRYe}{*jR=v?NDHrsW`vFZ79Y0zG1!(02&@j=2Y$$W!1K ze}z3#)>)QU;1~16IKoR7$jANdiE~7k%;D&oC+LZNM3t;x_yK%$LMdO!8+gw-VN4lc z7*n_vPvb{0(M{Q@=vJ`RrfMr}bi-Y^_}scc){~V-+4wbwjKpj_0Go zLB8u?oZw%xKZ`Z?xOMadoQ${Y0f-!RKKa&t91cf)(d7zT>~-FI^}h^R+h&n@7@gfd zj{_&cUpQ$`3%H7Ps+i?N!}C5f!Z&XKFG>ilLyG`F{R+MO(~_5( zcLxPg$<7|tqXzFlMlAhb@9@cvwIipTi;m&PI%&U}3nh$R6y>hrl7;1Gjwen3-O+wM zen{|SUmr%oa$SV`gT8+8k2bQgoIrR^ydSQY+Qz3#4f88@cTGH=jw(0jvSqXDx*E3H zmYVhY4X;ek64&LplodDUtVflq-hr+ytL^%&4J$n>-4^2t*ZNn~3#xK^CJt?kD~lF- zRt~K!H&(4QRwuY)FY6qIj6i!tiBSUgx8r}pXUwwVnLM%XWmob%$>eRy2qpI?*j&C7 z?Nn){kX}Bw|0HH4dRSjm4|B$yx|0!`uGgmPyLil;VfC?%BR%=e{9|B^T1Ic*q#s*P z-OodZ-6l;v(>eLDPeo*&phZJw{O5G0ts59&v@%~h*iH9e(;BjYxdi>%RV z)u7O+JfP)v*6bEd%Td>_)~(Y0i)J_Pgl=o+_bGm!pV?Yozel2~FbtuJ3zY&-E-)@qU*SVIrIFXxLLi4GJ@!sFzq`CCfz4p$1M)%=I7s2tH!9_$*GCv`Fc_dR&Qs?G^xg-o;!VajS)EYnqf78T zf7{IRDi3a^O{MP zk)6}6(C#DZZvM`^h}GcF2KGytf_DTC4F2(7O@58>`wvlCx@OMeHcy|E7rN1mgVZl( z0}$ALF-{ovel7=k9|-!8=slws{I`7_8GT@F0~(uPX#n#JzYe^5Uy1{o4%}*Avjd(E z0!Kc9eNYx4RRL>qH|EZ&B01#)$S%Bd&+ZTb!2W`?^~>GpYxMN96F^Z;0(W#HIPKPk z*4$c@x@^>ugZaq_{A&%Y({Y-TU?z5ezYXD9{JMYH2k~h@9zdis>f6>3FTq_3b<*2I z&PNbBy65NtoEwri$lzek3no9va!bqmET6*5UtrjN0#LsNzHY_QZLyD07y`# zVYM48%g~ynm4s@1?VL?gfyT$RNY54_cbTebzS9G52R_ZXl3Il75&61nNH50A-X!m< z^||vuz0XE?$1rO5GGiF>VQN8-4|5`$WyK8vOVKTRS$Y_%hu&|mMc%d*UNLv5vn(GKJIME1yKBF)+Vj{R0Qvg7gRGCEJTAl5s;Fb&U5o<4!;^ z1yZ?7Q$)fDmF~XlsiPMHk z9K^af7Ta9tgC`Fg$WzGVlOr^Y_8Z!>6*PmEm^}+^!B-@*RXFl!j==9U$1>WHW#kX2 z+s?LNYoOVN(-{UoXlZFuG(e>DQM>?kAADbymjdwiDM(Mcb_aR@)h;G5h2LmReN=Tm z45w{bw^}*Fe9fILYMNCZkd3?%Tgv$&&)X&$#0Rco#?6*qOX!A{GRn>vQGC zv8g!R8EcnLNtdOSm(NqvQu{P_w;aB$jEtlzrE%dhSZqttYRMsK<#Hq!RRvd7ZFW)P zUE}x49-y3M-raf6{c^CZdAe{uC6zoixqMnulB&pO_4?9Ms~Q{SS=jAp!K9k}Ot1!% z)&L%V!>wXeuEcc>hS(qLy@>A%I$ABKbEF@I$x>^ z^GN+Ftcy3DZDLgumPv^C*^)Sov$A@xr)rOS?WTpgI!;?f(J)t^ae_=U=Dm^AP6@oVlsVotCCrDy=PR+b(kTFjg5ER$FS*;Blz4c<_y;N_vKOU!iS+pc2%7 zBke7q+WNM2@fy%Vfl}NHl;SSIX^RzicXuliEI^^SmEr^`P&8O@cS3P@CwOoP4v*hC zSI+T65ML6_>wJJfGu%XqFi?dNHGp2SJ9(bU_~) z4xvSF7rv_xgj_q$l33SPKxhHL>$4I3PJ(oB_x6D}>Hb`!)XTc>Cl!6f9oKao z0c*F(#JZZ?uQPN6fL0ePg&dxzvXK3VKFm}i`FMe9-zeLf)1v5XHi6C30y&3*j3tMm zP+oex;O*d99)9`esC*A_B@;#w#+pi{N{;GRT&{|7xgFJ$62c6mjGepZrkt!fite<9 z-gN#kmm}*^jb_l4x@oc3j~?s|r4DcAU51qN)FPoA=7uL*t>FDHXZmpx3038v=Q8n= z=k3EBV%bcjc-L`+YO7ML8Pp!^DB~1w%_tLT-z(U;QUQ{Dr09%-kE#S1MD^2Biwhe! zs}4%`Rr>|m4CkAiu^Lgo9+B|rS(l|vDG^bE4RvEVOPW*$#SBeRzpti~Wa+V*M6Cm5R!HR8wdytywiTU>79FDdt(dIHIaP&XN@ zbym4+TyfIuD#GI0% zcNA0mB5#SBKr8))P``xO&H0#1ShFSIc-1PCzO11oT%TScC-Jt2} z(z%JBJRH^s+qXgEh=IxGkzmL*`VGPc0;#Gex4DHQObv^4YQ&>>v71d;; zSF^GAc{;PK<(h2`=KG;5@{k%(gpppm&z&X#P$mPPwlLJI$5iif&SlZUW@^74&z zs-cx2Vh%2ow`VSO{ClTAWA)=)um%8qr-UDfW^`Y_HyIQRoxJQsDl(6M$z<;GJGJUrV8zJvxt6n!M&HO;qhrBXnp3`|Qx~4s>DS;% z{9t7+QzD~k1=X;SACBlxnXjlacTkv3jYuS9uECR6?tAemOTFkTBvrPuPh9MvsauwC zxPN1e@JgX~obE$6Az^OH8h-B%!zhEQ>KI1%L@{-LpG`k;1bP+p*bC$%na#nZfRl+w znQju^Pya@hD}s5yPDX5xgO<89JnGkNu4*N9@jv_ zZdkfZaL1nT?m|s;7QFvm(ItT^x*49KLAPaTwn_IG2D;DXCCbT@JZ@9@4dwSxv*+qK ztSRo@D%1S2DpF-fE#xuez2?4CkB)FWl?`%V4`K2Z|en+R4{&(Gf(mIbX~gD<{Cp5 z=BQtm#*8{S1I+Q?GvbAzY==-~MfgdGJf>R}qC_G2vz~L%pG4|H`kK$?oXec=K-QGI zoO}P3)OQ}w&!uOh?=$?=@G}!kxVu+LC$!#&OGuu3lrav)n+$|&uCWcu@%yEgv)n!f zdlP}Edkono;HNRu-92!MrmI$(uj$K5J_2taM*qazn<{H5D1W%0?iqrwwYQ4)dDBY{ z-ow`JVu`|HFKcr?-vi)#jtp2*ChsNxk9J=szSH`_c==uZvrHX&l&3%ISjZ@Ec|=qL z4%fJZJ$`_I?`1I{zqGZ2a<|}Iw0z%(&sI=D^@gomPmc{cN>$31CD?; z?$U~%NH}!*pxoFpSx-8amjq;g1dVZid8_i-nm=zVXiPcT07r&trF?`^hAHbK-y0do z$N2N_V>Z4wU0NhsRE>P`Q=h->MJeg@7&2)FkByE%W<-t$i_K;1=?A}k=4XrF{FK+g zb4yDAa? zv;M!oSVp0aUu|IuN*M!Y z3bbQUIDI3`CG{!L^=H7Y%gx8+QIIILxB3=p(&?qJXZ+G7F!^LvEBkD)Bt7|{ zyCK``^hwP@$BA!M@cA10`EDl(D2qcI6K8AtC(JCzBe$Mg+GSr76AXW{ORj;9Z3>d%x;m&gKcB^Bv( z(5?qZEyqM7w&f?LDqoWXyD4r)pVYzV}h2K&-_|g4V~z#=#h*(;gI5J4uLJ zCnyGvd=3_h8SksV2%k2{)ctdEU&azQn{adZ!=&2))x4E*Zh*lJ(;n@ zTV!hI=e6UH;_MocNQX0rSFleEskttGO&b=47b3;*&O6wiA>CkGl<@1U#1fmwo^wx) zKIAF31fZ9+5#!!f%kqvZQ2ccNrCBjTm(Ek>3Q)3DPJJ$zk7b?2pUd$_EL~;3{9<>+ zFXAZicTI*gtt+hYeI}V;ZQz)e`;K0wonBvMgZqNS^Pkv_ABH|9sSP=hq<-=^Y|KqT zhPaEKZ~VyE=xa90+KJ>tmYIhR_wkeXr_V2&);L3^SG5nfIoZn31q6i^MtAV-O)??0v zHNIt`8$%Az`Khfv^0#Q|Efk}IBRdGUP>Sh~eo2*n>6)&_>X|v%x=3J{ds6=L>TzoK zhs>G%@+(v!tg>zA883-^?4EM(2yw?uOqTNbg=7o)Yg8|g0>FJ%bY$zuNWQF-&TR#M zk%Dk;Z~(UC?X4eZf=$9IaI?VMsOXA}5aGqHdJPV39`YsYpJZ_tn3g6V|0vRfO3CY< zvC1BiWxeUyEu#DI!-}%4H*T?of^3GVXIgz~iDyZfo#1Qyrmu5T2i(;P~fF%k$W$D|`x zJ}ScfdC9EPoJJN14;Jiz=Lwg=3#D!p;6}@Wt^oK?BHb`L97196~h^%E#eo*|NQj zFpG+Io1`rDQHl7yYv+=4)4WX~xZf5wO4}NIoytPYJ{gv?LSIRmGjan~VXN^2^GZI15ze>T>*lmRnA{kCeRUT?@{s#RaQWiw{DES{c!`wxp5629*@5U=wsy2zY-q+U=s%UT=*s8ocR&<*ltCh z!-gYyLZQJNQy#F?4lOQXTPjl)jJd)=-RFZQ_IP(0R z>7ZpXHOwm!YGD4owjPfC*bFEFT0z7V0=?##QiAoFGGm(#niTuMbYNN#B3l}orXF(2 zYKs1a2SM&T8!2z@O*GTuT(%nBhWo4}0!R7P7 z55DNd3>`Kl!vkf-1GV`t8+laydP(7@{0aHt5vTjtlrO^LM8odAl4Ky-S}g5d`2@!D zDXL^?<8)T8?4>R_CbdM<63)=s0eTAT;c#JdI4sIN!~~d5n5qt)zj*I^qWgWb96f}E zho|~utCCSQI)uepyGO%LkI#I;UR=%3z{v{@E&ybV7I*S;B}hcirfI@k z9q9zt;YsQI$h115%hjwx)a{VB z!Y}HDm#tOO5;xyPM9GHHU(7Ivvk+TA@8@i~X6dZXq+JhCT@?v(`l5WsiGfjSU3UBj+@3G?dOVw}vd39tOzD<_&fm}=CO`ItLm><%NjOj@d1vz% zXfMzvwx&tXYk-T78BnG{DOcus{aJMd5mWm!KdCvih$dqn#?jy3TWb`_OACXav`#vx z?nMW12@c~q3ab9FQBl#&Q?k>$+m!qBax^1*Mw(i=@tRckzHsgOc0l!9vNpX}NJTzR z&DI$qt^$55&GS}TUQ=ZrRS-pRa%*Z!W2h)CR}i@o&Zg-Tdo5v8q$(}XB67H8y3D^ zjI21bYhyQ?1DQ0pF!&7&t^q$*gux9Xd+f2DX9yc3dq6Na75vy1&S51K94VzPY9Eez zrwk>DnT5ftVek?dd=Um82%+@4q{i6M>b0Y>()3^pFLdaJRXj7I;o z;5OP>t-dFmc<{?iIilJZ^;IBDzhVUpUG~G^Ce>QL-QG);|?p5%LujJ+eCO5)TZuf945r0lq~B4s(cSU^3HE2+)I{$$Qob2 zZvN@UQir>i=?|;y)gH^<8W9MMtc6==#6>OG!(C;ZpE|~8tbWV+_pWIluEdAd9VP{m zGO!_G2r~w=V|aLc;8Z?dkr`GCJp0_pv`qA7L<_ZU2QE-p4<9 zhjvl3Sp&J7uKG1Pq*qYgzw=`*%eKe77bzD}1GAcEo#_*Vfpzi(xf<&+AeK{A#hBXQGxvjSZC%!hw>g$~iW+Ve)|TLV-HJ8X zp-#5T>>r0|-dd`~V4m8rUUxS8Pqp4#QS2I|2o<4dU!b9nepG z2Uld^`Wq{U*0v7r*vDAM%VVoZs;czXzQ)3Lqu{MR@iM_i#NELjU?HqvF{F$n)}iVt z4UAZx)S4uPzXI_xO4G9nO)^Y*N_kwe`|$xJAZO}@EYC~>JB zymNOjJ1F#=@;vYq-Z}>Z5lu~=u~+t+z)Vp~-_=|7Q{WIbD^Z=%Z9ojc3qlJvp(^%+ zeK@EMdU0T4pQ)ch)^kzRIJ*j*qd8R$oW+ zvPXU@$lfElAX8H=nt4-*p`VV!ydVkfRNorfsh^oCpw8iRml8{v>?yXod+w4?EIJ5v zGwaq$c|*#?C9fJ<4O9@1J$!g!))|xOB&$84I1^@LCscV-Lp~(aC;$S1)vX)B8pAbA z<5<-thrG(I0DIf(-AahnXWFTqc9=}s_9O!c6z6rF4=XCZ5dLilxTeE5TPU%X(i)$3 z>7g>MS`@Dh-x8A)Y*h5|9=d0*>yCDESJW!&0WFEFhyp2%_G{ly-i1O0jnYhUme+)Jer_9|=C53G7URAK>1VSLwaQNyPdMV@{J zJmshqHqcZ9qbU3Oyo}b251RYwlH{}+BUJLX`7L>;z3d>pCG7rzMh?q?OQhvn!Ia~H z(n*dX1GhXe#v7%tTh?>Rb8c3Cn|lXw1yUft@ta!FoQstMdvcX?rfWKw0gUdt+MRsN z9WZHa!8;vziwfJW8}P97@pYH7ug~A*Ail92$C_&jsj$p5FdEi#S<2APm|>WuS(LAL z63z(i3^kh#eY)Q|L?&ZbvM{191l;6h$ViTDs0j<-;l()*K`iYym~GZi6Ad|zrQ2{c zmJQC0m5QAjc+>Om{uCG9Zh61UWZSQ<2dMjG0bfWXx+9*V`r^MheSKGT8|D* z5A&5(S$XBsrQHwDUC}(;Y_pcqx=sxTQynt1O zyM?&AJb;3H^I4qAnyM+=wa92B?&uphcWx$_5lxfClKO5zt(P1H=Gisp<1ngQCWJ^X z^whW;Flj<02+h7XxL8}@(tqgUTXf32F9tM=0=1$>ghH(D6)d)Gfv#ItW4sfS`cum8Y2hkwT;5Y?Uw2`vvNsym$@bO{=(hi{0S(qEyS zzKAu?pywPoHH*4(%no69&W!{<7D<~F`ZV=2sE0BrtS4|Y?Bw0@AfP{ahSfA&%2m~u z=>xs0XN%%G{kXX02GwXvhUpG}w~%ZidXRGqF2S|MNG%tLYa780Q{BPG$J#K69Xwys z%j`Hu)GdLb*PI$yz*gHX_}ZjY*Zi#BJK2GV4bm>}z^i1R@!OJZ`+J2mo@u8N4UN>+ zt$7F4s>zNHNWbS~iWM){*r!-F&Mr1_QX=}&H-SbZ@MUc5HXlzd=66LwD?w6Jls-P4 z`tO0EJ-?n1h*1eqRdjJ)k~4?UtulC!WPGzUM)Bzb91XAFl@0sjX@@^SIq7<0&Kw!o zXe2c7#xy=Xn}%4CW0~da;6(N$7D<_eX$KYj7P7Gh5V%YPR%iC~?74dIcv?U)PPBJIMTBK6FmWh%k$ zwDWjD(ATNK_A3hCzSzoC|Am$5-N)DE4nd-w(j0A5s;*V~&sD_}2cN4Nvkp9`Wd4@x zFIl60^sMQrV>sEoMMjL+i(M*oOsBUaBfgY!fj7ok+uLtU{5x3$NUBM*O4DHw9X(On zIo0aM!ns8?T|klji%BHkByWlh_;dA!vORF5G1;qr(g#p|VtXax#`UeiGaQE?`Qd{h z4`t3!3$B98m-|IMCP^YU4Y9HxR`Wtk2l(|Yu*{CjQ)0ho@a4~kg}u;PmudOP=2$3z zuBRV&hegtvQ^rp+Wstr;@+UYA_b#j=IQGEgHz5&i49>lS*|jBH{e$Uk0>^zH5q}@v z6)}9BbLcgUxScPK*fN<@jKZi`&piG1yP&9LlY8VAO~qAYioBVKq^^BwqH^}U0~S}M zO=10E92aj%cjW$H0VuB0FcXTu;F+8PkZDo4Yk12Pc@NMRDSKNMO81*FvHj49U+9%$ z`}omoAq*y?S|OG`Bka8(P&sAaDy7qtznwZ6KIY+2nj^NC9m)m4rWJZV7|WjmZ)Ldq zay|#*z6p$TlF!oEQ1*__&{sA>FtU9lf2=t#)7u` zM(yL1mH?T8fU?!hBTTa3av}S|pvR2oN~?V0zp(x~TO%(?-b8G?{<3K&sO>;XtvK%x zvdaEUvOlNhSV+;oSFaWAAVJVh^|#Gwo0>cswV^U)_I&i zcFmTjLHFt79^ta-Hra9l1B+Y0ZBjc0SpH09B?OB)R-#q80aV5u6vKCT+aCoy&& zW}P&;KZs&J^Q^>{X!x4nQ24$h#Eaf_o~XN?|e)K5mYQiJDyGa&6KwA@@UY%8_m| zV=LD(U2BfbGc|etqE|{hPm4Z$oP1G``a~V~*MEv>k*j8}=}ha0+Pa?%bvv>6+df?g zUsZdZ|E%t9Thx=HOv&@{0$-9z#hhzvHFafmiBY0(m=bqz_*1pWER!er&kKmyE%pqI z#rmHPm@#=DBKDdQ0~>4Tr=sGIv1nA5qrA#;PH>Cj=|NIcBPQtdyfP^HkI0Tirfa2Q z!z|t6UYr9`8gTO)3>q8!n|uoPs?@Z2G%m{+_J1>ME=xuBf3WgQ3wBFLa;5sfEaRpf zz6(LCw*4Ui|G+qWKsCYBE6uYgH9y>7^TsGKIdMUX&63is64)>+xVV?@fK&i@=YyNa z2bXp%4qg9Ic7cZ1Yjx`to3K(CAEX-%ksJSI>d>D0S@^=9qXQBExJd=qt8_1IS~&Jw zl&V2n>kA)fCLVBhA6}mOeZLl!yQ9pzS5$hSn|a`Tw1NjloBNkMegUavCfKf(5B0MT z3wwSJX{q!v2zABi0eb~&Chcara^NCMOnFf&>^%Pnj$7IyHh959xx!O9rq?c#=Y5Ia zj6Dwdnc$Vnyq+H84XM+7aMk%rxzOL-To0tYz{J(?Y7ramJ}b`KYTf1^=QH0)IBnq= z6V{{bJ_qSd+pcR!>auaoEkk9 zqAA6-PcShpEwenEymkbnExyc*@ZEe{u$ks9_ZnWD+8Smsh|4iYbbNb{~scE;lPE?uziD!{Loog zy2F91OFmd|@o`(90sz=hKR)<3$lORo{l9_OCKvG&g}cbF*wOOF z20J8v7HN2E1?nXa4}vrOJso^?7%&VpI==s~5V41c?^;TAO;1Tz7;Vd{}~ImGp!^37TSdQIKAwBDf<8$B1~YkS4|C5Zb=$ZMaO=KSi`#mKzKy=PB2$OnfU9aagb8S4o4rEq zcqc;otaC+^J!lz_u!UBKe0P`E`8xR(2C*pz-e(-bg5c-s5#G<#?{SKeVuc^3*aD2ZK#huLrhqNuc?^OgrbPg@D#wxY3(uNlE&eF~@w z!5YEgq{65uEFU_l`^xY7jp-MYYar7q<2IJ27?!O(_V%mkk8InR(;aRjXr&=7PS4K* z4cnqdC{f$kjNiQu(5rie+BwMn;_Q4+qYg8;W1s!CFAA_Not;dw?F$h~j`8dDUY&mn zZ{*&!Hm**y<9uj0`O5H}TI-qY>f;i_fA^M8mj&Y0IZK-!%UnumJ!fmz@gO!ZAN0YT z>O}Q;{uuNe5j0`?UJ5roKkWG6fjxtnFnEM^={WO@vQ6XijYxoKM~~8gj={6P50w?! z8I;^|(mtb@$ntP;EeYykY8;InI_+FaW6D1!8^h+0cs^`CdEeI&Zuyu)uzXEh>zKLN zgFxfaVP^#45C5aAyYAeNR*o<7J!U25h{NaE!}H7z%On0@l7@?5Pv_DmF`o#GAlYrSrQY(!8mA6h9`OU(v z{?R{PY5%}X`b_suLC|?FY+NA?`R~KZC>?6}yjcs!yR*9KptH|Yxa_9yC6ja4Qp_~q zvmeo~vVnDuHNyohH-gi&)SOy_G+6GmQc@!Q-!$iAq=Mz{ezg{JEDoHKpZwTSsPE){CfWN{vS?i#XH6XE zt3teBTHLC%f#}~?&ldY{8PN)1Lsn287c6&>c)XhG=r70m+gH}YF8jw(PAtuv zi)mh%59t(~Qv8r2ax6bmp3)fOMFw;HKr`J?{yKeB-g=83!YCgc zbK(Mb#7T;~u{c?>YmoAFNJYi&9IwE`lsR{#S#L>M06f0+by@BpcilkdKVWwtDN_)1 zM8q7l+&dfwiLaCSFVM}xx6=KT4I1RsChOzONH2pT5q4@zUHIXr&FOb8x-bCEm3H!DWzkycS7l*~AC${#PWFBIREs{{<|Y z)_B#9eg&YhA#(!IM3LZwH?wA)`bkFa58E&8%0=Gl7~n$2Ot{ z`#q4m0*+TaAF^QYCz8LD#3`A+wee8u3?!kLIQkWg#v@d)`Uw;JUy}Z7vvQxKqzhJY zcx|X;V8Vauenb++IeT;Ze1Cn2qiuCYb?p<%yJ4jojYVwr>)|x#qW3}UAjpB$)rGi{&QOB` z2uW^KA6R7Ebijw&c9r5ZO74;TPYJ?yO8g4bMl<_pYtS|^V-%3hMtoI&Pd*K=!|9A7 za_HK=;Q`%@0FqMH-j9=6gvZ&r6y$83Ra1tT@Zr(OifUi?jwvSkR-DDbcnHIPz28&y&U*f&yKy>`Aq9&*OnJvXs?7^slWme z4fnxpTxhELs{DuIY3~@C#EHN4E9Rgc?Z8j!_5trg zZ9!Fj_+-|F@2+VfAh5^zh!2aRryb6x6%!aW(fdj7HQa=VP+d>WS-D#R|9?bs=~*S5 z8Ny|i^}^Rw@RG9Y@VfsSi55ReO;5#Hy8Ay!E<0aEa3u^Un9hF-<7tKPlm%satOYLkq~GZ0K-A%UM0retIT0Y#<_=9ZRNc7yQ3#UFCPQ;6@LDr^@5){GSQ6xKv@QD|SW$xA$vRR`F zH%FN@;42PXt%V4Er#f;gU;85SY0Cu%;Czw4PhU84d|$T7fR0qD?%Qr@P6MLgK%l5G z`fpT8B;W)mKIWItiwzoj%1>7>`=tI^>GS!dGRRHMkbF{8>OW}+7bf4h|GxsT+JrcI z^{LxtTE+p`1xbrEe9W5Tsr_>+(zaHCTZk!}aQmdAQ%6vX@fjv5V)?YLDj0u*RzU{A z*WN;HJIWJTYV3-cV@sspsQ_|h?|ssMI>O^$`qUNkm+ce%=i4M7r~gTbM_o#OQd!k) zLXG?%XhX=TaO8opD|U`I(PHN|h2#Z$!*sSc%fA97B#4Fwe^|b_;5ePy*RTcSIZ1tA zD#GNJct0?t*Hr+ z;K>ao{5r}<#K!R+M?S5~jB_aMRh+aOH!;_1=}7+ewDvcH^hAyxuih^yt9=Y43=NeL z+$G`=1OAqH`6&vVD9P|PJQ20gsxfPko11#>@JemgIVFwXHeDN0>~eous_#9$bOT!6 z0xfM_34==q0ofPb4|w>&_XhRjb}XEvFBXv2a|?kr654q($vmbr4tmlmoRJPlXvn7WXpuG9mh%A8Sh>C3E zvVL_I1_4c#!E8SR;qqDe&R7RsAiRFj*V=9o{By%aq*~QoMYI}^e>4N2HYw_W@?BPq z#kNP;h0YdPVZkPgtT6iv)(kY{v^mVX<56z3oG>sPjM_1o>w-`K1evYnmG)v4Gm-JfI1`;c>ktIvGh)$M^=1C?~s2Uvqb z-qfN@-Olu|S$5H(5L-xw2&0dX2(Eh#420 z@g*Vnp7CnI+N@h}U?Izf_|Ek`I zvk%-L&?M(@RUcI+A4T(2%Y?X}{PxY57>@Ar78Z zK*4~$O-xWzRt(_m_`7e$$T04;XNLpD$nf)P&yTgl2wqc=1;j9NnSwl*Eeh5cTB@79 z_%IS;u7$f)aF2QTg2KspX6Ii2V0q(S|4MLw8P~l*Q8V6oQbhQng~_03ptuhDUdVDt zkPOs2`a2P*zF(`|MAYqW8Jx6mk!uy8Vab2PXj|BiA7c$_n96Vb$|k#K9435Fo`v+R z_RLN{XFmD4-%lU>0jSp(I5mkp2_};aiZJEpNmP9V3S5gWsnyQSORbw8V`h-sPtS*@ z;r!r5uTzQUt8AX>?uHvJVCLg<$IXdoxa7tIemn`2+_2&1=^1+jtp&7;8BrQheNm32 zm|BW!oxP~#cNg58ZG8@GIAFbK=s_-P9pF@bC%#gzY3;=LQjXIq)e9uA(H$YS;FerX zfi;XwBufZKSNU-dVcrb1G252)+Z|Y^*-CD%V%?GfLp~6DN=)Jk4xSN;r+-qmRGJ{> zM)=tVVe700YFz%B6e0q(`TVw9?nmm|EpHUTE?^%_6{CcCkP~%{k&XRzOs4ysQ>8$7 zpWj>6GoH!e(hFE0} z(XxJ@hd+0ECuyR_mr$#)UV`h15a&N%y#yJ5y7gTKJ&_V$j*h9i!-#y9f4n~Kae{w5 zii~N88b6E4c;nZ#6=Py|nL5L#uIAZZ%)((SJ23Zl$+v-Tmdvk@pAOE}$p%-P_eIVB zE^%yWFB;N{URfL-c5Ha#V^i1HciH06AR$z8YmUr4?%F=OWR}CSWg7l-8rRuyTYss{ z-N8s~95hh=S@P(ob(0whTS{W<+=Xa+bsg3;9Jc-ARz5ihoG#h}txvXmz*^W5Io)42 z^>(ZiZhdoMtn9((=cn~9f~AiQy8J!l*wHvZo#&H|5N`q^n$y zG0%Q7+gJG;e*34YS_hYm)5j&ZBp09|=+?1dkHNC9d{!`qUpQT?h{F=NyYPQBt;{rF(xr6#Y(9eM}e~R-QdN0b}YEVDiy{ z^NdnOZ8nVR0a6h#QYRV*bXgKd42JVu%WE6(fm`}STbX%4V^FU z!_CETj0BhK6Zr1Ayf32e*k7jT%+JDN_ zI`*S^YQ0q!o`I|J$B4wFz_bqPp4u`&xIkamd?-8k^MD6fft9PM z88Q@=72AZ&`}qCaJkq0o;2mQx>k+yv+BHnMHm-jnEiJ-uJkQFX+ojnUTrn+ndqU-V z^~P{-&368Bj<=;I%F*q(gw?k?%FrHSQJX{G3*=lt7pc|?)}?VNUZ=!9j$yrrvZQ{H zEl#A>I1SNgaT1li=*5Cub!bYQx{o%!?e^<@^tbvwMTpBTI5iNhzb0&ApLrfuVedmz zBDpQr;Wg^fY}J$z6A7oe5uc69-h)v!PkpGU2`y%!w#CTQW=d_L4==^xpNv zMY(G2D@e)Zq{giclW#SC>s+{@eRr+aK8wbUBm|T**)nS52%Q7y>?f$V3^6*^_RW`^ zxI>!s$(zzSORaX}I>4iJB^8Sr6SEon0BK{A z|6!>qsU&sAhE8{XebRf@mQHc0UnFAIlH-QiA~U_olg)9dUov9WisOd+cxkZ-h&8-u zI}j1&Y<@``vuOGvW)3lZA-qb_q8+(pX$C^_l4ys-x)Et7DGSqK#YgS&(|9W!GEUCA zcwM9|o$oBVcunR@fxITNq{tru0P-5o2atP>X90$HBr*+L#igtYTXm9NTiLTM{eHWg z7nf7yC0#vLS}jwvJFU}gIafVZRxP8kYZ>8Nf~=HiO}wdYQtl_MZi;2Ou3joT_bqXp zxRxxbwQV*;kWRh?cj`;FOchMq@K2f~X(2IifPtZnpX3^KyFem+0=7m4zA_=cP;TCg zH&J2H)qVXMp0mW{Lo>*p-N)RClAK2G!_*C+x+d?#l;3N7oJFT6m4D>1uZep7m0xQ; zHD~%|hZ0}nUxBZ5AJ=!GwB<7b71d}n^$}rw-&C(x=Y0UmonUI|niJdiMZ2nMllfNX*&JuVfZ-4VxtyFu(?Z9@ltqdQ8+RDua4sm=D2@WTZ5%^k&y9T-wLxo99|H24$?ajj zD3_0!-5(9H0BIFr%bpt-rW{=1f}57_(T=3RWIMMxdzALxwWo(AB3wIBHjyGxSd*<8 zSwgkanY`*6r6O*-caZDJLc{dy(L&1f>yg5J3i}JI#<7DB`woAB{n*k6dpDc>F<9O< zJ1xZdXFA?<*t+)=BFzJ|js*@*=3~z89-0hKp6IZYkzc2e>{_My5~kOW71I_a zvfdeX%9IpO49Fz3JP5{=YVE#q(N{(h)JD9T^6K!IszZDR+VV!cGS}|yQY>G=wWwIz zP&_)}WMc!5c3n;#AuBitqM%lh5|yb+q560xggjckBZJI~17m|tEp~~xm1*T(To3^1 z4N0P3$ILVlaFm(O;upV{D5MtZ1?CX7eF1{qRT*e9FX#0Lo_pjk?VIiMPC1PCr+d}K zCCqEpNBt)R%~w^$1Dj}B+D~ISS|fHn{c|T#xN%HZ8Kkk zb7=PW3q`8QXkg?)xE-vXK1o6?{lw3|dSFXT0?y*0QWOWVA;8|w#^4N2q*^9tO{n*w zko5xX#lcT+VDpwVoYfOZs6N4Vh*XliJ6U1%bV^#NWg?NZ-kXeTq>re&esS@;TpyBP z_+H2gm9ki*+Wwcsm`A)wOo<5Pf)2>wSXwia_%8ht=n?N6Q!?r8BeYj01mw{<-MUrS zaxe~3mOSe%ueFKU5ZRB!LNeS{(nSfv!{QIMjU#Xlx!2MUJvr-6{Z7rCw!E1xx5add zgfN%dOXp|Y<}-zHmP!-I?Ha@|1gpy7!io++D|0mPfzi0VT?2eLW9gBRABr@y@NePY zq*JeYXZ(@mk!%(eV00)Ry1e7o6UCfX>^w(|$6cSjm)*~WUvJlmSRNLMAa0rt6-(~> z92p+#>xPKF$I`sdXpoCIA2k78pT8fRlyW&A)dO*BQbtWmnV#6BQ=&xVht;M32s=e?u>nh2#;0q3s^HI*;lO&YDEnKs8XFeQ1>t>-33U`7TN1hBi9qwMh zBI7YwXUOW zc%5V_P}(--pp=fQ`%W%{(5&W7KA#so@EoFum{s`Y3x&4FTl%;o zX&>~*5ct^I2Q`1C@{;TxJ+sFUu6B!gPw;^07s6&FbWdT}CAuPe$*It(d895EjaB9; zAf#JKU0mde$^=DkZFhvC4zKYGQEHeUVAh%u7*QFNXBx3Y@^FQ|aVQmh$6QKEd{9P; zKliv5i;52~#F*RQRqe#NfF+s%cCA@VXFfYE^U(d9tyLd63~URwXN{JQSo^az<&1)F z<`6Mhkln{Xo(~J|L@g2#wt9cjdqV%S#u`7jOJHJt^9+NO`(e4al< zO0ODc+^`RWlD7;f<<)8AIwdYSSYf%VI7_!L9euw8L_5Hgy?T^C2Qce!G$bqt9AGTT zQM%5g4k7q)DG}cKwNEfQX)Nwm8!)K~D;suYw%eGZfwPIDh#PW`MQE+q&%uDwAuKVh z$NmzD%xTBcc3&ZnF;lF#i{EFcfgjta1s$%~$-TlpO$+fH>J-{C&TtVPt{1Uw(uQw* zis4Q(gvxV+^BVALSKSBN^+t4+B^-rAL&{$auX^5MvAt{8salmN789I;)8avSnDKEF z!(YjEe@A{9#N7|BkGXXCjl`kT=?>Fy&Q?#e!l%>WniuoVBQ489YgXbicMrfC{9m-a z1yEei*65p{!68`i0Kql55AFna83-C65ZpDmySp>E>p+6LySqCKE^q$locG;(t8RUD z>(+Z!Ex%r?SI?f>(_2n(O<%6fE5E<}KKmNrfyr<`TG9ae@$H<+1_J;>~Z=v|? zaVWl_oW~L3a~fNvSV``uO}3cT4@NL^=MRq_*t55;L@-CMg`jhk)r}l6*6|IOkFk~2 zy#imDJ8rQj50~Ce~lUt{Cu1}0>LUQG)z!!zr0ane3RPA}} zNF3l^ILmc!a;no)es|s1dkyC==v|+P@y*Nt-#uWyMf8QyvDeW&2~dsT1NOqnu6v^& zw)#CUjXUmZgrBuycI6i3{wA-zRQPxtJOjO(fDcTsnqBq`KPwZt=4I0%XCBS3_vn>F zZB2W;uVYV5ecB3jpz{s)-Ur(>AV3yobt z{kM7V{I@k1FYtcTZQ}amK6O9~@Ai-a24GMh>6qGlb*DT%!zsSb#(qxWjC!PNv>CoH zz3o3g;*oBWW^6#e=SpCk9mWC;bOv3btOQF;9&9E{1fz8lPuoGgkLt~YfWN3CJ&Kp? zdcUpgNGkiG6Oh~JpZVAPKaIoA$LQn9;oehyP>scl8jYThH?IS)TW0%JTi5G)aI*n` zH;SC6EyBSNVitJxmcojf_||O!{fYH_h$yhZ=%OW#5c@?N^&Vc~eFClTM|h==4}Bq? z#`u@^U`nC(fBA^4_(b zy{u|}haV*OIvwKv;}c6-6uv@#c+s}R^kv?UZyckcMZA+7G--R{(-{_N*a{B+5)QWM zU)dzLFH@a6|L^b$8veY0ptJNjedxa_EChAyvzT|bJS zrb)f)Hd@VVn2+U=_O)6fctqskxR$g0Y}&aR3Y6(g@uSp(X7QlKll0ss=a1CEZs((x z4S@2FRnztn=gJW-1GBPrs>8|qt_$H6ig2cA!fo8mG}oW5@<|K>_PpAajKjNIXt}CI zR)p>@lbf@5dL4VNifS~&xF#+BjG8gK$hCSR|8#}duKfHzgb9wRam=byrn0T_GRbs@ zY*hM11;hV~ko{UTtp(O)Ydx zH@wloJYH=Mn(#f7{}M)x$sdj+{5J)=hp4UDJC93*+f9X&e%)$nlRW~qYt&RX&`8F> zNZqWD1O%x3qN(Z;@&7N^Cdw%4oov-N){<;PS%Yr^fq+M-S{&% zbx68)Pi0kiL}P8>;ctu*F;Z`=5^<FSTn<@9a2Nu$Xzo3l_WU%aD!AnXV9!*xey{gY8-QQ2+E=(M~}v=N=gc z=(ok71_>-3g)!)TrR1x<@|FSXe@^#N zyUo(`NRt=hUD5I|*tO+{u2pFU{b=Y!L$TtPDxNu0j*iO929Rb&_%J;&M++IjS=G;! zlaBTtgBmO-uB{Su?V0@d-7#g) zd_-;>-{FwypI|RiW5kOMC7YSkLbJEbn-S)>`1GQou3)pk;(XK1&=Ot&WmUPio`IbI z*mnQo*m^e*&q-;A*%L=tQy|G$iX~_HZ#*f%;Y}H-g+{$KTug(Z5ueuYbQk&u!G+ zpRx*&ItrlPnjIlz51MqB$iEoUO|vd!5pXqsi6>$-3&LO?-s!%O&)=rZ;O1l;`_GF5 zRWnZVroDVWZu7_bpFxeI6O9B*Tw=>+7R#tV({q2a|98UF!u#lnEbSn(`i*&4pI{vBK&k=v6e!+Yz zK>5}P{#tLozlHwPmkM4t-yS4XoO7-1i}#wT>A&Fd4h0&eZjW00t;#*u_8J%3zrMcD z9RKG%qCEm_bMfTdOH&d<aUmbo+=!yYY@Vq`RvQ@}GqO8ONc)`}tq`FYwSa zV9a&a+jSxC6@R++OTYVTE_lyzFYwj~aY+Z*U0!Bnf5ZB~dncF?PRD}*=u*=<=RFoQ2k)2PWk9m()*Sx*#5b|N z^8cP%(z8FA_q==C%qx)|h7m3BS|PvSxv%6~8EAgqL>v!ZZsWQH!otq|btMPtlIe!|0x z8ZdIz`eZ8p)-V2Q{~V{+C_yi3)o2i{igM>&0;sEmgHalMW z$g2)0KH67%$pB@m{(mmiSVPpP<4c$+2V2e=a9UNRHE515m7#-yB<`K9bp>aPrTlUY z;iAP6jat;p2K<=LGiPZ0piXO@+%r7}qK3dY)J83|`GO!Tm2S?`P50SfV9RFNmxPk+ zj}X;7Guc`B(lk1C_Cm`dwb2AnY}$;7!chV>r%XIyo(x(n2#ekpQ(^W!_{ewdF*-oy z<#M*kPh$;EXYvXuGjn1Ni78{^57JBeR43j4X#rl6tGb;kql?sW6EhD*SNJhu(8^xO zt?FLqvQVOw_w~FOn&{*>Oz8lEj(b&q5_9Y9)D|XPS<(Mu-D6fdKX)7fxqqUB?>Z5( z+eCef(9JvVt(a84oSuAIxO2H=pZt3{bdbUm+R-xy1kFK?^HgVV16{p1qE!UwPGm|q8NLOP zszqA4F;LBrWa@YoY4N&b2&ugS0+HO_Uu-SHAGk zz_}RR#d26avd^?=lj8Xk{`N<`u;E|4Mcc@F1d*!4(W-U-O8L>M&=eo7>JzQ%5v^(q zz5P^;a_FPz3gR~QRA@|28|CBamMmxX332jeDH0zn*KeWp3DFa3Pvd!2@AV#Zi}@rw ze-oJ0K5s95xF1SS+oqdccN8Q8im#7FMuqR^@;as;cIKFnj(hSwO7F2x25TRuPkzvh zm>BCH-BV+~P+KT1+%IF|w9J)4k$Gl1^+|^jT)u5SVB z%*gD+2EEW8O3`)X@bw$tGz(R>w>)Hapf=k#cbvF56^hE_M@#7D$LIfa#eK@l|Bol{ zz`{kSO^3;AnD5Ei(af{))a9p7NnFdHOcrE@?cvcKy)2>eutN8RgOa0_a+GLIU0pIR zEr)zHUfau9J5Lk6J}~?550jHll=<<;G+XIB41BHLq!wrR4z%gI z_kx6F+{TekGZQBRl^VjPQQQ})VZ{wcJ`BSNnSxFR%RX z^GE73vw%@7AgS>w`o;d&OODuTcD@@D@ECB|toVw*;;g#%5%8e4SH4r8LFsX`9c>#z z^mv?dFDi6peC)&Tb71y%GQod3T#2B_pU;Ot=rYJ_;bZa<6n->b+0q+RCVDuccSOsb0{?YwZ@%V#vzoH|J`<9A zH=#)}R{DKLK*L~YsO;X9z4Mu|^I5b#pwsziQNy_GRx*n|z3w!(hemNPp2l1VKP=TF zza|x4>r-R}|K~^1Rfa}zBmadv2bYK5?z+%dsz=e=f4)`zRA*2wFX&!=HD-K9eIHbI zg!Kb*C>HO{Lds`#GohUi;dk0=wp^#b&W9J6(6%~zV6PYsV6uG5LoElGsS zp49V8N#7KYI$+1bbe`V6q{{5Ar7!9mCNnY0+0v`@Abgkb8o%;=1qq{hDd3;X7?pZ<Ir(22tmyzroOAjE? zK2iQ|f7N38+IemSh!E9?p%Lmi0{y$@8$FA7dl9+RWk(yO2eJBdr8sdSm>rPog3$_` zp!s-*R2XgVLtN3uk|Q|ul9R9v#wZA1ev8?{UOA7sqjBL_Q=8s@Ie zGn^~WHIytxyadvG@0N&F6;?-h1){79nxzNVZYZO-;9lyF-ufkn0jmkx9Vbj$R+yqR z(We+b8z5bRqTIuG#io?an{`}x!iFl7NYn^VuVUNQ7{U`AGYArX-%|ay7j)gr@!ANl zgYniB_om87j5WaJn2pgOxg;#1MAFm9t+++@V!>`OkCpyaQ>dBy0&P|yUx6rC43>&< z>dC{Vh*lEKd~NYchH~#}V@az3$mm3R7;2K<>ILdz-cAL}t#-H@*+DC{W_8InRk$Db zmwY`^Bi)B7nGiW}V>GZh60OO6`x@XmW<^wCrOnS(YmetqWffM61?nkrPo+iqSg)8JtD_A>$938>7TxM#b*l`seN{zV_h zhH}baT0uEw2(3psW$#Nv|ES0XMLMNczfo|^{(zKD*gNE?&omw1PTaDs0tgfgM@zA+ zWRh!^4|$ytJI=-Fo;t<2)2ezECW36Z#8x`DXZc`e=c6pw0nBK0_Yjf4EMuZte;Ptd z$n}Mb|Lk>y98D!UlFa549a0yp!GKQ%T9e(Uac^KE3%EG^iZjrwSK0JSAN%|gb+FlRv0NPR@8?!7&2Kfv}LYJEHA*G0PEugyAUQx zZ|Q}2tv?9iE+~1@*Sai9YlM3JHLIm>XRaC_+d#WtJYigm;Wj~gczA}H3jubeSNA=$ zc@wnxzC{8DnRhg=%e1k*nL4BNhirGa>pCyZ+6mg?nl_jg)SsEXx!cm3wkj4lpM_po zZWY&(07EuAr*0T?5qDeTb#v_)WPeDve%~{c3zGc>n2_A}KU>Yk`*iQu{Plbf9Fx49 z^&}zc=e``ZrdS_xsU7s>9yeBP!RjeOVunj+PWZ6cM4_EvRwn_HHg%BDj_utGmCa*& zQdh&BUHGmnHuGJs_eUO=F7;6e-wB4Y;*2?iIIJC>E)`*zq;-V_m|;xsCbKiHC^Z-@!T(U2 z@r7@2eAh>Un^)l*w%{%*uiQ3~57kRcGcWk_;m z5NIBZ%BdH5Q9DD+IXSGMI*VG>m{!r~jyB`$yAmk^$!T?wQex-nZDZ#VEZJVg=J-J9 zdWW!&fChf@zxMAlINq@Ri@Wywulis0HLH%)^SlQ*j#pX8S;(#K`u?OMELFM}dK1gXST{(Iu3-OH5ufu#Lt)kh4`x@I z`{;R=Pq-0R2B>{-#_h@e6@R(TcMYYgyNN!XAUnJLrg+DGo*06E+5Q&`S9vYw1NwP` zwEdS}B0@TBnd=}4HpmC?luYo6yM~fR}TfKU*`rmij^~Uve+(Ju~d`s!XFBE*Mx}=#z z`a2cT%%PPRjZ!ZCwe8><`kD^!Z{_R1zDVI)9k593EAwaY1ml~{{UNS{u#5Xlj4j2$fTDOP+Q?{o@MaJ-ItWw>W~|f zUh7AiD>cjxd3wZl>mV(r8KQQt&0>731k7g-Gu$M*x3;VJRQbfsA7(?wYfH0=@dwP@ za}DUzkJlk)Zpmv!E`!eQ(Q6F+2hTAk#WBHpLb&d^3Hn{qpN4FVWVJMIk=eUY7r94} z>r6XYY0Bw=$YsH^yBpOG3)<*NZ2_yhR?z>?yFHjKuy`uJ(s=R`f0hcY3aA>m>-xKC z$V=_XDlH6ti~6EoTry%fi24sT*g?sd-lnx>K}X*C-z8Hmi8*ybT1aO zlifeeQfI72Elp+d02psP-ZvL75{3!nnMME1TnuXVlDxGCMXiUU@RT!$F!9TK)s0fr z^?3%5v(*tSJzkO?Zt#xS8Q9FFLjzoMA7hldfsY#?W?$Xkoauu}%S?5%21faHB+P;r zEgI8i%_Kxr2nuW*-Lf~%sL~a&p0=w^MNGMJZuRPdtgCjFa9df|+;>LUuRk-%{VWe@ z4NfD!r5~l_c{5_>(wE2RNy6KyV(?5vOdJ&hvWTn#)2i$sy1$B_#m86>mA~;@l35oA z6r^@AuYBk7^AJTwfs6<}k{r}jm?fv8v@)#Ba*2-9==_*VYxpq##lnR|#U1<6x-c=e zr+J`|@lLS#po}SRH5}u9wpGbbe*-Qz2vUH@K;?H*~N20zR^wReUnT9outqucCI zXkzXbnOPuMRC+#7%-$Pdxj4#`?OZd7xGoa@O^Oaoybl*FjdBL5)CSGE*LyaDH z6K<;-Y1&JN`cc!=6<9!U;vH#~BG3BCY>3x0U+QuOrULhvrpc~_sr8YEu_*@%pTlY{ zX1yJmK{ouqMWd__5vp~t51}{FVBSV)y`^YKC?&zmJkDWs+sfb``*mPyT+Zq*=|fR= zes}uCQ88zYmZ3t=z$Ka#B#Alw0D~A?PXF@}rahhMrInZ*LAXJAmYZY8>)+b$@5X*v zepBogrCB)kI?<)!NaKjiwNs0y?sBd=x4x^hpobQR_zP#6U9#qm>{f$1Q{B~BZ^292 zZK($+Ck z(hv*%*-mahGfA7fz-xf)$;V!<2B<2u$u<`(!eFfo$4{he~@Kh9UKQI>TFBs1u zd_S#V>LP7w{BVrvK{1ys_=5@cHtyRb!3n#dPP7^DXxE+nscQCek+E#M&JF4k>eM31 zW~${A(zSN-yiJEHkf90)R6$f8HO{3=l6_kL$iHj~acNvWI%fpX#o=sI&@s_v4j1Ul zc(}sZv(FErIoNlTbHnBgViaiRuA>%VNxPwtN!U(HBU|7U$nurO#eigRatC87O5!VM zO{@^6It#Pu5Goy%ok@kr3w~lzO@7x2`r1ewrx~j;i5HPpaj%y5vp$}Fn%NUHVe=Rd zQW4szO^6@1rb+G^EOfRnB~QjsLiWL&D$R6E3UXvFs`W%NsYf+&Bq+SzjhV6krc#$t zP{c2z;1HK~_@x1rdqs&rBxYW1fI%wc_tfVGWV;pTAxtdkU!eF6M(K+RHH8%f-b!>{ zo6!5yn7yNKX?5hI;h}DF?YKSQ#5MZ3HA`E{-gbpGXZrKg3wyf7<-^lL;&a6TFLjzb z+{_ho{+4lP`|Q&lAtHMpq(Tri2&s3b@JQuq#`F`CkYpFGbc>39XhPYHdcn->ktOmB zfK`;=M1h#DFtQ2tTK%{LJCL3U3G%4&)6 zCnrJSX;p|Qc>FsYwK3eSh%9gxzwoitJI75KO?XI{6O)Oc0D&ByGCt4QB#tCiO!>$O z!Z#IMwz{nh`s+!ZsSx>yyMfs2Dp)77b*`jAO{PNicru=7MiP|ARjN>8SGN?# zWvjU?(js;$Y*RTT@%XI)n`yDo`S%-X17gOt8Y$1Yx<_fmqv}iO(zUwK5TPlpnO#6F zQ`Bd;|9!%Qjk*zDU_X#q$wP9(QwY)KAV=dk45?PFXD`%}Cx0)WD#gbIX!Pw`V5zA{ z_Qv=#67ha`D|iyeO&s z*w9Rv>eBiI8;LGPkI2aIJ7K1p(Nsq~zgD=OF<`gLdSWL4mzJ~qlLlO{tdVI?S%A7Q zkh46D=K}rk4}U>B9y~Mht({7aoTJ@<`Ot1?%%;q)o_(Fbvc)lbeS*K{pqlJ zXy_qfLlEw3!_+Z};4?ubW(z_`8@_<7yxImx{82%FFLw=i$WGX)X3=)-%2yEvzq>36 zQ3bq%8EkrZMCgR3!kC2Ql-Y{D2{}Sg(!r5) zpvAMJO+v!43a#-9ZiU^-FxCL^^9Kj_|l9Re3rOiJbvC$_fKut%HD&uANG2bT@cpby3CMr6Q6uXQv>^~(R zPAHVj`&v=>S#{5__N*(}#;DnXxJ7=%e&Z<^W(;ubBF}`GQV?FrOIL}XNe)p|ufx=F zR26Ot4AIq-b81f7`^B{NtD?NS!74mnRzJX?5yZYeZxa!feeqF$~ZMWt1$O?4wCr2nzsfc%WLFkNV$Hfe}bZvJO+n=b+kn^cFI;4`==vZrIN-CV(oG%-Jc@vuwbiw$hzBq+gP14GI z@)*-1#$WT~wS*X>Z;=0lO#KOw-7x%`mjK-XHW-Tzol^Ear2*{teD}Pvr7I8d4W%!7 zAu->ttp?l1vQ)@z#ylF{AVlKu@+}#oZkDmGINX-^*KUz7^?W(c7NMzf`)Sz8#|-wB zDypZca>$kj;`Ir#wkP;Q#e)3?vf1RVA;nv9&z)ee?P4gOJUe@jm#rZ6k?Ee4)hWp_ zpH8gj9NDL)<8pW_Q(Yqn6MOhi+q4IGwWo7~@4HKo76?L&*kIC9AxZ7+OET%CxE%6) zn*4rS{W^Nbli7Cev3^Vz*$8S~-IrRoo9+==PZmY#t36S-<=cj}hAq~+X-2+hEk1H4 z1}<~<5md+Z7Bjpr#?)ib_<+}{TOIiI>lKV+{-_EpldeF;Kxgu;C+a|ZkMz+$v5-(w z{hzujB^N?J7VJ zEH^Tnh8ByXA7#HX5yPwhSp$H_=1y2sAGjqgNGDhE<{ ze4ewy&TUUZ@82J%n&D`Bf;!JZzO4?vD)>rN?0^nz!=!Yw)jO0Yjr*u`+V(cwbwRds z+-L966LWPyU34EwneKVyuj2m_)C8R)Q?7&TNoqdQtd?)mUSUN&I6B$ zXtJ%aUjilswvLo-0QVcIe6xau>M6;y?~)9mUf6F)tA;KVw!@Q;&!3iB$>>l{{ZG65 znuTB@fV)S0!dEM3SZ5zGJp|kxsMM z6sLq^fv3(e(=bL#?!RrmzkW&zNbs^0q8DkS7Ge1Won(lTZ7+KKLKUdO{aQ&2s)J4g zt)FxCdz3i@Lgx3;J^J`E-UK=jzjp}wZjEm>u_|BD(AO_#36EtHBY2%{{SggL2lf?y z?w}+fBMHrrQ^3Bns%=3ObOVf4?zwsToTzm2!r|CXTwFTjqL#Tw6EZxU&)Ti*8dj0WM}g9$4DM&N&Dv2;j3%L%NK1wBDNc>_@8 zdbP(I5#_T8%pX&OQpCLBf-o2sGueNyXeMr3{&?>ArtmDQRdbp6j^0Fp8v?~&6c6}EeMaAR-a<@w zJ`|S2nNKCgOvZa^S=E2;=v#c>Nk-te;(jk<&_uT~w7qrhvGx2IQ?3*0f~0~1c2Oc8 zW1qBTznlGTe717O+|%($*ph~Bp_mI4ymgSvu zG4IWF(0r*h0-_v|%#1aK164&9*U{gox0PjIRPKkEg2h~bVFI%CQ@(BWR|jgr2|Dqg z&TYomPZ3W&vMAgGxRp+vOr|8L2+qxRCpCOAbS;gxBF-%rW=|s%7FKygOYbdz?D=hv zGqRSgE@w5+60O_V;?zY?^JQ?XsyyG4)SLoatN-kAlgP_m2N4`N2j4}fn(ZmvWx5j{R&^am@nUJqY>TmP)Etx9`SQ(efQ|}H~p(ke_!Pe(89*Cvy=0uh*M{36a%3- zscg9wX?5}LUToVaKz1Sx@ed?Te5H5AqZ@V<8d<|_v7Qyk8#>^~zYI97D;fFC6$x5g zCBLrzu{~u!xi2@$syD24?dQf_^V{JMVNyELV+y|9#2A*D&R@$lj%$RjSR^l#mWP4% zkor-iDQWUyK$Nd~IBm@ z#N|AdhcxzM*?zuQ8|5jgYngi{GIs%46Y|Evb+mC;6QzeMFgOr>k3S8)MPsKNMZG&w zXm1Qt%Z$4?U1JLFiRQBe5HA&BY?*J(!|AE!dPVe1b3$@|XncMGdOodDW~+o0S-)!J zk5cVnY)tJJp}C^6v23(br|hHLA)k6=w^I2%``FY0^S){c_?m8J`T@s1iPN-68R$&b7Hwd^7GPi&U2XmY^LP|t>eI1m z2(?zWD97X@PM*wMF{XkUur~FEw`%x!GP?aeAlytFstgAHVads^P$W+qejBSQcxY$x zNx{3ieYVr-dAh>?fkgIKYJ%+*olI=_q1Y3;Ma}ku>(U>ZOS<}4pWez`g zXQ`zz^UKAA;r$EV`tb4XYm24{iUL6jiG(8X91AAFK7L3B@H0>iS3T9<+Ye?Rg_e5k zqj}B51B|SFhp$QoOU~37iW0%38i#RdUW>)wp(Pg#_2DkxPWyD6bzcO+!lTvrv^vXL%{?J3N=uWhr(zb6bzt10L>22i~`M1 zbL<$&_9?_;4UoZZ)pA8rgQ3TrP3<`vj4Bhas|(A2fO&ra{@L+3GMKx1&GkOjK2fiK zyb(%nb3_<#>5#tes(NT^722{jU+>#Eg(dy<>iQYBmmjX?b00s#pa}9gP60w`yF(0? z$yKrcm5AFKX9Z+jagyF0t))xotY$3Q6>U=BXGSepw+_gQnF-1PDf_YZdk z9LojYHFY@N56>l|lNov)UWohy#4FhKTVmxbBtje(`1RYiTG4#Z3dhR97)_*3_aQl& z6XBiMH|XxyZ*X4z9nbnuO>`|(V*v#p6Tzbk#eYoa9;Y_9q41gtDeUgo1@d|3L4iga z3bjxu)&lZ9hfAA%NmpzzaJ=V+9$2;w^a!=*7|^qSg10U*=NO_sALB~FL2KzyeX=&y znI>ENknjpkV!J>MK5aeom(37eCw8wY*OA9=tkntt@nr@in9`v7^_Mu{7(?o&>Gf9+ zCKOQrfe%n5*E-;KdLHC@fe);Z#O|4wFC5Q6+96U5$@U{nPQ^zHJ%)cxQKS zHY#?-kLEy_+&EwH!30rM2P?XdDf-i~X(GG6?Tcz?hqIT;YQMh~`hJ7WlTgaT+UvM3 z`MNiA?Ps%;o9=vo2eWD;UYdR(gV48%ur_-5Euopg&*i7`c=tU=k@HN}(8TtAfeNB~ z+*AqsL^b1tk}4mH_D9p^rfxQEBye}a%^D*dX9N&;2>*znDM=a%KfLBrzu7#Xvy#Ubh1 z!9&LJ$1dQHUBSZL3A6M0qW;!eMcV>c*Co^=`;5ZS-Q4m(a2N6!!Q@;ncYd5m*xVf! zETT5#(Mu$2?pEbttCV(EbVpj~VccGm@cxEO%Bj4Q3uM0kj<0|0Jx+teyDl6+;Mld? zL*aoVKeiId2pk~(V*k;h)E_XOEtLyc&sNOp{PPy*34QL3sa*g@Bv8G6RC!hLp@V<5 zeYI8V8zaW4V@I^mcq*e?1a4R5;*5|Thddm=pp{tVcZSM7q`!9zLI8{2j0x7gY7O(Fq!8q^xOohJ^ z#4013%J)f2GjS#+=As_zrGAMQ{@oH5_f<1dWKk_OsFr{Y`$oH#xNyK)n>5401bs*& zE)i2BDe-S^SUJoisFwbqY%ndSiV7N;Qa~ch|3-DUbZ2mS=SP9*PdC2%`B*2V#>#RO z8;FVE#7r_o`4-g;LE^MMq;)LGobrWu5i=pugz^`UqJeZryR-rF(D06F!OrfLef zV77ssqtG~rG-O4@9@BI{^Gja`F(cwMuYCxyzc(p$FgbKZNXDt$TyVk|4>4HT9;a*a zV;o)oz*pL*j%Q!y1hOHFzYmlTU+n>j*?A{Cyy%D7gGf0Uv^0KK4iE75oe6J+kIrXO zkEpz`3F||)Sa09F5!23hL%iN?a_50bs6E#WAWFta%0KYho~*W%))dB$T>iY zWZz|#7Mz>19r_Dxrg?wwOg+R$CVNB+dsAk2!{U|D+mkpCy453WHT*~M5Z5?*35ePc z^&mENkZkcIy_o4V0jM1$T`aa-BC=nS2EyZ1E-q0$w0274L!)a@C*jkaRd@QEn*~A~ zdISksj47FaZt}DAy$OOYr2Z%%^t%#pBAp^C>nrK)5F09=6Ll(|^T*Ud5w&3YklXM% z;D2f;1@g-PfuJoT`|EakpR!5wj9uuEz_Q&?)Jd)j2@5V7l|| zP@f1J3p|?&>e|TNSkLi8_+2|;7=w<6ke~<;J#)!9C|ml!E2V?EekTd1zxT?{!I(vP zMDS8Z=0lqe{Ko!{4i;8gla=;U#6ACC{u1bVj!#MGtbI%^=K?bNvj5K(O>%TLj!lMfm`c?g%>MisB(D@TeSaslMlMd`|o9qQ|{ zxHmr^xn$=?og9WHnH*6-<+?{nYBKAUwlult6E2kA(H)346^;xOD`n^K3RbIxmxwpN z)g<2J-cUGx-iYP=C|jnuGg^%r5~J}zJv?>tC=g>8TTpfpUyuRF>^hpi;Hb~&J8CKk zRb(TWa<7s=_X`>)FKqIDpOFjBO?qtwbm2qfatLw|^G1K)e7zM|U<->`vf z8szCQnCci3QL@q7lnbjpLJa)-7URF6c?2GmRl6*t+js4E@5fHDoG2CtumrJ8!E0bk zAaf}5&06NEEm`LER8WUurqS{$B*^M2BpeCT@Qwb+OXg8X;3wgzwCi&k)gm8dE6}|_ z%KYY5I!(vIQlR>}dYDl9tytcH&s4iu)ePs#eS^OWamr2bB6A)VuzA_*{x4d06Aa<2 zLhQKyml|5-K-Ey;#MrUlc{?eGodE{3g8_z0#{BP2-YUem;iWs_2D??OHG&r+W08j7lGni5`qge~_V`iN2uCWh`XAtQAOB zB9+q~YOOrpZxu)u^9ngGG=Lf;KR#4fX3M!5^hckZzXpWHpEWKz+^$@EIkY(JTXH-e zuALXNUn_@IB39)dix9MuS|dib5#X4A!45sTwNq+RlIF5pA)aWq^-U|FzeU?)7@5z> z1TC$>j;T`3OToLF zW4H^9RI)hzkuTTS3v!TS-4Y;*a_5=kiw@i)XS}p>r>t^|kpGZ6@(`{Nxl$#NT6b|? zxYI@g7*uVnfb+;Ep3BmWcVikN>h#11T25Y|wB{cyuIx5pv0QOgs~@ie82Sij85avr z3PtMN63o<&*LE8EydO#gEfg=fIg>8=zz;#_Zrok{UpSwLCTcrPeNg1R$fhRXX%fL> zuNW2&uuq7FM}gO09!0*?yv2jzosN)WM_w5`5RYbvC<0$%z!*+Pn6ZB? zyQH;BRGUIfLggub^Fbn{#m7Uw44Ms^S-8PDUZbmxWJ~ovQ_%0(4`Ro;S`@ds1@HWr z7$u0qnHc3);_mz`6JH=As1K8hV{w2lgJ*G&oRh^cNOc&;;vcu>C(EZAhau}8Y?5q( zAEB6dgFZ81n-^3mjP^opd4Q}oUgc|Z_I~x5*KQ5{*sf zP3J`rSq5Lr*`=r=T#-ZPM@{He-;G269Q`hz^v0Zla} zc0duQGFR#OzPuzac=d7^b!$}6f~IiGnJ<{kYEDzB!Y0XlxGvW`N&wMaW%LmlG+WK3 zo7Sk>BBm{>uZmZ7tX<v!wCi zeIqy!3yKoZEWcwV^zq7cCRw6{WqYSH_6^}y#q>c~m3i1!3`ISOw}jC_S-XQA7+)1D zFq7a`Lg(UNw1Vygq6SKGYUjAhUZO4rrrC2_4mByM;^p}>3d29((GRSad?wRuFK|Ul zp&y`7i)q7c!)Y^=KWfSo@5Ci|te~B=l?e4_s10t=M?W^3iZgp)*Q zB}4B)>&M7S2GfJqS`vND#{Ai!Wd zid8bOIqECt{mUS4(#e$nzs6i9v)7N!Jr4V*uQ>$$l%PuJ0qFfR=tsXw23f~{bh7`e zJ#_4UK9Hcbl6LZ61|Abmg`e~_q2m_9>1)bPI_+{g>eGqMC!YSRXX1BgOJY9pKjZ#$ z=q53+zG3jaZ>V&_UY+3{NghcjaEaNnSIzq^`!eXsW2c`NbMD!51mlPG=3f@|@a`z+ zL?PLuyT4lga3C&>p6)nz@dWCT|N44I{|o7kFhZjbjP5nmVn0Bz=Id!lbEke*Hu3G+ zFS&)j5_zm3sLb!x$d*2h{3Hlf1hMMl7$zYvc7);H$ghONx;W9wP%D2t{C&UcVmDFd zJ%s4|WOXjH4{j^UXSA%N*kP=S1KS%+RBS$CP9mC5e4UjI4V8hWwsTAySsRqIAUKGxQ1|)e6D%jl_~Plna1Q z;X4t}?f!l!;fen2i=j=NLlio1-Pe_+jthBeJe z`t!7Fmh{(TS5k-2{RF2JISyK<9LFE87dU3<<6?V;zOBlOACT9I>P1jS39>XAX?1gY z3vYbWiru={Q)mRD-MSoNXzIm=mt&X&f)~5$hB{SWNp7IpYv`^p9){;_F*E`wZe2}A z9BDKHzumf2Q^*A(3A)gC?-JHwy%irwSw}GqdQfxq9x!6aO+;6bit5jEe?c!0aKge78}m z6sUTJKgm=dgZ9C!O(3HM_-1i%yDC3e?V4J=oyQQFh}c{ZeLAH#`Jnhc=)&J#x#dHZ z+;zaXaaK(3Gx%dYo;zt_ZnO^Qs>q%|r{qmJ?<(nvYo-)Mg{}27RUV28;lC@G#}dKP zXP4bhSXHS4j$J8PrSAvf32-n337=Xisd9>!;tyhP#J}JVie&OpQRSUZxp{2_It%3}#Bt-qdGg5Q}UI`y3rReBX z@JoL`2b+nH3rp@$UB+OE2#6z4{@&3Z2;s}gG!xNIc}oy`y=E%86TgkaXGIwbI|)C5 z-mHveB>_b=6VY^NFDWX}iuYtrGKJ=>C%jr+cIp2CmOyF0$!`f!9RR2R8h{>P0@ydU zOydx2-Ro_BKs%rl&;#fP3<8D$qksv(G~hJg9AFkO4_F|qPe2gWRRrs^031-i4!8-p z4Oj)-C#0GMaDb@rYgcar!~qf?+NM18cY1iN>MTGmpa8Jvp=~K(FJS-rF?4$nPy^5c z;Jm6W8(Y>VBACVzz&O+c8*O290J_%e4nXgEePA8O*Kq)X&@jKliqxpf2j!k=R22&q9JK2qAA;^>J(;pj_n>j(Sd3g@kU;nd%e9iyJ&nr zOEuEQB;?eMdPHLeaCBofa7<$!aC~DSa8hG2*2{oXg>mn`su5wzvs^VUobueM$!M(b z9{2=jH&%KNR80wIJ$I{43Fkd)HF=GPkkuRY!bY8Et?I0BL6p`MHySs%tkEV)tIi9T z#0cG(;}-G?@;%_m76N>-MGkzXMF~99vITgqC02}}NBPTj7h4j7!&MiAD`IrjCE=PF zqr2Ra47}KqhD_^AEtz5r-5VUOx+2{0jOmtJay(<<`Z`||Zi(@_J1zOhMW3qQZ7Bg> zYbh7w4@+D20Y|hP5aa1l!HKFH!itzwbxXJ>rXG%NQ31!aXn^Be^kOP)4^CID7>Jm0 zIH|=1oZ4a!p02uQkc-)eGg{ope&lxG?3Pa8yp|r|!j^vE;+8?+vX)^nn;sQBcetWu zG;mEtR3&2G;mVc?F;68oD8)j`!C95kuth9Be5hp_Slx13ET%2N`EdI>Z!yG*WvW<1 zf>?1_*K%%yjV-fc1#J&5taE}PS*$#4Ynex0*r+>Ot^)g7t^>vU5RRr^Zy9k$Jz&}rys1hvWQw}OG-HoTj z5tYVZ_jJ|tHJ(L2|Ec=1#tXnhjhBE&8m|D4H(v8}(WAU3mEPbMkEu)szc^Gg)p!H= zRO2n+vyCgj=Ns>dLn^zWT^y;ofPBeBympn_&?%1BTrtU!mB?Gfah2N?3-xQJ1mGK{ zWZ+w-G}>@`2^1B5_L9Zs-?J)hZ4B-uBuprV{a# zs?#tij@QPT%7GJ1`(PYs@w$;a!+TXdhGFrns^2gwj?^Zb4s39mNd;F1+PyusnI?_5 zKU`N08YaZ^wK*m|vT1|!O?KcSlN-3i_zsRi=LLFpM)TUZ~ZW z2E_|dKMg!=I0t8_Hw`0?!dXEJoad-vR=iYeGEIDvX}fo{)^3{iPSmPSZ``9@A~$e$y&^M%||S@ZRBA zc)zC&S3Q?i=M2}yYqf)Bc7unJN6nmgO*Lz{Dc(@c8*bAWFh?P8d%(35<~WFf1;eU% zt9II)xWT8*DZuB<>E6?|vqG`=TspHHJ;6$^y9%HNY^Yz|WrRwBPXG}d{iS}iwk6U7Vx#|;^c+ZS_%#!3QP)}M?eS6d= zEg8Pju-;Igv1I%9s%I>DzWr2Dc+1sumO|e_^+iiD{S+)^zMAmLuD)!k0A93I0xww( z`Lya~i`pls?^tv`i~6p`=yRyoEH zZ$md)x;?#hF_u19sUbFez11_8W4_+Hc*~G)pf1TW;yYfKY8m%g>N2orwq?q5rY_HN z%6Fo!&~g^)#g_9POI?}e0&s=plBc7t(sBj(kmZ`^c%9mE16XId<(a87T2_Eb*}pO94veAK$dH&$J0jr9!Fbz2jBlXZR8WY8XP1$-y#j#<;zV_Q`>WX*(e zMyxrWwYqU@zVA%kl(on=Q+J9g%(}DI65m|id26}vBK=+aDjN%e4R5^^fly{#DSx0jsRDo;8ieIuF_s zK9|;RzinIVDQJ&tJ*yeCCAOZ|4BJv*R>#>}Gipn3y`Y(}Wx;GbZ_91H6rKq+ z)3$=vE1J``J+0R?=WL~|H#D=hy{)%2^QZx?*!II(5ME_)-VU$Png!cISn*-CZC%k^ zrK_#xx~&FQI+(Ru@70#rw5|6vH*JESXl~mq;*@69=4ibZUYBc=Z6dsv`?dhp61EO8 zRL|PF=$dZp^>o#9wt)w$ZGDvOI9ocvXevfSt#woQei9_{!ZOi_I`u(;${$#i^cl~Mg z2W@Nq%=(%psXwP)+Z5r?r`OG2gyWRdlBQ^Js$OV{@t4y%+`n&K?Ew1^Agdmz8iUEN zK}Mb9HzC{UIr!bk{(4JOym+j>v?&SB#6i_ay=Z9nvGswb)NtM3j@(Jt0)G#kb^Sf{ z9e9O7UHJQv2T?z))^{~!zHOP zowdnL#o`6nTLyfhsbYP_U#0Ayt{-cv46pM3)Af^0hr~8L{M?=%gG+4>Ua$xx!c+O=vB^(p>(~*dD%0j*E<)n&l2=8IhR5A+MRboS$engZYWppcdmsB^zANb zXpg?r6#*mkxS~U)`hHhTXs>?I6)zU*hh0gb{rXW?YUrST!j%E*=Cmt2RHHxb%JVGi z&$$Xi+HiKDpLG?B#rkrlwCuEVdp)W|yEn=WHW z)Zcd5LIM4%%Ngp>-*@>!T|Dawg?f3;bu=`pcXC*(1SfchI}Jt?-I=0~54dwe z7x@l%e&}*IALP5-MWIE$*Ig1?qBN4kGVBs2F-tu#PE}D{dzqfIf?3}BM+`5WUogukhAGo z9m(TQx=ly&uwIB<%%5@F#WH@z?S||Xa@Zqf{G8h#&RCCxxe^)jN_RV4v5W4`2TXHJ z?|sTg)cj?4PdKkUqT?6c{i2Rvat{JSJG3mjhr>B0ygKDVWXv>=V9t2NhV10;xJMy# zg#7V{kH71lfIJbh$RiekN$#6sME%{S5iz7`ZyJYLYprPtG^!nD#SyKv=~U|#ZA8;q|Ee~+ z>Abf`8`E^bYuCm%LGHG}SN!+2Nln+9bIBl_gOIxC5n9iS+;Z@4)v27{Z3R7lVy0#KHt7gRx8JzZzJ-IDc ztG1`L6=-$#%(gvRqdljsRBN;6i)Sgf?WOZ%+y3?33R&y47kTb#eTIp)gW8b2q^(AK z)L!1E)ppzWwF%lj`++u#_LyA-+-KLcIkZD|eVd3J(2m$mZ5_aN;BmX#HwNtYjnTQZ ztxG#)Z*S|>p0ang4QS8Wd)kg`&)fUkPG~RK2iwNzEZR1yy<{J5JE^^59~F(-Yxaq@ zGuj*WY0qWtE&FMh1554a+GeyX_Sv?%@Crq_?V@VIcBbvJYQa9=wis4!b?5C1ZA;pF z_N#5n4a9!E?M~HE`%TYGgWP_*?QVn8zS_n$Y_Z>OTWg4IW_|k`5}LVyv>~}UDiG0- z*1Rnc-H_QF7l?Uyw1%AK#6Uc7N+78rzd1dS+ECP-7075PY0eE~HVX+tTguqjy4Q74+Od!hMSKE`Wi-?PXvxNOf-)L zh8m`uCj%o5r<+d(#$lW@FwVK=nZQ)TZ1Y^;RKtAp#lYEyh33oN;fAZti-Gg?Yt2jI z`G)Jw%fL6A?*uM1+-|<>Sp;4KUUf(Vmm2OnA_7-*tRp&bO~*N60ylI~j`+YW-8M&3 zU_}?_NDbW6B|0)hoi4?Z9VEJRN1k{|m*psIyQ|A}6bI$H0!Nu|Ot;5T0q2IVqAPV& z29>(KjzhsMs(lW1Fjl2<=)^wVeupubpz3khg2}3WhclQ4>=Q5O4mv`?OyHxzOx38P zJD8)ZarB8vss+cfV7^Z47z!5Y1jk6QL}zh~2g`L1$5e1%!=U37TqWS(fpFHZ6CG!R zDqX;FK8U~D1W~I5O}Y+)J7^DoxUAivEg`k_R??FG! z!GrDVF^Rtp(cc!lJ-S}UrC?`RiRlI$SAdT@u6a%Czuw^QDq5*QAMByuj$nT{>(`xd z+z1Y0*11YpvYolj{3{{MpBeazxyO7+q|8SwL*%TCm6J{EW>!fyv(fCMB$9oMjUkV) zaqJW1Q8tNvnrvlL+2_b(?04AjknNHZ$(Kp2tXTFciIbURW)d&^sqCjDAqoolTvTGz z>m)I1Z`46j9#s|9M!p{PPSj6`FKQ-gnfznat*BLU3C`wCBE{!dqsSv<6M2;EBb&*7 zQbXP#YVtNYNWMvq5x^9b`8!!U77D#OwH7n$wM z0j8dbXBwCQlg5OYZl;9kWxm6Fh4~@#OXlm6_a*N$HmOBwWtya-)Wmwv#!E4?aR zWWFt3lKuHmY1Y*+jj#grsoF|GKiB!S+qBS}&GO0gixR$NvrNpcnc zqWCw-m$(#eT(Xb*)262+zl-`X>O(1g;!96Lz)F%pp9tQ48*rbHqAWlPNf8FWtP_TX zQDNfCBf_+BS~w@n3iHB(fqTgke5nJ|ZkcbTpB`z9;dHP{Mwn{XSvX_u2Ph z-x&LkM8f`<{V|c@9iejem+UVIhtD!?Vn1Lnk_fyPREc+iMzX(Se@CM5{?A9)KeB&( z@ZY~AjD*?vZ-+98oW$U>PqC61Nep>h5-W)%ad^k(6OvR(DtQv0Yf6yhOY%t~KE?Eu zq)@V(B;hk2$#~DkGjRS&W(!_9%0!4KpdW-JAyvo_vV}aMP$(A4gbJY&_>iC$bb=9J z6P$ui2*JLiLbuQ-9216w5n)`I5>5$ch4aD%;gWDgxCVSfxFxK>z7^q~ffzuQ89;9t zKl~fbQ8S<%WHR0|wPYMPtw#Oa{Bb4Shc@=M1yJenY#V)6iq+-zbBI zVZ*3l0?RavHxF$&h6SiyHC%_2u zDBFmcSjc0fnK;OH;(_uwX@wF8^U*ux3GyzKC&_<+l0g0=86uw}--q%P8HJKWegx%d z@?W7OlOIEQhWryb3+HzpN-F;U&gaMi`87!+zk!lYeh*~_`2&;;a)BZGHq$}A z&U7-JW;vtwxr$`ku%}kS8<}~wDqGrx9KPMXIpP7FqTILtbENQ^_Jq)uzD$#Rk zTpBUp-E&6n^IR5b#5?B9TppK4EL;IsK&<$@j1BLPYvNQ~HEHH*xmwZ!pY0M^#n{iG zemDFUKrA2ukPJv$N9HJ8N)yNuP5&TBfA&6KO;`9Gke7_Fm5sdO^jPge@%C};aZ^I~m45K^- zqdXR)JPxD$35@c1jPeAG^3P$ECt{Q*VU$0OQJ#!Z{tQNW3P$;}80F8AStw~3>(67X zr(>*VV64A@v7U*s{&|e`7cthq0I|-J9E|UmFuuRYJjo6`hqxltxW*2-1Jd6jv1N3QyS23DPFq%u5zi0j)z7I5}%kVjc*D;#QF`D-> zvk=D>%p5aE-r~N(eTD4f4sZv^SGWeQfj)5@Ek?J)=cI&dznL(WaYFR%fKEUUpdZ?% zU^@sH28;qGpzW0OQGJJ{M@atbz&>fV41JfSU*BsP6f!>v+NK|{3=27cd|Nh!{KD%W0t;u+NsKKWRB99QfA|G!} z5vD&0KFOLcocti_3xsnvHGj%F^S{~q9_Xm5tKT~__fBFO$CyS0j1eKGG(y1eM~oCH z28tLaGm|tT4HN-q?%bKl+)Tp!3kFOvBBd!(iYev8yey=AJc>vW5fPC_q?AV~rj$~| zNMk-kj7U?OVvOJ3zk4ScLR`}Iy|>m|t6gX9-`$+M&%Wo+-uvuxoE3ddi;nh7^sekk zP$@eeR3UeGQS)`tu|=o)wH?-XlITn@=sU5f<$9>BHMrP!dQn>son3UHhxq+@qKm;A z@Rx(j%esPfzH^H%p}&2|Zw#&h-@d5xtH_@iT<5n08?MsPv8ekhx)K!ol0PlD$v-%_ zwM+;m`G*8|;F%TN-CuvcjLOWxl(OXDfNLl-8T975fi`X8VtZ=J}gLPXDQp*WVHf_}fBZ?2)_& z@t(kQcp;eMzZ9zGeazoU`%i41yF*r03@u|F{7y{@tx!`!tFZUP_S(2L>e0!h?1veln>Am1mfEe~j&`F;X3s7nyqYNZvE`y)k~T zjNc<;`(%vNS+oz*UWmPq_Cs~{Y&hfcy~ zDSoImp)>08P%GZmh0f!-CUj9<7rM-Tt2TtX*q<=2O<|+DHJqsK2wUJ6F+b4bBF9p7 zcQ}pXoVt%8B4vw4Z;b4b)EIfq!*wdcm+27O? z;VkuZc!YX3oU5J-Pf**#lepg;lXwhjM>t=-64v&HuZlr>zsdzYj>qEC$v7Fk&lqc; zc-%7{j>9qfvTuD!JS{it&*WeduSJZmiIefMlH+46M#jZMmW3Xc;n+lTP@WpxTG3u* zsTmFB9!T#uNgMmJX`R}De_LUzZpm8n%($TukOs2o@|0yzc6 zw91UCT;yqbPEeUyHK8)QY7+1Nm7}ZjIo4HCRt`234=u2|j`pJQ=fxh>1Y=0x|c@_}I+o*Chi z^2~54Y?X7Km|taw=a-KT%b@Y$vhs=H%JM1UX!-Q;(sFCK7E~NwSw1_wI^N#P=Y{J* z&hQ5IuX1mAV|gIFr92$oUS1vE)vv$N`JjARcyIZN@PYDG;X~zX!$)KOR=z&m+`~79 zPk}avTbST`+rn+-JHr?7+!MYO^TG1{;m-1d;qLMy5wXYr$gj$eN0QK=laUmTS>V&DBEdj@WHEAETK~X|NKL>NSq>_R)bX72 z+yzP_YXb8l>jHA5Ay5|C#IZY28QBW?XkLzY1K4W(F=rvjd&c(Sh#h_zE#Pu_7rth4*)USCJB(&OQe@>UYI}sI?+JT3j(S zI-C1mF+4i2A}8wPHLn;O^;YCX13a#Z$a}3z1UsjUhb}QuW_$)H@G*sw-WAf?{*jHB?#K*ZgM;H za@c*$eZqa(eb#-hWUss3-Qm8X2#UF+O-WW#9~qzwENM|P+zYir5=2U-lI>QsQgY~# z6lJtBzGRm&QJJDlSFB30GFzFaI2ErFP{K;JvdldzR!CxnvPxO2tas1ViqfcTR<@Dc zPV|p^#FG4uzer!;d;S}@kZnKof8`!@CizAom78%7nu>eSuj3x{7Tkjl5M)6SZWX*# z2IDsLHr$5Zj@!^Xa2q-Vx1o39Hgp(nLo;z3dKYd(zk%D(;kXU`CT>HsaT|I!ZbL_q z&m9qRgrijM!EIbrD9Gf$mjzzGuu$D=t8$un_ME7qO6wdgTM4JCxvL3b-Gi)V+EM+R$5Z{^KK-MvvY>4gSYp{=G+>_r(7Rx}&8+;uRSE;;)i%afX2kXNyqwe^Au?XJP{ zJKTa+?>4)W={ZZ&&c&VT9w^VfwzxCoh3-sQfxRqsXY+`; zxJSFkyC*uk+*91s-PT?`aT<%A$K&itm4oitT9FrP#XXPh+wFwymbty|0Na8)%r@h$ zX8Uk2lTWx;V6@ZRtK4hRqqWe!UJlAZwiMNf`Pir?surGAHH~Lq9n3TBZgg*UZ*%W- z?{V*UmAVg7yCbCgxcj85(tXC=>OSwPbzh|ZZE#<9cPU0CQL!j#%3x)PlBJArZE)^a za+L|nBqd*&q1coXrIdPHM!npt%!ilNDzZ|hR4P#=-&LtBRcc8Wdo4x;$qn!m8j-Tn z6;)O%^~wfUiL#M&A0)Z?yT#_Yhlmx z%=IkPEL9%sQ9PCFb9fF@IVKl)PQU_lSk}UH&q_% z9jI*ZW_UBb*{){qXzzG#;hpH6;+;;#3LDRJuRv|FceZz)?C?6hUT=U(*jr6D%q7pe z%)7$7ih8}!wbZ-TyIxNBHnN?1H+#2vcY61D_j?a|k9f&zy(eAu-ZNy6Dv!OJqh z=$=9r8kBRqm)-kmZg#n+kjI@;hfwUATXsy%Qb)Mj)LgRXZda!|fg(kUI?3It=94cs zI}fTe%8r#CW50Igt2TMKTB4S!^OYIy41Y4s_C~f!ie?<2I{C9CMH2L{LuwgCDvo!s zU`>)E4Av#zbwRCku2Q39<4dW2ILS3ryh>NO#Zh&ox|;e}uWnE`s$10U>MlgV3+i5u zfa(GD5Pj{ax>{{UIYn_!)MA~oOU2jNg4KHGakY)3nc7C0S@MEaTI53P zN>Pne>S<1ga!)+xyj?#26K{z=i!Y5L)Mnpc-(crvvXutk5MLI@B-ec32&K}OE9dzp z_$GO3eEIS;-wdD4SK=#`XZhy)WO`HPtMr`nMSV+swd}FJmA=)!de>6VI^PE0M&B0S zcHb^vy>GAYfbWp+sIS>~$}RX>h}wJ?e3yKkzV0$n8Bvy0mg3stJLNg&+FLe&q)S~b zp5=Ih-{iO|`Byof9q!Hi%N*B+p5NxoEnDbnDO2$49R0UBu5SKqj<4C>s{cNx&UK*Q z-{_nxYxgymb&#)hx|8`=I__k@ne5a-_G+b--!2FJsT3QBI}i5$a>q@(g@3%9;veWq z(SNn0|5`_0=r1nI(SNCvf#2%%{xT=_i<~{)0J5o(|2|><3!N}!LB+2c1`rC)R>9!P z71Eq7RN9nP} zxg;a!wIJuc2{~^H&MY_MwDNVqkg_nP3}eFY4xI}HgL64O>5Ss66K|f;?X0;TDp>EV zc~~S$`Vvafs9>8$4-dFbN+%lH4-MC-;2=G7u8#_i({rp&c{)wj$T?Sg7Mv%#Nc=RS zf@`Uui=K|JrkRPlj#)af{)K%=>4(%l6#OS>F;PuFw4A7}A6nCg)?FVt%=By^+Vmx~ zRU=2TMi1|}PTEbh@5{-NO3$Y2BRkv9VV#cYbV4J?K<#O#^>Jhnf12p*wPa^IJNMP( z$Rx@pzFnsdqAOQZfzS_``%v;fK{OWy1N$KwPeJCj)OW56vagS3PN3&#qVZos^ls)P zqI_L$;&sxL{%r?3Sf`Di)31+ameA7*T8?LN9K~ej>ra`ejQH8T--@T1l{!D~t7&GG zXlWlE&OYS5mS)xxtt37`ac80SoLS$0f4-E$MAiM!GNKjz(5kCx=7!$beO0`T#miV6 z+t?dlW^TDUe)QN${JO^0B{oOf_)UuK@t>Um7ON6c(-VlQ!0jGcLb=n_#U5slx<`&NNAUMuZYR^F>z#*Yw^;Wqv^HMe&VF}R@y(T6jQ9E%gVZD>GK<#Pio8iq?Kbo>&)w& zXVzs6YC8Cxm14QIM(fu#>(pnBdiE22omdy|jaG{LR$3?Pnz;53ZSDBqR+@V&#c?b7 zopq}&BgRomKh$?$9^Mb-ID7ZkxIMOqro~a;JvO#q{!jMF#m=ku!sX81Juq&+v!2lG z(n|5)dRFJj=B(|y&62%YDVAHWX#Xx0^e4sY!eq^F3sW_J;&ByH{4J#TTbQZ)Ma&QM zxX7`zFk6pv#l1dKI9`ii+`cCU_Vukke$^9Sbl)n}V=>!*;S{ZpJ?-ad{#Hos3;8?r z?Lvxwh4Zw2BQDVx3Q1p~S8w-K@uyE5?^h<)=YHaG56zCFFZe)WyRePVD=4ik&R+jJeR&KlcFy-lqBIW0Eh-ku;eMUS1`3Z{ZSRH0bvmi} zS0Sx)A+1v(&41y={{4+(W8q~YI@{QcM2WrrX0yccX*vzoh<(pCgeXgYj_CD4TP_jB zJKLl<|D!S6^0ofhW@s_XX4Ceb7;#Q%qkPU*s*Tx3d7DkvVi(5`TbZ_}#N=(1uh}RM zvr!&qtJUn$wwj3YDI4WDwvAd|VB4bWq4~2>PGZ}o#baK78|4tT13Dej=A7rw#_gJk zD3`FcXtCSYrpr?fVWS+v)~V%ywr*!nY_^NN`;wjV344lm9_zUWohmC8AEEZb3*CiIU=;DMSN^(lvR0CJrSUPLxA5mMAao zIhkl0Q2~*IXqGNNmuMl8LZlJ}i53&p5G^OFBU(eWj;MiX6VXlW+rpkzRkYVzQ?}be$alze%yZ2e#Y#zx7yF!FWN8LyBtPG zA{C1x%`w<9#F6C~;mCDNa7=RKJ7zd+pb|$Z{ypCzJIWlDpr~W1qt>y~e#Eib>~+*T zHaIqdwm7ysb~*Ms4mb`ujyjqhr>I?vqs?)_ammr?=q?hAl8RD_1{9?i4J{h(s4U7U z8e5cCG`VP6Q9+TTXjakOqJ>3DkxCTgHbskzYKoQ@)fKHNT36Iiw5e!o(GJk=qJ2e8 zpuM7jDJhS{P&*V!21S%`(Q4FO0M-u*kv#7O$mTm};rCM1+Se)s`iK-LlN`lu%@O z*7BP0UCZm1eZo@9AEO*_v$TXkDJ`#>f48qW+ws)AZhNW?Hp> zXBG>0+s#yx?Wy*G_6#bS_H2~V_VM)xpOBYR?_eGjeGP54V20{+H^5r1RDWXZMU3ZiAIWtt#a9e;s;iQ18)trT1+TG*^J1j(YIYV~pnKQ2#B|EFeAa za}Pgnk!GQ{lQ1H!?cI?19(p?tIv0Sy54;;ae-NXS(U$ppOkbd8B>4BC;cIw19rZqF zeh~HL;BNx|0AzCT^-_H0CVb@q@DGC5)oDBu{Z*BEgs@IJI!i0`_A zuL=gESE?hNBrPX=N}{hDgWzuknt&&zb%eDnX}B4<4y|&50;6dOBpan467H0KPIxER z7+RS(e1^B{AwLK54dBND)1dQ1$P5#IOPDUcMd%Ql`76vDeh+*b^-l4RgjSX`Bm(E6 zl@a{wjHXOTEAw5^A>_0YB++Sc*a^u~z;fO^E=G}}fzhDZ9`gnZw0$J~nvrXS z&k|-s{(bHbdU6+!$k>HGWT7StHCgCk7J8Vay+!}C#C96#_ccqFI@pHsm3p+DfSxPB zJIz7J90I-w?80})v2C-wNzxGW`2p}bXnPJbc9=bjB2pu)dLL|6Ls%gAof<;(dhltG zPs6&WaSg4G4>J$s(a{|GFkbj9BYnLU^UpO~VL$f)A3_WqB>jT$LvsOP9qRweXaJIT z`~s`|pX{xuISI)*@PahpSm?=RG}VD`l-8o>)XFpt`hSeJlOg{;_#EJ?nmr?OzJe(F z9=srd>&;i#Hq4uO-lW^Pt?1#|Grz~Y*~+|WH!Ob|?D-Fj2_lczyhd!{-om<;VcsgZ zKje>A%=swbAk6tF;2_NWDBvK>|0v)f_~R(xAgskGAj|&^{eKpk(=m20V#`ionijjv zcOz1bCCuQS7(Qd(@FrGvQo=Vmf!-+b7w>==#kci%cpUv< ztk=-|6JQ6TM+342jzyp0?Fk(@N)(xYfEY3kKFj!E!cgqg?;%FLhnb|E+R!AP!M8p| z{QNu54BoyB$=kqZBXW+Co+kdhID_z_=)u}?6di}}jsu?n{0YW;6lj$GMk7j;RP67p zXDqUmOw3h2zVZ(62;_eY4ZqbQC%$e2{*BkdFdUI{4&wP+;8z0|NR(k3XF-1nR&5CM zw4w%)-*5_81^KN!YQq(=0%NQq%oa~@Jb}y$7|}=EPs0XiXyCC+<9L>&EJo9FY?Bn1 zNSo;s=EV^B5ck|<$0`p(r24xaso1W*&e}|Oa1UuWeFofu`Uj!mUa^+&Q{clA z`M6O;-)_ejUxEBK@oly@=)3}~Mg8BPArIP)gMSS52cWz@4l_RjydRhiOaeX%e3nqlbsdl# z3v`%AaKvNY@OvGzfl0tefh^;Md>ypap~i}uc@oFiM6^xhuM=hilYox`S^i!~&V}Ub z8X}il06h!Pb02u0&SwLYfR6%85NGDnEIokSyBj*Yq3sn-r?`bJ9C}Kirv!RRpr-_S zN-!HGtj#o)B~69EN73^(=xGE0Hu$&E|6%5LFdG_bBYg+G0!qoy`3~CN59InPiB5b* z3-A^?({nt05K)ezgs~9yKVvk!4c;x~!@C)`qUHo7Z^1~@#qEUE%o~l2rs?1p0Daub zbTcFEKHN4HtzL)z3#d`q6OAR(1lTao;VPan^JE^WxrtHy4{jy?oik+VBj(M^kagUP zIgDa%jgX&=wkP4g<8k(}@p+c!Y5`_x0cL3dW@!OdY5``6`M1!Y#~^P4KMeEiW2D)G z^-6_orF?RyQSe^yGjTuFr0aI8S!NQfQM1WxSXUCC*RZCUs9yk`-N09L_)$qz^#yfPuLiz~^YUe!j(^2jpZEZBzt?o$$jF%+VKZv(!du!|%=cpceUMBB-e-;w z?uUkzz>hU#4TR08VGS=q^5HbC=0@W=SnY?>r> zv+tmO4C@ika{oo--s0mLqW*F8_Hp#~arCy1dnH!z+1dPm&`LnYn2xdI+-)iX?na*Q zD~xC@PSDRH6FUO^BQ?ZVM&c_Y@s*K~Kf<#rKF!}UkChe!58-BmTiv1|Y6>wMmoa0V z(tGfQJXp1cY@a!Nb|!nH8nY_FHo&_vq6mB{0{K5mA7Vu`K&@PB0)@n)Qzn;_H7@=_9f z=MLbbI1B$0r{If>(jd;$q$syCPr_FwL+5X>KfVjiFF{)k(84EfaTngc0B=eIex2Xm zfSaPk**JN9!BJXT!0|2NO~mkN%p3oVv-!R7sV?}-^O_f<#taRgvChQV;s$DUGj@T0 za1Uwbd38SLb2P=PL0FejKt5k@!1?-rGf$GEfP>)aqkx03UZa5A_60M?ffn=uHx**B zIi2@7#H+V~5yX&8K8cI(^XXgM!ASccTi0Rp3$Szc@h0$H7{&8w+k)8mGS`@obF46X zQ2!=yA>u;|+I|=Kal$>oTHXPX|9r+RI zd01Bmc#=2ILj7Ynf4zni-vapBU(AEB_ffrslPvilpO4-`PW1^(iccaAEaPlHVIBOj zlh@H)fYtmd*O(uacz)9PR7)1lF%5Tp#^)Im*6|)>I?mo_3i2tNkVml#{4RL+a^|V6 zhWvIU-rfPv()bAXK^((hp}mz(Wa31e%l?S_oMuMypck=|c3=&2TK~9;u!X!Nca!!C*haF6_6YT67>@N3bGHa7rrbj&$3(V-@klNs z1_`J`<9Vz|eEUr(zrY&*fcfEouL=)E=7EzC=Os)%2$gA)v;x1=4Y!8EyMp}$9t=0W z`VZQW8*|zXN&DdB>5lQs3#DHPjnHBrIO=_oZHYn}3XBf~p%^9o z?*Zp_eNWetn%5dNqc(%uiX!8YJ~7`MaWNl+{c!8wB9y$~UKRS?*dDDiOF57|yKx0} zBQJYXx+b*BEOz~5;_I`?V4qu17HZ*IcF<>q|Jm=Sv3~?sB)X9fYD-)*kyec&g@M(^ zWQky!IrJbcHPC%}HNocuyKAu6PX$I{iYQ-0 zJ?a@H%9{2;=9$543vKRlODPp4%*E>4NAO2vM)Srk)oq{$m?-z-%O24Xt>DB1gvsIS zCljOJkH?%-)^cZxP3Tk@iJCxrXfe3O4AG;$I-ug=D#Wh%Q4W&J-*;b&Y8IxqFRywl z8Vl-Pb?;1)1?uzxZI-AD@xE!SlSrNWFi1tgTPGJq#p5 zD4%8d95g}R3^ajNNSAGv&<#q5EU_FyaEF;lMgBA^h8&V5{iC|N!|gdPuzo(eNOVe6 zL}d^!2VM&F;8ZQaXGO26`yl#c#5_QM+95(0!^J*SLR6bA>>UQu-|)?-|q~mzN%?j70K*Ef+@Z%^WcM)Z)}5) z#!>vim)|WgRLMFw9}4 z7!Jj&;gx#iqitLoq8r1pbAoOZiHNVOp6;-l@HV^ZGlx+-2uHfzcSXgyp72*tJAG_B z3cbr7yeMpI5I)JK=ye{j=q#u+v5p(BbZ(R1$EY4_Lhbrii3~$h0Qa3RK8T!+Sh%&C z<~t}8VPj>ExW4i}(HkMIt3}TB$KvY(*jryeYggI91?G_IK9FXqPmVskBq3Kx$mO9o zgZPbKmd*hH%4aZNXTz`7H0G3PlK~%fWBEx4exL!=Q|^|i=G&!HG*1G9*h<(lOLySW zA=?<9U`Pm2x@=&I$2l?hOI0Tik-dTBxY*HJ1TL=^VQ*&F@ZG`N0p9c>9t+;~?8e7H6>n)1%g zOSDikgVq1*`V)gU&$7JN6y_HmhSHrYtk)mTIYp(EhiS-p_En`tq~Mp)M_5LlG~?%z zRcMods*S3&$K=xWg(BwCA{5f-;`_kFQQjf&9~PU!G}Yzj&U^4L8|ln zL8@`3b%m?mgFDEyM;V}VOB7f(eG99TJDe*h_?N{ZdA9{WoeX8TmDOX8F+|F$(F)WDlFV0nlJV4-#g@ z;>!fah};=a?2dF^^6N&2ZXBIb=J$0N-YrrI&m8{Sq63gHt4GOFn-$T7 zTn68{oTW)lAC}mp6tL)qg3byR0STb76X!B$(1XdS=M$ijv#urBa}Dw%f{UWg$E2>3 zRbr8tS5pJ$CQMA=2E_@|Lj_;)_|b;98ba=0C-O7y9J-10K2$60^q9OOb4kNWu4QpL zfcNzyc?VDpQ8$aB+7g+(!n5R)lIO(>cksZLhZNtCFwYA>p8m*`h%_H;j}se++id5H z5A)LJm^QRY{zpmM^V7=j_X8HdL!uF=e{Ozy@{>Pr@k9)81$4rrmtd2a_Fhm_G=W&f z{RjnkQzo;8jnzKB-h~OEm88#i6j9`Zx+N&%3_Hp58R507eHwW*10Gf78Trl@w4v

    P9HFKe;mtRCG`84K6fE0_{p_Y9GdQ| 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

    >E?;~EWF&~xn4}C-N#;0 zUT637y1To%P&J7=Y4)PMy%Qa(@mV;K@?8H<^rW-BbfiC*eK#Hs#@78Um2sM$B(0h| zW3hc^SzRud^T~9USIfKQb^W&U)AjW%FFQXkt3prc)bDijRJqm9bXm-!s4` zyUTt*TmS>v-Itx3?LMB~ME+DSyLET^(N})_sah8Id08DkpuL(qJv1lb_ohR$nh0X${EXUtfmn@c6WzeHpISfE@nyWw;KHPwUy2;c5-Y z;a^{d>+txro;@^NN6+&kootT9T4^9l32H2v;P($rd3uMd2H)VbrbchCSG>HLUjo_U{Af)Hd7$-rgq&lgy{;`c$-Ru*PqMw76~cc;Y_n$F~)lVbi~y z@TdM-!a!$>>H7~K&*j~@hP9{f?T68av+xHNjCp_N(#bFDiTip|9?jG>@=KRse!9i* E2MM2)DgXcg literal 0 HcmV?d00001 diff --git a/main/main.c b/main/main.c index 5001e4c..a50ee48 100644 --- a/main/main.c +++ b/main/main.c @@ -34,6 +34,7 @@ #include #include "thing_speak.h" +#include "baycom.h" #include "meas_intervals.h" #include "meas_continuous.h" @@ -42,6 +43,7 @@ #include "ctrl_btn.h" #include "bmx280.h" #include "pmsx003.h" +#include "mhz19.h" #include "oap_common.h" #include "oap_storage.h" #include "oap_debug.h" @@ -133,24 +135,6 @@ static void pm_meter_output_handler(pm_meter_event_t event, void* data) { } } -//TODO share -static void set_gpio(uint8_t gpio, uint8_t enabled) { - if (gpio > 0) { - ESP_LOGD(TAG, "set pin %d => %d", gpio, enabled); - gpio_set_level(gpio, enabled); - } -} - -//TODO share -static void configure_gpio(uint8_t gpio) { - if (gpio > 0) { - ESP_LOGD(TAG, "configure pin %d as output", gpio); - gpio_pad_select_gpio(gpio); - ESP_ERROR_CHECK(gpio_set_direction(gpio, GPIO_MODE_OUTPUT)); - ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); - } -} - static void pmsx003_enable_0(uint8_t enable) { if (oap_sensor_config.heater) { set_gpio(pm_meter_aux.heater_pin, enable); @@ -229,10 +213,6 @@ static esp_err_t pm_meter_init() { return ESP_OK; } - - - - //--------- ENV ----------- typedef struct { @@ -240,15 +220,22 @@ typedef struct { long timestamp; } env_data_record_t; -static env_data_record_t last_env_data[2]; +static env_data_record_t last_env_data[3]; static bmx280_config_t bmx280_config[2]; +static mhz19_config_t mhz19_cfg; +static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { - if (env_data->sensor_idx <= 1) { - ESP_LOGI(TAG,"env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity); - env_data_record_t* r = last_env_data + env_data->sensor_idx; - r->timestamp = oap_epoch_sec(); - memcpy(&last_env_data->env_data, env_data, sizeof(env_data_t)); + if (env_data->sensor_idx <= 2) { + if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 100 ) == pdTRUE ) { + ESP_LOGI(TAG,"env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); + env_data_record_t* r = last_env_data + env_data->sensor_idx; + r->timestamp = oap_epoch_sec(); + memcpy(r, env_data, sizeof(env_data_t)); + xSemaphoreGiveRecursive(envSemaphore); + } else { + ESP_LOGW(TAG,"*** env waiting too long for mutex ***"); + } } else { ESP_LOGE(TAG, "env (%d) - invalid sensor", env_data->sensor_idx); } @@ -257,10 +244,12 @@ static void env_sensor_callback(env_data_t* env_data) { static void env_sensors_init() { memset(&last_env_data, 0, sizeof(env_data_record_t)*2); memset(bmx280_config, 0, sizeof(bmx280_config_t)*2); + envSemaphore = xSemaphoreCreateRecursiveMutex(); if (bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { bmx280_config[0].interval = 5000; bmx280_config[0].callback = &env_sensor_callback; + bmx280_config[0].height = oap_sensor_config.height; if (bmx280_init(&bmx280_config[0]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 0); @@ -270,15 +259,20 @@ static void env_sensors_init() { if (bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { bmx280_config[1].interval = 5000; bmx280_config[1].callback = &env_sensor_callback; + bmx280_config[1].height = oap_sensor_config.height; if (bmx280_init(&bmx280_config[1]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } + if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { + mhz19_cfg.interval = 5000; + mhz19_cfg.callback = &env_sensor_callback; + mhz19_init(&mhz19_cfg); + mhz19_enable(&mhz19_cfg, 1); + } } - - //--------- MAIN ----------- list_t* publishers; @@ -303,7 +297,7 @@ static void publish_loop() { log_task_stack(TAG); float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); //ESP_LOGI(TAG, "AQI=%f",aqi); - ledc_set_color(aqi,(1-aqi), 0); +// ledc_set_color(aqi,(1-aqi), 0); ledc_set_mode(LED_SET); ledc_update(); @@ -312,6 +306,7 @@ static void publish_loop() { .pm_aux = pm_data_pair.count == 2 ? &pm_data_pair.pm_data[1] : NULL, .env = sysTime - last_env_data[0].timestamp < 60 ? &last_env_data[0].env_data : NULL, .env_int = sysTime - last_env_data[1].timestamp < 60 ? &last_env_data[1].env_data : NULL, + .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, .local_time = localTime }; @@ -333,6 +328,7 @@ static oap_sensor_config_t sensor_config_from_json(cJSON* sconfig) { if ((field = cJSON_GetObjectItem(sconfig, "measInterval"))) sensor_config.meas_interval = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "measStrategy"))) sensor_config.meas_strategy = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "test"))) sensor_config.test = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "height"))) sensor_config.height = field->valueint; return sensor_config; } @@ -344,6 +340,9 @@ void publishers_init() { if (thingspeak_publisher.configure(storage_get_config("thingspeak")) == ESP_OK) { list_insert(publishers, &thingspeak_publisher); } + if (BayCom_publisher.configure(storage_get_config(NULL)) == ESP_OK) { + list_insert(publishers, &BayCom_publisher); + } } @@ -357,6 +356,12 @@ static void btn_handler(btn_action_t action) { case TOO_MANY_CLICKS : reset_to_factory_partition(); break; + case LONG_PRESS : + ESP_LOGW(TAG, "config reset!"); + storage_clean(); + delay(1000); + oap_reboot("reboot due to config reset"); + break; default: break; } @@ -388,6 +393,7 @@ void app_main() { pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_init(); env_sensors_init(); + publishers_init(); publish_loop(); From b8420d49d0d3ea31e2f323ce068774362d1999b9 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 11:26:40 +0100 Subject: [PATCH 101/200] add temperature from mh-z19, make rgb led configurable, add hexdump function --- components/oap-common/include/oap_debug.h | 1 + components/oap-common/oap_debug.c | 8 ++++++++ components/oap-hw-mhz19/mhz19.c | 6 +++++- main/Kconfig.projbuild | 8 +++++++- main/main.c | 4 +++- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_debug.h b/components/oap-common/include/oap_debug.h index 672c685..d798f00 100644 --- a/components/oap-common/include/oap_debug.h +++ b/components/oap-common/include/oap_debug.h @@ -35,3 +35,4 @@ size_t avg_free_heap_size(); void log_task_stack(const char* task); void log_heap_size(const char* msg); void reduce_heap_size_to(size_t size); +void hexdump(const unsigned char *data, int len); diff --git a/components/oap-common/oap_debug.c b/components/oap-common/oap_debug.c index 6fc3d14..b2150b7 100644 --- a/components/oap-common/oap_debug.c +++ b/components/oap-common/oap_debug.c @@ -154,3 +154,11 @@ void heap_log_free(heap_log* log) { ESP_LOGD("debug", "----------> leaked : %d", xPortGetFreeHeapSize() - initial_heap); } } + +void hexdump(const unsigned char *data, int len) { + char str[80]; + for(int i=0;icallback) { env_data_t result = { .sensor_idx = config->sensor_idx, + .temp = t, .co2 = co2val }; config->callback(&result); diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index d108032..40a1647 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -7,4 +7,10 @@ config OAP_CONTROL_PANEL Enable web-based control panel where you can configure various parameters of the sensor, including wifi and data publishing settings -endmenu \ No newline at end of file +config OAP_RGB_LED + bool "enable air quality RGB-LED" + default y + help + Enable air quality RGB-LED. If set to disable the only the blue channel is being used. +endmenu + diff --git a/main/main.c b/main/main.c index a50ee48..5eb9672 100644 --- a/main/main.c +++ b/main/main.c @@ -296,8 +296,10 @@ static void publish_loop() { if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 10000)) { log_task_stack(TAG); float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); +#ifdef CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); -// ledc_set_color(aqi,(1-aqi), 0); + ledc_set_color(aqi,(1-aqi), 0); +#endif ledc_set_mode(LED_SET); ledc_update(); From 3206b39fe5c9756b318321913d18e67bdb8f623d Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 11:26:40 +0100 Subject: [PATCH 102/200] add temperature from mh-z19, make rgb led configurable, add hexdump function --- components/oap-common/include/oap_debug.h | 1 + components/oap-common/oap_debug.c | 8 ++++++++ components/oap-hw-mhz19/mhz19.c | 6 +++++- main/Kconfig.projbuild | 8 +++++++- main/main.c | 4 +++- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_debug.h b/components/oap-common/include/oap_debug.h index 672c685..d798f00 100644 --- a/components/oap-common/include/oap_debug.h +++ b/components/oap-common/include/oap_debug.h @@ -35,3 +35,4 @@ size_t avg_free_heap_size(); void log_task_stack(const char* task); void log_heap_size(const char* msg); void reduce_heap_size_to(size_t size); +void hexdump(const unsigned char *data, int len); diff --git a/components/oap-common/oap_debug.c b/components/oap-common/oap_debug.c index 6fc3d14..b2150b7 100644 --- a/components/oap-common/oap_debug.c +++ b/components/oap-common/oap_debug.c @@ -154,3 +154,11 @@ void heap_log_free(heap_log* log) { ESP_LOGD("debug", "----------> leaked : %d", xPortGetFreeHeapSize() - initial_heap); } } + +void hexdump(const unsigned char *data, int len) { + char str[80]; + for(int i=0;icallback) { env_data_t result = { .sensor_idx = config->sensor_idx, + .temp = t, .co2 = co2val }; config->callback(&result); diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index d108032..40a1647 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -7,4 +7,10 @@ config OAP_CONTROL_PANEL Enable web-based control panel where you can configure various parameters of the sensor, including wifi and data publishing settings -endmenu \ No newline at end of file +config OAP_RGB_LED + bool "enable air quality RGB-LED" + default y + help + Enable air quality RGB-LED. If set to disable the only the blue channel is being used. +endmenu + diff --git a/main/main.c b/main/main.c index a50ee48..5eb9672 100644 --- a/main/main.c +++ b/main/main.c @@ -296,8 +296,10 @@ static void publish_loop() { if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 10000)) { log_task_stack(TAG); float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); +#ifdef CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); -// ledc_set_color(aqi,(1-aqi), 0); + ledc_set_color(aqi,(1-aqi), 0); +#endif ledc_set_mode(LED_SET); ledc_update(); From f96160a9143d7654b15a6ff36452595b570dc829 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 12:17:56 +0100 Subject: [PATCH 103/200] reset MH-Z19 sensor and check values for sanity --- components/oap-common/oap_debug.c | 1 + components/oap-hw-mhz19/mhz19.c | 21 +++++++++++++++++++-- main/main.c | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/components/oap-common/oap_debug.c b/components/oap-common/oap_debug.c index b2150b7..c42f0c3 100644 --- a/components/oap-common/oap_debug.c +++ b/components/oap-common/oap_debug.c @@ -157,6 +157,7 @@ void heap_log_free(heap_log* log) { void hexdump(const unsigned char *data, int len) { char str[80]; + str[0]=0; for(int i=0;icallback) { + if (config->callback && co2val > 410 && co2val < 2000) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, @@ -134,6 +134,23 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); + // reset sensor + uint8_t packet_reset[9]={0xff, 0x01, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72}; + mhz19_check(packet_reset); + int len=uart_write_bytes(config->uart_num, (const char *)packet_reset, sizeof(packet_reset)); + if(len!=9) { + ESP_LOGW(TAG, "MH-Z19 reset failed"); + return ESP_FAIL; + } + // set range to 2000ppm + uint8_t packet_range[9]={ 0xff, 0x01, 0x99, 0x00, 0x00, 0x00, 0x07, 0xd0, 0x8f}; + mhz19_check(packet_range); + len=uart_write_bytes(config->uart_num, (const char *)packet_range, sizeof(packet_range)); + if(len!=9) { + ESP_LOGW(TAG, "MH-Z19 set range failed"); + return ESP_FAIL; + } + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo diff --git a/main/main.c b/main/main.c index 5eb9672..6b157a8 100644 --- a/main/main.c +++ b/main/main.c @@ -266,7 +266,7 @@ static void env_sensors_init() { } } if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { - mhz19_cfg.interval = 5000; + mhz19_cfg.interval = 1000; mhz19_cfg.callback = &env_sensor_callback; mhz19_init(&mhz19_cfg); mhz19_enable(&mhz19_cfg, 1); From e78fd2678f29039af03be27d948dc88f917f8abc Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 12:17:56 +0100 Subject: [PATCH 104/200] reset MH-Z19 sensor and check values for sanity --- components/oap-common/oap_debug.c | 1 + components/oap-hw-mhz19/mhz19.c | 21 +++++++++++++++++++-- main/main.c | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/components/oap-common/oap_debug.c b/components/oap-common/oap_debug.c index b2150b7..c42f0c3 100644 --- a/components/oap-common/oap_debug.c +++ b/components/oap-common/oap_debug.c @@ -157,6 +157,7 @@ void heap_log_free(heap_log* log) { void hexdump(const unsigned char *data, int len) { char str[80]; + str[0]=0; for(int i=0;icallback) { + if (config->callback && co2val > 410 && co2val < 2000) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, @@ -134,6 +134,23 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); + // reset sensor + uint8_t packet_reset[9]={0xff, 0x01, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72}; + mhz19_check(packet_reset); + int len=uart_write_bytes(config->uart_num, (const char *)packet_reset, sizeof(packet_reset)); + if(len!=9) { + ESP_LOGW(TAG, "MH-Z19 reset failed"); + return ESP_FAIL; + } + // set range to 2000ppm + uint8_t packet_range[9]={ 0xff, 0x01, 0x99, 0x00, 0x00, 0x00, 0x07, 0xd0, 0x8f}; + mhz19_check(packet_range); + len=uart_write_bytes(config->uart_num, (const char *)packet_range, sizeof(packet_range)); + if(len!=9) { + ESP_LOGW(TAG, "MH-Z19 set range failed"); + return ESP_FAIL; + } + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo diff --git a/main/main.c b/main/main.c index 5eb9672..6b157a8 100644 --- a/main/main.c +++ b/main/main.c @@ -266,7 +266,7 @@ static void env_sensors_init() { } } if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { - mhz19_cfg.interval = 5000; + mhz19_cfg.interval = 1000; mhz19_cfg.callback = &env_sensor_callback; mhz19_init(&mhz19_cfg); mhz19_enable(&mhz19_cfg, 1); From f8c16d8a451626deccef3ada4498541d0b0d2fa5 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 12:36:10 +0100 Subject: [PATCH 105/200] fix description for altitude --- components/oap-wifi/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index e0bce31..4f56633 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -188,7 +188,7 @@

    OpenAirProject Sensor - +

    ptQnFyxr)6+9kw~hpJCfs?z;UE0S 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

    From fa0909c11e43f87f09cb3d57695802c81e53555b Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 12:36:10 +0100 Subject: [PATCH 106/200] fix description for altitude --- components/oap-wifi/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index e0bce31..4f56633 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -188,7 +188,7 @@

    OpenAirProject Sensor
    - +

    From d24de151dded25e9123de52fe6da1f12bdfa73d7 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 14:24:29 +0100 Subject: [PATCH 107/200] setup sensor with ABC logic on and range of 2000ppm --- components/oap-hw-mhz19/mhz19.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index ae2b667..87ae24d 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -134,8 +134,8 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); - // reset sensor - uint8_t packet_reset[9]={0xff, 0x01, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72}; + // set ABC logic on (0xa0) / off (0x00) + uint8_t packet_reset[9]={0xff, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; mhz19_check(packet_reset); int len=uart_write_bytes(config->uart_num, (const char *)packet_reset, sizeof(packet_reset)); if(len!=9) { @@ -143,7 +143,8 @@ esp_err_t mhz19_init(mhz19_config_t* config) { return ESP_FAIL; } // set range to 2000ppm - uint8_t packet_range[9]={ 0xff, 0x01, 0x99, 0x00, 0x00, 0x00, 0x07, 0xd0, 0x8f}; + int range = 2000; + uint8_t packet_range[9]={ 0xff, 0x01, 0x99, range>>8, range&0xff, 0x00, 0x00, 0x00, 0x00}; mhz19_check(packet_range); len=uart_write_bytes(config->uart_num, (const char *)packet_range, sizeof(packet_range)); if(len!=9) { From 3b23844fefa2111f6569638c1370903a8491ed5a Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 14:24:29 +0100 Subject: [PATCH 108/200] setup sensor with ABC logic on and range of 2000ppm --- components/oap-hw-mhz19/mhz19.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index ae2b667..87ae24d 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -134,8 +134,8 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); - // reset sensor - uint8_t packet_reset[9]={0xff, 0x01, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72}; + // set ABC logic on (0xa0) / off (0x00) + uint8_t packet_reset[9]={0xff, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; mhz19_check(packet_reset); int len=uart_write_bytes(config->uart_num, (const char *)packet_reset, sizeof(packet_reset)); if(len!=9) { @@ -143,7 +143,8 @@ esp_err_t mhz19_init(mhz19_config_t* config) { return ESP_FAIL; } // set range to 2000ppm - uint8_t packet_range[9]={ 0xff, 0x01, 0x99, 0x00, 0x00, 0x00, 0x07, 0xd0, 0x8f}; + int range = 2000; + uint8_t packet_range[9]={ 0xff, 0x01, 0x99, range>>8, range&0xff, 0x00, 0x00, 0x00, 0x00}; mhz19_check(packet_range); len=uart_write_bytes(config->uart_num, (const char *)packet_range, sizeof(packet_range)); if(len!=9) { From 298a9c1af123d2cecde2df2816984ae05c15a88f Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 21:48:21 +0100 Subject: [PATCH 109/200] add configurable offsets for temperature and humidity --- components/oap-baycom/component.mk | 1 + components/oap-common/default_config.json | 4 +++- components/oap-common/include/oap_data.h | 4 +++- components/oap-common/include/oap_data_env.h | 2 +- components/oap-hw-bmx280/bmx280.c | 10 ++++++---- components/oap-hw-bmx280/include/bmx280.h | 5 +++-- components/oap-ota/component.mk | 5 ++++- components/oap-wifi/index.html | 10 +++++++++- main/main.c | 12 +++++++++--- 9 files changed, 39 insertions(+), 14 deletions(-) diff --git a/components/oap-baycom/component.mk b/components/oap-baycom/component.mk index 5548fec..5da1cf0 100644 --- a/components/oap-baycom/component.mk +++ b/components/oap-baycom/component.mk @@ -6,4 +6,5 @@ # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. # +# stb.42u.de COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-common/default_config.json b/components/oap-common/default_config.json index e49b956..d173d63 100644 --- a/components/oap-common/default_config.json +++ b/components/oap-common/default_config.json @@ -30,7 +30,9 @@ "measInterval": 300, "test" : 0, "measStrategy" : 0, - "height" : 573 + "height" : 0, + "tempOffset" : 0, + "humidityOffset" : 0 } }, "baycom": { diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 4eb4f99..73fe28b 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -46,7 +46,9 @@ typedef struct { int meas_interval; int meas_strategy; //interval, continuos, etc int test; - int height; + int altitude; + int tempOffset; + int humidityOffset; } oap_sensor_config_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index a92e614..ba5ca5e 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -29,7 +29,7 @@ typedef struct { double sealevel; double humidity; uint32_t co2; - uint32_t height; + uint32_t altitude; uint8_t sensor_idx; } env_data_t; diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 5ab7881..33e2587 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -35,12 +35,12 @@ #include "i2c_bme280.h" static char* TAG = "bmx280"; -static float getPressureAtSeaLevel(float height, float pressure) +static float getPressureAtSeaLevel(float altitude, float pressure) { float gradient = 0.0065; float tempAtSea = 15.0; tempAtSea += 273.15; // °C to K - return pressure / pow((1 - gradient * height / tempAtSea), (0.03416 / gradient)); + return pressure / pow((1 - gradient * altitude / tempAtSea), (0.03416 / gradient)); } esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { @@ -64,8 +64,10 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { while(1) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { - result.sealevel = getPressureAtSeaLevel(bmx280_config->height, result.pressure); - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->height, result.humidity); + result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); + result.temp += bmx280_config->tempOffset; + result.humidity += bmx280_config->humidityOffset; + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); if (bmx280_config->callback) { bmx280_config->callback(&result); } diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 11a43f9..9ba21ff 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -49,8 +49,9 @@ typedef struct bmx280_config_t { uint8_t sensor_idx; //sensor number (0 - 1) uint32_t interval; env_callback callback; - uint32_t height; - + uint32_t altitude; + uint32_t tempOffset; + uint32_t humidityOffset; } bmx280_config_t; esp_err_t bmx280_init(bmx280_config_t* config); diff --git a/components/oap-ota/component.mk b/components/oap-ota/component.mk index 5ee3370..0b87fb7 100644 --- a/components/oap-ota/component.mk +++ b/components/oap-ota/component.mk @@ -11,4 +11,7 @@ #COMPONENT_EMBED_TXTFILES = digicert_ca.pem # openairproject.com (CloudFront) -COMPONENT_EMBED_TXTFILES = comodo_ca.pem +#COMPONENT_EMBED_TXTFILES = comodo_ca.pem + +# stb.42u.de +COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 4f56633..b295d6c 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -189,7 +189,15 @@

    OpenAirProject Sensor
    - + + + + + + + + + diff --git a/main/main.c b/main/main.c index 6b157a8..2800da6 100644 --- a/main/main.c +++ b/main/main.c @@ -249,7 +249,9 @@ static void env_sensors_init() { if (bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { bmx280_config[0].interval = 5000; bmx280_config[0].callback = &env_sensor_callback; - bmx280_config[0].height = oap_sensor_config.height; + bmx280_config[0].altitude = oap_sensor_config.altitude; + bmx280_config[0].tempOffset = oap_sensor_config.tempOffset; + bmx280_config[0].humidityOffset = oap_sensor_config.humidityOffset; if (bmx280_init(&bmx280_config[0]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 0); @@ -259,7 +261,9 @@ static void env_sensors_init() { if (bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { bmx280_config[1].interval = 5000; bmx280_config[1].callback = &env_sensor_callback; - bmx280_config[1].height = oap_sensor_config.height; + bmx280_config[1].altitude = oap_sensor_config.altitude; + bmx280_config[1].tempOffset = oap_sensor_config.tempOffset; + bmx280_config[1].humidityOffset = oap_sensor_config.humidityOffset; if (bmx280_init(&bmx280_config[1]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); @@ -330,7 +334,9 @@ static oap_sensor_config_t sensor_config_from_json(cJSON* sconfig) { if ((field = cJSON_GetObjectItem(sconfig, "measInterval"))) sensor_config.meas_interval = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "measStrategy"))) sensor_config.meas_strategy = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "test"))) sensor_config.test = field->valueint; - if ((field = cJSON_GetObjectItem(sconfig, "height"))) sensor_config.height = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "altitude"))) sensor_config.altitude = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "tempOffset"))) sensor_config.tempOffset = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "humidityOffset"))) sensor_config.humidityOffset = field->valueint; return sensor_config; } From 16026eca01139e8affd173c5a49683378e07af91 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 21:48:21 +0100 Subject: [PATCH 110/200] add configurable offsets for temperature and humidity --- components/oap-baycom/component.mk | 1 + components/oap-common/include/oap_data.h | 4 +++- components/oap-common/include/oap_data_env.h | 2 +- components/oap-hw-bmx280/bmx280.c | 10 ++++++---- components/oap-hw-bmx280/include/bmx280.h | 5 +++-- components/oap-ota/component.mk | 5 ++++- components/oap-wifi/index.html | 10 +++++++++- main/main.c | 12 +++++++++--- 8 files changed, 36 insertions(+), 13 deletions(-) diff --git a/components/oap-baycom/component.mk b/components/oap-baycom/component.mk index 5548fec..5da1cf0 100644 --- a/components/oap-baycom/component.mk +++ b/components/oap-baycom/component.mk @@ -6,4 +6,5 @@ # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. # +# stb.42u.de COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 4eb4f99..73fe28b 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -46,7 +46,9 @@ typedef struct { int meas_interval; int meas_strategy; //interval, continuos, etc int test; - int height; + int altitude; + int tempOffset; + int humidityOffset; } oap_sensor_config_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index a92e614..ba5ca5e 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -29,7 +29,7 @@ typedef struct { double sealevel; double humidity; uint32_t co2; - uint32_t height; + uint32_t altitude; uint8_t sensor_idx; } env_data_t; diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 5ab7881..33e2587 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -35,12 +35,12 @@ #include "i2c_bme280.h" static char* TAG = "bmx280"; -static float getPressureAtSeaLevel(float height, float pressure) +static float getPressureAtSeaLevel(float altitude, float pressure) { float gradient = 0.0065; float tempAtSea = 15.0; tempAtSea += 273.15; // °C to K - return pressure / pow((1 - gradient * height / tempAtSea), (0.03416 / gradient)); + return pressure / pow((1 - gradient * altitude / tempAtSea), (0.03416 / gradient)); } esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { @@ -64,8 +64,10 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { while(1) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { - result.sealevel = getPressureAtSeaLevel(bmx280_config->height, result.pressure); - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->height, result.humidity); + result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); + result.temp += bmx280_config->tempOffset; + result.humidity += bmx280_config->humidityOffset; + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); if (bmx280_config->callback) { bmx280_config->callback(&result); } diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 11a43f9..9ba21ff 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -49,8 +49,9 @@ typedef struct bmx280_config_t { uint8_t sensor_idx; //sensor number (0 - 1) uint32_t interval; env_callback callback; - uint32_t height; - + uint32_t altitude; + uint32_t tempOffset; + uint32_t humidityOffset; } bmx280_config_t; esp_err_t bmx280_init(bmx280_config_t* config); diff --git a/components/oap-ota/component.mk b/components/oap-ota/component.mk index 5ee3370..0b87fb7 100644 --- a/components/oap-ota/component.mk +++ b/components/oap-ota/component.mk @@ -11,4 +11,7 @@ #COMPONENT_EMBED_TXTFILES = digicert_ca.pem # openairproject.com (CloudFront) -COMPONENT_EMBED_TXTFILES = comodo_ca.pem +#COMPONENT_EMBED_TXTFILES = comodo_ca.pem + +# stb.42u.de +COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 4f56633..b295d6c 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -189,7 +189,15 @@

    OpenAirProject Sensor
    - + + + + + + + + + diff --git a/main/main.c b/main/main.c index 6b157a8..2800da6 100644 --- a/main/main.c +++ b/main/main.c @@ -249,7 +249,9 @@ static void env_sensors_init() { if (bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { bmx280_config[0].interval = 5000; bmx280_config[0].callback = &env_sensor_callback; - bmx280_config[0].height = oap_sensor_config.height; + bmx280_config[0].altitude = oap_sensor_config.altitude; + bmx280_config[0].tempOffset = oap_sensor_config.tempOffset; + bmx280_config[0].humidityOffset = oap_sensor_config.humidityOffset; if (bmx280_init(&bmx280_config[0]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 0); @@ -259,7 +261,9 @@ static void env_sensors_init() { if (bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { bmx280_config[1].interval = 5000; bmx280_config[1].callback = &env_sensor_callback; - bmx280_config[1].height = oap_sensor_config.height; + bmx280_config[1].altitude = oap_sensor_config.altitude; + bmx280_config[1].tempOffset = oap_sensor_config.tempOffset; + bmx280_config[1].humidityOffset = oap_sensor_config.humidityOffset; if (bmx280_init(&bmx280_config[1]) != ESP_OK) { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); @@ -330,7 +334,9 @@ static oap_sensor_config_t sensor_config_from_json(cJSON* sconfig) { if ((field = cJSON_GetObjectItem(sconfig, "measInterval"))) sensor_config.meas_interval = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "measStrategy"))) sensor_config.meas_strategy = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "test"))) sensor_config.test = field->valueint; - if ((field = cJSON_GetObjectItem(sconfig, "height"))) sensor_config.height = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "altitude"))) sensor_config.altitude = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "tempOffset"))) sensor_config.tempOffset = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "humidityOffset"))) sensor_config.humidityOffset = field->valueint; return sensor_config; } From 10319b75d33886ef2d98c5f5b45011fa4a962c0f Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 21:59:01 +0100 Subject: [PATCH 111/200] baycom:add fix type prefix, fix offset value types --- components/oap-baycom/baycom.c | 6 +++--- components/oap-hw-bmx280/include/bmx280.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/oap-baycom/baycom.c b/components/oap-baycom/baycom.c index 99342f8..4996bf3 100644 --- a/components/oap-baycom/baycom.c +++ b/components/oap-baycom/baycom.c @@ -1,8 +1,8 @@ /* - * http.c + * baycom.de * * Created on: Feb 6, 2017 - * Author: kris + * Author: Deti * * This file is part of OpenAirProject-ESP32. * @@ -41,7 +41,7 @@ static int _configured = 0; static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { char* payload = malloc(512); if (!payload) return NULL; - sprintf(payload, "%s?item=%s&type=ota", uri, sensorId); + sprintf(payload, "%s?item=%s&type=oap", uri, sensorId); if (meas->pm) { sprintf(payload, "%s&pm1_0=%d&pm2_5=%d&pm10=%d", payload, diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 9ba21ff..317ac86 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -49,9 +49,9 @@ typedef struct bmx280_config_t { uint8_t sensor_idx; //sensor number (0 - 1) uint32_t interval; env_callback callback; - uint32_t altitude; - uint32_t tempOffset; - uint32_t humidityOffset; + int32_t altitude; + int32_t tempOffset; + int32_t humidityOffset; } bmx280_config_t; esp_err_t bmx280_init(bmx280_config_t* config); From f29ac6474af275ae80ea72986765e7bb5d618f24 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 21:59:01 +0100 Subject: [PATCH 112/200] baycom:add fix type prefix, fix offset value types --- components/oap-baycom/baycom.c | 6 +++--- components/oap-hw-bmx280/include/bmx280.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/oap-baycom/baycom.c b/components/oap-baycom/baycom.c index 99342f8..4996bf3 100644 --- a/components/oap-baycom/baycom.c +++ b/components/oap-baycom/baycom.c @@ -1,8 +1,8 @@ /* - * http.c + * baycom.de * * Created on: Feb 6, 2017 - * Author: kris + * Author: Deti * * This file is part of OpenAirProject-ESP32. * @@ -41,7 +41,7 @@ static int _configured = 0; static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { char* payload = malloc(512); if (!payload) return NULL; - sprintf(payload, "%s?item=%s&type=ota", uri, sensorId); + sprintf(payload, "%s?item=%s&type=oap", uri, sensorId); if (meas->pm) { sprintf(payload, "%s&pm1_0=%d&pm2_5=%d&pm10=%d", payload, diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 9ba21ff..317ac86 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -49,9 +49,9 @@ typedef struct bmx280_config_t { uint8_t sensor_idx; //sensor number (0 - 1) uint32_t interval; env_callback callback; - uint32_t altitude; - uint32_t tempOffset; - uint32_t humidityOffset; + int32_t altitude; + int32_t tempOffset; + int32_t humidityOffset; } bmx280_config_t; esp_err_t bmx280_init(bmx280_config_t* config); From 504b2c2e37c929280c46115573c031c11527c3cb Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 22:58:14 +0100 Subject: [PATCH 113/200] remove mh-z19 setup --- components/oap-hw-mhz19/mhz19.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 87ae24d..8446fd9 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -133,7 +133,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); - +#if 0 // set ABC logic on (0xa0) / off (0x00) uint8_t packet_reset[9]={0xff, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; mhz19_check(packet_reset); @@ -151,7 +151,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { ESP_LOGW(TAG, "MH-Z19 set range failed"); return ESP_FAIL; } - +#endif //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo From b83b0598891bbfb974a4be0f15ef6a78498991aa Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Thu, 4 Jan 2018 22:58:14 +0100 Subject: [PATCH 114/200] remove mh-z19 setup --- components/oap-hw-mhz19/mhz19.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 87ae24d..8446fd9 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -133,7 +133,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); - +#if 0 // set ABC logic on (0xa0) / off (0x00) uint8_t packet_reset[9]={0xff, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; mhz19_check(packet_reset); @@ -151,7 +151,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { ESP_LOGW(TAG, "MH-Z19 set range failed"); return ESP_FAIL; } - +#endif //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo From 0919d73c66503439ee0c4389aae6be171df1d0a4 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 14:40:06 +0100 Subject: [PATCH 115/200] add display support --- components/oap-common/default_config.json | 2 +- .../component.mk | 1 - .../http_get_publisher.c} | 30 +-- .../include/http_get_publisher.h} | 6 +- .../lets-encrypt-x3-cross-signed.pem | 0 .../test/component.mk | 0 .../test/test_thing_speak.c | 0 components/oap-hw-mhz19/Kconfig | 6 + components/oap-hw-mhz19/mhz19.c | 56 +++--- components/oap-hw-ssd1306/Kconfig | 8 + components/oap-hw-ssd1306/component.mk | 8 + components/oap-hw-ssd1306/font8x8_basic.h | 174 ++++++++++++++++++ components/oap-hw-ssd1306/include/ssd1366.h | 53 ++++++ components/oap-hw-ssd1306/ssd1306.c | 108 +++++++++++ components/oap-ota/component.mk | 6 +- components/oap-ota/ota.c | 8 +- components/oap-wifi/index.html | 6 +- main/main.c | 50 ++++- 18 files changed, 464 insertions(+), 58 deletions(-) rename components/{oap-baycom => oap-http-get-publisher}/component.mk (96%) rename components/{oap-baycom/baycom.c => oap-http-get-publisher/http_get_publisher.c} (78%) rename components/{oap-baycom/include/baycom.h => oap-http-get-publisher/include/http_get_publisher.h} (87%) rename components/{oap-baycom => oap-http-get-publisher}/lets-encrypt-x3-cross-signed.pem (100%) rename components/{oap-baycom => oap-http-get-publisher}/test/component.mk (100%) rename components/{oap-baycom => oap-http-get-publisher}/test/test_thing_speak.c (100%) create mode 100644 components/oap-hw-ssd1306/Kconfig create mode 100644 components/oap-hw-ssd1306/component.mk create mode 100644 components/oap-hw-ssd1306/font8x8_basic.h create mode 100644 components/oap-hw-ssd1306/include/ssd1366.h create mode 100644 components/oap-hw-ssd1306/ssd1306.c diff --git a/components/oap-common/default_config.json b/components/oap-common/default_config.json index d173d63..0487772 100644 --- a/components/oap-common/default_config.json +++ b/components/oap-common/default_config.json @@ -35,7 +35,7 @@ "humidityOffset" : 0 } }, - "baycom": { + "http_get_publisher": { "enabled": 0, "url": "https://username:password@ota-sensor-server/pushvals.cgi" } diff --git a/components/oap-baycom/component.mk b/components/oap-http-get-publisher/component.mk similarity index 96% rename from components/oap-baycom/component.mk rename to components/oap-http-get-publisher/component.mk index 5da1cf0..5548fec 100644 --- a/components/oap-baycom/component.mk +++ b/components/oap-http-get-publisher/component.mk @@ -6,5 +6,4 @@ # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. # -# stb.42u.de COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-baycom/baycom.c b/components/oap-http-get-publisher/http_get_publisher.c similarity index 78% rename from components/oap-baycom/baycom.c rename to components/oap-http-get-publisher/http_get_publisher.c index 4996bf3..174b401 100644 --- a/components/oap-baycom/baycom.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -1,7 +1,7 @@ /* * baycom.de * - * Created on: Feb 6, 2017 + * Created on: Jan 4, 2018 * Author: Deti * * This file is part of OpenAirProject-ESP32. @@ -20,7 +20,7 @@ * along with OpenAirProject-ESP32. If not, see . */ -#include "baycom.h" +#include "http_get_publisher.h" #include "oap_common.h" #include "oap_storage.h" @@ -32,13 +32,13 @@ extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); -static const char *TAG = "baycom"; +static const char *TAG = "http_get_publisher"; static char* url = NULL; static char* sensorId = NULL; static int _configured = 0; -static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { +static esp_err_t http_get(char* uri, oap_measurement_t* meas) { char* payload = malloc(512); if (!payload) return NULL; sprintf(payload, "%s?item=%s&type=oap", uri, sensorId); @@ -83,9 +83,9 @@ static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { } -static esp_err_t baycom_configure(cJSON* config) { +static esp_err_t http_get_publisher_configure(cJSON* config) { _configured = 0; - ESP_LOGI(TAG, "baycom_configure"); + ESP_LOGI(TAG, "http_get_publisher_configure"); if (!config) { ESP_LOGI(TAG, "config not found"); return ESP_FAIL; @@ -98,13 +98,13 @@ static esp_err_t baycom_configure(cJSON* config) { ESP_LOGW(TAG, "sensorId not configured"); return ESP_FAIL; } - if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "url")) && field->valuestring) { + if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"http_get_publisher"), "url")) && field->valuestring) { set_config_str_field(&url, field->valuestring); } else { ESP_LOGW(TAG, "url not configured"); return ESP_FAIL; } - if (!(field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "enabled")) || !field->valueint) { + if (!(field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"http_get_publisher"), "enabled")) || !field->valueint) { ESP_LOGI(TAG, "client disabled"); return ESP_FAIL; } @@ -112,9 +112,9 @@ static esp_err_t baycom_configure(cJSON* config) { return ESP_OK; } -static esp_err_t baycom_send(oap_measurement_t* meas, oap_sensor_config_t* oap_sensor_config) { +static esp_err_t http_get_publisher_send(oap_measurement_t* meas, oap_sensor_config_t* oap_sensor_config) { if (!_configured) { - ESP_LOGE(TAG, "BayCom not configured"); + ESP_LOGE(TAG, "http_get_publisher not configured"); return ESP_FAIL; } esp_err_t ret; @@ -123,12 +123,12 @@ static esp_err_t baycom_send(oap_measurement_t* meas, oap_sensor_config_t* oap_s return ret; } - ret = rest_post(url, meas); + ret = http_get(url, meas); return ret; } -oap_publisher_t BayCom_publisher = { - .name = "BayCom", - .configure = baycom_configure, - .publish = &baycom_send +oap_publisher_t http_get_publisher = { + .name = "http_get_publisher", + .configure = http_get_publisher_configure, + .publish = &http_get_publisher_send }; diff --git a/components/oap-baycom/include/baycom.h b/components/oap-http-get-publisher/include/http_get_publisher.h similarity index 87% rename from components/oap-baycom/include/baycom.h rename to components/oap-http-get-publisher/include/http_get_publisher.h index 9f48056..017a7fb 100644 --- a/components/oap-baycom/include/baycom.h +++ b/components/oap-http-get-publisher/include/http_get_publisher.h @@ -20,13 +20,13 @@ * along with OpenAirProject-ESP32. If not, see . */ -#ifndef COMPONENTS_BAYCOM_H_ -#define COMPONENTS_BAYCOM_H_ +#ifndef COMPONENTS_HTTP_GET_PUBLISHER_H_ +#define COMPONENTS_HTTP_GET_PUBLISHER_H_ #include "esp_err.h" #include "oap_publisher.h" -oap_publisher_t BayCom_publisher; +oap_publisher_t http_get_publisher; #endif diff --git a/components/oap-baycom/lets-encrypt-x3-cross-signed.pem b/components/oap-http-get-publisher/lets-encrypt-x3-cross-signed.pem similarity index 100% rename from components/oap-baycom/lets-encrypt-x3-cross-signed.pem rename to components/oap-http-get-publisher/lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-baycom/test/component.mk b/components/oap-http-get-publisher/test/component.mk similarity index 100% rename from components/oap-baycom/test/component.mk rename to components/oap-http-get-publisher/test/component.mk diff --git a/components/oap-baycom/test/test_thing_speak.c b/components/oap-http-get-publisher/test/test_thing_speak.c similarity index 100% rename from components/oap-baycom/test/test_thing_speak.c rename to components/oap-http-get-publisher/test/test_thing_speak.c diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig index b8672c6..44cb7c4 100644 --- a/components/oap-hw-mhz19/Kconfig +++ b/components/oap-hw-mhz19/Kconfig @@ -1,5 +1,11 @@ menu "OAP MH-Z19 CO2 Sensor" +config OAP_MH_ENABLED + bool "enable MH-Z19 CO2 Sensor" + default y + help + todo + config OAP_MH_UART_NUM hex "uart num" default 2 diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 8446fd9..11f31d3 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -79,11 +79,38 @@ static int mhz19_check(uint8_t *packet) { return 1; } +typedef enum { + MH_Z19_READ_GAS_CONCENTRATION = 0x86, + MH_Z19_CALIBRATE_ZERO_POINT = 0x87, + MH_Z19_CALIBRATE_SPAN_POINT = 0x88, + MH_Z19_ABC_LOGIC = 0x79, + MH_Z19_SENSOR_DETECTION_RANGE = 0x99 +} mhz19_cmd_t; + +static int mhz19_cmd(mhz19_config_t* config, mhz19_cmd_t cmd, uint32_t val) { + uint8_t packet[9] = {0xff, 0x01, cmd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + switch(cmd) { + case MH_Z19_SENSOR_DETECTION_RANGE: + case MH_Z19_CALIBRATE_SPAN_POINT: + packet[3] = val >>8; + packet[4] = val & 255; + break; + case MH_Z19_ABC_LOGIC: + packet[3] = val?0xa0:0x00; + break; + case MH_Z19_CALIBRATE_ZERO_POINT: + case MH_Z19_READ_GAS_CONCENTRATION: + break; + } + mhz19_check(packet); + + return uart_write_bytes(config->uart_num, (const char *)packet, sizeof(packet));; +} + static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { - if (config->enabled) { - uint8_t packet[9]={0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; - mhz19_check(packet); - int len=uart_write_bytes(config->uart_num, (const char *)packet, sizeof(packet)); + if (config->enabled) { + int len=mhz19_cmd(config, MH_Z19_READ_GAS_CONCENTRATION, 0); if(len == 9){ uint8_t data[32]; len = uart_read_bytes(config->uart_num, data, sizeof(data), 100 / portTICK_RATE_MS); @@ -133,25 +160,10 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); -#if 0 + // set ABC logic on (0xa0) / off (0x00) - uint8_t packet_reset[9]={0xff, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - mhz19_check(packet_reset); - int len=uart_write_bytes(config->uart_num, (const char *)packet_reset, sizeof(packet_reset)); - if(len!=9) { - ESP_LOGW(TAG, "MH-Z19 reset failed"); - return ESP_FAIL; - } - // set range to 2000ppm - int range = 2000; - uint8_t packet_range[9]={ 0xff, 0x01, 0x99, range>>8, range&0xff, 0x00, 0x00, 0x00, 0x00}; - mhz19_check(packet_range); - len=uart_write_bytes(config->uart_num, (const char *)packet_range, sizeof(packet_range)); - if(len!=9) { - ESP_LOGW(TAG, "MH-Z19 set range failed"); - return ESP_FAIL; - } -#endif + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0a0); + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo diff --git a/components/oap-hw-ssd1306/Kconfig b/components/oap-hw-ssd1306/Kconfig new file mode 100644 index 0000000..420a1aa --- /dev/null +++ b/components/oap-hw-ssd1306/Kconfig @@ -0,0 +1,8 @@ +menu "OAP SDD1306 OLED Display" + +config OAP_SDD1306_ENABLED + bool "enable SDD1306 OLED Display" + default y + help + todo +endmenu \ No newline at end of file diff --git a/components/oap-hw-ssd1306/component.mk b/components/oap-hw-ssd1306/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-ssd1306/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-ssd1306/font8x8_basic.h b/components/oap-hw-ssd1306/font8x8_basic.h new file mode 100644 index 0000000..574171e --- /dev/null +++ b/components/oap-hw-ssd1306/font8x8_basic.h @@ -0,0 +1,174 @@ +/* + * font8x8_basic.h + * + * Created on: 2017/05/03 + * Author: yanbe + */ + +#ifndef MAIN_FONT8X8_BASIC_H_ +#define MAIN_FONT8X8_BASIC_H_ + +/* + Constant: font8x8_basic_tr + Contains an 90 digree transposed 8x8 font map for unicode points + U+0000 - U+007F (basic latin) + + To make it easy to use with SSD1306's GDDRAM mapping and API, + this constant is an 90 degree transposed. + The original version written by Marcel Sondaar is availble at: + https://github.com/dhepper/font8x8/blob/master/font8x8_basic.h + + Conversion is done via following procedure: + + for (int code = 0; code < 128; code++) { + uint8_t trans[8]; + for (int w = 0; w < 8; w++) { + trans[w] = 0x00; + for (int b = 0; b < 8; b++) { + trans[w] |= ((font8x8_basic[code][b] & (1 << w)) >> w) << b; + } + } + + for (int w = 0; w < 8; w++) { + if (w == 0) { printf(" { "); } + printf("0x%.2X", trans[w]); + if (w < 7) { printf(", "); } + if (w == 7) { printf(" }, // U+00%.2X (%c)\n", code, code); } + } + } +*/ + +uint8_t font8x8_basic_tr[128][8] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0020 (space) + { 0x00, 0x00, 0x06, 0x5F, 0x5F, 0x06, 0x00, 0x00 }, // U+0021 (!) + { 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x00 }, // U+0022 (") + { 0x14, 0x7F, 0x7F, 0x14, 0x7F, 0x7F, 0x14, 0x00 }, // U+0023 (#) + { 0x24, 0x2E, 0x6B, 0x6B, 0x3A, 0x12, 0x00, 0x00 }, // U+0024 ($) + { 0x46, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x62, 0x00 }, // U+0025 (%) + { 0x30, 0x7A, 0x4F, 0x5D, 0x37, 0x7A, 0x48, 0x00 }, // U+0026 (&) + { 0x04, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0027 (') + { 0x00, 0x1C, 0x3E, 0x63, 0x41, 0x00, 0x00, 0x00 }, // U+0028 (() + { 0x00, 0x41, 0x63, 0x3E, 0x1C, 0x00, 0x00, 0x00 }, // U+0029 ()) + { 0x08, 0x2A, 0x3E, 0x1C, 0x1C, 0x3E, 0x2A, 0x08 }, // U+002A (*) + { 0x08, 0x08, 0x3E, 0x3E, 0x08, 0x08, 0x00, 0x00 }, // U+002B (+) + { 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00 }, // U+002C (,) + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00 }, // U+002D (-) + { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00 }, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00 }, // U+002F (/) + { 0x3E, 0x7F, 0x71, 0x59, 0x4D, 0x7F, 0x3E, 0x00 }, // U+0030 (0) + { 0x40, 0x42, 0x7F, 0x7F, 0x40, 0x40, 0x00, 0x00 }, // U+0031 (1) + { 0x62, 0x73, 0x59, 0x49, 0x6F, 0x66, 0x00, 0x00 }, // U+0032 (2) + { 0x22, 0x63, 0x49, 0x49, 0x7F, 0x36, 0x00, 0x00 }, // U+0033 (3) + { 0x18, 0x1C, 0x16, 0x53, 0x7F, 0x7F, 0x50, 0x00 }, // U+0034 (4) + { 0x27, 0x67, 0x45, 0x45, 0x7D, 0x39, 0x00, 0x00 }, // U+0035 (5) + { 0x3C, 0x7E, 0x4B, 0x49, 0x79, 0x30, 0x00, 0x00 }, // U+0036 (6) + { 0x03, 0x03, 0x71, 0x79, 0x0F, 0x07, 0x00, 0x00 }, // U+0037 (7) + { 0x36, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00, 0x00 }, // U+0038 (8) + { 0x06, 0x4F, 0x49, 0x69, 0x3F, 0x1E, 0x00, 0x00 }, // U+0039 (9) + { 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }, // U+003A (:) + { 0x00, 0x80, 0xE6, 0x66, 0x00, 0x00, 0x00, 0x00 }, // U+003B (;) + { 0x08, 0x1C, 0x36, 0x63, 0x41, 0x00, 0x00, 0x00 }, // U+003C (<) + { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00 }, // U+003D (=) + { 0x00, 0x41, 0x63, 0x36, 0x1C, 0x08, 0x00, 0x00 }, // U+003E (>) + { 0x02, 0x03, 0x51, 0x59, 0x0F, 0x06, 0x00, 0x00 }, // U+003F (?) + { 0x3E, 0x7F, 0x41, 0x5D, 0x5D, 0x1F, 0x1E, 0x00 }, // U+0040 (@) + { 0x7C, 0x7E, 0x13, 0x13, 0x7E, 0x7C, 0x00, 0x00 }, // U+0041 (A) + { 0x41, 0x7F, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00 }, // U+0042 (B) + { 0x1C, 0x3E, 0x63, 0x41, 0x41, 0x63, 0x22, 0x00 }, // U+0043 (C) + { 0x41, 0x7F, 0x7F, 0x41, 0x63, 0x3E, 0x1C, 0x00 }, // U+0044 (D) + { 0x41, 0x7F, 0x7F, 0x49, 0x5D, 0x41, 0x63, 0x00 }, // U+0045 (E) + { 0x41, 0x7F, 0x7F, 0x49, 0x1D, 0x01, 0x03, 0x00 }, // U+0046 (F) + { 0x1C, 0x3E, 0x63, 0x41, 0x51, 0x73, 0x72, 0x00 }, // U+0047 (G) + { 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00 }, // U+0048 (H) + { 0x00, 0x41, 0x7F, 0x7F, 0x41, 0x00, 0x00, 0x00 }, // U+0049 (I) + { 0x30, 0x70, 0x40, 0x41, 0x7F, 0x3F, 0x01, 0x00 }, // U+004A (J) + { 0x41, 0x7F, 0x7F, 0x08, 0x1C, 0x77, 0x63, 0x00 }, // U+004B (K) + { 0x41, 0x7F, 0x7F, 0x41, 0x40, 0x60, 0x70, 0x00 }, // U+004C (L) + { 0x7F, 0x7F, 0x0E, 0x1C, 0x0E, 0x7F, 0x7F, 0x00 }, // U+004D (M) + { 0x7F, 0x7F, 0x06, 0x0C, 0x18, 0x7F, 0x7F, 0x00 }, // U+004E (N) + { 0x1C, 0x3E, 0x63, 0x41, 0x63, 0x3E, 0x1C, 0x00 }, // U+004F (O) + { 0x41, 0x7F, 0x7F, 0x49, 0x09, 0x0F, 0x06, 0x00 }, // U+0050 (P) + { 0x1E, 0x3F, 0x21, 0x71, 0x7F, 0x5E, 0x00, 0x00 }, // U+0051 (Q) + { 0x41, 0x7F, 0x7F, 0x09, 0x19, 0x7F, 0x66, 0x00 }, // U+0052 (R) + { 0x26, 0x6F, 0x4D, 0x59, 0x73, 0x32, 0x00, 0x00 }, // U+0053 (S) + { 0x03, 0x41, 0x7F, 0x7F, 0x41, 0x03, 0x00, 0x00 }, // U+0054 (T) + { 0x7F, 0x7F, 0x40, 0x40, 0x7F, 0x7F, 0x00, 0x00 }, // U+0055 (U) + { 0x1F, 0x3F, 0x60, 0x60, 0x3F, 0x1F, 0x00, 0x00 }, // U+0056 (V) + { 0x7F, 0x7F, 0x30, 0x18, 0x30, 0x7F, 0x7F, 0x00 }, // U+0057 (W) + { 0x43, 0x67, 0x3C, 0x18, 0x3C, 0x67, 0x43, 0x00 }, // U+0058 (X) + { 0x07, 0x4F, 0x78, 0x78, 0x4F, 0x07, 0x00, 0x00 }, // U+0059 (Y) + { 0x47, 0x63, 0x71, 0x59, 0x4D, 0x67, 0x73, 0x00 }, // U+005A (Z) + { 0x00, 0x7F, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00 }, // U+005B ([) + { 0x01, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00 }, // U+005C (\) + { 0x00, 0x41, 0x41, 0x7F, 0x7F, 0x00, 0x00, 0x00 }, // U+005D (]) + { 0x08, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x08, 0x00 }, // U+005E (^) + { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }, // U+005F (_) + { 0x00, 0x00, 0x03, 0x07, 0x04, 0x00, 0x00, 0x00 }, // U+0060 (`) + { 0x20, 0x74, 0x54, 0x54, 0x3C, 0x78, 0x40, 0x00 }, // U+0061 (a) + { 0x41, 0x7F, 0x3F, 0x48, 0x48, 0x78, 0x30, 0x00 }, // U+0062 (b) + { 0x38, 0x7C, 0x44, 0x44, 0x6C, 0x28, 0x00, 0x00 }, // U+0063 (c) + { 0x30, 0x78, 0x48, 0x49, 0x3F, 0x7F, 0x40, 0x00 }, // U+0064 (d) + { 0x38, 0x7C, 0x54, 0x54, 0x5C, 0x18, 0x00, 0x00 }, // U+0065 (e) + { 0x48, 0x7E, 0x7F, 0x49, 0x03, 0x02, 0x00, 0x00 }, // U+0066 (f) + { 0x98, 0xBC, 0xA4, 0xA4, 0xF8, 0x7C, 0x04, 0x00 }, // U+0067 (g) + { 0x41, 0x7F, 0x7F, 0x08, 0x04, 0x7C, 0x78, 0x00 }, // U+0068 (h) + { 0x00, 0x44, 0x7D, 0x7D, 0x40, 0x00, 0x00, 0x00 }, // U+0069 (i) + { 0x60, 0xE0, 0x80, 0x80, 0xFD, 0x7D, 0x00, 0x00 }, // U+006A (j) + { 0x41, 0x7F, 0x7F, 0x10, 0x38, 0x6C, 0x44, 0x00 }, // U+006B (k) + { 0x00, 0x41, 0x7F, 0x7F, 0x40, 0x00, 0x00, 0x00 }, // U+006C (l) + { 0x7C, 0x7C, 0x18, 0x38, 0x1C, 0x7C, 0x78, 0x00 }, // U+006D (m) + { 0x7C, 0x7C, 0x04, 0x04, 0x7C, 0x78, 0x00, 0x00 }, // U+006E (n) + { 0x38, 0x7C, 0x44, 0x44, 0x7C, 0x38, 0x00, 0x00 }, // U+006F (o) + { 0x84, 0xFC, 0xF8, 0xA4, 0x24, 0x3C, 0x18, 0x00 }, // U+0070 (p) + { 0x18, 0x3C, 0x24, 0xA4, 0xF8, 0xFC, 0x84, 0x00 }, // U+0071 (q) + { 0x44, 0x7C, 0x78, 0x4C, 0x04, 0x1C, 0x18, 0x00 }, // U+0072 (r) + { 0x48, 0x5C, 0x54, 0x54, 0x74, 0x24, 0x00, 0x00 }, // U+0073 (s) + { 0x00, 0x04, 0x3E, 0x7F, 0x44, 0x24, 0x00, 0x00 }, // U+0074 (t) + { 0x3C, 0x7C, 0x40, 0x40, 0x3C, 0x7C, 0x40, 0x00 }, // U+0075 (u) + { 0x1C, 0x3C, 0x60, 0x60, 0x3C, 0x1C, 0x00, 0x00 }, // U+0076 (v) + { 0x3C, 0x7C, 0x70, 0x38, 0x70, 0x7C, 0x3C, 0x00 }, // U+0077 (w) + { 0x44, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0x44, 0x00 }, // U+0078 (x) + { 0x9C, 0xBC, 0xA0, 0xA0, 0xFC, 0x7C, 0x00, 0x00 }, // U+0079 (y) + { 0x4C, 0x64, 0x74, 0x5C, 0x4C, 0x64, 0x00, 0x00 }, // U+007A (z) + { 0x08, 0x08, 0x3E, 0x77, 0x41, 0x41, 0x00, 0x00 }, // U+007B ({) + { 0x00, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0x00 }, // U+007C (|) + { 0x41, 0x41, 0x77, 0x3E, 0x08, 0x08, 0x00, 0x00 }, // U+007D (}) + { 0x02, 0x03, 0x01, 0x03, 0x02, 0x03, 0x01, 0x00 }, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } // U+007F +}; + +#endif /* MAIN_FONT8X8_BASIC_H_ */ + + diff --git a/components/oap-hw-ssd1306/include/ssd1366.h b/components/oap-hw-ssd1306/include/ssd1366.h new file mode 100644 index 0000000..095f092 --- /dev/null +++ b/components/oap-hw-ssd1306/include/ssd1366.h @@ -0,0 +1,53 @@ +#ifndef MAIN_SSD1366_H_ +#define MAIN_SSD1366_H_ + +// Following definitions are bollowed from +// http://robotcantalk.blogspot.com/2015/03/interfacing-arduino-with-ssd1306-driven.html + +// SLA (0x3C) + WRITE_MODE (0x00) = 0x78 (0b01111000) +#define OLED_I2C_ADDRESS 0x3C + +// Control byte +#define OLED_CONTROL_BYTE_CMD_SINGLE 0x80 +#define OLED_CONTROL_BYTE_CMD_STREAM 0x00 +#define OLED_CONTROL_BYTE_DATA_STREAM 0x40 + +// Fundamental commands (pg.28) +#define OLED_CMD_SET_CONTRAST 0x81 // follow with 0x7F +#define OLED_CMD_DISPLAY_RAM 0xA4 +#define OLED_CMD_DISPLAY_ALLON 0xA5 +#define OLED_CMD_DISPLAY_NORMAL 0xA6 +#define OLED_CMD_DISPLAY_INVERTED 0xA7 +#define OLED_CMD_DISPLAY_OFF 0xAE +#define OLED_CMD_DISPLAY_ON 0xAF + +// Addressing Command Table (pg.30) +#define OLED_CMD_SET_MEMORY_ADDR_MODE 0x20 // follow with 0x00 = HORZ mode = Behave like a KS108 graphic LCD +#define OLED_CMD_SET_COLUMN_RANGE 0x21 // can be used only in HORZ/VERT mode - follow with 0x00 and 0x7F = COL127 +#define OLED_CMD_SET_PAGE_RANGE 0x22 // can be used only in HORZ/VERT mode - follow with 0x00 and 0x07 = PAGE7 + +// Hardware Config (pg.31) +#define OLED_CMD_SET_DISPLAY_START_LINE 0x40 +#define OLED_CMD_SET_SEGMENT_REMAP 0xA1 +#define OLED_CMD_SET_MUX_RATIO 0xA8 // follow with 0x3F = 64 MUX +#define OLED_CMD_SET_COM_SCAN_MODE 0xC8 +#define OLED_CMD_SET_DISPLAY_OFFSET 0xD3 // follow with 0x00 +#define OLED_CMD_SET_COM_PIN_MAP 0xDA // follow with 0x12 +#define OLED_CMD_NOP 0xE3 // NOP + +// Timing and Driving Scheme (pg.32) +#define OLED_CMD_SET_DISPLAY_CLK_DIV 0xD5 // follow with 0x80 +#define OLED_CMD_SET_PRECHARGE 0xD9 // follow with 0xF1 +#define OLED_CMD_SET_VCOMH_DESELCT 0xDB // follow with 0x30 + +// Charge Pump (pg.62) +#define OLED_CMD_SET_CHARGE_PUMP 0x8D // follow with 0x14 + +void ssd1306_init(); +void ssd1306_display_clear(void); +void ssd1306_contrast(void); +void ssd1306_display_text(const char *text); + + + +#endif /* MAIN_SSD1366_H_ */ \ No newline at end of file diff --git a/components/oap-hw-ssd1306/ssd1306.c b/components/oap-hw-ssd1306/ssd1306.c new file mode 100644 index 0000000..b1f8e66 --- /dev/null +++ b/components/oap-hw-ssd1306/ssd1306.c @@ -0,0 +1,108 @@ +#include + +#include "driver/gpio.h" +#include "driver/i2c.h" +#include "esp_err.h" +#include "esp_log.h" +#include "freertos/task.h" + +#include "ssd1366.h" +#include "font8x8_basic.h" + +#define tag "SSD1306" + +void ssd1306_init() { + esp_err_t espRc; + + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_STREAM, true); + + i2c_master_write_byte(cmd, OLED_CMD_SET_CHARGE_PUMP, true); + i2c_master_write_byte(cmd, 0x14, true); + + i2c_master_write_byte(cmd, OLED_CMD_SET_SEGMENT_REMAP, true); // reverse left-right mapping + i2c_master_write_byte(cmd, OLED_CMD_SET_COM_SCAN_MODE, true); // reverse up-bottom mapping + + i2c_master_write_byte(cmd, OLED_CMD_DISPLAY_ON, true); + i2c_master_stop(cmd); + + espRc = i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + if (espRc == ESP_OK) { + ESP_LOGI(tag, "OLED configured successfully"); + } else { + ESP_LOGE(tag, "OLED configuration failed. code: 0x%.2X", espRc); + } + i2c_cmd_link_delete(cmd); +} + +void ssd1306_display_clear(void ) { + i2c_cmd_handle_t cmd; + + uint8_t zero[128]; + memset(zero, 0, sizeof(zero)); + for (uint8_t i = 0; i < 8; i++) { + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_SINGLE, true); + i2c_master_write_byte(cmd, 0xB0 | i, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_DATA_STREAM, true); + i2c_master_write(cmd, zero, 128, true); + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + } +} + +void ssd1306_display_text(const char *text) { + uint8_t text_len = strlen(text); + + i2c_cmd_handle_t cmd; + + uint8_t cur_page = 0; + + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_STREAM, true); + i2c_master_write_byte(cmd, 0x00, true); // reset column + i2c_master_write_byte(cmd, 0x10, true); + i2c_master_write_byte(cmd, 0xB0 | cur_page, true); // reset page + + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + + for (uint8_t i = 0; i < text_len; i++) { + if (text[i] == '\n') { + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_STREAM, true); + i2c_master_write_byte(cmd, 0x00, true); // reset column + i2c_master_write_byte(cmd, 0x10, true); + i2c_master_write_byte(cmd, 0xB0 | ++cur_page, true); // increment page + + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + } else { + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_DATA_STREAM, true); + i2c_master_write(cmd, font8x8_basic_tr[(uint8_t)text[i]], 8, true); + + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + } + } +} diff --git a/components/oap-ota/component.mk b/components/oap-ota/component.mk index 0b87fb7..155141c 100644 --- a/components/oap-ota/component.mk +++ b/components/oap-ota/component.mk @@ -11,7 +11,7 @@ #COMPONENT_EMBED_TXTFILES = digicert_ca.pem # openairproject.com (CloudFront) -#COMPONENT_EMBED_TXTFILES = comodo_ca.pem +COMPONENT_EMBED_TXTFILES = comodo_ca.pem -# stb.42u.de -COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem +# lets encrypt signed sites +# COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index 9e8aa04..65ceba8 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -43,10 +43,10 @@ #define TAG "ota" -//extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); -//extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); -extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); -extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); +extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +//extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +//extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { for (int i = 0; i < 32; i++) { diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index b295d6c..0f4d104 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -202,15 +202,15 @@

    OpenAirProject Sensor
    - BayCom Client + HTTP-Get-Publisher - + - +
    diff --git a/main/main.c b/main/main.c index 2800da6..6e4ed32 100644 --- a/main/main.c +++ b/main/main.c @@ -34,7 +34,7 @@ #include #include "thing_speak.h" -#include "baycom.h" +#include "http_get_publisher.h" #include "meas_intervals.h" #include "meas_continuous.h" @@ -51,6 +51,7 @@ #include "ota.h" #include "oap_data.h" #include "server_cpanel.h" +#include "ssd1366.h" #define ESP_INTR_FLAG_DEFAULT 0 @@ -107,12 +108,14 @@ static void ledc_init() { static QueueHandle_t pm_meter_result_queue; static pmsx003_config_t pms_pair_config[2]; +static pm_data_pair_t pm_data_array; extern pm_meter_t pm_meter_intervals; extern pm_meter_t pm_meter_continuous; #define PM_RESULT_SEND_TIMEOUT 100 static void pm_meter_result_handler(pm_data_pair_t* pm_data_pair) { + memcpy(&pm_data_array, pm_data_pair, sizeof(pm_data_pair_t)); if (!xQueueSend(pm_meter_result_queue, pm_data_pair, PM_RESULT_SEND_TIMEOUT)) { ESP_LOGW(TAG,"pm_meter_result_queue overflow"); } @@ -227,8 +230,8 @@ static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { if (env_data->sensor_idx <= 2) { - if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 100 ) == pdTRUE ) { - ESP_LOGI(TAG,"env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); + if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 1000 ) == pdTRUE ) { + ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); memcpy(r, env_data, sizeof(env_data_t)); @@ -269,12 +272,14 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } +#ifdef CONFIG_OAP_MH_ENABLED if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { mhz19_cfg.interval = 1000; mhz19_cfg.callback = &env_sensor_callback; mhz19_init(&mhz19_cfg); mhz19_enable(&mhz19_cfg, 1); } +#endif } //--------- MAIN ----------- @@ -348,8 +353,8 @@ void publishers_init() { if (thingspeak_publisher.configure(storage_get_config("thingspeak")) == ESP_OK) { list_insert(publishers, &thingspeak_publisher); } - if (BayCom_publisher.configure(storage_get_config(NULL)) == ESP_OK) { - list_insert(publishers, &BayCom_publisher); + if (http_get_publisher.configure(storage_get_config(NULL)) == ESP_OK) { + list_insert(publishers, &http_get_publisher); } } @@ -375,6 +380,36 @@ static void btn_handler(btn_action_t action) { } } +void display_task(void *ptr) { + char logstr[80]; + + ssd1306_init(); + ssd1306_display_clear(); + sprintf(logstr, "\n\nESP32-Sensor\n\nVersion %s", oap_version_str()); + ssd1306_display_text(logstr); + char *toggle=""; + while(1) { + delay(5000); + ssd1306_display_clear(); + sprintf(logstr, "%s%.2fC\n\n%.2fhPa\n\n%.2f%% / %dppm\n\nPM: %d / %d / %d",toggle, + last_env_data[0].env_data.temp, + last_env_data[0].env_data.pressure, + last_env_data[0].env_data.humidity, + last_env_data[2].env_data.co2, + pm_data_array.pm_data[0].pm1_0, + pm_data_array.pm_data[0].pm2_5, + pm_data_array.pm_data[0].pm10 + ); + ssd1306_display_text(logstr); + if(!toggle[0]) { + toggle="\n"; + } else { + toggle=""; + } + } + vTaskDelete(NULL); +} + void app_main() { //silence annoying logs esp_log_level_set("ledc", ESP_LOG_INFO); @@ -401,7 +436,10 @@ void app_main() { pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_init(); env_sensors_init(); - +#ifdef CONFIG_OAP_SDD1306_ENABLED + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); +#endif publishers_init(); publish_loop(); From 06ff034a44a288cb0ee8142a07f6b9296ac545ac Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 14:40:06 +0100 Subject: [PATCH 116/200] add display support --- .../component.mk | 1 - .../http_get_publisher.c} | 30 +-- .../include/http_get_publisher.h} | 6 +- .../lets-encrypt-x3-cross-signed.pem | 0 .../test/component.mk | 0 .../test/test_thing_speak.c | 0 components/oap-hw-mhz19/Kconfig | 6 + components/oap-hw-mhz19/mhz19.c | 56 +++--- components/oap-hw-ssd1306/Kconfig | 8 + components/oap-hw-ssd1306/component.mk | 8 + components/oap-hw-ssd1306/font8x8_basic.h | 174 ++++++++++++++++++ components/oap-hw-ssd1306/include/ssd1366.h | 53 ++++++ components/oap-hw-ssd1306/ssd1306.c | 108 +++++++++++ components/oap-ota/component.mk | 6 +- components/oap-ota/ota.c | 8 +- components/oap-wifi/index.html | 6 +- main/main.c | 50 ++++- 17 files changed, 463 insertions(+), 57 deletions(-) rename components/{oap-baycom => oap-http-get-publisher}/component.mk (96%) rename components/{oap-baycom/baycom.c => oap-http-get-publisher/http_get_publisher.c} (78%) rename components/{oap-baycom/include/baycom.h => oap-http-get-publisher/include/http_get_publisher.h} (87%) rename components/{oap-baycom => oap-http-get-publisher}/lets-encrypt-x3-cross-signed.pem (100%) rename components/{oap-baycom => oap-http-get-publisher}/test/component.mk (100%) rename components/{oap-baycom => oap-http-get-publisher}/test/test_thing_speak.c (100%) create mode 100644 components/oap-hw-ssd1306/Kconfig create mode 100644 components/oap-hw-ssd1306/component.mk create mode 100644 components/oap-hw-ssd1306/font8x8_basic.h create mode 100644 components/oap-hw-ssd1306/include/ssd1366.h create mode 100644 components/oap-hw-ssd1306/ssd1306.c diff --git a/components/oap-baycom/component.mk b/components/oap-http-get-publisher/component.mk similarity index 96% rename from components/oap-baycom/component.mk rename to components/oap-http-get-publisher/component.mk index 5da1cf0..5548fec 100644 --- a/components/oap-baycom/component.mk +++ b/components/oap-http-get-publisher/component.mk @@ -6,5 +6,4 @@ # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. # -# stb.42u.de COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-baycom/baycom.c b/components/oap-http-get-publisher/http_get_publisher.c similarity index 78% rename from components/oap-baycom/baycom.c rename to components/oap-http-get-publisher/http_get_publisher.c index 4996bf3..174b401 100644 --- a/components/oap-baycom/baycom.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -1,7 +1,7 @@ /* * baycom.de * - * Created on: Feb 6, 2017 + * Created on: Jan 4, 2018 * Author: Deti * * This file is part of OpenAirProject-ESP32. @@ -20,7 +20,7 @@ * along with OpenAirProject-ESP32. If not, see . */ -#include "baycom.h" +#include "http_get_publisher.h" #include "oap_common.h" #include "oap_storage.h" @@ -32,13 +32,13 @@ extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); -static const char *TAG = "baycom"; +static const char *TAG = "http_get_publisher"; static char* url = NULL; static char* sensorId = NULL; static int _configured = 0; -static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { +static esp_err_t http_get(char* uri, oap_measurement_t* meas) { char* payload = malloc(512); if (!payload) return NULL; sprintf(payload, "%s?item=%s&type=oap", uri, sensorId); @@ -83,9 +83,9 @@ static esp_err_t rest_post(char* uri, oap_measurement_t* meas) { } -static esp_err_t baycom_configure(cJSON* config) { +static esp_err_t http_get_publisher_configure(cJSON* config) { _configured = 0; - ESP_LOGI(TAG, "baycom_configure"); + ESP_LOGI(TAG, "http_get_publisher_configure"); if (!config) { ESP_LOGI(TAG, "config not found"); return ESP_FAIL; @@ -98,13 +98,13 @@ static esp_err_t baycom_configure(cJSON* config) { ESP_LOGW(TAG, "sensorId not configured"); return ESP_FAIL; } - if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "url")) && field->valuestring) { + if ((field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"http_get_publisher"), "url")) && field->valuestring) { set_config_str_field(&url, field->valuestring); } else { ESP_LOGW(TAG, "url not configured"); return ESP_FAIL; } - if (!(field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"baycom"), "enabled")) || !field->valueint) { + if (!(field = cJSON_GetObjectItem(cJSON_GetObjectItem(config,"http_get_publisher"), "enabled")) || !field->valueint) { ESP_LOGI(TAG, "client disabled"); return ESP_FAIL; } @@ -112,9 +112,9 @@ static esp_err_t baycom_configure(cJSON* config) { return ESP_OK; } -static esp_err_t baycom_send(oap_measurement_t* meas, oap_sensor_config_t* oap_sensor_config) { +static esp_err_t http_get_publisher_send(oap_measurement_t* meas, oap_sensor_config_t* oap_sensor_config) { if (!_configured) { - ESP_LOGE(TAG, "BayCom not configured"); + ESP_LOGE(TAG, "http_get_publisher not configured"); return ESP_FAIL; } esp_err_t ret; @@ -123,12 +123,12 @@ static esp_err_t baycom_send(oap_measurement_t* meas, oap_sensor_config_t* oap_s return ret; } - ret = rest_post(url, meas); + ret = http_get(url, meas); return ret; } -oap_publisher_t BayCom_publisher = { - .name = "BayCom", - .configure = baycom_configure, - .publish = &baycom_send +oap_publisher_t http_get_publisher = { + .name = "http_get_publisher", + .configure = http_get_publisher_configure, + .publish = &http_get_publisher_send }; diff --git a/components/oap-baycom/include/baycom.h b/components/oap-http-get-publisher/include/http_get_publisher.h similarity index 87% rename from components/oap-baycom/include/baycom.h rename to components/oap-http-get-publisher/include/http_get_publisher.h index 9f48056..017a7fb 100644 --- a/components/oap-baycom/include/baycom.h +++ b/components/oap-http-get-publisher/include/http_get_publisher.h @@ -20,13 +20,13 @@ * along with OpenAirProject-ESP32. If not, see . */ -#ifndef COMPONENTS_BAYCOM_H_ -#define COMPONENTS_BAYCOM_H_ +#ifndef COMPONENTS_HTTP_GET_PUBLISHER_H_ +#define COMPONENTS_HTTP_GET_PUBLISHER_H_ #include "esp_err.h" #include "oap_publisher.h" -oap_publisher_t BayCom_publisher; +oap_publisher_t http_get_publisher; #endif diff --git a/components/oap-baycom/lets-encrypt-x3-cross-signed.pem b/components/oap-http-get-publisher/lets-encrypt-x3-cross-signed.pem similarity index 100% rename from components/oap-baycom/lets-encrypt-x3-cross-signed.pem rename to components/oap-http-get-publisher/lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-baycom/test/component.mk b/components/oap-http-get-publisher/test/component.mk similarity index 100% rename from components/oap-baycom/test/component.mk rename to components/oap-http-get-publisher/test/component.mk diff --git a/components/oap-baycom/test/test_thing_speak.c b/components/oap-http-get-publisher/test/test_thing_speak.c similarity index 100% rename from components/oap-baycom/test/test_thing_speak.c rename to components/oap-http-get-publisher/test/test_thing_speak.c diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig index b8672c6..44cb7c4 100644 --- a/components/oap-hw-mhz19/Kconfig +++ b/components/oap-hw-mhz19/Kconfig @@ -1,5 +1,11 @@ menu "OAP MH-Z19 CO2 Sensor" +config OAP_MH_ENABLED + bool "enable MH-Z19 CO2 Sensor" + default y + help + todo + config OAP_MH_UART_NUM hex "uart num" default 2 diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 8446fd9..11f31d3 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -79,11 +79,38 @@ static int mhz19_check(uint8_t *packet) { return 1; } +typedef enum { + MH_Z19_READ_GAS_CONCENTRATION = 0x86, + MH_Z19_CALIBRATE_ZERO_POINT = 0x87, + MH_Z19_CALIBRATE_SPAN_POINT = 0x88, + MH_Z19_ABC_LOGIC = 0x79, + MH_Z19_SENSOR_DETECTION_RANGE = 0x99 +} mhz19_cmd_t; + +static int mhz19_cmd(mhz19_config_t* config, mhz19_cmd_t cmd, uint32_t val) { + uint8_t packet[9] = {0xff, 0x01, cmd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + switch(cmd) { + case MH_Z19_SENSOR_DETECTION_RANGE: + case MH_Z19_CALIBRATE_SPAN_POINT: + packet[3] = val >>8; + packet[4] = val & 255; + break; + case MH_Z19_ABC_LOGIC: + packet[3] = val?0xa0:0x00; + break; + case MH_Z19_CALIBRATE_ZERO_POINT: + case MH_Z19_READ_GAS_CONCENTRATION: + break; + } + mhz19_check(packet); + + return uart_write_bytes(config->uart_num, (const char *)packet, sizeof(packet));; +} + static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { - if (config->enabled) { - uint8_t packet[9]={0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; - mhz19_check(packet); - int len=uart_write_bytes(config->uart_num, (const char *)packet, sizeof(packet)); + if (config->enabled) { + int len=mhz19_cmd(config, MH_Z19_READ_GAS_CONCENTRATION, 0); if(len == 9){ uint8_t data[32]; len = uart_read_bytes(config->uart_num, data, sizeof(data), 100 / portTICK_RATE_MS); @@ -133,25 +160,10 @@ esp_err_t mhz19_init(mhz19_config_t* config) { char task_name[100]; sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); -#if 0 + // set ABC logic on (0xa0) / off (0x00) - uint8_t packet_reset[9]={0xff, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - mhz19_check(packet_reset); - int len=uart_write_bytes(config->uart_num, (const char *)packet_reset, sizeof(packet_reset)); - if(len!=9) { - ESP_LOGW(TAG, "MH-Z19 reset failed"); - return ESP_FAIL; - } - // set range to 2000ppm - int range = 2000; - uint8_t packet_range[9]={ 0xff, 0x01, 0x99, range>>8, range&0xff, 0x00, 0x00, 0x00, 0x00}; - mhz19_check(packet_range); - len=uart_write_bytes(config->uart_num, (const char *)packet_range, sizeof(packet_range)); - if(len!=9) { - ESP_LOGW(TAG, "MH-Z19 set range failed"); - return ESP_FAIL; - } -#endif + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0a0); + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo diff --git a/components/oap-hw-ssd1306/Kconfig b/components/oap-hw-ssd1306/Kconfig new file mode 100644 index 0000000..420a1aa --- /dev/null +++ b/components/oap-hw-ssd1306/Kconfig @@ -0,0 +1,8 @@ +menu "OAP SDD1306 OLED Display" + +config OAP_SDD1306_ENABLED + bool "enable SDD1306 OLED Display" + default y + help + todo +endmenu \ No newline at end of file diff --git a/components/oap-hw-ssd1306/component.mk b/components/oap-hw-ssd1306/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-ssd1306/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-ssd1306/font8x8_basic.h b/components/oap-hw-ssd1306/font8x8_basic.h new file mode 100644 index 0000000..574171e --- /dev/null +++ b/components/oap-hw-ssd1306/font8x8_basic.h @@ -0,0 +1,174 @@ +/* + * font8x8_basic.h + * + * Created on: 2017/05/03 + * Author: yanbe + */ + +#ifndef MAIN_FONT8X8_BASIC_H_ +#define MAIN_FONT8X8_BASIC_H_ + +/* + Constant: font8x8_basic_tr + Contains an 90 digree transposed 8x8 font map for unicode points + U+0000 - U+007F (basic latin) + + To make it easy to use with SSD1306's GDDRAM mapping and API, + this constant is an 90 degree transposed. + The original version written by Marcel Sondaar is availble at: + https://github.com/dhepper/font8x8/blob/master/font8x8_basic.h + + Conversion is done via following procedure: + + for (int code = 0; code < 128; code++) { + uint8_t trans[8]; + for (int w = 0; w < 8; w++) { + trans[w] = 0x00; + for (int b = 0; b < 8; b++) { + trans[w] |= ((font8x8_basic[code][b] & (1 << w)) >> w) << b; + } + } + + for (int w = 0; w < 8; w++) { + if (w == 0) { printf(" { "); } + printf("0x%.2X", trans[w]); + if (w < 7) { printf(", "); } + if (w == 7) { printf(" }, // U+00%.2X (%c)\n", code, code); } + } + } +*/ + +uint8_t font8x8_basic_tr[128][8] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0020 (space) + { 0x00, 0x00, 0x06, 0x5F, 0x5F, 0x06, 0x00, 0x00 }, // U+0021 (!) + { 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x00 }, // U+0022 (") + { 0x14, 0x7F, 0x7F, 0x14, 0x7F, 0x7F, 0x14, 0x00 }, // U+0023 (#) + { 0x24, 0x2E, 0x6B, 0x6B, 0x3A, 0x12, 0x00, 0x00 }, // U+0024 ($) + { 0x46, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x62, 0x00 }, // U+0025 (%) + { 0x30, 0x7A, 0x4F, 0x5D, 0x37, 0x7A, 0x48, 0x00 }, // U+0026 (&) + { 0x04, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 }, // U+0027 (') + { 0x00, 0x1C, 0x3E, 0x63, 0x41, 0x00, 0x00, 0x00 }, // U+0028 (() + { 0x00, 0x41, 0x63, 0x3E, 0x1C, 0x00, 0x00, 0x00 }, // U+0029 ()) + { 0x08, 0x2A, 0x3E, 0x1C, 0x1C, 0x3E, 0x2A, 0x08 }, // U+002A (*) + { 0x08, 0x08, 0x3E, 0x3E, 0x08, 0x08, 0x00, 0x00 }, // U+002B (+) + { 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00 }, // U+002C (,) + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00 }, // U+002D (-) + { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00 }, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00 }, // U+002F (/) + { 0x3E, 0x7F, 0x71, 0x59, 0x4D, 0x7F, 0x3E, 0x00 }, // U+0030 (0) + { 0x40, 0x42, 0x7F, 0x7F, 0x40, 0x40, 0x00, 0x00 }, // U+0031 (1) + { 0x62, 0x73, 0x59, 0x49, 0x6F, 0x66, 0x00, 0x00 }, // U+0032 (2) + { 0x22, 0x63, 0x49, 0x49, 0x7F, 0x36, 0x00, 0x00 }, // U+0033 (3) + { 0x18, 0x1C, 0x16, 0x53, 0x7F, 0x7F, 0x50, 0x00 }, // U+0034 (4) + { 0x27, 0x67, 0x45, 0x45, 0x7D, 0x39, 0x00, 0x00 }, // U+0035 (5) + { 0x3C, 0x7E, 0x4B, 0x49, 0x79, 0x30, 0x00, 0x00 }, // U+0036 (6) + { 0x03, 0x03, 0x71, 0x79, 0x0F, 0x07, 0x00, 0x00 }, // U+0037 (7) + { 0x36, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00, 0x00 }, // U+0038 (8) + { 0x06, 0x4F, 0x49, 0x69, 0x3F, 0x1E, 0x00, 0x00 }, // U+0039 (9) + { 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }, // U+003A (:) + { 0x00, 0x80, 0xE6, 0x66, 0x00, 0x00, 0x00, 0x00 }, // U+003B (;) + { 0x08, 0x1C, 0x36, 0x63, 0x41, 0x00, 0x00, 0x00 }, // U+003C (<) + { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00 }, // U+003D (=) + { 0x00, 0x41, 0x63, 0x36, 0x1C, 0x08, 0x00, 0x00 }, // U+003E (>) + { 0x02, 0x03, 0x51, 0x59, 0x0F, 0x06, 0x00, 0x00 }, // U+003F (?) + { 0x3E, 0x7F, 0x41, 0x5D, 0x5D, 0x1F, 0x1E, 0x00 }, // U+0040 (@) + { 0x7C, 0x7E, 0x13, 0x13, 0x7E, 0x7C, 0x00, 0x00 }, // U+0041 (A) + { 0x41, 0x7F, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00 }, // U+0042 (B) + { 0x1C, 0x3E, 0x63, 0x41, 0x41, 0x63, 0x22, 0x00 }, // U+0043 (C) + { 0x41, 0x7F, 0x7F, 0x41, 0x63, 0x3E, 0x1C, 0x00 }, // U+0044 (D) + { 0x41, 0x7F, 0x7F, 0x49, 0x5D, 0x41, 0x63, 0x00 }, // U+0045 (E) + { 0x41, 0x7F, 0x7F, 0x49, 0x1D, 0x01, 0x03, 0x00 }, // U+0046 (F) + { 0x1C, 0x3E, 0x63, 0x41, 0x51, 0x73, 0x72, 0x00 }, // U+0047 (G) + { 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00 }, // U+0048 (H) + { 0x00, 0x41, 0x7F, 0x7F, 0x41, 0x00, 0x00, 0x00 }, // U+0049 (I) + { 0x30, 0x70, 0x40, 0x41, 0x7F, 0x3F, 0x01, 0x00 }, // U+004A (J) + { 0x41, 0x7F, 0x7F, 0x08, 0x1C, 0x77, 0x63, 0x00 }, // U+004B (K) + { 0x41, 0x7F, 0x7F, 0x41, 0x40, 0x60, 0x70, 0x00 }, // U+004C (L) + { 0x7F, 0x7F, 0x0E, 0x1C, 0x0E, 0x7F, 0x7F, 0x00 }, // U+004D (M) + { 0x7F, 0x7F, 0x06, 0x0C, 0x18, 0x7F, 0x7F, 0x00 }, // U+004E (N) + { 0x1C, 0x3E, 0x63, 0x41, 0x63, 0x3E, 0x1C, 0x00 }, // U+004F (O) + { 0x41, 0x7F, 0x7F, 0x49, 0x09, 0x0F, 0x06, 0x00 }, // U+0050 (P) + { 0x1E, 0x3F, 0x21, 0x71, 0x7F, 0x5E, 0x00, 0x00 }, // U+0051 (Q) + { 0x41, 0x7F, 0x7F, 0x09, 0x19, 0x7F, 0x66, 0x00 }, // U+0052 (R) + { 0x26, 0x6F, 0x4D, 0x59, 0x73, 0x32, 0x00, 0x00 }, // U+0053 (S) + { 0x03, 0x41, 0x7F, 0x7F, 0x41, 0x03, 0x00, 0x00 }, // U+0054 (T) + { 0x7F, 0x7F, 0x40, 0x40, 0x7F, 0x7F, 0x00, 0x00 }, // U+0055 (U) + { 0x1F, 0x3F, 0x60, 0x60, 0x3F, 0x1F, 0x00, 0x00 }, // U+0056 (V) + { 0x7F, 0x7F, 0x30, 0x18, 0x30, 0x7F, 0x7F, 0x00 }, // U+0057 (W) + { 0x43, 0x67, 0x3C, 0x18, 0x3C, 0x67, 0x43, 0x00 }, // U+0058 (X) + { 0x07, 0x4F, 0x78, 0x78, 0x4F, 0x07, 0x00, 0x00 }, // U+0059 (Y) + { 0x47, 0x63, 0x71, 0x59, 0x4D, 0x67, 0x73, 0x00 }, // U+005A (Z) + { 0x00, 0x7F, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00 }, // U+005B ([) + { 0x01, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00 }, // U+005C (\) + { 0x00, 0x41, 0x41, 0x7F, 0x7F, 0x00, 0x00, 0x00 }, // U+005D (]) + { 0x08, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x08, 0x00 }, // U+005E (^) + { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }, // U+005F (_) + { 0x00, 0x00, 0x03, 0x07, 0x04, 0x00, 0x00, 0x00 }, // U+0060 (`) + { 0x20, 0x74, 0x54, 0x54, 0x3C, 0x78, 0x40, 0x00 }, // U+0061 (a) + { 0x41, 0x7F, 0x3F, 0x48, 0x48, 0x78, 0x30, 0x00 }, // U+0062 (b) + { 0x38, 0x7C, 0x44, 0x44, 0x6C, 0x28, 0x00, 0x00 }, // U+0063 (c) + { 0x30, 0x78, 0x48, 0x49, 0x3F, 0x7F, 0x40, 0x00 }, // U+0064 (d) + { 0x38, 0x7C, 0x54, 0x54, 0x5C, 0x18, 0x00, 0x00 }, // U+0065 (e) + { 0x48, 0x7E, 0x7F, 0x49, 0x03, 0x02, 0x00, 0x00 }, // U+0066 (f) + { 0x98, 0xBC, 0xA4, 0xA4, 0xF8, 0x7C, 0x04, 0x00 }, // U+0067 (g) + { 0x41, 0x7F, 0x7F, 0x08, 0x04, 0x7C, 0x78, 0x00 }, // U+0068 (h) + { 0x00, 0x44, 0x7D, 0x7D, 0x40, 0x00, 0x00, 0x00 }, // U+0069 (i) + { 0x60, 0xE0, 0x80, 0x80, 0xFD, 0x7D, 0x00, 0x00 }, // U+006A (j) + { 0x41, 0x7F, 0x7F, 0x10, 0x38, 0x6C, 0x44, 0x00 }, // U+006B (k) + { 0x00, 0x41, 0x7F, 0x7F, 0x40, 0x00, 0x00, 0x00 }, // U+006C (l) + { 0x7C, 0x7C, 0x18, 0x38, 0x1C, 0x7C, 0x78, 0x00 }, // U+006D (m) + { 0x7C, 0x7C, 0x04, 0x04, 0x7C, 0x78, 0x00, 0x00 }, // U+006E (n) + { 0x38, 0x7C, 0x44, 0x44, 0x7C, 0x38, 0x00, 0x00 }, // U+006F (o) + { 0x84, 0xFC, 0xF8, 0xA4, 0x24, 0x3C, 0x18, 0x00 }, // U+0070 (p) + { 0x18, 0x3C, 0x24, 0xA4, 0xF8, 0xFC, 0x84, 0x00 }, // U+0071 (q) + { 0x44, 0x7C, 0x78, 0x4C, 0x04, 0x1C, 0x18, 0x00 }, // U+0072 (r) + { 0x48, 0x5C, 0x54, 0x54, 0x74, 0x24, 0x00, 0x00 }, // U+0073 (s) + { 0x00, 0x04, 0x3E, 0x7F, 0x44, 0x24, 0x00, 0x00 }, // U+0074 (t) + { 0x3C, 0x7C, 0x40, 0x40, 0x3C, 0x7C, 0x40, 0x00 }, // U+0075 (u) + { 0x1C, 0x3C, 0x60, 0x60, 0x3C, 0x1C, 0x00, 0x00 }, // U+0076 (v) + { 0x3C, 0x7C, 0x70, 0x38, 0x70, 0x7C, 0x3C, 0x00 }, // U+0077 (w) + { 0x44, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0x44, 0x00 }, // U+0078 (x) + { 0x9C, 0xBC, 0xA0, 0xA0, 0xFC, 0x7C, 0x00, 0x00 }, // U+0079 (y) + { 0x4C, 0x64, 0x74, 0x5C, 0x4C, 0x64, 0x00, 0x00 }, // U+007A (z) + { 0x08, 0x08, 0x3E, 0x77, 0x41, 0x41, 0x00, 0x00 }, // U+007B ({) + { 0x00, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0x00 }, // U+007C (|) + { 0x41, 0x41, 0x77, 0x3E, 0x08, 0x08, 0x00, 0x00 }, // U+007D (}) + { 0x02, 0x03, 0x01, 0x03, 0x02, 0x03, 0x01, 0x00 }, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } // U+007F +}; + +#endif /* MAIN_FONT8X8_BASIC_H_ */ + + diff --git a/components/oap-hw-ssd1306/include/ssd1366.h b/components/oap-hw-ssd1306/include/ssd1366.h new file mode 100644 index 0000000..095f092 --- /dev/null +++ b/components/oap-hw-ssd1306/include/ssd1366.h @@ -0,0 +1,53 @@ +#ifndef MAIN_SSD1366_H_ +#define MAIN_SSD1366_H_ + +// Following definitions are bollowed from +// http://robotcantalk.blogspot.com/2015/03/interfacing-arduino-with-ssd1306-driven.html + +// SLA (0x3C) + WRITE_MODE (0x00) = 0x78 (0b01111000) +#define OLED_I2C_ADDRESS 0x3C + +// Control byte +#define OLED_CONTROL_BYTE_CMD_SINGLE 0x80 +#define OLED_CONTROL_BYTE_CMD_STREAM 0x00 +#define OLED_CONTROL_BYTE_DATA_STREAM 0x40 + +// Fundamental commands (pg.28) +#define OLED_CMD_SET_CONTRAST 0x81 // follow with 0x7F +#define OLED_CMD_DISPLAY_RAM 0xA4 +#define OLED_CMD_DISPLAY_ALLON 0xA5 +#define OLED_CMD_DISPLAY_NORMAL 0xA6 +#define OLED_CMD_DISPLAY_INVERTED 0xA7 +#define OLED_CMD_DISPLAY_OFF 0xAE +#define OLED_CMD_DISPLAY_ON 0xAF + +// Addressing Command Table (pg.30) +#define OLED_CMD_SET_MEMORY_ADDR_MODE 0x20 // follow with 0x00 = HORZ mode = Behave like a KS108 graphic LCD +#define OLED_CMD_SET_COLUMN_RANGE 0x21 // can be used only in HORZ/VERT mode - follow with 0x00 and 0x7F = COL127 +#define OLED_CMD_SET_PAGE_RANGE 0x22 // can be used only in HORZ/VERT mode - follow with 0x00 and 0x07 = PAGE7 + +// Hardware Config (pg.31) +#define OLED_CMD_SET_DISPLAY_START_LINE 0x40 +#define OLED_CMD_SET_SEGMENT_REMAP 0xA1 +#define OLED_CMD_SET_MUX_RATIO 0xA8 // follow with 0x3F = 64 MUX +#define OLED_CMD_SET_COM_SCAN_MODE 0xC8 +#define OLED_CMD_SET_DISPLAY_OFFSET 0xD3 // follow with 0x00 +#define OLED_CMD_SET_COM_PIN_MAP 0xDA // follow with 0x12 +#define OLED_CMD_NOP 0xE3 // NOP + +// Timing and Driving Scheme (pg.32) +#define OLED_CMD_SET_DISPLAY_CLK_DIV 0xD5 // follow with 0x80 +#define OLED_CMD_SET_PRECHARGE 0xD9 // follow with 0xF1 +#define OLED_CMD_SET_VCOMH_DESELCT 0xDB // follow with 0x30 + +// Charge Pump (pg.62) +#define OLED_CMD_SET_CHARGE_PUMP 0x8D // follow with 0x14 + +void ssd1306_init(); +void ssd1306_display_clear(void); +void ssd1306_contrast(void); +void ssd1306_display_text(const char *text); + + + +#endif /* MAIN_SSD1366_H_ */ \ No newline at end of file diff --git a/components/oap-hw-ssd1306/ssd1306.c b/components/oap-hw-ssd1306/ssd1306.c new file mode 100644 index 0000000..b1f8e66 --- /dev/null +++ b/components/oap-hw-ssd1306/ssd1306.c @@ -0,0 +1,108 @@ +#include + +#include "driver/gpio.h" +#include "driver/i2c.h" +#include "esp_err.h" +#include "esp_log.h" +#include "freertos/task.h" + +#include "ssd1366.h" +#include "font8x8_basic.h" + +#define tag "SSD1306" + +void ssd1306_init() { + esp_err_t espRc; + + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_STREAM, true); + + i2c_master_write_byte(cmd, OLED_CMD_SET_CHARGE_PUMP, true); + i2c_master_write_byte(cmd, 0x14, true); + + i2c_master_write_byte(cmd, OLED_CMD_SET_SEGMENT_REMAP, true); // reverse left-right mapping + i2c_master_write_byte(cmd, OLED_CMD_SET_COM_SCAN_MODE, true); // reverse up-bottom mapping + + i2c_master_write_byte(cmd, OLED_CMD_DISPLAY_ON, true); + i2c_master_stop(cmd); + + espRc = i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + if (espRc == ESP_OK) { + ESP_LOGI(tag, "OLED configured successfully"); + } else { + ESP_LOGE(tag, "OLED configuration failed. code: 0x%.2X", espRc); + } + i2c_cmd_link_delete(cmd); +} + +void ssd1306_display_clear(void ) { + i2c_cmd_handle_t cmd; + + uint8_t zero[128]; + memset(zero, 0, sizeof(zero)); + for (uint8_t i = 0; i < 8; i++) { + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_SINGLE, true); + i2c_master_write_byte(cmd, 0xB0 | i, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_DATA_STREAM, true); + i2c_master_write(cmd, zero, 128, true); + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + } +} + +void ssd1306_display_text(const char *text) { + uint8_t text_len = strlen(text); + + i2c_cmd_handle_t cmd; + + uint8_t cur_page = 0; + + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_STREAM, true); + i2c_master_write_byte(cmd, 0x00, true); // reset column + i2c_master_write_byte(cmd, 0x10, true); + i2c_master_write_byte(cmd, 0xB0 | cur_page, true); // reset page + + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + + for (uint8_t i = 0; i < text_len; i++) { + if (text[i] == '\n') { + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_STREAM, true); + i2c_master_write_byte(cmd, 0x00, true); // reset column + i2c_master_write_byte(cmd, 0x10, true); + i2c_master_write_byte(cmd, 0xB0 | ++cur_page, true); // increment page + + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + } else { + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true); + + i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_DATA_STREAM, true); + i2c_master_write(cmd, font8x8_basic_tr[(uint8_t)text[i]], 8, true); + + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + } + } +} diff --git a/components/oap-ota/component.mk b/components/oap-ota/component.mk index 0b87fb7..155141c 100644 --- a/components/oap-ota/component.mk +++ b/components/oap-ota/component.mk @@ -11,7 +11,7 @@ #COMPONENT_EMBED_TXTFILES = digicert_ca.pem # openairproject.com (CloudFront) -#COMPONENT_EMBED_TXTFILES = comodo_ca.pem +COMPONENT_EMBED_TXTFILES = comodo_ca.pem -# stb.42u.de -COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem +# lets encrypt signed sites +# COMPONENT_EMBED_TXTFILES = lets-encrypt-x3-cross-signed.pem diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index 9e8aa04..65ceba8 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -43,10 +43,10 @@ #define TAG "ota" -//extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); -//extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); -extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); -extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); +extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +//extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +//extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { for (int i = 0; i < 32; i++) { diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index b295d6c..0f4d104 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -202,15 +202,15 @@

    OpenAirProject Sensor
    - BayCom Client + HTTP-Get-Publisher - + - +
    diff --git a/main/main.c b/main/main.c index 2800da6..6e4ed32 100644 --- a/main/main.c +++ b/main/main.c @@ -34,7 +34,7 @@ #include #include "thing_speak.h" -#include "baycom.h" +#include "http_get_publisher.h" #include "meas_intervals.h" #include "meas_continuous.h" @@ -51,6 +51,7 @@ #include "ota.h" #include "oap_data.h" #include "server_cpanel.h" +#include "ssd1366.h" #define ESP_INTR_FLAG_DEFAULT 0 @@ -107,12 +108,14 @@ static void ledc_init() { static QueueHandle_t pm_meter_result_queue; static pmsx003_config_t pms_pair_config[2]; +static pm_data_pair_t pm_data_array; extern pm_meter_t pm_meter_intervals; extern pm_meter_t pm_meter_continuous; #define PM_RESULT_SEND_TIMEOUT 100 static void pm_meter_result_handler(pm_data_pair_t* pm_data_pair) { + memcpy(&pm_data_array, pm_data_pair, sizeof(pm_data_pair_t)); if (!xQueueSend(pm_meter_result_queue, pm_data_pair, PM_RESULT_SEND_TIMEOUT)) { ESP_LOGW(TAG,"pm_meter_result_queue overflow"); } @@ -227,8 +230,8 @@ static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { if (env_data->sensor_idx <= 2) { - if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 100 ) == pdTRUE ) { - ESP_LOGI(TAG,"env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); + if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 1000 ) == pdTRUE ) { + ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); memcpy(r, env_data, sizeof(env_data_t)); @@ -269,12 +272,14 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } +#ifdef CONFIG_OAP_MH_ENABLED if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { mhz19_cfg.interval = 1000; mhz19_cfg.callback = &env_sensor_callback; mhz19_init(&mhz19_cfg); mhz19_enable(&mhz19_cfg, 1); } +#endif } //--------- MAIN ----------- @@ -348,8 +353,8 @@ void publishers_init() { if (thingspeak_publisher.configure(storage_get_config("thingspeak")) == ESP_OK) { list_insert(publishers, &thingspeak_publisher); } - if (BayCom_publisher.configure(storage_get_config(NULL)) == ESP_OK) { - list_insert(publishers, &BayCom_publisher); + if (http_get_publisher.configure(storage_get_config(NULL)) == ESP_OK) { + list_insert(publishers, &http_get_publisher); } } @@ -375,6 +380,36 @@ static void btn_handler(btn_action_t action) { } } +void display_task(void *ptr) { + char logstr[80]; + + ssd1306_init(); + ssd1306_display_clear(); + sprintf(logstr, "\n\nESP32-Sensor\n\nVersion %s", oap_version_str()); + ssd1306_display_text(logstr); + char *toggle=""; + while(1) { + delay(5000); + ssd1306_display_clear(); + sprintf(logstr, "%s%.2fC\n\n%.2fhPa\n\n%.2f%% / %dppm\n\nPM: %d / %d / %d",toggle, + last_env_data[0].env_data.temp, + last_env_data[0].env_data.pressure, + last_env_data[0].env_data.humidity, + last_env_data[2].env_data.co2, + pm_data_array.pm_data[0].pm1_0, + pm_data_array.pm_data[0].pm2_5, + pm_data_array.pm_data[0].pm10 + ); + ssd1306_display_text(logstr); + if(!toggle[0]) { + toggle="\n"; + } else { + toggle=""; + } + } + vTaskDelete(NULL); +} + void app_main() { //silence annoying logs esp_log_level_set("ledc", ESP_LOG_INFO); @@ -401,7 +436,10 @@ void app_main() { pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_init(); env_sensors_init(); - +#ifdef CONFIG_OAP_SDD1306_ENABLED + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); +#endif publishers_init(); publish_loop(); From e3be9972f7612083d6e1ae8c4e7c4290be904dc0 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 19:20:40 +0100 Subject: [PATCH 117/200] add /status output for webserver --- components/oap-common/include/oap_data.h | 4 ++ components/oap-hw-mhz19/mhz19.c | 2 +- components/oap-wifi/cpanel.c | 79 ++++++++++++++++++++++++ main/main.c | 8 +-- 4 files changed, 86 insertions(+), 7 deletions(-) diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 73fe28b..00c4f71 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -51,5 +51,9 @@ typedef struct { int humidityOffset; } oap_sensor_config_t; +typedef struct { + env_data_t env_data; + long timestamp; +} env_data_record_t; #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_H_ */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 11f31d3..12ebcbd 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -162,7 +162,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0a0); + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x00); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 5804b78..12fe9bf 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -24,12 +24,16 @@ #include "mongoose.h" #include "cJSON.h" #include "oap_storage.h" +#include "pm_meter.h" #define tag "cpanel" extern const uint8_t index_html_start[] asm("_binary_index_html_start"); extern const uint8_t index_html_end[] asm("_binary_index_html_end"); +extern pm_data_pair_t pm_data_array; +extern env_data_record_t last_env_data[3]; + static char *mgStrToStr(struct mg_str mgStr) { char *retStr = (char *) malloc(mgStr.len + 1); memcpy(retStr, mgStr.p, mgStr.len); @@ -56,6 +60,72 @@ static void handler_get_config(struct mg_connection *nc, struct http_message *me free(json); } +static void handler_get_status(struct mg_connection *nc, struct http_message *message) { + ESP_LOGD(tag, "handler_get_status"); + cJSON *root, *status, *data; + + root = cJSON_CreateObject(); + status = cJSON_CreateObject(); + data = cJSON_CreateObject(); + + cJSON_AddItemToObject(root, "status", status); + cJSON_AddItemToObject(root, "data", data); + + cJSON_AddItemToObject(status, "version", cJSON_CreateString(oap_version_str())); + + time_t now = time(NULL); + struct tm timeinfo = {0}; + + localtime_r(&now, &timeinfo); + if(timeinfo.tm_year > (2016 - 1900)) { + time_t boot_time = now-(xTaskGetTickCount()/configTICK_RATE_HZ); +#if 0 + setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 1); + tzset(); +#endif + char strftime_buf[64]; + strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); + cJSON_AddItemToObject(status, "utctime", cJSON_CreateString(strftime_buf)); + cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); + cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); + } + if(CONFIG_OAP_BMX280_ENABLED) { + cJSON *envobj0 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env0", envobj0); + cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); + cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.pressure)); + cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); + } + if(CONFIG_OAP_BMX280_ENABLED_AUX) { + cJSON *envobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env1", envobj1); + cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); + cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.pressure)); + cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); + } + if(CONFIG_OAP_MH_ENABLED) { + cJSON *envobj2 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env2", envobj2); + cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); + } + cJSON *pmobj0 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm0", pmobj0); + cJSON_AddItemToObject(pmobj0, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[0].pm1_0)); + cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); + cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); + if(CONFIG_OAP_PM_ENABLED_AUX) { + cJSON *pmobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm1", pmobj1); + cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); + cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); + cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + } + char* json = cJSON_Print(root); + mg_send(nc, json, strlen(json)); + free(json); + cJSON_Delete(root); +} + static void handler_reboot(struct mg_connection *nc) { mg_send_head(nc, 200, 0, "Content-Type: text/plain"); oap_reboot("requested by user"); @@ -112,6 +182,15 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { handled = 1; } } + if(strcmp(uri, "/status") == 0) { + if (strcmp(method, "GET") == 0) { + handler_get_status(nc, message); + handled = 1; + } else if (strcmp(method, "POST") == 0) { + handler_get_status(nc, message); + handled = 1; + } + } if (!handled) { mg_send_head(nc, 404, 0, "Content-Type: text/plain"); diff --git a/main/main.c b/main/main.c index 6e4ed32..30d5687 100644 --- a/main/main.c +++ b/main/main.c @@ -108,7 +108,7 @@ static void ledc_init() { static QueueHandle_t pm_meter_result_queue; static pmsx003_config_t pms_pair_config[2]; -static pm_data_pair_t pm_data_array; +pm_data_pair_t pm_data_array; extern pm_meter_t pm_meter_intervals; extern pm_meter_t pm_meter_continuous; @@ -218,12 +218,8 @@ static esp_err_t pm_meter_init() { //--------- ENV ----------- -typedef struct { - env_data_t env_data; - long timestamp; -} env_data_record_t; -static env_data_record_t last_env_data[3]; +env_data_record_t last_env_data[3]; static bmx280_config_t bmx280_config[2]; static mhz19_config_t mhz19_cfg; static SemaphoreHandle_t envSemaphore = NULL; From c0be2e008a227003ff69da7e785d681dd560a86f Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 19:20:40 +0100 Subject: [PATCH 118/200] add /status output for webserver --- components/oap-common/include/oap_data.h | 4 ++ components/oap-hw-mhz19/mhz19.c | 2 +- components/oap-wifi/cpanel.c | 79 ++++++++++++++++++++++++ main/main.c | 8 +-- 4 files changed, 86 insertions(+), 7 deletions(-) diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 73fe28b..00c4f71 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -51,5 +51,9 @@ typedef struct { int humidityOffset; } oap_sensor_config_t; +typedef struct { + env_data_t env_data; + long timestamp; +} env_data_record_t; #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_H_ */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 11f31d3..12ebcbd 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -162,7 +162,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0a0); + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x00); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 5804b78..12fe9bf 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -24,12 +24,16 @@ #include "mongoose.h" #include "cJSON.h" #include "oap_storage.h" +#include "pm_meter.h" #define tag "cpanel" extern const uint8_t index_html_start[] asm("_binary_index_html_start"); extern const uint8_t index_html_end[] asm("_binary_index_html_end"); +extern pm_data_pair_t pm_data_array; +extern env_data_record_t last_env_data[3]; + static char *mgStrToStr(struct mg_str mgStr) { char *retStr = (char *) malloc(mgStr.len + 1); memcpy(retStr, mgStr.p, mgStr.len); @@ -56,6 +60,72 @@ static void handler_get_config(struct mg_connection *nc, struct http_message *me free(json); } +static void handler_get_status(struct mg_connection *nc, struct http_message *message) { + ESP_LOGD(tag, "handler_get_status"); + cJSON *root, *status, *data; + + root = cJSON_CreateObject(); + status = cJSON_CreateObject(); + data = cJSON_CreateObject(); + + cJSON_AddItemToObject(root, "status", status); + cJSON_AddItemToObject(root, "data", data); + + cJSON_AddItemToObject(status, "version", cJSON_CreateString(oap_version_str())); + + time_t now = time(NULL); + struct tm timeinfo = {0}; + + localtime_r(&now, &timeinfo); + if(timeinfo.tm_year > (2016 - 1900)) { + time_t boot_time = now-(xTaskGetTickCount()/configTICK_RATE_HZ); +#if 0 + setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 1); + tzset(); +#endif + char strftime_buf[64]; + strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); + cJSON_AddItemToObject(status, "utctime", cJSON_CreateString(strftime_buf)); + cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); + cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); + } + if(CONFIG_OAP_BMX280_ENABLED) { + cJSON *envobj0 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env0", envobj0); + cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); + cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.pressure)); + cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); + } + if(CONFIG_OAP_BMX280_ENABLED_AUX) { + cJSON *envobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env1", envobj1); + cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); + cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.pressure)); + cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); + } + if(CONFIG_OAP_MH_ENABLED) { + cJSON *envobj2 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env2", envobj2); + cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); + } + cJSON *pmobj0 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm0", pmobj0); + cJSON_AddItemToObject(pmobj0, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[0].pm1_0)); + cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); + cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); + if(CONFIG_OAP_PM_ENABLED_AUX) { + cJSON *pmobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm1", pmobj1); + cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); + cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); + cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + } + char* json = cJSON_Print(root); + mg_send(nc, json, strlen(json)); + free(json); + cJSON_Delete(root); +} + static void handler_reboot(struct mg_connection *nc) { mg_send_head(nc, 200, 0, "Content-Type: text/plain"); oap_reboot("requested by user"); @@ -112,6 +182,15 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { handled = 1; } } + if(strcmp(uri, "/status") == 0) { + if (strcmp(method, "GET") == 0) { + handler_get_status(nc, message); + handled = 1; + } else if (strcmp(method, "POST") == 0) { + handler_get_status(nc, message); + handled = 1; + } + } if (!handled) { mg_send_head(nc, 404, 0, "Content-Type: text/plain"); diff --git a/main/main.c b/main/main.c index 6e4ed32..30d5687 100644 --- a/main/main.c +++ b/main/main.c @@ -108,7 +108,7 @@ static void ledc_init() { static QueueHandle_t pm_meter_result_queue; static pmsx003_config_t pms_pair_config[2]; -static pm_data_pair_t pm_data_array; +pm_data_pair_t pm_data_array; extern pm_meter_t pm_meter_intervals; extern pm_meter_t pm_meter_continuous; @@ -218,12 +218,8 @@ static esp_err_t pm_meter_init() { //--------- ENV ----------- -typedef struct { - env_data_t env_data; - long timestamp; -} env_data_record_t; -static env_data_record_t last_env_data[3]; +env_data_record_t last_env_data[3]; static bmx280_config_t bmx280_config[2]; static mhz19_config_t mhz19_cfg; static SemaphoreHandle_t envSemaphore = NULL; From 40a705fec2a8078b185bc37a39f9992c9328d1bf Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 20:28:34 +0100 Subject: [PATCH 119/200] add live view of current data on web page --- components/oap-common/include/oap_version.h | 4 +-- .../include/http_get_publisher.h | 4 +-- components/oap-hw-mhz19/include/mhz19.h | 4 +-- components/oap-hw-mhz19/mhz19.c | 6 ++--- components/oap-wifi/index.html | 27 +++++++++++++++++++ 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 9b9d3de..4c5506d 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -37,8 +37,8 @@ #include "esp_err.h" #define OAP_VER_MAJOR 1 -#define OAP_VER_MINOR 2 -#define OAP_VER_PATCH 1 +#define OAP_VER_MINOR 3 +#define OAP_VER_PATCH 0 typedef struct { uint8_t major; diff --git a/components/oap-http-get-publisher/include/http_get_publisher.h b/components/oap-http-get-publisher/include/http_get_publisher.h index 017a7fb..a5c3f59 100644 --- a/components/oap-http-get-publisher/include/http_get_publisher.h +++ b/components/oap-http-get-publisher/include/http_get_publisher.h @@ -1,8 +1,8 @@ /* * http.h * - * Created on: Feb 6, 2017 - * Author: kris + * Created on: Jan 4, 2018 + * Author: Deti * * This file is part of OpenAirProject-ESP32. * diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h index 3e5c998..afc68ed 100644 --- a/components/oap-hw-mhz19/include/mhz19.h +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -1,8 +1,8 @@ /* * mhz19.h * - * Created on: Feb 3, 2017 - * Author: kris + * Created on: Jan 4, 2018 + * Author: Deti * * This file is part of OpenAirProject-ESP32. * diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 12ebcbd..0db7926 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -1,7 +1,7 @@ /* * mhz19.c * - * Created on: Feb 3, 2017 + * Created on: Jan 4, 2018 * Author: Deti * * This file is part of OpenAirProject-ESP32. @@ -121,7 +121,7 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { int s=data[5]; int u=(data[6]<<8) | data[7]; ESP_LOGD(TAG, "CO2: %d T:%d S:%d U:%d",co2val, t, s, u); - if (config->callback && co2val > 410 && co2val < 2000) { + if (config->callback /*&& co2val > 410 && co2val < 2000*/) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, @@ -162,7 +162,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x00); +// mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 0f4d104..ad9ce2c 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -1,6 +1,8 @@ + + OAP Sensor @@ -96,7 +98,12 @@

    OpenAirProject Sensor

    +
    +
    + Current Data + +
    WiFi @@ -395,6 +402,26 @@

    OpenAirProject Sensor + \ No newline at end of file From 24305e3b0adb1f3f9b7eec84abf9443bfc9ad90a Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 20:28:34 +0100 Subject: [PATCH 120/200] add live view of current data on web page --- components/oap-common/include/oap_version.h | 4 +-- .../include/http_get_publisher.h | 4 +-- components/oap-hw-mhz19/include/mhz19.h | 4 +-- components/oap-hw-mhz19/mhz19.c | 6 ++--- components/oap-wifi/index.html | 27 +++++++++++++++++++ 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 9b9d3de..4c5506d 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -37,8 +37,8 @@ #include "esp_err.h" #define OAP_VER_MAJOR 1 -#define OAP_VER_MINOR 2 -#define OAP_VER_PATCH 1 +#define OAP_VER_MINOR 3 +#define OAP_VER_PATCH 0 typedef struct { uint8_t major; diff --git a/components/oap-http-get-publisher/include/http_get_publisher.h b/components/oap-http-get-publisher/include/http_get_publisher.h index 017a7fb..a5c3f59 100644 --- a/components/oap-http-get-publisher/include/http_get_publisher.h +++ b/components/oap-http-get-publisher/include/http_get_publisher.h @@ -1,8 +1,8 @@ /* * http.h * - * Created on: Feb 6, 2017 - * Author: kris + * Created on: Jan 4, 2018 + * Author: Deti * * This file is part of OpenAirProject-ESP32. * diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h index 3e5c998..afc68ed 100644 --- a/components/oap-hw-mhz19/include/mhz19.h +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -1,8 +1,8 @@ /* * mhz19.h * - * Created on: Feb 3, 2017 - * Author: kris + * Created on: Jan 4, 2018 + * Author: Deti * * This file is part of OpenAirProject-ESP32. * diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 12ebcbd..0db7926 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -1,7 +1,7 @@ /* * mhz19.c * - * Created on: Feb 3, 2017 + * Created on: Jan 4, 2018 * Author: Deti * * This file is part of OpenAirProject-ESP32. @@ -121,7 +121,7 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { int s=data[5]; int u=(data[6]<<8) | data[7]; ESP_LOGD(TAG, "CO2: %d T:%d S:%d U:%d",co2val, t, s, u); - if (config->callback && co2val > 410 && co2val < 2000) { + if (config->callback /*&& co2val > 410 && co2val < 2000*/) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, @@ -162,7 +162,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x00); +// mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 0f4d104..ad9ce2c 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -1,6 +1,8 @@ + + OAP Sensor @@ -96,7 +98,12 @@

    OpenAirProject Sensor

    +
    +
    + Current Data + +
    WiFi @@ -395,6 +402,26 @@

    OpenAirProject Sensor
    + \ No newline at end of file From 0d47326d67f9ef7225a93f57222274061b647f15 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 20:37:41 +0100 Subject: [PATCH 121/200] fix reload time --- components/oap-wifi/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index ad9ce2c..3311e5b 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -418,7 +418,7 @@

    OpenAirProject Sensor Date: Sun, 7 Jan 2018 20:37:41 +0100 Subject: [PATCH 122/200] fix reload time --- components/oap-wifi/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index ad9ce2c..3311e5b 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -418,7 +418,7 @@

    OpenAirProject Sensor
    Date: Sun, 7 Jan 2018 21:04:30 +0100 Subject: [PATCH 123/200] add version and uptime in status display --- components/oap-wifi/index.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 3311e5b..a03362e 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -407,7 +407,12 @@

    OpenAirProject Sensor'+ + 'Env 0: Temp: '+parseFloat(data.env0.temp).toFixed(2)+ '°C - Pressure: '+parseFloat(data.env0.pressure).toFixed(2)+ 'hPa - Humidity: '+parseFloat(data.env0.humidity).toFixed(2)+ '% - Env 2: CO2: '+parseFloat(data.env2.co2).toFixed(2)+ From 76111affd35b9be4639551fcb01ba0c2208c2044 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Jan 2018 21:04:30 +0100 Subject: [PATCH 124/200] add version and uptime in status display --- components/oap-wifi/index.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 3311e5b..a03362e 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -407,7 +407,12 @@

    OpenAirProject Sensor'+ + 'Env 0: Temp: '+parseFloat(data.env0.temp).toFixed(2)+ '°C - Pressure: '+parseFloat(data.env0.pressure).toFixed(2)+ 'hPa - Humidity: '+parseFloat(data.env0.humidity).toFixed(2)+ '% - Env 2: CO2: '+parseFloat(data.env2.co2).toFixed(2)+ From aa4de8858a1872a90e0ee52f33ac2dc23d008567 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 8 Jan 2018 23:04:57 +0100 Subject: [PATCH 125/200] use sealevel pressure in web frontend and on display --- components/oap-wifi/cpanel.c | 14 +++++++++++--- main/main.c | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 12fe9bf..cbd9b46 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -93,14 +93,14 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON *envobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env0", envobj0); cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); - cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.pressure)); + cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.sealevel)); cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); } if(CONFIG_OAP_BMX280_ENABLED_AUX) { cJSON *envobj1 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env1", envobj1); cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); - cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.pressure)); + cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.sealevel)); cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); } if(CONFIG_OAP_MH_ENABLED) { @@ -152,6 +152,10 @@ static void handler_set_config(struct mg_connection *nc, struct http_message *me * GET /set - Set the connection info (REST request). * POST /ssidSelected - Set the connection info (HTML FORM). */ +#include "mhz19.h" +extern mhz19_config_t mhz19_cfg; +esp_err_t mhz19_calibrate(mhz19_config_t* config); + void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { ESP_LOGV(tag, "- Event: %d", ev); uint8_t handled = 0; @@ -191,7 +195,11 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { handled = 1; } } - + if(strcmp(uri, "/calibrate") == 0) { + mhz19_calibrate(&mhz19_cfg); + mg_send(nc,"ok", 2); + handled = 1; + } if (!handled) { mg_send_head(nc, 404, 0, "Content-Type: text/plain"); } diff --git a/main/main.c b/main/main.c index 30d5687..42e4c5c 100644 --- a/main/main.c +++ b/main/main.c @@ -221,7 +221,7 @@ static esp_err_t pm_meter_init() { env_data_record_t last_env_data[3]; static bmx280_config_t bmx280_config[2]; -static mhz19_config_t mhz19_cfg; +mhz19_config_t mhz19_cfg; static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { @@ -389,7 +389,7 @@ void display_task(void *ptr) { ssd1306_display_clear(); sprintf(logstr, "%s%.2fC\n\n%.2fhPa\n\n%.2f%% / %dppm\n\nPM: %d / %d / %d",toggle, last_env_data[0].env_data.temp, - last_env_data[0].env_data.pressure, + last_env_data[0].env_data.sealevel, last_env_data[0].env_data.humidity, last_env_data[2].env_data.co2, pm_data_array.pm_data[0].pm1_0, From 02baa330770cf807341b86b0691deed2773d6412 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 8 Jan 2018 23:04:57 +0100 Subject: [PATCH 126/200] use sealevel pressure in web frontend and on display --- components/oap-wifi/cpanel.c | 14 +++++++++++--- main/main.c | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 12fe9bf..cbd9b46 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -93,14 +93,14 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON *envobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env0", envobj0); cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); - cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.pressure)); + cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.sealevel)); cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); } if(CONFIG_OAP_BMX280_ENABLED_AUX) { cJSON *envobj1 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env1", envobj1); cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); - cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.pressure)); + cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.sealevel)); cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); } if(CONFIG_OAP_MH_ENABLED) { @@ -152,6 +152,10 @@ static void handler_set_config(struct mg_connection *nc, struct http_message *me * GET /set - Set the connection info (REST request). * POST /ssidSelected - Set the connection info (HTML FORM). */ +#include "mhz19.h" +extern mhz19_config_t mhz19_cfg; +esp_err_t mhz19_calibrate(mhz19_config_t* config); + void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { ESP_LOGV(tag, "- Event: %d", ev); uint8_t handled = 0; @@ -191,7 +195,11 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { handled = 1; } } - + if(strcmp(uri, "/calibrate") == 0) { + mhz19_calibrate(&mhz19_cfg); + mg_send(nc,"ok", 2); + handled = 1; + } if (!handled) { mg_send_head(nc, 404, 0, "Content-Type: text/plain"); } diff --git a/main/main.c b/main/main.c index 30d5687..42e4c5c 100644 --- a/main/main.c +++ b/main/main.c @@ -221,7 +221,7 @@ static esp_err_t pm_meter_init() { env_data_record_t last_env_data[3]; static bmx280_config_t bmx280_config[2]; -static mhz19_config_t mhz19_cfg; +mhz19_config_t mhz19_cfg; static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { @@ -389,7 +389,7 @@ void display_task(void *ptr) { ssd1306_display_clear(); sprintf(logstr, "%s%.2fC\n\n%.2fhPa\n\n%.2f%% / %dppm\n\nPM: %d / %d / %d",toggle, last_env_data[0].env_data.temp, - last_env_data[0].env_data.pressure, + last_env_data[0].env_data.sealevel, last_env_data[0].env_data.humidity, last_env_data[2].env_data.co2, pm_data_array.pm_data[0].pm1_0, From 96b39fde5555812281802c1f137fa651948f3323 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 11:31:05 +0100 Subject: [PATCH 127/200] re enable range check for mh-z19 and add http user agent with version --- components/oap-common/include/oap_common.h | 3 +++ components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 6 ++++++ .../oap-http-get-publisher/http_get_publisher.c | 2 ++ components/oap-hw-mhz19/mhz19.c | 12 +++++++++--- components/oap-ota/ota.c | 12 +++++++----- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index b3a1d0c..f253658 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -34,6 +34,8 @@ #include "esp_log.h" #include "freertos/FreeRTOS.h" +#include "esp_request.h" + //to silence eclipse errors typedef unsigned short uint16_t; @@ -69,4 +71,5 @@ void delay(uint32_t); void delayMicroseconds(uint32_t us); void set_gpio(uint8_t gpio, uint8_t enabled); void configure_gpio(uint8_t gpio); +void req_set_user_agent(request_t* req); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 4c5506d..61ddb60 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 4 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 1ecf245..0e5da18 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -121,3 +121,9 @@ void configure_gpio(uint8_t gpio) { ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); } } + +void req_set_user_agent(request_t* req) { + char agent[80]; + sprintf(agent, "User-Agent: OTA-ESP32/%s", oap_version_str()); + req_setopt(req, REQ_SET_HEADER, agent); +} diff --git a/components/oap-http-get-publisher/http_get_publisher.c b/components/oap-http-get-publisher/http_get_publisher.c index 174b401..a7d4ff4 100644 --- a/components/oap-http-get-publisher/http_get_publisher.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -68,6 +68,8 @@ static esp_err_t http_get(char* uri, oap_measurement_t* meas) { ESP_LOGD(TAG, "request payload: %s", payload); req_setopt(req, REQ_SET_METHOD, "GET"); req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); + req_set_user_agent(req); + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); int response_code = req_perform(req); diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 0db7926..d957d9b 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -121,7 +121,7 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { int s=data[5]; int u=(data[6]<<8) | data[7]; ESP_LOGD(TAG, "CO2: %d T:%d S:%d U:%d",co2val, t, s, u); - if (config->callback /*&& co2val > 410 && co2val < 2000*/) { + if (config->callback && co2val > 410 && co2val < 3000) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, @@ -154,6 +154,11 @@ esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled) { return ESP_OK; //todo } +esp_err_t mhz19_calibrate(mhz19_config_t* config) { + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0); + return mhz19_cmd(config, MH_Z19_CALIBRATE_ZERO_POINT, 0)==9?ESP_OK:ESP_FAIL; +} + esp_err_t mhz19_init(mhz19_config_t* config) { mhz19_enable(config, 0); mhz19_init_uart(config); @@ -162,8 +167,9 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) -// mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0); - + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); + mhz19_cmd(config, MH_Z19_SENSOR_DETECTION_RANGE, 2000); + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index 65ceba8..1ee4bee 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -43,10 +43,10 @@ #define TAG "ota" -extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); -extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); -//extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); -//extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); +//extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +//extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { for (int i = 0; i < 32; i++) { @@ -173,7 +173,8 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, get_ota_status_callback); - + req_set_user_agent(req); + int status = req_perform(req); req_clean(req); @@ -224,6 +225,7 @@ static esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_i req_setopt(req, REQ_SET_HEADER, "Connection: close"); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_ota_binary_callback); + req_set_user_agent(req); mbedtls_sha256_context sha_context; mbedtls_sha256_init(&sha_context); From 8fdb04c0f26cc0f71dcbaff89a7c0b0c92610da5 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 11:31:05 +0100 Subject: [PATCH 128/200] re enable range check for mh-z19 and add http user agent with version --- components/oap-common/include/oap_common.h | 3 +++ components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 6 ++++++ .../oap-http-get-publisher/http_get_publisher.c | 2 ++ components/oap-hw-mhz19/mhz19.c | 12 +++++++++--- components/oap-ota/ota.c | 12 +++++++----- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index b3a1d0c..f253658 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -34,6 +34,8 @@ #include "esp_log.h" #include "freertos/FreeRTOS.h" +#include "esp_request.h" + //to silence eclipse errors typedef unsigned short uint16_t; @@ -69,4 +71,5 @@ void delay(uint32_t); void delayMicroseconds(uint32_t us); void set_gpio(uint8_t gpio, uint8_t enabled); void configure_gpio(uint8_t gpio); +void req_set_user_agent(request_t* req); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 4c5506d..61ddb60 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 4 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 1ecf245..0e5da18 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -121,3 +121,9 @@ void configure_gpio(uint8_t gpio) { ESP_ERROR_CHECK(gpio_set_pull_mode(gpio, GPIO_PULLDOWN_ONLY)); } } + +void req_set_user_agent(request_t* req) { + char agent[80]; + sprintf(agent, "User-Agent: OTA-ESP32/%s", oap_version_str()); + req_setopt(req, REQ_SET_HEADER, agent); +} diff --git a/components/oap-http-get-publisher/http_get_publisher.c b/components/oap-http-get-publisher/http_get_publisher.c index 174b401..a7d4ff4 100644 --- a/components/oap-http-get-publisher/http_get_publisher.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -68,6 +68,8 @@ static esp_err_t http_get(char* uri, oap_measurement_t* meas) { ESP_LOGD(TAG, "request payload: %s", payload); req_setopt(req, REQ_SET_METHOD, "GET"); req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); + req_set_user_agent(req); + req->ca_cert = req_parse_x509_crt((unsigned char*)_root_ca_pem_start, _root_ca_pem_end-_root_ca_pem_start); int response_code = req_perform(req); diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 0db7926..d957d9b 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -121,7 +121,7 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { int s=data[5]; int u=(data[6]<<8) | data[7]; ESP_LOGD(TAG, "CO2: %d T:%d S:%d U:%d",co2val, t, s, u); - if (config->callback /*&& co2val > 410 && co2val < 2000*/) { + if (config->callback && co2val > 410 && co2val < 3000) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, @@ -154,6 +154,11 @@ esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled) { return ESP_OK; //todo } +esp_err_t mhz19_calibrate(mhz19_config_t* config) { + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0); + return mhz19_cmd(config, MH_Z19_CALIBRATE_ZERO_POINT, 0)==9?ESP_OK:ESP_FAIL; +} + esp_err_t mhz19_init(mhz19_config_t* config) { mhz19_enable(config, 0); mhz19_init_uart(config); @@ -162,8 +167,9 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) -// mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0x0); - + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); + mhz19_cmd(config, MH_Z19_SENSOR_DETECTION_RANGE, 2000); + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo diff --git a/components/oap-ota/ota.c b/components/oap-ota/ota.c index 65ceba8..1ee4bee 100644 --- a/components/oap-ota/ota.c +++ b/components/oap-ota/ota.c @@ -43,10 +43,10 @@ #define TAG "ota" -extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); -extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); -//extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); -//extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); +//extern const uint8_t _root_ca_pem_start[] asm("_binary_comodo_ca_pem_start"); +//extern const uint8_t _root_ca_pem_end[] asm("_binary_comodo_ca_pem_end"); +extern const uint8_t _root_ca_pem_start[] asm("_binary_lets_encrypt_x3_cross_signed_pem_start"); +extern const uint8_t _root_ca_pem_end[] asm("_binary_lets_encrypt_x3_cross_signed_pem_end"); void sha_to_hexstr(unsigned char hash[32], unsigned char hex[64]) { for (int i = 0; i < 32; i++) { @@ -173,7 +173,8 @@ esp_err_t fetch_last_ota_info(ota_config_t* ota_config, ota_info_t* ota_info) req_setopt(req, REQ_SET_HEADER, HTTP_HEADER_CONNECTION_CLOSE); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, get_ota_status_callback); - + req_set_user_agent(req); + int status = req_perform(req); req_clean(req); @@ -224,6 +225,7 @@ static esp_err_t download_ota_binary(ota_config_t* ota_config, ota_info_t* ota_i req_setopt(req, REQ_SET_HEADER, "Connection: close"); req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_ota_binary_callback); + req_set_user_agent(req); mbedtls_sha256_context sha_context; mbedtls_sha256_init(&sha_context); From ab27cac29fc6eed7f2039f4aa1869e6d5ebe0318 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 15:34:27 +0100 Subject: [PATCH 129/200] allow publishing without dust meter --- components/oap-meter/include/pm_meter.h | 1 + components/oap-meter/meas_intervals.c | 1 + main/main.c | 10 +++++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/components/oap-meter/include/pm_meter.h b/components/oap-meter/include/pm_meter.h index c3760ed..b1625b0 100644 --- a/components/oap-meter/include/pm_meter.h +++ b/components/oap-meter/include/pm_meter.h @@ -36,6 +36,7 @@ pm_meter_aux_t pm_meter_aux; typedef struct { uint8_t count; pm_data_t pm_data[2]; + long timestamp; } pm_data_pair_t; typedef enum { diff --git a/components/oap-meter/meas_intervals.c b/components/oap-meter/meas_intervals.c index af0603d..b0d7c0c 100644 --- a/components/oap-meter/meas_intervals.c +++ b/components/oap-meter/meas_intervals.c @@ -129,6 +129,7 @@ static void task() { } if (ok) { + pm_data_pair.timestamp = oap_epoch_sec(); _callback(PM_METER_RESULT,&pm_data_pair); } diff --git a/main/main.c b/main/main.c index 42e4c5c..f471ec6 100644 --- a/main/main.c +++ b/main/main.c @@ -291,15 +291,19 @@ static void publish_all(oap_measurement_t* meas) { } static void publish_loop() { + long last_published = 0; + while (1) { long localTime = oap_epoch_sec_valid(); long sysTime = oap_epoch_sec(); pm_data_pair_t pm_data_pair; + memset(&pm_data_pair, 0, sizeof(pm_data_pair)); log_heap_size("publish_loop"); - if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 10000)) { + if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 10000) || (sysTime - last_published) > oap_sensor_config.meas_interval) { log_task_stack(TAG); + last_published = sysTime; float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); #ifdef CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); @@ -309,8 +313,8 @@ static void publish_loop() { ledc_update(); oap_measurement_t meas = { - .pm = &pm_data_pair.pm_data[0], - .pm_aux = pm_data_pair.count == 2 ? &pm_data_pair.pm_data[1] : NULL, + .pm = sysTime - pm_data_pair.timestamp < (oap_sensor_config.meas_interval*2) ? &pm_data_pair.pm_data[0]:NULL, + .pm_aux = pm_data_pair.timestamp < (oap_sensor_config.meas_interval*2) ? (pm_data_pair.count == 2 ? &pm_data_pair.pm_data[1] : NULL):NULL, .env = sysTime - last_env_data[0].timestamp < 60 ? &last_env_data[0].env_data : NULL, .env_int = sysTime - last_env_data[1].timestamp < 60 ? &last_env_data[1].env_data : NULL, .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, From 2e374f8101b938a75e2428b72e3d66efc96910bc Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 15:34:27 +0100 Subject: [PATCH 130/200] allow publishing without dust meter --- components/oap-meter/include/pm_meter.h | 1 + components/oap-meter/meas_intervals.c | 1 + main/main.c | 10 +++++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/components/oap-meter/include/pm_meter.h b/components/oap-meter/include/pm_meter.h index c3760ed..b1625b0 100644 --- a/components/oap-meter/include/pm_meter.h +++ b/components/oap-meter/include/pm_meter.h @@ -36,6 +36,7 @@ pm_meter_aux_t pm_meter_aux; typedef struct { uint8_t count; pm_data_t pm_data[2]; + long timestamp; } pm_data_pair_t; typedef enum { diff --git a/components/oap-meter/meas_intervals.c b/components/oap-meter/meas_intervals.c index af0603d..b0d7c0c 100644 --- a/components/oap-meter/meas_intervals.c +++ b/components/oap-meter/meas_intervals.c @@ -129,6 +129,7 @@ static void task() { } if (ok) { + pm_data_pair.timestamp = oap_epoch_sec(); _callback(PM_METER_RESULT,&pm_data_pair); } diff --git a/main/main.c b/main/main.c index 42e4c5c..f471ec6 100644 --- a/main/main.c +++ b/main/main.c @@ -291,15 +291,19 @@ static void publish_all(oap_measurement_t* meas) { } static void publish_loop() { + long last_published = 0; + while (1) { long localTime = oap_epoch_sec_valid(); long sysTime = oap_epoch_sec(); pm_data_pair_t pm_data_pair; + memset(&pm_data_pair, 0, sizeof(pm_data_pair)); log_heap_size("publish_loop"); - if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 10000)) { + if (xQueueReceive(pm_meter_result_queue, &pm_data_pair, 10000) || (sysTime - last_published) > oap_sensor_config.meas_interval) { log_task_stack(TAG); + last_published = sysTime; float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); #ifdef CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); @@ -309,8 +313,8 @@ static void publish_loop() { ledc_update(); oap_measurement_t meas = { - .pm = &pm_data_pair.pm_data[0], - .pm_aux = pm_data_pair.count == 2 ? &pm_data_pair.pm_data[1] : NULL, + .pm = sysTime - pm_data_pair.timestamp < (oap_sensor_config.meas_interval*2) ? &pm_data_pair.pm_data[0]:NULL, + .pm_aux = pm_data_pair.timestamp < (oap_sensor_config.meas_interval*2) ? (pm_data_pair.count == 2 ? &pm_data_pair.pm_data[1] : NULL):NULL, .env = sysTime - last_env_data[0].timestamp < 60 ? &last_env_data[0].env_data : NULL, .env_int = sysTime - last_env_data[1].timestamp < 60 ? &last_env_data[1].env_data : NULL, .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, From a26281dec09781633b0c8c4c7bc1a7dbe1f03ffe Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 18:22:10 +0100 Subject: [PATCH 131/200] bump version to 1.3.5 --- components/oap-common/include/oap_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 61ddb60..add4c04 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 4 +#define OAP_VER_PATCH 5 typedef struct { uint8_t major; From 4d1a91713345255cb5af8d2ffd9ef8d1a5d34653 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 18:22:10 +0100 Subject: [PATCH 132/200] bump version to 1.3.5 --- components/oap-common/include/oap_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 61ddb60..add4c04 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 4 +#define OAP_VER_PATCH 5 typedef struct { uint8_t major; From 16761d04409b7b8009c228667129a3446ecc25f3 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 21:45:37 +0100 Subject: [PATCH 133/200] improve status view --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-bmx280/bmx280.c | 4 +- components/oap-wifi/cpanel.c | 42 ++++++++++++--------- components/oap-wifi/index.html | 37 +++++++++++++----- main/main.c | 2 + 5 files changed, 57 insertions(+), 30 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index add4c04..bccf36d 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 5 +#define OAP_VER_PATCH 6 typedef struct { uint8_t major; diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 33e2587..15425bb 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -65,9 +65,9 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); result.temp += bmx280_config->tempOffset; result.humidity += bmx280_config->humidityOffset; - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); if (bmx280_config->callback) { bmx280_config->callback(&result); } @@ -106,7 +106,7 @@ esp_err_t bmx280_i2c_setup(bmx280_config_t* config) { i2c_conf.scl_io_num = config->scl_pin;//CONFIG_OAP_BMX280_I2C_SCL_PIN; i2c_conf.sda_pullup_en = GPIO_PULLUP_ENABLE; i2c_conf.scl_pullup_en = GPIO_PULLUP_ENABLE; - i2c_conf.master.clk_speed = 100000; + i2c_conf.master.clk_speed = 1000000; esp_err_t res; if ((res = i2c_param_config(config->i2c_num, &i2c_conf)) != ESP_OK) return res; diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index cbd9b46..d677218 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -77,8 +77,9 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me struct tm timeinfo = {0}; localtime_r(&now, &timeinfo); + time_t boot_time = now-(xTaskGetTickCount()/configTICK_RATE_HZ); + long sysTime = oap_epoch_sec(); if(timeinfo.tm_year > (2016 - 1900)) { - time_t boot_time = now-(xTaskGetTickCount()/configTICK_RATE_HZ); #if 0 setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 1); tzset(); @@ -86,39 +87,46 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me char strftime_buf[64]; strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); cJSON_AddItemToObject(status, "utctime", cJSON_CreateString(strftime_buf)); - cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); - cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); } - if(CONFIG_OAP_BMX280_ENABLED) { + cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); + cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); + + if(CONFIG_OAP_BMX280_ENABLED && last_env_data[0].timestamp) { cJSON *envobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env0", envobj0); cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.sealevel)); cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); + cJSON_AddItemToObject(envobj0, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[0].timestamp)); } - if(CONFIG_OAP_BMX280_ENABLED_AUX) { + if(CONFIG_OAP_BMX280_ENABLED_AUX && last_env_data[1].timestamp) { cJSON *envobj1 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env1", envobj1); cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.sealevel)); cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); + cJSON_AddItemToObject(envobj1, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[1].timestamp)); } - if(CONFIG_OAP_MH_ENABLED) { + if(CONFIG_OAP_MH_ENABLED && last_env_data[2].timestamp) { cJSON *envobj2 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env2", envobj2); cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); + cJSON_AddItemToObject(envobj2, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[2].timestamp)); } - cJSON *pmobj0 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "pm0", pmobj0); - cJSON_AddItemToObject(pmobj0, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[0].pm1_0)); - cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); - cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); - if(CONFIG_OAP_PM_ENABLED_AUX) { - cJSON *pmobj1 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "pm1", pmobj1); - cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); - cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); - cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + if(pm_data_array.timestamp) { + cJSON *pmobj0 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm0", pmobj0); + cJSON_AddItemToObject(pmobj0, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[0].pm1_0)); + cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); + cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); + cJSON_AddItemToObject(pmobj0, "timestamp", cJSON_CreateNumber(sysTime - pm_data_array.timestamp)); + if(CONFIG_OAP_PM_ENABLED_AUX) { + cJSON *pmobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm1", pmobj1); + cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); + cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); + cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + } } char* json = cJSON_Print(root); mg_send(nc, json, strlen(json)); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index a03362e..4c7b86f 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -407,22 +407,39 @@

    OpenAirProject Sensor
    '+ - 'Env 0: Temp: '+parseFloat(data.env0.temp).toFixed(2)+ - '°C - Pressure: '+parseFloat(data.env0.pressure).toFixed(2)+ - 'hPa - Humidity: '+parseFloat(data.env0.humidity).toFixed(2)+ - '% - Env 2: CO2: '+parseFloat(data.env2.co2).toFixed(2)+ - 'ppm - PM0: pm1_0: '+parseInt(data.pm0.pm1_0)+ - ' - pm2_5: '+parseInt(data.pm0.pm2_5)+ - ' - pm10: '+parseInt(data.pm0.pm10)); + ' - Heap: '+status.heap; + if(data.env0) { + str += '

    Env0: Temp: '+parseFloat(data.env0.temp).toFixed(2)+ + '°C - Pressure: '+parseFloat(data.env0.pressure).toFixed(2)+ + 'hPa - Humidity: '+parseFloat(data.env0.humidity).toFixed(2)+'%'; + } + if(data.env1) { + str += '

    Env1: Temp: '+parseFloat(data.env1.temp).toFixed(2)+ + '°C - Pressure: '+parseFloat(data.env1.pressure).toFixed(2)+ + 'hPa - Humidity: '+parseFloat(data.env1.humidity).toFixed(2)+'%'; + } + if(data.env2) { + str += '

    Env2: CO2: '+parseFloat(data.env2.co2).toFixed(2)+'ppm'; + } + if(data.pm0) { + str += '

    PM0: pm1_0: '+parseInt(data.pm0.pm1_0)+ + ' - pm2_5: '+parseInt(data.pm0.pm2_5)+ + ' - pm10: '+parseInt(data.pm0.pm10); + } + if(data.pm1) { + str += '

    PM1: pm1_0: '+parseInt(data.pm1.pm1_0)+ + ' - pm2_5: '+parseInt(data.pm1.pm2_5)+ + ' - pm10: '+parseInt(data.pm1.pm10); + } + $("#current").html(str); }); } $(document).ready(function(){ + getCurrent(); setInterval(getCurrent, 2000); }); diff --git a/main/main.c b/main/main.c index f471ec6..70fa415 100644 --- a/main/main.c +++ b/main/main.c @@ -372,6 +372,8 @@ static void btn_handler(btn_action_t action) { case LONG_PRESS : ESP_LOGW(TAG, "config reset!"); storage_clean(); + ledc_set_mode(LED_BLINK); + ledc_update(); delay(1000); oap_reboot("reboot due to config reset"); break; From d4ff9b4f23526f0129582a1798b6c754c2bbdbfc Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 21:45:37 +0100 Subject: [PATCH 134/200] improve status view --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-bmx280/bmx280.c | 4 +- components/oap-wifi/cpanel.c | 42 ++++++++++++--------- components/oap-wifi/index.html | 37 +++++++++++++----- main/main.c | 2 + 5 files changed, 57 insertions(+), 30 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index add4c04..bccf36d 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 5 +#define OAP_VER_PATCH 6 typedef struct { uint8_t major; diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 33e2587..15425bb 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -65,9 +65,9 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); result.temp += bmx280_config->tempOffset; result.humidity += bmx280_config->humidityOffset; - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); if (bmx280_config->callback) { bmx280_config->callback(&result); } @@ -106,7 +106,7 @@ esp_err_t bmx280_i2c_setup(bmx280_config_t* config) { i2c_conf.scl_io_num = config->scl_pin;//CONFIG_OAP_BMX280_I2C_SCL_PIN; i2c_conf.sda_pullup_en = GPIO_PULLUP_ENABLE; i2c_conf.scl_pullup_en = GPIO_PULLUP_ENABLE; - i2c_conf.master.clk_speed = 100000; + i2c_conf.master.clk_speed = 1000000; esp_err_t res; if ((res = i2c_param_config(config->i2c_num, &i2c_conf)) != ESP_OK) return res; diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index cbd9b46..d677218 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -77,8 +77,9 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me struct tm timeinfo = {0}; localtime_r(&now, &timeinfo); + time_t boot_time = now-(xTaskGetTickCount()/configTICK_RATE_HZ); + long sysTime = oap_epoch_sec(); if(timeinfo.tm_year > (2016 - 1900)) { - time_t boot_time = now-(xTaskGetTickCount()/configTICK_RATE_HZ); #if 0 setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 1); tzset(); @@ -86,39 +87,46 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me char strftime_buf[64]; strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); cJSON_AddItemToObject(status, "utctime", cJSON_CreateString(strftime_buf)); - cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); - cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); } - if(CONFIG_OAP_BMX280_ENABLED) { + cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); + cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); + + if(CONFIG_OAP_BMX280_ENABLED && last_env_data[0].timestamp) { cJSON *envobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env0", envobj0); cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.sealevel)); cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); + cJSON_AddItemToObject(envobj0, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[0].timestamp)); } - if(CONFIG_OAP_BMX280_ENABLED_AUX) { + if(CONFIG_OAP_BMX280_ENABLED_AUX && last_env_data[1].timestamp) { cJSON *envobj1 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env1", envobj1); cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.sealevel)); cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); + cJSON_AddItemToObject(envobj1, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[1].timestamp)); } - if(CONFIG_OAP_MH_ENABLED) { + if(CONFIG_OAP_MH_ENABLED && last_env_data[2].timestamp) { cJSON *envobj2 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env2", envobj2); cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); + cJSON_AddItemToObject(envobj2, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[2].timestamp)); } - cJSON *pmobj0 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "pm0", pmobj0); - cJSON_AddItemToObject(pmobj0, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[0].pm1_0)); - cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); - cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); - if(CONFIG_OAP_PM_ENABLED_AUX) { - cJSON *pmobj1 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "pm1", pmobj1); - cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); - cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); - cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + if(pm_data_array.timestamp) { + cJSON *pmobj0 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm0", pmobj0); + cJSON_AddItemToObject(pmobj0, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[0].pm1_0)); + cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); + cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); + cJSON_AddItemToObject(pmobj0, "timestamp", cJSON_CreateNumber(sysTime - pm_data_array.timestamp)); + if(CONFIG_OAP_PM_ENABLED_AUX) { + cJSON *pmobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm1", pmobj1); + cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); + cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); + cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + } } char* json = cJSON_Print(root); mg_send(nc, json, strlen(json)); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index a03362e..4c7b86f 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -407,22 +407,39 @@

    OpenAirProject Sensor'+ - 'Env 0: Temp: '+parseFloat(data.env0.temp).toFixed(2)+ - '°C - Pressure: '+parseFloat(data.env0.pressure).toFixed(2)+ - 'hPa - Humidity: '+parseFloat(data.env0.humidity).toFixed(2)+ - '% - Env 2: CO2: '+parseFloat(data.env2.co2).toFixed(2)+ - 'ppm - PM0: pm1_0: '+parseInt(data.pm0.pm1_0)+ - ' - pm2_5: '+parseInt(data.pm0.pm2_5)+ - ' - pm10: '+parseInt(data.pm0.pm10)); + ' - Heap: '+status.heap; + if(data.env0) { + str += '

    Env0: Temp: '+parseFloat(data.env0.temp).toFixed(2)+ + '°C - Pressure: '+parseFloat(data.env0.pressure).toFixed(2)+ + 'hPa - Humidity: '+parseFloat(data.env0.humidity).toFixed(2)+'%'; + } + if(data.env1) { + str += '

    Env1: Temp: '+parseFloat(data.env1.temp).toFixed(2)+ + '°C - Pressure: '+parseFloat(data.env1.pressure).toFixed(2)+ + 'hPa - Humidity: '+parseFloat(data.env1.humidity).toFixed(2)+'%'; + } + if(data.env2) { + str += '

    Env2: CO2: '+parseFloat(data.env2.co2).toFixed(2)+'ppm'; + } + if(data.pm0) { + str += '

    PM0: pm1_0: '+parseInt(data.pm0.pm1_0)+ + ' - pm2_5: '+parseInt(data.pm0.pm2_5)+ + ' - pm10: '+parseInt(data.pm0.pm10); + } + if(data.pm1) { + str += '

    PM1: pm1_0: '+parseInt(data.pm1.pm1_0)+ + ' - pm2_5: '+parseInt(data.pm1.pm2_5)+ + ' - pm10: '+parseInt(data.pm1.pm10); + } + $("#current").html(str); }); } $(document).ready(function(){ + getCurrent(); setInterval(getCurrent, 2000); }); diff --git a/main/main.c b/main/main.c index f471ec6..70fa415 100644 --- a/main/main.c +++ b/main/main.c @@ -372,6 +372,8 @@ static void btn_handler(btn_action_t action) { case LONG_PRESS : ESP_LOGW(TAG, "config reset!"); storage_clean(); + ledc_set_mode(LED_BLINK); + ledc_update(); delay(1000); oap_reboot("reboot due to config reset"); break; From 685e83c47ef957084023d0895d7cf4fa4e8618a7 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 23:00:10 +0100 Subject: [PATCH 135/200] correct humidity according to temperature offset --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-bmx280/bmx280.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index bccf36d..ea42102 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 6 +#define OAP_VER_PATCH 7 typedef struct { uint8_t major; diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 15425bb..cf0009f 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -35,8 +35,24 @@ #include "i2c_bme280.h" static char* TAG = "bmx280"; -static float getPressureAtSeaLevel(float altitude, float pressure) -{ + + +static double getHumidityForTemp(double srcHumidity, double temp, double temp2) { + double a = 7.5, b = 237.3; + double mw = 18.016; + double Rstar = 8314.3; + + if(temp < 0) { + a=7.6; + b=240.7; + } + double sdd = 6.1078 * pow(10, (a*temp)/(b+temp)); + double dd = srcHumidity/100 * sdd; + double af = pow(10,5) * mw/Rstar * dd/ ( temp + 273.15); + return 100 * (temp2 + 273.15) * Rstar * af/(pow(10,5) * mw * 6.1078 * pow(10, (a*temp2)/(b+temp2))); +} + +static float getPressureAtSeaLevel(float altitude, float pressure) { float gradient = 0.0065; float tempAtSea = 15.0; tempAtSea += 273.15; // °C to K @@ -66,6 +82,7 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); + result.humidity = getHumidityForTemp(result.humidity, result.temp, result.temp + bmx280_config->tempOffset); result.temp += bmx280_config->tempOffset; result.humidity += bmx280_config->humidityOffset; if (bmx280_config->callback) { From ffb4405b58cdecb3fd5aecd800ebe714c35deb61 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 9 Jan 2018 23:00:10 +0100 Subject: [PATCH 136/200] correct humidity according to temperature offset --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-bmx280/bmx280.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index bccf36d..ea42102 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 6 +#define OAP_VER_PATCH 7 typedef struct { uint8_t major; diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 15425bb..cf0009f 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -35,8 +35,24 @@ #include "i2c_bme280.h" static char* TAG = "bmx280"; -static float getPressureAtSeaLevel(float altitude, float pressure) -{ + + +static double getHumidityForTemp(double srcHumidity, double temp, double temp2) { + double a = 7.5, b = 237.3; + double mw = 18.016; + double Rstar = 8314.3; + + if(temp < 0) { + a=7.6; + b=240.7; + } + double sdd = 6.1078 * pow(10, (a*temp)/(b+temp)); + double dd = srcHumidity/100 * sdd; + double af = pow(10,5) * mw/Rstar * dd/ ( temp + 273.15); + return 100 * (temp2 + 273.15) * Rstar * af/(pow(10,5) * mw * 6.1078 * pow(10, (a*temp2)/(b+temp2))); +} + +static float getPressureAtSeaLevel(float altitude, float pressure) { float gradient = 0.0065; float tempAtSea = 15.0; tempAtSea += 273.15; // °C to K @@ -66,6 +82,7 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); + result.humidity = getHumidityForTemp(result.humidity, result.temp, result.temp + bmx280_config->tempOffset); result.temp += bmx280_config->tempOffset; result.humidity += bmx280_config->humidityOffset; if (bmx280_config->callback) { From 6461b2d1637d19a402f21d2b4a5b98a41371d80f Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 10 Jan 2018 10:40:23 +0100 Subject: [PATCH 137/200] remove unused test tree --- .../oap-http-get-publisher/test/component.mk | 5 - .../test/test_thing_speak.c | 92 ------------------- 2 files changed, 97 deletions(-) delete mode 100644 components/oap-http-get-publisher/test/component.mk delete mode 100644 components/oap-http-get-publisher/test/test_thing_speak.c diff --git a/components/oap-http-get-publisher/test/component.mk b/components/oap-http-get-publisher/test/component.mk deleted file mode 100644 index 5dd172b..0000000 --- a/components/oap-http-get-publisher/test/component.mk +++ /dev/null @@ -1,5 +0,0 @@ -# -#Component Makefile -# - -COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/oap-http-get-publisher/test/test_thing_speak.c b/components/oap-http-get-publisher/test/test_thing_speak.c deleted file mode 100644 index 2d2c8da..0000000 --- a/components/oap-http-get-publisher/test/test_thing_speak.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * test_thing_speak.c - * - * Created on: Oct 1, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -#include "thing_speak.h" -#include "oap_test.h" - -#define TEST_API_KEY "QMN6JJM996QXBORX" - -TEST_CASE("publish to thingspeak", "[tspk]") { - test_require_wifi(); - - cJSON* cfg = cJSON_CreateObject(); - cJSON_AddNumberToObject(cfg, "enabled", 1); - cJSON_AddStringToObject(cfg, "apikey", TEST_API_KEY); - - TEST_ESP_OK(thingspeak_publisher.configure(cfg)); - cJSON_Delete(cfg); - - pm_data_t pm = { - .pm1_0 = 10, - .pm2_5 = 25, - .pm10 = 50, - .sensor_idx = 0 - }; - - pm_data_t pm_aux = { - .pm1_0 = 11, - .pm2_5 = 26, - .pm10 = 51, - .sensor_idx = 1 - }; - - env_data_t env = { - .temp = 15.5, - .pressure = 999.9, - .humidity = 79.11, - .sensor_idx = 0 - }; - - env_data_t env_int = { - .temp = 22.1, - .pressure = 997.9, - .humidity = 43.89, - .sensor_idx = 1 - }; - - oap_measurement_t meas = { - .pm = &pm, - .pm_aux = &pm_aux, - .env = &env, - .env_int = &env_int, - .local_time = 1505156826 - }; - - oap_sensor_config_t sensor_config = { - .0 - }; - - size_t curr_heap = 0; - size_t prev_heap = 0; - - /* - * heap consumption goes to 0 after ~10 requests - * warning - thingspeak cuts off abusive devices after a while - */ - for (int i = 0; i < 1; i++) { - curr_heap = xPortGetFreeHeapSize(); - ESP_LOGW("test", "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); - prev_heap = curr_heap; - TEST_ESP_OK(thingspeak_publisher.publish(&meas, &sensor_config)); - if (i) test_delay(1000); - } -} From cb69e9e3aa617715dd52b463baa811b588473880 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 10 Jan 2018 10:40:23 +0100 Subject: [PATCH 138/200] remove unused test tree --- .../oap-http-get-publisher/test/component.mk | 5 - .../test/test_thing_speak.c | 92 ------------------- 2 files changed, 97 deletions(-) delete mode 100644 components/oap-http-get-publisher/test/component.mk delete mode 100644 components/oap-http-get-publisher/test/test_thing_speak.c diff --git a/components/oap-http-get-publisher/test/component.mk b/components/oap-http-get-publisher/test/component.mk deleted file mode 100644 index 5dd172b..0000000 --- a/components/oap-http-get-publisher/test/component.mk +++ /dev/null @@ -1,5 +0,0 @@ -# -#Component Makefile -# - -COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/oap-http-get-publisher/test/test_thing_speak.c b/components/oap-http-get-publisher/test/test_thing_speak.c deleted file mode 100644 index 2d2c8da..0000000 --- a/components/oap-http-get-publisher/test/test_thing_speak.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * test_thing_speak.c - * - * Created on: Oct 1, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -#include "thing_speak.h" -#include "oap_test.h" - -#define TEST_API_KEY "QMN6JJM996QXBORX" - -TEST_CASE("publish to thingspeak", "[tspk]") { - test_require_wifi(); - - cJSON* cfg = cJSON_CreateObject(); - cJSON_AddNumberToObject(cfg, "enabled", 1); - cJSON_AddStringToObject(cfg, "apikey", TEST_API_KEY); - - TEST_ESP_OK(thingspeak_publisher.configure(cfg)); - cJSON_Delete(cfg); - - pm_data_t pm = { - .pm1_0 = 10, - .pm2_5 = 25, - .pm10 = 50, - .sensor_idx = 0 - }; - - pm_data_t pm_aux = { - .pm1_0 = 11, - .pm2_5 = 26, - .pm10 = 51, - .sensor_idx = 1 - }; - - env_data_t env = { - .temp = 15.5, - .pressure = 999.9, - .humidity = 79.11, - .sensor_idx = 0 - }; - - env_data_t env_int = { - .temp = 22.1, - .pressure = 997.9, - .humidity = 43.89, - .sensor_idx = 1 - }; - - oap_measurement_t meas = { - .pm = &pm, - .pm_aux = &pm_aux, - .env = &env, - .env_int = &env_int, - .local_time = 1505156826 - }; - - oap_sensor_config_t sensor_config = { - .0 - }; - - size_t curr_heap = 0; - size_t prev_heap = 0; - - /* - * heap consumption goes to 0 after ~10 requests - * warning - thingspeak cuts off abusive devices after a while - */ - for (int i = 0; i < 1; i++) { - curr_heap = xPortGetFreeHeapSize(); - ESP_LOGW("test", "REQUEST %d (heap %u, %d bytes)", i, curr_heap, curr_heap-prev_heap); - prev_heap = curr_heap; - TEST_ESP_OK(thingspeak_publisher.publish(&meas, &sensor_config)); - if (i) test_delay(1000); - } -} From 97d059f20fd85bd23a8d740b0742796f42b267cd Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 10 Jan 2018 11:11:57 +0100 Subject: [PATCH 139/200] Config option for button logic --- components/oap-hw-ext/Kconfig | 6 ++++++ components/oap-hw-ext/ctrl_btn.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/components/oap-hw-ext/Kconfig b/components/oap-hw-ext/Kconfig index e7d000e..a2a74ec 100644 --- a/components/oap-hw-ext/Kconfig +++ b/components/oap-hw-ext/Kconfig @@ -23,5 +23,11 @@ config OAP_BTN_0_PIN default 35 help ESP32 gpio + +config OAP_BTN_0_ACTIVE_LOW + bool "Active low" + default n + help + ESP32 gpio endmenu \ No newline at end of file diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 585c117..325d2f0 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -108,9 +108,15 @@ esp_err_t btn_configure(btn_callback_f callback) { _callback = callback; gpio_evt_queue = xQueueCreate(10, sizeof(gpio_event_t)); gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); + gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); +#else + gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_POSEDGE); +#endif gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); From 115511f76c3842fc92f9fbe9942d4d541d6b8778 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 10 Jan 2018 11:11:57 +0100 Subject: [PATCH 140/200] Config option for button logic --- components/oap-hw-ext/Kconfig | 6 ++++++ components/oap-hw-ext/ctrl_btn.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/components/oap-hw-ext/Kconfig b/components/oap-hw-ext/Kconfig index e7d000e..a2a74ec 100644 --- a/components/oap-hw-ext/Kconfig +++ b/components/oap-hw-ext/Kconfig @@ -23,5 +23,11 @@ config OAP_BTN_0_PIN default 35 help ESP32 gpio + +config OAP_BTN_0_ACTIVE_LOW + bool "Active low" + default n + help + ESP32 gpio endmenu \ No newline at end of file diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 585c117..325d2f0 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -108,9 +108,15 @@ esp_err_t btn_configure(btn_callback_f callback) { _callback = callback; gpio_evt_queue = xQueueCreate(10, sizeof(gpio_event_t)); gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); + gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); +#else + gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_POSEDGE); +#endif gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); From 0c778cb4b380d35d1fee284870c987e8ad8bf69f Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 13 Jan 2018 11:51:12 +0100 Subject: [PATCH 141/200] add distance metering --- components/oap-common/include/oap_data.h | 2 + components/oap-common/include/oap_data_env.h | 1 + components/oap-hw-ext/ctrl_btn.c | 7 +- components/oap-hw-hc-sr04/Kconfig | 39 +++++ components/oap-hw-hc-sr04/component.mk | 8 + components/oap-hw-hc-sr04/hcsr04.c | 163 +++++++++++++++++++ components/oap-hw-hc-sr04/include/hcsr04.h | 63 +++++++ components/oap-hw-mhz19/mhz19.c | 8 +- main/main.c | 27 ++- 9 files changed, 306 insertions(+), 12 deletions(-) create mode 100644 components/oap-hw-hc-sr04/Kconfig create mode 100644 components/oap-hw-hc-sr04/component.mk create mode 100644 components/oap-hw-hc-sr04/hcsr04.c create mode 100644 components/oap-hw-hc-sr04/include/hcsr04.h diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 00c4f71..7907437 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -32,6 +32,8 @@ typedef struct { env_data_t* env; env_data_t* env_int; env_data_t* co2; + env_data_t* distance1; + env_data_t* distance2; long int local_time; } oap_measurement_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index ba5ca5e..b8c087d 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -28,6 +28,7 @@ typedef struct { double pressure; double sealevel; double humidity; + uint32_t distance; uint32_t co2; uint32_t altitude; uint8_t sensor_idx; diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 325d2f0..3f5a326 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -115,7 +115,7 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #else gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_POSEDGE); + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #endif gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); @@ -124,6 +124,9 @@ esp_err_t btn_configure(btn_callback_f callback) { } bool is_ap_mode_pressed() { +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); +#else + return gpio_get_level(CONFIG_OAP_BTN_0_PIN); +#endif } - diff --git a/components/oap-hw-hc-sr04/Kconfig b/components/oap-hw-hc-sr04/Kconfig new file mode 100644 index 0000000..ac4ffcb --- /dev/null +++ b/components/oap-hw-hc-sr04/Kconfig @@ -0,0 +1,39 @@ +menu "OAP HC-SR04" + +config OAP_HCSR04_0_ENABLED + bool "enable ultrasonic range sensor #0 SR-HC04" + default y + help + todo + +config OAP_HCSR04_TRIGGER0 + int "Trigger 0 output PIN" + default 13 + help + todo + +config OAP_HCSR04_ECHO0 + int "Echo 0 input PIN" + default 12 + help + todo + +config OAP_HCSR04_1_ENABLED + bool "enable ultrasonic range sensor #1 SR-HC04" + default y + help + todo + +config OAP_HCSR04_TRIGGER1 + int "Trigger 1 output PIN" + default 14 + help + todo + +config OAP_HCSR04_ECHO1 + int "Echo 1 input PIN" + default 27 + help + todo + +endmenu diff --git a/components/oap-hw-hc-sr04/component.mk b/components/oap-hw-hc-sr04/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-hc-sr04/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c new file mode 100644 index 0000000..dc5c59c --- /dev/null +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -0,0 +1,163 @@ +/* + * hcsr04.c + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "esp_log.h" +#include "hcsr04.h" +#include "oap_debug.h" +#include "oap_data_env.h" + +#define ESP_INTR_FLAG_DEFAULT 0 + +static const char* TAG = "hcsr04"; +static QueueHandle_t hcsr04_evt_queue; + +typedef struct { + uint8_t gpio_num; + uint8_t gpio_val; + uint32_t timestamp; +} hcsr04_event_t; + +static double calc_dist(int time_diff) { + return 100*((time_diff/1000000.0)*340.29)/2; +} + +static void send_trigger(hcsr04_config_t* config) { + gpio_set_level(config->trigger_pin, 1); + ets_delay_us(10); + gpio_set_level(config->trigger_pin, 0); + config->state=WAITFORECHO; +} + +static void IRAM_ATTR hcsr04_isr_handler(void* arg) +{ + hcsr04_config_t* config=(hcsr04_config_t*) arg; + + hcsr04_event_t hcsr04_evt = { + .gpio_num = config->echo_pin, + .gpio_val = gpio_get_level(config->echo_pin), + .timestamp = system_get_time() + }; + xQueueSendFromISR(hcsr04_evt_queue, &hcsr04_evt, NULL); +} + +static void hcsr04_task(hcsr04_config_t* config) { + hcsr04_event_t gpio_evt; + uint32_t startpulse=0; + uint32_t endpulse=0; +// send_trigger(config); + while(1) { + if(config->enabled) { + if (xQueueReceive(hcsr04_evt_queue, &gpio_evt, 100)) { +// ESP_LOGD(TAG, "%d:%d:%d", config->state, gpio_evt.gpio_val, gpio_evt.timestamp); + switch(config->state) { + case WAITFORECHO: + if(gpio_evt.gpio_val) { + startpulse=gpio_evt.timestamp; + config->state = RECEIVE; + } + break; + case RECEIVE: + if(!gpio_evt.gpio_val) { + endpulse=gpio_evt.timestamp; + double distance = calc_dist(endpulse-startpulse); + ESP_LOGD(TAG, "difference: %d distance: %.2f", endpulse-startpulse, distance); + if (config->callback) { + env_data_t result = { + .sensor_idx = config->sensor_idx, + .distance = distance + }; + config->callback(&result); + } + config->state = IDLE; + } + break; + case IDLE: + break; + + } + } else { + send_trigger(config); + } + } + + if (config->interval > 0) { + delay(config->interval); + } else { + break; + } + } + vTaskDelete(NULL); +} + +esp_err_t hcsr04_enable(hcsr04_config_t* config, uint8_t enabled) { + ESP_LOGI(TAG,"enable(%d)",enabled); + config->enabled = enabled; + return ESP_OK; //todo +} + +esp_err_t hcsr04_init(hcsr04_config_t* config) { + hcsr04_enable(config, 0); + + char task_name[100]; + sprintf(task_name, "hcsr04_sensor_%d", config->sensor_idx); + hcsr04_evt_queue = xQueueCreate(10, sizeof(hcsr04_event_t)); + + gpio_pad_select_gpio(config->echo_pin); + gpio_set_direction(config->echo_pin, GPIO_MODE_INPUT); + gpio_set_pull_mode(config->echo_pin, GPIO_PULLDOWN_ONLY); + gpio_set_intr_type(config->echo_pin, GPIO_INTR_ANYEDGE); + + gpio_pad_select_gpio(config->trigger_pin); + gpio_set_direction(config->trigger_pin, GPIO_MODE_OUTPUT); + gpio_set_level(config->trigger_pin, 0); + + gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); + config->state = IDLE; + + gpio_isr_handler_add(config->echo_pin, hcsr04_isr_handler, config); + + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)hcsr04_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + return ESP_OK; //todo +} + +esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx) { + config->sensor_idx = sensor_idx; + switch(sensor_idx) { + case 3: + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO0; + break; + case 4: + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO1; + break; + } + return ESP_OK; +} diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h new file mode 100644 index 0000000..f9d9981 --- /dev/null +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -0,0 +1,63 @@ +/* + * mhz19.h + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_HCSR04_H_ +#define MAIN_HCSR04_H_ + +#include "oap_common.h" +#include "oap_data_env.h" + +typedef void(*env_callback)(env_data_t*); + +typedef enum { + IDLE = 0, + WAITFORECHO, + RECEIVE +} hcsr04_state_t; + +typedef struct { + uint8_t enabled; //internal, read-only + uint8_t sensor_idx; + uint32_t interval; + env_callback callback; + uint8_t trigger_pin; + uint8_t echo_pin; + hcsr04_state_t state; +} hcsr04_config_t; + +/** + * pm samples data is send to the queue. + */ +esp_err_t hcsr04_init(hcsr04_config_t* config); + +/** + * enable/disable sensor. + */ +esp_err_t hcsr04_enable(hcsr04_config_t* config, uint8_t enabled); + + +/** + * fill config based on hardware configuration + */ +esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx); + +#endif /* MAIN_MHZ19_H_ */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index d957d9b..5305641 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -33,11 +33,7 @@ #include "oap_debug.h" #include "oap_data_env.h" -/* - * Driver for Plantower PMS3003 / PMS5003 / PMS7003 dust sensors. - * PMS sensors return two values for different environment of measurement. - */ -#define OAP_PM_UART_BUF_SIZE (128) +#define OAP_MHZ_UART_BUF_SIZE (128) static const char* TAG = "mhz19"; @@ -61,7 +57,7 @@ esp_err_t mhz19_init_uart(mhz19_config_t* config) { } //Install UART driver( We don't need an event queue here) - ret = uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + ret = uart_driver_install(config->uart_num, OAP_MHZ_UART_BUF_SIZE * 2, 0, 0, NULL,0); return ret; } diff --git a/main/main.c b/main/main.c index 70fa415..51823b1 100644 --- a/main/main.c +++ b/main/main.c @@ -52,6 +52,7 @@ #include "oap_data.h" #include "server_cpanel.h" #include "ssd1366.h" +#include "hcsr04.h" #define ESP_INTR_FLAG_DEFAULT 0 @@ -218,16 +219,16 @@ static esp_err_t pm_meter_init() { //--------- ENV ----------- - -env_data_record_t last_env_data[3]; +static hcsr04_config_t hcsr04_cfg; +env_data_record_t last_env_data[5]; static bmx280_config_t bmx280_config[2]; mhz19_config_t mhz19_cfg; static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { - if (env_data->sensor_idx <= 2) { + if (env_data->sensor_idx < (sizeof(last_env_data)/sizeof(env_data_record_t))) { if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 1000 ) == pdTRUE ) { - ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); + ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm, dist: %dcm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2, env_data->distance); env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); memcpy(r, env_data, sizeof(env_data_t)); @@ -276,6 +277,22 @@ static void env_sensors_init() { mhz19_enable(&mhz19_cfg, 1); } #endif +#ifdef CONFIG_OAP_HCSR04_0_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg, 3) == ESP_OK) { + hcsr04_cfg.interval = 1000; + hcsr04_cfg.callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg); + hcsr04_enable(&hcsr04_cfg, 1); + } +#endif +#ifdef CONFIG_OAP_HCSR04_1_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg, 4) == ESP_OK) { + hcsr04_cfg.interval = 1000; + hcsr04_cfg.callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg); + hcsr04_enable(&hcsr04_cfg, 1); + } +#endif } //--------- MAIN ----------- @@ -318,6 +335,8 @@ static void publish_loop() { .env = sysTime - last_env_data[0].timestamp < 60 ? &last_env_data[0].env_data : NULL, .env_int = sysTime - last_env_data[1].timestamp < 60 ? &last_env_data[1].env_data : NULL, .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, + .distance1 = sysTime - last_env_data[3].timestamp < 60 ? &last_env_data[3].env_data : NULL, + .distance2 = sysTime - last_env_data[4].timestamp < 60 ? &last_env_data[4].env_data : NULL, .local_time = localTime }; From af0efbced715abed033732326975753de6a05f8d Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 13 Jan 2018 11:51:12 +0100 Subject: [PATCH 142/200] add distance metering --- components/oap-common/include/oap_data.h | 2 + components/oap-common/include/oap_data_env.h | 1 + components/oap-hw-ext/ctrl_btn.c | 7 +- components/oap-hw-hc-sr04/Kconfig | 39 +++++ components/oap-hw-hc-sr04/component.mk | 8 + components/oap-hw-hc-sr04/hcsr04.c | 163 +++++++++++++++++++ components/oap-hw-hc-sr04/include/hcsr04.h | 63 +++++++ components/oap-hw-mhz19/mhz19.c | 8 +- main/main.c | 27 ++- 9 files changed, 306 insertions(+), 12 deletions(-) create mode 100644 components/oap-hw-hc-sr04/Kconfig create mode 100644 components/oap-hw-hc-sr04/component.mk create mode 100644 components/oap-hw-hc-sr04/hcsr04.c create mode 100644 components/oap-hw-hc-sr04/include/hcsr04.h diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 00c4f71..7907437 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -32,6 +32,8 @@ typedef struct { env_data_t* env; env_data_t* env_int; env_data_t* co2; + env_data_t* distance1; + env_data_t* distance2; long int local_time; } oap_measurement_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index ba5ca5e..b8c087d 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -28,6 +28,7 @@ typedef struct { double pressure; double sealevel; double humidity; + uint32_t distance; uint32_t co2; uint32_t altitude; uint8_t sensor_idx; diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 325d2f0..3f5a326 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -115,7 +115,7 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #else gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_POSEDGE); + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #endif gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); @@ -124,6 +124,9 @@ esp_err_t btn_configure(btn_callback_f callback) { } bool is_ap_mode_pressed() { +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); +#else + return gpio_get_level(CONFIG_OAP_BTN_0_PIN); +#endif } - diff --git a/components/oap-hw-hc-sr04/Kconfig b/components/oap-hw-hc-sr04/Kconfig new file mode 100644 index 0000000..ac4ffcb --- /dev/null +++ b/components/oap-hw-hc-sr04/Kconfig @@ -0,0 +1,39 @@ +menu "OAP HC-SR04" + +config OAP_HCSR04_0_ENABLED + bool "enable ultrasonic range sensor #0 SR-HC04" + default y + help + todo + +config OAP_HCSR04_TRIGGER0 + int "Trigger 0 output PIN" + default 13 + help + todo + +config OAP_HCSR04_ECHO0 + int "Echo 0 input PIN" + default 12 + help + todo + +config OAP_HCSR04_1_ENABLED + bool "enable ultrasonic range sensor #1 SR-HC04" + default y + help + todo + +config OAP_HCSR04_TRIGGER1 + int "Trigger 1 output PIN" + default 14 + help + todo + +config OAP_HCSR04_ECHO1 + int "Echo 1 input PIN" + default 27 + help + todo + +endmenu diff --git a/components/oap-hw-hc-sr04/component.mk b/components/oap-hw-hc-sr04/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-hc-sr04/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c new file mode 100644 index 0000000..dc5c59c --- /dev/null +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -0,0 +1,163 @@ +/* + * hcsr04.c + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "esp_log.h" +#include "hcsr04.h" +#include "oap_debug.h" +#include "oap_data_env.h" + +#define ESP_INTR_FLAG_DEFAULT 0 + +static const char* TAG = "hcsr04"; +static QueueHandle_t hcsr04_evt_queue; + +typedef struct { + uint8_t gpio_num; + uint8_t gpio_val; + uint32_t timestamp; +} hcsr04_event_t; + +static double calc_dist(int time_diff) { + return 100*((time_diff/1000000.0)*340.29)/2; +} + +static void send_trigger(hcsr04_config_t* config) { + gpio_set_level(config->trigger_pin, 1); + ets_delay_us(10); + gpio_set_level(config->trigger_pin, 0); + config->state=WAITFORECHO; +} + +static void IRAM_ATTR hcsr04_isr_handler(void* arg) +{ + hcsr04_config_t* config=(hcsr04_config_t*) arg; + + hcsr04_event_t hcsr04_evt = { + .gpio_num = config->echo_pin, + .gpio_val = gpio_get_level(config->echo_pin), + .timestamp = system_get_time() + }; + xQueueSendFromISR(hcsr04_evt_queue, &hcsr04_evt, NULL); +} + +static void hcsr04_task(hcsr04_config_t* config) { + hcsr04_event_t gpio_evt; + uint32_t startpulse=0; + uint32_t endpulse=0; +// send_trigger(config); + while(1) { + if(config->enabled) { + if (xQueueReceive(hcsr04_evt_queue, &gpio_evt, 100)) { +// ESP_LOGD(TAG, "%d:%d:%d", config->state, gpio_evt.gpio_val, gpio_evt.timestamp); + switch(config->state) { + case WAITFORECHO: + if(gpio_evt.gpio_val) { + startpulse=gpio_evt.timestamp; + config->state = RECEIVE; + } + break; + case RECEIVE: + if(!gpio_evt.gpio_val) { + endpulse=gpio_evt.timestamp; + double distance = calc_dist(endpulse-startpulse); + ESP_LOGD(TAG, "difference: %d distance: %.2f", endpulse-startpulse, distance); + if (config->callback) { + env_data_t result = { + .sensor_idx = config->sensor_idx, + .distance = distance + }; + config->callback(&result); + } + config->state = IDLE; + } + break; + case IDLE: + break; + + } + } else { + send_trigger(config); + } + } + + if (config->interval > 0) { + delay(config->interval); + } else { + break; + } + } + vTaskDelete(NULL); +} + +esp_err_t hcsr04_enable(hcsr04_config_t* config, uint8_t enabled) { + ESP_LOGI(TAG,"enable(%d)",enabled); + config->enabled = enabled; + return ESP_OK; //todo +} + +esp_err_t hcsr04_init(hcsr04_config_t* config) { + hcsr04_enable(config, 0); + + char task_name[100]; + sprintf(task_name, "hcsr04_sensor_%d", config->sensor_idx); + hcsr04_evt_queue = xQueueCreate(10, sizeof(hcsr04_event_t)); + + gpio_pad_select_gpio(config->echo_pin); + gpio_set_direction(config->echo_pin, GPIO_MODE_INPUT); + gpio_set_pull_mode(config->echo_pin, GPIO_PULLDOWN_ONLY); + gpio_set_intr_type(config->echo_pin, GPIO_INTR_ANYEDGE); + + gpio_pad_select_gpio(config->trigger_pin); + gpio_set_direction(config->trigger_pin, GPIO_MODE_OUTPUT); + gpio_set_level(config->trigger_pin, 0); + + gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); + config->state = IDLE; + + gpio_isr_handler_add(config->echo_pin, hcsr04_isr_handler, config); + + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)hcsr04_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + return ESP_OK; //todo +} + +esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx) { + config->sensor_idx = sensor_idx; + switch(sensor_idx) { + case 3: + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO0; + break; + case 4: + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO1; + break; + } + return ESP_OK; +} diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h new file mode 100644 index 0000000..f9d9981 --- /dev/null +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -0,0 +1,63 @@ +/* + * mhz19.h + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_HCSR04_H_ +#define MAIN_HCSR04_H_ + +#include "oap_common.h" +#include "oap_data_env.h" + +typedef void(*env_callback)(env_data_t*); + +typedef enum { + IDLE = 0, + WAITFORECHO, + RECEIVE +} hcsr04_state_t; + +typedef struct { + uint8_t enabled; //internal, read-only + uint8_t sensor_idx; + uint32_t interval; + env_callback callback; + uint8_t trigger_pin; + uint8_t echo_pin; + hcsr04_state_t state; +} hcsr04_config_t; + +/** + * pm samples data is send to the queue. + */ +esp_err_t hcsr04_init(hcsr04_config_t* config); + +/** + * enable/disable sensor. + */ +esp_err_t hcsr04_enable(hcsr04_config_t* config, uint8_t enabled); + + +/** + * fill config based on hardware configuration + */ +esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx); + +#endif /* MAIN_MHZ19_H_ */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index d957d9b..5305641 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -33,11 +33,7 @@ #include "oap_debug.h" #include "oap_data_env.h" -/* - * Driver for Plantower PMS3003 / PMS5003 / PMS7003 dust sensors. - * PMS sensors return two values for different environment of measurement. - */ -#define OAP_PM_UART_BUF_SIZE (128) +#define OAP_MHZ_UART_BUF_SIZE (128) static const char* TAG = "mhz19"; @@ -61,7 +57,7 @@ esp_err_t mhz19_init_uart(mhz19_config_t* config) { } //Install UART driver( We don't need an event queue here) - ret = uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + ret = uart_driver_install(config->uart_num, OAP_MHZ_UART_BUF_SIZE * 2, 0, 0, NULL,0); return ret; } diff --git a/main/main.c b/main/main.c index 70fa415..51823b1 100644 --- a/main/main.c +++ b/main/main.c @@ -52,6 +52,7 @@ #include "oap_data.h" #include "server_cpanel.h" #include "ssd1366.h" +#include "hcsr04.h" #define ESP_INTR_FLAG_DEFAULT 0 @@ -218,16 +219,16 @@ static esp_err_t pm_meter_init() { //--------- ENV ----------- - -env_data_record_t last_env_data[3]; +static hcsr04_config_t hcsr04_cfg; +env_data_record_t last_env_data[5]; static bmx280_config_t bmx280_config[2]; mhz19_config_t mhz19_cfg; static SemaphoreHandle_t envSemaphore = NULL; static void env_sensor_callback(env_data_t* env_data) { - if (env_data->sensor_idx <= 2) { + if (env_data->sensor_idx < (sizeof(last_env_data)/sizeof(env_data_record_t))) { if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 1000 ) == pdTRUE ) { - ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2); + ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm, dist: %dcm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2, env_data->distance); env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); memcpy(r, env_data, sizeof(env_data_t)); @@ -276,6 +277,22 @@ static void env_sensors_init() { mhz19_enable(&mhz19_cfg, 1); } #endif +#ifdef CONFIG_OAP_HCSR04_0_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg, 3) == ESP_OK) { + hcsr04_cfg.interval = 1000; + hcsr04_cfg.callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg); + hcsr04_enable(&hcsr04_cfg, 1); + } +#endif +#ifdef CONFIG_OAP_HCSR04_1_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg, 4) == ESP_OK) { + hcsr04_cfg.interval = 1000; + hcsr04_cfg.callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg); + hcsr04_enable(&hcsr04_cfg, 1); + } +#endif } //--------- MAIN ----------- @@ -318,6 +335,8 @@ static void publish_loop() { .env = sysTime - last_env_data[0].timestamp < 60 ? &last_env_data[0].env_data : NULL, .env_int = sysTime - last_env_data[1].timestamp < 60 ? &last_env_data[1].env_data : NULL, .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, + .distance1 = sysTime - last_env_data[3].timestamp < 60 ? &last_env_data[3].env_data : NULL, + .distance2 = sysTime - last_env_data[4].timestamp < 60 ? &last_env_data[4].env_data : NULL, .local_time = localTime }; From 01ce5d1c1c65d50c958412b2c467d898815e56be Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 13 Jan 2018 16:38:37 +0100 Subject: [PATCH 143/200] improve Kconfig files/menus, generalize hc-sr04 code --- components/oap-hw-bmx280/Kconfig | 4 +++ components/oap-hw-bmx280/bmx280.c | 24 ++++++++------- components/oap-hw-bmx280/include/bmx280.h | 12 -------- components/oap-hw-ext/ctrl_btn.c | 7 ++--- components/oap-hw-hc-sr04/Kconfig | 18 +++++++----- components/oap-hw-hc-sr04/hcsr04.c | 16 ++++++---- components/oap-hw-hc-sr04/include/hcsr04.h | 1 + components/oap-hw-mhz19/Kconfig | 5 ++++ components/oap-hw-pmsx003/Kconfig | 25 ++++++++++++++++ main/main.c | 34 ++++++++++++---------- 10 files changed, 91 insertions(+), 55 deletions(-) diff --git a/components/oap-hw-bmx280/Kconfig b/components/oap-hw-bmx280/Kconfig index 44deec5..b9aeb0c 100644 --- a/components/oap-hw-bmx280/Kconfig +++ b/components/oap-hw-bmx280/Kconfig @@ -40,6 +40,7 @@ config OAP_BMX280_ENABLED_AUX config OAP_BMX280_ADDRESS_AUX hex "i2c address of internal sensor" + depends on OAP_BMX280_ENABLED_AUX default 0x77 help If both external and internal sensor use the same i2c bus, they must be configured to use @@ -49,12 +50,14 @@ config OAP_BMX280_ADDRESS_AUX config OAP_BMX280_I2C_NUM_AUX int "i2c interface number for internal sensor" + depends on OAP_BMX280_ENABLED_AUX default 0 help if both sensors use the same bus (default), sda/scl pins are ignored. config OAP_BMX280_I2C_SDA_PIN_AUX int "gpio SDA pin" + depends on OAP_BMX280_ENABLED_AUX default 25 help be careful with choosing gpio. i2c pins must be R/W. @@ -62,6 +65,7 @@ config OAP_BMX280_I2C_SDA_PIN_AUX config OAP_BMX280_I2C_SCL_PIN_AUX int "SCL pin" + depends on OAP_BMX280_ENABLED_AUX default 26 help see help for SDA pin diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index cf0009f..29e7615 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -149,20 +149,24 @@ esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { esp_err_t bmx280_set_hardware_config(bmx280_config_t* bmx280_config, uint8_t sensor_idx) { switch (sensor_idx) { case 0: - if (!OAP_BMX280_ENABLED) return ESP_FAIL; + if (!CONFIG_OAP_BMX280_ENABLED) return ESP_FAIL; +#if CONFIG_OAP_BMX280_ENABLED bmx280_config->sensor_idx = 0; - bmx280_config->i2c_num = OAP_BMX280_I2C_NUM; - bmx280_config->device_addr = OAP_BMX280_ADDRESS; - bmx280_config->sda_pin = OAP_BMX280_I2C_SDA_PIN; - bmx280_config->scl_pin = OAP_BMX280_I2C_SCL_PIN; + bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM; + bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS; + bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN; + bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN; +#endif return ESP_OK; case 1: - if (!OAP_BMX280_ENABLED_AUX) return ESP_FAIL; + if (!CONFIG_OAP_BMX280_ENABLED_AUX) return ESP_FAIL; +#if CONFIG_OAP_BMX280_ENABLED_AUX bmx280_config->sensor_idx = 1; - bmx280_config->i2c_num = OAP_BMX280_I2C_NUM_AUX; - bmx280_config->device_addr = OAP_BMX280_ADDRESS_AUX; - bmx280_config->sda_pin = OAP_BMX280_I2C_SDA_PIN_AUX; - bmx280_config->scl_pin = OAP_BMX280_I2C_SCL_PIN_AUX; + bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM_AUX; + bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS_AUX; + bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX; + bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX; +#endif return ESP_OK; default: return ESP_FAIL; diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 317ac86..5c933cb 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -26,18 +26,6 @@ #include "oap_common.h" #include "oap_data_env.h" -#define OAP_BMX280_ENABLED CONFIG_OAP_BMX280_ENABLED -#define OAP_BMX280_I2C_NUM CONFIG_OAP_BMX280_I2C_NUM -#define OAP_BMX280_ADDRESS CONFIG_OAP_BMX280_ADDRESS -#define OAP_BMX280_I2C_SDA_PIN CONFIG_OAP_BMX280_I2C_SDA_PIN -#define OAP_BMX280_I2C_SCL_PIN CONFIG_OAP_BMX280_I2C_SCL_PIN - -#define OAP_BMX280_ENABLED_AUX CONFIG_OAP_BMX280_ENABLED_AUX -#define OAP_BMX280_I2C_NUM_AUX CONFIG_OAP_BMX280_I2C_NUM_AUX -#define OAP_BMX280_ADDRESS_AUX CONFIG_OAP_BMX280_ADDRESS_AUX -#define OAP_BMX280_I2C_SDA_PIN_AUX CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX -#define OAP_BMX280_I2C_SCL_PIN_AUX CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX - typedef void(*env_callback)(env_data_t*); typedef struct bmx280_config_t { diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 3f5a326..98e4bb5 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -110,13 +110,12 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); -#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW +#if CONFIG_OAP_BTN_0_ACTIVE_LOW gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #else gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #endif + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); @@ -124,7 +123,7 @@ esp_err_t btn_configure(btn_callback_f callback) { } bool is_ap_mode_pressed() { -#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW +#if CONFIG_OAP_BTN_0_ACTIVE_LOW return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); #else return gpio_get_level(CONFIG_OAP_BTN_0_PIN); diff --git a/components/oap-hw-hc-sr04/Kconfig b/components/oap-hw-hc-sr04/Kconfig index ac4ffcb..2bcdda3 100644 --- a/components/oap-hw-hc-sr04/Kconfig +++ b/components/oap-hw-hc-sr04/Kconfig @@ -1,38 +1,42 @@ -menu "OAP HC-SR04" +menu "OAP HC-SR04 distance sensor" config OAP_HCSR04_0_ENABLED - bool "enable ultrasonic range sensor #0 SR-HC04" + bool "enable ultrasonic distance sensor #0 SR-HC04" default y help todo config OAP_HCSR04_TRIGGER0 int "Trigger 0 output PIN" - default 13 + depends on OAP_HCSR04_0_ENABLED + default 32 help todo config OAP_HCSR04_ECHO0 int "Echo 0 input PIN" - default 12 + depends on OAP_HCSR04_0_ENABLED + default 34 help todo config OAP_HCSR04_1_ENABLED - bool "enable ultrasonic range sensor #1 SR-HC04" + bool "enable ultrasonic dinstance sensor #1 SR-HC04" default y help todo config OAP_HCSR04_TRIGGER1 int "Trigger 1 output PIN" - default 14 + depends on OAP_HCSR04_1_ENABLED + default 33 help todo config OAP_HCSR04_ECHO1 int "Echo 1 input PIN" - default 27 + depends on OAP_HCSR04_1_ENABLED + default 35 help todo diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index dc5c59c..2b59222 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -35,7 +35,6 @@ #define ESP_INTR_FLAG_DEFAULT 0 static const char* TAG = "hcsr04"; -static QueueHandle_t hcsr04_evt_queue; typedef struct { uint8_t gpio_num; @@ -63,7 +62,7 @@ static void IRAM_ATTR hcsr04_isr_handler(void* arg) .gpio_val = gpio_get_level(config->echo_pin), .timestamp = system_get_time() }; - xQueueSendFromISR(hcsr04_evt_queue, &hcsr04_evt, NULL); + xQueueSendFromISR(config->hcsr04_evt_queue, &hcsr04_evt, NULL); } static void hcsr04_task(hcsr04_config_t* config) { @@ -73,7 +72,7 @@ static void hcsr04_task(hcsr04_config_t* config) { // send_trigger(config); while(1) { if(config->enabled) { - if (xQueueReceive(hcsr04_evt_queue, &gpio_evt, 100)) { + if (xQueueReceive(config->hcsr04_evt_queue, &gpio_evt, 100)) { // ESP_LOGD(TAG, "%d:%d:%d", config->state, gpio_evt.gpio_val, gpio_evt.timestamp); switch(config->state) { case WAITFORECHO: @@ -86,7 +85,7 @@ static void hcsr04_task(hcsr04_config_t* config) { if(!gpio_evt.gpio_val) { endpulse=gpio_evt.timestamp; double distance = calc_dist(endpulse-startpulse); - ESP_LOGD(TAG, "difference: %d distance: %.2f", endpulse-startpulse, distance); + ESP_LOGD(TAG, "sensor: %d difference: %d distance: %.2f", config->sensor_idx, endpulse-startpulse, distance); if (config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, @@ -102,6 +101,7 @@ static void hcsr04_task(hcsr04_config_t* config) { } } else { + ESP_LOGD(TAG, "ping"); send_trigger(config); } } @@ -126,7 +126,7 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { char task_name[100]; sprintf(task_name, "hcsr04_sensor_%d", config->sensor_idx); - hcsr04_evt_queue = xQueueCreate(10, sizeof(hcsr04_event_t)); + config->hcsr04_evt_queue = xQueueCreate(10, sizeof(hcsr04_event_t)); gpio_pad_select_gpio(config->echo_pin); gpio_set_direction(config->echo_pin, GPIO_MODE_INPUT); @@ -139,7 +139,7 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); config->state = IDLE; - + ESP_LOGD(TAG, "init Trigger: %d Echo: %d", config->trigger_pin, config->echo_pin); gpio_isr_handler_add(config->echo_pin, hcsr04_isr_handler, config); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) @@ -151,12 +151,16 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx config->sensor_idx = sensor_idx; switch(sensor_idx) { case 3: +#if CONFIG_OAP_HCSR04_0_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0; config->echo_pin = CONFIG_OAP_HCSR04_ECHO0; +#endif break; case 4: +#if CONFIG_OAP_HCSR04_1_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1; config->echo_pin = CONFIG_OAP_HCSR04_ECHO1; +#endif break; } return ESP_OK; diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h index f9d9981..becc8d0 100644 --- a/components/oap-hw-hc-sr04/include/hcsr04.h +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -42,6 +42,7 @@ typedef struct { uint8_t trigger_pin; uint8_t echo_pin; hcsr04_state_t state; + QueueHandle_t hcsr04_evt_queue; } hcsr04_config_t; /** diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig index 44cb7c4..235d2fe 100644 --- a/components/oap-hw-mhz19/Kconfig +++ b/components/oap-hw-mhz19/Kconfig @@ -8,30 +8,35 @@ config OAP_MH_ENABLED config OAP_MH_UART_NUM hex "uart num" + depends on OAP_MH_ENABLED default 2 help todo config OAP_MH_UART_RXD_PIN int "RX gpio" + depends on OAP_MH_ENABLED default 16 help GPIO pin connected to sensor RX line. This pin can be R/O (>=34). config OAP_MH_UART_TXD_PIN int "TX gpio" + depends on OAP_MH_ENABLED default 17 help GPIO pin connected to sensor TX line. config OAP_MH_UART_RTS_PIN int "RTS gpio" + depends on OAP_MH_ENABLED default 18 help Any gpio pin (no need to connect this line) config OAP_MH_UART_CTS_PIN int "CTS gpio" + depends on OAP_MH_ENABLED default 19 help Any gpio pin (no need to connect this line) diff --git a/components/oap-hw-pmsx003/Kconfig b/components/oap-hw-pmsx003/Kconfig index a6974ce..9d561e7 100644 --- a/components/oap-hw-pmsx003/Kconfig +++ b/components/oap-hw-pmsx003/Kconfig @@ -1,79 +1,104 @@ menu "OAP PMSx003 Sensor" +config OAP_PM_UART_ENABLE + bool "PM0 enable" + default y + help + todo + config OAP_PM_UART_NUM hex "uart num" + depends on OAP_PM_UART_ENABLE default 1 help todo config OAP_PM_SENSOR_CONTROL_PIN int "sensor set gpio" + depends on OAP_PM_UART_ENABLE default 10 help R/W GPIO pin connected to sensor SET line - it enables/disables sensor. config OAP_PM_UART_RXD_PIN int "RX gpio" + depends on OAP_PM_UART_ENABLE default 13 help GPIO pin connected to sensor RX line. This pin can be R/O (>=34). config OAP_PM_UART_TXD_PIN int "TX gpio" + depends on OAP_PM_UART_ENABLE default 5 help Any gpio pin (no need to connect this line) config OAP_PM_UART_RTS_PIN int "RTS gpio" + depends on OAP_PM_UART_ENABLE default 18 help Any gpio pin (no need to connect this line) config OAP_PM_UART_CTS_PIN int "CTS gpio" + depends on OAP_PM_UART_ENABLE default 19 help Any gpio pin (no need to connect this line) +config OAP_PM_UART_AUX_ENABLE + bool "PM1 enable" + default y + help + todo + config OAP_PM_ENABLED_AUX int "enable secondary PM sensor" + depends on OAP_PM_UART_AUX_ENABLE default 0 help todo config OAP_PM_UART_NUM_AUX hex "AUX uart num" + depends on OAP_PM_UART_AUX_ENABLE default 2 help todo config OAP_PM_SENSOR_CONTROL_PIN_AUX int "AUX sensor set gpio" + depends on OAP_PM_UART_AUX_ENABLE default 2 help R/W GPIO pin connected to sensor SET line - it enables/disables sensor. config OAP_PM_UART_RXD_PIN_AUX int "AUX RX gpio" + depends on OAP_PM_UART_AUX_ENABLE default 15 help GPIO pin connected to sensor RX line. This pin can be R/O (>=34). config OAP_PM_UART_TXD_PIN_AUX int "AUX TX gpio" + depends on OAP_PM_UART_AUX_ENABLE default 5 help Any gpio pin (no need to connect this line) config OAP_PM_UART_RTS_PIN_AUX int "AUX RTS gpio" + depends on OAP_PM_UART_AUX_ENABLE default 18 help Any gpio pin (no need to connect this line) config OAP_PM_UART_CTS_PIN_AUX int "AUX CTS gpio" + depends on OAP_PM_UART_AUX_ENABLE default 19 help Any gpio pin (no need to connect this line) diff --git a/main/main.c b/main/main.c index 51823b1..7e59374 100644 --- a/main/main.c +++ b/main/main.c @@ -219,7 +219,7 @@ static esp_err_t pm_meter_init() { //--------- ENV ----------- -static hcsr04_config_t hcsr04_cfg; +static hcsr04_config_t hcsr04_cfg[2]; env_data_record_t last_env_data[5]; static bmx280_config_t bmx280_config[2]; mhz19_config_t mhz19_cfg; @@ -269,7 +269,7 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } -#ifdef CONFIG_OAP_MH_ENABLED +#if CONFIG_OAP_MH_ENABLED if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { mhz19_cfg.interval = 1000; mhz19_cfg.callback = &env_sensor_callback; @@ -277,20 +277,20 @@ static void env_sensors_init() { mhz19_enable(&mhz19_cfg, 1); } #endif -#ifdef CONFIG_OAP_HCSR04_0_ENABLED - if(hcsr04_set_hardware_config(&hcsr04_cfg, 3) == ESP_OK) { - hcsr04_cfg.interval = 1000; - hcsr04_cfg.callback = &env_sensor_callback; - hcsr04_init(&hcsr04_cfg); - hcsr04_enable(&hcsr04_cfg, 1); +#if CONFIG_OAP_HCSR04_0_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg[0], 3) == ESP_OK) { + hcsr04_cfg[0].interval = 1000; + hcsr04_cfg[0].callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg[0]); + hcsr04_enable(&hcsr04_cfg[0], 1); } #endif -#ifdef CONFIG_OAP_HCSR04_1_ENABLED - if(hcsr04_set_hardware_config(&hcsr04_cfg, 4) == ESP_OK) { - hcsr04_cfg.interval = 1000; - hcsr04_cfg.callback = &env_sensor_callback; - hcsr04_init(&hcsr04_cfg); - hcsr04_enable(&hcsr04_cfg, 1); +#if CONFIG_OAP_HCSR04_1_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg[1], 4) == ESP_OK) { + hcsr04_cfg[1].interval = 1000; + hcsr04_cfg[1].callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg[1]); + hcsr04_enable(&hcsr04_cfg[1], 1); } #endif } @@ -322,7 +322,7 @@ static void publish_loop() { log_task_stack(TAG); last_published = sysTime; float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); -#ifdef CONFIG_OAP_RGB_LED +#if CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); ledc_set_color(aqi,(1-aqi), 0); #endif @@ -454,10 +454,12 @@ void app_main() { start_ota_task(storage_get_config("ota")); ledc_init(); +#if CONFIG_OAP_PM_UART_ENABLE || CONFIG_OAP_PM_UART_AUX_ENABLE pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_init(); +#endif env_sensors_init(); -#ifdef CONFIG_OAP_SDD1306_ENABLED +#if CONFIG_OAP_SDD1306_ENABLED //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); #endif From ee5f5211980ecadf382690394ec83a707f41359c Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 13 Jan 2018 16:38:37 +0100 Subject: [PATCH 144/200] improve Kconfig files/menus, generalize hc-sr04 code --- components/oap-hw-bmx280/Kconfig | 4 +++ components/oap-hw-bmx280/bmx280.c | 24 ++++++++------- components/oap-hw-bmx280/include/bmx280.h | 12 -------- components/oap-hw-ext/ctrl_btn.c | 7 ++--- components/oap-hw-hc-sr04/Kconfig | 18 +++++++----- components/oap-hw-hc-sr04/hcsr04.c | 16 ++++++---- components/oap-hw-hc-sr04/include/hcsr04.h | 1 + components/oap-hw-mhz19/Kconfig | 5 ++++ components/oap-hw-pmsx003/Kconfig | 25 ++++++++++++++++ main/main.c | 34 ++++++++++++---------- 10 files changed, 91 insertions(+), 55 deletions(-) diff --git a/components/oap-hw-bmx280/Kconfig b/components/oap-hw-bmx280/Kconfig index 44deec5..b9aeb0c 100644 --- a/components/oap-hw-bmx280/Kconfig +++ b/components/oap-hw-bmx280/Kconfig @@ -40,6 +40,7 @@ config OAP_BMX280_ENABLED_AUX config OAP_BMX280_ADDRESS_AUX hex "i2c address of internal sensor" + depends on OAP_BMX280_ENABLED_AUX default 0x77 help If both external and internal sensor use the same i2c bus, they must be configured to use @@ -49,12 +50,14 @@ config OAP_BMX280_ADDRESS_AUX config OAP_BMX280_I2C_NUM_AUX int "i2c interface number for internal sensor" + depends on OAP_BMX280_ENABLED_AUX default 0 help if both sensors use the same bus (default), sda/scl pins are ignored. config OAP_BMX280_I2C_SDA_PIN_AUX int "gpio SDA pin" + depends on OAP_BMX280_ENABLED_AUX default 25 help be careful with choosing gpio. i2c pins must be R/W. @@ -62,6 +65,7 @@ config OAP_BMX280_I2C_SDA_PIN_AUX config OAP_BMX280_I2C_SCL_PIN_AUX int "SCL pin" + depends on OAP_BMX280_ENABLED_AUX default 26 help see help for SDA pin diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index cf0009f..29e7615 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -149,20 +149,24 @@ esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { esp_err_t bmx280_set_hardware_config(bmx280_config_t* bmx280_config, uint8_t sensor_idx) { switch (sensor_idx) { case 0: - if (!OAP_BMX280_ENABLED) return ESP_FAIL; + if (!CONFIG_OAP_BMX280_ENABLED) return ESP_FAIL; +#if CONFIG_OAP_BMX280_ENABLED bmx280_config->sensor_idx = 0; - bmx280_config->i2c_num = OAP_BMX280_I2C_NUM; - bmx280_config->device_addr = OAP_BMX280_ADDRESS; - bmx280_config->sda_pin = OAP_BMX280_I2C_SDA_PIN; - bmx280_config->scl_pin = OAP_BMX280_I2C_SCL_PIN; + bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM; + bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS; + bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN; + bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN; +#endif return ESP_OK; case 1: - if (!OAP_BMX280_ENABLED_AUX) return ESP_FAIL; + if (!CONFIG_OAP_BMX280_ENABLED_AUX) return ESP_FAIL; +#if CONFIG_OAP_BMX280_ENABLED_AUX bmx280_config->sensor_idx = 1; - bmx280_config->i2c_num = OAP_BMX280_I2C_NUM_AUX; - bmx280_config->device_addr = OAP_BMX280_ADDRESS_AUX; - bmx280_config->sda_pin = OAP_BMX280_I2C_SDA_PIN_AUX; - bmx280_config->scl_pin = OAP_BMX280_I2C_SCL_PIN_AUX; + bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM_AUX; + bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS_AUX; + bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX; + bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX; +#endif return ESP_OK; default: return ESP_FAIL; diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 317ac86..5c933cb 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -26,18 +26,6 @@ #include "oap_common.h" #include "oap_data_env.h" -#define OAP_BMX280_ENABLED CONFIG_OAP_BMX280_ENABLED -#define OAP_BMX280_I2C_NUM CONFIG_OAP_BMX280_I2C_NUM -#define OAP_BMX280_ADDRESS CONFIG_OAP_BMX280_ADDRESS -#define OAP_BMX280_I2C_SDA_PIN CONFIG_OAP_BMX280_I2C_SDA_PIN -#define OAP_BMX280_I2C_SCL_PIN CONFIG_OAP_BMX280_I2C_SCL_PIN - -#define OAP_BMX280_ENABLED_AUX CONFIG_OAP_BMX280_ENABLED_AUX -#define OAP_BMX280_I2C_NUM_AUX CONFIG_OAP_BMX280_I2C_NUM_AUX -#define OAP_BMX280_ADDRESS_AUX CONFIG_OAP_BMX280_ADDRESS_AUX -#define OAP_BMX280_I2C_SDA_PIN_AUX CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX -#define OAP_BMX280_I2C_SCL_PIN_AUX CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX - typedef void(*env_callback)(env_data_t*); typedef struct bmx280_config_t { diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 3f5a326..98e4bb5 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -110,13 +110,12 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); -#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW +#if CONFIG_OAP_BTN_0_ACTIVE_LOW gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #else gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); - gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); #endif + gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); @@ -124,7 +123,7 @@ esp_err_t btn_configure(btn_callback_f callback) { } bool is_ap_mode_pressed() { -#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW +#if CONFIG_OAP_BTN_0_ACTIVE_LOW return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); #else return gpio_get_level(CONFIG_OAP_BTN_0_PIN); diff --git a/components/oap-hw-hc-sr04/Kconfig b/components/oap-hw-hc-sr04/Kconfig index ac4ffcb..2bcdda3 100644 --- a/components/oap-hw-hc-sr04/Kconfig +++ b/components/oap-hw-hc-sr04/Kconfig @@ -1,38 +1,42 @@ -menu "OAP HC-SR04" +menu "OAP HC-SR04 distance sensor" config OAP_HCSR04_0_ENABLED - bool "enable ultrasonic range sensor #0 SR-HC04" + bool "enable ultrasonic distance sensor #0 SR-HC04" default y help todo config OAP_HCSR04_TRIGGER0 int "Trigger 0 output PIN" - default 13 + depends on OAP_HCSR04_0_ENABLED + default 32 help todo config OAP_HCSR04_ECHO0 int "Echo 0 input PIN" - default 12 + depends on OAP_HCSR04_0_ENABLED + default 34 help todo config OAP_HCSR04_1_ENABLED - bool "enable ultrasonic range sensor #1 SR-HC04" + bool "enable ultrasonic dinstance sensor #1 SR-HC04" default y help todo config OAP_HCSR04_TRIGGER1 int "Trigger 1 output PIN" - default 14 + depends on OAP_HCSR04_1_ENABLED + default 33 help todo config OAP_HCSR04_ECHO1 int "Echo 1 input PIN" - default 27 + depends on OAP_HCSR04_1_ENABLED + default 35 help todo diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index dc5c59c..2b59222 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -35,7 +35,6 @@ #define ESP_INTR_FLAG_DEFAULT 0 static const char* TAG = "hcsr04"; -static QueueHandle_t hcsr04_evt_queue; typedef struct { uint8_t gpio_num; @@ -63,7 +62,7 @@ static void IRAM_ATTR hcsr04_isr_handler(void* arg) .gpio_val = gpio_get_level(config->echo_pin), .timestamp = system_get_time() }; - xQueueSendFromISR(hcsr04_evt_queue, &hcsr04_evt, NULL); + xQueueSendFromISR(config->hcsr04_evt_queue, &hcsr04_evt, NULL); } static void hcsr04_task(hcsr04_config_t* config) { @@ -73,7 +72,7 @@ static void hcsr04_task(hcsr04_config_t* config) { // send_trigger(config); while(1) { if(config->enabled) { - if (xQueueReceive(hcsr04_evt_queue, &gpio_evt, 100)) { + if (xQueueReceive(config->hcsr04_evt_queue, &gpio_evt, 100)) { // ESP_LOGD(TAG, "%d:%d:%d", config->state, gpio_evt.gpio_val, gpio_evt.timestamp); switch(config->state) { case WAITFORECHO: @@ -86,7 +85,7 @@ static void hcsr04_task(hcsr04_config_t* config) { if(!gpio_evt.gpio_val) { endpulse=gpio_evt.timestamp; double distance = calc_dist(endpulse-startpulse); - ESP_LOGD(TAG, "difference: %d distance: %.2f", endpulse-startpulse, distance); + ESP_LOGD(TAG, "sensor: %d difference: %d distance: %.2f", config->sensor_idx, endpulse-startpulse, distance); if (config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, @@ -102,6 +101,7 @@ static void hcsr04_task(hcsr04_config_t* config) { } } else { + ESP_LOGD(TAG, "ping"); send_trigger(config); } } @@ -126,7 +126,7 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { char task_name[100]; sprintf(task_name, "hcsr04_sensor_%d", config->sensor_idx); - hcsr04_evt_queue = xQueueCreate(10, sizeof(hcsr04_event_t)); + config->hcsr04_evt_queue = xQueueCreate(10, sizeof(hcsr04_event_t)); gpio_pad_select_gpio(config->echo_pin); gpio_set_direction(config->echo_pin, GPIO_MODE_INPUT); @@ -139,7 +139,7 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); config->state = IDLE; - + ESP_LOGD(TAG, "init Trigger: %d Echo: %d", config->trigger_pin, config->echo_pin); gpio_isr_handler_add(config->echo_pin, hcsr04_isr_handler, config); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) @@ -151,12 +151,16 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx config->sensor_idx = sensor_idx; switch(sensor_idx) { case 3: +#if CONFIG_OAP_HCSR04_0_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0; config->echo_pin = CONFIG_OAP_HCSR04_ECHO0; +#endif break; case 4: +#if CONFIG_OAP_HCSR04_1_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1; config->echo_pin = CONFIG_OAP_HCSR04_ECHO1; +#endif break; } return ESP_OK; diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h index f9d9981..becc8d0 100644 --- a/components/oap-hw-hc-sr04/include/hcsr04.h +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -42,6 +42,7 @@ typedef struct { uint8_t trigger_pin; uint8_t echo_pin; hcsr04_state_t state; + QueueHandle_t hcsr04_evt_queue; } hcsr04_config_t; /** diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig index 44cb7c4..235d2fe 100644 --- a/components/oap-hw-mhz19/Kconfig +++ b/components/oap-hw-mhz19/Kconfig @@ -8,30 +8,35 @@ config OAP_MH_ENABLED config OAP_MH_UART_NUM hex "uart num" + depends on OAP_MH_ENABLED default 2 help todo config OAP_MH_UART_RXD_PIN int "RX gpio" + depends on OAP_MH_ENABLED default 16 help GPIO pin connected to sensor RX line. This pin can be R/O (>=34). config OAP_MH_UART_TXD_PIN int "TX gpio" + depends on OAP_MH_ENABLED default 17 help GPIO pin connected to sensor TX line. config OAP_MH_UART_RTS_PIN int "RTS gpio" + depends on OAP_MH_ENABLED default 18 help Any gpio pin (no need to connect this line) config OAP_MH_UART_CTS_PIN int "CTS gpio" + depends on OAP_MH_ENABLED default 19 help Any gpio pin (no need to connect this line) diff --git a/components/oap-hw-pmsx003/Kconfig b/components/oap-hw-pmsx003/Kconfig index a6974ce..9d561e7 100644 --- a/components/oap-hw-pmsx003/Kconfig +++ b/components/oap-hw-pmsx003/Kconfig @@ -1,79 +1,104 @@ menu "OAP PMSx003 Sensor" +config OAP_PM_UART_ENABLE + bool "PM0 enable" + default y + help + todo + config OAP_PM_UART_NUM hex "uart num" + depends on OAP_PM_UART_ENABLE default 1 help todo config OAP_PM_SENSOR_CONTROL_PIN int "sensor set gpio" + depends on OAP_PM_UART_ENABLE default 10 help R/W GPIO pin connected to sensor SET line - it enables/disables sensor. config OAP_PM_UART_RXD_PIN int "RX gpio" + depends on OAP_PM_UART_ENABLE default 13 help GPIO pin connected to sensor RX line. This pin can be R/O (>=34). config OAP_PM_UART_TXD_PIN int "TX gpio" + depends on OAP_PM_UART_ENABLE default 5 help Any gpio pin (no need to connect this line) config OAP_PM_UART_RTS_PIN int "RTS gpio" + depends on OAP_PM_UART_ENABLE default 18 help Any gpio pin (no need to connect this line) config OAP_PM_UART_CTS_PIN int "CTS gpio" + depends on OAP_PM_UART_ENABLE default 19 help Any gpio pin (no need to connect this line) +config OAP_PM_UART_AUX_ENABLE + bool "PM1 enable" + default y + help + todo + config OAP_PM_ENABLED_AUX int "enable secondary PM sensor" + depends on OAP_PM_UART_AUX_ENABLE default 0 help todo config OAP_PM_UART_NUM_AUX hex "AUX uart num" + depends on OAP_PM_UART_AUX_ENABLE default 2 help todo config OAP_PM_SENSOR_CONTROL_PIN_AUX int "AUX sensor set gpio" + depends on OAP_PM_UART_AUX_ENABLE default 2 help R/W GPIO pin connected to sensor SET line - it enables/disables sensor. config OAP_PM_UART_RXD_PIN_AUX int "AUX RX gpio" + depends on OAP_PM_UART_AUX_ENABLE default 15 help GPIO pin connected to sensor RX line. This pin can be R/O (>=34). config OAP_PM_UART_TXD_PIN_AUX int "AUX TX gpio" + depends on OAP_PM_UART_AUX_ENABLE default 5 help Any gpio pin (no need to connect this line) config OAP_PM_UART_RTS_PIN_AUX int "AUX RTS gpio" + depends on OAP_PM_UART_AUX_ENABLE default 18 help Any gpio pin (no need to connect this line) config OAP_PM_UART_CTS_PIN_AUX int "AUX CTS gpio" + depends on OAP_PM_UART_AUX_ENABLE default 19 help Any gpio pin (no need to connect this line) diff --git a/main/main.c b/main/main.c index 51823b1..7e59374 100644 --- a/main/main.c +++ b/main/main.c @@ -219,7 +219,7 @@ static esp_err_t pm_meter_init() { //--------- ENV ----------- -static hcsr04_config_t hcsr04_cfg; +static hcsr04_config_t hcsr04_cfg[2]; env_data_record_t last_env_data[5]; static bmx280_config_t bmx280_config[2]; mhz19_config_t mhz19_cfg; @@ -269,7 +269,7 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } -#ifdef CONFIG_OAP_MH_ENABLED +#if CONFIG_OAP_MH_ENABLED if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { mhz19_cfg.interval = 1000; mhz19_cfg.callback = &env_sensor_callback; @@ -277,20 +277,20 @@ static void env_sensors_init() { mhz19_enable(&mhz19_cfg, 1); } #endif -#ifdef CONFIG_OAP_HCSR04_0_ENABLED - if(hcsr04_set_hardware_config(&hcsr04_cfg, 3) == ESP_OK) { - hcsr04_cfg.interval = 1000; - hcsr04_cfg.callback = &env_sensor_callback; - hcsr04_init(&hcsr04_cfg); - hcsr04_enable(&hcsr04_cfg, 1); +#if CONFIG_OAP_HCSR04_0_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg[0], 3) == ESP_OK) { + hcsr04_cfg[0].interval = 1000; + hcsr04_cfg[0].callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg[0]); + hcsr04_enable(&hcsr04_cfg[0], 1); } #endif -#ifdef CONFIG_OAP_HCSR04_1_ENABLED - if(hcsr04_set_hardware_config(&hcsr04_cfg, 4) == ESP_OK) { - hcsr04_cfg.interval = 1000; - hcsr04_cfg.callback = &env_sensor_callback; - hcsr04_init(&hcsr04_cfg); - hcsr04_enable(&hcsr04_cfg, 1); +#if CONFIG_OAP_HCSR04_1_ENABLED + if(hcsr04_set_hardware_config(&hcsr04_cfg[1], 4) == ESP_OK) { + hcsr04_cfg[1].interval = 1000; + hcsr04_cfg[1].callback = &env_sensor_callback; + hcsr04_init(&hcsr04_cfg[1]); + hcsr04_enable(&hcsr04_cfg[1], 1); } #endif } @@ -322,7 +322,7 @@ static void publish_loop() { log_task_stack(TAG); last_published = sysTime; float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); -#ifdef CONFIG_OAP_RGB_LED +#if CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); ledc_set_color(aqi,(1-aqi), 0); #endif @@ -454,10 +454,12 @@ void app_main() { start_ota_task(storage_get_config("ota")); ledc_init(); +#if CONFIG_OAP_PM_UART_ENABLE || CONFIG_OAP_PM_UART_AUX_ENABLE pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); pm_meter_init(); +#endif env_sensors_init(); -#ifdef CONFIG_OAP_SDD1306_ENABLED +#if CONFIG_OAP_SDD1306_ENABLED //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); #endif From e77a999d565d41d1eee9e26733d16418d34c5057 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 13 Jan 2018 18:54:16 +0100 Subject: [PATCH 145/200] finalized distance metering --- components/oap-common/include/oap_data.h | 2 ++ .../oap-http-get-publisher/http_get_publisher.c | 8 ++++++++ components/oap-hw-hc-sr04/hcsr04.c | 15 +++++++++++---- components/oap-wifi/cpanel.c | 12 ++++++++++++ components/oap-wifi/index.html | 6 ++++++ 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 7907437..69530c2 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -26,6 +26,8 @@ #include "oap_data_pm.h" #include "oap_data_env.h" + +// FIXME this stuff has to be generalized typedef struct { pm_data_t* pm; pm_data_t* pm_aux; diff --git a/components/oap-http-get-publisher/http_get_publisher.c b/components/oap-http-get-publisher/http_get_publisher.c index a7d4ff4..cce9a3e 100644 --- a/components/oap-http-get-publisher/http_get_publisher.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -60,6 +60,14 @@ static esp_err_t http_get(char* uri, oap_measurement_t* meas) { sprintf(payload, "%s&co2=%d", payload, meas->co2->co2); } + if (meas->distance1) { + sprintf(payload, "%s&distance1=%d", payload, + meas->distance1->distance); + } + if (meas->distance2) { + sprintf(payload, "%s&distance2=%d", payload, + meas->distance2->distance); + } request_t* req = req_new(payload); if (!req) { diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index 2b59222..b615459 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -40,6 +40,7 @@ typedef struct { uint8_t gpio_num; uint8_t gpio_val; uint32_t timestamp; + int sensor_idx; } hcsr04_event_t; static double calc_dist(int time_diff) { @@ -60,7 +61,8 @@ static void IRAM_ATTR hcsr04_isr_handler(void* arg) hcsr04_event_t hcsr04_evt = { .gpio_num = config->echo_pin, .gpio_val = gpio_get_level(config->echo_pin), - .timestamp = system_get_time() + .timestamp = system_get_time(), + .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->hcsr04_evt_queue, &hcsr04_evt, NULL); } @@ -73,12 +75,15 @@ static void hcsr04_task(hcsr04_config_t* config) { while(1) { if(config->enabled) { if (xQueueReceive(config->hcsr04_evt_queue, &gpio_evt, 100)) { -// ESP_LOGD(TAG, "%d:%d:%d", config->state, gpio_evt.gpio_val, gpio_evt.timestamp); + ESP_LOGD(TAG, "%d/%d s:%d v:%d t:%d", config->sensor_idx, gpio_evt.sensor_idx, config->state, gpio_evt.gpio_val, gpio_evt.timestamp); switch(config->state) { case WAITFORECHO: if(gpio_evt.gpio_val) { startpulse=gpio_evt.timestamp; config->state = RECEIVE; + ESP_LOGD(TAG, "sensor: %d state: %d start pulse", config->sensor_idx, config->state); + } else { + ESP_LOGD(TAG, "sensor: %d state: %d invalid val: %d", config->sensor_idx, config->state, gpio_evt.gpio_val); } break; case RECEIVE: @@ -86,7 +91,7 @@ static void hcsr04_task(hcsr04_config_t* config) { endpulse=gpio_evt.timestamp; double distance = calc_dist(endpulse-startpulse); ESP_LOGD(TAG, "sensor: %d difference: %d distance: %.2f", config->sensor_idx, endpulse-startpulse, distance); - if (config->callback) { + if (distance < 1000 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, .distance = distance @@ -94,6 +99,8 @@ static void hcsr04_task(hcsr04_config_t* config) { config->callback(&result); } config->state = IDLE; + } else { + ESP_LOGD(TAG, "sensor: %d state: %d invalid val: %d", config->sensor_idx, config->state, gpio_evt.gpio_val); } break; case IDLE: @@ -101,7 +108,7 @@ static void hcsr04_task(hcsr04_config_t* config) { } } else { - ESP_LOGD(TAG, "ping"); + ESP_LOGD(TAG, "sensor: %d ping", config->sensor_idx); send_trigger(config); } } diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index d677218..e04ec82 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -113,6 +113,18 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); cJSON_AddItemToObject(envobj2, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[2].timestamp)); } + if(CONFIG_OAP_MH_ENABLED && last_env_data[3].timestamp) { + cJSON *envobj3 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env3", envobj3); + cJSON_AddItemToObject(envobj3, "distance", cJSON_CreateNumber(last_env_data[3].env_data.distance)); + cJSON_AddItemToObject(envobj3, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[3].timestamp)); + } + if(CONFIG_OAP_MH_ENABLED && last_env_data[4].timestamp) { + cJSON *envobj4 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env4", envobj4); + cJSON_AddItemToObject(envobj4, "distance", cJSON_CreateNumber(last_env_data[4].env_data.distance)); + cJSON_AddItemToObject(envobj4, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[4].timestamp)); + } if(pm_data_array.timestamp) { cJSON *pmobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "pm0", pmobj0); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 4c7b86f..019bdca 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -424,6 +424,12 @@

    OpenAirProject Sensor Date: Sat, 13 Jan 2018 18:54:16 +0100 Subject: [PATCH 146/200] finalized distance metering --- components/oap-common/include/oap_data.h | 2 ++ .../oap-http-get-publisher/http_get_publisher.c | 8 ++++++++ components/oap-hw-hc-sr04/hcsr04.c | 15 +++++++++++---- components/oap-wifi/cpanel.c | 12 ++++++++++++ components/oap-wifi/index.html | 6 ++++++ 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 7907437..69530c2 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -26,6 +26,8 @@ #include "oap_data_pm.h" #include "oap_data_env.h" + +// FIXME this stuff has to be generalized typedef struct { pm_data_t* pm; pm_data_t* pm_aux; diff --git a/components/oap-http-get-publisher/http_get_publisher.c b/components/oap-http-get-publisher/http_get_publisher.c index a7d4ff4..cce9a3e 100644 --- a/components/oap-http-get-publisher/http_get_publisher.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -60,6 +60,14 @@ static esp_err_t http_get(char* uri, oap_measurement_t* meas) { sprintf(payload, "%s&co2=%d", payload, meas->co2->co2); } + if (meas->distance1) { + sprintf(payload, "%s&distance1=%d", payload, + meas->distance1->distance); + } + if (meas->distance2) { + sprintf(payload, "%s&distance2=%d", payload, + meas->distance2->distance); + } request_t* req = req_new(payload); if (!req) { diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index 2b59222..b615459 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -40,6 +40,7 @@ typedef struct { uint8_t gpio_num; uint8_t gpio_val; uint32_t timestamp; + int sensor_idx; } hcsr04_event_t; static double calc_dist(int time_diff) { @@ -60,7 +61,8 @@ static void IRAM_ATTR hcsr04_isr_handler(void* arg) hcsr04_event_t hcsr04_evt = { .gpio_num = config->echo_pin, .gpio_val = gpio_get_level(config->echo_pin), - .timestamp = system_get_time() + .timestamp = system_get_time(), + .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->hcsr04_evt_queue, &hcsr04_evt, NULL); } @@ -73,12 +75,15 @@ static void hcsr04_task(hcsr04_config_t* config) { while(1) { if(config->enabled) { if (xQueueReceive(config->hcsr04_evt_queue, &gpio_evt, 100)) { -// ESP_LOGD(TAG, "%d:%d:%d", config->state, gpio_evt.gpio_val, gpio_evt.timestamp); + ESP_LOGD(TAG, "%d/%d s:%d v:%d t:%d", config->sensor_idx, gpio_evt.sensor_idx, config->state, gpio_evt.gpio_val, gpio_evt.timestamp); switch(config->state) { case WAITFORECHO: if(gpio_evt.gpio_val) { startpulse=gpio_evt.timestamp; config->state = RECEIVE; + ESP_LOGD(TAG, "sensor: %d state: %d start pulse", config->sensor_idx, config->state); + } else { + ESP_LOGD(TAG, "sensor: %d state: %d invalid val: %d", config->sensor_idx, config->state, gpio_evt.gpio_val); } break; case RECEIVE: @@ -86,7 +91,7 @@ static void hcsr04_task(hcsr04_config_t* config) { endpulse=gpio_evt.timestamp; double distance = calc_dist(endpulse-startpulse); ESP_LOGD(TAG, "sensor: %d difference: %d distance: %.2f", config->sensor_idx, endpulse-startpulse, distance); - if (config->callback) { + if (distance < 1000 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, .distance = distance @@ -94,6 +99,8 @@ static void hcsr04_task(hcsr04_config_t* config) { config->callback(&result); } config->state = IDLE; + } else { + ESP_LOGD(TAG, "sensor: %d state: %d invalid val: %d", config->sensor_idx, config->state, gpio_evt.gpio_val); } break; case IDLE: @@ -101,7 +108,7 @@ static void hcsr04_task(hcsr04_config_t* config) { } } else { - ESP_LOGD(TAG, "ping"); + ESP_LOGD(TAG, "sensor: %d ping", config->sensor_idx); send_trigger(config); } } diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index d677218..e04ec82 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -113,6 +113,18 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); cJSON_AddItemToObject(envobj2, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[2].timestamp)); } + if(CONFIG_OAP_MH_ENABLED && last_env_data[3].timestamp) { + cJSON *envobj3 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env3", envobj3); + cJSON_AddItemToObject(envobj3, "distance", cJSON_CreateNumber(last_env_data[3].env_data.distance)); + cJSON_AddItemToObject(envobj3, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[3].timestamp)); + } + if(CONFIG_OAP_MH_ENABLED && last_env_data[4].timestamp) { + cJSON *envobj4 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env4", envobj4); + cJSON_AddItemToObject(envobj4, "distance", cJSON_CreateNumber(last_env_data[4].env_data.distance)); + cJSON_AddItemToObject(envobj4, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[4].timestamp)); + } if(pm_data_array.timestamp) { cJSON *pmobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "pm0", pmobj0); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 4c7b86f..019bdca 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -424,6 +424,12 @@

    OpenAirProject Sensor
    Date: Sun, 14 Jan 2018 13:18:10 +0100 Subject: [PATCH 147/200] add seconds ago to web page, better validation of distance --- components/oap-hw-hc-sr04/hcsr04.c | 2 +- components/oap-wifi/index.html | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index b615459..df64a7e 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -91,7 +91,7 @@ static void hcsr04_task(hcsr04_config_t* config) { endpulse=gpio_evt.timestamp; double distance = calc_dist(endpulse-startpulse); ESP_LOGD(TAG, "sensor: %d difference: %d distance: %.2f", config->sensor_idx, endpulse-startpulse, distance); - if (distance < 1000 && config->callback) { + if (distance <= 400 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, .distance = distance diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 019bdca..b66a476 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -414,31 +414,31 @@

    OpenAirProject Sensor Date: Sun, 14 Jan 2018 13:18:10 +0100 Subject: [PATCH 148/200] add seconds ago to web page, better validation of distance --- components/oap-hw-hc-sr04/hcsr04.c | 2 +- components/oap-wifi/index.html | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index b615459..df64a7e 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -91,7 +91,7 @@ static void hcsr04_task(hcsr04_config_t* config) { endpulse=gpio_evt.timestamp; double distance = calc_dist(endpulse-startpulse); ESP_LOGD(TAG, "sensor: %d difference: %d distance: %.2f", config->sensor_idx, endpulse-startpulse, distance); - if (distance < 1000 && config->callback) { + if (distance <= 400 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, .distance = distance diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 019bdca..b66a476 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -414,31 +414,31 @@

    OpenAirProject Sensor Date: Mon, 22 Jan 2018 20:18:40 +0100 Subject: [PATCH 149/200] add SMA gnerator, currently used for CO2 --- components/oap-common/include/oap_common.h | 9 +++++++++ components/oap-common/oap_common.c | 10 ++++++++++ components/oap-hw-mhz19/include/mhz19.h | 1 + components/oap-hw-mhz19/mhz19.c | 9 ++++++--- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index f253658..c9df880 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -49,6 +49,14 @@ void oap_reboot(char* cause); long oap_epoch_sec(); long oap_epoch_sec_valid(); +typedef struct { + double *data; + size_t size; + int lastpos; + double sum; +} sma_data_t; + + //from esp-arduino /** @@ -72,4 +80,5 @@ void delayMicroseconds(uint32_t us); void set_gpio(uint8_t gpio, uint8_t enabled); void configure_gpio(uint8_t gpio); void req_set_user_agent(request_t* req); +double sma_generator (sma_data_t *sma, double value); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 0e5da18..178a077 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -127,3 +127,13 @@ void req_set_user_agent(request_t* req) { sprintf(agent, "User-Agent: OTA-ESP32/%s", oap_version_str()); req_setopt(req, REQ_SET_HEADER, agent); } + +double sma_generator (sma_data_t *sma, double value) { + sma->sum += value; + sma->data[sma->lastpos%sma->size] = value; + sma->lastpos++; + if(sma->lastpos > sma->size) { + sma->sum -= sma->data[(sma->lastpos+1)%sma->size]; + } + return sma->sum/sma->size; +} diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h index afc68ed..5c2b77b 100644 --- a/components/oap-hw-mhz19/include/mhz19.h +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -40,6 +40,7 @@ typedef struct { uint8_t uart_rxd_pin; uint8_t uart_rts_pin; uint8_t uart_cts_pin; + sma_data_t sma; } mhz19_config_t; /** diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 5305641..951f731 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -121,7 +121,7 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, - .co2 = co2val + .co2 = sma_generator(&config->sma, co2val) }; config->callback(&result); } @@ -164,13 +164,12 @@ esp_err_t mhz19_init(mhz19_config_t* config) { // set ABC logic on (0xa0) / off (0x00) mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); - mhz19_cmd(config, MH_Z19_SENSOR_DETECTION_RANGE, 2000); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo } - +#define SMA_SIZE 30 esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { config->sensor_idx = sensor_idx; config->uart_num = CONFIG_OAP_MH_UART_NUM; @@ -178,5 +177,9 @@ esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) config->uart_rxd_pin = CONFIG_OAP_MH_UART_RXD_PIN; config->uart_rts_pin = CONFIG_OAP_MH_UART_RTS_PIN; config->uart_cts_pin = CONFIG_OAP_MH_UART_CTS_PIN; + memset(&config->sma, 0, sizeof(sma_data_t)); + config->sma.data = (double *)malloc(SMA_SIZE*sizeof(double)); + memset((void*)config->sma.data, 0, SMA_SIZE*sizeof(double)); + config->sma.size=(size_t)SMA_SIZE; return ESP_OK; } From 6e00b7550252674d1f5e1ee150aaaaaaa5703504 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 22 Jan 2018 20:18:40 +0100 Subject: [PATCH 150/200] add SMA gnerator, currently used for CO2 --- components/oap-common/include/oap_common.h | 9 +++++++++ components/oap-common/oap_common.c | 10 ++++++++++ components/oap-hw-mhz19/include/mhz19.h | 1 + components/oap-hw-mhz19/mhz19.c | 9 ++++++--- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index f253658..c9df880 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -49,6 +49,14 @@ void oap_reboot(char* cause); long oap_epoch_sec(); long oap_epoch_sec_valid(); +typedef struct { + double *data; + size_t size; + int lastpos; + double sum; +} sma_data_t; + + //from esp-arduino /** @@ -72,4 +80,5 @@ void delayMicroseconds(uint32_t us); void set_gpio(uint8_t gpio, uint8_t enabled); void configure_gpio(uint8_t gpio); void req_set_user_agent(request_t* req); +double sma_generator (sma_data_t *sma, double value); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 0e5da18..178a077 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -127,3 +127,13 @@ void req_set_user_agent(request_t* req) { sprintf(agent, "User-Agent: OTA-ESP32/%s", oap_version_str()); req_setopt(req, REQ_SET_HEADER, agent); } + +double sma_generator (sma_data_t *sma, double value) { + sma->sum += value; + sma->data[sma->lastpos%sma->size] = value; + sma->lastpos++; + if(sma->lastpos > sma->size) { + sma->sum -= sma->data[(sma->lastpos+1)%sma->size]; + } + return sma->sum/sma->size; +} diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h index afc68ed..5c2b77b 100644 --- a/components/oap-hw-mhz19/include/mhz19.h +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -40,6 +40,7 @@ typedef struct { uint8_t uart_rxd_pin; uint8_t uart_rts_pin; uint8_t uart_cts_pin; + sma_data_t sma; } mhz19_config_t; /** diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 5305641..951f731 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -121,7 +121,7 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { env_data_t result = { .sensor_idx = config->sensor_idx, .temp = t, - .co2 = co2val + .co2 = sma_generator(&config->sma, co2val) }; config->callback(&result); } @@ -164,13 +164,12 @@ esp_err_t mhz19_init(mhz19_config_t* config) { // set ABC logic on (0xa0) / off (0x00) mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); - mhz19_cmd(config, MH_Z19_SENSOR_DETECTION_RANGE, 2000); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo } - +#define SMA_SIZE 30 esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { config->sensor_idx = sensor_idx; config->uart_num = CONFIG_OAP_MH_UART_NUM; @@ -178,5 +177,9 @@ esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) config->uart_rxd_pin = CONFIG_OAP_MH_UART_RXD_PIN; config->uart_rts_pin = CONFIG_OAP_MH_UART_RTS_PIN; config->uart_cts_pin = CONFIG_OAP_MH_UART_CTS_PIN; + memset(&config->sma, 0, sizeof(sma_data_t)); + config->sma.data = (double *)malloc(SMA_SIZE*sizeof(double)); + memset((void*)config->sma.data, 0, SMA_SIZE*sizeof(double)); + config->sma.size=(size_t)SMA_SIZE; return ESP_OK; } From bffabaf6fbbfc573d383217829c9d7a9e77d7f29 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 22 Jan 2018 21:29:39 +0100 Subject: [PATCH 151/200] fix sma --- components/oap-common/oap_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 178a077..10cb59f 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -133,7 +133,7 @@ double sma_generator (sma_data_t *sma, double value) { sma->data[sma->lastpos%sma->size] = value; sma->lastpos++; if(sma->lastpos > sma->size) { - sma->sum -= sma->data[(sma->lastpos+1)%sma->size]; + sma->sum -= sma->data[sma->lastpos%sma->size]; } return sma->sum/sma->size; } From cfb45a686732933dc24d246a2be852b1c97940b9 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 22 Jan 2018 21:29:39 +0100 Subject: [PATCH 152/200] fix sma --- components/oap-common/oap_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 178a077..10cb59f 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -133,7 +133,7 @@ double sma_generator (sma_data_t *sma, double value) { sma->data[sma->lastpos%sma->size] = value; sma->lastpos++; if(sma->lastpos > sma->size) { - sma->sum -= sma->data[(sma->lastpos+1)%sma->size]; + sma->sum -= sma->data[sma->lastpos%sma->size]; } return sma->sum/sma->size; } From f53b5d5a2a503bdf86eb29113e9e2556654db0eb Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 22 Jan 2018 21:34:59 +0100 Subject: [PATCH 153/200] fix sma --- components/oap-common/oap_common.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 10cb59f..98a2b81 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -132,8 +132,9 @@ double sma_generator (sma_data_t *sma, double value) { sma->sum += value; sma->data[sma->lastpos%sma->size] = value; sma->lastpos++; - if(sma->lastpos > sma->size) { + if(sma->lastpos >= sma->size) { sma->sum -= sma->data[sma->lastpos%sma->size]; } return sma->sum/sma->size; } + From 93484e3ab76e119994afa0ff53f5d881f90fd3a7 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 22 Jan 2018 21:34:59 +0100 Subject: [PATCH 154/200] fix sma --- components/oap-common/oap_common.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 10cb59f..98a2b81 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -132,8 +132,9 @@ double sma_generator (sma_data_t *sma, double value) { sma->sum += value; sma->data[sma->lastpos%sma->size] = value; sma->lastpos++; - if(sma->lastpos > sma->size) { + if(sma->lastpos >= sma->size) { sma->sum -= sma->data[sma->lastpos%sma->size]; } return sma->sum/sma->size; } + From 1dff3e22c8e5c5122c45527fb15454cd7b3cbf28 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 23 Jan 2018 18:14:58 +0100 Subject: [PATCH 155/200] fix wifi reconnection --- components/oap-common/include/oap_common.h | 2 +- components/oap-common/oap_common.c | 5 ++++- components/oap-hw-mhz19/mhz19.c | 2 +- components/oap-wifi/bootwifi.c | 9 ++++++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index c9df880..fd1292d 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -52,7 +52,7 @@ long oap_epoch_sec_valid(); typedef struct { double *data; size_t size; - int lastpos; + unsigned int lastpos; double sum; } sma_data_t; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 98a2b81..f61b619 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -132,9 +132,12 @@ double sma_generator (sma_data_t *sma, double value) { sma->sum += value; sma->data[sma->lastpos%sma->size] = value; sma->lastpos++; + unsigned int size=sma->size; if(sma->lastpos >= sma->size) { sma->sum -= sma->data[sma->lastpos%sma->size]; + } else { + size=sma->lastpos; } - return sma->sum/sma->size; + return sma->sum/size; } diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 951f731..de8542b 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -169,7 +169,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo } -#define SMA_SIZE 30 +#define SMA_SIZE 60 esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { config->sensor_idx = sensor_idx; config->uart_num = CONFIG_OAP_MH_UART_NUM; diff --git a/components/oap-wifi/bootwifi.c b/components/oap-wifi/bootwifi.c index 0da4155..283d3c5 100644 --- a/components/oap-wifi/bootwifi.c +++ b/components/oap-wifi/bootwifi.c @@ -180,6 +180,10 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { } //WARNING - we cannot rely on this event, sometimes it doesn't got triggered + case SYSTEM_EVENT_STA_START: { + esp_wifi_connect(); + break; + } case SYSTEM_EVENT_STA_DISCONNECTED: { wifi_state_change(false, false); /* @@ -194,7 +198,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { */ if (!oap_wifi_config.ap_mode) { ESP_LOGI(tag, "reconnect"); - restore_wifi_setup(); + esp_wifi_connect(); } break; } @@ -306,8 +310,6 @@ static void become_station() { if (err){ ESP_LOGI(tag, "tcpip_adapter_set_hostname failed, rc=%d", err); } - - ESP_ERROR_CHECK(esp_wifi_connect());//FIXERR 0x3006 : ESP_ERR_WIFI_CONN (happens after reboot via control panel) } static void become_access_point() { @@ -334,6 +336,7 @@ static void init_wifi() { wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); + restore_wifi_setup(); } void wifi_boot() { From 09a7b483b24629a1f35a8f2a13279cc008320050 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 23 Jan 2018 18:14:58 +0100 Subject: [PATCH 156/200] fix wifi reconnection --- components/oap-common/include/oap_common.h | 2 +- components/oap-common/oap_common.c | 5 ++++- components/oap-hw-mhz19/mhz19.c | 2 +- components/oap-wifi/bootwifi.c | 9 ++++++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index c9df880..fd1292d 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -52,7 +52,7 @@ long oap_epoch_sec_valid(); typedef struct { double *data; size_t size; - int lastpos; + unsigned int lastpos; double sum; } sma_data_t; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index 98a2b81..f61b619 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -132,9 +132,12 @@ double sma_generator (sma_data_t *sma, double value) { sma->sum += value; sma->data[sma->lastpos%sma->size] = value; sma->lastpos++; + unsigned int size=sma->size; if(sma->lastpos >= sma->size) { sma->sum -= sma->data[sma->lastpos%sma->size]; + } else { + size=sma->lastpos; } - return sma->sum/sma->size; + return sma->sum/size; } diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 951f731..de8542b 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -169,7 +169,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); return ESP_OK; //todo } -#define SMA_SIZE 30 +#define SMA_SIZE 60 esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { config->sensor_idx = sensor_idx; config->uart_num = CONFIG_OAP_MH_UART_NUM; diff --git a/components/oap-wifi/bootwifi.c b/components/oap-wifi/bootwifi.c index 0da4155..283d3c5 100644 --- a/components/oap-wifi/bootwifi.c +++ b/components/oap-wifi/bootwifi.c @@ -180,6 +180,10 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { } //WARNING - we cannot rely on this event, sometimes it doesn't got triggered + case SYSTEM_EVENT_STA_START: { + esp_wifi_connect(); + break; + } case SYSTEM_EVENT_STA_DISCONNECTED: { wifi_state_change(false, false); /* @@ -194,7 +198,7 @@ static esp_err_t esp32_wifi_eventHandler(void *ctx, system_event_t *event) { */ if (!oap_wifi_config.ap_mode) { ESP_LOGI(tag, "reconnect"); - restore_wifi_setup(); + esp_wifi_connect(); } break; } @@ -306,8 +310,6 @@ static void become_station() { if (err){ ESP_LOGI(tag, "tcpip_adapter_set_hostname failed, rc=%d", err); } - - ESP_ERROR_CHECK(esp_wifi_connect());//FIXERR 0x3006 : ESP_ERR_WIFI_CONN (happens after reboot via control panel) } static void become_access_point() { @@ -334,6 +336,7 @@ static void init_wifi() { wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); + restore_wifi_setup(); } void wifi_boot() { From d16205752a17ccd0d5676c0563697f2049ff2319 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 24 Jan 2018 12:14:24 +0100 Subject: [PATCH 157/200] change co2 measurement interval --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-mhz19/mhz19.c | 2 +- main/main.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index ea42102..7718184 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 7 +#define OAP_VER_PATCH 9 typedef struct { uint8_t major; diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index de8542b..7e01aeb 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -163,7 +163,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); + //mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); diff --git a/main/main.c b/main/main.c index 7e59374..9d5b632 100644 --- a/main/main.c +++ b/main/main.c @@ -271,7 +271,7 @@ static void env_sensors_init() { } #if CONFIG_OAP_MH_ENABLED if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { - mhz19_cfg.interval = 1000; + mhz19_cfg.interval = 5000; mhz19_cfg.callback = &env_sensor_callback; mhz19_init(&mhz19_cfg); mhz19_enable(&mhz19_cfg, 1); From b6f0824f8fd6d107b5631f7a8e5724ef319a876b Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Wed, 24 Jan 2018 12:14:24 +0100 Subject: [PATCH 158/200] change co2 measurement interval --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-mhz19/mhz19.c | 2 +- main/main.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index ea42102..7718184 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 7 +#define OAP_VER_PATCH 9 typedef struct { uint8_t major; diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index de8542b..7e01aeb 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -163,7 +163,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); + //mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); diff --git a/main/main.c b/main/main.c index 7e59374..9d5b632 100644 --- a/main/main.c +++ b/main/main.c @@ -271,7 +271,7 @@ static void env_sensors_init() { } #if CONFIG_OAP_MH_ENABLED if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { - mhz19_cfg.interval = 1000; + mhz19_cfg.interval = 5000; mhz19_cfg.callback = &env_sensor_callback; mhz19_init(&mhz19_cfg); mhz19_enable(&mhz19_cfg, 1); From 009154950cee4b61aaddb9e9b54dfbe8a85386bc Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 30 Jan 2018 13:56:43 +0100 Subject: [PATCH 159/200] fix basic auth --- components/oap-common/include/oap_version.h | 2 +- components/oap-http/esp_request.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 7718184..b632c23 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 9 +#define OAP_VER_PATCH 10 typedef struct { uint8_t major; diff --git a/components/oap-http/esp_request.c b/components/oap-http/esp_request.c index 459fdae..ff19f43 100644 --- a/components/oap-http/esp_request.c +++ b/components/oap-http/esp_request.c @@ -112,8 +112,10 @@ static char *http_auth_basic_encode(const char *username, const char *password) // ESP_LOGD(TAG, "http_auth_basic_encode: %s", inputstr); mbedtls_base64_encode( (unsigned char*)outstr, 0, &olen, (unsigned char*)inputstr, strlen(inputstr)); - outstr = (char *)malloc(olen+1); - if(!mbedtls_base64_encode( (unsigned char*)outstr, olen, &olen, (unsigned char*)inputstr, strlen(inputstr))) { + outstr = (char *)malloc(olen+1+22); + sprintf(outstr, "Authorization: Basic "); + + if(!mbedtls_base64_encode( (unsigned char*)outstr+21, olen, &olen, (unsigned char*)inputstr, strlen(inputstr))) { // ESP_LOGD(TAG, "http_auth_basic_encode: %s", outstr); return outstr; } From 43dcd4308999678c7f57a542d85faa5d5bef8342 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 30 Jan 2018 13:56:43 +0100 Subject: [PATCH 160/200] fix basic auth --- components/oap-common/include/oap_version.h | 2 +- components/oap-http/esp_request.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 7718184..b632c23 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 9 +#define OAP_VER_PATCH 10 typedef struct { uint8_t major; diff --git a/components/oap-http/esp_request.c b/components/oap-http/esp_request.c index 459fdae..ff19f43 100644 --- a/components/oap-http/esp_request.c +++ b/components/oap-http/esp_request.c @@ -112,8 +112,10 @@ static char *http_auth_basic_encode(const char *username, const char *password) // ESP_LOGD(TAG, "http_auth_basic_encode: %s", inputstr); mbedtls_base64_encode( (unsigned char*)outstr, 0, &olen, (unsigned char*)inputstr, strlen(inputstr)); - outstr = (char *)malloc(olen+1); - if(!mbedtls_base64_encode( (unsigned char*)outstr, olen, &olen, (unsigned char*)inputstr, strlen(inputstr))) { + outstr = (char *)malloc(olen+1+22); + sprintf(outstr, "Authorization: Basic "); + + if(!mbedtls_base64_encode( (unsigned char*)outstr+21, olen, &olen, (unsigned char*)inputstr, strlen(inputstr))) { // ESP_LOGD(TAG, "http_auth_basic_encode: %s", outstr); return outstr; } From c77adbc8755014b17e08467712742490bb77c644 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 3 Feb 2018 15:42:55 +0100 Subject: [PATCH 161/200] add sma filter to distance --- components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 2 +- components/oap-hw-hc-sr04/hcsr04.c | 7 ++++++- components/oap-hw-hc-sr04/include/hcsr04.h | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index b632c23..43b8fce 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 10 +#define OAP_VER_PATCH 11 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index f61b619..ffba283 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -124,7 +124,7 @@ void configure_gpio(uint8_t gpio) { void req_set_user_agent(request_t* req) { char agent[80]; - sprintf(agent, "User-Agent: OTA-ESP32/%s", oap_version_str()); + sprintf(agent, "User-Agent: OAP-ESP32/%s", oap_version_str()); req_setopt(req, REQ_SET_HEADER, agent); } diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index df64a7e..0bfc3e4 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -94,7 +94,7 @@ static void hcsr04_task(hcsr04_config_t* config) { if (distance <= 400 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, - .distance = distance + .distance = sma_generator(&config->sma, distance) }; config->callback(&result); } @@ -154,6 +154,7 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { return ESP_OK; //todo } +#define SMA_SIZE 5 esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx) { config->sensor_idx = sensor_idx; switch(sensor_idx) { @@ -170,5 +171,9 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx #endif break; } + memset(&config->sma, 0, sizeof(sma_data_t)); + config->sma.data = (double *)malloc(SMA_SIZE*sizeof(double)); + memset((void*)config->sma.data, 0, SMA_SIZE*sizeof(double)); + config->sma.size=(size_t)SMA_SIZE; return ESP_OK; } diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h index becc8d0..64c032d 100644 --- a/components/oap-hw-hc-sr04/include/hcsr04.h +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -43,6 +43,7 @@ typedef struct { uint8_t echo_pin; hcsr04_state_t state; QueueHandle_t hcsr04_evt_queue; + sma_data_t sma; } hcsr04_config_t; /** From 318623b4a63d2fef5eb25cf0de647c58480d9a5b Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 3 Feb 2018 15:42:55 +0100 Subject: [PATCH 162/200] add sma filter to distance --- components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 2 +- components/oap-hw-hc-sr04/hcsr04.c | 7 ++++++- components/oap-hw-hc-sr04/include/hcsr04.h | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index b632c23..43b8fce 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 10 +#define OAP_VER_PATCH 11 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index f61b619..ffba283 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -124,7 +124,7 @@ void configure_gpio(uint8_t gpio) { void req_set_user_agent(request_t* req) { char agent[80]; - sprintf(agent, "User-Agent: OTA-ESP32/%s", oap_version_str()); + sprintf(agent, "User-Agent: OAP-ESP32/%s", oap_version_str()); req_setopt(req, REQ_SET_HEADER, agent); } diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index df64a7e..0bfc3e4 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -94,7 +94,7 @@ static void hcsr04_task(hcsr04_config_t* config) { if (distance <= 400 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, - .distance = distance + .distance = sma_generator(&config->sma, distance) }; config->callback(&result); } @@ -154,6 +154,7 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { return ESP_OK; //todo } +#define SMA_SIZE 5 esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx) { config->sensor_idx = sensor_idx; switch(sensor_idx) { @@ -170,5 +171,9 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx #endif break; } + memset(&config->sma, 0, sizeof(sma_data_t)); + config->sma.data = (double *)malloc(SMA_SIZE*sizeof(double)); + memset((void*)config->sma.data, 0, SMA_SIZE*sizeof(double)); + config->sma.size=(size_t)SMA_SIZE; return ESP_OK; } diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h index becc8d0..64c032d 100644 --- a/components/oap-hw-hc-sr04/include/hcsr04.h +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -43,6 +43,7 @@ typedef struct { uint8_t echo_pin; hcsr04_state_t state; QueueHandle_t hcsr04_evt_queue; + sma_data_t sma; } hcsr04_config_t; /** From 9acd57b26798a16254f9a0d5862d0a3589d744fc Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 4 Feb 2018 10:00:30 +0100 Subject: [PATCH 163/200] sma over distance, re enable mh-z19 abc --- components/oap-hw-mhz19/mhz19.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 7e01aeb..de8542b 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -163,7 +163,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - //mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); From 1c320ea737907e106214825b435cbcf05cd53197 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 4 Feb 2018 10:00:30 +0100 Subject: [PATCH 164/200] sma over distance, re enable mh-z19 abc --- components/oap-hw-mhz19/mhz19.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index 7e01aeb..de8542b 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -163,7 +163,7 @@ esp_err_t mhz19_init(mhz19_config_t* config) { sprintf(task_name, "mhz19_sensor_%d", config->sensor_idx); // set ABC logic on (0xa0) / off (0x00) - //mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); + mhz19_cmd(config, MH_Z19_ABC_LOGIC, 0xa0); //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) xTaskCreate((TaskFunction_t)mhz19_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); From 9025e40cccbfdffb0c33ba7c4157669b70545efe Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 11 Feb 2018 14:32:49 +0100 Subject: [PATCH 165/200] add generic gpio support --- components/oap-aws/awsiot.c | 12 +- components/oap-common/include/oap_data.h | 1 + components/oap-common/include/oap_data_env.h | 38 ++++- components/oap-common/include/oap_version.h | 2 +- .../http_get_publisher.c | 12 +- components/oap-hw-bmx280/bmx280.c | 13 +- components/oap-hw-bmx280/i2c_bme280.c | 8 +- components/oap-hw-gpio/Kconfig | 43 +++++ components/oap-hw-gpio/component.mk | 8 + components/oap-hw-gpio/hw_gpio.c | 158 ++++++++++++++++++ components/oap-hw-gpio/include/hw_gpio.h | 62 +++++++ components/oap-hw-hc-sr04/Kconfig | 8 +- components/oap-hw-hc-sr04/hcsr04.c | 11 +- components/oap-hw-mhz19/mhz19.c | 5 +- components/oap-thingspk/thing_speak.c | 6 +- components/oap-wifi/cpanel.c | 147 ++++++++++++++-- components/oap-wifi/index.html | 6 + main/main.c | 39 ++++- 18 files changed, 511 insertions(+), 68 deletions(-) create mode 100644 components/oap-hw-gpio/Kconfig create mode 100644 components/oap-hw-gpio/component.mk create mode 100644 components/oap-hw-gpio/hw_gpio.c create mode 100644 components/oap-hw-gpio/include/hw_gpio.h diff --git a/components/oap-aws/awsiot.c b/components/oap-aws/awsiot.c index ef9b63e..8c2fd74 100644 --- a/components/oap-aws/awsiot.c +++ b/components/oap-aws/awsiot.c @@ -103,9 +103,9 @@ static esp_err_t awsiot_rest_post(oap_measurement_t* meas, oap_sensor_config_t * if (meas->env) { cJSON* weather = cJSON_CreateObject(); cJSON_AddItemToObject(results, "weather", weather); - cJSON_AddNumberToObject(weather, "temp", meas->env->temp); - cJSON_AddNumberToObject(weather, "pressure", meas->env->pressure); - cJSON_AddNumberToObject(weather, "humidity", meas->env->humidity); + cJSON_AddNumberToObject(weather, "temp", meas->env->bmx280.temp); + cJSON_AddNumberToObject(weather, "pressure", meas->env->bmx280.pressure); + cJSON_AddNumberToObject(weather, "humidity", meas->env->bmx280.humidity); cJSON_AddNumberToObject(weather, "sensor", meas->env->sensor_idx); } else { cJSON_AddNullToObject(results, "weather"); @@ -114,9 +114,9 @@ static esp_err_t awsiot_rest_post(oap_measurement_t* meas, oap_sensor_config_t * if (meas->env_int) { cJSON* internal = cJSON_CreateObject(); cJSON_AddItemToObject(results, "internal", internal); - cJSON_AddNumberToObject(internal, "temp", meas->env_int->temp); - cJSON_AddNumberToObject(internal, "pressure", meas->env_int->pressure); - cJSON_AddNumberToObject(internal, "humidity", meas->env_int->humidity); + cJSON_AddNumberToObject(internal, "temp", meas->env_int->bmx280.temp); + cJSON_AddNumberToObject(internal, "pressure", meas->env_int->bmx280.pressure); + cJSON_AddNumberToObject(internal, "humidity", meas->env_int->bmx280.humidity); cJSON_AddNumberToObject(internal, "sensor", meas->env_int->sensor_idx); } else { cJSON_AddNullToObject(results, "internal"); diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 69530c2..d8ebaba 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -36,6 +36,7 @@ typedef struct { env_data_t* co2; env_data_t* distance1; env_data_t* distance2; + env_data_t* gpio; long int local_time; } oap_measurement_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index b8c087d..03b8a06 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -23,15 +23,39 @@ #ifndef COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_ENV_H_ #define COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_ENV_H_ +typedef enum { + sensor_bmx280 = 0, + sensor_mhz19, + sensor_hcsr04, + sensor_gpio +} sensor_type_t; + typedef struct { - double temp; - double pressure; - double sealevel; - double humidity; - uint32_t distance; - uint32_t co2; - uint32_t altitude; uint8_t sensor_idx; + sensor_type_t sensor_type; + + union { + struct { + double temp; + double pressure; + double sealevel; + double humidity; + uint32_t altitude; + } bmx280; + struct { + double temp; + uint32_t co2; + } mhz19; + struct { + uint32_t distance; + } hcsr04; + struct { + int val; + time_t GPIlastLow; + time_t GPIlastHigh; + time_t GPOlastOut; + } gpio; + }; } env_data_t; #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_ENV_H_ */ diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 43b8fce..9623d86 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 11 +#define OAP_VER_PATCH 12 typedef struct { uint8_t major; diff --git a/components/oap-http-get-publisher/http_get_publisher.c b/components/oap-http-get-publisher/http_get_publisher.c index cce9a3e..0b5189b 100644 --- a/components/oap-http-get-publisher/http_get_publisher.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -52,21 +52,21 @@ static esp_err_t http_get(char* uri, oap_measurement_t* meas) { if (meas->env) { sprintf(payload, "%s&temp=%.1f&pressure=%.1f&humidity=%.0f", payload, - meas->env->temp, - meas->env->sealevel, - meas->env->humidity); + meas->env->bmx280.temp, + meas->env->bmx280.sealevel, + meas->env->bmx280.humidity); } if (meas->co2) { sprintf(payload, "%s&co2=%d", payload, - meas->co2->co2); + meas->co2->mhz19.co2); } if (meas->distance1) { sprintf(payload, "%s&distance1=%d", payload, - meas->distance1->distance); + meas->distance1->hcsr04.distance); } if (meas->distance2) { sprintf(payload, "%s&distance2=%d", payload, - meas->distance2->distance); + meas->distance2->hcsr04.distance); } request_t* req = req_new(payload); diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 29e7615..623dbe7 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -71,7 +71,8 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { }; env_data_t result = { - .sensor_idx = bmx280_config->sensor_idx + .sensor_idx = bmx280_config->sensor_idx, + .sensor_type = sensor_bmx280 }; // TODO strangely, if this is executed inside main task, LEDC fails to initialise properly PWM (and blinks in funny ways)... easy to reproduce. @@ -80,11 +81,11 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { while(1) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { - result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); - result.humidity = getHumidityForTemp(result.humidity, result.temp, result.temp + bmx280_config->tempOffset); - result.temp += bmx280_config->tempOffset; - result.humidity += bmx280_config->humidityOffset; + result.bmx280.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.bmx280.pressure); + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.bmx280.temp, result.bmx280.pressure, result.bmx280.sealevel, bmx280_config->altitude, result.bmx280.humidity); + result.bmx280.humidity = getHumidityForTemp(result.bmx280.humidity, result.bmx280.temp, result.bmx280.temp + bmx280_config->tempOffset); + result.bmx280.temp += bmx280_config->tempOffset; + result.bmx280.humidity += bmx280_config->humidityOffset; if (bmx280_config->callback) { bmx280_config->callback(&result); } diff --git a/components/oap-hw-bmx280/i2c_bme280.c b/components/oap-hw-bmx280/i2c_bme280.c index 6274f6e..7895a30 100755 --- a/components/oap-hw-bmx280/i2c_bme280.c +++ b/components/oap-hw-bmx280/i2c_bme280.c @@ -225,12 +225,12 @@ esp_err_t BME280_read(bme280_sensor_t* bme280_sensor, env_data_t* result){ temp_reading_t temp_reading = BME280_compensate_T_double(&bme280_sensor->calib, temp_raw); - result->temp = temp_reading.temp;//Celsius - result->pressure = BME280_compensate_P_double(&bme280_sensor->calib, temp_reading.t_fine, pres_raw) / 100.0; //hPA + result->bmx280.temp = temp_reading.temp;//Celsius + result->bmx280.pressure = BME280_compensate_P_double(&bme280_sensor->calib, temp_reading.t_fine, pres_raw) / 100.0; //hPA if (bme280_sensor->chip_type == CHIP_TYPE_BME) { - result->humidity = BME280_compensate_H_double(&bme280_sensor->calib, temp_reading.t_fine, hum_raw);// pct + result->bmx280.humidity = BME280_compensate_H_double(&bme280_sensor->calib, temp_reading.t_fine, hum_raw);// pct } else { - result->humidity = HUMIDITY_MEAS_UNSUPPORTED; + result->bmx280.humidity = HUMIDITY_MEAS_UNSUPPORTED; } return ESP_OK; diff --git a/components/oap-hw-gpio/Kconfig b/components/oap-hw-gpio/Kconfig new file mode 100644 index 0000000..90ec7b1 --- /dev/null +++ b/components/oap-hw-gpio/Kconfig @@ -0,0 +1,43 @@ +menu "OAP Generic GPIO" + +config OAP_GPIO_0_ENABLED + bool "enable GPIO #0" + default y + help + todo + +config OAP_GPIO_OUTPUT0_PIN + int "GPIO #0 output PIN" + depends on OAP_GPIO_0_ENABLED + default 21 + help + todo + +config OAP_GPIO_INPUT0_PIN + int "GPIO #0 input PIN" + depends on OAP_GPIO_0_ENABLED + default 36 + help + todo + +config OAP_GPIO_1_ENABLED + bool "enable GPIO #1" + default n + help + todo + +config OAP_GPIO_OUTPUT1_PIN + int "GPIO #1 output PIN" + depends on OAP_GPIO_1_ENABLED + default 22 + help + todo + +config OAP_GPIO_INPUT1_PIN + int "GPIO #1 input PIN" + depends on OAP_GPIO_1_ENABLED + default 39 + help + todo + +endmenu diff --git a/components/oap-hw-gpio/component.mk b/components/oap-hw-gpio/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-gpio/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c new file mode 100644 index 0000000..02bfb12 --- /dev/null +++ b/components/oap-hw-gpio/hw_gpio.c @@ -0,0 +1,158 @@ +/* + * hw_gpio.c + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "esp_log.h" +#include "hw_gpio.h" +#include "oap_debug.h" +#include "oap_data_env.h" + +#define ESP_INTR_FLAG_DEFAULT 0 + +static const char* TAG = "hw_gpio"; + +typedef struct { + uint8_t gpio_num; + uint8_t gpio_val; + uint32_t timestamp; + int sensor_idx; +} gpio_event_t; + +static void publish(hw_gpio_config_t* config) { + if (config->callback) { + env_data_t result = { + .sensor_idx = config->sensor_idx, + .sensor_type = sensor_gpio, + .gpio.GPIlastHigh=config->GPIlastHigh, + .gpio.GPIlastLow=config->GPIlastLow, + .gpio.GPOlastOut=config->GPOlastOut + }; + config->callback(&result); + } +} + +esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { + gpio_set_level(config->output_pin, value); + if(delay) { + ets_delay_us(delay); + gpio_set_level(config->output_pin, !value); + } + config->GPOlastOut=time(NULL); + publish(config); + return ESP_OK; +} + +static void IRAM_ATTR hw_gpio_isr_handler(void* arg) +{ + hw_gpio_config_t* config=(hw_gpio_config_t*) arg; + + gpio_event_t hw_gpio_evt = { + .gpio_num = config->input_pin, + .gpio_val = gpio_get_level(config->input_pin), + .timestamp = system_get_time(), + .sensor_idx = config->sensor_idx + }; + xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); +} + +static void hw_gpio_task(hw_gpio_config_t* config) { + gpio_event_t hw_gpio_evt; +// send_trigger(config); + while(1) { + if(config->enabled) { + if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 100)) { + ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); + if (config->callback) { + if(hw_gpio_evt.gpio_val) { + config->GPIlastHigh=time(NULL); + } else { + config->GPIlastLow=time(NULL); + } + publish(config); + } + } + } + + if (config->interval > 0) { + delay(config->interval); + } else { + break; + } + } + vTaskDelete(NULL); +} + +esp_err_t hw_gpio_enable(hw_gpio_config_t* config, uint8_t enabled) { + ESP_LOGI(TAG,"enable(%d)",enabled); + config->enabled = enabled; + return ESP_OK; //todo +} + +esp_err_t hw_gpio_init(hw_gpio_config_t* config) { + hw_gpio_enable(config, 0); + + char task_name[100]; + sprintf(task_name, "gpio_sensor_%d", config->sensor_idx); + config->gpio_evt_queue = xQueueCreate(10, sizeof(gpio_event_t)); + + gpio_pad_select_gpio(config->input_pin); + gpio_set_direction(config->input_pin, GPIO_MODE_INPUT); + gpio_set_pull_mode(config->input_pin, GPIO_PULLDOWN_ONLY); + gpio_set_intr_type(config->input_pin, GPIO_INTR_ANYEDGE); + + gpio_pad_select_gpio(config->output_pin); + gpio_set_direction(config->output_pin, GPIO_MODE_OUTPUT); + gpio_set_level(config->output_pin, 0); + + gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); + ESP_LOGD(TAG, "init output pin: %d input pin: %d", config->output_pin, config->input_pin); + gpio_isr_handler_add(config->input_pin, hw_gpio_isr_handler, config); + + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)hw_gpio_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + return ESP_OK; //todo +} + +esp_err_t hw_gpio_set_hardware_config(hw_gpio_config_t* config, uint8_t sensor_idx) { + config->sensor_idx = sensor_idx; + switch(sensor_idx) { + case 5: +#if CONFIG_OAP_GPIO_0_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT0_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT0_PIN; +#endif + break; + case 6: +#if CONFIG_OAP_GPIO_1_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; + config->input_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; +#endif + break; + } + return ESP_OK; +} diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h new file mode 100644 index 0000000..eef7c38 --- /dev/null +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -0,0 +1,62 @@ +/* + * mhz19.h + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_HW_GPIO_H_ +#define MAIN_HW_GPIO_H_ + +#include "oap_common.h" +#include "oap_data_env.h" + +typedef void(*env_callback)(env_data_t*); + +typedef struct { + uint8_t enabled; //internal, read-only + uint8_t sensor_idx; + uint32_t interval; + env_callback callback; + uint8_t output_pin; + uint8_t input_pin; + QueueHandle_t gpio_evt_queue; + time_t GPIlastLow; + time_t GPIlastHigh; + time_t GPOlastOut; +} hw_gpio_config_t; + +/** + * pm samples data is send to the queue. + */ +esp_err_t hw_gpio_init(hw_gpio_config_t* config); + +/** + * enable/disable sensor. + */ +esp_err_t hw_gpio_enable(hw_gpio_config_t* config, uint8_t enabled); +/** + * fill config based on hardware configuration + */ +esp_err_t hw_gpio_set_hardware_config(hw_gpio_config_t* config, uint8_t sensor_idx); +/** + * trigger output of gpio + */ +esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay); + +#endif /* MAIN_MHZ19_H_ */ diff --git a/components/oap-hw-hc-sr04/Kconfig b/components/oap-hw-hc-sr04/Kconfig index 2bcdda3..c5c0e9c 100644 --- a/components/oap-hw-hc-sr04/Kconfig +++ b/components/oap-hw-hc-sr04/Kconfig @@ -6,14 +6,14 @@ config OAP_HCSR04_0_ENABLED help todo -config OAP_HCSR04_TRIGGER0 +config OAP_HCSR04_TRIGGER0_PIN int "Trigger 0 output PIN" depends on OAP_HCSR04_0_ENABLED default 32 help todo -config OAP_HCSR04_ECHO0 +config OAP_HCSR04_ECHO0_PIN int "Echo 0 input PIN" depends on OAP_HCSR04_0_ENABLED default 34 @@ -26,14 +26,14 @@ config OAP_HCSR04_1_ENABLED help todo -config OAP_HCSR04_TRIGGER1 +config OAP_HCSR04_TRIGGER1_PIN int "Trigger 1 output PIN" depends on OAP_HCSR04_1_ENABLED default 33 help todo -config OAP_HCSR04_ECHO1 +config OAP_HCSR04_ECHO1_PIN int "Echo 1 input PIN" depends on OAP_HCSR04_1_ENABLED default 35 diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index 0bfc3e4..2fb144b 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -94,7 +94,8 @@ static void hcsr04_task(hcsr04_config_t* config) { if (distance <= 400 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, - .distance = sma_generator(&config->sma, distance) + .sensor_type = sensor_hcsr04, + .hcsr04.distance = sma_generator(&config->sma, distance) }; config->callback(&result); } @@ -160,14 +161,14 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx switch(sensor_idx) { case 3: #if CONFIG_OAP_HCSR04_0_ENABLED - config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0; - config->echo_pin = CONFIG_OAP_HCSR04_ECHO0; + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0_PIN; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO0_PIN; #endif break; case 4: #if CONFIG_OAP_HCSR04_1_ENABLED - config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1; - config->echo_pin = CONFIG_OAP_HCSR04_ECHO1; + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1_PIN; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO1_PIN; #endif break; } diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index de8542b..ab8d13a 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -120,8 +120,9 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { if (config->callback && co2val > 410 && co2val < 3000) { env_data_t result = { .sensor_idx = config->sensor_idx, - .temp = t, - .co2 = sma_generator(&config->sma, co2val) + .sensor_type = sensor_mhz19, + .mhz19.temp = t, + .mhz19.co2 = sma_generator(&config->sma, co2val) }; config->callback(&result); } diff --git a/components/oap-thingspk/thing_speak.c b/components/oap-thingspk/thing_speak.c index 82b8470..c9df1ec 100644 --- a/components/oap-thingspk/thing_speak.c +++ b/components/oap-thingspk/thing_speak.c @@ -50,9 +50,9 @@ static char* prepare_thingspeak_payload(oap_measurement_t* meas) { if (meas->env) { sprintf(payload, "%s&field4=%.2f&field5=%.2f&field6=%.2f", payload, - meas->env->temp, - meas->env->pressure, - meas->env->humidity); + meas->env->bmx280.temp, + meas->env->bmx280.pressure, + meas->env->bmx280.humidity); } //memory metrics diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index e04ec82..1574773 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -25,6 +25,8 @@ #include "cJSON.h" #include "oap_storage.h" #include "pm_meter.h" +#include "mhz19.h" +#include "hw_gpio.h" #define tag "cpanel" @@ -34,6 +36,69 @@ extern const uint8_t index_html_end[] asm("_binary_index_html_end"); extern pm_data_pair_t pm_data_array; extern env_data_record_t last_env_data[3]; +inline int ishex(int x) { + return (x >= '0' && x <= '9') || + (x >= 'a' && x <= 'f') || + (x >= 'A' && x <= 'F'); +} + +static int decode(const char *s, char *dec) { + char *o; + const char *end = s + strlen(s); + int c; + + for (o = dec; s <= end; o++) { + c = *s++; + if (c == '+') c = ' '; + else if (c == '%' && ( !ishex(*s++) || + !ishex(*s++) || + !sscanf(s - 2, "%2x", &c))) + return -1; + + if (dec) *o = c; + } + + return o - dec; +} + +static int parse_query(char *str, char *key, char *val, size_t szval) { + char *delimiter1 = "&\r\n "; + char *delimiter2 = "="; + + char *ptr1; + char *ptr2; + ptr1 = strtok(str, delimiter1); + ESP_LOGI(tag, "parse_query: str:%s key:%s", str, key); + while(ptr1 != NULL) { + ptr2 = strtok(ptr1, delimiter2); + while(ptr2 != NULL) { + char *tmp=ptr2; + ptr2=strtok(NULL, delimiter2); + if(!strcmp(tmp, key)) { + memset(val, 0, szval); + decode(ptr2, val); + ESP_LOGI(tag, "parse_query: val:%s", val); + return 1; + } + } + ptr1 = strtok(NULL, delimiter1); + } + return 0; +} + +static int parse_query_int(char *query, char *key, int *val) { + char valstr[32]; + char *str = strdup(query); + int ret=parse_query(str, key, valstr, sizeof(valstr)); + if(ret) { + *val = atoi(valstr); + } else { + *val=0; + } + free(str); + return ret; +} + static char *mgStrToStr(struct mg_str mgStr) { char *retStr = (char *) malloc(mgStr.len + 1); memcpy(retStr, mgStr.p, mgStr.len); @@ -88,43 +153,73 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); cJSON_AddItemToObject(status, "utctime", cJSON_CreateString(strftime_buf)); } + cJSON_AddItemToObject(status, "time", cJSON_CreateNumber(now)); cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); - - if(CONFIG_OAP_BMX280_ENABLED && last_env_data[0].timestamp) { + #ifdef CONFIG_OAP_BMX280_ENABLED + if(last_env_data[0].timestamp) { cJSON *envobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env0", envobj0); - cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); - cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.sealevel)); - cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); + cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.bmx280.temp)); + cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.bmx280.sealevel)); + cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.bmx280.humidity)); cJSON_AddItemToObject(envobj0, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[0].timestamp)); } - if(CONFIG_OAP_BMX280_ENABLED_AUX && last_env_data[1].timestamp) { + #endif + #ifdef CONFIG_OAP_BMX280_ENABLED_AUX + if(last_env_data[1].timestamp) { cJSON *envobj1 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env1", envobj1); - cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); - cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.sealevel)); - cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); + cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.bmx280.temp)); + cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.bmx280.sealevel)); + cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.bmx280.humidity)); cJSON_AddItemToObject(envobj1, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[1].timestamp)); } - if(CONFIG_OAP_MH_ENABLED && last_env_data[2].timestamp) { + #endif + #ifdef CONFIG_OAP_MH_ENABLED + if(last_env_data[2].timestamp) { cJSON *envobj2 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env2", envobj2); - cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); + cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.mhz19.co2)); cJSON_AddItemToObject(envobj2, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[2].timestamp)); } - if(CONFIG_OAP_MH_ENABLED && last_env_data[3].timestamp) { + #endif + #ifdef CONFIG_OAP_HCSR04_0_ENABLED + if(last_env_data[3].timestamp) { cJSON *envobj3 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env3", envobj3); - cJSON_AddItemToObject(envobj3, "distance", cJSON_CreateNumber(last_env_data[3].env_data.distance)); + cJSON_AddItemToObject(envobj3, "distance", cJSON_CreateNumber(last_env_data[3].env_data.hcsr04.distance)); cJSON_AddItemToObject(envobj3, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[3].timestamp)); } - if(CONFIG_OAP_MH_ENABLED && last_env_data[4].timestamp) { + #endif + #ifdef CONFIG_OAP_HCSR04_1_ENABLED + if(last_env_data[4].timestamp) { cJSON *envobj4 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env4", envobj4); - cJSON_AddItemToObject(envobj4, "distance", cJSON_CreateNumber(last_env_data[4].env_data.distance)); + cJSON_AddItemToObject(envobj4, "distance", cJSON_CreateNumber(last_env_data[4].env_data.hcsr04.distance)); cJSON_AddItemToObject(envobj4, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[4].timestamp)); } + #endif + #ifdef CONFIG_OAP_GPIO_0_ENABLED + if(last_env_data[5].timestamp) { + cJSON *envobj5 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env6", envobj5); + cJSON_AddItemToObject(envobj5, "GPIlastLow", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj5, "GPIlastHigh", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj5, "GPOlastOut", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj5, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[5].timestamp)); + } + #endif + #ifdef CONFIG_OAP_GPIO_1_ENABLED + if(last_env_data[6].timestamp) { + cJSON *envobj6 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env7", envobj6); + cJSON_AddItemToObject(envobj6, "GPIlastLow", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj6, "GPIlastHigh", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj6, "GPOlastOut", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj6, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[6].timestamp)); + } + #endif if(pm_data_array.timestamp) { cJSON *pmobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "pm0", pmobj0); @@ -172,8 +267,9 @@ static void handler_set_config(struct mg_connection *nc, struct http_message *me * GET /set - Set the connection info (REST request). * POST /ssidSelected - Set the connection info (HTML FORM). */ -#include "mhz19.h" extern mhz19_config_t mhz19_cfg; +extern hw_gpio_config_t hw_gpio_cfg[2]; + esp_err_t mhz19_calibrate(mhz19_config_t* config); void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { @@ -186,8 +282,9 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { //mg_str is not terminated with '\0' char *uri = mgStrToStr(message->uri); char *method = mgStrToStr(message->method); - - ESP_LOGD(tag, "%s %s", method, uri); + char *query_string = mgStrToStr(message->query_string); + + ESP_LOGD(tag, "%s %s %s", method, uri, query_string); if (strcmp(uri, "/") == 0) { handler_index(nc); @@ -220,12 +317,26 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { mg_send(nc,"ok", 2); handled = 1; } + if(strcmp(uri, "/trigger") == 0) { + int delay; + int value; + int gpio; + parse_query_int(query_string, "delay", &delay); + parse_query_int(query_string, "value", &value); + parse_query_int(query_string, "gpio", &gpio); + if(gpio == 0 || gpio ==1) { + hw_gpio_send_trigger(&hw_gpio_cfg[gpio], value, delay); + } + mg_send(nc,"ok", 2); + handled = 1; + } if (!handled) { mg_send_head(nc, 404, 0, "Content-Type: text/plain"); } nc->flags |= MG_F_SEND_AND_CLOSE; free(uri); free(method); + free(query_string); break; } } diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index b66a476..fae6d64 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -430,6 +430,12 @@

    OpenAirProject Sensorsensor_idx < (sizeof(last_env_data)/sizeof(env_data_record_t))) { if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 1000 ) == pdTRUE ) { - ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm, dist: %dcm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2, env_data->distance); + switch(env_data->sensor_type) { + case sensor_bmx280: + ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%", env_data->sensor_idx, env_data->bmx280.temp, env_data->bmx280.pressure, env_data->bmx280.humidity);break; + case sensor_mhz19: + ESP_LOGI(TAG, "env (%d): temp : %.2f C, CO2: %d ppm", env_data->sensor_idx, env_data->mhz19.temp, env_data->mhz19.co2);break; + case sensor_hcsr04: + ESP_LOGI(TAG, "env (%d): dist: %dcm", env_data->sensor_idx, env_data->hcsr04.distance);break; + case sensor_gpio: + ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPOlastOut);break; + } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); memcpy(r, env_data, sizeof(env_data_t)); @@ -293,6 +304,22 @@ static void env_sensors_init() { hcsr04_enable(&hcsr04_cfg[1], 1); } #endif +#if CONFIG_OAP_GPIO_0_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[0], 5) == ESP_OK) { + hw_gpio_cfg[0].interval = 1000; + hw_gpio_cfg[0].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[0]); + hw_gpio_enable(&hw_gpio_cfg[0], 1); + } +#endif +#if CONFIG_OAP_GPIO_1_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[1], 6) == ESP_OK) { + hw_gpio_cfg[1].interval = 1000; + hw_gpio_cfg[1].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[1]); + hw_gpio_enable(&hw_gpio_cfg[1], 1); + } +#endif } //--------- MAIN ----------- @@ -413,10 +440,10 @@ void display_task(void *ptr) { delay(5000); ssd1306_display_clear(); sprintf(logstr, "%s%.2fC\n\n%.2fhPa\n\n%.2f%% / %dppm\n\nPM: %d / %d / %d",toggle, - last_env_data[0].env_data.temp, - last_env_data[0].env_data.sealevel, - last_env_data[0].env_data.humidity, - last_env_data[2].env_data.co2, + last_env_data[0].env_data.bmx280.temp, + last_env_data[0].env_data.bmx280.sealevel, + last_env_data[0].env_data.bmx280.humidity, + last_env_data[2].env_data.mhz19.co2, pm_data_array.pm_data[0].pm1_0, pm_data_array.pm_data[0].pm2_5, pm_data_array.pm_data[0].pm10 From 6520969538db473c5365762dc74002bd7368b8a2 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 11 Feb 2018 14:32:49 +0100 Subject: [PATCH 166/200] add generic gpio support --- components/oap-aws/awsiot.c | 12 +- components/oap-common/include/oap_data.h | 1 + components/oap-common/include/oap_data_env.h | 38 ++++- components/oap-common/include/oap_version.h | 2 +- .../http_get_publisher.c | 12 +- components/oap-hw-bmx280/bmx280.c | 13 +- components/oap-hw-bmx280/i2c_bme280.c | 8 +- components/oap-hw-gpio/Kconfig | 43 +++++ components/oap-hw-gpio/component.mk | 8 + components/oap-hw-gpio/hw_gpio.c | 158 ++++++++++++++++++ components/oap-hw-gpio/include/hw_gpio.h | 62 +++++++ components/oap-hw-hc-sr04/Kconfig | 8 +- components/oap-hw-hc-sr04/hcsr04.c | 11 +- components/oap-hw-mhz19/mhz19.c | 5 +- components/oap-thingspk/thing_speak.c | 6 +- components/oap-wifi/cpanel.c | 147 ++++++++++++++-- components/oap-wifi/index.html | 6 + main/main.c | 39 ++++- 18 files changed, 511 insertions(+), 68 deletions(-) create mode 100644 components/oap-hw-gpio/Kconfig create mode 100644 components/oap-hw-gpio/component.mk create mode 100644 components/oap-hw-gpio/hw_gpio.c create mode 100644 components/oap-hw-gpio/include/hw_gpio.h diff --git a/components/oap-aws/awsiot.c b/components/oap-aws/awsiot.c index ef9b63e..8c2fd74 100644 --- a/components/oap-aws/awsiot.c +++ b/components/oap-aws/awsiot.c @@ -103,9 +103,9 @@ static esp_err_t awsiot_rest_post(oap_measurement_t* meas, oap_sensor_config_t * if (meas->env) { cJSON* weather = cJSON_CreateObject(); cJSON_AddItemToObject(results, "weather", weather); - cJSON_AddNumberToObject(weather, "temp", meas->env->temp); - cJSON_AddNumberToObject(weather, "pressure", meas->env->pressure); - cJSON_AddNumberToObject(weather, "humidity", meas->env->humidity); + cJSON_AddNumberToObject(weather, "temp", meas->env->bmx280.temp); + cJSON_AddNumberToObject(weather, "pressure", meas->env->bmx280.pressure); + cJSON_AddNumberToObject(weather, "humidity", meas->env->bmx280.humidity); cJSON_AddNumberToObject(weather, "sensor", meas->env->sensor_idx); } else { cJSON_AddNullToObject(results, "weather"); @@ -114,9 +114,9 @@ static esp_err_t awsiot_rest_post(oap_measurement_t* meas, oap_sensor_config_t * if (meas->env_int) { cJSON* internal = cJSON_CreateObject(); cJSON_AddItemToObject(results, "internal", internal); - cJSON_AddNumberToObject(internal, "temp", meas->env_int->temp); - cJSON_AddNumberToObject(internal, "pressure", meas->env_int->pressure); - cJSON_AddNumberToObject(internal, "humidity", meas->env_int->humidity); + cJSON_AddNumberToObject(internal, "temp", meas->env_int->bmx280.temp); + cJSON_AddNumberToObject(internal, "pressure", meas->env_int->bmx280.pressure); + cJSON_AddNumberToObject(internal, "humidity", meas->env_int->bmx280.humidity); cJSON_AddNumberToObject(internal, "sensor", meas->env_int->sensor_idx); } else { cJSON_AddNullToObject(results, "internal"); diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index 69530c2..d8ebaba 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -36,6 +36,7 @@ typedef struct { env_data_t* co2; env_data_t* distance1; env_data_t* distance2; + env_data_t* gpio; long int local_time; } oap_measurement_t; diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index b8c087d..03b8a06 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -23,15 +23,39 @@ #ifndef COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_ENV_H_ #define COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_ENV_H_ +typedef enum { + sensor_bmx280 = 0, + sensor_mhz19, + sensor_hcsr04, + sensor_gpio +} sensor_type_t; + typedef struct { - double temp; - double pressure; - double sealevel; - double humidity; - uint32_t distance; - uint32_t co2; - uint32_t altitude; uint8_t sensor_idx; + sensor_type_t sensor_type; + + union { + struct { + double temp; + double pressure; + double sealevel; + double humidity; + uint32_t altitude; + } bmx280; + struct { + double temp; + uint32_t co2; + } mhz19; + struct { + uint32_t distance; + } hcsr04; + struct { + int val; + time_t GPIlastLow; + time_t GPIlastHigh; + time_t GPOlastOut; + } gpio; + }; } env_data_t; #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_ENV_H_ */ diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 43b8fce..9623d86 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 11 +#define OAP_VER_PATCH 12 typedef struct { uint8_t major; diff --git a/components/oap-http-get-publisher/http_get_publisher.c b/components/oap-http-get-publisher/http_get_publisher.c index cce9a3e..0b5189b 100644 --- a/components/oap-http-get-publisher/http_get_publisher.c +++ b/components/oap-http-get-publisher/http_get_publisher.c @@ -52,21 +52,21 @@ static esp_err_t http_get(char* uri, oap_measurement_t* meas) { if (meas->env) { sprintf(payload, "%s&temp=%.1f&pressure=%.1f&humidity=%.0f", payload, - meas->env->temp, - meas->env->sealevel, - meas->env->humidity); + meas->env->bmx280.temp, + meas->env->bmx280.sealevel, + meas->env->bmx280.humidity); } if (meas->co2) { sprintf(payload, "%s&co2=%d", payload, - meas->co2->co2); + meas->co2->mhz19.co2); } if (meas->distance1) { sprintf(payload, "%s&distance1=%d", payload, - meas->distance1->distance); + meas->distance1->hcsr04.distance); } if (meas->distance2) { sprintf(payload, "%s&distance2=%d", payload, - meas->distance2->distance); + meas->distance2->hcsr04.distance); } request_t* req = req_new(payload); diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 29e7615..623dbe7 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -71,7 +71,8 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { }; env_data_t result = { - .sensor_idx = bmx280_config->sensor_idx + .sensor_idx = bmx280_config->sensor_idx, + .sensor_type = sensor_bmx280 }; // TODO strangely, if this is executed inside main task, LEDC fails to initialise properly PWM (and blinks in funny ways)... easy to reproduce. @@ -80,11 +81,11 @@ esp_err_t bmx280_measurement_loop(bmx280_config_t* bmx280_config) { while(1) { log_task_stack(TAG); if ((ret = BME280_read(&bmx280_sensor, &result)) == ESP_OK) { - result.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.pressure); - ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.temp, result.pressure, result.sealevel, bmx280_config->altitude, result.humidity); - result.humidity = getHumidityForTemp(result.humidity, result.temp, result.temp + bmx280_config->tempOffset); - result.temp += bmx280_config->tempOffset; - result.humidity += bmx280_config->humidityOffset; + result.bmx280.sealevel = getPressureAtSeaLevel(bmx280_config->altitude, result.bmx280.pressure); + ESP_LOGD(TAG,"sensor (%d) => Temperature : %.2f C, Pressure: %.2f hPa, Pressure: %.2f hPa @ %dm,Humidity %.2f", result.sensor_idx, result.bmx280.temp, result.bmx280.pressure, result.bmx280.sealevel, bmx280_config->altitude, result.bmx280.humidity); + result.bmx280.humidity = getHumidityForTemp(result.bmx280.humidity, result.bmx280.temp, result.bmx280.temp + bmx280_config->tempOffset); + result.bmx280.temp += bmx280_config->tempOffset; + result.bmx280.humidity += bmx280_config->humidityOffset; if (bmx280_config->callback) { bmx280_config->callback(&result); } diff --git a/components/oap-hw-bmx280/i2c_bme280.c b/components/oap-hw-bmx280/i2c_bme280.c index 6274f6e..7895a30 100755 --- a/components/oap-hw-bmx280/i2c_bme280.c +++ b/components/oap-hw-bmx280/i2c_bme280.c @@ -225,12 +225,12 @@ esp_err_t BME280_read(bme280_sensor_t* bme280_sensor, env_data_t* result){ temp_reading_t temp_reading = BME280_compensate_T_double(&bme280_sensor->calib, temp_raw); - result->temp = temp_reading.temp;//Celsius - result->pressure = BME280_compensate_P_double(&bme280_sensor->calib, temp_reading.t_fine, pres_raw) / 100.0; //hPA + result->bmx280.temp = temp_reading.temp;//Celsius + result->bmx280.pressure = BME280_compensate_P_double(&bme280_sensor->calib, temp_reading.t_fine, pres_raw) / 100.0; //hPA if (bme280_sensor->chip_type == CHIP_TYPE_BME) { - result->humidity = BME280_compensate_H_double(&bme280_sensor->calib, temp_reading.t_fine, hum_raw);// pct + result->bmx280.humidity = BME280_compensate_H_double(&bme280_sensor->calib, temp_reading.t_fine, hum_raw);// pct } else { - result->humidity = HUMIDITY_MEAS_UNSUPPORTED; + result->bmx280.humidity = HUMIDITY_MEAS_UNSUPPORTED; } return ESP_OK; diff --git a/components/oap-hw-gpio/Kconfig b/components/oap-hw-gpio/Kconfig new file mode 100644 index 0000000..90ec7b1 --- /dev/null +++ b/components/oap-hw-gpio/Kconfig @@ -0,0 +1,43 @@ +menu "OAP Generic GPIO" + +config OAP_GPIO_0_ENABLED + bool "enable GPIO #0" + default y + help + todo + +config OAP_GPIO_OUTPUT0_PIN + int "GPIO #0 output PIN" + depends on OAP_GPIO_0_ENABLED + default 21 + help + todo + +config OAP_GPIO_INPUT0_PIN + int "GPIO #0 input PIN" + depends on OAP_GPIO_0_ENABLED + default 36 + help + todo + +config OAP_GPIO_1_ENABLED + bool "enable GPIO #1" + default n + help + todo + +config OAP_GPIO_OUTPUT1_PIN + int "GPIO #1 output PIN" + depends on OAP_GPIO_1_ENABLED + default 22 + help + todo + +config OAP_GPIO_INPUT1_PIN + int "GPIO #1 input PIN" + depends on OAP_GPIO_1_ENABLED + default 39 + help + todo + +endmenu diff --git a/components/oap-hw-gpio/component.mk b/components/oap-hw-gpio/component.mk new file mode 100644 index 0000000..61f8990 --- /dev/null +++ b/components/oap-hw-gpio/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c new file mode 100644 index 0000000..02bfb12 --- /dev/null +++ b/components/oap-hw-gpio/hw_gpio.c @@ -0,0 +1,158 @@ +/* + * hw_gpio.c + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "esp_log.h" +#include "hw_gpio.h" +#include "oap_debug.h" +#include "oap_data_env.h" + +#define ESP_INTR_FLAG_DEFAULT 0 + +static const char* TAG = "hw_gpio"; + +typedef struct { + uint8_t gpio_num; + uint8_t gpio_val; + uint32_t timestamp; + int sensor_idx; +} gpio_event_t; + +static void publish(hw_gpio_config_t* config) { + if (config->callback) { + env_data_t result = { + .sensor_idx = config->sensor_idx, + .sensor_type = sensor_gpio, + .gpio.GPIlastHigh=config->GPIlastHigh, + .gpio.GPIlastLow=config->GPIlastLow, + .gpio.GPOlastOut=config->GPOlastOut + }; + config->callback(&result); + } +} + +esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { + gpio_set_level(config->output_pin, value); + if(delay) { + ets_delay_us(delay); + gpio_set_level(config->output_pin, !value); + } + config->GPOlastOut=time(NULL); + publish(config); + return ESP_OK; +} + +static void IRAM_ATTR hw_gpio_isr_handler(void* arg) +{ + hw_gpio_config_t* config=(hw_gpio_config_t*) arg; + + gpio_event_t hw_gpio_evt = { + .gpio_num = config->input_pin, + .gpio_val = gpio_get_level(config->input_pin), + .timestamp = system_get_time(), + .sensor_idx = config->sensor_idx + }; + xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); +} + +static void hw_gpio_task(hw_gpio_config_t* config) { + gpio_event_t hw_gpio_evt; +// send_trigger(config); + while(1) { + if(config->enabled) { + if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 100)) { + ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); + if (config->callback) { + if(hw_gpio_evt.gpio_val) { + config->GPIlastHigh=time(NULL); + } else { + config->GPIlastLow=time(NULL); + } + publish(config); + } + } + } + + if (config->interval > 0) { + delay(config->interval); + } else { + break; + } + } + vTaskDelete(NULL); +} + +esp_err_t hw_gpio_enable(hw_gpio_config_t* config, uint8_t enabled) { + ESP_LOGI(TAG,"enable(%d)",enabled); + config->enabled = enabled; + return ESP_OK; //todo +} + +esp_err_t hw_gpio_init(hw_gpio_config_t* config) { + hw_gpio_enable(config, 0); + + char task_name[100]; + sprintf(task_name, "gpio_sensor_%d", config->sensor_idx); + config->gpio_evt_queue = xQueueCreate(10, sizeof(gpio_event_t)); + + gpio_pad_select_gpio(config->input_pin); + gpio_set_direction(config->input_pin, GPIO_MODE_INPUT); + gpio_set_pull_mode(config->input_pin, GPIO_PULLDOWN_ONLY); + gpio_set_intr_type(config->input_pin, GPIO_INTR_ANYEDGE); + + gpio_pad_select_gpio(config->output_pin); + gpio_set_direction(config->output_pin, GPIO_MODE_OUTPUT); + gpio_set_level(config->output_pin, 0); + + gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); + ESP_LOGD(TAG, "init output pin: %d input pin: %d", config->output_pin, config->input_pin); + gpio_isr_handler_add(config->input_pin, hw_gpio_isr_handler, config); + + //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) + xTaskCreate((TaskFunction_t)hw_gpio_task, task_name, 1024*3, config, DEFAULT_TASK_PRIORITY, NULL); + return ESP_OK; //todo +} + +esp_err_t hw_gpio_set_hardware_config(hw_gpio_config_t* config, uint8_t sensor_idx) { + config->sensor_idx = sensor_idx; + switch(sensor_idx) { + case 5: +#if CONFIG_OAP_GPIO_0_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT0_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT0_PIN; +#endif + break; + case 6: +#if CONFIG_OAP_GPIO_1_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; + config->input_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; +#endif + break; + } + return ESP_OK; +} diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h new file mode 100644 index 0000000..eef7c38 --- /dev/null +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -0,0 +1,62 @@ +/* + * mhz19.h + * + * Created on: Jan 4, 2018 + * Author: Deti + * + * This file is part of OpenAirProject-ESP32. + * + * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenAirProject-ESP32 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenAirProject-ESP32. If not, see . + */ + +#ifndef MAIN_HW_GPIO_H_ +#define MAIN_HW_GPIO_H_ + +#include "oap_common.h" +#include "oap_data_env.h" + +typedef void(*env_callback)(env_data_t*); + +typedef struct { + uint8_t enabled; //internal, read-only + uint8_t sensor_idx; + uint32_t interval; + env_callback callback; + uint8_t output_pin; + uint8_t input_pin; + QueueHandle_t gpio_evt_queue; + time_t GPIlastLow; + time_t GPIlastHigh; + time_t GPOlastOut; +} hw_gpio_config_t; + +/** + * pm samples data is send to the queue. + */ +esp_err_t hw_gpio_init(hw_gpio_config_t* config); + +/** + * enable/disable sensor. + */ +esp_err_t hw_gpio_enable(hw_gpio_config_t* config, uint8_t enabled); +/** + * fill config based on hardware configuration + */ +esp_err_t hw_gpio_set_hardware_config(hw_gpio_config_t* config, uint8_t sensor_idx); +/** + * trigger output of gpio + */ +esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay); + +#endif /* MAIN_MHZ19_H_ */ diff --git a/components/oap-hw-hc-sr04/Kconfig b/components/oap-hw-hc-sr04/Kconfig index 2bcdda3..c5c0e9c 100644 --- a/components/oap-hw-hc-sr04/Kconfig +++ b/components/oap-hw-hc-sr04/Kconfig @@ -6,14 +6,14 @@ config OAP_HCSR04_0_ENABLED help todo -config OAP_HCSR04_TRIGGER0 +config OAP_HCSR04_TRIGGER0_PIN int "Trigger 0 output PIN" depends on OAP_HCSR04_0_ENABLED default 32 help todo -config OAP_HCSR04_ECHO0 +config OAP_HCSR04_ECHO0_PIN int "Echo 0 input PIN" depends on OAP_HCSR04_0_ENABLED default 34 @@ -26,14 +26,14 @@ config OAP_HCSR04_1_ENABLED help todo -config OAP_HCSR04_TRIGGER1 +config OAP_HCSR04_TRIGGER1_PIN int "Trigger 1 output PIN" depends on OAP_HCSR04_1_ENABLED default 33 help todo -config OAP_HCSR04_ECHO1 +config OAP_HCSR04_ECHO1_PIN int "Echo 1 input PIN" depends on OAP_HCSR04_1_ENABLED default 35 diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index 0bfc3e4..2fb144b 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -94,7 +94,8 @@ static void hcsr04_task(hcsr04_config_t* config) { if (distance <= 400 && config->callback) { env_data_t result = { .sensor_idx = config->sensor_idx, - .distance = sma_generator(&config->sma, distance) + .sensor_type = sensor_hcsr04, + .hcsr04.distance = sma_generator(&config->sma, distance) }; config->callback(&result); } @@ -160,14 +161,14 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx switch(sensor_idx) { case 3: #if CONFIG_OAP_HCSR04_0_ENABLED - config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0; - config->echo_pin = CONFIG_OAP_HCSR04_ECHO0; + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0_PIN; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO0_PIN; #endif break; case 4: #if CONFIG_OAP_HCSR04_1_ENABLED - config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1; - config->echo_pin = CONFIG_OAP_HCSR04_ECHO1; + config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1_PIN; + config->echo_pin = CONFIG_OAP_HCSR04_ECHO1_PIN; #endif break; } diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index de8542b..ab8d13a 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -120,8 +120,9 @@ static esp_err_t mhz19_cmd_gc(mhz19_config_t* config) { if (config->callback && co2val > 410 && co2val < 3000) { env_data_t result = { .sensor_idx = config->sensor_idx, - .temp = t, - .co2 = sma_generator(&config->sma, co2val) + .sensor_type = sensor_mhz19, + .mhz19.temp = t, + .mhz19.co2 = sma_generator(&config->sma, co2val) }; config->callback(&result); } diff --git a/components/oap-thingspk/thing_speak.c b/components/oap-thingspk/thing_speak.c index 82b8470..c9df1ec 100644 --- a/components/oap-thingspk/thing_speak.c +++ b/components/oap-thingspk/thing_speak.c @@ -50,9 +50,9 @@ static char* prepare_thingspeak_payload(oap_measurement_t* meas) { if (meas->env) { sprintf(payload, "%s&field4=%.2f&field5=%.2f&field6=%.2f", payload, - meas->env->temp, - meas->env->pressure, - meas->env->humidity); + meas->env->bmx280.temp, + meas->env->bmx280.pressure, + meas->env->bmx280.humidity); } //memory metrics diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index e04ec82..1574773 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -25,6 +25,8 @@ #include "cJSON.h" #include "oap_storage.h" #include "pm_meter.h" +#include "mhz19.h" +#include "hw_gpio.h" #define tag "cpanel" @@ -34,6 +36,69 @@ extern const uint8_t index_html_end[] asm("_binary_index_html_end"); extern pm_data_pair_t pm_data_array; extern env_data_record_t last_env_data[3]; +inline int ishex(int x) { + return (x >= '0' && x <= '9') || + (x >= 'a' && x <= 'f') || + (x >= 'A' && x <= 'F'); +} + +static int decode(const char *s, char *dec) { + char *o; + const char *end = s + strlen(s); + int c; + + for (o = dec; s <= end; o++) { + c = *s++; + if (c == '+') c = ' '; + else if (c == '%' && ( !ishex(*s++) || + !ishex(*s++) || + !sscanf(s - 2, "%2x", &c))) + return -1; + + if (dec) *o = c; + } + + return o - dec; +} + +static int parse_query(char *str, char *key, char *val, size_t szval) { + char *delimiter1 = "&\r\n "; + char *delimiter2 = "="; + + char *ptr1; + char *ptr2; + ptr1 = strtok(str, delimiter1); + ESP_LOGI(tag, "parse_query: str:%s key:%s", str, key); + while(ptr1 != NULL) { + ptr2 = strtok(ptr1, delimiter2); + while(ptr2 != NULL) { + char *tmp=ptr2; + ptr2=strtok(NULL, delimiter2); + if(!strcmp(tmp, key)) { + memset(val, 0, szval); + decode(ptr2, val); + ESP_LOGI(tag, "parse_query: val:%s", val); + return 1; + } + } + ptr1 = strtok(NULL, delimiter1); + } + return 0; +} + +static int parse_query_int(char *query, char *key, int *val) { + char valstr[32]; + char *str = strdup(query); + int ret=parse_query(str, key, valstr, sizeof(valstr)); + if(ret) { + *val = atoi(valstr); + } else { + *val=0; + } + free(str); + return ret; +} + static char *mgStrToStr(struct mg_str mgStr) { char *retStr = (char *) malloc(mgStr.len + 1); memcpy(retStr, mgStr.p, mgStr.len); @@ -88,43 +153,73 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); cJSON_AddItemToObject(status, "utctime", cJSON_CreateString(strftime_buf)); } + cJSON_AddItemToObject(status, "time", cJSON_CreateNumber(now)); cJSON_AddItemToObject(status, "uptime", cJSON_CreateNumber(now - boot_time)); cJSON_AddItemToObject(status, "heap", cJSON_CreateNumber(esp_get_free_heap_size())); - - if(CONFIG_OAP_BMX280_ENABLED && last_env_data[0].timestamp) { + #ifdef CONFIG_OAP_BMX280_ENABLED + if(last_env_data[0].timestamp) { cJSON *envobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env0", envobj0); - cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.temp)); - cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.sealevel)); - cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.humidity)); + cJSON_AddItemToObject(envobj0, "temp", cJSON_CreateNumber(last_env_data[0].env_data.bmx280.temp)); + cJSON_AddItemToObject(envobj0, "pressure", cJSON_CreateNumber(last_env_data[0].env_data.bmx280.sealevel)); + cJSON_AddItemToObject(envobj0, "humidity", cJSON_CreateNumber(last_env_data[0].env_data.bmx280.humidity)); cJSON_AddItemToObject(envobj0, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[0].timestamp)); } - if(CONFIG_OAP_BMX280_ENABLED_AUX && last_env_data[1].timestamp) { + #endif + #ifdef CONFIG_OAP_BMX280_ENABLED_AUX + if(last_env_data[1].timestamp) { cJSON *envobj1 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env1", envobj1); - cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.temp)); - cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.sealevel)); - cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.humidity)); + cJSON_AddItemToObject(envobj1, "temp", cJSON_CreateNumber(last_env_data[1].env_data.bmx280.temp)); + cJSON_AddItemToObject(envobj1, "pressure", cJSON_CreateNumber(last_env_data[1].env_data.bmx280.sealevel)); + cJSON_AddItemToObject(envobj1, "humidity", cJSON_CreateNumber(last_env_data[1].env_data.bmx280.humidity)); cJSON_AddItemToObject(envobj1, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[1].timestamp)); } - if(CONFIG_OAP_MH_ENABLED && last_env_data[2].timestamp) { + #endif + #ifdef CONFIG_OAP_MH_ENABLED + if(last_env_data[2].timestamp) { cJSON *envobj2 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env2", envobj2); - cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.co2)); + cJSON_AddItemToObject(envobj2, "co2", cJSON_CreateNumber(last_env_data[2].env_data.mhz19.co2)); cJSON_AddItemToObject(envobj2, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[2].timestamp)); } - if(CONFIG_OAP_MH_ENABLED && last_env_data[3].timestamp) { + #endif + #ifdef CONFIG_OAP_HCSR04_0_ENABLED + if(last_env_data[3].timestamp) { cJSON *envobj3 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env3", envobj3); - cJSON_AddItemToObject(envobj3, "distance", cJSON_CreateNumber(last_env_data[3].env_data.distance)); + cJSON_AddItemToObject(envobj3, "distance", cJSON_CreateNumber(last_env_data[3].env_data.hcsr04.distance)); cJSON_AddItemToObject(envobj3, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[3].timestamp)); } - if(CONFIG_OAP_MH_ENABLED && last_env_data[4].timestamp) { + #endif + #ifdef CONFIG_OAP_HCSR04_1_ENABLED + if(last_env_data[4].timestamp) { cJSON *envobj4 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "env4", envobj4); - cJSON_AddItemToObject(envobj4, "distance", cJSON_CreateNumber(last_env_data[4].env_data.distance)); + cJSON_AddItemToObject(envobj4, "distance", cJSON_CreateNumber(last_env_data[4].env_data.hcsr04.distance)); cJSON_AddItemToObject(envobj4, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[4].timestamp)); } + #endif + #ifdef CONFIG_OAP_GPIO_0_ENABLED + if(last_env_data[5].timestamp) { + cJSON *envobj5 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env6", envobj5); + cJSON_AddItemToObject(envobj5, "GPIlastLow", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj5, "GPIlastHigh", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj5, "GPOlastOut", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj5, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[5].timestamp)); + } + #endif + #ifdef CONFIG_OAP_GPIO_1_ENABLED + if(last_env_data[6].timestamp) { + cJSON *envobj6 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env7", envobj6); + cJSON_AddItemToObject(envobj6, "GPIlastLow", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj6, "GPIlastHigh", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj6, "GPOlastOut", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj6, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[6].timestamp)); + } + #endif if(pm_data_array.timestamp) { cJSON *pmobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "pm0", pmobj0); @@ -172,8 +267,9 @@ static void handler_set_config(struct mg_connection *nc, struct http_message *me * GET /set - Set the connection info (REST request). * POST /ssidSelected - Set the connection info (HTML FORM). */ -#include "mhz19.h" extern mhz19_config_t mhz19_cfg; +extern hw_gpio_config_t hw_gpio_cfg[2]; + esp_err_t mhz19_calibrate(mhz19_config_t* config); void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { @@ -186,8 +282,9 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { //mg_str is not terminated with '\0' char *uri = mgStrToStr(message->uri); char *method = mgStrToStr(message->method); - - ESP_LOGD(tag, "%s %s", method, uri); + char *query_string = mgStrToStr(message->query_string); + + ESP_LOGD(tag, "%s %s %s", method, uri, query_string); if (strcmp(uri, "/") == 0) { handler_index(nc); @@ -220,12 +317,26 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { mg_send(nc,"ok", 2); handled = 1; } + if(strcmp(uri, "/trigger") == 0) { + int delay; + int value; + int gpio; + parse_query_int(query_string, "delay", &delay); + parse_query_int(query_string, "value", &value); + parse_query_int(query_string, "gpio", &gpio); + if(gpio == 0 || gpio ==1) { + hw_gpio_send_trigger(&hw_gpio_cfg[gpio], value, delay); + } + mg_send(nc,"ok", 2); + handled = 1; + } if (!handled) { mg_send_head(nc, 404, 0, "Content-Type: text/plain"); } nc->flags |= MG_F_SEND_AND_CLOSE; free(uri); free(method); + free(query_string); break; } } diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index b66a476..fae6d64 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -430,6 +430,12 @@

    OpenAirProject Sensorsensor_idx < (sizeof(last_env_data)/sizeof(env_data_record_t))) { if( xSemaphoreTakeRecursive( envSemaphore, ( TickType_t ) 1000 ) == pdTRUE ) { - ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%, CO2: %d ppm, dist: %dcm", env_data->sensor_idx, env_data->temp, env_data->pressure, env_data->humidity, env_data->co2, env_data->distance); + switch(env_data->sensor_type) { + case sensor_bmx280: + ESP_LOGI(TAG, "env (%d): temp : %.2f C, pressure: %.2f hPa, humidity: %.2f %%", env_data->sensor_idx, env_data->bmx280.temp, env_data->bmx280.pressure, env_data->bmx280.humidity);break; + case sensor_mhz19: + ESP_LOGI(TAG, "env (%d): temp : %.2f C, CO2: %d ppm", env_data->sensor_idx, env_data->mhz19.temp, env_data->mhz19.co2);break; + case sensor_hcsr04: + ESP_LOGI(TAG, "env (%d): dist: %dcm", env_data->sensor_idx, env_data->hcsr04.distance);break; + case sensor_gpio: + ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPOlastOut);break; + } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); memcpy(r, env_data, sizeof(env_data_t)); @@ -293,6 +304,22 @@ static void env_sensors_init() { hcsr04_enable(&hcsr04_cfg[1], 1); } #endif +#if CONFIG_OAP_GPIO_0_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[0], 5) == ESP_OK) { + hw_gpio_cfg[0].interval = 1000; + hw_gpio_cfg[0].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[0]); + hw_gpio_enable(&hw_gpio_cfg[0], 1); + } +#endif +#if CONFIG_OAP_GPIO_1_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[1], 6) == ESP_OK) { + hw_gpio_cfg[1].interval = 1000; + hw_gpio_cfg[1].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[1]); + hw_gpio_enable(&hw_gpio_cfg[1], 1); + } +#endif } //--------- MAIN ----------- @@ -413,10 +440,10 @@ void display_task(void *ptr) { delay(5000); ssd1306_display_clear(); sprintf(logstr, "%s%.2fC\n\n%.2fhPa\n\n%.2f%% / %dppm\n\nPM: %d / %d / %d",toggle, - last_env_data[0].env_data.temp, - last_env_data[0].env_data.sealevel, - last_env_data[0].env_data.humidity, - last_env_data[2].env_data.co2, + last_env_data[0].env_data.bmx280.temp, + last_env_data[0].env_data.bmx280.sealevel, + last_env_data[0].env_data.bmx280.humidity, + last_env_data[2].env_data.mhz19.co2, pm_data_array.pm_data[0].pm1_0, pm_data_array.pm_data[0].pm2_5, pm_data_array.pm_data[0].pm10 From 261d38b20229eed8827828d93c37e37adc174b9d Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 29 Apr 2018 22:43:05 +0200 Subject: [PATCH 167/200] add GPIO support, bump version to 1.4.0 --- components/oap-common/default_config.json | 16 ++- components/oap-common/include/oap_data.h | 14 ++- components/oap-common/include/oap_data_env.h | 1 + components/oap-common/include/oap_version.h | 4 +- components/oap-hw-bmx280/Kconfig | 12 ++- components/oap-hw-bmx280/bmx280.c | 10 +- components/oap-hw-bmx280/i2c_bme280.c | 2 +- components/oap-hw-bmx280/include/bmx280.h | 2 + components/oap-hw-ext/ctrl_btn.c | 5 +- components/oap-hw-ext/rgb_led.c | 44 ++++---- components/oap-hw-gpio/Kconfig | 48 ++++++++- components/oap-hw-gpio/hw_gpio.c | 55 +++++++--- components/oap-hw-gpio/include/hw_gpio.h | 16 +-- components/oap-hw-hc-sr04/hcsr04.c | 9 +- components/oap-hw-hc-sr04/include/hcsr04.h | 2 + components/oap-hw-mhz19/Kconfig | 14 --- components/oap-hw-mhz19/include/mhz19.h | 11 +- components/oap-hw-mhz19/mhz19.c | 8 +- components/oap-hw-pmsx003/Kconfig | 37 +------ components/oap-hw-pmsx003/include/pmsx003.h | 2 - components/oap-hw-pmsx003/pmsx003.c | 25 +++-- components/oap-meter/include/pm_meter.h | 2 +- components/oap-ota/Kconfig | 4 +- components/oap-wifi/cpanel.c | 77 +++++++++----- components/oap-wifi/index.html | 34 ++++++- main/Kconfig.projbuild | 4 +- main/main.c | 102 ++++++++++++------- 27 files changed, 359 insertions(+), 201 deletions(-) diff --git a/components/oap-common/default_config.json b/components/oap-common/default_config.json index 0487772..bb828d0 100644 --- a/components/oap-common/default_config.json +++ b/components/oap-common/default_config.json @@ -21,22 +21,28 @@ }, "sensor" : { "config" : { - "indoor" : 0, + "pms_enabled" : 1, + "bmx280_enabled": 1, + "mhz19_enabled" : 1, + "hcsr04_enabled": 1, + "ssd1306_enabled": 1, + "gpio_enabled" : 1, + "indoor" : 1, "led" : 1, - "fan" : 1, - "heater" : 1, + "fan" : 0, + "heater" : 0, "measTime" : 60, "warmUpTime": 30, "measInterval": 300, "test" : 0, "measStrategy" : 0, - "height" : 0, + "altitude" : 573, "tempOffset" : 0, "humidityOffset" : 0 } }, "http_get_publisher": { "enabled": 0, - "url": "https://username:password@ota-sensor-server/pushvals.cgi" + "url": "https://ota-sensor:MohD5lew@stb.42u.de/pushvals.cgi" } } diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index d8ebaba..bb27876 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -26,7 +26,6 @@ #include "oap_data_pm.h" #include "oap_data_env.h" - // FIXME this stuff has to be generalized typedef struct { pm_data_t* pm; @@ -36,7 +35,10 @@ typedef struct { env_data_t* co2; env_data_t* distance1; env_data_t* distance2; - env_data_t* gpio; + env_data_t* gpio1; + env_data_t* gpio2; + env_data_t* gpio3; + env_data_t* gpio4; long int local_time; } oap_measurement_t; @@ -54,6 +56,12 @@ typedef struct { int altitude; int tempOffset; int humidityOffset; + int pms_enabled; + int hcsr04_enabled; + int bmx280_enabled; + int gpio_enabled; + int ssd1306_enabled; + int mhz19_enabled; } oap_sensor_config_t; typedef struct { @@ -61,4 +69,6 @@ typedef struct { long timestamp; } env_data_record_t; +extern env_data_record_t last_env_data[]; + #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_H_ */ diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index 03b8a06..48fd9d1 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -53,6 +53,7 @@ typedef struct { int val; time_t GPIlastLow; time_t GPIlastHigh; + int GPICounter; time_t GPOlastOut; } gpio; }; diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 9623d86..cf5ddbe 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -37,8 +37,8 @@ #include "esp_err.h" #define OAP_VER_MAJOR 1 -#define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 12 +#define OAP_VER_MINOR 4 +#define OAP_VER_PATCH 0 typedef struct { uint8_t major; diff --git a/components/oap-hw-bmx280/Kconfig b/components/oap-hw-bmx280/Kconfig index b9aeb0c..5bd894b 100644 --- a/components/oap-hw-bmx280/Kconfig +++ b/components/oap-hw-bmx280/Kconfig @@ -1,13 +1,14 @@ menu "OAP BMx280 Sensor" config OAP_BMX280_ENABLED - int "enable bmx280 sensor" - default 1 + bool "enable bmx280 sensor" + default y help todo config OAP_BMX280_ADDRESS hex "i2c address" + depends on OAP_BMX280_ENABLED default 0x76 help Default address for bmx280 sensor is 0x76, it can be set to 0x77 by pulling up SDO pin. @@ -15,12 +16,14 @@ config OAP_BMX280_ADDRESS config OAP_BMX280_I2C_NUM int "i2c interface number" + depends on OAP_BMX280_ENABLED default 0 help todo config OAP_BMX280_I2C_SDA_PIN int "gpio SDA pin" + depends on OAP_BMX280_ENABLED default 25 help be careful with choosing gpio. i2c pins must be R/W. @@ -28,13 +31,14 @@ config OAP_BMX280_I2C_SDA_PIN config OAP_BMX280_I2C_SCL_PIN int "SCL pin" + depends on OAP_BMX280_ENABLED default 26 help see help for SDA pin config OAP_BMX280_ENABLED_AUX - int "enable internal bmx280 sensor" - default 0 + bool "enable internal bmx280 sensor" + default n help todo diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 623dbe7..b528fb0 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -150,23 +150,25 @@ esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { esp_err_t bmx280_set_hardware_config(bmx280_config_t* bmx280_config, uint8_t sensor_idx) { switch (sensor_idx) { case 0: - if (!CONFIG_OAP_BMX280_ENABLED) return ESP_FAIL; -#if CONFIG_OAP_BMX280_ENABLED +#ifdef CONFIG_OAP_BMX280_ENABLED bmx280_config->sensor_idx = 0; bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM; bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS; bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN; bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN; +#else + return ESP_FAIL; #endif return ESP_OK; case 1: - if (!CONFIG_OAP_BMX280_ENABLED_AUX) return ESP_FAIL; -#if CONFIG_OAP_BMX280_ENABLED_AUX +#ifdef CONFIG_OAP_BMX280_ENABLED_AUX bmx280_config->sensor_idx = 1; bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM_AUX; bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS_AUX; bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX; bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX; +#else + return ESP_FAIL; #endif return ESP_OK; default: diff --git a/components/oap-hw-bmx280/i2c_bme280.c b/components/oap-hw-bmx280/i2c_bme280.c index 7895a30..f3f3293 100755 --- a/components/oap-hw-bmx280/i2c_bme280.c +++ b/components/oap-hw-bmx280/i2c_bme280.c @@ -240,7 +240,7 @@ esp_err_t BME280_verify_chip(bme280_sensor_t* bme280_sensor) { uint8_t chipID = 0; uint8_t attempt = 0; while (read_i2c(&bme280_sensor->i2c_comm, BME280_CHIP_ID_REG, &chipID,1) != ESP_OK && attempt++ < 5) { - ESP_LOGW(TAG, "[%x] failed to read chip id (attempt %d)", bme280_sensor->i2c_comm.device_addr, attempt) + ESP_LOGW(TAG, "[%x] failed to read chip id (attempt %d)", bme280_sensor->i2c_comm.device_addr, attempt); vTaskDelay(20/portTICK_PERIOD_MS); } diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 5c933cb..8002508 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -26,6 +26,8 @@ #include "oap_common.h" #include "oap_data_env.h" +#define HW_BMX280_DEVICES_MAX 2 + typedef void(*env_callback)(env_data_t*); typedef struct bmx280_config_t { diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 98e4bb5..68c4df5 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -110,20 +110,19 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); -#if CONFIG_OAP_BTN_0_ACTIVE_LOW +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); #else gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); #endif gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); return ESP_OK; //TODO handle errors } bool is_ap_mode_pressed() { -#if CONFIG_OAP_BTN_0_ACTIVE_LOW +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); #else return gpio_get_level(CONFIG_OAP_BTN_0_PIN); diff --git a/components/oap-hw-ext/rgb_led.c b/components/oap-hw-ext/rgb_led.c index 9d2245c..3e955e2 100644 --- a/components/oap-hw-ext/rgb_led.c +++ b/components/oap-hw-ext/rgb_led.c @@ -70,12 +70,14 @@ void set_color(rgb_color_t color) { esp_err_t res; int duty; for (int c = 0; c < 3; c++) { - duty = calc_duty(color,c); - if ((res = ledc_set_duty(speed_mode, c, duty)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_set_duty(%d,%d,%d) error %d", speed_mode, c, duty, res); - } - if ((res = ledc_update_duty(speed_mode, c)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_update_duty(%d,%d) error %d", speed_mode, c, res); + if(led_gpio[c] != -1) { + duty = calc_duty(color,c); + if ((res = ledc_set_duty(speed_mode, c, duty)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_set_duty(%d,%d,%d) error %d", speed_mode, c, duty, res); + } + if ((res = ledc_update_duty(speed_mode, c)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_update_duty(%d,%d) error %d", speed_mode, c, res); + } } } } @@ -84,12 +86,14 @@ void fade_to_color(rgb_color_t color, int time) { esp_err_t res; int duty; for (int c = 0; c < 3; c++) { - duty = calc_duty(color,c); - if ((res = ledc_set_fade_with_time(speed_mode, c, duty,time)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_set_fade_with_time(%d,%d,%d,%d) error %d", speed_mode, c, duty, time, res); - } - if ((res = ledc_fade_start(speed_mode, c, LEDC_FADE_NO_WAIT)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_fade_start(%d,%d) error %d", c, LEDC_FADE_NO_WAIT, res); + if(led_gpio[c] != -1) { + duty = calc_duty(color,c); + if ((res = ledc_set_fade_with_time(speed_mode, c, duty,time)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_set_fade_with_time(%d,%d,%d,%d) error %d", speed_mode, c, duty, time, res); + } + if ((res = ledc_fade_start(speed_mode, c, LEDC_FADE_NO_WAIT)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_fade_start(%d,%d) error %d", c, LEDC_FADE_NO_WAIT, res); + } } } } @@ -112,11 +116,13 @@ static void setup_ledc() { }; for (int c = 0; c < 3; c++) { - ledc_channel.channel = c; //LEDC_CHANNEL_0 to LEDC_CHANNEL_2 - ledc_channel.gpio_num = led_gpio[c]; - ledc_channel.duty = 0; - gpio_intr_disable(led_gpio[c]); - ledc_channel_config(&ledc_channel); + if(led_gpio[c] != -1) { + ledc_channel.channel = c; //LEDC_CHANNEL_0 to LEDC_CHANNEL_2 + ledc_channel.gpio_num = led_gpio[c]; + ledc_channel.duty = 0; + gpio_intr_disable(led_gpio[c]); + ledc_channel_config(&ledc_channel); + } } //initialize fade service. ledc_fade_func_install(0); @@ -169,7 +175,9 @@ void led_init(int enabled, xQueueHandle _cmd_queue) xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, DEFAULT_TASK_PRIORITY+1, NULL); } else { for (int c = 0; c < 3; c++) { - if (led_gpio[c] > 0) gpio_set_pull_mode(led_gpio[c], GPIO_PULLDOWN_ONLY); + if (led_gpio[c] != -1) { + gpio_set_pull_mode(led_gpio[c], GPIO_PULLDOWN_ONLY); + } } } } diff --git a/components/oap-hw-gpio/Kconfig b/components/oap-hw-gpio/Kconfig index 90ec7b1..f45ab78 100644 --- a/components/oap-hw-gpio/Kconfig +++ b/components/oap-hw-gpio/Kconfig @@ -2,21 +2,21 @@ menu "OAP Generic GPIO" config OAP_GPIO_0_ENABLED bool "enable GPIO #0" - default y + default n help todo config OAP_GPIO_OUTPUT0_PIN int "GPIO #0 output PIN" depends on OAP_GPIO_0_ENABLED - default 21 + default 5 help todo config OAP_GPIO_INPUT0_PIN int "GPIO #0 input PIN" depends on OAP_GPIO_0_ENABLED - default 36 + default 21 help todo @@ -29,13 +29,53 @@ config OAP_GPIO_1_ENABLED config OAP_GPIO_OUTPUT1_PIN int "GPIO #1 output PIN" depends on OAP_GPIO_1_ENABLED - default 22 + default 12 help todo config OAP_GPIO_INPUT1_PIN int "GPIO #1 input PIN" depends on OAP_GPIO_1_ENABLED + default 22 + help + todo + +config OAP_GPIO_2_ENABLED + bool "enable GPIO #2" + default n + help + todo + +config OAP_GPIO_OUTPUT2_PIN + int "GPIO #2 output PIN" + depends on OAP_GPIO_2_ENABLED + default 18 + help + todo + +config OAP_GPIO_INPUT2_PIN + int "GPIO #2 input PIN" + depends on OAP_GPIO_2_ENABLED + default 36 + help + todo + +config OAP_GPIO_3_ENABLED + bool "enable GPIO #3" + default n + help + todo + +config OAP_GPIO_OUTPUT3_PIN + int "GPIO #3 output PIN" + depends on OAP_GPIO_3_ENABLED + default 19 + help + todo + +config OAP_GPIO_INPUT3_PIN + int "GPIO #3 input PIN" + depends on OAP_GPIO_3_ENABLED default 39 help todo diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 02bfb12..2c75b9f 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -50,6 +50,7 @@ static void publish(hw_gpio_config_t* config) { .sensor_type = sensor_gpio, .gpio.GPIlastHigh=config->GPIlastHigh, .gpio.GPIlastLow=config->GPIlastLow, + .gpio.GPICounter=config->GPICounter, .gpio.GPOlastOut=config->GPOlastOut }; config->callback(&result); @@ -58,11 +59,9 @@ static void publish(hw_gpio_config_t* config) { esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { gpio_set_level(config->output_pin, value); - if(delay) { - ets_delay_us(delay); - gpio_set_level(config->output_pin, !value); - } - config->GPOlastOut=time(NULL); + config->GPOtriggerLength=delay; + config->GPOlastval=value; + config->GPOlastOut=esp_log_timestamp(); publish(config); return ESP_OK; } @@ -74,7 +73,7 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) gpio_event_t hw_gpio_evt = { .gpio_num = config->input_pin, .gpio_val = gpio_get_level(config->input_pin), - .timestamp = system_get_time(), + .timestamp = esp_log_timestamp(), .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); @@ -82,22 +81,27 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) static void hw_gpio_task(hw_gpio_config_t* config) { gpio_event_t hw_gpio_evt; -// send_trigger(config); while(1) { if(config->enabled) { - if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 100)) { - ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); + if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 10)) { +// ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); if (config->callback) { if(hw_gpio_evt.gpio_val) { - config->GPIlastHigh=time(NULL); + config->GPIlastHigh=esp_log_timestamp(); + config->GPICounter++; } else { - config->GPIlastLow=time(NULL); + config->GPIlastLow=esp_log_timestamp(); } publish(config); } } +// if(config->sensor_idx==5) +// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, esp_log_timestamp(), config->GPOlastOut, config->GPOtriggerLength); + if(config->GPOtriggerLength && (esp_log_timestamp()-config->GPOlastOut) >= config->GPOtriggerLength) { + gpio_set_level(config->output_pin, !config->GPOlastval); + config->GPOtriggerLength=0; + } } - if (config->interval > 0) { delay(config->interval); } else { @@ -129,7 +133,6 @@ esp_err_t hw_gpio_init(hw_gpio_config_t* config) { gpio_set_direction(config->output_pin, GPIO_MODE_OUTPUT); gpio_set_level(config->output_pin, 0); - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); ESP_LOGD(TAG, "init output pin: %d input pin: %d", config->output_pin, config->input_pin); gpio_isr_handler_add(config->input_pin, hw_gpio_isr_handler, config); @@ -142,15 +145,35 @@ esp_err_t hw_gpio_set_hardware_config(hw_gpio_config_t* config, uint8_t sensor_i config->sensor_idx = sensor_idx; switch(sensor_idx) { case 5: -#if CONFIG_OAP_GPIO_0_ENABLED +#ifdef CONFIG_OAP_GPIO_0_ENABLED config->output_pin = CONFIG_OAP_GPIO_OUTPUT0_PIN; config->input_pin = CONFIG_OAP_GPIO_INPUT0_PIN; +#else + return ESP_FAIL; #endif break; case 6: -#if CONFIG_OAP_GPIO_1_ENABLED +#ifdef CONFIG_OAP_GPIO_1_ENABLED config->output_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; - config->input_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT1_PIN; +#else + return ESP_FAIL; +#endif + break; + case 7: +#ifdef CONFIG_OAP_GPIO_2_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT2_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT2_PIN; +#else + return ESP_FAIL; +#endif + break; + case 8: +#ifdef CONFIG_OAP_GPIO_3_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT3_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT3_PIN; +#else + return ESP_FAIL; #endif break; } diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index eef7c38..02590da 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -26,6 +26,8 @@ #include "oap_common.h" #include "oap_data_env.h" +#define HW_GPIO_DEVICES_MAX 4 + typedef void(*env_callback)(env_data_t*); typedef struct { @@ -36,14 +38,16 @@ typedef struct { uint8_t output_pin; uint8_t input_pin; QueueHandle_t gpio_evt_queue; - time_t GPIlastLow; - time_t GPIlastHigh; - time_t GPOlastOut; + uint32_t GPIlastLow; + uint32_t GPIlastHigh; + uint32_t GPOlastOut; + int32_t GPICounter; + uint32_t GPOtriggerLength; + uint8_t GPOlastval; } hw_gpio_config_t; -/** - * pm samples data is send to the queue. - */ +extern hw_gpio_config_t hw_gpio_cfg[]; + esp_err_t hw_gpio_init(hw_gpio_config_t* config); /** diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index 2fb144b..e51b7e0 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -145,7 +145,6 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { gpio_set_direction(config->trigger_pin, GPIO_MODE_OUTPUT); gpio_set_level(config->trigger_pin, 0); - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); config->state = IDLE; ESP_LOGD(TAG, "init Trigger: %d Echo: %d", config->trigger_pin, config->echo_pin); gpio_isr_handler_add(config->echo_pin, hcsr04_isr_handler, config); @@ -160,15 +159,19 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx config->sensor_idx = sensor_idx; switch(sensor_idx) { case 3: -#if CONFIG_OAP_HCSR04_0_ENABLED +#ifdef CONFIG_OAP_HCSR04_0_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0_PIN; config->echo_pin = CONFIG_OAP_HCSR04_ECHO0_PIN; +#else + return ESP_FAIL; #endif break; case 4: -#if CONFIG_OAP_HCSR04_1_ENABLED +#ifdef CONFIG_OAP_HCSR04_1_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1_PIN; config->echo_pin = CONFIG_OAP_HCSR04_ECHO1_PIN; +#else + return ESP_FAIL; #endif break; } diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h index 64c032d..43f0312 100644 --- a/components/oap-hw-hc-sr04/include/hcsr04.h +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -26,6 +26,8 @@ #include "oap_common.h" #include "oap_data_env.h" +#define HW_HCSR04_DEVICES_MAX 2 + typedef void(*env_callback)(env_data_t*); typedef enum { diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig index 235d2fe..4685710 100644 --- a/components/oap-hw-mhz19/Kconfig +++ b/components/oap-hw-mhz19/Kconfig @@ -27,18 +27,4 @@ config OAP_MH_UART_TXD_PIN help GPIO pin connected to sensor TX line. -config OAP_MH_UART_RTS_PIN - int "RTS gpio" - depends on OAP_MH_ENABLED - default 18 - help - Any gpio pin (no need to connect this line) - -config OAP_MH_UART_CTS_PIN - int "CTS gpio" - depends on OAP_MH_ENABLED - default 19 - help - Any gpio pin (no need to connect this line) - endmenu diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h index 5c2b77b..041f1f9 100644 --- a/components/oap-hw-mhz19/include/mhz19.h +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -27,6 +27,8 @@ #include "oap_data_env.h" #include "driver/uart.h" +#define HW_MHZ19_DEVICES_MAX 1 + typedef void(*env_callback)(env_data_t*); typedef struct { @@ -38,14 +40,11 @@ typedef struct { uart_port_t uart_num; uint8_t uart_txd_pin; uint8_t uart_rxd_pin; - uint8_t uart_rts_pin; - uint8_t uart_cts_pin; sma_data_t sma; } mhz19_config_t; -/** - * pm samples data is send to the queue. - */ +extern mhz19_config_t mhz19_cfg[]; + esp_err_t mhz19_init(mhz19_config_t* config); /** @@ -54,6 +53,8 @@ esp_err_t mhz19_init(mhz19_config_t* config); esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled); +esp_err_t mhz19_calibrate(mhz19_config_t* config); + /** * fill config based on hardware configuration */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index ab8d13a..c824cb9 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -52,7 +52,7 @@ esp_err_t mhz19_init_uart(mhz19_config_t* config) { return ret; } - if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin)) != ESP_OK) { + if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)) != ESP_OK) { return ret; } //Install UART driver( We don't need an event queue here) @@ -172,15 +172,17 @@ esp_err_t mhz19_init(mhz19_config_t* config) { } #define SMA_SIZE 60 esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { +#ifdef CONFIG_OAP_MH_ENABLED config->sensor_idx = sensor_idx; config->uart_num = CONFIG_OAP_MH_UART_NUM; config->uart_txd_pin = CONFIG_OAP_MH_UART_TXD_PIN; config->uart_rxd_pin = CONFIG_OAP_MH_UART_RXD_PIN; - config->uart_rts_pin = CONFIG_OAP_MH_UART_RTS_PIN; - config->uart_cts_pin = CONFIG_OAP_MH_UART_CTS_PIN; memset(&config->sma, 0, sizeof(sma_data_t)); config->sma.data = (double *)malloc(SMA_SIZE*sizeof(double)); memset((void*)config->sma.data, 0, SMA_SIZE*sizeof(double)); config->sma.size=(size_t)SMA_SIZE; return ESP_OK; +#else + return ESP_FAIL; +#endif } diff --git a/components/oap-hw-pmsx003/Kconfig b/components/oap-hw-pmsx003/Kconfig index 9d561e7..8be2abd 100644 --- a/components/oap-hw-pmsx003/Kconfig +++ b/components/oap-hw-pmsx003/Kconfig @@ -34,30 +34,9 @@ config OAP_PM_UART_TXD_PIN help Any gpio pin (no need to connect this line) -config OAP_PM_UART_RTS_PIN - int "RTS gpio" - depends on OAP_PM_UART_ENABLE - default 18 - help - Any gpio pin (no need to connect this line) - -config OAP_PM_UART_CTS_PIN - int "CTS gpio" - depends on OAP_PM_UART_ENABLE - default 19 - help - Any gpio pin (no need to connect this line) - config OAP_PM_UART_AUX_ENABLE bool "PM1 enable" - default y - help - todo - -config OAP_PM_ENABLED_AUX - int "enable secondary PM sensor" - depends on OAP_PM_UART_AUX_ENABLE - default 0 + default n help todo @@ -89,18 +68,4 @@ config OAP_PM_UART_TXD_PIN_AUX help Any gpio pin (no need to connect this line) -config OAP_PM_UART_RTS_PIN_AUX - int "AUX RTS gpio" - depends on OAP_PM_UART_AUX_ENABLE - default 18 - help - Any gpio pin (no need to connect this line) - -config OAP_PM_UART_CTS_PIN_AUX - int "AUX CTS gpio" - depends on OAP_PM_UART_AUX_ENABLE - default 19 - help - Any gpio pin (no need to connect this line) - endmenu \ No newline at end of file diff --git a/components/oap-hw-pmsx003/include/pmsx003.h b/components/oap-hw-pmsx003/include/pmsx003.h index 68d1b47..cf98ae0 100644 --- a/components/oap-hw-pmsx003/include/pmsx003.h +++ b/components/oap-hw-pmsx003/include/pmsx003.h @@ -36,8 +36,6 @@ typedef struct { uart_port_t uart_num; uint8_t uart_txd_pin; uint8_t uart_rxd_pin; - uint8_t uart_rts_pin; - uint8_t uart_cts_pin; } pmsx003_config_t; /** diff --git a/components/oap-hw-pmsx003/pmsx003.c b/components/oap-hw-pmsx003/pmsx003.c index 2c1d5bc..b229261 100644 --- a/components/oap-hw-pmsx003/pmsx003.c +++ b/components/oap-hw-pmsx003/pmsx003.c @@ -53,15 +53,20 @@ esp_err_t pms_init_uart(pmsx003_config_t* config) { }; esp_err_t ret; if ((ret = uart_param_config(config->uart_num, &uart_config)) != ESP_OK) { + ESP_LOGE(TAG,"uart_param_config: %d", ret); return ret; } - if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin)) != ESP_OK) { + if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)) != ESP_OK) { + ESP_LOGE(TAG,"uart_set_pin: %d", ret); return ret; } //Install UART driver( We don't need an event queue here) ret = uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + if(ret != ESP_OK) { + ESP_LOGE(TAG,"uart_driver_install: %d", ret); + } return ret; } @@ -109,8 +114,8 @@ esp_err_t pmsx003_enable(pmsx003_config_t* config, uint8_t enabled) { ESP_LOGI(TAG,"enable(%d)",enabled); config->enabled = enabled; set_gpio(config->set_pin, enabled); - //if (config->heater_enabled) set_gpio(config->heater_pin, enabled); - //if (config->fan_enabled) set_gpio(config->fan_pin, enabled); +// if (config->heater_enabled) set_gpio(config->heater_pin, enabled); +// if (config->fan_enabled) set_gpio(config->fan_pin, enabled); return ESP_OK; //todo } @@ -129,23 +134,27 @@ esp_err_t pmsx003_init(pmsx003_config_t* config) { esp_err_t pmsx003_set_hardware_config(pmsx003_config_t* config, uint8_t sensor_idx) { if (sensor_idx == 0) { +#ifdef CONFIG_OAP_PM_UART_ENABLE config->sensor_idx = 0; config->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; config->uart_num = CONFIG_OAP_PM_UART_NUM; config->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN; config->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN; - config->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN; - config->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN; return ESP_OK; - } else if (sensor_idx == 1 && CONFIG_OAP_PM_ENABLED_AUX) { +#else + return ESP_FAIL; +#endif + } else if (sensor_idx == 1) { +#ifdef CONFIG_OAP_PM_UART_AUX_ENABLE config->sensor_idx = 1; config->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN_AUX; config->uart_num = CONFIG_OAP_PM_UART_NUM_AUX; config->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN_AUX; config->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN_AUX; - config->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN_AUX; - config->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN_AUX; return ESP_OK; +#else + return ESP_FAIL; +#endif } else { return ESP_FAIL; } diff --git a/components/oap-meter/include/pm_meter.h b/components/oap-meter/include/pm_meter.h index b1625b0..9afd0a2 100644 --- a/components/oap-meter/include/pm_meter.h +++ b/components/oap-meter/include/pm_meter.h @@ -75,6 +75,6 @@ typedef struct { pm_meter_stop_f stop; } pm_meter_t; - +extern pm_data_pair_t pm_data_array; #endif /* MAIN_MEAS_H_ */ diff --git a/components/oap-ota/Kconfig b/components/oap-ota/Kconfig index 008e728..ab0ec74 100644 --- a/components/oap-ota/Kconfig +++ b/components/oap-ota/Kconfig @@ -1,8 +1,8 @@ menu "OAP OTA updates" config OAP_OTA_ENABLED - int "enable OTA updates" - default 1 + bool "enable OTA updates" + default y help enable automatic over-the-air updates diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 1574773..0189660 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -33,9 +33,6 @@ extern const uint8_t index_html_start[] asm("_binary_index_html_start"); extern const uint8_t index_html_end[] asm("_binary_index_html_end"); -extern pm_data_pair_t pm_data_array; -extern env_data_record_t last_env_data[3]; - inline int ishex(int x) { return (x >= '0' && x <= '9') || (x >= 'a' && x <= 'f') || @@ -67,21 +64,30 @@ static int parse_query(char *str, char *key, char *val, size_t szval) { char *ptr1; char *ptr2; - ptr1 = strtok(str, delimiter1); - ESP_LOGI(tag, "parse_query: str:%s key:%s", str, key); + char *saveptr1; + char *saveptr2; + ptr1 = strtok_r(str, delimiter1, &saveptr1); +// ESP_LOGD(tag, "-->parse_query: str:%s key:%s ptr1:%s", str, key, ptr1); while(ptr1 != NULL) { - ptr2 = strtok(ptr1, delimiter2); + ptr2 = strtok_r(ptr1, delimiter2, &saveptr2); + if(ptr1 && ptr2) { +// ESP_LOGD(tag, "ptr1: %s ptr2: %s", ptr1, ptr2); + } while(ptr2 != NULL) { char *tmp=ptr2; - ptr2=strtok(NULL, delimiter2); + ptr2=strtok_r(NULL, delimiter2, &saveptr2); + if(ptr2) { +// ESP_LOGD(tag, "ptr2: %s", ptr2); + } if(!strcmp(tmp, key)) { +// ESP_LOGD(tag, "parse_query: %s == %s", tmp, key); memset(val, 0, szval); decode(ptr2, val); - ESP_LOGI(tag, "parse_query: val:%s", val); +// ESP_LOGD(tag, "parse_query: val:%s", val); return 1; } } - ptr1 = strtok(NULL, delimiter1); + ptr1 = strtok_r(NULL, delimiter1, &saveptr1); } return 0; } @@ -90,6 +96,7 @@ static int parse_query_int(char *query, char *key, int *val) { char valstr[32]; char *str = strdup(query); int ret=parse_query(str, key, valstr, sizeof(valstr)); + ESP_LOGI(tag, "parse_query_int: %s %s -> %s", str, key, valstr); if(ret) { *val = atoi(valstr); } else { @@ -203,9 +210,10 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me #ifdef CONFIG_OAP_GPIO_0_ENABLED if(last_env_data[5].timestamp) { cJSON *envobj5 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "env6", envobj5); + cJSON_AddItemToObject(data, "env5", envobj5); cJSON_AddItemToObject(envobj5, "GPIlastLow", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastLow)); cJSON_AddItemToObject(envobj5, "GPIlastHigh", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj5, "GPICounter", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj5, "GPOlastOut", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastOut)); cJSON_AddItemToObject(envobj5, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[5].timestamp)); } @@ -213,13 +221,37 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me #ifdef CONFIG_OAP_GPIO_1_ENABLED if(last_env_data[6].timestamp) { cJSON *envobj6 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "env7", envobj6); + cJSON_AddItemToObject(data, "env6", envobj6); cJSON_AddItemToObject(envobj6, "GPIlastLow", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj6, "GPICounter", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj6, "GPIlastHigh", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj6, "GPOlastOut", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastOut)); cJSON_AddItemToObject(envobj6, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[6].timestamp)); } #endif + #ifdef CONFIG_OAP_GPIO_2_ENABLED + if(last_env_data[7].timestamp) { + cJSON *envobj7 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env7", envobj7); + cJSON_AddItemToObject(envobj7, "GPIlastLow", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj7, "GPIlastHigh", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj7, "GPICounter", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPICounter)); + cJSON_AddItemToObject(envobj7, "GPOlastOut", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj7, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[7].timestamp)); + } + #endif + #ifdef CONFIG_OAP_GPIO_3_ENABLED + if(last_env_data[8].timestamp) { + cJSON *envobj8 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env8", envobj8); + cJSON_AddItemToObject(envobj8, "GPIlastLow", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj8, "GPIlastHigh", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj8, "GPICounter", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPICounter)); + cJSON_AddItemToObject(envobj8, "GPOlastOut", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj8, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[8].timestamp)); + } + #endif + #ifdef CONFIG_OAP_PM_UART_ENABLE if(pm_data_array.timestamp) { cJSON *pmobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "pm0", pmobj0); @@ -227,14 +259,15 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); cJSON_AddItemToObject(pmobj0, "timestamp", cJSON_CreateNumber(sysTime - pm_data_array.timestamp)); - if(CONFIG_OAP_PM_ENABLED_AUX) { - cJSON *pmobj1 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "pm1", pmobj1); - cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); - cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); - cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); - } + #ifdef CONFIG_OAP_PM_UART_AUX_ENABLE + cJSON *pmobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm1", pmobj1); + cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); + cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); + cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + #endif } + #endif char* json = cJSON_Print(root); mg_send(nc, json, strlen(json)); free(json); @@ -267,10 +300,6 @@ static void handler_set_config(struct mg_connection *nc, struct http_message *me * GET /set - Set the connection info (REST request). * POST /ssidSelected - Set the connection info (HTML FORM). */ -extern mhz19_config_t mhz19_cfg; -extern hw_gpio_config_t hw_gpio_cfg[2]; - -esp_err_t mhz19_calibrate(mhz19_config_t* config); void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { ESP_LOGV(tag, "- Event: %d", ev); @@ -313,7 +342,7 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { } } if(strcmp(uri, "/calibrate") == 0) { - mhz19_calibrate(&mhz19_cfg); + mhz19_calibrate(&mhz19_cfg[0]); mg_send(nc,"ok", 2); handled = 1; } @@ -324,7 +353,7 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { parse_query_int(query_string, "delay", &delay); parse_query_int(query_string, "value", &value); parse_query_int(query_string, "gpio", &gpio); - if(gpio == 0 || gpio ==1) { + if(gpio >= 0 && gpio < HW_GPIO_DEVICES_MAX) { hw_gpio_send_trigger(&hw_gpio_cfg[gpio], value, delay); } mg_send(nc,"ok", 2); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index fae6d64..bf8112e 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -148,6 +148,30 @@

    OpenAirProject Sensor Measurement + + + + + + + + + + + + + + + + + + + + + + + + @@ -431,10 +455,16 @@

    OpenAirProject Sensorsensor_idx, env_data->hcsr04.distance);break; case sensor_gpio: - ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPOlastOut);break; + ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPICounter: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPICounter, (int)env_data->gpio.GPOlastOut);break; } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); @@ -256,8 +259,8 @@ static void env_sensors_init() { memset(&last_env_data, 0, sizeof(env_data_record_t)*2); memset(bmx280_config, 0, sizeof(bmx280_config_t)*2); envSemaphore = xSemaphoreCreateRecursiveMutex(); - - if (bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { +#ifdef CONFIG_OAP_BMX280_ENABLED + if (oap_sensor_config.bmx280_enabled && bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { bmx280_config[0].interval = 5000; bmx280_config[0].callback = &env_sensor_callback; bmx280_config[0].altitude = oap_sensor_config.altitude; @@ -268,8 +271,9 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 0); } } - - if (bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { +#endif +#ifdef CONFIG_OAP_BMX280_ENABLED_AUX + if (oap_sensor_config.bmx280_enabled && bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { bmx280_config[1].interval = 5000; bmx280_config[1].callback = &env_sensor_callback; bmx280_config[1].altitude = oap_sensor_config.altitude; @@ -280,44 +284,61 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } -#if CONFIG_OAP_MH_ENABLED - if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { - mhz19_cfg.interval = 5000; - mhz19_cfg.callback = &env_sensor_callback; - mhz19_init(&mhz19_cfg); - mhz19_enable(&mhz19_cfg, 1); +#endif +#ifdef CONFIG_OAP_MH_ENABLED + if (mhz19_set_hardware_config(&mhz19_cfg[0], 2) == ESP_OK) { + mhz19_cfg[0].interval = 5000; + mhz19_cfg[0].callback = &env_sensor_callback; + mhz19_init(&mhz19_cfg[0]); + mhz19_enable(&mhz19_cfg[0], oap_sensor_config.mhz19_enabled); } #endif -#if CONFIG_OAP_HCSR04_0_ENABLED +#ifdef CONFIG_OAP_HCSR04_0_ENABLED if(hcsr04_set_hardware_config(&hcsr04_cfg[0], 3) == ESP_OK) { hcsr04_cfg[0].interval = 1000; hcsr04_cfg[0].callback = &env_sensor_callback; hcsr04_init(&hcsr04_cfg[0]); - hcsr04_enable(&hcsr04_cfg[0], 1); + hcsr04_enable(&hcsr04_cfg[0], oap_sensor_config.hcsr04_enabled); } #endif -#if CONFIG_OAP_HCSR04_1_ENABLED +#ifdef CONFIG_OAP_HCSR04_1_ENABLED if(hcsr04_set_hardware_config(&hcsr04_cfg[1], 4) == ESP_OK) { - hcsr04_cfg[1].interval = 1000; + hcsr04_cfg[1].interval = 100; hcsr04_cfg[1].callback = &env_sensor_callback; hcsr04_init(&hcsr04_cfg[1]); - hcsr04_enable(&hcsr04_cfg[1], 1); + hcsr04_enable(&hcsr04_cfg[1], oap_sensor_config.hcsr04_enabled); } #endif -#if CONFIG_OAP_GPIO_0_ENABLED +#ifdef CONFIG_OAP_GPIO_0_ENABLED if(hw_gpio_set_hardware_config(&hw_gpio_cfg[0], 5) == ESP_OK) { - hw_gpio_cfg[0].interval = 1000; + hw_gpio_cfg[0].interval = 100; hw_gpio_cfg[0].callback = &env_sensor_callback; hw_gpio_init(&hw_gpio_cfg[0]); - hw_gpio_enable(&hw_gpio_cfg[0], 1); + hw_gpio_enable(&hw_gpio_cfg[0], oap_sensor_config.gpio_enabled); } #endif -#if CONFIG_OAP_GPIO_1_ENABLED +#ifdef CONFIG_OAP_GPIO_1_ENABLED if(hw_gpio_set_hardware_config(&hw_gpio_cfg[1], 6) == ESP_OK) { - hw_gpio_cfg[1].interval = 1000; + hw_gpio_cfg[1].interval = 100; hw_gpio_cfg[1].callback = &env_sensor_callback; hw_gpio_init(&hw_gpio_cfg[1]); - hw_gpio_enable(&hw_gpio_cfg[1], 1); + hw_gpio_enable(&hw_gpio_cfg[1], oap_sensor_config.gpio_enabled); + } +#endif +#ifdef CONFIG_OAP_GPIO_2_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[2], 7) == ESP_OK) { + hw_gpio_cfg[2].interval = 100; + hw_gpio_cfg[2].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[2]); + hw_gpio_enable(&hw_gpio_cfg[2], oap_sensor_config.gpio_enabled); + } +#endif +#ifdef CONFIG_OAP_GPIO_3_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[3], 8) == ESP_OK) { + hw_gpio_cfg[3].interval = 100; + hw_gpio_cfg[3].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[3]); + hw_gpio_enable(&hw_gpio_cfg[3], oap_sensor_config.gpio_enabled); } #endif } @@ -349,7 +370,7 @@ static void publish_loop() { log_task_stack(TAG); last_published = sysTime; float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); -#if CONFIG_OAP_RGB_LED +#ifdef CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); ledc_set_color(aqi,(1-aqi), 0); #endif @@ -364,6 +385,10 @@ static void publish_loop() { .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, .distance1 = sysTime - last_env_data[3].timestamp < 60 ? &last_env_data[3].env_data : NULL, .distance2 = sysTime - last_env_data[4].timestamp < 60 ? &last_env_data[4].env_data : NULL, + .gpio1 = sysTime - last_env_data[5].timestamp < 60 ? &last_env_data[5].env_data : NULL, + .gpio2 = sysTime - last_env_data[6].timestamp < 60 ? &last_env_data[6].env_data : NULL, + .gpio3 = sysTime - last_env_data[7].timestamp < 60 ? &last_env_data[7].env_data : NULL, + .gpio4 = sysTime - last_env_data[8].timestamp < 60 ? &last_env_data[8].env_data : NULL, .local_time = localTime }; @@ -388,6 +413,12 @@ static oap_sensor_config_t sensor_config_from_json(cJSON* sconfig) { if ((field = cJSON_GetObjectItem(sconfig, "altitude"))) sensor_config.altitude = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "tempOffset"))) sensor_config.tempOffset = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "humidityOffset"))) sensor_config.humidityOffset = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "mhz19_enabled"))) sensor_config.mhz19_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "hcsr04_enabled"))) sensor_config.hcsr04_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "ssd1306_enabled"))) sensor_config.ssd1306_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "gpio_enabled"))) sensor_config.gpio_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "pms_enabled"))) sensor_config.pms_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "bmx280_enabled"))) sensor_config.bmx280_enabled = field->valueint; return sensor_config; } @@ -467,7 +498,7 @@ void app_main() { //a sec to start flashing delay(1000); ESP_LOGI(TAG,"starting app... firmware %s", oap_version_str()); - + gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); //130kb is a nice cap to test against alloc fails //reduce_heap_size_to(130000); storage_init(); @@ -481,14 +512,17 @@ void app_main() { start_ota_task(storage_get_config("ota")); ledc_init(); -#if CONFIG_OAP_PM_UART_ENABLE || CONFIG_OAP_PM_UART_AUX_ENABLE +#if defined CONFIG_OAP_PM_UART_ENABLE || defined CONFIG_OAP_PM_UART_AUX_ENABLE pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); - pm_meter_init(); + if(oap_sensor_config.pms_enabled) { + pm_meter_init(); + } #endif env_sensors_init(); -#if CONFIG_OAP_SDD1306_ENABLED - //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) - xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); +#ifdef CONFIG_OAP_SDD1306_ENABLED + if(oap_sensor_config.ssd1306_enabled) { + xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); + } #endif publishers_init(); From 1fb342f28cd6be677242e3a222db760e032252dd Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 29 Apr 2018 22:43:05 +0200 Subject: [PATCH 168/200] add GPIO support, bump version to 1.4.0 --- components/oap-common/include/oap_data.h | 14 ++- components/oap-common/include/oap_data_env.h | 1 + components/oap-common/include/oap_version.h | 4 +- components/oap-hw-bmx280/Kconfig | 12 ++- components/oap-hw-bmx280/bmx280.c | 10 +- components/oap-hw-bmx280/i2c_bme280.c | 2 +- components/oap-hw-bmx280/include/bmx280.h | 2 + components/oap-hw-ext/ctrl_btn.c | 5 +- components/oap-hw-ext/rgb_led.c | 44 ++++---- components/oap-hw-gpio/Kconfig | 48 ++++++++- components/oap-hw-gpio/hw_gpio.c | 55 +++++++--- components/oap-hw-gpio/include/hw_gpio.h | 16 +-- components/oap-hw-hc-sr04/hcsr04.c | 9 +- components/oap-hw-hc-sr04/include/hcsr04.h | 2 + components/oap-hw-mhz19/Kconfig | 14 --- components/oap-hw-mhz19/include/mhz19.h | 11 +- components/oap-hw-mhz19/mhz19.c | 8 +- components/oap-hw-pmsx003/Kconfig | 37 +------ components/oap-hw-pmsx003/include/pmsx003.h | 2 - components/oap-hw-pmsx003/pmsx003.c | 25 +++-- components/oap-meter/include/pm_meter.h | 2 +- components/oap-ota/Kconfig | 4 +- components/oap-wifi/cpanel.c | 77 +++++++++----- components/oap-wifi/index.html | 34 ++++++- main/Kconfig.projbuild | 4 +- main/main.c | 102 ++++++++++++------- 26 files changed, 348 insertions(+), 196 deletions(-) diff --git a/components/oap-common/include/oap_data.h b/components/oap-common/include/oap_data.h index d8ebaba..bb27876 100644 --- a/components/oap-common/include/oap_data.h +++ b/components/oap-common/include/oap_data.h @@ -26,7 +26,6 @@ #include "oap_data_pm.h" #include "oap_data_env.h" - // FIXME this stuff has to be generalized typedef struct { pm_data_t* pm; @@ -36,7 +35,10 @@ typedef struct { env_data_t* co2; env_data_t* distance1; env_data_t* distance2; - env_data_t* gpio; + env_data_t* gpio1; + env_data_t* gpio2; + env_data_t* gpio3; + env_data_t* gpio4; long int local_time; } oap_measurement_t; @@ -54,6 +56,12 @@ typedef struct { int altitude; int tempOffset; int humidityOffset; + int pms_enabled; + int hcsr04_enabled; + int bmx280_enabled; + int gpio_enabled; + int ssd1306_enabled; + int mhz19_enabled; } oap_sensor_config_t; typedef struct { @@ -61,4 +69,6 @@ typedef struct { long timestamp; } env_data_record_t; +extern env_data_record_t last_env_data[]; + #endif /* COMPONENTS_OAP_COMMON_INCLUDE_OAP_DATA_H_ */ diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index 03b8a06..48fd9d1 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -53,6 +53,7 @@ typedef struct { int val; time_t GPIlastLow; time_t GPIlastHigh; + int GPICounter; time_t GPOlastOut; } gpio; }; diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 9623d86..cf5ddbe 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -37,8 +37,8 @@ #include "esp_err.h" #define OAP_VER_MAJOR 1 -#define OAP_VER_MINOR 3 -#define OAP_VER_PATCH 12 +#define OAP_VER_MINOR 4 +#define OAP_VER_PATCH 0 typedef struct { uint8_t major; diff --git a/components/oap-hw-bmx280/Kconfig b/components/oap-hw-bmx280/Kconfig index b9aeb0c..5bd894b 100644 --- a/components/oap-hw-bmx280/Kconfig +++ b/components/oap-hw-bmx280/Kconfig @@ -1,13 +1,14 @@ menu "OAP BMx280 Sensor" config OAP_BMX280_ENABLED - int "enable bmx280 sensor" - default 1 + bool "enable bmx280 sensor" + default y help todo config OAP_BMX280_ADDRESS hex "i2c address" + depends on OAP_BMX280_ENABLED default 0x76 help Default address for bmx280 sensor is 0x76, it can be set to 0x77 by pulling up SDO pin. @@ -15,12 +16,14 @@ config OAP_BMX280_ADDRESS config OAP_BMX280_I2C_NUM int "i2c interface number" + depends on OAP_BMX280_ENABLED default 0 help todo config OAP_BMX280_I2C_SDA_PIN int "gpio SDA pin" + depends on OAP_BMX280_ENABLED default 25 help be careful with choosing gpio. i2c pins must be R/W. @@ -28,13 +31,14 @@ config OAP_BMX280_I2C_SDA_PIN config OAP_BMX280_I2C_SCL_PIN int "SCL pin" + depends on OAP_BMX280_ENABLED default 26 help see help for SDA pin config OAP_BMX280_ENABLED_AUX - int "enable internal bmx280 sensor" - default 0 + bool "enable internal bmx280 sensor" + default n help todo diff --git a/components/oap-hw-bmx280/bmx280.c b/components/oap-hw-bmx280/bmx280.c index 623dbe7..b528fb0 100644 --- a/components/oap-hw-bmx280/bmx280.c +++ b/components/oap-hw-bmx280/bmx280.c @@ -150,23 +150,25 @@ esp_err_t bmx280_init(bmx280_config_t* bmx280_config) { esp_err_t bmx280_set_hardware_config(bmx280_config_t* bmx280_config, uint8_t sensor_idx) { switch (sensor_idx) { case 0: - if (!CONFIG_OAP_BMX280_ENABLED) return ESP_FAIL; -#if CONFIG_OAP_BMX280_ENABLED +#ifdef CONFIG_OAP_BMX280_ENABLED bmx280_config->sensor_idx = 0; bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM; bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS; bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN; bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN; +#else + return ESP_FAIL; #endif return ESP_OK; case 1: - if (!CONFIG_OAP_BMX280_ENABLED_AUX) return ESP_FAIL; -#if CONFIG_OAP_BMX280_ENABLED_AUX +#ifdef CONFIG_OAP_BMX280_ENABLED_AUX bmx280_config->sensor_idx = 1; bmx280_config->i2c_num = CONFIG_OAP_BMX280_I2C_NUM_AUX; bmx280_config->device_addr = CONFIG_OAP_BMX280_ADDRESS_AUX; bmx280_config->sda_pin = CONFIG_OAP_BMX280_I2C_SDA_PIN_AUX; bmx280_config->scl_pin = CONFIG_OAP_BMX280_I2C_SCL_PIN_AUX; +#else + return ESP_FAIL; #endif return ESP_OK; default: diff --git a/components/oap-hw-bmx280/i2c_bme280.c b/components/oap-hw-bmx280/i2c_bme280.c index 7895a30..f3f3293 100755 --- a/components/oap-hw-bmx280/i2c_bme280.c +++ b/components/oap-hw-bmx280/i2c_bme280.c @@ -240,7 +240,7 @@ esp_err_t BME280_verify_chip(bme280_sensor_t* bme280_sensor) { uint8_t chipID = 0; uint8_t attempt = 0; while (read_i2c(&bme280_sensor->i2c_comm, BME280_CHIP_ID_REG, &chipID,1) != ESP_OK && attempt++ < 5) { - ESP_LOGW(TAG, "[%x] failed to read chip id (attempt %d)", bme280_sensor->i2c_comm.device_addr, attempt) + ESP_LOGW(TAG, "[%x] failed to read chip id (attempt %d)", bme280_sensor->i2c_comm.device_addr, attempt); vTaskDelay(20/portTICK_PERIOD_MS); } diff --git a/components/oap-hw-bmx280/include/bmx280.h b/components/oap-hw-bmx280/include/bmx280.h index 5c933cb..8002508 100644 --- a/components/oap-hw-bmx280/include/bmx280.h +++ b/components/oap-hw-bmx280/include/bmx280.h @@ -26,6 +26,8 @@ #include "oap_common.h" #include "oap_data_env.h" +#define HW_BMX280_DEVICES_MAX 2 + typedef void(*env_callback)(env_data_t*); typedef struct bmx280_config_t { diff --git a/components/oap-hw-ext/ctrl_btn.c b/components/oap-hw-ext/ctrl_btn.c index 98e4bb5..68c4df5 100644 --- a/components/oap-hw-ext/ctrl_btn.c +++ b/components/oap-hw-ext/ctrl_btn.c @@ -110,20 +110,19 @@ esp_err_t btn_configure(btn_callback_f callback) { gpio_pad_select_gpio(CONFIG_OAP_BTN_0_PIN); gpio_set_direction(CONFIG_OAP_BTN_0_PIN, GPIO_MODE_INPUT); -#if CONFIG_OAP_BTN_0_ACTIVE_LOW +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLUP_ONLY); #else gpio_set_pull_mode(CONFIG_OAP_BTN_0_PIN, GPIO_PULLDOWN_ONLY); #endif gpio_set_intr_type(CONFIG_OAP_BTN_0_PIN, GPIO_INTR_ANYEDGE); - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); gpio_isr_handler_add(CONFIG_OAP_BTN_0_PIN, gpio_isr_handler, (void*) CONFIG_OAP_BTN_0_PIN); xTaskCreate((TaskFunction_t)gpio_watchdog_task, "gpio_watchdog_task", 1024*2, NULL, DEFAULT_TASK_PRIORITY+2, NULL); return ESP_OK; //TODO handle errors } bool is_ap_mode_pressed() { -#if CONFIG_OAP_BTN_0_ACTIVE_LOW +#ifdef CONFIG_OAP_BTN_0_ACTIVE_LOW return !gpio_get_level(CONFIG_OAP_BTN_0_PIN); #else return gpio_get_level(CONFIG_OAP_BTN_0_PIN); diff --git a/components/oap-hw-ext/rgb_led.c b/components/oap-hw-ext/rgb_led.c index 9d2245c..3e955e2 100644 --- a/components/oap-hw-ext/rgb_led.c +++ b/components/oap-hw-ext/rgb_led.c @@ -70,12 +70,14 @@ void set_color(rgb_color_t color) { esp_err_t res; int duty; for (int c = 0; c < 3; c++) { - duty = calc_duty(color,c); - if ((res = ledc_set_duty(speed_mode, c, duty)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_set_duty(%d,%d,%d) error %d", speed_mode, c, duty, res); - } - if ((res = ledc_update_duty(speed_mode, c)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_update_duty(%d,%d) error %d", speed_mode, c, res); + if(led_gpio[c] != -1) { + duty = calc_duty(color,c); + if ((res = ledc_set_duty(speed_mode, c, duty)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_set_duty(%d,%d,%d) error %d", speed_mode, c, duty, res); + } + if ((res = ledc_update_duty(speed_mode, c)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_update_duty(%d,%d) error %d", speed_mode, c, res); + } } } } @@ -84,12 +86,14 @@ void fade_to_color(rgb_color_t color, int time) { esp_err_t res; int duty; for (int c = 0; c < 3; c++) { - duty = calc_duty(color,c); - if ((res = ledc_set_fade_with_time(speed_mode, c, duty,time)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_set_fade_with_time(%d,%d,%d,%d) error %d", speed_mode, c, duty, time, res); - } - if ((res = ledc_fade_start(speed_mode, c, LEDC_FADE_NO_WAIT)) != ESP_OK) { - ESP_LOGW(TAG, "ledc_fade_start(%d,%d) error %d", c, LEDC_FADE_NO_WAIT, res); + if(led_gpio[c] != -1) { + duty = calc_duty(color,c); + if ((res = ledc_set_fade_with_time(speed_mode, c, duty,time)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_set_fade_with_time(%d,%d,%d,%d) error %d", speed_mode, c, duty, time, res); + } + if ((res = ledc_fade_start(speed_mode, c, LEDC_FADE_NO_WAIT)) != ESP_OK) { + ESP_LOGW(TAG, "ledc_fade_start(%d,%d) error %d", c, LEDC_FADE_NO_WAIT, res); + } } } } @@ -112,11 +116,13 @@ static void setup_ledc() { }; for (int c = 0; c < 3; c++) { - ledc_channel.channel = c; //LEDC_CHANNEL_0 to LEDC_CHANNEL_2 - ledc_channel.gpio_num = led_gpio[c]; - ledc_channel.duty = 0; - gpio_intr_disable(led_gpio[c]); - ledc_channel_config(&ledc_channel); + if(led_gpio[c] != -1) { + ledc_channel.channel = c; //LEDC_CHANNEL_0 to LEDC_CHANNEL_2 + ledc_channel.gpio_num = led_gpio[c]; + ledc_channel.duty = 0; + gpio_intr_disable(led_gpio[c]); + ledc_channel_config(&ledc_channel); + } } //initialize fade service. ledc_fade_func_install(0); @@ -169,7 +175,9 @@ void led_init(int enabled, xQueueHandle _cmd_queue) xTaskCreate(led_cycle, "led_cycle", 1024*2, NULL, DEFAULT_TASK_PRIORITY+1, NULL); } else { for (int c = 0; c < 3; c++) { - if (led_gpio[c] > 0) gpio_set_pull_mode(led_gpio[c], GPIO_PULLDOWN_ONLY); + if (led_gpio[c] != -1) { + gpio_set_pull_mode(led_gpio[c], GPIO_PULLDOWN_ONLY); + } } } } diff --git a/components/oap-hw-gpio/Kconfig b/components/oap-hw-gpio/Kconfig index 90ec7b1..f45ab78 100644 --- a/components/oap-hw-gpio/Kconfig +++ b/components/oap-hw-gpio/Kconfig @@ -2,21 +2,21 @@ menu "OAP Generic GPIO" config OAP_GPIO_0_ENABLED bool "enable GPIO #0" - default y + default n help todo config OAP_GPIO_OUTPUT0_PIN int "GPIO #0 output PIN" depends on OAP_GPIO_0_ENABLED - default 21 + default 5 help todo config OAP_GPIO_INPUT0_PIN int "GPIO #0 input PIN" depends on OAP_GPIO_0_ENABLED - default 36 + default 21 help todo @@ -29,13 +29,53 @@ config OAP_GPIO_1_ENABLED config OAP_GPIO_OUTPUT1_PIN int "GPIO #1 output PIN" depends on OAP_GPIO_1_ENABLED - default 22 + default 12 help todo config OAP_GPIO_INPUT1_PIN int "GPIO #1 input PIN" depends on OAP_GPIO_1_ENABLED + default 22 + help + todo + +config OAP_GPIO_2_ENABLED + bool "enable GPIO #2" + default n + help + todo + +config OAP_GPIO_OUTPUT2_PIN + int "GPIO #2 output PIN" + depends on OAP_GPIO_2_ENABLED + default 18 + help + todo + +config OAP_GPIO_INPUT2_PIN + int "GPIO #2 input PIN" + depends on OAP_GPIO_2_ENABLED + default 36 + help + todo + +config OAP_GPIO_3_ENABLED + bool "enable GPIO #3" + default n + help + todo + +config OAP_GPIO_OUTPUT3_PIN + int "GPIO #3 output PIN" + depends on OAP_GPIO_3_ENABLED + default 19 + help + todo + +config OAP_GPIO_INPUT3_PIN + int "GPIO #3 input PIN" + depends on OAP_GPIO_3_ENABLED default 39 help todo diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 02bfb12..2c75b9f 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -50,6 +50,7 @@ static void publish(hw_gpio_config_t* config) { .sensor_type = sensor_gpio, .gpio.GPIlastHigh=config->GPIlastHigh, .gpio.GPIlastLow=config->GPIlastLow, + .gpio.GPICounter=config->GPICounter, .gpio.GPOlastOut=config->GPOlastOut }; config->callback(&result); @@ -58,11 +59,9 @@ static void publish(hw_gpio_config_t* config) { esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { gpio_set_level(config->output_pin, value); - if(delay) { - ets_delay_us(delay); - gpio_set_level(config->output_pin, !value); - } - config->GPOlastOut=time(NULL); + config->GPOtriggerLength=delay; + config->GPOlastval=value; + config->GPOlastOut=esp_log_timestamp(); publish(config); return ESP_OK; } @@ -74,7 +73,7 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) gpio_event_t hw_gpio_evt = { .gpio_num = config->input_pin, .gpio_val = gpio_get_level(config->input_pin), - .timestamp = system_get_time(), + .timestamp = esp_log_timestamp(), .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); @@ -82,22 +81,27 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) static void hw_gpio_task(hw_gpio_config_t* config) { gpio_event_t hw_gpio_evt; -// send_trigger(config); while(1) { if(config->enabled) { - if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 100)) { - ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); + if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 10)) { +// ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); if (config->callback) { if(hw_gpio_evt.gpio_val) { - config->GPIlastHigh=time(NULL); + config->GPIlastHigh=esp_log_timestamp(); + config->GPICounter++; } else { - config->GPIlastLow=time(NULL); + config->GPIlastLow=esp_log_timestamp(); } publish(config); } } +// if(config->sensor_idx==5) +// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, esp_log_timestamp(), config->GPOlastOut, config->GPOtriggerLength); + if(config->GPOtriggerLength && (esp_log_timestamp()-config->GPOlastOut) >= config->GPOtriggerLength) { + gpio_set_level(config->output_pin, !config->GPOlastval); + config->GPOtriggerLength=0; + } } - if (config->interval > 0) { delay(config->interval); } else { @@ -129,7 +133,6 @@ esp_err_t hw_gpio_init(hw_gpio_config_t* config) { gpio_set_direction(config->output_pin, GPIO_MODE_OUTPUT); gpio_set_level(config->output_pin, 0); - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); ESP_LOGD(TAG, "init output pin: %d input pin: %d", config->output_pin, config->input_pin); gpio_isr_handler_add(config->input_pin, hw_gpio_isr_handler, config); @@ -142,15 +145,35 @@ esp_err_t hw_gpio_set_hardware_config(hw_gpio_config_t* config, uint8_t sensor_i config->sensor_idx = sensor_idx; switch(sensor_idx) { case 5: -#if CONFIG_OAP_GPIO_0_ENABLED +#ifdef CONFIG_OAP_GPIO_0_ENABLED config->output_pin = CONFIG_OAP_GPIO_OUTPUT0_PIN; config->input_pin = CONFIG_OAP_GPIO_INPUT0_PIN; +#else + return ESP_FAIL; #endif break; case 6: -#if CONFIG_OAP_GPIO_1_ENABLED +#ifdef CONFIG_OAP_GPIO_1_ENABLED config->output_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; - config->input_pin = CONFIG_OAP_GPIO_OUTPUT1_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT1_PIN; +#else + return ESP_FAIL; +#endif + break; + case 7: +#ifdef CONFIG_OAP_GPIO_2_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT2_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT2_PIN; +#else + return ESP_FAIL; +#endif + break; + case 8: +#ifdef CONFIG_OAP_GPIO_3_ENABLED + config->output_pin = CONFIG_OAP_GPIO_OUTPUT3_PIN; + config->input_pin = CONFIG_OAP_GPIO_INPUT3_PIN; +#else + return ESP_FAIL; #endif break; } diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index eef7c38..02590da 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -26,6 +26,8 @@ #include "oap_common.h" #include "oap_data_env.h" +#define HW_GPIO_DEVICES_MAX 4 + typedef void(*env_callback)(env_data_t*); typedef struct { @@ -36,14 +38,16 @@ typedef struct { uint8_t output_pin; uint8_t input_pin; QueueHandle_t gpio_evt_queue; - time_t GPIlastLow; - time_t GPIlastHigh; - time_t GPOlastOut; + uint32_t GPIlastLow; + uint32_t GPIlastHigh; + uint32_t GPOlastOut; + int32_t GPICounter; + uint32_t GPOtriggerLength; + uint8_t GPOlastval; } hw_gpio_config_t; -/** - * pm samples data is send to the queue. - */ +extern hw_gpio_config_t hw_gpio_cfg[]; + esp_err_t hw_gpio_init(hw_gpio_config_t* config); /** diff --git a/components/oap-hw-hc-sr04/hcsr04.c b/components/oap-hw-hc-sr04/hcsr04.c index 2fb144b..e51b7e0 100644 --- a/components/oap-hw-hc-sr04/hcsr04.c +++ b/components/oap-hw-hc-sr04/hcsr04.c @@ -145,7 +145,6 @@ esp_err_t hcsr04_init(hcsr04_config_t* config) { gpio_set_direction(config->trigger_pin, GPIO_MODE_OUTPUT); gpio_set_level(config->trigger_pin, 0); - gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); config->state = IDLE; ESP_LOGD(TAG, "init Trigger: %d Echo: %d", config->trigger_pin, config->echo_pin); gpio_isr_handler_add(config->echo_pin, hcsr04_isr_handler, config); @@ -160,15 +159,19 @@ esp_err_t hcsr04_set_hardware_config(hcsr04_config_t* config, uint8_t sensor_idx config->sensor_idx = sensor_idx; switch(sensor_idx) { case 3: -#if CONFIG_OAP_HCSR04_0_ENABLED +#ifdef CONFIG_OAP_HCSR04_0_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER0_PIN; config->echo_pin = CONFIG_OAP_HCSR04_ECHO0_PIN; +#else + return ESP_FAIL; #endif break; case 4: -#if CONFIG_OAP_HCSR04_1_ENABLED +#ifdef CONFIG_OAP_HCSR04_1_ENABLED config->trigger_pin = CONFIG_OAP_HCSR04_TRIGGER1_PIN; config->echo_pin = CONFIG_OAP_HCSR04_ECHO1_PIN; +#else + return ESP_FAIL; #endif break; } diff --git a/components/oap-hw-hc-sr04/include/hcsr04.h b/components/oap-hw-hc-sr04/include/hcsr04.h index 64c032d..43f0312 100644 --- a/components/oap-hw-hc-sr04/include/hcsr04.h +++ b/components/oap-hw-hc-sr04/include/hcsr04.h @@ -26,6 +26,8 @@ #include "oap_common.h" #include "oap_data_env.h" +#define HW_HCSR04_DEVICES_MAX 2 + typedef void(*env_callback)(env_data_t*); typedef enum { diff --git a/components/oap-hw-mhz19/Kconfig b/components/oap-hw-mhz19/Kconfig index 235d2fe..4685710 100644 --- a/components/oap-hw-mhz19/Kconfig +++ b/components/oap-hw-mhz19/Kconfig @@ -27,18 +27,4 @@ config OAP_MH_UART_TXD_PIN help GPIO pin connected to sensor TX line. -config OAP_MH_UART_RTS_PIN - int "RTS gpio" - depends on OAP_MH_ENABLED - default 18 - help - Any gpio pin (no need to connect this line) - -config OAP_MH_UART_CTS_PIN - int "CTS gpio" - depends on OAP_MH_ENABLED - default 19 - help - Any gpio pin (no need to connect this line) - endmenu diff --git a/components/oap-hw-mhz19/include/mhz19.h b/components/oap-hw-mhz19/include/mhz19.h index 5c2b77b..041f1f9 100644 --- a/components/oap-hw-mhz19/include/mhz19.h +++ b/components/oap-hw-mhz19/include/mhz19.h @@ -27,6 +27,8 @@ #include "oap_data_env.h" #include "driver/uart.h" +#define HW_MHZ19_DEVICES_MAX 1 + typedef void(*env_callback)(env_data_t*); typedef struct { @@ -38,14 +40,11 @@ typedef struct { uart_port_t uart_num; uint8_t uart_txd_pin; uint8_t uart_rxd_pin; - uint8_t uart_rts_pin; - uint8_t uart_cts_pin; sma_data_t sma; } mhz19_config_t; -/** - * pm samples data is send to the queue. - */ +extern mhz19_config_t mhz19_cfg[]; + esp_err_t mhz19_init(mhz19_config_t* config); /** @@ -54,6 +53,8 @@ esp_err_t mhz19_init(mhz19_config_t* config); esp_err_t mhz19_enable(mhz19_config_t* config, uint8_t enabled); +esp_err_t mhz19_calibrate(mhz19_config_t* config); + /** * fill config based on hardware configuration */ diff --git a/components/oap-hw-mhz19/mhz19.c b/components/oap-hw-mhz19/mhz19.c index ab8d13a..c824cb9 100644 --- a/components/oap-hw-mhz19/mhz19.c +++ b/components/oap-hw-mhz19/mhz19.c @@ -52,7 +52,7 @@ esp_err_t mhz19_init_uart(mhz19_config_t* config) { return ret; } - if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin)) != ESP_OK) { + if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)) != ESP_OK) { return ret; } //Install UART driver( We don't need an event queue here) @@ -172,15 +172,17 @@ esp_err_t mhz19_init(mhz19_config_t* config) { } #define SMA_SIZE 60 esp_err_t mhz19_set_hardware_config(mhz19_config_t* config, uint8_t sensor_idx) { +#ifdef CONFIG_OAP_MH_ENABLED config->sensor_idx = sensor_idx; config->uart_num = CONFIG_OAP_MH_UART_NUM; config->uart_txd_pin = CONFIG_OAP_MH_UART_TXD_PIN; config->uart_rxd_pin = CONFIG_OAP_MH_UART_RXD_PIN; - config->uart_rts_pin = CONFIG_OAP_MH_UART_RTS_PIN; - config->uart_cts_pin = CONFIG_OAP_MH_UART_CTS_PIN; memset(&config->sma, 0, sizeof(sma_data_t)); config->sma.data = (double *)malloc(SMA_SIZE*sizeof(double)); memset((void*)config->sma.data, 0, SMA_SIZE*sizeof(double)); config->sma.size=(size_t)SMA_SIZE; return ESP_OK; +#else + return ESP_FAIL; +#endif } diff --git a/components/oap-hw-pmsx003/Kconfig b/components/oap-hw-pmsx003/Kconfig index 9d561e7..8be2abd 100644 --- a/components/oap-hw-pmsx003/Kconfig +++ b/components/oap-hw-pmsx003/Kconfig @@ -34,30 +34,9 @@ config OAP_PM_UART_TXD_PIN help Any gpio pin (no need to connect this line) -config OAP_PM_UART_RTS_PIN - int "RTS gpio" - depends on OAP_PM_UART_ENABLE - default 18 - help - Any gpio pin (no need to connect this line) - -config OAP_PM_UART_CTS_PIN - int "CTS gpio" - depends on OAP_PM_UART_ENABLE - default 19 - help - Any gpio pin (no need to connect this line) - config OAP_PM_UART_AUX_ENABLE bool "PM1 enable" - default y - help - todo - -config OAP_PM_ENABLED_AUX - int "enable secondary PM sensor" - depends on OAP_PM_UART_AUX_ENABLE - default 0 + default n help todo @@ -89,18 +68,4 @@ config OAP_PM_UART_TXD_PIN_AUX help Any gpio pin (no need to connect this line) -config OAP_PM_UART_RTS_PIN_AUX - int "AUX RTS gpio" - depends on OAP_PM_UART_AUX_ENABLE - default 18 - help - Any gpio pin (no need to connect this line) - -config OAP_PM_UART_CTS_PIN_AUX - int "AUX CTS gpio" - depends on OAP_PM_UART_AUX_ENABLE - default 19 - help - Any gpio pin (no need to connect this line) - endmenu \ No newline at end of file diff --git a/components/oap-hw-pmsx003/include/pmsx003.h b/components/oap-hw-pmsx003/include/pmsx003.h index 68d1b47..cf98ae0 100644 --- a/components/oap-hw-pmsx003/include/pmsx003.h +++ b/components/oap-hw-pmsx003/include/pmsx003.h @@ -36,8 +36,6 @@ typedef struct { uart_port_t uart_num; uint8_t uart_txd_pin; uint8_t uart_rxd_pin; - uint8_t uart_rts_pin; - uint8_t uart_cts_pin; } pmsx003_config_t; /** diff --git a/components/oap-hw-pmsx003/pmsx003.c b/components/oap-hw-pmsx003/pmsx003.c index 2c1d5bc..b229261 100644 --- a/components/oap-hw-pmsx003/pmsx003.c +++ b/components/oap-hw-pmsx003/pmsx003.c @@ -53,15 +53,20 @@ esp_err_t pms_init_uart(pmsx003_config_t* config) { }; esp_err_t ret; if ((ret = uart_param_config(config->uart_num, &uart_config)) != ESP_OK) { + ESP_LOGE(TAG,"uart_param_config: %d", ret); return ret; } - if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, config->uart_rts_pin, config->uart_cts_pin)) != ESP_OK) { + if ((ret = uart_set_pin(config->uart_num, config->uart_txd_pin, config->uart_rxd_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)) != ESP_OK) { + ESP_LOGE(TAG,"uart_set_pin: %d", ret); return ret; } //Install UART driver( We don't need an event queue here) ret = uart_driver_install(config->uart_num, OAP_PM_UART_BUF_SIZE * 2, 0, 0, NULL,0); + if(ret != ESP_OK) { + ESP_LOGE(TAG,"uart_driver_install: %d", ret); + } return ret; } @@ -109,8 +114,8 @@ esp_err_t pmsx003_enable(pmsx003_config_t* config, uint8_t enabled) { ESP_LOGI(TAG,"enable(%d)",enabled); config->enabled = enabled; set_gpio(config->set_pin, enabled); - //if (config->heater_enabled) set_gpio(config->heater_pin, enabled); - //if (config->fan_enabled) set_gpio(config->fan_pin, enabled); +// if (config->heater_enabled) set_gpio(config->heater_pin, enabled); +// if (config->fan_enabled) set_gpio(config->fan_pin, enabled); return ESP_OK; //todo } @@ -129,23 +134,27 @@ esp_err_t pmsx003_init(pmsx003_config_t* config) { esp_err_t pmsx003_set_hardware_config(pmsx003_config_t* config, uint8_t sensor_idx) { if (sensor_idx == 0) { +#ifdef CONFIG_OAP_PM_UART_ENABLE config->sensor_idx = 0; config->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN; config->uart_num = CONFIG_OAP_PM_UART_NUM; config->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN; config->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN; - config->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN; - config->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN; return ESP_OK; - } else if (sensor_idx == 1 && CONFIG_OAP_PM_ENABLED_AUX) { +#else + return ESP_FAIL; +#endif + } else if (sensor_idx == 1) { +#ifdef CONFIG_OAP_PM_UART_AUX_ENABLE config->sensor_idx = 1; config->set_pin = CONFIG_OAP_PM_SENSOR_CONTROL_PIN_AUX; config->uart_num = CONFIG_OAP_PM_UART_NUM_AUX; config->uart_txd_pin = CONFIG_OAP_PM_UART_TXD_PIN_AUX; config->uart_rxd_pin = CONFIG_OAP_PM_UART_RXD_PIN_AUX; - config->uart_rts_pin = CONFIG_OAP_PM_UART_RTS_PIN_AUX; - config->uart_cts_pin = CONFIG_OAP_PM_UART_CTS_PIN_AUX; return ESP_OK; +#else + return ESP_FAIL; +#endif } else { return ESP_FAIL; } diff --git a/components/oap-meter/include/pm_meter.h b/components/oap-meter/include/pm_meter.h index b1625b0..9afd0a2 100644 --- a/components/oap-meter/include/pm_meter.h +++ b/components/oap-meter/include/pm_meter.h @@ -75,6 +75,6 @@ typedef struct { pm_meter_stop_f stop; } pm_meter_t; - +extern pm_data_pair_t pm_data_array; #endif /* MAIN_MEAS_H_ */ diff --git a/components/oap-ota/Kconfig b/components/oap-ota/Kconfig index 008e728..ab0ec74 100644 --- a/components/oap-ota/Kconfig +++ b/components/oap-ota/Kconfig @@ -1,8 +1,8 @@ menu "OAP OTA updates" config OAP_OTA_ENABLED - int "enable OTA updates" - default 1 + bool "enable OTA updates" + default y help enable automatic over-the-air updates diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 1574773..0189660 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -33,9 +33,6 @@ extern const uint8_t index_html_start[] asm("_binary_index_html_start"); extern const uint8_t index_html_end[] asm("_binary_index_html_end"); -extern pm_data_pair_t pm_data_array; -extern env_data_record_t last_env_data[3]; - inline int ishex(int x) { return (x >= '0' && x <= '9') || (x >= 'a' && x <= 'f') || @@ -67,21 +64,30 @@ static int parse_query(char *str, char *key, char *val, size_t szval) { char *ptr1; char *ptr2; - ptr1 = strtok(str, delimiter1); - ESP_LOGI(tag, "parse_query: str:%s key:%s", str, key); + char *saveptr1; + char *saveptr2; + ptr1 = strtok_r(str, delimiter1, &saveptr1); +// ESP_LOGD(tag, "-->parse_query: str:%s key:%s ptr1:%s", str, key, ptr1); while(ptr1 != NULL) { - ptr2 = strtok(ptr1, delimiter2); + ptr2 = strtok_r(ptr1, delimiter2, &saveptr2); + if(ptr1 && ptr2) { +// ESP_LOGD(tag, "ptr1: %s ptr2: %s", ptr1, ptr2); + } while(ptr2 != NULL) { char *tmp=ptr2; - ptr2=strtok(NULL, delimiter2); + ptr2=strtok_r(NULL, delimiter2, &saveptr2); + if(ptr2) { +// ESP_LOGD(tag, "ptr2: %s", ptr2); + } if(!strcmp(tmp, key)) { +// ESP_LOGD(tag, "parse_query: %s == %s", tmp, key); memset(val, 0, szval); decode(ptr2, val); - ESP_LOGI(tag, "parse_query: val:%s", val); +// ESP_LOGD(tag, "parse_query: val:%s", val); return 1; } } - ptr1 = strtok(NULL, delimiter1); + ptr1 = strtok_r(NULL, delimiter1, &saveptr1); } return 0; } @@ -90,6 +96,7 @@ static int parse_query_int(char *query, char *key, int *val) { char valstr[32]; char *str = strdup(query); int ret=parse_query(str, key, valstr, sizeof(valstr)); + ESP_LOGI(tag, "parse_query_int: %s %s -> %s", str, key, valstr); if(ret) { *val = atoi(valstr); } else { @@ -203,9 +210,10 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me #ifdef CONFIG_OAP_GPIO_0_ENABLED if(last_env_data[5].timestamp) { cJSON *envobj5 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "env6", envobj5); + cJSON_AddItemToObject(data, "env5", envobj5); cJSON_AddItemToObject(envobj5, "GPIlastLow", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastLow)); cJSON_AddItemToObject(envobj5, "GPIlastHigh", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj5, "GPICounter", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj5, "GPOlastOut", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastOut)); cJSON_AddItemToObject(envobj5, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[5].timestamp)); } @@ -213,13 +221,37 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me #ifdef CONFIG_OAP_GPIO_1_ENABLED if(last_env_data[6].timestamp) { cJSON *envobj6 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "env7", envobj6); + cJSON_AddItemToObject(data, "env6", envobj6); cJSON_AddItemToObject(envobj6, "GPIlastLow", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj6, "GPICounter", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj6, "GPIlastHigh", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj6, "GPOlastOut", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastOut)); cJSON_AddItemToObject(envobj6, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[6].timestamp)); } #endif + #ifdef CONFIG_OAP_GPIO_2_ENABLED + if(last_env_data[7].timestamp) { + cJSON *envobj7 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env7", envobj7); + cJSON_AddItemToObject(envobj7, "GPIlastLow", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj7, "GPIlastHigh", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj7, "GPICounter", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPICounter)); + cJSON_AddItemToObject(envobj7, "GPOlastOut", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj7, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[7].timestamp)); + } + #endif + #ifdef CONFIG_OAP_GPIO_3_ENABLED + if(last_env_data[8].timestamp) { + cJSON *envobj8 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "env8", envobj8); + cJSON_AddItemToObject(envobj8, "GPIlastLow", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPIlastLow)); + cJSON_AddItemToObject(envobj8, "GPIlastHigh", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPIlastHigh)); + cJSON_AddItemToObject(envobj8, "GPICounter", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPICounter)); + cJSON_AddItemToObject(envobj8, "GPOlastOut", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj8, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[8].timestamp)); + } + #endif + #ifdef CONFIG_OAP_PM_UART_ENABLE if(pm_data_array.timestamp) { cJSON *pmobj0 = cJSON_CreateObject(); cJSON_AddItemToObject(data, "pm0", pmobj0); @@ -227,14 +259,15 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(pmobj0, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[0].pm2_5)); cJSON_AddItemToObject(pmobj0, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[0].pm10)); cJSON_AddItemToObject(pmobj0, "timestamp", cJSON_CreateNumber(sysTime - pm_data_array.timestamp)); - if(CONFIG_OAP_PM_ENABLED_AUX) { - cJSON *pmobj1 = cJSON_CreateObject(); - cJSON_AddItemToObject(data, "pm1", pmobj1); - cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); - cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); - cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); - } + #ifdef CONFIG_OAP_PM_UART_AUX_ENABLE + cJSON *pmobj1 = cJSON_CreateObject(); + cJSON_AddItemToObject(data, "pm1", pmobj1); + cJSON_AddItemToObject(pmobj1, "pm1_0", cJSON_CreateNumber(pm_data_array.pm_data[1].pm1_0)); + cJSON_AddItemToObject(pmobj1, "pm2_5", cJSON_CreateNumber(pm_data_array.pm_data[1].pm2_5)); + cJSON_AddItemToObject(pmobj1, "pm10", cJSON_CreateNumber(pm_data_array.pm_data[1].pm10)); + #endif } + #endif char* json = cJSON_Print(root); mg_send(nc, json, strlen(json)); free(json); @@ -267,10 +300,6 @@ static void handler_set_config(struct mg_connection *nc, struct http_message *me * GET /set - Set the connection info (REST request). * POST /ssidSelected - Set the connection info (HTML FORM). */ -extern mhz19_config_t mhz19_cfg; -extern hw_gpio_config_t hw_gpio_cfg[2]; - -esp_err_t mhz19_calibrate(mhz19_config_t* config); void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { ESP_LOGV(tag, "- Event: %d", ev); @@ -313,7 +342,7 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { } } if(strcmp(uri, "/calibrate") == 0) { - mhz19_calibrate(&mhz19_cfg); + mhz19_calibrate(&mhz19_cfg[0]); mg_send(nc,"ok", 2); handled = 1; } @@ -324,7 +353,7 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { parse_query_int(query_string, "delay", &delay); parse_query_int(query_string, "value", &value); parse_query_int(query_string, "gpio", &gpio); - if(gpio == 0 || gpio ==1) { + if(gpio >= 0 && gpio < HW_GPIO_DEVICES_MAX) { hw_gpio_send_trigger(&hw_gpio_cfg[gpio], value, delay); } mg_send(nc,"ok", 2); diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index fae6d64..bf8112e 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -148,6 +148,30 @@

    OpenAirProject Sensor Measurement + + + + + + + + + + + + + + + + + + + + + + + + @@ -431,10 +455,16 @@

    OpenAirProject Sensorsensor_idx, env_data->hcsr04.distance);break; case sensor_gpio: - ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPOlastOut);break; + ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPICounter: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPICounter, (int)env_data->gpio.GPOlastOut);break; } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); @@ -256,8 +259,8 @@ static void env_sensors_init() { memset(&last_env_data, 0, sizeof(env_data_record_t)*2); memset(bmx280_config, 0, sizeof(bmx280_config_t)*2); envSemaphore = xSemaphoreCreateRecursiveMutex(); - - if (bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { +#ifdef CONFIG_OAP_BMX280_ENABLED + if (oap_sensor_config.bmx280_enabled && bmx280_set_hardware_config(&bmx280_config[0], 0) == ESP_OK) { bmx280_config[0].interval = 5000; bmx280_config[0].callback = &env_sensor_callback; bmx280_config[0].altitude = oap_sensor_config.altitude; @@ -268,8 +271,9 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 0); } } - - if (bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { +#endif +#ifdef CONFIG_OAP_BMX280_ENABLED_AUX + if (oap_sensor_config.bmx280_enabled && bmx280_set_hardware_config(&bmx280_config[1], 1) == ESP_OK) { bmx280_config[1].interval = 5000; bmx280_config[1].callback = &env_sensor_callback; bmx280_config[1].altitude = oap_sensor_config.altitude; @@ -280,44 +284,61 @@ static void env_sensors_init() { ESP_LOGE(TAG, "couldn't initialise bmx280 sensor %d", 1); } } -#if CONFIG_OAP_MH_ENABLED - if (mhz19_set_hardware_config(&mhz19_cfg, 2) == ESP_OK) { - mhz19_cfg.interval = 5000; - mhz19_cfg.callback = &env_sensor_callback; - mhz19_init(&mhz19_cfg); - mhz19_enable(&mhz19_cfg, 1); +#endif +#ifdef CONFIG_OAP_MH_ENABLED + if (mhz19_set_hardware_config(&mhz19_cfg[0], 2) == ESP_OK) { + mhz19_cfg[0].interval = 5000; + mhz19_cfg[0].callback = &env_sensor_callback; + mhz19_init(&mhz19_cfg[0]); + mhz19_enable(&mhz19_cfg[0], oap_sensor_config.mhz19_enabled); } #endif -#if CONFIG_OAP_HCSR04_0_ENABLED +#ifdef CONFIG_OAP_HCSR04_0_ENABLED if(hcsr04_set_hardware_config(&hcsr04_cfg[0], 3) == ESP_OK) { hcsr04_cfg[0].interval = 1000; hcsr04_cfg[0].callback = &env_sensor_callback; hcsr04_init(&hcsr04_cfg[0]); - hcsr04_enable(&hcsr04_cfg[0], 1); + hcsr04_enable(&hcsr04_cfg[0], oap_sensor_config.hcsr04_enabled); } #endif -#if CONFIG_OAP_HCSR04_1_ENABLED +#ifdef CONFIG_OAP_HCSR04_1_ENABLED if(hcsr04_set_hardware_config(&hcsr04_cfg[1], 4) == ESP_OK) { - hcsr04_cfg[1].interval = 1000; + hcsr04_cfg[1].interval = 100; hcsr04_cfg[1].callback = &env_sensor_callback; hcsr04_init(&hcsr04_cfg[1]); - hcsr04_enable(&hcsr04_cfg[1], 1); + hcsr04_enable(&hcsr04_cfg[1], oap_sensor_config.hcsr04_enabled); } #endif -#if CONFIG_OAP_GPIO_0_ENABLED +#ifdef CONFIG_OAP_GPIO_0_ENABLED if(hw_gpio_set_hardware_config(&hw_gpio_cfg[0], 5) == ESP_OK) { - hw_gpio_cfg[0].interval = 1000; + hw_gpio_cfg[0].interval = 100; hw_gpio_cfg[0].callback = &env_sensor_callback; hw_gpio_init(&hw_gpio_cfg[0]); - hw_gpio_enable(&hw_gpio_cfg[0], 1); + hw_gpio_enable(&hw_gpio_cfg[0], oap_sensor_config.gpio_enabled); } #endif -#if CONFIG_OAP_GPIO_1_ENABLED +#ifdef CONFIG_OAP_GPIO_1_ENABLED if(hw_gpio_set_hardware_config(&hw_gpio_cfg[1], 6) == ESP_OK) { - hw_gpio_cfg[1].interval = 1000; + hw_gpio_cfg[1].interval = 100; hw_gpio_cfg[1].callback = &env_sensor_callback; hw_gpio_init(&hw_gpio_cfg[1]); - hw_gpio_enable(&hw_gpio_cfg[1], 1); + hw_gpio_enable(&hw_gpio_cfg[1], oap_sensor_config.gpio_enabled); + } +#endif +#ifdef CONFIG_OAP_GPIO_2_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[2], 7) == ESP_OK) { + hw_gpio_cfg[2].interval = 100; + hw_gpio_cfg[2].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[2]); + hw_gpio_enable(&hw_gpio_cfg[2], oap_sensor_config.gpio_enabled); + } +#endif +#ifdef CONFIG_OAP_GPIO_3_ENABLED + if(hw_gpio_set_hardware_config(&hw_gpio_cfg[3], 8) == ESP_OK) { + hw_gpio_cfg[3].interval = 100; + hw_gpio_cfg[3].callback = &env_sensor_callback; + hw_gpio_init(&hw_gpio_cfg[3]); + hw_gpio_enable(&hw_gpio_cfg[3], oap_sensor_config.gpio_enabled); } #endif } @@ -349,7 +370,7 @@ static void publish_loop() { log_task_stack(TAG); last_published = sysTime; float aqi = fminf(pm_data_pair.pm_data[0].pm2_5 / 100.0, 1.0); -#if CONFIG_OAP_RGB_LED +#ifdef CONFIG_OAP_RGB_LED //ESP_LOGI(TAG, "AQI=%f",aqi); ledc_set_color(aqi,(1-aqi), 0); #endif @@ -364,6 +385,10 @@ static void publish_loop() { .co2 = sysTime - last_env_data[2].timestamp < 60 ? &last_env_data[2].env_data : NULL, .distance1 = sysTime - last_env_data[3].timestamp < 60 ? &last_env_data[3].env_data : NULL, .distance2 = sysTime - last_env_data[4].timestamp < 60 ? &last_env_data[4].env_data : NULL, + .gpio1 = sysTime - last_env_data[5].timestamp < 60 ? &last_env_data[5].env_data : NULL, + .gpio2 = sysTime - last_env_data[6].timestamp < 60 ? &last_env_data[6].env_data : NULL, + .gpio3 = sysTime - last_env_data[7].timestamp < 60 ? &last_env_data[7].env_data : NULL, + .gpio4 = sysTime - last_env_data[8].timestamp < 60 ? &last_env_data[8].env_data : NULL, .local_time = localTime }; @@ -388,6 +413,12 @@ static oap_sensor_config_t sensor_config_from_json(cJSON* sconfig) { if ((field = cJSON_GetObjectItem(sconfig, "altitude"))) sensor_config.altitude = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "tempOffset"))) sensor_config.tempOffset = field->valueint; if ((field = cJSON_GetObjectItem(sconfig, "humidityOffset"))) sensor_config.humidityOffset = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "mhz19_enabled"))) sensor_config.mhz19_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "hcsr04_enabled"))) sensor_config.hcsr04_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "ssd1306_enabled"))) sensor_config.ssd1306_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "gpio_enabled"))) sensor_config.gpio_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "pms_enabled"))) sensor_config.pms_enabled = field->valueint; + if ((field = cJSON_GetObjectItem(sconfig, "bmx280_enabled"))) sensor_config.bmx280_enabled = field->valueint; return sensor_config; } @@ -467,7 +498,7 @@ void app_main() { //a sec to start flashing delay(1000); ESP_LOGI(TAG,"starting app... firmware %s", oap_version_str()); - + gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); //130kb is a nice cap to test against alloc fails //reduce_heap_size_to(130000); storage_init(); @@ -481,14 +512,17 @@ void app_main() { start_ota_task(storage_get_config("ota")); ledc_init(); -#if CONFIG_OAP_PM_UART_ENABLE || CONFIG_OAP_PM_UART_AUX_ENABLE +#if defined CONFIG_OAP_PM_UART_ENABLE || defined CONFIG_OAP_PM_UART_AUX_ENABLE pm_meter_result_queue = xQueueCreate(1, sizeof(pm_data_pair_t)); - pm_meter_init(); + if(oap_sensor_config.pms_enabled) { + pm_meter_init(); + } #endif env_sensors_init(); -#if CONFIG_OAP_SDD1306_ENABLED - //2kb leaves ~ 240 bytes free (depend on logs, printfs etc) - xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); +#ifdef CONFIG_OAP_SDD1306_ENABLED + if(oap_sensor_config.ssd1306_enabled) { + xTaskCreate((TaskFunction_t)display_task, "display task", 1024*3, NULL, DEFAULT_TASK_PRIORITY, NULL); + } #endif publishers_init(); From cf08fa5e3e2831d7518303db4e4e70f651513bfa Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 29 Apr 2018 23:43:08 +0200 Subject: [PATCH 169/200] use 64bit timestamps of localtime, bump version to 1.4.1 --- components/oap-common/include/oap_common.h | 1 + components/oap-common/include/oap_data_env.h | 8 ++++---- components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 5 +++++ components/oap-hw-gpio/hw_gpio.c | 14 +++++++------- components/oap-hw-gpio/include/hw_gpio.h | 12 ++++++------ main/main.c | 2 +- 7 files changed, 25 insertions(+), 19 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index fd1292d..b7d186e 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -81,4 +81,5 @@ void set_gpio(uint8_t gpio, uint8_t enabled); void configure_gpio(uint8_t gpio); void req_set_user_agent(request_t* req); double sma_generator (sma_data_t *sma, double value); +int64_t get_time_millis(); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index 48fd9d1..d13d792 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -51,10 +51,10 @@ typedef struct { } hcsr04; struct { int val; - time_t GPIlastLow; - time_t GPIlastHigh; - int GPICounter; - time_t GPOlastOut; + int64_t GPIlastLow; + int64_t GPIlastHigh; + int64_t GPICounter; + int64_t GPOlastOut; } gpio; }; } env_data_t; diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index cf5ddbe..8eb601f 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 1 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index ffba283..d24bac3 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -141,3 +141,8 @@ double sma_generator (sma_data_t *sma, double value) { return sma->sum/size; } +int64_t get_time_millis() { + struct timeval tv; + gettimeofday(&tv, NULL); + return (tv.tv_sec * 1000LL + (tv.tv_usec / 1000LL)); +} diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 2c75b9f..69b6671 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -39,7 +39,7 @@ static const char* TAG = "hw_gpio"; typedef struct { uint8_t gpio_num; uint8_t gpio_val; - uint32_t timestamp; + int64_t timestamp; int sensor_idx; } gpio_event_t; @@ -61,7 +61,7 @@ esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { gpio_set_level(config->output_pin, value); config->GPOtriggerLength=delay; config->GPOlastval=value; - config->GPOlastOut=esp_log_timestamp(); + config->GPOlastOut=get_time_millis(); publish(config); return ESP_OK; } @@ -73,7 +73,7 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) gpio_event_t hw_gpio_evt = { .gpio_num = config->input_pin, .gpio_val = gpio_get_level(config->input_pin), - .timestamp = esp_log_timestamp(), + .timestamp = get_time_millis(), .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); @@ -87,17 +87,17 @@ static void hw_gpio_task(hw_gpio_config_t* config) { // ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); if (config->callback) { if(hw_gpio_evt.gpio_val) { - config->GPIlastHigh=esp_log_timestamp(); + config->GPIlastHigh=get_time_millis(); config->GPICounter++; } else { - config->GPIlastLow=esp_log_timestamp(); + config->GPIlastLow=get_time_millis(); } publish(config); } } // if(config->sensor_idx==5) -// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, esp_log_timestamp(), config->GPOlastOut, config->GPOtriggerLength); - if(config->GPOtriggerLength && (esp_log_timestamp()-config->GPOlastOut) >= config->GPOtriggerLength) { +// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, get_time_millis(), config->GPOlastOut, config->GPOtriggerLength); + if(config->GPOtriggerLength && (get_time_millis()-config->GPOlastOut) >= config->GPOtriggerLength) { gpio_set_level(config->output_pin, !config->GPOlastval); config->GPOtriggerLength=0; } diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index 02590da..4c162f5 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -38,12 +38,12 @@ typedef struct { uint8_t output_pin; uint8_t input_pin; QueueHandle_t gpio_evt_queue; - uint32_t GPIlastLow; - uint32_t GPIlastHigh; - uint32_t GPOlastOut; - int32_t GPICounter; - uint32_t GPOtriggerLength; - uint8_t GPOlastval; + int64_t GPIlastLow; + int64_t GPIlastHigh; + int64_t GPOlastOut; + int64_t GPICounter; + int32_t GPOtriggerLength; + int8_t GPOlastval; } hw_gpio_config_t; extern hw_gpio_config_t hw_gpio_cfg[]; diff --git a/main/main.c b/main/main.c index 5e674d2..1d1160d 100644 --- a/main/main.c +++ b/main/main.c @@ -241,7 +241,7 @@ static void env_sensor_callback(env_data_t* env_data) { case sensor_hcsr04: ESP_LOGI(TAG, "env (%d): dist: %dcm", env_data->sensor_idx, env_data->hcsr04.distance);break; case sensor_gpio: - ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPICounter: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPICounter, (int)env_data->gpio.GPOlastOut);break; + ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut);break; } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); From b27901024a0d30a9cd2cb41f4e6758b3a3a51ffd Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 29 Apr 2018 23:43:08 +0200 Subject: [PATCH 170/200] use 64bit timestamps of localtime, bump version to 1.4.1 --- components/oap-common/include/oap_common.h | 1 + components/oap-common/include/oap_data_env.h | 8 ++++---- components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 5 +++++ components/oap-hw-gpio/hw_gpio.c | 14 +++++++------- components/oap-hw-gpio/include/hw_gpio.h | 12 ++++++------ main/main.c | 2 +- 7 files changed, 25 insertions(+), 19 deletions(-) diff --git a/components/oap-common/include/oap_common.h b/components/oap-common/include/oap_common.h index fd1292d..b7d186e 100644 --- a/components/oap-common/include/oap_common.h +++ b/components/oap-common/include/oap_common.h @@ -81,4 +81,5 @@ void set_gpio(uint8_t gpio, uint8_t enabled); void configure_gpio(uint8_t gpio); void req_set_user_agent(request_t* req); double sma_generator (sma_data_t *sma, double value); +int64_t get_time_millis(); #endif /* MAIN_COMMON_COMMON_H_ */ diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index 48fd9d1..d13d792 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -51,10 +51,10 @@ typedef struct { } hcsr04; struct { int val; - time_t GPIlastLow; - time_t GPIlastHigh; - int GPICounter; - time_t GPOlastOut; + int64_t GPIlastLow; + int64_t GPIlastHigh; + int64_t GPICounter; + int64_t GPOlastOut; } gpio; }; } env_data_t; diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index cf5ddbe..8eb601f 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 0 +#define OAP_VER_PATCH 1 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index ffba283..d24bac3 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -141,3 +141,8 @@ double sma_generator (sma_data_t *sma, double value) { return sma->sum/size; } +int64_t get_time_millis() { + struct timeval tv; + gettimeofday(&tv, NULL); + return (tv.tv_sec * 1000LL + (tv.tv_usec / 1000LL)); +} diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 2c75b9f..69b6671 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -39,7 +39,7 @@ static const char* TAG = "hw_gpio"; typedef struct { uint8_t gpio_num; uint8_t gpio_val; - uint32_t timestamp; + int64_t timestamp; int sensor_idx; } gpio_event_t; @@ -61,7 +61,7 @@ esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { gpio_set_level(config->output_pin, value); config->GPOtriggerLength=delay; config->GPOlastval=value; - config->GPOlastOut=esp_log_timestamp(); + config->GPOlastOut=get_time_millis(); publish(config); return ESP_OK; } @@ -73,7 +73,7 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) gpio_event_t hw_gpio_evt = { .gpio_num = config->input_pin, .gpio_val = gpio_get_level(config->input_pin), - .timestamp = esp_log_timestamp(), + .timestamp = get_time_millis(), .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); @@ -87,17 +87,17 @@ static void hw_gpio_task(hw_gpio_config_t* config) { // ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); if (config->callback) { if(hw_gpio_evt.gpio_val) { - config->GPIlastHigh=esp_log_timestamp(); + config->GPIlastHigh=get_time_millis(); config->GPICounter++; } else { - config->GPIlastLow=esp_log_timestamp(); + config->GPIlastLow=get_time_millis(); } publish(config); } } // if(config->sensor_idx==5) -// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, esp_log_timestamp(), config->GPOlastOut, config->GPOtriggerLength); - if(config->GPOtriggerLength && (esp_log_timestamp()-config->GPOlastOut) >= config->GPOtriggerLength) { +// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, get_time_millis(), config->GPOlastOut, config->GPOtriggerLength); + if(config->GPOtriggerLength && (get_time_millis()-config->GPOlastOut) >= config->GPOtriggerLength) { gpio_set_level(config->output_pin, !config->GPOlastval); config->GPOtriggerLength=0; } diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index 02590da..4c162f5 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -38,12 +38,12 @@ typedef struct { uint8_t output_pin; uint8_t input_pin; QueueHandle_t gpio_evt_queue; - uint32_t GPIlastLow; - uint32_t GPIlastHigh; - uint32_t GPOlastOut; - int32_t GPICounter; - uint32_t GPOtriggerLength; - uint8_t GPOlastval; + int64_t GPIlastLow; + int64_t GPIlastHigh; + int64_t GPOlastOut; + int64_t GPICounter; + int32_t GPOtriggerLength; + int8_t GPOlastval; } hw_gpio_config_t; extern hw_gpio_config_t hw_gpio_cfg[]; diff --git a/main/main.c b/main/main.c index 5e674d2..1d1160d 100644 --- a/main/main.c +++ b/main/main.c @@ -241,7 +241,7 @@ static void env_sensor_callback(env_data_t* env_data) { case sensor_hcsr04: ESP_LOGI(TAG, "env (%d): dist: %dcm", env_data->sensor_idx, env_data->hcsr04.distance);break; case sensor_gpio: - ESP_LOGI(TAG, "env (%d): GPIlastLow: %d, GPIlastHigh: %d, GPICounter: %d, GPOlastOut: %d", env_data->sensor_idx, (int)env_data->gpio.GPIlastLow, (int)env_data->gpio.GPIlastHigh, (int)env_data->gpio.GPICounter, (int)env_data->gpio.GPOlastOut);break; + ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut);break; } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); From 261b78727bd3a1d8152281185054813204fca85d Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 30 Apr 2018 11:17:36 +0200 Subject: [PATCH 171/200] change defaults, add pcnt code to gpio, fix race condition in GPIO-ISR, version 1.4.2 --- README.md | 36 +++++++ components/oap-common/include/oap_version.h | 2 +- components/oap-hw-ext/Kconfig | 12 +-- components/oap-hw-gpio/hw_gpio.c | 111 ++++++++++++++++++-- components/oap-hw-gpio/include/hw_gpio.h | 2 + components/oap-meter/Kconfig | 4 +- 6 files changed, 151 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 26fea59..7016bfe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,41 @@ # OpenAirProject AirQuality / Dust Meter + +## The following description is outdated ## + +The current implementation of this code contains support for additional +hardware like: + +- CO2 sensor: MH-Z19 + +- OLED display: SSD 1306 + +- Ultrasonic distance sensor: HC SR04 + +- GPIO: 4 ports in with counter, 4 ports out with trigger + +Further these changes and additions have been made: + +- FIX WIFI instability + +- Show collected values in realtime on web frontend + +- Add disable / enable single hardware components via web frontend + +- Add configurable offsets for humidity, temperature and altitude via web frontend + +- Add HTTP-GET publisher with basic auth + +- Some Pinouts have been changed: + +-- Button is now on Pin 0 (button on ESP32 board), low active (configurable) + +-- RGB LED has been reduced to channel blue on Pin 2 (LED on ESP32 board, configurable) + +-- Pins for heater and fan have been set to unused (-1) by default + +-- No need for RTS/CTS pin assignment + ## Features This meter measures dust (pm1, pm2.5, pm10 particles) and, optionally, other environmental conditions like temperature, pressure and humidity. diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 8eb601f..726b2e0 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 1 +#define OAP_VER_PATCH 2 typedef struct { uint8_t major; diff --git a/components/oap-hw-ext/Kconfig b/components/oap-hw-ext/Kconfig index a2a74ec..2fbe8a8 100644 --- a/components/oap-hw-ext/Kconfig +++ b/components/oap-hw-ext/Kconfig @@ -2,32 +2,32 @@ menu "OAP Peripherals" config OAP_LED_R_PIN int "led Red pin" - default 12 + default -1 help ESP32 R/W gpio config OAP_LED_G_PIN int "led Green pin" - default 27 + default -1 help ESP32 R/W gpio config OAP_LED_B_PIN int "led Blue pin" - default 14 + default 2 help ESP32 R/W gpio config OAP_BTN_0_PIN int "button pin" - default 35 + default 0 help ESP32 gpio config OAP_BTN_0_ACTIVE_LOW bool "Active low" - default n + default y help ESP32 gpio -endmenu \ No newline at end of file +endmenu diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 69b6671..43159a6 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -27,6 +27,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" +#include "driver/pcnt.h" #include "esp_log.h" #include "hw_gpio.h" #include "oap_debug.h" @@ -73,30 +74,86 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) gpio_event_t hw_gpio_evt = { .gpio_num = config->input_pin, .gpio_val = gpio_get_level(config->input_pin), - .timestamp = get_time_millis(), .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); } +typedef struct { + int unit; // the PCNT unit that originated an interrupt + uint32_t status; // information on the event type that caused the interrupt +} pcnt_evt_t; + +static void IRAM_ATTR pcnt_intr_handler(void *arg) +{ + hw_gpio_config_t* config=(hw_gpio_config_t*) arg; + uint32_t intr_status = PCNT.int_st.val; + int i; + pcnt_evt_t evt; + portBASE_TYPE HPTaskAwoken = pdFALSE; + + for (i = 0; i < PCNT_UNIT_MAX; i++) { + if (intr_status & (BIT(i))) { + evt.unit = i; + /* Save the PCNT event type that caused an interrupt + to pass it to the main program */ + evt.status = PCNT.status_unit[i].val; + PCNT.int_clr.val = BIT(i); + xQueueSendFromISR(config->pcnt_evt_queue, &evt, &HPTaskAwoken); + if (HPTaskAwoken == pdTRUE) { + portYIELD_FROM_ISR(); + } + } + } +} + static void hw_gpio_task(hw_gpio_config_t* config) { gpio_event_t hw_gpio_evt; while(1) { if(config->enabled) { - if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 10)) { + if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 10 / portTICK_PERIOD_MS)) { // ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); if (config->callback) { + int64_t ms=get_time_millis(); if(hw_gpio_evt.gpio_val) { - config->GPIlastHigh=get_time_millis(); + config->GPIlastHigh=ms; config->GPICounter++; } else { - config->GPIlastLow=get_time_millis(); + config->GPIlastLow=ms; + } + if((ms - config->lastPublish) > 1000) { + config->lastPublish = ms; + publish(config); } - publish(config); } } -// if(config->sensor_idx==5) -// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, get_time_millis(), config->GPOlastOut, config->GPOtriggerLength); +#ifdef PCNT + pcnt_evt_t evt; + portBASE_TYPE res = xQueueReceive(config->pcnt_evt_queue, &evt, 10 / portTICK_PERIOD_MS); + if (res == pdTRUE) { + int16_t count = 0; + pcnt_get_counter_value(PCNT_UNIT_0, &count); + ESP_LOGD(TAG, "Event PCNT unit[%d]; cnt: %d\n", evt.unit, count); + if (evt.status & PCNT_STATUS_THRES1_M) { + ESP_LOGD(TAG, "THRES1 EVT\n"); + } + if (evt.status & PCNT_STATUS_THRES0_M) { + ESP_LOGD(TAG, "THRES0 EVT\n"); + } + if (evt.status & PCNT_STATUS_L_LIM_M) { + ESP_LOGD(TAG, "L_LIM EVT\n"); + } + if (evt.status & PCNT_STATUS_H_LIM_M) { + ESP_LOGD(TAG, "H_LIM EVT\n"); + } + if (evt.status & PCNT_STATUS_ZERO_M) { + ESP_LOGD(TAG, "ZERO EVT\n"); + } + } else { + pcnt_get_counter_value(PCNT_UNIT_0, &count); + printf("Current counter value :%d\n", count); + } +#endif if(config->GPOtriggerLength && (get_time_millis()-config->GPOlastOut) >= config->GPOtriggerLength) { gpio_set_level(config->output_pin, !config->GPOlastval); config->GPOtriggerLength=0; @@ -129,6 +186,46 @@ esp_err_t hw_gpio_init(hw_gpio_config_t* config) { gpio_set_pull_mode(config->input_pin, GPIO_PULLDOWN_ONLY); gpio_set_intr_type(config->input_pin, GPIO_INTR_ANYEDGE); +#ifdef PCNT + config->pcnt_evt_queue = xQueueCreate(10, sizeof(pcnt_evt_t)); + pcnt_config_t pcnt_config = { + .pulse_gpio_num = config->input_pin, + .ctrl_gpio_num = -1, + .channel = PCNT_CHANNEL_0, + .unit = PCNT_UNIT_0, + .pos_mode = PCNT_COUNT_INC, + .neg_mode = PCNT_COUNT_INC, + .lctrl_mode = PCNT_MODE_KEEP, + .hctrl_mode = PCNT_MODE_KEEP, + .counter_h_lim = 32767, + .counter_l_lim = 0, + }; + pcnt_unit_config(&pcnt_config); + + pcnt_set_filter_value(PCNT_UNIT_0, 100); + pcnt_filter_enable(PCNT_UNIT_0); + + pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_1, 20); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_1); + pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_0, 10); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_0); + + /* Enable events on zero, maximum and minimum limit values */ + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_ZERO); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_H_LIM); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_L_LIM); + + /* Initialize PCNT's counter */ + pcnt_counter_pause(PCNT_UNIT_0); + pcnt_counter_clear(PCNT_UNIT_0); + + /* Register ISR handler and enable interrupts for PCNT unit */ + pcnt_isr_register(pcnt_intr_handler, config, 0, NULL); + pcnt_intr_enable(PCNT_UNIT_0); + + /* Everything is set up, now go to counting */ + pcnt_counter_resume(PCNT_UNIT_0); +#endif gpio_pad_select_gpio(config->output_pin); gpio_set_direction(config->output_pin, GPIO_MODE_OUTPUT); gpio_set_level(config->output_pin, 0); diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index 4c162f5..1d380f6 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -38,12 +38,14 @@ typedef struct { uint8_t output_pin; uint8_t input_pin; QueueHandle_t gpio_evt_queue; + QueueHandle_t pcnt_evt_queue; int64_t GPIlastLow; int64_t GPIlastHigh; int64_t GPOlastOut; int64_t GPICounter; int32_t GPOtriggerLength; int8_t GPOlastval; + int64_t lastPublish; } hw_gpio_config_t; extern hw_gpio_config_t hw_gpio_cfg[]; diff --git a/components/oap-meter/Kconfig b/components/oap-meter/Kconfig index 8daedd6..8babe10 100644 --- a/components/oap-meter/Kconfig +++ b/components/oap-meter/Kconfig @@ -9,13 +9,13 @@ config OAP_PM_SAMPLE_BUF_SIZE config OAP_HEATER_CONTROL_PIN int "external heater gpio" - default 21 + default -1 help optional GPIO pin to control a heater. It mirrors state of SET gpio. (0 = none) config OAP_FAN_CONTROL_PIN int "external fan gpio" - default 22 + default -1 help optional GPIO pin to control an additional fan. It mirrors state of SET gpio. (0 = none) From a499c8f7d6945f7bc5d38deedd3599935b4503d6 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 30 Apr 2018 11:17:36 +0200 Subject: [PATCH 172/200] change defaults, add pcnt code to gpio, fix race condition in GPIO-ISR, version 1.4.2 --- README.md | 36 +++++++ components/oap-common/include/oap_version.h | 2 +- components/oap-hw-ext/Kconfig | 12 +-- components/oap-hw-gpio/hw_gpio.c | 111 ++++++++++++++++++-- components/oap-hw-gpio/include/hw_gpio.h | 2 + components/oap-meter/Kconfig | 4 +- 6 files changed, 151 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 26fea59..7016bfe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,41 @@ # OpenAirProject AirQuality / Dust Meter + +## The following description is outdated ## + +The current implementation of this code contains support for additional +hardware like: + +- CO2 sensor: MH-Z19 + +- OLED display: SSD 1306 + +- Ultrasonic distance sensor: HC SR04 + +- GPIO: 4 ports in with counter, 4 ports out with trigger + +Further these changes and additions have been made: + +- FIX WIFI instability + +- Show collected values in realtime on web frontend + +- Add disable / enable single hardware components via web frontend + +- Add configurable offsets for humidity, temperature and altitude via web frontend + +- Add HTTP-GET publisher with basic auth + +- Some Pinouts have been changed: + +-- Button is now on Pin 0 (button on ESP32 board), low active (configurable) + +-- RGB LED has been reduced to channel blue on Pin 2 (LED on ESP32 board, configurable) + +-- Pins for heater and fan have been set to unused (-1) by default + +-- No need for RTS/CTS pin assignment + ## Features This meter measures dust (pm1, pm2.5, pm10 particles) and, optionally, other environmental conditions like temperature, pressure and humidity. diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 8eb601f..726b2e0 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 1 +#define OAP_VER_PATCH 2 typedef struct { uint8_t major; diff --git a/components/oap-hw-ext/Kconfig b/components/oap-hw-ext/Kconfig index a2a74ec..2fbe8a8 100644 --- a/components/oap-hw-ext/Kconfig +++ b/components/oap-hw-ext/Kconfig @@ -2,32 +2,32 @@ menu "OAP Peripherals" config OAP_LED_R_PIN int "led Red pin" - default 12 + default -1 help ESP32 R/W gpio config OAP_LED_G_PIN int "led Green pin" - default 27 + default -1 help ESP32 R/W gpio config OAP_LED_B_PIN int "led Blue pin" - default 14 + default 2 help ESP32 R/W gpio config OAP_BTN_0_PIN int "button pin" - default 35 + default 0 help ESP32 gpio config OAP_BTN_0_ACTIVE_LOW bool "Active low" - default n + default y help ESP32 gpio -endmenu \ No newline at end of file +endmenu diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 69b6671..43159a6 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -27,6 +27,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" +#include "driver/pcnt.h" #include "esp_log.h" #include "hw_gpio.h" #include "oap_debug.h" @@ -73,30 +74,86 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) gpio_event_t hw_gpio_evt = { .gpio_num = config->input_pin, .gpio_val = gpio_get_level(config->input_pin), - .timestamp = get_time_millis(), .sensor_idx = config->sensor_idx }; xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); } +typedef struct { + int unit; // the PCNT unit that originated an interrupt + uint32_t status; // information on the event type that caused the interrupt +} pcnt_evt_t; + +static void IRAM_ATTR pcnt_intr_handler(void *arg) +{ + hw_gpio_config_t* config=(hw_gpio_config_t*) arg; + uint32_t intr_status = PCNT.int_st.val; + int i; + pcnt_evt_t evt; + portBASE_TYPE HPTaskAwoken = pdFALSE; + + for (i = 0; i < PCNT_UNIT_MAX; i++) { + if (intr_status & (BIT(i))) { + evt.unit = i; + /* Save the PCNT event type that caused an interrupt + to pass it to the main program */ + evt.status = PCNT.status_unit[i].val; + PCNT.int_clr.val = BIT(i); + xQueueSendFromISR(config->pcnt_evt_queue, &evt, &HPTaskAwoken); + if (HPTaskAwoken == pdTRUE) { + portYIELD_FROM_ISR(); + } + } + } +} + static void hw_gpio_task(hw_gpio_config_t* config) { gpio_event_t hw_gpio_evt; while(1) { if(config->enabled) { - if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 10)) { + if (xQueueReceive(config->gpio_evt_queue, &hw_gpio_evt, 10 / portTICK_PERIOD_MS)) { // ESP_LOGD(TAG, "%d/%d v:%d t:%d", config->sensor_idx, hw_gpio_evt.sensor_idx, hw_gpio_evt.gpio_val, hw_gpio_evt.timestamp); if (config->callback) { + int64_t ms=get_time_millis(); if(hw_gpio_evt.gpio_val) { - config->GPIlastHigh=get_time_millis(); + config->GPIlastHigh=ms; config->GPICounter++; } else { - config->GPIlastLow=get_time_millis(); + config->GPIlastLow=ms; + } + if((ms - config->lastPublish) > 1000) { + config->lastPublish = ms; + publish(config); } - publish(config); } } -// if(config->sensor_idx==5) -// ESP_LOGD(TAG, "%d dings %d %d-%d>%d", config->sensor_idx, config->GPOtriggerLength, get_time_millis(), config->GPOlastOut, config->GPOtriggerLength); +#ifdef PCNT + pcnt_evt_t evt; + portBASE_TYPE res = xQueueReceive(config->pcnt_evt_queue, &evt, 10 / portTICK_PERIOD_MS); + if (res == pdTRUE) { + int16_t count = 0; + pcnt_get_counter_value(PCNT_UNIT_0, &count); + ESP_LOGD(TAG, "Event PCNT unit[%d]; cnt: %d\n", evt.unit, count); + if (evt.status & PCNT_STATUS_THRES1_M) { + ESP_LOGD(TAG, "THRES1 EVT\n"); + } + if (evt.status & PCNT_STATUS_THRES0_M) { + ESP_LOGD(TAG, "THRES0 EVT\n"); + } + if (evt.status & PCNT_STATUS_L_LIM_M) { + ESP_LOGD(TAG, "L_LIM EVT\n"); + } + if (evt.status & PCNT_STATUS_H_LIM_M) { + ESP_LOGD(TAG, "H_LIM EVT\n"); + } + if (evt.status & PCNT_STATUS_ZERO_M) { + ESP_LOGD(TAG, "ZERO EVT\n"); + } + } else { + pcnt_get_counter_value(PCNT_UNIT_0, &count); + printf("Current counter value :%d\n", count); + } +#endif if(config->GPOtriggerLength && (get_time_millis()-config->GPOlastOut) >= config->GPOtriggerLength) { gpio_set_level(config->output_pin, !config->GPOlastval); config->GPOtriggerLength=0; @@ -129,6 +186,46 @@ esp_err_t hw_gpio_init(hw_gpio_config_t* config) { gpio_set_pull_mode(config->input_pin, GPIO_PULLDOWN_ONLY); gpio_set_intr_type(config->input_pin, GPIO_INTR_ANYEDGE); +#ifdef PCNT + config->pcnt_evt_queue = xQueueCreate(10, sizeof(pcnt_evt_t)); + pcnt_config_t pcnt_config = { + .pulse_gpio_num = config->input_pin, + .ctrl_gpio_num = -1, + .channel = PCNT_CHANNEL_0, + .unit = PCNT_UNIT_0, + .pos_mode = PCNT_COUNT_INC, + .neg_mode = PCNT_COUNT_INC, + .lctrl_mode = PCNT_MODE_KEEP, + .hctrl_mode = PCNT_MODE_KEEP, + .counter_h_lim = 32767, + .counter_l_lim = 0, + }; + pcnt_unit_config(&pcnt_config); + + pcnt_set_filter_value(PCNT_UNIT_0, 100); + pcnt_filter_enable(PCNT_UNIT_0); + + pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_1, 20); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_1); + pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_0, 10); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_0); + + /* Enable events on zero, maximum and minimum limit values */ + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_ZERO); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_H_LIM); + pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_L_LIM); + + /* Initialize PCNT's counter */ + pcnt_counter_pause(PCNT_UNIT_0); + pcnt_counter_clear(PCNT_UNIT_0); + + /* Register ISR handler and enable interrupts for PCNT unit */ + pcnt_isr_register(pcnt_intr_handler, config, 0, NULL); + pcnt_intr_enable(PCNT_UNIT_0); + + /* Everything is set up, now go to counting */ + pcnt_counter_resume(PCNT_UNIT_0); +#endif gpio_pad_select_gpio(config->output_pin); gpio_set_direction(config->output_pin, GPIO_MODE_OUTPUT); gpio_set_level(config->output_pin, 0); diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index 4c162f5..1d380f6 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -38,12 +38,14 @@ typedef struct { uint8_t output_pin; uint8_t input_pin; QueueHandle_t gpio_evt_queue; + QueueHandle_t pcnt_evt_queue; int64_t GPIlastLow; int64_t GPIlastHigh; int64_t GPOlastOut; int64_t GPICounter; int32_t GPOtriggerLength; int8_t GPOlastval; + int64_t lastPublish; } hw_gpio_config_t; extern hw_gpio_config_t hw_gpio_cfg[]; diff --git a/components/oap-meter/Kconfig b/components/oap-meter/Kconfig index 8daedd6..8babe10 100644 --- a/components/oap-meter/Kconfig +++ b/components/oap-meter/Kconfig @@ -9,13 +9,13 @@ config OAP_PM_SAMPLE_BUF_SIZE config OAP_HEATER_CONTROL_PIN int "external heater gpio" - default 21 + default -1 help optional GPIO pin to control a heater. It mirrors state of SET gpio. (0 = none) config OAP_FAN_CONTROL_PIN int "external fan gpio" - default 22 + default -1 help optional GPIO pin to control an additional fan. It mirrors state of SET gpio. (0 = none) From b91df235c0c6d84edf51ca5f2eff1931da5166e1 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 30 Apr 2018 11:35:52 +0200 Subject: [PATCH 173/200] Update README.md --- README.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 7016bfe..11e9cac 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,30 @@ -# OpenAirProject AirQuality / Dust Meter - - -## The following description is outdated ## +# OpenAirProject AirQuality / Dust / CO2 / Distance - Meter + GPIO and OLED Display The current implementation of this code contains support for additional hardware like: -- CO2 sensor: MH-Z19 +- CO2 sensor: MH-Z19 (can be calibrated via + + http:///calibrate - OLED display: SSD 1306 - Ultrasonic distance sensor: HC SR04 -- GPIO: 4 ports in with counter, 4 ports out with trigger +- GPIO: 4 ports in with counter via + + http:///status + +- GPIO 4 ports out with trigger via + + http:///trigger?delay=<0|ms>&gpio=<0-3>&value=<0|1> Further these changes and additions have been made: - FIX WIFI instability +- Add Device ID to DHCP-Client-Hostname + - Show collected values in realtime on web frontend - Add disable / enable single hardware components via web frontend @@ -28,13 +35,15 @@ Further these changes and additions have been made: - Some Pinouts have been changed: --- Button is now on Pin 0 (button on ESP32 board), low active (configurable) +- - Button is now on Pin 0 (button on ESP32 board), low active (configurable) --- RGB LED has been reduced to channel blue on Pin 2 (LED on ESP32 board, configurable) +- - RGB LED has been reduced to channel blue on Pin 2 (LED on ESP32 board, configurable) --- Pins for heater and fan have been set to unused (-1) by default +- - Pins for heater and fan have been set to unused (-1) by default --- No need for RTS/CTS pin assignment +- - No need for RTS/CTS pin assignment on RS232 ports + +## The following description is outdated ## ## Features From 59d99db48bc98bb8944441144959683ff8e94c03 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 30 Apr 2018 11:35:52 +0200 Subject: [PATCH 174/200] Update README.md --- README.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 7016bfe..11e9cac 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,30 @@ -# OpenAirProject AirQuality / Dust Meter - - -## The following description is outdated ## +# OpenAirProject AirQuality / Dust / CO2 / Distance - Meter + GPIO and OLED Display The current implementation of this code contains support for additional hardware like: -- CO2 sensor: MH-Z19 +- CO2 sensor: MH-Z19 (can be calibrated via + + http:///calibrate - OLED display: SSD 1306 - Ultrasonic distance sensor: HC SR04 -- GPIO: 4 ports in with counter, 4 ports out with trigger +- GPIO: 4 ports in with counter via + + http:///status + +- GPIO 4 ports out with trigger via + + http:///trigger?delay=<0|ms>&gpio=<0-3>&value=<0|1> Further these changes and additions have been made: - FIX WIFI instability +- Add Device ID to DHCP-Client-Hostname + - Show collected values in realtime on web frontend - Add disable / enable single hardware components via web frontend @@ -28,13 +35,15 @@ Further these changes and additions have been made: - Some Pinouts have been changed: --- Button is now on Pin 0 (button on ESP32 board), low active (configurable) +- - Button is now on Pin 0 (button on ESP32 board), low active (configurable) --- RGB LED has been reduced to channel blue on Pin 2 (LED on ESP32 board, configurable) +- - RGB LED has been reduced to channel blue on Pin 2 (LED on ESP32 board, configurable) --- Pins for heater and fan have been set to unused (-1) by default +- - Pins for heater and fan have been set to unused (-1) by default --- No need for RTS/CTS pin assignment +- - No need for RTS/CTS pin assignment on RS232 ports + +## The following description is outdated ## ## Features From 152db1737ff680ccc83079e87c44b1efe1b59a07 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 1 May 2018 14:42:43 +0200 Subject: [PATCH 175/200] add http header to answer, version 1.4.4 --- components/oap-common/include/oap_version.h | 2 +- components/oap-wifi/cpanel.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 726b2e0..f2935f6 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 2 +#define OAP_VER_PATCH 4 typedef struct { uint8_t major; diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 0189660..5575669 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -342,25 +342,30 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { } } if(strcmp(uri, "/calibrate") == 0) { + char *str="ok\n"; + int len=strlen(str); + mg_send_head(nc, 200, len, "Content-Type: text/plain"); mhz19_calibrate(&mhz19_cfg[0]); - mg_send(nc,"ok", 2); + mg_send(nc, str, len); handled = 1; } if(strcmp(uri, "/trigger") == 0) { int delay; int value; int gpio; + char *str="ok\n"; + int len=strlen(str); + mg_send_head(nc, 200, len, "Content-Type: text/plain"); parse_query_int(query_string, "delay", &delay); parse_query_int(query_string, "value", &value); parse_query_int(query_string, "gpio", &gpio); if(gpio >= 0 && gpio < HW_GPIO_DEVICES_MAX) { hw_gpio_send_trigger(&hw_gpio_cfg[gpio], value, delay); } - mg_send(nc,"ok", 2); + mg_send(nc,str, len); handled = 1; } if (!handled) { - mg_send_head(nc, 404, 0, "Content-Type: text/plain"); } nc->flags |= MG_F_SEND_AND_CLOSE; free(uri); From 2180322fdde7ff46761401aa6897f5f1409ccd3d Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 1 May 2018 14:42:43 +0200 Subject: [PATCH 176/200] add http header to answer, version 1.4.4 --- components/oap-common/include/oap_version.h | 2 +- components/oap-wifi/cpanel.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 726b2e0..f2935f6 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 2 +#define OAP_VER_PATCH 4 typedef struct { uint8_t major; diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 0189660..5575669 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -342,25 +342,30 @@ void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { } } if(strcmp(uri, "/calibrate") == 0) { + char *str="ok\n"; + int len=strlen(str); + mg_send_head(nc, 200, len, "Content-Type: text/plain"); mhz19_calibrate(&mhz19_cfg[0]); - mg_send(nc,"ok", 2); + mg_send(nc, str, len); handled = 1; } if(strcmp(uri, "/trigger") == 0) { int delay; int value; int gpio; + char *str="ok\n"; + int len=strlen(str); + mg_send_head(nc, 200, len, "Content-Type: text/plain"); parse_query_int(query_string, "delay", &delay); parse_query_int(query_string, "value", &value); parse_query_int(query_string, "gpio", &gpio); if(gpio >= 0 && gpio < HW_GPIO_DEVICES_MAX) { hw_gpio_send_trigger(&hw_gpio_cfg[gpio], value, delay); } - mg_send(nc,"ok", 2); + mg_send(nc,str, len); handled = 1; } if (!handled) { - mg_send_head(nc, 404, 0, "Content-Type: text/plain"); } nc->flags |= MG_F_SEND_AND_CLOSE; free(uri); From ddd8ce0b5d53a1e8b92f0aaa4fa5f8ca823238e5 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 1 May 2018 17:14:27 +0200 Subject: [PATCH 177/200] fix counter, version 1.4.6 --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-gpio/hw_gpio.c | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index f2935f6..3619438 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 4 +#define OAP_VER_PATCH 6 typedef struct { uint8_t major; diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 43159a6..faf296e 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -76,9 +76,13 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) .gpio_val = gpio_get_level(config->input_pin), .sensor_idx = config->sensor_idx }; + if(hw_gpio_evt.gpio_val) { + config->GPICounter++; + } xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); } +#ifdef PCNT typedef struct { int unit; // the PCNT unit that originated an interrupt uint32_t status; // information on the event type that caused the interrupt @@ -98,6 +102,9 @@ static void IRAM_ATTR pcnt_intr_handler(void *arg) /* Save the PCNT event type that caused an interrupt to pass it to the main program */ evt.status = PCNT.status_unit[i].val; + if(evt.status == PCNT_STATUS_H_LIM_M) { + pcnt_counter_clear(PCNT_UNIT_0); + } PCNT.int_clr.val = BIT(i); xQueueSendFromISR(config->pcnt_evt_queue, &evt, &HPTaskAwoken); if (HPTaskAwoken == pdTRUE) { @@ -106,7 +113,7 @@ static void IRAM_ATTR pcnt_intr_handler(void *arg) } } } - +#endif static void hw_gpio_task(hw_gpio_config_t* config) { gpio_event_t hw_gpio_evt; while(1) { @@ -117,7 +124,6 @@ static void hw_gpio_task(hw_gpio_config_t* config) { int64_t ms=get_time_millis(); if(hw_gpio_evt.gpio_val) { config->GPIlastHigh=ms; - config->GPICounter++; } else { config->GPIlastLow=ms; } @@ -205,15 +211,15 @@ esp_err_t hw_gpio_init(hw_gpio_config_t* config) { pcnt_set_filter_value(PCNT_UNIT_0, 100); pcnt_filter_enable(PCNT_UNIT_0); - pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_1, 20); - pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_1); +// pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_1, 20); +// pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_1); pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_0, 10); pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_0); /* Enable events on zero, maximum and minimum limit values */ - pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_ZERO); +// pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_ZERO); pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_H_LIM); - pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_L_LIM); +// pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_L_LIM); /* Initialize PCNT's counter */ pcnt_counter_pause(PCNT_UNIT_0); From 4814a51cf8482deaa3cfc11f954339feb5eefdd1 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Tue, 1 May 2018 17:14:27 +0200 Subject: [PATCH 178/200] fix counter, version 1.4.6 --- components/oap-common/include/oap_version.h | 2 +- components/oap-hw-gpio/hw_gpio.c | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index f2935f6..3619438 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 4 +#define OAP_VER_PATCH 6 typedef struct { uint8_t major; diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index 43159a6..faf296e 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -76,9 +76,13 @@ static void IRAM_ATTR hw_gpio_isr_handler(void* arg) .gpio_val = gpio_get_level(config->input_pin), .sensor_idx = config->sensor_idx }; + if(hw_gpio_evt.gpio_val) { + config->GPICounter++; + } xQueueSendFromISR(config->gpio_evt_queue, &hw_gpio_evt, NULL); } +#ifdef PCNT typedef struct { int unit; // the PCNT unit that originated an interrupt uint32_t status; // information on the event type that caused the interrupt @@ -98,6 +102,9 @@ static void IRAM_ATTR pcnt_intr_handler(void *arg) /* Save the PCNT event type that caused an interrupt to pass it to the main program */ evt.status = PCNT.status_unit[i].val; + if(evt.status == PCNT_STATUS_H_LIM_M) { + pcnt_counter_clear(PCNT_UNIT_0); + } PCNT.int_clr.val = BIT(i); xQueueSendFromISR(config->pcnt_evt_queue, &evt, &HPTaskAwoken); if (HPTaskAwoken == pdTRUE) { @@ -106,7 +113,7 @@ static void IRAM_ATTR pcnt_intr_handler(void *arg) } } } - +#endif static void hw_gpio_task(hw_gpio_config_t* config) { gpio_event_t hw_gpio_evt; while(1) { @@ -117,7 +124,6 @@ static void hw_gpio_task(hw_gpio_config_t* config) { int64_t ms=get_time_millis(); if(hw_gpio_evt.gpio_val) { config->GPIlastHigh=ms; - config->GPICounter++; } else { config->GPIlastLow=ms; } @@ -205,15 +211,15 @@ esp_err_t hw_gpio_init(hw_gpio_config_t* config) { pcnt_set_filter_value(PCNT_UNIT_0, 100); pcnt_filter_enable(PCNT_UNIT_0); - pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_1, 20); - pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_1); +// pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_1, 20); +// pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_1); pcnt_set_event_value(PCNT_UNIT_0, PCNT_EVT_THRES_0, 10); pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_THRES_0); /* Enable events on zero, maximum and minimum limit values */ - pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_ZERO); +// pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_ZERO); pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_H_LIM); - pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_L_LIM); +// pcnt_event_enable(PCNT_UNIT_0, PCNT_EVT_L_LIM); /* Initialize PCNT's counter */ pcnt_counter_pause(PCNT_UNIT_0); From 231b3f029f23a376daa48f496f26880b9f01a66e Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 5 May 2018 19:40:05 +0200 Subject: [PATCH 179/200] add GPOlastVal to status, version 1.4.10 --- components/oap-common/default_config.json | 48 ++++++++++++++++++++ components/oap-common/include/oap_data_env.h | 1 + components/oap-common/include/oap_version.h | 2 +- components/oap-hw-gpio/hw_gpio.c | 9 ++-- components/oap-hw-gpio/include/hw_gpio.h | 2 +- components/oap-wifi/cpanel.c | 4 ++ components/oap-wifi/index.html | 8 ++-- main/main.c | 2 +- 8 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 components/oap-common/default_config.json diff --git a/components/oap-common/default_config.json b/components/oap-common/default_config.json new file mode 100644 index 0000000..bb828d0 --- /dev/null +++ b/components/oap-common/default_config.json @@ -0,0 +1,48 @@ +{ + "wifi": { + "ssid": "", + "password": "", + "ip": "", + "gw": "", + "netmask": "", + "sensorId": "" + }, + "thingspeak": { + "enabled": 0, + "apikey": "" + }, + "awsiot" : { + "enabled": 0, + "endpoint" : "a32on3oilq3poc.iot.eu-west-1.amazonaws.com", + "port" : 8443 + }, + "ota" : { + "interval" : 3600 + }, + "sensor" : { + "config" : { + "pms_enabled" : 1, + "bmx280_enabled": 1, + "mhz19_enabled" : 1, + "hcsr04_enabled": 1, + "ssd1306_enabled": 1, + "gpio_enabled" : 1, + "indoor" : 1, + "led" : 1, + "fan" : 0, + "heater" : 0, + "measTime" : 60, + "warmUpTime": 30, + "measInterval": 300, + "test" : 0, + "measStrategy" : 0, + "altitude" : 573, + "tempOffset" : 0, + "humidityOffset" : 0 + } + }, + "http_get_publisher": { + "enabled": 0, + "url": "https://ota-sensor:MohD5lew@stb.42u.de/pushvals.cgi" + } +} diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index d13d792..433a42a 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -55,6 +55,7 @@ typedef struct { int64_t GPIlastHigh; int64_t GPICounter; int64_t GPOlastOut; + int8_t GPOlastVal; } gpio; }; } env_data_t; diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 3619438..7223283 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 6 +#define OAP_VER_PATCH 10 typedef struct { uint8_t major; diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index faf296e..91a81f2 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -52,7 +52,8 @@ static void publish(hw_gpio_config_t* config) { .gpio.GPIlastHigh=config->GPIlastHigh, .gpio.GPIlastLow=config->GPIlastLow, .gpio.GPICounter=config->GPICounter, - .gpio.GPOlastOut=config->GPOlastOut + .gpio.GPOlastOut=config->GPOlastOut, + .gpio.GPOlastVal=config->GPOlastVal }; config->callback(&result); } @@ -61,7 +62,7 @@ static void publish(hw_gpio_config_t* config) { esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { gpio_set_level(config->output_pin, value); config->GPOtriggerLength=delay; - config->GPOlastval=value; + config->GPOlastVal=value; config->GPOlastOut=get_time_millis(); publish(config); return ESP_OK; @@ -161,7 +162,9 @@ static void hw_gpio_task(hw_gpio_config_t* config) { } #endif if(config->GPOtriggerLength && (get_time_millis()-config->GPOlastOut) >= config->GPOtriggerLength) { - gpio_set_level(config->output_pin, !config->GPOlastval); + config->GPOlastVal=!config->GPOlastVal; + config->GPOlastOut=get_time_millis(); + gpio_set_level(config->output_pin, config->GPOlastVal); config->GPOtriggerLength=0; } } diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index 1d380f6..1b0ecc8 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -44,7 +44,7 @@ typedef struct { int64_t GPOlastOut; int64_t GPICounter; int32_t GPOtriggerLength; - int8_t GPOlastval; + int8_t GPOlastVal; int64_t lastPublish; } hw_gpio_config_t; diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 5575669..9915990 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -215,6 +215,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj5, "GPIlastHigh", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj5, "GPICounter", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj5, "GPOlastOut", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj5, "GPOlastVal", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj5, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[5].timestamp)); } #endif @@ -226,6 +227,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj6, "GPICounter", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj6, "GPIlastHigh", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj6, "GPOlastOut", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj6, "GPOlastVal", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj6, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[6].timestamp)); } #endif @@ -237,6 +239,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj7, "GPIlastHigh", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj7, "GPICounter", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj7, "GPOlastOut", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj7, "GPOlastVal", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj7, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[7].timestamp)); } #endif @@ -248,6 +251,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj8, "GPIlastHigh", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj8, "GPICounter", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj8, "GPOlastOut", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj8, "GPOlastVal", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj8, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[8].timestamp)); } #endif diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index bf8112e..4d006b8 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -455,16 +455,16 @@

    OpenAirProject Sensorsensor_idx, env_data->hcsr04.distance);break; case sensor_gpio: - ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut);break; + ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu, GPOlastVal: %d ", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut, env_data->gpio.GPOlastVal);break; } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); From 968aa88640560c3a68201bced86b321203940550 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 5 May 2018 19:40:05 +0200 Subject: [PATCH 180/200] add GPOlastVal to status, version 1.4.10 --- components/oap-common/include/oap_data_env.h | 1 + components/oap-common/include/oap_version.h | 2 +- components/oap-hw-gpio/hw_gpio.c | 9 ++++++--- components/oap-hw-gpio/include/hw_gpio.h | 2 +- components/oap-wifi/cpanel.c | 4 ++++ components/oap-wifi/index.html | 8 ++++---- main/main.c | 2 +- 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index d13d792..433a42a 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -55,6 +55,7 @@ typedef struct { int64_t GPIlastHigh; int64_t GPICounter; int64_t GPOlastOut; + int8_t GPOlastVal; } gpio; }; } env_data_t; diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 3619438..7223283 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 6 +#define OAP_VER_PATCH 10 typedef struct { uint8_t major; diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index faf296e..91a81f2 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -52,7 +52,8 @@ static void publish(hw_gpio_config_t* config) { .gpio.GPIlastHigh=config->GPIlastHigh, .gpio.GPIlastLow=config->GPIlastLow, .gpio.GPICounter=config->GPICounter, - .gpio.GPOlastOut=config->GPOlastOut + .gpio.GPOlastOut=config->GPOlastOut, + .gpio.GPOlastVal=config->GPOlastVal }; config->callback(&result); } @@ -61,7 +62,7 @@ static void publish(hw_gpio_config_t* config) { esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { gpio_set_level(config->output_pin, value); config->GPOtriggerLength=delay; - config->GPOlastval=value; + config->GPOlastVal=value; config->GPOlastOut=get_time_millis(); publish(config); return ESP_OK; @@ -161,7 +162,9 @@ static void hw_gpio_task(hw_gpio_config_t* config) { } #endif if(config->GPOtriggerLength && (get_time_millis()-config->GPOlastOut) >= config->GPOtriggerLength) { - gpio_set_level(config->output_pin, !config->GPOlastval); + config->GPOlastVal=!config->GPOlastVal; + config->GPOlastOut=get_time_millis(); + gpio_set_level(config->output_pin, config->GPOlastVal); config->GPOtriggerLength=0; } } diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index 1d380f6..1b0ecc8 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -44,7 +44,7 @@ typedef struct { int64_t GPOlastOut; int64_t GPICounter; int32_t GPOtriggerLength; - int8_t GPOlastval; + int8_t GPOlastVal; int64_t lastPublish; } hw_gpio_config_t; diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 5575669..9915990 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -215,6 +215,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj5, "GPIlastHigh", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj5, "GPICounter", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj5, "GPOlastOut", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj5, "GPOlastVal", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj5, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[5].timestamp)); } #endif @@ -226,6 +227,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj6, "GPICounter", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj6, "GPIlastHigh", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj6, "GPOlastOut", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj6, "GPOlastVal", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj6, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[6].timestamp)); } #endif @@ -237,6 +239,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj7, "GPIlastHigh", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj7, "GPICounter", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj7, "GPOlastOut", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj7, "GPOlastVal", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj7, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[7].timestamp)); } #endif @@ -248,6 +251,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj8, "GPIlastHigh", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj8, "GPICounter", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj8, "GPOlastOut", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj8, "GPOlastVal", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj8, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[8].timestamp)); } #endif diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index bf8112e..4d006b8 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -455,16 +455,16 @@

    OpenAirProject Sensorsensor_idx, env_data->hcsr04.distance);break; case sensor_gpio: - ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut);break; + ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu, GPOlastVal: %d ", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut, env_data->gpio.GPOlastVal);break; } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); From 308d7eec880ce355b6156dc3deb4cf79dbedaa4c Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sat, 5 May 2018 19:40:05 +0200 Subject: [PATCH 181/200] add GPOlastVal to status, version 1.4.10 --- components/oap-common/include/oap_data_env.h | 1 + components/oap-common/include/oap_version.h | 2 +- components/oap-hw-gpio/hw_gpio.c | 9 ++++++--- components/oap-hw-gpio/include/hw_gpio.h | 2 +- components/oap-wifi/cpanel.c | 4 ++++ components/oap-wifi/index.html | 8 ++++---- main/main.c | 2 +- 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/components/oap-common/include/oap_data_env.h b/components/oap-common/include/oap_data_env.h index d13d792..433a42a 100644 --- a/components/oap-common/include/oap_data_env.h +++ b/components/oap-common/include/oap_data_env.h @@ -55,6 +55,7 @@ typedef struct { int64_t GPIlastHigh; int64_t GPICounter; int64_t GPOlastOut; + int8_t GPOlastVal; } gpio; }; } env_data_t; diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 3619438..7223283 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 6 +#define OAP_VER_PATCH 10 typedef struct { uint8_t major; diff --git a/components/oap-hw-gpio/hw_gpio.c b/components/oap-hw-gpio/hw_gpio.c index faf296e..91a81f2 100644 --- a/components/oap-hw-gpio/hw_gpio.c +++ b/components/oap-hw-gpio/hw_gpio.c @@ -52,7 +52,8 @@ static void publish(hw_gpio_config_t* config) { .gpio.GPIlastHigh=config->GPIlastHigh, .gpio.GPIlastLow=config->GPIlastLow, .gpio.GPICounter=config->GPICounter, - .gpio.GPOlastOut=config->GPOlastOut + .gpio.GPOlastOut=config->GPOlastOut, + .gpio.GPOlastVal=config->GPOlastVal }; config->callback(&result); } @@ -61,7 +62,7 @@ static void publish(hw_gpio_config_t* config) { esp_err_t hw_gpio_send_trigger(hw_gpio_config_t* config, int value, int delay) { gpio_set_level(config->output_pin, value); config->GPOtriggerLength=delay; - config->GPOlastval=value; + config->GPOlastVal=value; config->GPOlastOut=get_time_millis(); publish(config); return ESP_OK; @@ -161,7 +162,9 @@ static void hw_gpio_task(hw_gpio_config_t* config) { } #endif if(config->GPOtriggerLength && (get_time_millis()-config->GPOlastOut) >= config->GPOtriggerLength) { - gpio_set_level(config->output_pin, !config->GPOlastval); + config->GPOlastVal=!config->GPOlastVal; + config->GPOlastOut=get_time_millis(); + gpio_set_level(config->output_pin, config->GPOlastVal); config->GPOtriggerLength=0; } } diff --git a/components/oap-hw-gpio/include/hw_gpio.h b/components/oap-hw-gpio/include/hw_gpio.h index 1d380f6..1b0ecc8 100644 --- a/components/oap-hw-gpio/include/hw_gpio.h +++ b/components/oap-hw-gpio/include/hw_gpio.h @@ -44,7 +44,7 @@ typedef struct { int64_t GPOlastOut; int64_t GPICounter; int32_t GPOtriggerLength; - int8_t GPOlastval; + int8_t GPOlastVal; int64_t lastPublish; } hw_gpio_config_t; diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/cpanel.c index 5575669..9915990 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/cpanel.c @@ -215,6 +215,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj5, "GPIlastHigh", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj5, "GPICounter", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj5, "GPOlastOut", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj5, "GPOlastVal", cJSON_CreateNumber(last_env_data[5].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj5, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[5].timestamp)); } #endif @@ -226,6 +227,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj6, "GPICounter", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj6, "GPIlastHigh", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj6, "GPOlastOut", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj6, "GPOlastVal", cJSON_CreateNumber(last_env_data[6].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj6, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[6].timestamp)); } #endif @@ -237,6 +239,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj7, "GPIlastHigh", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj7, "GPICounter", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj7, "GPOlastOut", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj7, "GPOlastVal", cJSON_CreateNumber(last_env_data[7].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj7, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[7].timestamp)); } #endif @@ -248,6 +251,7 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me cJSON_AddItemToObject(envobj8, "GPIlastHigh", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPIlastHigh)); cJSON_AddItemToObject(envobj8, "GPICounter", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPICounter)); cJSON_AddItemToObject(envobj8, "GPOlastOut", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastOut)); + cJSON_AddItemToObject(envobj8, "GPOlastVal", cJSON_CreateNumber(last_env_data[8].env_data.gpio.GPOlastVal)); cJSON_AddItemToObject(envobj8, "timestamp", cJSON_CreateNumber(sysTime - last_env_data[8].timestamp)); } #endif diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index bf8112e..4d006b8 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -455,16 +455,16 @@

    OpenAirProject Sensorsensor_idx, env_data->hcsr04.distance);break; case sensor_gpio: - ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut);break; + ESP_LOGI(TAG, "env (%d): GPIlastLow: %llu, GPIlastHigh: %llu, GPICounter: %llu, GPOlastOut: %llu, GPOlastVal: %d ", env_data->sensor_idx, env_data->gpio.GPIlastLow, env_data->gpio.GPIlastHigh, env_data->gpio.GPICounter, env_data->gpio.GPOlastOut, env_data->gpio.GPOlastVal);break; } env_data_record_t* r = last_env_data + env_data->sensor_idx; r->timestamp = oap_epoch_sec(); From 999894caf219d9712c93f11c11935562c50e19e9 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 7 May 2018 09:11:36 +0200 Subject: [PATCH 182/200] set subsystems to disabled by default --- components/oap-common/default_config.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/components/oap-common/default_config.json b/components/oap-common/default_config.json index bb828d0..47f51cd 100644 --- a/components/oap-common/default_config.json +++ b/components/oap-common/default_config.json @@ -21,11 +21,11 @@ }, "sensor" : { "config" : { - "pms_enabled" : 1, - "bmx280_enabled": 1, - "mhz19_enabled" : 1, - "hcsr04_enabled": 1, - "ssd1306_enabled": 1, + "pms_enabled" : 0, + "bmx280_enabled": 0, + "mhz19_enabled" : 0, + "hcsr04_enabled": 0, + "ssd1306_enabled": 0, "gpio_enabled" : 1, "indoor" : 1, "led" : 1, @@ -43,6 +43,6 @@ }, "http_get_publisher": { "enabled": 0, - "url": "https://ota-sensor:MohD5lew@stb.42u.de/pushvals.cgi" + "url": "https:///pushvals.cgi" } } From 55c981fb0e0b214d02b623583a8468653d049421 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 7 May 2018 09:11:36 +0200 Subject: [PATCH 183/200] set subsystems to disabled by default --- components/oap-common/default_config.json | 48 +++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 components/oap-common/default_config.json diff --git a/components/oap-common/default_config.json b/components/oap-common/default_config.json new file mode 100644 index 0000000..47f51cd --- /dev/null +++ b/components/oap-common/default_config.json @@ -0,0 +1,48 @@ +{ + "wifi": { + "ssid": "", + "password": "", + "ip": "", + "gw": "", + "netmask": "", + "sensorId": "" + }, + "thingspeak": { + "enabled": 0, + "apikey": "" + }, + "awsiot" : { + "enabled": 0, + "endpoint" : "a32on3oilq3poc.iot.eu-west-1.amazonaws.com", + "port" : 8443 + }, + "ota" : { + "interval" : 3600 + }, + "sensor" : { + "config" : { + "pms_enabled" : 0, + "bmx280_enabled": 0, + "mhz19_enabled" : 0, + "hcsr04_enabled": 0, + "ssd1306_enabled": 0, + "gpio_enabled" : 1, + "indoor" : 1, + "led" : 1, + "fan" : 0, + "heater" : 0, + "measTime" : 60, + "warmUpTime": 30, + "measInterval": 300, + "test" : 0, + "measStrategy" : 0, + "altitude" : 573, + "tempOffset" : 0, + "humidityOffset" : 0 + } + }, + "http_get_publisher": { + "enabled": 0, + "url": "https:///pushvals.cgi" + } +} From 270501be81027873c8fe0c28beb55792d4877a46 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 7 May 2018 09:11:36 +0200 Subject: [PATCH 184/200] set subsystems to disabled by default From 7b42fdfbb247aafe741b4b31058c9246d0e7da0c Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Mon, 7 May 2018 10:47:30 +0200 Subject: [PATCH 185/200] fix index.html, version 1.4.11 --- components/oap-common/include/oap_version.h | 2 +- components/oap-wifi/index.html | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 7223283..2737706 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 10 +#define OAP_VER_PATCH 11 typedef struct { uint8_t major; diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index 4d006b8..def5e63 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -455,16 +455,16 @@

    OpenAirProject Sensor Date: Tue, 8 May 2018 19:01:09 +0200 Subject: [PATCH 186/200] make status-url relative --- components/oap-common/include/oap_version.h | 2 +- components/oap-wifi/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 2737706..30a6ec0 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 11 +#define OAP_VER_PATCH 12 typedef struct { uint8_t major; diff --git a/components/oap-wifi/index.html b/components/oap-wifi/index.html index def5e63..8646fcf 100644 --- a/components/oap-wifi/index.html +++ b/components/oap-wifi/index.html @@ -428,7 +428,7 @@

    OpenAirProject Sensor "; - - mg_send_response_line(nc, 200, opts->extra_headers); - mg_printf(nc, "%s: %s\r\n%s: %s\r\n\r\n", "Transfer-Encoding", "chunked", - "Content-Type", "text/html; charset=utf-8"); - - mg_printf_http_chunk( - nc, - "Index of %.*s%s%s" - "\n" - "

    Index of %.*s

    \n" - "" - "\n" - "\n" - "", - (int) hm->uri.len, hm->uri.p, sort_js_code, sort_js_code2, - (int) hm->uri.len, hm->uri.p); - mg_scan_directory(nc, dir, opts, mg_print_dir_entry); - mg_printf_http_chunk(nc, - "\n" - "
    Name" - "Modified" - "Size


    \n" - "
    %s
    \n" - "", - mg_version_header); - mg_send_http_chunk(nc, "", 0); - /* TODO(rojer): Remove when cesanta/dev/issues/197 is fixed. */ - nc->flags |= MG_F_SEND_AND_CLOSE; -} -#endif /* MG_ENABLE_DIRECTORY_LISTING */ - -/* - * Given a directory path, find one of the files specified in the - * comma-separated list of index files `list`. - * First found index file wins. If an index file is found, then gets - * appended to the `path`, stat-ed, and result of `stat()` passed to `stp`. - * If index file is not found, then `path` and `stp` remain unchanged. - */ -MG_INTERNAL void mg_find_index_file(const char *path, const char *list, - char **index_file, cs_stat_t *stp) { - struct mg_str vec; - size_t path_len = strlen(path); - int found = 0; - *index_file = NULL; - - /* Traverse index files list. For each entry, append it to the given */ - /* path and see if the file exists. If it exists, break the loop */ - while ((list = mg_next_comma_list_entry(list, &vec, NULL)) != NULL) { - cs_stat_t st; - size_t len = path_len + 1 + vec.len + 1; - *index_file = (char *) MG_REALLOC(*index_file, len); - if (*index_file == NULL) break; - snprintf(*index_file, len, "%s%c%.*s", path, DIRSEP, (int) vec.len, vec.p); - - /* Does it exist? Is it a file? */ - if (mg_stat(*index_file, &st) == 0 && S_ISREG(st.st_mode)) { - /* Yes it does, break the loop */ - *stp = st; - found = 1; - break; - } - } - if (!found) { - MG_FREE(*index_file); - *index_file = NULL; - } - LOG(LL_DEBUG, ("[%s] [%s]", path, (*index_file ? *index_file : ""))); -} - -#if MG_ENABLE_HTTP_URL_REWRITES -static int mg_http_send_port_based_redirect( - struct mg_connection *c, struct http_message *hm, - const struct mg_serve_http_opts *opts) { - const char *rewrites = opts->url_rewrites; - struct mg_str a, b; - char local_port[20] = {'%'}; - - mg_conn_addr_to_str(c, local_port + 1, sizeof(local_port) - 1, - MG_SOCK_STRINGIFY_PORT); - - while ((rewrites = mg_next_comma_list_entry(rewrites, &a, &b)) != NULL) { - if (mg_vcmp(&a, local_port) == 0) { - mg_send_response_line(c, 301, NULL); - mg_printf(c, "Content-Length: 0\r\nLocation: %.*s%.*s\r\n\r\n", - (int) b.len, b.p, (int) (hm->proto.p - hm->uri.p - 1), - hm->uri.p); - return 1; - } - } - - return 0; -} - -static void mg_reverse_proxy_handler(struct mg_connection *nc, int ev, - void *ev_data) { - struct http_message *hm = (struct http_message *) ev_data; - struct mg_http_proto_data *pd = mg_http_get_proto_data(nc); - - if (pd == NULL || pd->reverse_proxy_data.linked_conn == NULL) { - DBG(("%p: upstream closed", nc)); - return; - } - - switch (ev) { - case MG_EV_CONNECT: - if (*(int *) ev_data != 0) { - mg_http_send_error(pd->reverse_proxy_data.linked_conn, 502, NULL); - } - break; - /* TODO(mkm): handle streaming */ - case MG_EV_HTTP_REPLY: - mg_send(pd->reverse_proxy_data.linked_conn, hm->message.p, - hm->message.len); - pd->reverse_proxy_data.linked_conn->flags |= MG_F_SEND_AND_CLOSE; - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - break; - case MG_EV_CLOSE: - pd->reverse_proxy_data.linked_conn->flags |= MG_F_SEND_AND_CLOSE; - break; - } -} - -void mg_http_reverse_proxy(struct mg_connection *nc, - const struct http_message *hm, struct mg_str mount, - struct mg_str upstream) { - struct mg_connection *be; - char burl[256], *purl = burl; - char *addr = NULL; - const char *path = NULL; - int i; - const char *error; - struct mg_connect_opts opts; - memset(&opts, 0, sizeof(opts)); - opts.error_string = &error; - - mg_asprintf(&purl, sizeof(burl), "%.*s%.*s", (int) upstream.len, upstream.p, - (int) (hm->uri.len - mount.len), hm->uri.p + mount.len); - - be = mg_connect_http_base(nc->mgr, mg_reverse_proxy_handler, opts, "http://", - "https://", purl, &path, NULL /* user */, - NULL /* pass */, &addr); - LOG(LL_DEBUG, ("Proxying %.*s to %s (rule: %.*s)", (int) hm->uri.len, - hm->uri.p, purl, (int) mount.len, mount.p)); - - if (be == NULL) { - LOG(LL_ERROR, ("Error connecting to %s: %s", purl, error)); - mg_http_send_error(nc, 502, NULL); - goto cleanup; - } - - /* link connections to each other, they must live and die together */ - mg_http_get_proto_data(be)->reverse_proxy_data.linked_conn = nc; - mg_http_get_proto_data(nc)->reverse_proxy_data.linked_conn = be; - - /* send request upstream */ - mg_printf(be, "%.*s %s HTTP/1.1\r\n", (int) hm->method.len, hm->method.p, - path); - - mg_printf(be, "Host: %s\r\n", addr); - for (i = 0; i < MG_MAX_HTTP_HEADERS && hm->header_names[i].len > 0; i++) { - struct mg_str hn = hm->header_names[i]; - struct mg_str hv = hm->header_values[i]; - - /* we rewrite the host header */ - if (mg_vcasecmp(&hn, "Host") == 0) continue; - /* - * Don't pass chunked transfer encoding to the client because hm->body is - * already dechunked when we arrive here. - */ - if (mg_vcasecmp(&hn, "Transfer-encoding") == 0 && - mg_vcasecmp(&hv, "chunked") == 0) { - mg_printf(be, "Content-Length: %" SIZE_T_FMT "\r\n", hm->body.len); - continue; - } - /* We don't support proxying Expect: 100-continue. */ - if (mg_vcasecmp(&hn, "Expect") == 0 && - mg_vcasecmp(&hv, "100-continue") == 0) { - continue; - } - - mg_printf(be, "%.*s: %.*s\r\n", (int) hn.len, hn.p, (int) hv.len, hv.p); - } - - mg_send(be, "\r\n", 2); - mg_send(be, hm->body.p, hm->body.len); - -cleanup: - if (purl != burl) MG_FREE(purl); -} - -static int mg_http_handle_forwarding(struct mg_connection *nc, - struct http_message *hm, - const struct mg_serve_http_opts *opts) { - const char *rewrites = opts->url_rewrites; - struct mg_str a, b; - struct mg_str p1 = MG_MK_STR("http://"), p2 = MG_MK_STR("https://"); - - while ((rewrites = mg_next_comma_list_entry(rewrites, &a, &b)) != NULL) { - if (mg_strncmp(a, hm->uri, a.len) == 0) { - if (mg_strncmp(b, p1, p1.len) == 0 || mg_strncmp(b, p2, p2.len) == 0) { - mg_http_reverse_proxy(nc, hm, a, b); - return 1; - } - } - } - - return 0; -} -#endif - -MG_INTERNAL int mg_uri_to_local_path(struct http_message *hm, - const struct mg_serve_http_opts *opts, - char **local_path, - struct mg_str *remainder) { - int ok = 1; - const char *cp = hm->uri.p, *cp_end = hm->uri.p + hm->uri.len; - struct mg_str root = {NULL, 0}; - const char *file_uri_start = cp; - *local_path = NULL; - remainder->p = NULL; - remainder->len = 0; - - { /* 1. Determine which root to use. */ - -#if MG_ENABLE_HTTP_URL_REWRITES - const char *rewrites = opts->url_rewrites; -#else - const char *rewrites = ""; -#endif - struct mg_str *hh = mg_get_http_header(hm, "Host"); - struct mg_str a, b; - /* Check rewrites first. */ - while ((rewrites = mg_next_comma_list_entry(rewrites, &a, &b)) != NULL) { - if (a.len > 1 && a.p[0] == '@') { - /* Host rewrite. */ - if (hh != NULL && hh->len == a.len - 1 && - mg_ncasecmp(a.p + 1, hh->p, a.len - 1) == 0) { - root = b; - break; - } - } else { - /* Regular rewrite, URI=directory */ - int match_len = mg_match_prefix_n(a, hm->uri); - if (match_len > 0) { - file_uri_start = hm->uri.p + match_len; - if (*file_uri_start == '/' || file_uri_start == cp_end) { - /* Match ended at component boundary, ok. */ - } else if (*(file_uri_start - 1) == '/') { - /* Pattern ends with '/', backtrack. */ - file_uri_start--; - } else { - /* No match: must fall on the component boundary. */ - continue; - } - root = b; - break; - } - } - } - /* If no rewrite rules matched, use DAV or regular document root. */ - if (root.p == NULL) { -#if MG_ENABLE_HTTP_WEBDAV - if (opts->dav_document_root != NULL && mg_is_dav_request(&hm->method)) { - root.p = opts->dav_document_root; - root.len = strlen(opts->dav_document_root); - } else -#endif - { - root.p = opts->document_root; - root.len = strlen(opts->document_root); - } - } - assert(root.p != NULL && root.len > 0); - } - - { /* 2. Find where in the canonical URI path the local path ends. */ - const char *u = file_uri_start + 1; - char *lp = (char *) MG_MALLOC(root.len + hm->uri.len + 1); - char *lp_end = lp + root.len + hm->uri.len + 1; - char *p = lp, *ps; - int exists = 1; - if (lp == NULL) { - ok = 0; - goto out; - } - memcpy(p, root.p, root.len); - p += root.len; - if (*(p - 1) == DIRSEP) p--; - *p = '\0'; - ps = p; - - /* Chop off URI path components one by one and build local path. */ - while (u <= cp_end) { - const char *next = u; - struct mg_str component; - if (exists) { - cs_stat_t st; - exists = (mg_stat(lp, &st) == 0); - if (exists && S_ISREG(st.st_mode)) { - /* We found the terminal, the rest of the URI (if any) is path_info. - */ - if (*(u - 1) == '/') u--; - break; - } - } - if (u >= cp_end) break; - parse_uri_component((const char **) &next, cp_end, '/', &component); - if (component.len > 0) { - int len; - memmove(p + 1, component.p, component.len); - len = mg_url_decode(p + 1, component.len, p + 1, lp_end - p - 1, 0); - if (len <= 0) { - ok = 0; - break; - } - component.p = p + 1; - component.len = len; - if (mg_vcmp(&component, ".") == 0) { - /* Yum. */ - } else if (mg_vcmp(&component, "..") == 0) { - while (p > ps && *p != DIRSEP) p--; - *p = '\0'; - } else { - size_t i; -#ifdef _WIN32 - /* On Windows, make sure it's valid Unicode (no funny stuff). */ - wchar_t buf[MG_MAX_PATH * 2]; - if (to_wchar(component.p, buf, MG_MAX_PATH) == 0) { - DBG(("[%.*s] smells funny", (int) component.len, component.p)); - ok = 0; - break; - } -#endif - *p++ = DIRSEP; - /* No NULs and DIRSEPs in the component (percent-encoded). */ - for (i = 0; i < component.len; i++, p++) { - if (*p == '\0' || *p == DIRSEP -#ifdef _WIN32 - /* On Windows, "/" is also accepted, so check for that too. */ - || - *p == '/' -#endif - ) { - ok = 0; - break; - } - } - } - } - u = next; - } - if (ok) { - *local_path = lp; - if (u > cp_end) u = cp_end; - remainder->p = u; - remainder->len = cp_end - u; - } else { - MG_FREE(lp); - } - } - -out: - LOG(LL_DEBUG, - ("'%.*s' -> '%s' + '%.*s'", (int) hm->uri.len, hm->uri.p, - *local_path ? *local_path : "", (int) remainder->len, remainder->p)); - return ok; -} - -static int mg_get_month_index(const char *s) { - static const char *month_names[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; - size_t i; - - for (i = 0; i < ARRAY_SIZE(month_names); i++) - if (!strcmp(s, month_names[i])) return (int) i; - - return -1; -} - -static int mg_num_leap_years(int year) { - return year / 4 - year / 100 + year / 400; -} - -/* Parse UTC date-time string, and return the corresponding time_t value. */ -MG_INTERNAL time_t mg_parse_date_string(const char *datetime) { - static const unsigned short days_before_month[] = { - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; - char month_str[32]; - int second, minute, hour, day, month, year, leap_days, days; - time_t result = (time_t) 0; - - if (((sscanf(datetime, "%d/%3s/%d %d:%d:%d", &day, month_str, &year, &hour, - &minute, &second) == 6) || - (sscanf(datetime, "%d %3s %d %d:%d:%d", &day, month_str, &year, &hour, - &minute, &second) == 6) || - (sscanf(datetime, "%*3s, %d %3s %d %d:%d:%d", &day, month_str, &year, - &hour, &minute, &second) == 6) || - (sscanf(datetime, "%d-%3s-%d %d:%d:%d", &day, month_str, &year, &hour, - &minute, &second) == 6)) && - year > 1970 && (month = mg_get_month_index(month_str)) != -1) { - leap_days = mg_num_leap_years(year) - mg_num_leap_years(1970); - year -= 1970; - days = year * 365 + days_before_month[month] + (day - 1) + leap_days; - result = days * 24 * 3600 + hour * 3600 + minute * 60 + second; - } - - return result; -} - -MG_INTERNAL int mg_is_not_modified(struct http_message *hm, cs_stat_t *st) { - struct mg_str *hdr; - if ((hdr = mg_get_http_header(hm, "If-None-Match")) != NULL) { - char etag[64]; - mg_http_construct_etag(etag, sizeof(etag), st); - return mg_vcasecmp(hdr, etag) == 0; - } else if ((hdr = mg_get_http_header(hm, "If-Modified-Since")) != NULL) { - return st->st_mtime <= mg_parse_date_string(hdr->p); - } else { - return 0; - } -} - -static void mg_http_send_digest_auth_request(struct mg_connection *c, - const char *domain) { - mg_printf(c, - "HTTP/1.1 401 Unauthorized\r\n" - "WWW-Authenticate: Digest qop=\"auth\", " - "realm=\"%s\", nonce=\"%lu\"\r\n" - "Content-Length: 0\r\n\r\n", - domain, (unsigned long) mg_time()); -} - -static void mg_http_send_options(struct mg_connection *nc) { - mg_printf(nc, "%s", - "HTTP/1.1 200 OK\r\nAllow: GET, POST, HEAD, CONNECT, OPTIONS" -#if MG_ENABLE_HTTP_WEBDAV - ", MKCOL, PUT, DELETE, PROPFIND, MOVE\r\nDAV: 1,2" -#endif - "\r\n\r\n"); - nc->flags |= MG_F_SEND_AND_CLOSE; -} - -static int mg_is_creation_request(const struct http_message *hm) { - return mg_vcmp(&hm->method, "MKCOL") == 0 || mg_vcmp(&hm->method, "PUT") == 0; -} - -MG_INTERNAL void mg_send_http_file(struct mg_connection *nc, char *path, - const struct mg_str *path_info, - struct http_message *hm, - struct mg_serve_http_opts *opts) { - int exists, is_directory, is_cgi; -#if MG_ENABLE_HTTP_WEBDAV - int is_dav = mg_is_dav_request(&hm->method); -#else - int is_dav = 0; -#endif - char *index_file = NULL; - cs_stat_t st; - - exists = (mg_stat(path, &st) == 0); - is_directory = exists && S_ISDIR(st.st_mode); - - if (is_directory) - mg_find_index_file(path, opts->index_files, &index_file, &st); - - is_cgi = - (mg_match_prefix(opts->cgi_file_pattern, strlen(opts->cgi_file_pattern), - index_file ? index_file : path) > 0); - - LOG(LL_DEBUG, - ("%p %.*s [%s] exists=%d is_dir=%d is_dav=%d is_cgi=%d index=%s", nc, - (int) hm->method.len, hm->method.p, path, exists, is_directory, is_dav, - is_cgi, index_file ? index_file : "")); - - if (is_directory && hm->uri.p[hm->uri.len - 1] != '/' && !is_dav) { - mg_printf(nc, - "HTTP/1.1 301 Moved\r\nLocation: %.*s/\r\n" - "Content-Length: 0\r\n\r\n", - (int) hm->uri.len, hm->uri.p); - MG_FREE(index_file); - return; - } - - /* If we have path_info, the only way to handle it is CGI. */ - if (path_info->len > 0 && !is_cgi) { - mg_http_send_error(nc, 501, NULL); - MG_FREE(index_file); - return; - } - - if (is_dav && opts->dav_document_root == NULL) { - mg_http_send_error(nc, 501, NULL); - } else if (!mg_is_authorized(hm, path, is_directory, opts->auth_domain, - opts->global_auth_file, 1) || - !mg_is_authorized(hm, path, is_directory, opts->auth_domain, - opts->per_directory_auth_file, 0)) { - mg_http_send_digest_auth_request(nc, opts->auth_domain); - } else if (is_cgi) { -#if MG_ENABLE_HTTP_CGI - mg_handle_cgi(nc, index_file ? index_file : path, path_info, hm, opts); -#else - mg_http_send_error(nc, 501, NULL); -#endif /* MG_ENABLE_HTTP_CGI */ - } else if ((!exists || - mg_is_file_hidden(path, opts, 0 /* specials are ok */)) && - !mg_is_creation_request(hm)) { - mg_http_send_error(nc, 404, NULL); -#if MG_ENABLE_HTTP_WEBDAV - } else if (!mg_vcmp(&hm->method, "PROPFIND")) { - mg_handle_propfind(nc, path, &st, hm, opts); -#if !MG_DISABLE_DAV_AUTH - } else if (is_dav && - (opts->dav_auth_file == NULL || - (strcmp(opts->dav_auth_file, "-") != 0 && - !mg_is_authorized(hm, path, is_directory, opts->auth_domain, - opts->dav_auth_file, 1)))) { - mg_http_send_digest_auth_request(nc, opts->auth_domain); -#endif - } else if (!mg_vcmp(&hm->method, "MKCOL")) { - mg_handle_mkcol(nc, path, hm); - } else if (!mg_vcmp(&hm->method, "DELETE")) { - mg_handle_delete(nc, opts, path); - } else if (!mg_vcmp(&hm->method, "PUT")) { - mg_handle_put(nc, path, hm); - } else if (!mg_vcmp(&hm->method, "MOVE")) { - mg_handle_move(nc, opts, path, hm); -#if MG_ENABLE_FAKE_DAVLOCK - } else if (!mg_vcmp(&hm->method, "LOCK")) { - mg_handle_lock(nc, path); -#endif -#endif /* MG_ENABLE_HTTP_WEBDAV */ - } else if (!mg_vcmp(&hm->method, "OPTIONS")) { - mg_http_send_options(nc); - } else if (is_directory && index_file == NULL) { -#if MG_ENABLE_DIRECTORY_LISTING - if (strcmp(opts->enable_directory_listing, "yes") == 0) { - mg_send_directory_listing(nc, path, hm, opts); - } else { - mg_http_send_error(nc, 403, NULL); - } -#else - mg_http_send_error(nc, 501, NULL); -#endif - } else if (mg_is_not_modified(hm, &st)) { - mg_http_send_error(nc, 304, "Not Modified"); - } else { - mg_http_serve_file2(nc, index_file ? index_file : path, hm, opts); - } - MG_FREE(index_file); -} - -void mg_serve_http(struct mg_connection *nc, struct http_message *hm, - struct mg_serve_http_opts opts) { - char *path = NULL; - struct mg_str *hdr, path_info; - uint32_t remote_ip = ntohl(*(uint32_t *) &nc->sa.sin.sin_addr); - - if (mg_check_ip_acl(opts.ip_acl, remote_ip) != 1) { - /* Not allowed to connect */ - mg_http_send_error(nc, 403, NULL); - nc->flags |= MG_F_SEND_AND_CLOSE; - return; - } - -#if MG_ENABLE_HTTP_URL_REWRITES - if (mg_http_handle_forwarding(nc, hm, &opts)) { - return; - } - - if (mg_http_send_port_based_redirect(nc, hm, &opts)) { - return; - } -#endif - - if (opts.document_root == NULL) { - opts.document_root = "."; - } - if (opts.per_directory_auth_file == NULL) { - opts.per_directory_auth_file = ".htpasswd"; - } - if (opts.enable_directory_listing == NULL) { - opts.enable_directory_listing = "yes"; - } - if (opts.cgi_file_pattern == NULL) { - opts.cgi_file_pattern = "**.cgi$|**.php$"; - } - if (opts.ssi_pattern == NULL) { - opts.ssi_pattern = "**.shtml$|**.shtm$"; - } - if (opts.index_files == NULL) { - opts.index_files = "index.html,index.htm,index.shtml,index.cgi,index.php"; - } - /* Normalize path - resolve "." and ".." (in-place). */ - if (!mg_normalize_uri_path(&hm->uri, &hm->uri)) { - mg_http_send_error(nc, 400, NULL); - return; - } - if (mg_uri_to_local_path(hm, &opts, &path, &path_info) == 0) { - mg_http_send_error(nc, 404, NULL); - return; - } - mg_send_http_file(nc, path, &path_info, hm, &opts); - - MG_FREE(path); - path = NULL; - - /* Close connection for non-keep-alive requests */ - if (mg_vcmp(&hm->proto, "HTTP/1.1") != 0 || - ((hdr = mg_get_http_header(hm, "Connection")) != NULL && - mg_vcmp(hdr, "keep-alive") != 0)) { -#if 0 - nc->flags |= MG_F_SEND_AND_CLOSE; -#endif - } -} - -#if MG_ENABLE_HTTP_STREAMING_MULTIPART -void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data, - mg_fu_fname_fn local_name_fn) { - switch (ev) { - case MG_EV_HTTP_PART_BEGIN: { - struct mg_http_multipart_part *mp = - (struct mg_http_multipart_part *) ev_data; - struct file_upload_state *fus = - (struct file_upload_state *) calloc(1, sizeof(*fus)); - struct mg_str lfn = local_name_fn(nc, mg_mk_str(mp->file_name)); - mp->user_data = NULL; - if (lfn.p == NULL || lfn.len == 0) { - LOG(LL_ERROR, ("%p Not allowed to upload %s", nc, mp->file_name)); - mg_printf(nc, - "HTTP/1.1 403 Not Allowed\r\n" - "Content-Type: text/plain\r\n" - "Connection: close\r\n\r\n" - "Not allowed to upload %s\r\n", - mp->file_name); - nc->flags |= MG_F_SEND_AND_CLOSE; - return; - } - fus->lfn = (char *) malloc(lfn.len + 1); - memcpy(fus->lfn, lfn.p, lfn.len); - fus->lfn[lfn.len] = '\0'; - if (lfn.p != mp->file_name) free((char *) lfn.p); - LOG(LL_DEBUG, - ("%p Receiving file %s -> %s", nc, mp->file_name, fus->lfn)); - fus->fp = mg_fopen(fus->lfn, "w"); - if (fus->fp == NULL) { - mg_printf(nc, - "HTTP/1.1 500 Internal Server Error\r\n" - "Content-Type: text/plain\r\n" - "Connection: close\r\n\r\n"); - LOG(LL_ERROR, ("Failed to open %s: %d\n", fus->lfn, mg_get_errno())); - mg_printf(nc, "Failed to open %s: %d\n", fus->lfn, mg_get_errno()); - /* Do not close the connection just yet, discard remainder of the data. - * This is because at the time of writing some browsers (Chrome) fail to - * render response before all the data is sent. */ - } - mp->user_data = (void *) fus; - break; - } - case MG_EV_HTTP_PART_DATA: { - struct mg_http_multipart_part *mp = - (struct mg_http_multipart_part *) ev_data; - struct file_upload_state *fus = - (struct file_upload_state *) mp->user_data; - if (fus == NULL || fus->fp == NULL) break; - if (fwrite(mp->data.p, 1, mp->data.len, fus->fp) != mp->data.len) { - LOG(LL_ERROR, ("Failed to write to %s: %d, wrote %d", fus->lfn, - mg_get_errno(), (int) fus->num_recd)); - if (mg_get_errno() == ENOSPC -#ifdef SPIFFS_ERR_FULL - || mg_get_errno() == SPIFFS_ERR_FULL -#endif - ) { - mg_printf(nc, - "HTTP/1.1 413 Payload Too Large\r\n" - "Content-Type: text/plain\r\n" - "Connection: close\r\n\r\n"); - mg_printf(nc, "Failed to write to %s: no space left; wrote %d\r\n", - fus->lfn, (int) fus->num_recd); - } else { - mg_printf(nc, - "HTTP/1.1 500 Internal Server Error\r\n" - "Content-Type: text/plain\r\n" - "Connection: close\r\n\r\n"); - mg_printf(nc, "Failed to write to %s: %d, wrote %d", mp->file_name, - mg_get_errno(), (int) fus->num_recd); - } - fclose(fus->fp); - remove(fus->lfn); - fus->fp = NULL; - /* Do not close the connection just yet, discard remainder of the data. - * This is because at the time of writing some browsers (Chrome) fail to - * render response before all the data is sent. */ - return; - } - fus->num_recd += mp->data.len; - LOG(LL_DEBUG, ("%p rec'd %d bytes, %d total", nc, (int) mp->data.len, - (int) fus->num_recd)); - break; - } - case MG_EV_HTTP_PART_END: { - struct mg_http_multipart_part *mp = - (struct mg_http_multipart_part *) ev_data; - struct file_upload_state *fus = - (struct file_upload_state *) mp->user_data; - if (fus == NULL) break; - if (mp->status >= 0 && fus->fp != NULL) { - LOG(LL_DEBUG, ("%p Uploaded %s (%s), %d bytes", nc, mp->file_name, - fus->lfn, (int) fus->num_recd)); - mg_printf(nc, - "HTTP/1.1 200 OK\r\n" - "Content-Type: text/plain\r\n" - "Connection: close\r\n\r\n" - "Ok, %s - %d bytes.\r\n", - mp->file_name, (int) fus->num_recd); - } else { - LOG(LL_ERROR, ("Failed to store %s (%s)", mp->file_name, fus->lfn)); - /* - * mp->status < 0 means connection was terminated, so no reason to send - * HTTP reply - */ - } - if (fus->fp != NULL) fclose(fus->fp); - free(fus->lfn); - free(fus); - mp->user_data = NULL; - nc->flags |= MG_F_SEND_AND_CLOSE; - break; - } - } -} - -#endif /* MG_ENABLE_HTTP_STREAMING_MULTIPART */ -#endif /* MG_ENABLE_FILESYSTEM */ - -/* returns 0 on success, -1 on error */ -MG_INTERNAL int mg_http_common_url_parse(const char *url, const char *schema, - const char *schema_tls, int *use_ssl, - char **user, char **pass, char **addr, - int *port_i, const char **path) { - int addr_len = 0; - int auth_sep_pos = -1; - int user_sep_pos = -1; - int port_pos = -1; - (void) user; - (void) pass; - - if (strncmp(url, schema, strlen(schema)) == 0) { - url += strlen(schema); - } else if (strncmp(url, schema_tls, strlen(schema_tls)) == 0) { - url += strlen(schema_tls); - *use_ssl = 1; -#if !MG_ENABLE_SSL - return -1; /* SSL is not enabled, cannot do HTTPS URLs */ -#endif - } - - while (*url != '\0') { - *addr = (char *) MG_REALLOC(*addr, addr_len + 6 /* space for port too. */); - if (*addr == NULL) { - DBG(("OOM")); - return -1; - } - if (*url == '/') { - break; - } - if (*url == '@') { - auth_sep_pos = addr_len; - user_sep_pos = port_pos; - port_pos = -1; - } - if (*url == ':') port_pos = addr_len; - (*addr)[addr_len++] = *url; - (*addr)[addr_len] = '\0'; - url++; - } - - if (addr_len == 0) goto cleanup; - if (port_pos < 0) { - *port_i = addr_len; - addr_len += sprintf(*addr + addr_len, ":%d", *use_ssl ? 443 : 80); - } else { - *port_i = -1; - } - - if (*path == NULL) *path = url; - - if (**path == '\0') *path = "/"; - - if (user != NULL && pass != NULL) { - if (auth_sep_pos == -1) { - *user = NULL; - *pass = NULL; - } else { - /* user is from 0 to user_sep_pos */ - *user = (char *) MG_MALLOC(user_sep_pos + 1); - memcpy(*user, *addr, user_sep_pos); - (*user)[user_sep_pos] = '\0'; - /* pass is from user_sep_pos + 1 to auth_sep_pos */ - *pass = (char *) MG_MALLOC(auth_sep_pos - user_sep_pos - 1 + 1); - memcpy(*pass, *addr + user_sep_pos + 1, auth_sep_pos - user_sep_pos - 1); - (*pass)[auth_sep_pos - user_sep_pos - 1] = '\0'; - - /* move address proper to the front */ - memmove(*addr, *addr + auth_sep_pos + 1, addr_len - auth_sep_pos); - } - } - - DBG(("%s %s", *addr, *path)); - - return 0; - -cleanup: - MG_FREE(*addr); - return -1; -} - -struct mg_connection *mg_connect_http_base( - struct mg_mgr *mgr, mg_event_handler_t ev_handler, - struct mg_connect_opts opts, const char *schema, const char *schema_ssl, - const char *url, const char **path, char **user, char **pass, char **addr) { - struct mg_connection *nc = NULL; - int port_i = -1; - int use_ssl = 0; - - if (mg_http_common_url_parse(url, schema, schema_ssl, &use_ssl, user, pass, - addr, &port_i, path) < 0) { - MG_SET_PTRPTR(opts.error_string, "cannot parse url"); - return NULL; - } - - LOG(LL_DEBUG, ("%s use_ssl? %d", url, use_ssl)); - if (use_ssl) { -#if MG_ENABLE_SSL - /* - * Schema requires SSL, but no SSL parameters were provided in opts. - * In order to maintain backward compatibility, use a faux-SSL with no - * verification. - */ - if (opts.ssl_ca_cert == NULL) { - opts.ssl_ca_cert = "*"; - } -#else - MG_SET_PTRPTR(opts.error_string, "ssl is disabled"); - if (user != NULL) MG_FREE(*user); - if (pass != NULL) MG_FREE(*pass); - MG_FREE(*addr); - return NULL; -#endif - } - - if ((nc = mg_connect_opt(mgr, *addr, ev_handler, opts)) != NULL) { - mg_set_protocol_http_websocket(nc); - /* If the port was addred by us, restore the original host. */ - if (port_i >= 0) (*addr)[port_i] = '\0'; - } - - return nc; -} - -struct mg_connection *mg_connect_http_opt(struct mg_mgr *mgr, - mg_event_handler_t ev_handler, - struct mg_connect_opts opts, - const char *url, - const char *extra_headers, - const char *post_data) { - char *user = NULL, *pass = NULL, *addr = NULL; - const char *path = NULL; - struct mbuf auth; - struct mg_connection *nc = - mg_connect_http_base(mgr, ev_handler, opts, "http://", "https://", url, - &path, &user, &pass, &addr); - - if (nc == NULL) { - return NULL; - } - - mbuf_init(&auth, 0); - if (user != NULL) { - mg_basic_auth_header(user, pass, &auth); - } - - mg_printf(nc, "%s %s HTTP/1.1\r\nHost: %s\r\nContent-Length: %" SIZE_T_FMT - "\r\n%.*s%s\r\n%s", - post_data == NULL ? "GET" : "POST", path, addr, - post_data == NULL ? 0 : strlen(post_data), (int) auth.len, - (auth.buf == NULL ? "" : auth.buf), - extra_headers == NULL ? "" : extra_headers, - post_data == NULL ? "" : post_data); - - mbuf_free(&auth); - MG_FREE(user); - MG_FREE(pass); - MG_FREE(addr); - return nc; -} - -struct mg_connection *mg_connect_http(struct mg_mgr *mgr, - mg_event_handler_t ev_handler, - const char *url, - const char *extra_headers, - const char *post_data) { - struct mg_connect_opts opts; - memset(&opts, 0, sizeof(opts)); - return mg_connect_http_opt(mgr, ev_handler, opts, url, extra_headers, - post_data); -} - -size_t mg_parse_multipart(const char *buf, size_t buf_len, char *var_name, - size_t var_name_len, char *file_name, - size_t file_name_len, const char **data, - size_t *data_len) { - static const char cd[] = "Content-Disposition: "; - size_t hl, bl, n, ll, pos, cdl = sizeof(cd) - 1; - - if (buf == NULL || buf_len <= 0) return 0; - if ((hl = mg_http_get_request_len(buf, buf_len)) <= 0) return 0; - if (buf[0] != '-' || buf[1] != '-' || buf[2] == '\n') return 0; - - /* Get boundary length */ - bl = mg_get_line_len(buf, buf_len); - - /* Loop through headers, fetch variable name and file name */ - var_name[0] = file_name[0] = '\0'; - for (n = bl; (ll = mg_get_line_len(buf + n, hl - n)) > 0; n += ll) { - if (mg_ncasecmp(cd, buf + n, cdl) == 0) { - struct mg_str header; - header.p = buf + n + cdl; - header.len = ll - (cdl + 2); - mg_http_parse_header(&header, "name", var_name, var_name_len); - mg_http_parse_header(&header, "filename", file_name, file_name_len); - } - } - - /* Scan through the body, search for terminating boundary */ - for (pos = hl; pos + (bl - 2) < buf_len; pos++) { - if (buf[pos] == '-' && !strncmp(buf, &buf[pos], bl - 2)) { - if (data_len != NULL) *data_len = (pos - 2) - hl; - if (data != NULL) *data = buf + hl; - return pos; - } - } - - return 0; -} - -void mg_register_http_endpoint(struct mg_connection *nc, const char *uri_path, - mg_event_handler_t handler) { - struct mg_http_proto_data *pd = NULL; - struct mg_http_endpoint *new_ep = NULL; - - if (nc == NULL) return; - new_ep = (struct mg_http_endpoint *) calloc(1, sizeof(*new_ep)); - if (new_ep == NULL) return; - - pd = mg_http_get_proto_data(nc); - new_ep->name = strdup(uri_path); - new_ep->name_len = strlen(new_ep->name); - new_ep->handler = handler; - new_ep->next = pd->endpoints; - pd->endpoints = new_ep; -} - -#endif /* MG_ENABLE_HTTP */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/http_cgi.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_HTTP && MG_ENABLE_HTTP_CGI - -#ifndef MG_MAX_CGI_ENVIR_VARS -#define MG_MAX_CGI_ENVIR_VARS 64 -#endif - -#ifndef MG_ENV_EXPORT_TO_CGI -#define MG_ENV_EXPORT_TO_CGI "MONGOOSE_CGI" -#endif - -/* - * This structure helps to create an environment for the spawned CGI program. - * Environment is an array of "VARIABLE=VALUE\0" ASCIIZ strings, - * last element must be NULL. - * However, on Windows there is a requirement that all these VARIABLE=VALUE\0 - * strings must reside in a contiguous buffer. The end of the buffer is - * marked by two '\0' characters. - * We satisfy both worlds: we create an envp array (which is vars), all - * entries are actually pointers inside buf. - */ -struct mg_cgi_env_block { - struct mg_connection *nc; - char buf[MG_CGI_ENVIRONMENT_SIZE]; /* Environment buffer */ - const char *vars[MG_MAX_CGI_ENVIR_VARS]; /* char *envp[] */ - int len; /* Space taken */ - int nvars; /* Number of variables in envp[] */ -}; - -#ifdef _WIN32 -struct mg_threadparam { - sock_t s; - HANDLE hPipe; -}; - -static int mg_wait_until_ready(sock_t sock, int for_read) { - fd_set set; - FD_ZERO(&set); - FD_SET(sock, &set); - return select(sock + 1, for_read ? &set : 0, for_read ? 0 : &set, 0, 0) == 1; -} - -static void *mg_push_to_stdin(void *arg) { - struct mg_threadparam *tp = (struct mg_threadparam *) arg; - int n, sent, stop = 0; - DWORD k; - char buf[BUFSIZ]; - - while (!stop && mg_wait_until_ready(tp->s, 1) && - (n = recv(tp->s, buf, sizeof(buf), 0)) > 0) { - if (n == -1 && GetLastError() == WSAEWOULDBLOCK) continue; - for (sent = 0; !stop && sent < n; sent += k) { - if (!WriteFile(tp->hPipe, buf + sent, n - sent, &k, 0)) stop = 1; - } - } - DBG(("%s", "FORWARED EVERYTHING TO CGI")); - CloseHandle(tp->hPipe); - MG_FREE(tp); - return NULL; -} - -static void *mg_pull_from_stdout(void *arg) { - struct mg_threadparam *tp = (struct mg_threadparam *) arg; - int k = 0, stop = 0; - DWORD n, sent; - char buf[BUFSIZ]; - - while (!stop && ReadFile(tp->hPipe, buf, sizeof(buf), &n, NULL)) { - for (sent = 0; !stop && sent < n; sent += k) { - if (mg_wait_until_ready(tp->s, 0) && - (k = send(tp->s, buf + sent, n - sent, 0)) <= 0) - stop = 1; - } - } - DBG(("%s", "EOF FROM CGI")); - CloseHandle(tp->hPipe); - shutdown(tp->s, 2); // Without this, IO thread may get truncated data - closesocket(tp->s); - MG_FREE(tp); - return NULL; -} - -static void mg_spawn_stdio_thread(sock_t sock, HANDLE hPipe, - void *(*func)(void *)) { - struct mg_threadparam *tp = (struct mg_threadparam *) MG_MALLOC(sizeof(*tp)); - if (tp != NULL) { - tp->s = sock; - tp->hPipe = hPipe; - mg_start_thread(func, tp); - } -} - -static void mg_abs_path(const char *utf8_path, char *abs_path, size_t len) { - wchar_t buf[MAX_PATH_SIZE], buf2[MAX_PATH_SIZE]; - to_wchar(utf8_path, buf, ARRAY_SIZE(buf)); - GetFullPathNameW(buf, ARRAY_SIZE(buf2), buf2, NULL); - WideCharToMultiByte(CP_UTF8, 0, buf2, wcslen(buf2) + 1, abs_path, len, 0, 0); -} - -static int mg_start_process(const char *interp, const char *cmd, - const char *env, const char *envp[], - const char *dir, sock_t sock) { - STARTUPINFOW si; - PROCESS_INFORMATION pi; - HANDLE a[2], b[2], me = GetCurrentProcess(); - wchar_t wcmd[MAX_PATH_SIZE], full_dir[MAX_PATH_SIZE]; - char buf[MAX_PATH_SIZE], buf2[MAX_PATH_SIZE], buf5[MAX_PATH_SIZE], - buf4[MAX_PATH_SIZE], cmdline[MAX_PATH_SIZE]; - DWORD flags = DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS; - FILE *fp; - - memset(&si, 0, sizeof(si)); - memset(&pi, 0, sizeof(pi)); - - si.cb = sizeof(si); - si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; - si.wShowWindow = SW_HIDE; - si.hStdError = GetStdHandle(STD_ERROR_HANDLE); - - CreatePipe(&a[0], &a[1], NULL, 0); - CreatePipe(&b[0], &b[1], NULL, 0); - DuplicateHandle(me, a[0], me, &si.hStdInput, 0, TRUE, flags); - DuplicateHandle(me, b[1], me, &si.hStdOutput, 0, TRUE, flags); - - if (interp == NULL && (fp = mg_fopen(cmd, "r")) != NULL) { - buf[0] = buf[1] = '\0'; - fgets(buf, sizeof(buf), fp); - buf[sizeof(buf) - 1] = '\0'; - if (buf[0] == '#' && buf[1] == '!') { - interp = buf + 2; - /* Trim leading spaces: https://github.com/cesanta/mongoose/issues/489 */ - while (*interp != '\0' && isspace(*(unsigned char *) interp)) { - interp++; - } - } - fclose(fp); - } - - snprintf(buf, sizeof(buf), "%s/%s", dir, cmd); - mg_abs_path(buf, buf2, ARRAY_SIZE(buf2)); - - mg_abs_path(dir, buf5, ARRAY_SIZE(buf5)); - to_wchar(dir, full_dir, ARRAY_SIZE(full_dir)); - - if (interp != NULL) { - mg_abs_path(interp, buf4, ARRAY_SIZE(buf4)); - snprintf(cmdline, sizeof(cmdline), "%s \"%s\"", buf4, buf2); - } else { - snprintf(cmdline, sizeof(cmdline), "\"%s\"", buf2); - } - to_wchar(cmdline, wcmd, ARRAY_SIZE(wcmd)); - - if (CreateProcessW(NULL, wcmd, NULL, NULL, TRUE, CREATE_NEW_PROCESS_GROUP, - (void *) env, full_dir, &si, &pi) != 0) { - mg_spawn_stdio_thread(sock, a[1], mg_push_to_stdin); - mg_spawn_stdio_thread(sock, b[0], mg_pull_from_stdout); - - CloseHandle(si.hStdOutput); - CloseHandle(si.hStdInput); - - CloseHandle(pi.hThread); - CloseHandle(pi.hProcess); - } else { - CloseHandle(a[1]); - CloseHandle(b[0]); - closesocket(sock); - } - DBG(("CGI command: [%ls] -> %p", wcmd, pi.hProcess)); - - /* Not closing a[0] and b[1] because we've used DUPLICATE_CLOSE_SOURCE */ - (void) envp; - return (pi.hProcess != NULL); -} -#else -static int mg_start_process(const char *interp, const char *cmd, - const char *env, const char *envp[], - const char *dir, sock_t sock) { - char buf[500]; - pid_t pid = fork(); - (void) env; - - if (pid == 0) { - /* - * In Linux `chdir` declared with `warn_unused_result` attribute - * To shutup compiler we have yo use result in some way - */ - int tmp = chdir(dir); - (void) tmp; - (void) dup2(sock, 0); - (void) dup2(sock, 1); - closesocket(sock); - - /* - * After exec, all signal handlers are restored to their default values, - * with one exception of SIGCHLD. According to POSIX.1-2001 and Linux's - * implementation, SIGCHLD's handler will leave unchanged after exec - * if it was set to be ignored. Restore it to default action. - */ - signal(SIGCHLD, SIG_DFL); - - if (interp == NULL) { - execle(cmd, cmd, (char *) 0, envp); /* (char *) 0 to squash warning */ - } else { - execle(interp, interp, cmd, (char *) 0, envp); - } - snprintf(buf, sizeof(buf), - "Status: 500\r\n\r\n" - "500 Server Error: %s%s%s: %s", - interp == NULL ? "" : interp, interp == NULL ? "" : " ", cmd, - strerror(errno)); - send(1, buf, strlen(buf), 0); - exit(EXIT_FAILURE); /* exec call failed */ - } - - return (pid != 0); -} -#endif /* _WIN32 */ - -/* - * Append VARIABLE=VALUE\0 string to the buffer, and add a respective - * pointer into the vars array. - */ -static char *mg_addenv(struct mg_cgi_env_block *block, const char *fmt, ...) { - int n, space; - char *added = block->buf + block->len; - va_list ap; - - /* Calculate how much space is left in the buffer */ - space = sizeof(block->buf) - (block->len + 2); - if (space > 0) { - /* Copy VARIABLE=VALUE\0 string into the free space */ - va_start(ap, fmt); - n = vsnprintf(added, (size_t) space, fmt, ap); - va_end(ap); - - /* Make sure we do not overflow buffer and the envp array */ - if (n > 0 && n + 1 < space && - block->nvars < (int) ARRAY_SIZE(block->vars) - 2) { - /* Append a pointer to the added string into the envp array */ - block->vars[block->nvars++] = added; - /* Bump up used length counter. Include \0 terminator */ - block->len += n + 1; - } - } - - return added; -} - -static void mg_addenv2(struct mg_cgi_env_block *blk, const char *name) { - const char *s; - if ((s = getenv(name)) != NULL) mg_addenv(blk, "%s=%s", name, s); -} - -static void mg_prepare_cgi_environment(struct mg_connection *nc, - const char *prog, - const struct mg_str *path_info, - const struct http_message *hm, - const struct mg_serve_http_opts *opts, - struct mg_cgi_env_block *blk) { - const char *s; - struct mg_str *h; - char *p; - size_t i; - char buf[100]; - - blk->len = blk->nvars = 0; - blk->nc = nc; - - if ((s = getenv("SERVER_NAME")) != NULL) { - mg_addenv(blk, "SERVER_NAME=%s", s); - } else { - mg_sock_to_str(nc->sock, buf, sizeof(buf), 3); - mg_addenv(blk, "SERVER_NAME=%s", buf); - } - mg_addenv(blk, "SERVER_ROOT=%s", opts->document_root); - mg_addenv(blk, "DOCUMENT_ROOT=%s", opts->document_root); - mg_addenv(blk, "SERVER_SOFTWARE=%s/%s", "Mongoose", MG_VERSION); - - /* Prepare the environment block */ - mg_addenv(blk, "%s", "GATEWAY_INTERFACE=CGI/1.1"); - mg_addenv(blk, "%s", "SERVER_PROTOCOL=HTTP/1.1"); - mg_addenv(blk, "%s", "REDIRECT_STATUS=200"); /* For PHP */ - - mg_addenv(blk, "REQUEST_METHOD=%.*s", (int) hm->method.len, hm->method.p); - - mg_addenv(blk, "REQUEST_URI=%.*s%s%.*s", (int) hm->uri.len, hm->uri.p, - hm->query_string.len == 0 ? "" : "?", (int) hm->query_string.len, - hm->query_string.p); - - mg_conn_addr_to_str(nc, buf, sizeof(buf), - MG_SOCK_STRINGIFY_REMOTE | MG_SOCK_STRINGIFY_IP); - mg_addenv(blk, "REMOTE_ADDR=%s", buf); - mg_conn_addr_to_str(nc, buf, sizeof(buf), MG_SOCK_STRINGIFY_PORT); - mg_addenv(blk, "SERVER_PORT=%s", buf); - - s = hm->uri.p + hm->uri.len - path_info->len - 1; - if (*s == '/') { - const char *base_name = strrchr(prog, DIRSEP); - mg_addenv(blk, "SCRIPT_NAME=%.*s/%s", (int) (s - hm->uri.p), hm->uri.p, - (base_name != NULL ? base_name + 1 : prog)); - } else { - mg_addenv(blk, "SCRIPT_NAME=%.*s", (int) (s - hm->uri.p + 1), hm->uri.p); - } - mg_addenv(blk, "SCRIPT_FILENAME=%s", prog); - - if (path_info != NULL && path_info->len > 0) { - mg_addenv(blk, "PATH_INFO=%.*s", (int) path_info->len, path_info->p); - /* Not really translated... */ - mg_addenv(blk, "PATH_TRANSLATED=%.*s", (int) path_info->len, path_info->p); - } - -#if MG_ENABLE_SSL - mg_addenv(blk, "HTTPS=%s", (nc->flags & MG_F_SSL ? "on" : "off")); -#else - mg_addenv(blk, "HTTPS=off"); -#endif - - if ((h = mg_get_http_header((struct http_message *) hm, "Content-Type")) != - NULL) { - mg_addenv(blk, "CONTENT_TYPE=%.*s", (int) h->len, h->p); - } - - if (hm->query_string.len > 0) { - mg_addenv(blk, "QUERY_STRING=%.*s", (int) hm->query_string.len, - hm->query_string.p); - } - - if ((h = mg_get_http_header((struct http_message *) hm, "Content-Length")) != - NULL) { - mg_addenv(blk, "CONTENT_LENGTH=%.*s", (int) h->len, h->p); - } - - mg_addenv2(blk, "PATH"); - mg_addenv2(blk, "TMP"); - mg_addenv2(blk, "TEMP"); - mg_addenv2(blk, "TMPDIR"); - mg_addenv2(blk, "PERLLIB"); - mg_addenv2(blk, MG_ENV_EXPORT_TO_CGI); - -#ifdef _WIN32 - mg_addenv2(blk, "COMSPEC"); - mg_addenv2(blk, "SYSTEMROOT"); - mg_addenv2(blk, "SystemDrive"); - mg_addenv2(blk, "ProgramFiles"); - mg_addenv2(blk, "ProgramFiles(x86)"); - mg_addenv2(blk, "CommonProgramFiles(x86)"); -#else - mg_addenv2(blk, "LD_LIBRARY_PATH"); -#endif /* _WIN32 */ - - /* Add all headers as HTTP_* variables */ - for (i = 0; hm->header_names[i].len > 0; i++) { - p = mg_addenv(blk, "HTTP_%.*s=%.*s", (int) hm->header_names[i].len, - hm->header_names[i].p, (int) hm->header_values[i].len, - hm->header_values[i].p); - - /* Convert variable name into uppercase, and change - to _ */ - for (; *p != '=' && *p != '\0'; p++) { - if (*p == '-') *p = '_'; - *p = (char) toupper(*(unsigned char *) p); - } - } - - blk->vars[blk->nvars++] = NULL; - blk->buf[blk->len++] = '\0'; -} - -static void mg_cgi_ev_handler(struct mg_connection *cgi_nc, int ev, - void *ev_data) { - struct mg_connection *nc = (struct mg_connection *) cgi_nc->user_data; - (void) ev_data; - - if (nc == NULL) return; - - switch (ev) { - case MG_EV_RECV: - /* - * CGI script does not output reply line, like "HTTP/1.1 CODE XXXXX\n" - * It outputs headers, then body. Headers might include "Status" - * header, which changes CODE, and it might include "Location" header - * which changes CODE to 302. - * - * Therefore we do not send the output from the CGI script to the user - * until all CGI headers are received. - * - * Here we parse the output from the CGI script, and if all headers has - * been received, send appropriate reply line, and forward all - * received headers to the client. - */ - if (nc->flags & MG_F_USER_1) { - struct mbuf *io = &cgi_nc->recv_mbuf; - int len = mg_http_get_request_len(io->buf, io->len); - - if (len == 0) break; - if (len < 0 || io->len > MG_MAX_HTTP_REQUEST_SIZE) { - cgi_nc->flags |= MG_F_CLOSE_IMMEDIATELY; - mg_http_send_error(nc, 500, "Bad headers"); - } else { - struct http_message hm; - struct mg_str *h; - mg_http_parse_headers(io->buf, io->buf + io->len, io->len, &hm); - if (mg_get_http_header(&hm, "Location") != NULL) { - mg_printf(nc, "%s", "HTTP/1.1 302 Moved\r\n"); - } else if ((h = mg_get_http_header(&hm, "Status")) != NULL) { - mg_printf(nc, "HTTP/1.1 %.*s\r\n", (int) h->len, h->p); - } else { - mg_printf(nc, "%s", "HTTP/1.1 200 OK\r\n"); - } - } - nc->flags &= ~MG_F_USER_1; - } - if (!(nc->flags & MG_F_USER_1)) { - mg_forward(cgi_nc, nc); - } - break; - case MG_EV_CLOSE: - mg_http_free_proto_data_cgi(&mg_http_get_proto_data(cgi_nc)->cgi); - nc->flags |= MG_F_SEND_AND_CLOSE; - break; - } -} - -MG_INTERNAL void mg_handle_cgi(struct mg_connection *nc, const char *prog, - const struct mg_str *path_info, - const struct http_message *hm, - const struct mg_serve_http_opts *opts) { - struct mg_cgi_env_block blk; - char dir[MAX_PATH_SIZE]; - const char *p; - sock_t fds[2]; - - DBG(("%p [%s]", nc, prog)); - mg_prepare_cgi_environment(nc, prog, path_info, hm, opts, &blk); - /* - * CGI must be executed in its own directory. 'dir' must point to the - * directory containing executable program, 'p' must point to the - * executable program name relative to 'dir'. - */ - if ((p = strrchr(prog, DIRSEP)) == NULL) { - snprintf(dir, sizeof(dir), "%s", "."); - } else { - snprintf(dir, sizeof(dir), "%.*s", (int) (p - prog), prog); - prog = p + 1; - } - - /* - * Try to create socketpair in a loop until success. mg_socketpair() - * can be interrupted by a signal and fail. - * TODO(lsm): use sigaction to restart interrupted syscall - */ - do { - mg_socketpair(fds, SOCK_STREAM); - } while (fds[0] == INVALID_SOCKET); - - if (mg_start_process(opts->cgi_interpreter, prog, blk.buf, blk.vars, dir, - fds[1]) != 0) { - size_t n = nc->recv_mbuf.len - (hm->message.len - hm->body.len); - struct mg_connection *cgi_nc = - mg_add_sock(nc->mgr, fds[0], mg_cgi_ev_handler); - struct mg_http_proto_data *cgi_pd = mg_http_get_proto_data(cgi_nc); - cgi_pd->cgi.cgi_nc = cgi_nc; - cgi_pd->cgi.cgi_nc->user_data = nc; - nc->flags |= MG_F_USER_1; - /* Push POST data to the CGI */ - if (n > 0 && n < nc->recv_mbuf.len) { - mg_send(cgi_pd->cgi.cgi_nc, hm->body.p, n); - } - mbuf_remove(&nc->recv_mbuf, nc->recv_mbuf.len); - } else { - closesocket(fds[0]); - mg_http_send_error(nc, 500, "CGI failure"); - } - -#ifndef _WIN32 - closesocket(fds[1]); /* On Windows, CGI stdio thread closes that socket */ -#endif -} - -MG_INTERNAL void mg_http_free_proto_data_cgi(struct mg_http_proto_data_cgi *d) { - if (d != NULL) { - if (d->cgi_nc != NULL) d->cgi_nc->flags |= MG_F_CLOSE_IMMEDIATELY; - memset(d, 0, sizeof(struct mg_http_proto_data_cgi)); - } -} - -#endif /* MG_ENABLE_HTTP && MG_ENABLE_HTTP_CGI */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/http_ssi.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_HTTP && MG_ENABLE_HTTP_SSI && MG_ENABLE_FILESYSTEM - -static void mg_send_ssi_file(struct mg_connection *nc, struct http_message *hm, - const char *path, FILE *fp, int include_level, - const struct mg_serve_http_opts *opts); - -static void mg_send_file_data(struct mg_connection *nc, FILE *fp) { - char buf[BUFSIZ]; - size_t n; - while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) { - mg_send(nc, buf, n); - } -} - -static void mg_do_ssi_include(struct mg_connection *nc, struct http_message *hm, - const char *ssi, char *tag, int include_level, - const struct mg_serve_http_opts *opts) { - char file_name[BUFSIZ], path[MAX_PATH_SIZE], *p; - FILE *fp; - - /* - * sscanf() is safe here, since send_ssi_file() also uses buffer - * of size MG_BUF_LEN to get the tag. So strlen(tag) is always < MG_BUF_LEN. - */ - if (sscanf(tag, " virtual=\"%[^\"]\"", file_name) == 1) { - /* File name is relative to the webserver root */ - snprintf(path, sizeof(path), "%s/%s", opts->document_root, file_name); - } else if (sscanf(tag, " abspath=\"%[^\"]\"", file_name) == 1) { - /* - * File name is relative to the webserver working directory - * or it is absolute system path - */ - snprintf(path, sizeof(path), "%s", file_name); - } else if (sscanf(tag, " file=\"%[^\"]\"", file_name) == 1 || - sscanf(tag, " \"%[^\"]\"", file_name) == 1) { - /* File name is relative to the currect document */ - snprintf(path, sizeof(path), "%s", ssi); - if ((p = strrchr(path, DIRSEP)) != NULL) { - p[1] = '\0'; - } - snprintf(path + strlen(path), sizeof(path) - strlen(path), "%s", file_name); - } else { - mg_printf(nc, "Bad SSI #include: [%s]", tag); - return; - } - - if ((fp = mg_fopen(path, "rb")) == NULL) { - mg_printf(nc, "SSI include error: mg_fopen(%s): %s", path, - strerror(mg_get_errno())); - } else { - mg_set_close_on_exec((sock_t) fileno(fp)); - if (mg_match_prefix(opts->ssi_pattern, strlen(opts->ssi_pattern), path) > - 0) { - mg_send_ssi_file(nc, hm, path, fp, include_level + 1, opts); - } else { - mg_send_file_data(nc, fp); - } - fclose(fp); - } -} - -#if MG_ENABLE_HTTP_SSI_EXEC -static void do_ssi_exec(struct mg_connection *nc, char *tag) { - char cmd[BUFSIZ]; - FILE *fp; - - if (sscanf(tag, " \"%[^\"]\"", cmd) != 1) { - mg_printf(nc, "Bad SSI #exec: [%s]", tag); - } else if ((fp = popen(cmd, "r")) == NULL) { - mg_printf(nc, "Cannot SSI #exec: [%s]: %s", cmd, strerror(mg_get_errno())); - } else { - mg_send_file_data(nc, fp); - pclose(fp); - } -} -#endif /* MG_ENABLE_HTTP_SSI_EXEC */ - -/* - * SSI directive has the following format: - * - */ -static void mg_send_ssi_file(struct mg_connection *nc, struct http_message *hm, - const char *path, FILE *fp, int include_level, - const struct mg_serve_http_opts *opts) { - static const struct mg_str btag = MG_MK_STR(" */ - buf[i--] = '\0'; - while (i > 0 && buf[i] == ' ') { - buf[i--] = '\0'; - } - - /* Handle known SSI directives */ - if (strncmp(p, d_include.p, d_include.len) == 0) { - mg_do_ssi_include(nc, hm, path, p + d_include.len + 1, include_level, - opts); - } else if (strncmp(p, d_call.p, d_call.len) == 0) { - struct mg_ssi_call_ctx cctx; - memset(&cctx, 0, sizeof(cctx)); - cctx.req = hm; - cctx.file = mg_mk_str(path); - cctx.arg = mg_mk_str(p + d_call.len + 1); - mg_call(nc, NULL, MG_EV_SSI_CALL, - (void *) cctx.arg.p); /* NUL added above */ - mg_call(nc, NULL, MG_EV_SSI_CALL_CTX, &cctx); -#if MG_ENABLE_HTTP_SSI_EXEC - } else if (strncmp(p, d_exec.p, d_exec.len) == 0) { - do_ssi_exec(nc, p + d_exec.len + 1); -#endif - } else { - /* Silently ignore unknown SSI directive. */ - } - len = 0; - } else if (ch == '<') { - in_ssi_tag = 1; - if (len > 0) { - mg_send(nc, buf, (size_t) len); - } - len = 0; - buf[len++] = ch & 0xff; - } else if (in_ssi_tag) { - if (len == (int) btag.len && strncmp(buf, btag.p, btag.len) != 0) { - /* Not an SSI tag */ - in_ssi_tag = 0; - } else if (len == (int) sizeof(buf) - 2) { - mg_printf(nc, "%s: SSI tag is too large", path); - len = 0; - } - buf[len++] = ch & 0xff; - } else { - buf[len++] = ch & 0xff; - if (len == (int) sizeof(buf)) { - mg_send(nc, buf, (size_t) len); - len = 0; - } - } - } - - /* Send the rest of buffered data */ - if (len > 0) { - mg_send(nc, buf, (size_t) len); - } -} - -MG_INTERNAL void mg_handle_ssi_request(struct mg_connection *nc, - struct http_message *hm, - const char *path, - const struct mg_serve_http_opts *opts) { - FILE *fp; - struct mg_str mime_type; - DBG(("%p %s", nc, path)); - - if ((fp = mg_fopen(path, "rb")) == NULL) { - mg_http_send_error(nc, 404, NULL); - } else { - mg_set_close_on_exec((sock_t) fileno(fp)); - - mime_type = mg_get_mime_type(path, "text/plain", opts); - mg_send_response_line(nc, 200, opts->extra_headers); - mg_printf(nc, - "Content-Type: %.*s\r\n" - "Connection: close\r\n\r\n", - (int) mime_type.len, mime_type.p); - mg_send_ssi_file(nc, hm, path, fp, 0, opts); - fclose(fp); - nc->flags |= MG_F_SEND_AND_CLOSE; - } -} - -#endif /* MG_ENABLE_HTTP_SSI && MG_ENABLE_HTTP && MG_ENABLE_FILESYSTEM */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/http_webdav.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_HTTP && MG_ENABLE_HTTP_WEBDAV - -MG_INTERNAL int mg_is_dav_request(const struct mg_str *s) { - static const char *methods[] = { - "PUT", - "DELETE", - "MKCOL", - "PROPFIND", - "MOVE" -#if MG_ENABLE_FAKE_DAVLOCK - , - "LOCK", - "UNLOCK" -#endif - }; - size_t i; - - for (i = 0; i < ARRAY_SIZE(methods); i++) { - if (mg_vcmp(s, methods[i]) == 0) { - return 1; - } - } - - return 0; -} - -static int mg_mkdir(const char *path, uint32_t mode) { -#ifndef _WIN32 - return mkdir(path, mode); -#else - (void) mode; - return _mkdir(path); -#endif -} - -static void mg_print_props(struct mg_connection *nc, const char *name, - cs_stat_t *stp) { - char mtime[64], buf[MAX_PATH_SIZE * 3]; - time_t t = stp->st_mtime; /* store in local variable for NDK compile */ - mg_gmt_time_string(mtime, sizeof(mtime), &t); - mg_url_encode(name, strlen(name), buf, sizeof(buf)); - mg_printf(nc, - "" - "%s" - "" - "" - "%s" - "%" INT64_FMT - "" - "%s" - "" - "HTTP/1.1 200 OK" - "" - "\n", - buf, S_ISDIR(stp->st_mode) ? "" : "", - (int64_t) stp->st_size, mtime); -} - -MG_INTERNAL void mg_handle_propfind(struct mg_connection *nc, const char *path, - cs_stat_t *stp, struct http_message *hm, - struct mg_serve_http_opts *opts) { - static const char header[] = - "HTTP/1.1 207 Multi-Status\r\n" - "Connection: close\r\n" - "Content-Type: text/xml; charset=utf-8\r\n\r\n" - "" - "\n"; - static const char footer[] = "\n"; - const struct mg_str *depth = mg_get_http_header(hm, "Depth"); - - /* Print properties for the requested resource itself */ - if (S_ISDIR(stp->st_mode) && - strcmp(opts->enable_directory_listing, "yes") != 0) { - mg_printf(nc, "%s", "HTTP/1.1 403 Directory Listing Denied\r\n\r\n"); - } else { - char uri[MAX_PATH_SIZE]; - mg_send(nc, header, sizeof(header) - 1); - snprintf(uri, sizeof(uri), "%.*s", (int) hm->uri.len, hm->uri.p); - mg_print_props(nc, uri, stp); - if (S_ISDIR(stp->st_mode) && (depth == NULL || mg_vcmp(depth, "0") != 0)) { - mg_scan_directory(nc, path, opts, mg_print_props); - } - mg_send(nc, footer, sizeof(footer) - 1); - nc->flags |= MG_F_SEND_AND_CLOSE; - } -} - -#if MG_ENABLE_FAKE_DAVLOCK -/* - * Windows explorer (probably there are another WebDav clients like it) - * requires LOCK support in webdav. W/out this, it still works, but fails - * to save file: shows error message and offers "Save As". - * "Save as" works, but this message is very annoying. - * This is fake lock, which doesn't lock something, just returns LOCK token, - * UNLOCK always answers "OK". - * With this fake LOCK Windows Explorer looks happy and saves file. - * NOTE: that is not DAV LOCK imlementation, it is just a way to shut up - * Windows native DAV client. This is why FAKE LOCK is not enabed by default - */ -MG_INTERNAL void mg_handle_lock(struct mg_connection *nc, const char *path) { - static const char *reply = - "HTTP/1.1 207 Multi-Status\r\n" - "Connection: close\r\n" - "Content-Type: text/xml; charset=utf-8\r\n\r\n" - "" - "\n" - "\n" - "\n" - "\n" - "\n" - "opaquelocktoken:%s%u" - "" - "" - "\n" - "" - "\n"; - mg_printf(nc, reply, path, (unsigned int) mg_time()); - nc->flags |= MG_F_SEND_AND_CLOSE; -} -#endif - -MG_INTERNAL void mg_handle_mkcol(struct mg_connection *nc, const char *path, - struct http_message *hm) { - int status_code = 500; - if (hm->body.len != (size_t) ~0 && hm->body.len > 0) { - status_code = 415; - } else if (!mg_mkdir(path, 0755)) { - status_code = 201; - } else if (errno == EEXIST) { - status_code = 405; - } else if (errno == EACCES) { - status_code = 403; - } else if (errno == ENOENT) { - status_code = 409; - } else { - status_code = 500; - } - mg_http_send_error(nc, status_code, NULL); -} - -static int mg_remove_directory(const struct mg_serve_http_opts *opts, - const char *dir) { - char path[MAX_PATH_SIZE]; - struct dirent *dp; - cs_stat_t st; - DIR *dirp; - - if ((dirp = opendir(dir)) == NULL) return 0; - - while ((dp = readdir(dirp)) != NULL) { - if (mg_is_file_hidden((const char *) dp->d_name, opts, 1)) { - continue; - } - snprintf(path, sizeof(path), "%s%c%s", dir, '/', dp->d_name); - mg_stat(path, &st); - if (S_ISDIR(st.st_mode)) { - mg_remove_directory(opts, path); - } else { - remove(path); - } - } - closedir(dirp); - rmdir(dir); - - return 1; -} - -MG_INTERNAL void mg_handle_move(struct mg_connection *c, - const struct mg_serve_http_opts *opts, - const char *path, struct http_message *hm) { - const struct mg_str *dest = mg_get_http_header(hm, "Destination"); - if (dest == NULL) { - mg_http_send_error(c, 411, NULL); - } else { - const char *p = (char *) memchr(dest->p, '/', dest->len); - if (p != NULL && p[1] == '/' && - (p = (char *) memchr(p + 2, '/', dest->p + dest->len - p)) != NULL) { - char buf[MAX_PATH_SIZE]; - snprintf(buf, sizeof(buf), "%s%.*s", opts->dav_document_root, - (int) (dest->p + dest->len - p), p); - if (rename(path, buf) == 0) { - mg_http_send_error(c, 200, NULL); - } else { - mg_http_send_error(c, 418, NULL); - } - } else { - mg_http_send_error(c, 500, NULL); - } - } -} - -MG_INTERNAL void mg_handle_delete(struct mg_connection *nc, - const struct mg_serve_http_opts *opts, - const char *path) { - cs_stat_t st; - if (mg_stat(path, &st) != 0) { - mg_http_send_error(nc, 404, NULL); - } else if (S_ISDIR(st.st_mode)) { - mg_remove_directory(opts, path); - mg_http_send_error(nc, 204, NULL); - } else if (remove(path) == 0) { - mg_http_send_error(nc, 204, NULL); - } else { - mg_http_send_error(nc, 423, NULL); - } -} - -/* Return -1 on error, 1 on success. */ -static int mg_create_itermediate_directories(const char *path) { - const char *s; - - /* Create intermediate directories if they do not exist */ - for (s = path + 1; *s != '\0'; s++) { - if (*s == '/') { - char buf[MAX_PATH_SIZE]; - cs_stat_t st; - snprintf(buf, sizeof(buf), "%.*s", (int) (s - path), path); - buf[sizeof(buf) - 1] = '\0'; - if (mg_stat(buf, &st) != 0 && mg_mkdir(buf, 0755) != 0) { - return -1; - } - } - } - - return 1; -} - -MG_INTERNAL void mg_handle_put(struct mg_connection *nc, const char *path, - struct http_message *hm) { - struct mg_http_proto_data *pd = mg_http_get_proto_data(nc); - cs_stat_t st; - const struct mg_str *cl_hdr = mg_get_http_header(hm, "Content-Length"); - int rc, status_code = mg_stat(path, &st) == 0 ? 200 : 201; - - mg_http_free_proto_data_file(&pd->file); - if ((rc = mg_create_itermediate_directories(path)) == 0) { - mg_printf(nc, "HTTP/1.1 %d OK\r\nContent-Length: 0\r\n\r\n", status_code); - } else if (rc == -1) { - mg_http_send_error(nc, 500, NULL); - } else if (cl_hdr == NULL) { - mg_http_send_error(nc, 411, NULL); - } else if ((pd->file.fp = mg_fopen(path, "w+b")) == NULL) { - mg_http_send_error(nc, 500, NULL); - } else { - const struct mg_str *range_hdr = mg_get_http_header(hm, "Content-Range"); - int64_t r1 = 0, r2 = 0; - pd->file.type = DATA_PUT; - mg_set_close_on_exec((sock_t) fileno(pd->file.fp)); - pd->file.cl = to64(cl_hdr->p); - if (range_hdr != NULL && - mg_http_parse_range_header(range_hdr, &r1, &r2) > 0) { - status_code = 206; - fseeko(pd->file.fp, r1, SEEK_SET); - pd->file.cl = r2 > r1 ? r2 - r1 + 1 : pd->file.cl - r1; - } - mg_printf(nc, "HTTP/1.1 %d OK\r\nContent-Length: 0\r\n\r\n", status_code); - /* Remove HTTP request from the mbuf, leave only payload */ - mbuf_remove(&nc->recv_mbuf, hm->message.len - hm->body.len); - mg_http_transfer_file_data(nc); - } -} - -#endif /* MG_ENABLE_HTTP && MG_ENABLE_HTTP_WEBDAV */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/http_websocket.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_HTTP && MG_ENABLE_HTTP_WEBSOCKET - -#ifndef MG_WEBSOCKET_PING_INTERVAL_SECONDS -#define MG_WEBSOCKET_PING_INTERVAL_SECONDS 5 -#endif - -#define MG_WS_NO_HOST_HEADER_MAGIC ((char *) 0x1) - -static int mg_is_ws_fragment(unsigned char flags) { - return (flags & 0x80) == 0 || (flags & 0x0f) == 0; -} - -static int mg_is_ws_first_fragment(unsigned char flags) { - return (flags & 0x80) == 0 && (flags & 0x0f) != 0; -} - -static void mg_handle_incoming_websocket_frame(struct mg_connection *nc, - struct websocket_message *wsm) { - if (wsm->flags & 0x8) { - mg_call(nc, nc->handler, MG_EV_WEBSOCKET_CONTROL_FRAME, wsm); - } else { - mg_call(nc, nc->handler, MG_EV_WEBSOCKET_FRAME, wsm); - } -} - -static int mg_deliver_websocket_data(struct mg_connection *nc) { - /* Using unsigned char *, cause of integer arithmetic below */ - uint64_t i, data_len = 0, frame_len = 0, buf_len = nc->recv_mbuf.len, len, - mask_len = 0, header_len = 0; - unsigned char *p = (unsigned char *) nc->recv_mbuf.buf, *buf = p, - *e = p + buf_len; - unsigned *sizep = (unsigned *) &p[1]; /* Size ptr for defragmented frames */ - int ok, reass = buf_len > 0 && mg_is_ws_fragment(p[0]) && - !(nc->flags & MG_F_WEBSOCKET_NO_DEFRAG); - - /* If that's a continuation frame that must be reassembled, handle it */ - if (reass && !mg_is_ws_first_fragment(p[0]) && - buf_len >= 1 + sizeof(*sizep) && buf_len >= 1 + sizeof(*sizep) + *sizep) { - buf += 1 + sizeof(*sizep) + *sizep; - buf_len -= 1 + sizeof(*sizep) + *sizep; - } - - if (buf_len >= 2) { - len = buf[1] & 127; - mask_len = buf[1] & 128 ? 4 : 0; - if (len < 126 && buf_len >= mask_len) { - data_len = len; - header_len = 2 + mask_len; - } else if (len == 126 && buf_len >= 4 + mask_len) { - header_len = 4 + mask_len; - data_len = ntohs(*(uint16_t *) &buf[2]); - } else if (buf_len >= 10 + mask_len) { - header_len = 10 + mask_len; - data_len = (((uint64_t) ntohl(*(uint32_t *) &buf[2])) << 32) + - ntohl(*(uint32_t *) &buf[6]); - } - } - - frame_len = header_len + data_len; - ok = frame_len > 0 && frame_len <= buf_len; - - if (ok) { - struct websocket_message wsm; - - wsm.size = (size_t) data_len; - wsm.data = buf + header_len; - wsm.flags = buf[0]; - - /* Apply mask if necessary */ - if (mask_len > 0) { - for (i = 0; i < data_len; i++) { - buf[i + header_len] ^= (buf + header_len - mask_len)[i % 4]; - } - } - - if (reass) { - /* On first fragmented frame, nullify size */ - if (mg_is_ws_first_fragment(wsm.flags)) { - mbuf_resize(&nc->recv_mbuf, nc->recv_mbuf.size + sizeof(*sizep)); - p[0] &= ~0x0f; /* Next frames will be treated as continuation */ - buf = p + 1 + sizeof(*sizep); - *sizep = 0; /* TODO(lsm): fix. this can stomp over frame data */ - } - - /* Append this frame to the reassembled buffer */ - memmove(buf, wsm.data, e - wsm.data); - (*sizep) += wsm.size; - nc->recv_mbuf.len -= wsm.data - buf; - - /* On last fragmented frame - call user handler and remove data */ - if (wsm.flags & 0x80) { - wsm.data = p + 1 + sizeof(*sizep); - wsm.size = *sizep; - mg_handle_incoming_websocket_frame(nc, &wsm); - mbuf_remove(&nc->recv_mbuf, 1 + sizeof(*sizep) + *sizep); - } - } else { - /* TODO(lsm): properly handle OOB control frames during defragmentation */ - mg_handle_incoming_websocket_frame(nc, &wsm); - mbuf_remove(&nc->recv_mbuf, (size_t) frame_len); /* Cleanup frame */ - } - - /* If client closes, close too */ - if ((buf[0] & 0x0f) == WEBSOCKET_OP_CLOSE) { - nc->flags |= MG_F_SEND_AND_CLOSE; - } - } - - return ok; -} - -struct ws_mask_ctx { - size_t pos; /* zero means unmasked */ - uint32_t mask; -}; - -static uint32_t mg_ws_random_mask(void) { - uint32_t mask; -/* - * The spec requires WS client to generate hard to - * guess mask keys. From RFC6455, Section 5.3: - * - * The unpredictability of the masking key is essential to prevent - * authors of malicious applications from selecting the bytes that appear on - * the wire. - * - * Hence this feature is essential when the actual end user of this API - * is untrusted code that wouldn't have access to a lower level net API - * anyway (e.g. web browsers). Hence this feature is low prio for most - * mongoose use cases and thus can be disabled, e.g. when porting to a platform - * that lacks rand(). - */ -#if MG_DISABLE_WS_RANDOM_MASK - mask = 0xefbeadde; /* generated with a random number generator, I swear */ -#else - if (sizeof(long) >= 4) { - mask = (uint32_t) rand(); - } else if (sizeof(long) == 2) { - mask = (uint32_t) rand() << 16 | (uint32_t) rand(); - } -#endif - return mask; -} - -static void mg_send_ws_header(struct mg_connection *nc, int op, size_t len, - struct ws_mask_ctx *ctx) { - int header_len; - unsigned char header[10]; - - header[0] = (op & WEBSOCKET_DONT_FIN ? 0x0 : 0x80) + (op & 0x0f); - if (len < 126) { - header[1] = (unsigned char) len; - header_len = 2; - } else if (len < 65535) { - uint16_t tmp = htons((uint16_t) len); - header[1] = 126; - memcpy(&header[2], &tmp, sizeof(tmp)); - header_len = 4; - } else { - uint32_t tmp; - header[1] = 127; - tmp = htonl((uint32_t)((uint64_t) len >> 32)); - memcpy(&header[2], &tmp, sizeof(tmp)); - tmp = htonl((uint32_t)(len & 0xffffffff)); - memcpy(&header[6], &tmp, sizeof(tmp)); - header_len = 10; - } - - /* client connections enable masking */ - if (nc->listener == NULL) { - header[1] |= 1 << 7; /* set masking flag */ - mg_send(nc, header, header_len); - ctx->mask = mg_ws_random_mask(); - mg_send(nc, &ctx->mask, sizeof(ctx->mask)); - ctx->pos = nc->send_mbuf.len; - } else { - mg_send(nc, header, header_len); - ctx->pos = 0; - } -} - -static void mg_ws_mask_frame(struct mbuf *mbuf, struct ws_mask_ctx *ctx) { - size_t i; - if (ctx->pos == 0) return; - for (i = 0; i < (mbuf->len - ctx->pos); i++) { - mbuf->buf[ctx->pos + i] ^= ((char *) &ctx->mask)[i % 4]; - } -} - -void mg_send_websocket_frame(struct mg_connection *nc, int op, const void *data, - size_t len) { - struct ws_mask_ctx ctx; - DBG(("%p %d %d", nc, op, (int) len)); - mg_send_ws_header(nc, op, len, &ctx); - mg_send(nc, data, len); - - mg_ws_mask_frame(&nc->send_mbuf, &ctx); - - if (op == WEBSOCKET_OP_CLOSE) { - nc->flags |= MG_F_SEND_AND_CLOSE; - } -} - -void mg_send_websocket_framev(struct mg_connection *nc, int op, - const struct mg_str *strv, int strvcnt) { - struct ws_mask_ctx ctx; - int i; - int len = 0; - for (i = 0; i < strvcnt; i++) { - len += strv[i].len; - } - - mg_send_ws_header(nc, op, len, &ctx); - - for (i = 0; i < strvcnt; i++) { - mg_send(nc, strv[i].p, strv[i].len); - } - - mg_ws_mask_frame(&nc->send_mbuf, &ctx); - - if (op == WEBSOCKET_OP_CLOSE) { - nc->flags |= MG_F_SEND_AND_CLOSE; - } -} - -void mg_printf_websocket_frame(struct mg_connection *nc, int op, - const char *fmt, ...) { - char mem[MG_VPRINTF_BUFFER_SIZE], *buf = mem; - va_list ap; - int len; - - va_start(ap, fmt); - if ((len = mg_avprintf(&buf, sizeof(mem), fmt, ap)) > 0) { - mg_send_websocket_frame(nc, op, buf, len); - } - va_end(ap); - - if (buf != mem && buf != NULL) { - MG_FREE(buf); - } -} - -MG_INTERNAL void mg_ws_handler(struct mg_connection *nc, int ev, - void *ev_data) { - mg_call(nc, nc->handler, ev, ev_data); - - switch (ev) { - case MG_EV_RECV: - do { - } while (mg_deliver_websocket_data(nc)); - break; - case MG_EV_POLL: - /* Ping idle websocket connections */ - { - time_t now = *(time_t *) ev_data; - if (nc->flags & MG_F_IS_WEBSOCKET && - now > nc->last_io_time + MG_WEBSOCKET_PING_INTERVAL_SECONDS) { - mg_send_websocket_frame(nc, WEBSOCKET_OP_PING, "", 0); - } - } - break; - default: - break; - } -} - -#ifndef MG_EXT_SHA1 -static void mg_hash_sha1_v(size_t num_msgs, const uint8_t *msgs[], - const size_t *msg_lens, uint8_t *digest) { - size_t i; - cs_sha1_ctx sha_ctx; - cs_sha1_init(&sha_ctx); - for (i = 0; i < num_msgs; i++) { - cs_sha1_update(&sha_ctx, msgs[i], msg_lens[i]); - } - cs_sha1_final(digest, &sha_ctx); -} -#else -extern void mg_hash_sha1_v(size_t num_msgs, const uint8_t *msgs[], - const size_t *msg_lens, uint8_t *digest); -#endif - -MG_INTERNAL void mg_ws_handshake(struct mg_connection *nc, - const struct mg_str *key) { - static const char *magic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; - const uint8_t *msgs[2] = {(const uint8_t *) key->p, (const uint8_t *) magic}; - const size_t msg_lens[2] = {key->len, 36}; - unsigned char sha[20]; - char b64_sha[30]; - - mg_hash_sha1_v(2, msgs, msg_lens, sha); - mg_base64_encode(sha, sizeof(sha), b64_sha); - mg_printf(nc, "%s%s%s", - "HTTP/1.1 101 Switching Protocols\r\n" - "Upgrade: websocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Accept: ", - b64_sha, "\r\n\r\n"); - DBG(("%p %.*s %s", nc, (int) key->len, key->p, b64_sha)); -} - -void mg_send_websocket_handshake2(struct mg_connection *nc, const char *path, - const char *host, const char *protocol, - const char *extra_headers) { - mg_send_websocket_handshake3(nc, path, host, protocol, extra_headers, NULL, - NULL); -} - -void mg_send_websocket_handshake3(struct mg_connection *nc, const char *path, - const char *host, const char *protocol, - const char *extra_headers, const char *user, - const char *pass) { - struct mbuf auth; - char key[25]; - uint32_t nonce[4]; - nonce[0] = mg_ws_random_mask(); - nonce[1] = mg_ws_random_mask(); - nonce[2] = mg_ws_random_mask(); - nonce[3] = mg_ws_random_mask(); - mg_base64_encode((unsigned char *) &nonce, sizeof(nonce), key); - - mbuf_init(&auth, 0); - if (user != NULL) { - mg_basic_auth_header(user, pass, &auth); - } - - /* - * NOTE: the (auth.buf == NULL ? "" : auth.buf) is because cc3200 libc is - * broken: it doesn't like zero length to be passed to %.*s - * i.e. sprintf("f%.*so", (int)0, NULL), yields `f\0o`. - * because it handles NULL specially (and incorrectly). - */ - mg_printf(nc, - "GET %s HTTP/1.1\r\n" - "Upgrade: websocket\r\n" - "Connection: Upgrade\r\n" - "%.*s" - "Sec-WebSocket-Version: 13\r\n" - "Sec-WebSocket-Key: %s\r\n", - path, (int) auth.len, (auth.buf == NULL ? "" : auth.buf), key); - - /* TODO(mkm): take default hostname from http proto data if host == NULL */ - if (host != MG_WS_NO_HOST_HEADER_MAGIC) { - mg_printf(nc, "Host: %s\r\n", host); - } - if (protocol != NULL) { - mg_printf(nc, "Sec-WebSocket-Protocol: %s\r\n", protocol); - } - if (extra_headers != NULL) { - mg_printf(nc, "%s", extra_headers); - } - mg_printf(nc, "\r\n"); - - mbuf_free(&auth); -} - -void mg_send_websocket_handshake(struct mg_connection *nc, const char *path, - const char *extra_headers) { - mg_send_websocket_handshake2(nc, path, MG_WS_NO_HOST_HEADER_MAGIC, NULL, - extra_headers); -} - -struct mg_connection *mg_connect_ws_opt(struct mg_mgr *mgr, - mg_event_handler_t ev_handler, - struct mg_connect_opts opts, - const char *url, const char *protocol, - const char *extra_headers) { - char *user = NULL, *pass = NULL, *addr = NULL; - const char *path = NULL; - struct mg_connection *nc = - mg_connect_http_base(mgr, ev_handler, opts, "ws://", "wss://", url, &path, - &user, &pass, &addr); - - if (nc != NULL) { - mg_send_websocket_handshake3(nc, path, addr, protocol, extra_headers, user, - pass); - } - - MG_FREE(addr); - MG_FREE(user); - MG_FREE(pass); - return nc; -} - -struct mg_connection *mg_connect_ws(struct mg_mgr *mgr, - mg_event_handler_t ev_handler, - const char *url, const char *protocol, - const char *extra_headers) { - struct mg_connect_opts opts; - memset(&opts, 0, sizeof(opts)); - return mg_connect_ws_opt(mgr, ev_handler, opts, url, protocol, extra_headers); -} -#endif /* MG_ENABLE_HTTP && MG_ENABLE_HTTP_WEBSOCKET */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/util.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* Amalgamated: #include "common/base64.h" */ -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/util.h" */ - -/* For platforms with limited libc */ -#ifndef MAX -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#endif - -const char *mg_skip(const char *s, const char *end, const char *delims, - struct mg_str *v) { - v->p = s; - while (s < end && strchr(delims, *(unsigned char *) s) == NULL) s++; - v->len = s - v->p; - while (s < end && strchr(delims, *(unsigned char *) s) != NULL) s++; - return s; -} - -static int lowercase(const char *s) { - return tolower(*(const unsigned char *) s); -} - -#if MG_ENABLE_FILESYSTEM -int mg_stat(const char *path, cs_stat_t *st) { -#ifdef _WIN32 - wchar_t wpath[MAX_PATH_SIZE]; - to_wchar(path, wpath, ARRAY_SIZE(wpath)); - DBG(("[%ls] -> %d", wpath, _wstati64(wpath, st))); - return _wstati64(wpath, st); -#else - return stat(path, st); -#endif -} - -FILE *mg_fopen(const char *path, const char *mode) { -#ifdef _WIN32 - wchar_t wpath[MAX_PATH_SIZE], wmode[10]; - to_wchar(path, wpath, ARRAY_SIZE(wpath)); - to_wchar(mode, wmode, ARRAY_SIZE(wmode)); - return _wfopen(wpath, wmode); -#else - return fopen(path, mode); -#endif -} - -int mg_open(const char *path, int flag, int mode) { /* LCOV_EXCL_LINE */ -#if defined(_WIN32) && !defined(WINCE) - wchar_t wpath[MAX_PATH_SIZE]; - to_wchar(path, wpath, ARRAY_SIZE(wpath)); - return _wopen(wpath, flag, mode); -#else - return open(path, flag, mode); /* LCOV_EXCL_LINE */ -#endif -} -#endif - -void mg_base64_encode(const unsigned char *src, int src_len, char *dst) { - cs_base64_encode(src, src_len, dst); -} - -int mg_base64_decode(const unsigned char *s, int len, char *dst) { - return cs_base64_decode(s, len, dst, NULL); -} - -#if MG_ENABLE_THREADS -void *mg_start_thread(void *(*f)(void *), void *p) { -#ifdef WINCE - return (void *) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) f, p, 0, NULL); -#elif defined(_WIN32) - return (void *) _beginthread((void(__cdecl *) (void *) ) f, 0, p); -#else - pthread_t thread_id = (pthread_t) 0; - pthread_attr_t attr; - - (void) pthread_attr_init(&attr); - (void) pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - -#if defined(MG_STACK_SIZE) && MG_STACK_SIZE > 1 - (void) pthread_attr_setstacksize(&attr, MG_STACK_SIZE); -#endif - - pthread_create(&thread_id, &attr, f, p); - pthread_attr_destroy(&attr); - - return (void *) thread_id; -#endif -} -#endif /* MG_ENABLE_THREADS */ - -/* Set close-on-exec bit for a given socket. */ -void mg_set_close_on_exec(sock_t sock) { -#if defined(_WIN32) && !defined(WINCE) - (void) SetHandleInformation((HANDLE) sock, HANDLE_FLAG_INHERIT, 0); -#elif defined(__unix__) - fcntl(sock, F_SETFD, FD_CLOEXEC); -#else - (void) sock; -#endif -} - -void mg_sock_addr_to_str(const union socket_address *sa, char *buf, size_t len, - int flags) { - int is_v6; - if (buf == NULL || len <= 0) return; - buf[0] = '\0'; -#if MG_ENABLE_IPV6 - is_v6 = sa->sa.sa_family == AF_INET6; -#else - is_v6 = 0; -#endif - if (flags & MG_SOCK_STRINGIFY_IP) { -#if MG_ENABLE_IPV6 - const void *addr = NULL; - char *start = buf; - socklen_t capacity = len; - if (!is_v6) { - addr = &sa->sin.sin_addr; - } else { - addr = (void *) &sa->sin6.sin6_addr; - if (flags & MG_SOCK_STRINGIFY_PORT) { - *buf = '['; - start++; - capacity--; - } - } - if (inet_ntop(sa->sa.sa_family, addr, start, capacity) == NULL) { - *buf = '\0'; - } -#elif defined(_WIN32) || MG_LWIP || (MG_NET_IF == MG_NET_IF_PIC32) - /* Only Windoze Vista (and newer) have inet_ntop() */ - strncpy(buf, inet_ntoa(sa->sin.sin_addr), len); -#else - inet_ntop(AF_INET, (void *) &sa->sin.sin_addr, buf, len); -#endif - } - if (flags & MG_SOCK_STRINGIFY_PORT) { - int port = ntohs(sa->sin.sin_port); - if (flags & MG_SOCK_STRINGIFY_IP) { - snprintf(buf + strlen(buf), len - (strlen(buf) + 1), "%s:%d", - (is_v6 ? "]" : ""), port); - } else { - snprintf(buf, len, "%d", port); - } - } -} - -void mg_conn_addr_to_str(struct mg_connection *nc, char *buf, size_t len, - int flags) { - union socket_address sa; - memset(&sa, 0, sizeof(sa)); - mg_if_get_conn_addr(nc, flags & MG_SOCK_STRINGIFY_REMOTE, &sa); - mg_sock_addr_to_str(&sa, buf, len, flags); -} - -#if MG_ENABLE_HEXDUMP -int mg_hexdump(const void *buf, int len, char *dst, int dst_len) { - const unsigned char *p = (const unsigned char *) buf; - char ascii[17] = ""; - int i, idx, n = 0; - - for (i = 0; i < len; i++) { - idx = i % 16; - if (idx == 0) { - if (i > 0) n += snprintf(dst + n, MAX(dst_len - n, 0), " %s\n", ascii); - n += snprintf(dst + n, MAX(dst_len - n, 0), "%04x ", i); - } - if (dst_len - n < 0) { - return n; - } - n += snprintf(dst + n, MAX(dst_len - n, 0), " %02x", p[i]); - ascii[idx] = p[i] < 0x20 || p[i] > 0x7e ? '.' : p[i]; - ascii[idx + 1] = '\0'; - } - - while (i++ % 16) n += snprintf(dst + n, MAX(dst_len - n, 0), "%s", " "); - n += snprintf(dst + n, MAX(dst_len - n, 0), " %s\n\n", ascii); - - return n; -} - -void mg_hexdump_connection(struct mg_connection *nc, const char *path, - const void *buf, int num_bytes, int ev) { - FILE *fp = NULL; - char *hexbuf, src[60], dst[60]; - int buf_size = num_bytes * 5 + 100; - - if (strcmp(path, "-") == 0) { - fp = stdout; - } else if (strcmp(path, "--") == 0) { - fp = stderr; -#if MG_ENABLE_FILESYSTEM - } else { - fp = mg_fopen(path, "a"); -#endif - } - if (fp == NULL) return; - - mg_conn_addr_to_str(nc, src, sizeof(src), - MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT); - mg_conn_addr_to_str(nc, dst, sizeof(dst), MG_SOCK_STRINGIFY_IP | - MG_SOCK_STRINGIFY_PORT | - MG_SOCK_STRINGIFY_REMOTE); - fprintf( - fp, "%lu %p %s %s %s %d\n", (unsigned long) mg_time(), (void *) nc, src, - ev == MG_EV_RECV ? "<-" : ev == MG_EV_SEND - ? "->" - : ev == MG_EV_ACCEPT - ? "" : "XX", - dst, num_bytes); - if (num_bytes > 0 && (hexbuf = (char *) MG_MALLOC(buf_size)) != NULL) { - mg_hexdump(buf, num_bytes, hexbuf, buf_size); - fprintf(fp, "%s", hexbuf); - MG_FREE(hexbuf); - } - if (fp != stdin && fp != stdout) fclose(fp); -} -#endif - -int mg_is_big_endian(void) { - static const int n = 1; - /* TODO(mkm) use compiletime check with 4-byte char literal */ - return ((char *) &n)[0] == 0; -} - -const char *mg_next_comma_list_entry(const char *list, struct mg_str *val, - struct mg_str *eq_val) { - if (list == NULL || *list == '\0') { - /* End of the list */ - list = NULL; - } else { - val->p = list; - if ((list = strchr(val->p, ',')) != NULL) { - /* Comma found. Store length and shift the list ptr */ - val->len = list - val->p; - list++; - } else { - /* This value is the last one */ - list = val->p + strlen(val->p); - val->len = list - val->p; - } - - if (eq_val != NULL) { - /* Value has form "x=y", adjust pointers and lengths */ - /* so that val points to "x", and eq_val points to "y". */ - eq_val->len = 0; - eq_val->p = (const char *) memchr(val->p, '=', val->len); - if (eq_val->p != NULL) { - eq_val->p++; /* Skip over '=' character */ - eq_val->len = val->p + val->len - eq_val->p; - val->len = (eq_val->p - val->p) - 1; - } - } - } - - return list; -} - -int mg_match_prefix_n(const struct mg_str pattern, const struct mg_str str) { - const char *or_str; - size_t len, i = 0, j = 0; - int res; - - if ((or_str = (const char *) memchr(pattern.p, '|', pattern.len)) != NULL) { - struct mg_str pstr = {pattern.p, (size_t)(or_str - pattern.p)}; - res = mg_match_prefix_n(pstr, str); - if (res > 0) return res; - pstr.p = or_str + 1; - pstr.len = (pattern.p + pattern.len) - (or_str + 1); - return mg_match_prefix_n(pstr, str); - } - - for (; i < pattern.len; i++, j++) { - if (pattern.p[i] == '?' && j != str.len) { - continue; - } else if (pattern.p[i] == '$') { - return j == str.len ? (int) j : -1; - } else if (pattern.p[i] == '*') { - i++; - if (pattern.p[i] == '*') { - i++; - len = str.len - j; - } else { - len = 0; - while (j + len != str.len && str.p[j + len] != '/') { - len++; - } - } - if (i == pattern.len) { - return j + len; - } - do { - const struct mg_str pstr = {pattern.p + i, pattern.len - i}; - const struct mg_str sstr = {str.p + j + len, str.len - j - len}; - res = mg_match_prefix_n(pstr, sstr); - } while (res == -1 && len-- > 0); - return res == -1 ? -1 : (int) (j + res + len); - } else if (lowercase(&pattern.p[i]) != lowercase(&str.p[j])) { - return -1; - } - } - return j; -} - -int mg_match_prefix(const char *pattern, int pattern_len, const char *str) { - const struct mg_str pstr = {pattern, (size_t) pattern_len}; - return mg_match_prefix_n(pstr, mg_mk_str(str)); -} - -DO_NOT_WARN_UNUSED MG_INTERNAL int mg_get_errno(void) { -#ifndef WINCE - return errno; -#else - /* TODO(alashkin): translate error codes? */ - return GetLastError(); -#endif -} - -void mg_mbuf_append_base64_putc(char ch, void *user_data) { - struct mbuf *mbuf = (struct mbuf *) user_data; - mbuf_append(mbuf, &ch, sizeof(ch)); -} - -void mg_mbuf_append_base64(struct mbuf *mbuf, const void *data, size_t len) { - struct cs_base64_ctx ctx; - cs_base64_init(&ctx, mg_mbuf_append_base64_putc, mbuf); - cs_base64_update(&ctx, (const char *) data, len); - cs_base64_finish(&ctx); -} - -void mg_basic_auth_header(const char *user, const char *pass, - struct mbuf *buf) { - const char *header_prefix = "Authorization: Basic "; - const char *header_suffix = "\r\n"; - - struct cs_base64_ctx ctx; - cs_base64_init(&ctx, mg_mbuf_append_base64_putc, buf); - - mbuf_append(buf, header_prefix, strlen(header_prefix)); - - cs_base64_update(&ctx, user, strlen(user)); - if (pass != NULL) { - cs_base64_update(&ctx, ":", 1); - cs_base64_update(&ctx, pass, strlen(pass)); - } - cs_base64_finish(&ctx); - mbuf_append(buf, header_suffix, strlen(header_suffix)); -} -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/mqtt.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_MQTT - -#include - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/mqtt.h" */ - -static uint16_t getu16(const char *p) { - const uint8_t *up = (const uint8_t *) p; - return (up[0] << 8) + up[1]; -} - -static const char *scanto(const char *p, struct mg_str *s) { - s->len = getu16(p); - s->p = p + 2; - return s->p + s->len; -} - -MG_INTERNAL int parse_mqtt(struct mbuf *io, struct mg_mqtt_message *mm) { - uint8_t header; - size_t len = 0; - int cmd; - const char *p = &io->buf[1], *end; - - if (io->len < 2) return -1; - header = io->buf[0]; - cmd = header >> 4; - - /* decode mqtt variable length */ - do { - len += (*p & 127) << 7 * (p - &io->buf[1]); - } while ((*p++ & 128) != 0 && ((size_t)(p - io->buf) <= io->len)); - - end = p + len; - if (end > io->buf + io->len + 1) { - return -1; - } - - mm->cmd = cmd; - mm->qos = MG_MQTT_GET_QOS(header); - - switch (cmd) { - case MG_MQTT_CMD_CONNECT: { - p = scanto(p, &mm->protocol_name); - mm->protocol_version = *(uint8_t *) p++; - mm->connect_flags = *(uint8_t *) p++; - mm->keep_alive_timer = getu16(p); - p += 2; - if (p < end) p = scanto(p, &mm->client_id); - if (p < end && (mm->connect_flags & MG_MQTT_HAS_WILL)) - p = scanto(p, &mm->will_topic); - if (p < end && (mm->connect_flags & MG_MQTT_HAS_WILL)) - p = scanto(p, &mm->will_message); - if (p < end && (mm->connect_flags & MG_MQTT_HAS_USER_NAME)) - p = scanto(p, &mm->user_name); - if (p < end && (mm->connect_flags & MG_MQTT_HAS_PASSWORD)) - p = scanto(p, &mm->password); - - LOG(LL_DEBUG, - ("%d %2x %d proto [%.*s] client_id [%.*s] will_topic [%.*s] " - "will_msg [%.*s] user_name [%.*s] password [%.*s]", - len, (int) mm->connect_flags, (int) mm->keep_alive_timer, - (int) mm->protocol_name.len, mm->protocol_name.p, - (int) mm->client_id.len, mm->client_id.p, (int) mm->will_topic.len, - mm->will_topic.p, (int) mm->will_message.len, mm->will_message.p, - (int) mm->user_name.len, mm->user_name.p, (int) mm->password.len, - mm->password.p)); - break; - } - case MG_MQTT_CMD_CONNACK: - mm->connack_ret_code = p[1]; - break; - case MG_MQTT_CMD_PUBACK: - case MG_MQTT_CMD_PUBREC: - case MG_MQTT_CMD_PUBREL: - case MG_MQTT_CMD_PUBCOMP: - case MG_MQTT_CMD_SUBACK: - mm->message_id = getu16(p); - break; - case MG_MQTT_CMD_PUBLISH: { - if (MG_MQTT_GET_QOS(header) > 0) { - mm->message_id = getu16(p); - p += 2; - } - p = scanto(p, &mm->topic); - - mm->payload.p = p; - mm->payload.len = end - p; - break; - } - case MG_MQTT_CMD_SUBSCRIBE: - mm->message_id = getu16(p); - p += 2; - /* - * topic expressions are left in the payload and can be parsed with - * `mg_mqtt_next_subscribe_topic` - */ - mm->payload.p = p; - mm->payload.len = end - p; - break; - default: - /* Unhandled command */ - break; - } - - return end - io->buf; -} - -static void mqtt_handler(struct mg_connection *nc, int ev, void *ev_data) { - int len; - struct mbuf *io = &nc->recv_mbuf; - struct mg_mqtt_message mm; - memset(&mm, 0, sizeof(mm)); - - nc->handler(nc, ev, ev_data); - - switch (ev) { - case MG_EV_RECV: - len = parse_mqtt(io, &mm); - if (len == -1) break; /* not fully buffered */ - nc->handler(nc, MG_MQTT_EVENT_BASE + mm.cmd, &mm); - mbuf_remove(io, len); - break; - } -} - -static void mg_mqtt_proto_data_destructor(void *proto_data) { - MG_FREE(proto_data); -} - -void mg_set_protocol_mqtt(struct mg_connection *nc) { - nc->proto_handler = mqtt_handler; - nc->proto_data = MG_CALLOC(1, sizeof(struct mg_mqtt_proto_data)); - nc->proto_data_destructor = mg_mqtt_proto_data_destructor; -} - -void mg_send_mqtt_handshake(struct mg_connection *nc, const char *client_id) { - static struct mg_send_mqtt_handshake_opts opts; - mg_send_mqtt_handshake_opt(nc, client_id, opts); -} - -void mg_send_mqtt_handshake_opt(struct mg_connection *nc, const char *client_id, - struct mg_send_mqtt_handshake_opts opts) { - uint8_t header = MG_MQTT_CMD_CONNECT << 4; - uint8_t rem_len; - uint16_t keep_alive; - uint16_t len; - struct mg_mqtt_proto_data *pd = (struct mg_mqtt_proto_data *) nc->proto_data; - - /* - * 9: version_header(len, magic_string, version_number), 1: flags, 2: - * keep-alive timer, - * 2: client_identifier_len, n: client_id - */ - rem_len = 9 + 1 + 2 + 2 + (uint8_t) strlen(client_id); - - if (opts.user_name != NULL) { - opts.flags |= MG_MQTT_HAS_USER_NAME; - rem_len += (uint8_t) strlen(opts.user_name) + 2; - } - if (opts.password != NULL) { - opts.flags |= MG_MQTT_HAS_PASSWORD; - rem_len += (uint8_t) strlen(opts.password) + 2; - } - if (opts.will_topic != NULL && opts.will_message != NULL) { - opts.flags |= MG_MQTT_HAS_WILL; - rem_len += (uint8_t) strlen(opts.will_topic) + 2; - rem_len += (uint8_t) strlen(opts.will_message) + 2; - } - - mg_send(nc, &header, 1); - mg_send(nc, &rem_len, 1); - mg_send(nc, "\00\06MQIsdp\03", 9); - mg_send(nc, &opts.flags, 1); - - if (opts.keep_alive == 0) { - opts.keep_alive = 60; - } - - keep_alive = htons(opts.keep_alive); - mg_send(nc, &keep_alive, 2); - - len = htons((uint16_t) strlen(client_id)); - mg_send(nc, &len, 2); - mg_send(nc, client_id, strlen(client_id)); - - if (opts.flags & MG_MQTT_HAS_WILL) { - len = htons((uint16_t) strlen(opts.will_topic)); - mg_send(nc, &len, 2); - mg_send(nc, opts.will_topic, strlen(opts.will_topic)); - - len = htons((uint16_t) strlen(opts.will_message)); - mg_send(nc, &len, 2); - mg_send(nc, opts.will_message, strlen(opts.will_message)); - } - - if (opts.flags & MG_MQTT_HAS_USER_NAME) { - len = htons((uint16_t) strlen(opts.user_name)); - mg_send(nc, &len, 2); - mg_send(nc, opts.user_name, strlen(opts.user_name)); - } - if (opts.flags & MG_MQTT_HAS_PASSWORD) { - len = htons((uint16_t) strlen(opts.password)); - mg_send(nc, &len, 2); - mg_send(nc, opts.password, strlen(opts.password)); - } - - if (pd != NULL) { - pd->keep_alive = opts.keep_alive; - } -} - -static void mg_mqtt_prepend_header(struct mg_connection *nc, uint8_t cmd, - uint8_t flags, size_t len) { - size_t off = nc->send_mbuf.len - len; - uint8_t header = cmd << 4 | (uint8_t) flags; - - uint8_t buf[1 + sizeof(size_t)]; - uint8_t *vlen = &buf[1]; - - assert(nc->send_mbuf.len >= len); - - buf[0] = header; - - /* mqtt variable length encoding */ - do { - *vlen = len % 0x80; - len /= 0x80; - if (len > 0) *vlen |= 0x80; - vlen++; - } while (len > 0); - - mbuf_insert(&nc->send_mbuf, off, buf, vlen - buf); -} - -void mg_mqtt_publish(struct mg_connection *nc, const char *topic, - uint16_t message_id, int flags, const void *data, - size_t len) { - size_t old_len = nc->send_mbuf.len; - - uint16_t topic_len = htons((uint16_t) strlen(topic)); - uint16_t message_id_net = htons(message_id); - - mg_send(nc, &topic_len, 2); - mg_send(nc, topic, strlen(topic)); - if (MG_MQTT_GET_QOS(flags) > 0) { - mg_send(nc, &message_id_net, 2); - } - mg_send(nc, data, len); - - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_PUBLISH, flags, - nc->send_mbuf.len - old_len); -} - -void mg_mqtt_subscribe(struct mg_connection *nc, - const struct mg_mqtt_topic_expression *topics, - size_t topics_len, uint16_t message_id) { - size_t old_len = nc->send_mbuf.len; - - uint16_t message_id_n = htons(message_id); - size_t i; - - mg_send(nc, (char *) &message_id_n, 2); - for (i = 0; i < topics_len; i++) { - uint16_t topic_len_n = htons((uint16_t) strlen(topics[i].topic)); - mg_send(nc, &topic_len_n, 2); - mg_send(nc, topics[i].topic, strlen(topics[i].topic)); - mg_send(nc, &topics[i].qos, 1); - } - - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_SUBSCRIBE, MG_MQTT_QOS(1), - nc->send_mbuf.len - old_len); -} - -int mg_mqtt_next_subscribe_topic(struct mg_mqtt_message *msg, - struct mg_str *topic, uint8_t *qos, int pos) { - unsigned char *buf = (unsigned char *) msg->payload.p + pos; - - if ((size_t) pos >= msg->payload.len) { - return -1; - } - - topic->len = buf[0] << 8 | buf[1]; - topic->p = (char *) buf + 2; - *qos = buf[2 + topic->len]; - return pos + 2 + topic->len + 1; -} - -void mg_mqtt_unsubscribe(struct mg_connection *nc, char **topics, - size_t topics_len, uint16_t message_id) { - size_t old_len = nc->send_mbuf.len; - - uint16_t message_id_n = htons(message_id); - size_t i; - - mg_send(nc, (char *) &message_id_n, 2); - for (i = 0; i < topics_len; i++) { - uint16_t topic_len_n = htons((uint16_t) strlen(topics[i])); - mg_send(nc, &topic_len_n, 2); - mg_send(nc, topics[i], strlen(topics[i])); - } - - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_UNSUBSCRIBE, MG_MQTT_QOS(1), - nc->send_mbuf.len - old_len); -} - -void mg_mqtt_connack(struct mg_connection *nc, uint8_t return_code) { - uint8_t unused = 0; - mg_send(nc, &unused, 1); - mg_send(nc, &return_code, 1); - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_CONNACK, 0, 2); -} - -/* - * Sends a command which contains only a `message_id` and a QoS level of 1. - * - * Helper function. - */ -static void mg_send_mqtt_short_command(struct mg_connection *nc, uint8_t cmd, - uint16_t message_id) { - uint16_t message_id_net = htons(message_id); - mg_send(nc, &message_id_net, 2); - mg_mqtt_prepend_header(nc, cmd, MG_MQTT_QOS(1), 2); -} - -void mg_mqtt_puback(struct mg_connection *nc, uint16_t message_id) { - mg_send_mqtt_short_command(nc, MG_MQTT_CMD_PUBACK, message_id); -} - -void mg_mqtt_pubrec(struct mg_connection *nc, uint16_t message_id) { - mg_send_mqtt_short_command(nc, MG_MQTT_CMD_PUBREC, message_id); -} - -void mg_mqtt_pubrel(struct mg_connection *nc, uint16_t message_id) { - mg_send_mqtt_short_command(nc, MG_MQTT_CMD_PUBREL, message_id); -} - -void mg_mqtt_pubcomp(struct mg_connection *nc, uint16_t message_id) { - mg_send_mqtt_short_command(nc, MG_MQTT_CMD_PUBCOMP, message_id); -} - -void mg_mqtt_suback(struct mg_connection *nc, uint8_t *qoss, size_t qoss_len, - uint16_t message_id) { - size_t i; - uint16_t message_id_net = htons(message_id); - mg_send(nc, &message_id_net, 2); - for (i = 0; i < qoss_len; i++) { - mg_send(nc, &qoss[i], 1); - } - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_SUBACK, MG_MQTT_QOS(1), 2 + qoss_len); -} - -void mg_mqtt_unsuback(struct mg_connection *nc, uint16_t message_id) { - mg_send_mqtt_short_command(nc, MG_MQTT_CMD_UNSUBACK, message_id); -} - -void mg_mqtt_ping(struct mg_connection *nc) { - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_PINGREQ, 0, 0); -} - -void mg_mqtt_pong(struct mg_connection *nc) { - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_PINGRESP, 0, 0); -} - -void mg_mqtt_disconnect(struct mg_connection *nc) { - mg_mqtt_prepend_header(nc, MG_MQTT_CMD_DISCONNECT, 0, 0); -} - -#endif /* MG_ENABLE_MQTT */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/mqtt_server.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/mqtt-server.h" */ - -#if MG_ENABLE_MQTT_BROKER - -static void mg_mqtt_session_init(struct mg_mqtt_broker *brk, - struct mg_mqtt_session *s, - struct mg_connection *nc) { - s->brk = brk; - s->subscriptions = NULL; - s->num_subscriptions = 0; - s->nc = nc; -} - -static void mg_mqtt_add_session(struct mg_mqtt_session *s) { - LIST_INSERT_HEAD(&s->brk->sessions, s, link); -} - -static void mg_mqtt_remove_session(struct mg_mqtt_session *s) { - LIST_REMOVE(s, link); -} - -static void mg_mqtt_destroy_session(struct mg_mqtt_session *s) { - size_t i; - for (i = 0; i < s->num_subscriptions; i++) { - MG_FREE((void *) s->subscriptions[i].topic); - } - MG_FREE(s->subscriptions); - MG_FREE(s); -} - -static void mg_mqtt_close_session(struct mg_mqtt_session *s) { - mg_mqtt_remove_session(s); - mg_mqtt_destroy_session(s); -} - -void mg_mqtt_broker_init(struct mg_mqtt_broker *brk, void *user_data) { - LIST_INIT(&brk->sessions); - brk->user_data = user_data; -} - -static void mg_mqtt_broker_handle_connect(struct mg_mqtt_broker *brk, - struct mg_connection *nc) { - struct mg_mqtt_session *s = (struct mg_mqtt_session *) calloc(1, sizeof *s); - if (s == NULL) { - /* LCOV_EXCL_START */ - mg_mqtt_connack(nc, MG_EV_MQTT_CONNACK_SERVER_UNAVAILABLE); - return; - /* LCOV_EXCL_STOP */ - } - - /* TODO(mkm): check header (magic and version) */ - - mg_mqtt_session_init(brk, s, nc); - s->user_data = nc->user_data; - nc->user_data = s; - mg_mqtt_add_session(s); - - mg_mqtt_connack(nc, MG_EV_MQTT_CONNACK_ACCEPTED); -} - -static void mg_mqtt_broker_handle_subscribe(struct mg_connection *nc, - struct mg_mqtt_message *msg) { - struct mg_mqtt_session *ss = (struct mg_mqtt_session *) nc->user_data; - uint8_t qoss[512]; - size_t qoss_len = 0; - struct mg_str topic; - uint8_t qos; - int pos; - struct mg_mqtt_topic_expression *te; - - for (pos = 0; - (pos = mg_mqtt_next_subscribe_topic(msg, &topic, &qos, pos)) != -1;) { - qoss[qoss_len++] = qos; - } - - ss->subscriptions = (struct mg_mqtt_topic_expression *) realloc( - ss->subscriptions, sizeof(*ss->subscriptions) * qoss_len); - for (pos = 0; - (pos = mg_mqtt_next_subscribe_topic(msg, &topic, &qos, pos)) != -1; - ss->num_subscriptions++) { - te = &ss->subscriptions[ss->num_subscriptions]; - te->topic = (char *) malloc(topic.len + 1); - te->qos = qos; - strncpy((char *) te->topic, topic.p, topic.len + 1); - } - - mg_mqtt_suback(nc, qoss, qoss_len, msg->message_id); -} - -/* - * Matches a topic against a topic expression - * - * See http://goo.gl/iWk21X - * - * Returns 1 if it matches; 0 otherwise. - */ -static int mg_mqtt_match_topic_expression(const char *exp, - const struct mg_str *topic) { - /* TODO(mkm): implement real matching */ - size_t len = strlen(exp); - if (strchr(exp, '#')) { - len -= 2; - if (topic->len < len) { - len = topic->len; - } - } - return strncmp(topic->p, exp, len) == 0; -} - -static void mg_mqtt_broker_handle_publish(struct mg_mqtt_broker *brk, - struct mg_mqtt_message *msg) { - struct mg_mqtt_session *s; - size_t i; - - for (s = mg_mqtt_next(brk, NULL); s != NULL; s = mg_mqtt_next(brk, s)) { - for (i = 0; i < s->num_subscriptions; i++) { - if (mg_mqtt_match_topic_expression(s->subscriptions[i].topic, - &msg->topic)) { - char buf[100], *p = buf; - mg_asprintf(&p, sizeof(buf), "%.*s", (int) msg->topic.len, - msg->topic.p); - if (p == NULL) { - return; - } - mg_mqtt_publish(s->nc, p, 0, 0, msg->payload.p, msg->payload.len); - if (p != buf) { - MG_FREE(p); - } - break; - } - } - } -} - -void mg_mqtt_broker(struct mg_connection *nc, int ev, void *data) { - struct mg_mqtt_message *msg = (struct mg_mqtt_message *) data; - struct mg_mqtt_broker *brk; - - if (nc->listener) { - brk = (struct mg_mqtt_broker *) nc->listener->user_data; - } else { - brk = (struct mg_mqtt_broker *) nc->user_data; - } - - switch (ev) { - case MG_EV_ACCEPT: - mg_set_protocol_mqtt(nc); - nc->user_data = NULL; /* Clear up the inherited pointer to broker */ - break; - case MG_EV_MQTT_CONNECT: - mg_mqtt_broker_handle_connect(brk, nc); - break; - case MG_EV_MQTT_SUBSCRIBE: - mg_mqtt_broker_handle_subscribe(nc, msg); - break; - case MG_EV_MQTT_PUBLISH: - mg_mqtt_broker_handle_publish(brk, msg); - break; - case MG_EV_CLOSE: - if (nc->listener && nc->user_data != NULL) { - mg_mqtt_close_session((struct mg_mqtt_session *) nc->user_data); - } - break; - } -} - -struct mg_mqtt_session *mg_mqtt_next(struct mg_mqtt_broker *brk, - struct mg_mqtt_session *s) { - return s == NULL ? LIST_FIRST(&brk->sessions) : LIST_NEXT(s, link); -} - -#endif /* MG_ENABLE_MQTT_BROKER */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/dns.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_DNS - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/dns.h" */ - -static int mg_dns_tid = 0xa0; - -struct mg_dns_header { - uint16_t transaction_id; - uint16_t flags; - uint16_t num_questions; - uint16_t num_answers; - uint16_t num_authority_prs; - uint16_t num_other_prs; -}; - -struct mg_dns_resource_record *mg_dns_next_record( - struct mg_dns_message *msg, int query, - struct mg_dns_resource_record *prev) { - struct mg_dns_resource_record *rr; - - for (rr = (prev == NULL ? msg->answers : prev + 1); - rr - msg->answers < msg->num_answers; rr++) { - if (rr->rtype == query) { - return rr; - } - } - return NULL; -} - -int mg_dns_parse_record_data(struct mg_dns_message *msg, - struct mg_dns_resource_record *rr, void *data, - size_t data_len) { - switch (rr->rtype) { - case MG_DNS_A_RECORD: - if (data_len < sizeof(struct in_addr)) { - return -1; - } - if (rr->rdata.p + data_len > msg->pkt.p + msg->pkt.len) { - return -1; - } - memcpy(data, rr->rdata.p, data_len); - return 0; -#if MG_ENABLE_IPV6 - case MG_DNS_AAAA_RECORD: - if (data_len < sizeof(struct in6_addr)) { - return -1; /* LCOV_EXCL_LINE */ - } - memcpy(data, rr->rdata.p, data_len); - return 0; -#endif - case MG_DNS_CNAME_RECORD: - mg_dns_uncompress_name(msg, &rr->rdata, (char *) data, data_len); - return 0; - } - - return -1; -} - -int mg_dns_insert_header(struct mbuf *io, size_t pos, - struct mg_dns_message *msg) { - struct mg_dns_header header; - - memset(&header, 0, sizeof(header)); - header.transaction_id = msg->transaction_id; - header.flags = htons(msg->flags); - header.num_questions = htons(msg->num_questions); - header.num_answers = htons(msg->num_answers); - - return mbuf_insert(io, pos, &header, sizeof(header)); -} - -int mg_dns_copy_questions(struct mbuf *io, struct mg_dns_message *msg) { - unsigned char *begin, *end; - struct mg_dns_resource_record *last_q; - if (msg->num_questions <= 0) return 0; - begin = (unsigned char *) msg->pkt.p + sizeof(struct mg_dns_header); - last_q = &msg->questions[msg->num_questions - 1]; - end = (unsigned char *) last_q->name.p + last_q->name.len + 4; - return mbuf_append(io, begin, end - begin); -} - -int mg_dns_encode_name(struct mbuf *io, const char *name, size_t len) { - const char *s; - unsigned char n; - size_t pos = io->len; - - do { - if ((s = strchr(name, '.')) == NULL) { - s = name + len; - } - - if (s - name > 127) { - return -1; /* TODO(mkm) cover */ - } - n = s - name; /* chunk length */ - mbuf_append(io, &n, 1); /* send length */ - mbuf_append(io, name, n); - - if (*s == '.') { - n++; - } - - name += n; - len -= n; - } while (*s != '\0'); - mbuf_append(io, "\0", 1); /* Mark end of host name */ - - return io->len - pos; -} - -int mg_dns_encode_record(struct mbuf *io, struct mg_dns_resource_record *rr, - const char *name, size_t nlen, const void *rdata, - size_t rlen) { - size_t pos = io->len; - uint16_t u16; - uint32_t u32; - - if (rr->kind == MG_DNS_INVALID_RECORD) { - return -1; /* LCOV_EXCL_LINE */ - } - - if (mg_dns_encode_name(io, name, nlen) == -1) { - return -1; - } - - u16 = htons(rr->rtype); - mbuf_append(io, &u16, 2); - u16 = htons(rr->rclass); - mbuf_append(io, &u16, 2); - - if (rr->kind == MG_DNS_ANSWER) { - u32 = htonl(rr->ttl); - mbuf_append(io, &u32, 4); - - if (rr->rtype == MG_DNS_CNAME_RECORD) { - int clen; - /* fill size after encoding */ - size_t off = io->len; - mbuf_append(io, &u16, 2); - if ((clen = mg_dns_encode_name(io, (const char *) rdata, rlen)) == -1) { - return -1; - } - u16 = clen; - io->buf[off] = u16 >> 8; - io->buf[off + 1] = u16 & 0xff; - } else { - u16 = htons((uint16_t) rlen); - mbuf_append(io, &u16, 2); - mbuf_append(io, rdata, rlen); - } - } - - return io->len - pos; -} - -void mg_send_dns_query(struct mg_connection *nc, const char *name, - int query_type) { - struct mg_dns_message *msg = - (struct mg_dns_message *) MG_CALLOC(1, sizeof(*msg)); - struct mbuf pkt; - struct mg_dns_resource_record *rr = &msg->questions[0]; - - DBG(("%s %d", name, query_type)); - - mbuf_init(&pkt, 64 /* Start small, it'll grow as needed. */); - - msg->transaction_id = ++mg_dns_tid; - msg->flags = 0x100; - msg->num_questions = 1; - - mg_dns_insert_header(&pkt, 0, msg); - - rr->rtype = query_type; - rr->rclass = 1; /* Class: inet */ - rr->kind = MG_DNS_QUESTION; - - if (mg_dns_encode_record(&pkt, rr, name, strlen(name), NULL, 0) == -1) { - /* TODO(mkm): return an error code */ - goto cleanup; /* LCOV_EXCL_LINE */ - } - - /* TCP DNS requires messages to be prefixed with len */ - if (!(nc->flags & MG_F_UDP)) { - uint16_t len = htons((uint16_t) pkt.len); - mbuf_insert(&pkt, 0, &len, 2); - } - - mg_send(nc, pkt.buf, pkt.len); - mbuf_free(&pkt); - -cleanup: - MG_FREE(msg); -} - -static unsigned char *mg_parse_dns_resource_record( - unsigned char *data, unsigned char *end, struct mg_dns_resource_record *rr, - int reply) { - unsigned char *name = data; - int chunk_len, data_len; - - while (data < end && (chunk_len = *data)) { - if (((unsigned char *) data)[0] & 0xc0) { - data += 1; - break; - } - data += chunk_len + 1; - } - - if (data > end - 5) { - return NULL; - } - - rr->name.p = (char *) name; - rr->name.len = data - name + 1; - data++; - - rr->rtype = data[0] << 8 | data[1]; - data += 2; - - rr->rclass = data[0] << 8 | data[1]; - data += 2; - - rr->kind = reply ? MG_DNS_ANSWER : MG_DNS_QUESTION; - if (reply) { - if (data >= end - 6) { - return NULL; - } - - rr->ttl = (uint32_t) data[0] << 24 | (uint32_t) data[1] << 16 | - data[2] << 8 | data[3]; - data += 4; - - data_len = *data << 8 | *(data + 1); - data += 2; - - rr->rdata.p = (char *) data; - rr->rdata.len = data_len; - data += data_len; - } - return data; -} - -int mg_parse_dns(const char *buf, int len, struct mg_dns_message *msg) { - struct mg_dns_header *header = (struct mg_dns_header *) buf; - unsigned char *data = (unsigned char *) buf + sizeof(*header); - unsigned char *end = (unsigned char *) buf + len; - int i; - - memset(msg, 0, sizeof(*msg)); - msg->pkt.p = buf; - msg->pkt.len = len; - - if (len < (int) sizeof(*header)) return -1; - - msg->transaction_id = header->transaction_id; - msg->flags = ntohs(header->flags); - msg->num_questions = ntohs(header->num_questions); - if (msg->num_questions > (int) ARRAY_SIZE(msg->questions)) { - msg->num_questions = (int) ARRAY_SIZE(msg->questions); - } - msg->num_answers = ntohs(header->num_answers); - if (msg->num_answers > (int) ARRAY_SIZE(msg->answers)) { - msg->num_answers = (int) ARRAY_SIZE(msg->answers); - } - - for (i = 0; i < msg->num_questions; i++) { - data = mg_parse_dns_resource_record(data, end, &msg->questions[i], 0); - if (data == NULL) return -1; - } - - for (i = 0; i < msg->num_answers; i++) { - data = mg_parse_dns_resource_record(data, end, &msg->answers[i], 1); - if (data == NULL) return -1; - } - - return 0; -} - -size_t mg_dns_uncompress_name(struct mg_dns_message *msg, struct mg_str *name, - char *dst, int dst_len) { - int chunk_len; - char *old_dst = dst; - const unsigned char *data = (unsigned char *) name->p; - const unsigned char *end = (unsigned char *) msg->pkt.p + msg->pkt.len; - - if (data >= end) { - return 0; - } - - while ((chunk_len = *data++)) { - int leeway = dst_len - (dst - old_dst); - if (data >= end) { - return 0; - } - - if (chunk_len & 0xc0) { - uint16_t off = (data[-1] & (~0xc0)) << 8 | data[0]; - if (off >= msg->pkt.len) { - return 0; - } - data = (unsigned char *) msg->pkt.p + off; - continue; - } - if (chunk_len > leeway) { - chunk_len = leeway; - } - - if (data + chunk_len >= end) { - return 0; - } - - memcpy(dst, data, chunk_len); - data += chunk_len; - dst += chunk_len; - leeway -= chunk_len; - if (leeway == 0) { - return dst - old_dst; - } - *dst++ = '.'; - } - - if (dst != old_dst) { - *--dst = 0; - } - return dst - old_dst; -} - -static void dns_handler(struct mg_connection *nc, int ev, void *ev_data) { - struct mbuf *io = &nc->recv_mbuf; - struct mg_dns_message msg; - - /* Pass low-level events to the user handler */ - nc->handler(nc, ev, ev_data); - - switch (ev) { - case MG_EV_RECV: - if (!(nc->flags & MG_F_UDP)) { - mbuf_remove(&nc->recv_mbuf, 2); - } - if (mg_parse_dns(nc->recv_mbuf.buf, nc->recv_mbuf.len, &msg) == -1) { - /* reply + recursion allowed + format error */ - memset(&msg, 0, sizeof(msg)); - msg.flags = 0x8081; - mg_dns_insert_header(io, 0, &msg); - if (!(nc->flags & MG_F_UDP)) { - uint16_t len = htons((uint16_t) io->len); - mbuf_insert(io, 0, &len, 2); - } - mg_send(nc, io->buf, io->len); - } else { - /* Call user handler with parsed message */ - nc->handler(nc, MG_DNS_MESSAGE, &msg); - } - mbuf_remove(io, io->len); - break; - } -} - -void mg_set_protocol_dns(struct mg_connection *nc) { - nc->proto_handler = dns_handler; -} - -#endif /* MG_ENABLE_DNS */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/dns_server.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_DNS_SERVER - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/dns-server.h" */ - -struct mg_dns_reply mg_dns_create_reply(struct mbuf *io, - struct mg_dns_message *msg) { - struct mg_dns_reply rep; - rep.msg = msg; - rep.io = io; - rep.start = io->len; - - /* reply + recursion allowed */ - msg->flags |= 0x8080; - mg_dns_copy_questions(io, msg); - - msg->num_answers = 0; - return rep; -} - -void mg_dns_send_reply(struct mg_connection *nc, struct mg_dns_reply *r) { - size_t sent = r->io->len - r->start; - mg_dns_insert_header(r->io, r->start, r->msg); - if (!(nc->flags & MG_F_UDP)) { - uint16_t len = htons((uint16_t) sent); - mbuf_insert(r->io, r->start, &len, 2); - } - - if (&nc->send_mbuf != r->io) { - mg_send(nc, r->io->buf + r->start, r->io->len - r->start); - r->io->len = r->start; - } -} - -int mg_dns_reply_record(struct mg_dns_reply *reply, - struct mg_dns_resource_record *question, - const char *name, int rtype, int ttl, const void *rdata, - size_t rdata_len) { - struct mg_dns_message *msg = (struct mg_dns_message *) reply->msg; - char rname[512]; - struct mg_dns_resource_record *ans = &msg->answers[msg->num_answers]; - if (msg->num_answers >= MG_MAX_DNS_ANSWERS) { - return -1; /* LCOV_EXCL_LINE */ - } - - if (name == NULL) { - name = rname; - rname[511] = 0; - mg_dns_uncompress_name(msg, &question->name, rname, sizeof(rname) - 1); - } - - *ans = *question; - ans->kind = MG_DNS_ANSWER; - ans->rtype = rtype; - ans->ttl = ttl; - - if (mg_dns_encode_record(reply->io, ans, name, strlen(name), rdata, - rdata_len) == -1) { - return -1; /* LCOV_EXCL_LINE */ - }; - - msg->num_answers++; - return 0; -} - -#endif /* MG_ENABLE_DNS_SERVER */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/resolv.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_ASYNC_RESOLVER - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/resolv.h" */ - -#ifndef MG_DEFAULT_NAMESERVER -#define MG_DEFAULT_NAMESERVER "8.8.8.8" -#endif - -static const char *mg_default_dns_server = "udp://" MG_DEFAULT_NAMESERVER ":53"; - -MG_INTERNAL char mg_dns_server[256]; - -struct mg_resolve_async_request { - char name[1024]; - int query; - mg_resolve_callback_t callback; - void *data; - time_t timeout; - int max_retries; - enum mg_resolve_err err; - - /* state */ - time_t last_time; - int retries; -}; - -/* - * Find what nameserver to use. - * - * Return 0 if OK, -1 if error - */ -static int mg_get_ip_address_of_nameserver(char *name, size_t name_len) { - int ret = -1; - -#ifdef _WIN32 - int i; - LONG err; - HKEY hKey, hSub; - wchar_t subkey[512], value[128], - *key = L"SYSTEM\\ControlSet001\\Services\\Tcpip\\Parameters\\Interfaces"; - - if ((err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hKey)) != - ERROR_SUCCESS) { - fprintf(stderr, "cannot open reg key %S: %ld\n", key, err); - ret = -1; - } else { - for (ret = -1, i = 0; 1; i++) { - DWORD subkey_size = sizeof(subkey), type, len = sizeof(value); - if (RegEnumKeyExW(hKey, i, subkey, &subkey_size, NULL, NULL, NULL, - NULL) != ERROR_SUCCESS) { - break; - } - if (RegOpenKeyExW(hKey, subkey, 0, KEY_READ, &hSub) == ERROR_SUCCESS && - (RegQueryValueExW(hSub, L"NameServer", 0, &type, (void *) value, - &len) == ERROR_SUCCESS || - RegQueryValueExW(hSub, L"DhcpNameServer", 0, &type, (void *) value, - &len) == ERROR_SUCCESS)) { - /* - * See https://github.com/cesanta/mongoose/issues/176 - * The value taken from the registry can be empty, a single - * IP address, or multiple IP addresses separated by comma. - * If it's empty, check the next interface. - * If it's multiple IP addresses, take the first one. - */ - wchar_t *comma = wcschr(value, ','); - if (value[0] == '\0') { - continue; - } - if (comma != NULL) { - *comma = '\0'; - } - snprintf(name, name_len, "udp://%S:53", value); - ret = 0; - RegCloseKey(hSub); - break; - } - } - RegCloseKey(hKey); - } -#elif MG_ENABLE_FILESYSTEM - FILE *fp; - char line[512]; - - if ((fp = mg_fopen("/etc/resolv.conf", "r")) == NULL) { - ret = -1; - } else { - /* Try to figure out what nameserver to use */ - for (ret = -1; fgets(line, sizeof(line), fp) != NULL;) { - unsigned int a, b, c, d; - if (sscanf(line, "nameserver %u.%u.%u.%u", &a, &b, &c, &d) == 4) { - snprintf(name, name_len, "udp://%u.%u.%u.%u:53", a, b, c, d); - ret = 0; - break; - } - } - (void) fclose(fp); - } -#else - snprintf(name, name_len, "%s", mg_default_dns_server); -#endif /* _WIN32 */ - - return ret; -} - -int mg_resolve_from_hosts_file(const char *name, union socket_address *usa) { -#if MG_ENABLE_FILESYSTEM - /* TODO(mkm) cache /etc/hosts */ - FILE *fp; - char line[1024]; - char *p; - char alias[256]; - unsigned int a, b, c, d; - int len = 0; - - if ((fp = mg_fopen("/etc/hosts", "r")) == NULL) { - return -1; - } - - for (; fgets(line, sizeof(line), fp) != NULL;) { - if (line[0] == '#') continue; - - if (sscanf(line, "%u.%u.%u.%u%n", &a, &b, &c, &d, &len) == 0) { - /* TODO(mkm): handle ipv6 */ - continue; - } - for (p = line + len; sscanf(p, "%s%n", alias, &len) == 1; p += len) { - if (strcmp(alias, name) == 0) { - usa->sin.sin_addr.s_addr = htonl(a << 24 | b << 16 | c << 8 | d); - fclose(fp); - return 0; - } - } - } - - fclose(fp); -#else - (void) name; - (void) usa; -#endif - - return -1; -} - -static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *data) { - time_t now = (time_t) mg_time(); - struct mg_resolve_async_request *req; - struct mg_dns_message *msg; - int first = 0; - - DBG(("ev=%d user_data=%p", ev, nc->user_data)); - - req = (struct mg_resolve_async_request *) nc->user_data; - - if (req == NULL) { - return; - } - - switch (ev) { - case MG_EV_CONNECT: - /* don't depend on timer not being at epoch for sending out first req */ - first = 1; - /* fallthrough */ - case MG_EV_POLL: - if (req->retries > req->max_retries) { - req->err = MG_RESOLVE_EXCEEDED_RETRY_COUNT; - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - break; - } - if (first || now - req->last_time >= req->timeout) { - mg_send_dns_query(nc, req->name, req->query); - req->last_time = now; - req->retries++; - } - break; - case MG_EV_RECV: - msg = (struct mg_dns_message *) MG_MALLOC(sizeof(*msg)); - if (mg_parse_dns(nc->recv_mbuf.buf, *(int *) data, msg) == 0 && - msg->num_answers > 0) { - req->callback(msg, req->data, MG_RESOLVE_OK); - nc->user_data = NULL; - MG_FREE(req); - } else { - req->err = MG_RESOLVE_NO_ANSWERS; - } - MG_FREE(msg); - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - break; - case MG_EV_SEND: - /* - * If a send error occurs, prevent closing of the connection by the core. - * We will retry after timeout. - */ - nc->flags &= ~MG_F_CLOSE_IMMEDIATELY; - mbuf_remove(&nc->send_mbuf, nc->send_mbuf.len); - break; - case MG_EV_TIMER: - req->err = MG_RESOLVE_TIMEOUT; - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - break; - case MG_EV_CLOSE: - /* If we got here with request still not done, fire an error callback. */ - if (req != NULL) { - req->callback(NULL, req->data, req->err); - nc->user_data = NULL; - MG_FREE(req); - } - break; - } -} - -int mg_resolve_async(struct mg_mgr *mgr, const char *name, int query, - mg_resolve_callback_t cb, void *data) { - struct mg_resolve_async_opts opts; - memset(&opts, 0, sizeof(opts)); - return mg_resolve_async_opt(mgr, name, query, cb, data, opts); -} - -int mg_resolve_async_opt(struct mg_mgr *mgr, const char *name, int query, - mg_resolve_callback_t cb, void *data, - struct mg_resolve_async_opts opts) { - struct mg_resolve_async_request *req; - struct mg_connection *dns_nc; - const char *nameserver = opts.nameserver_url; - - DBG(("%s %d %p", name, query, opts.dns_conn)); - - /* resolve with DNS */ - req = (struct mg_resolve_async_request *) MG_CALLOC(1, sizeof(*req)); - if (req == NULL) { - return -1; - } - - strncpy(req->name, name, sizeof(req->name)); - req->query = query; - req->callback = cb; - req->data = data; - /* TODO(mkm): parse defaults out of resolve.conf */ - req->max_retries = opts.max_retries ? opts.max_retries : 2; - req->timeout = opts.timeout ? opts.timeout : 5; - - /* Lazily initialize dns server */ - if (nameserver == NULL && mg_dns_server[0] == '\0' && - mg_get_ip_address_of_nameserver(mg_dns_server, sizeof(mg_dns_server)) == - -1) { - strncpy(mg_dns_server, mg_default_dns_server, sizeof(mg_dns_server)); - } - - if (nameserver == NULL) { - nameserver = mg_dns_server; - } - - dns_nc = mg_connect(mgr, nameserver, mg_resolve_async_eh); - if (dns_nc == NULL) { - free(req); - return -1; - } - dns_nc->user_data = req; - if (opts.dns_conn != NULL) { - *opts.dns_conn = dns_nc; - } - - return 0; -} - -#endif /* MG_ENABLE_ASYNC_RESOLVER */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/coap.c" -#endif -/* - * Copyright (c) 2015 Cesanta Software Limited - * All rights reserved - * This software is dual-licensed: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. For the terms of this - * license, see . - * - * You are free to use this software under the terms of the GNU General - * Public License, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * Alternatively, you can license this software under a commercial - * license, as set out in . - */ - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/coap.h" */ - -#if MG_ENABLE_COAP - -void mg_coap_free_options(struct mg_coap_message *cm) { - while (cm->options != NULL) { - struct mg_coap_option *next = cm->options->next; - MG_FREE(cm->options); - cm->options = next; - } -} - -struct mg_coap_option *mg_coap_add_option(struct mg_coap_message *cm, - uint32_t number, char *value, - size_t len) { - struct mg_coap_option *new_option = - (struct mg_coap_option *) MG_CALLOC(1, sizeof(*new_option)); - - new_option->number = number; - new_option->value.p = value; - new_option->value.len = len; - - if (cm->options == NULL) { - cm->options = cm->optiomg_tail = new_option; - } else { - /* - * A very simple attention to help clients to compose options: - * CoAP wants to see options ASC ordered. - * Could be change by using sort in coap_compose - */ - if (cm->optiomg_tail->number <= new_option->number) { - /* if option is already ordered just add it */ - cm->optiomg_tail = cm->optiomg_tail->next = new_option; - } else { - /* looking for appropriate position */ - struct mg_coap_option *current_opt = cm->options; - struct mg_coap_option *prev_opt = 0; - - while (current_opt != NULL) { - if (current_opt->number > new_option->number) { - break; - } - prev_opt = current_opt; - current_opt = current_opt->next; - } - - if (prev_opt != NULL) { - prev_opt->next = new_option; - new_option->next = current_opt; - } else { - /* insert new_option to the beginning */ - new_option->next = cm->options; - cm->options = new_option; - } - } - } - - return new_option; -} - -/* - * Fills CoAP header in mg_coap_message. - * - * Helper function. - */ -static char *coap_parse_header(char *ptr, struct mbuf *io, - struct mg_coap_message *cm) { - if (io->len < sizeof(uint32_t)) { - cm->flags |= MG_COAP_NOT_ENOUGH_DATA; - return NULL; - } - - /* - * Version (Ver): 2-bit unsigned integer. Indicates the CoAP version - * number. Implementations of this specification MUST set this field - * to 1 (01 binary). Other values are reserved for future versions. - * Messages with unknown version numbers MUST be silently ignored. - */ - if (((uint8_t) *ptr >> 6) != 1) { - cm->flags |= MG_COAP_IGNORE; - return NULL; - } - - /* - * Type (T): 2-bit unsigned integer. Indicates if this message is of - * type Confirmable (0), Non-confirmable (1), Acknowledgement (2), or - * Reset (3). - */ - cm->msg_type = ((uint8_t) *ptr & 0x30) >> 4; - cm->flags |= MG_COAP_MSG_TYPE_FIELD; - - /* - * Token Length (TKL): 4-bit unsigned integer. Indicates the length of - * the variable-length Token field (0-8 bytes). Lengths 9-15 are - * reserved, MUST NOT be sent, and MUST be processed as a message - * format error. - */ - cm->token.len = *ptr & 0x0F; - if (cm->token.len > 8) { - cm->flags |= MG_COAP_FORMAT_ERROR; - return NULL; - } - - ptr++; - - /* - * Code: 8-bit unsigned integer, split into a 3-bit class (most - * significant bits) and a 5-bit detail (least significant bits) - */ - cm->code_class = (uint8_t) *ptr >> 5; - cm->code_detail = *ptr & 0x1F; - cm->flags |= (MG_COAP_CODE_CLASS_FIELD | MG_COAP_CODE_DETAIL_FIELD); - - ptr++; - - /* Message ID: 16-bit unsigned integer in network byte order. */ - cm->msg_id = (uint8_t) *ptr << 8 | (uint8_t) * (ptr + 1); - cm->flags |= MG_COAP_MSG_ID_FIELD; - - ptr += 2; - - return ptr; -} - -/* - * Fills token information in mg_coap_message. - * - * Helper function. - */ -static char *coap_get_token(char *ptr, struct mbuf *io, - struct mg_coap_message *cm) { - if (cm->token.len != 0) { - if (ptr + cm->token.len > io->buf + io->len) { - cm->flags |= MG_COAP_NOT_ENOUGH_DATA; - return NULL; - } else { - cm->token.p = ptr; - ptr += cm->token.len; - cm->flags |= MG_COAP_TOKEN_FIELD; - } - } - - return ptr; -} - -/* - * Returns Option Delta or Length. - * - * Helper function. - */ -static int coap_get_ext_opt(char *ptr, struct mbuf *io, uint16_t *opt_info) { - int ret = 0; - - if (*opt_info == 13) { - /* - * 13: An 8-bit unsigned integer follows the initial byte and - * indicates the Option Delta/Length minus 13. - */ - if (ptr < io->buf + io->len) { - *opt_info = (uint8_t) *ptr + 13; - ret = sizeof(uint8_t); - } else { - ret = -1; /* LCOV_EXCL_LINE */ - } - } else if (*opt_info == 14) { - /* - * 14: A 16-bit unsigned integer in network byte order follows the - * initial byte and indicates the Option Delta/Length minus 269. - */ - if (ptr + sizeof(uint8_t) < io->buf + io->len) { - *opt_info = ((uint8_t) *ptr << 8 | (uint8_t) * (ptr + 1)) + 269; - ret = sizeof(uint16_t); - } else { - ret = -1; /* LCOV_EXCL_LINE */ - } - } - - return ret; -} - -/* - * Fills options in mg_coap_message. - * - * Helper function. - * - * General options format: - * +---------------+---------------+ - * | Option Delta | Option Length | 1 byte - * +---------------+---------------+ - * \ Option Delta (extended) \ 0-2 bytes - * +-------------------------------+ - * / Option Length (extended) \ 0-2 bytes - * +-------------------------------+ - * \ Option Value \ 0 or more bytes - * +-------------------------------+ - */ -static char *coap_get_options(char *ptr, struct mbuf *io, - struct mg_coap_message *cm) { - uint16_t prev_opt = 0; - - if (ptr == io->buf + io->len) { - /* end of packet, ok */ - return NULL; - } - - /* 0xFF is payload marker */ - while (ptr < io->buf + io->len && (uint8_t) *ptr != 0xFF) { - uint16_t option_delta, option_lenght; - int optinfo_len; - - /* Option Delta: 4-bit unsigned integer */ - option_delta = ((uint8_t) *ptr & 0xF0) >> 4; - /* Option Length: 4-bit unsigned integer */ - option_lenght = *ptr & 0x0F; - - if (option_delta == 15 || option_lenght == 15) { - /* - * 15: Reserved for future use. If the field is set to this value, - * it MUST be processed as a message format error - */ - cm->flags |= MG_COAP_FORMAT_ERROR; - break; - } - - ptr++; - - /* check for extended option delta */ - optinfo_len = coap_get_ext_opt(ptr, io, &option_delta); - if (optinfo_len == -1) { - cm->flags |= MG_COAP_NOT_ENOUGH_DATA; /* LCOV_EXCL_LINE */ - break; /* LCOV_EXCL_LINE */ - } - - ptr += optinfo_len; - - /* check or extended option lenght */ - optinfo_len = coap_get_ext_opt(ptr, io, &option_lenght); - if (optinfo_len == -1) { - cm->flags |= MG_COAP_NOT_ENOUGH_DATA; /* LCOV_EXCL_LINE */ - break; /* LCOV_EXCL_LINE */ - } - - ptr += optinfo_len; - - /* - * Instead of specifying the Option Number directly, the instances MUST - * appear in order of their Option Numbers and a delta encoding is used - * between them. - */ - option_delta += prev_opt; - - mg_coap_add_option(cm, option_delta, ptr, option_lenght); - - prev_opt = option_delta; - - if (ptr + option_lenght > io->buf + io->len) { - cm->flags |= MG_COAP_NOT_ENOUGH_DATA; /* LCOV_EXCL_LINE */ - break; /* LCOV_EXCL_LINE */ - } - - ptr += option_lenght; - } - - if ((cm->flags & MG_COAP_ERROR) != 0) { - mg_coap_free_options(cm); - return NULL; - } - - cm->flags |= MG_COAP_OPTIOMG_FIELD; - - if (ptr == io->buf + io->len) { - /* end of packet, ok */ - return NULL; - } - - ptr++; - - return ptr; -} - -uint32_t mg_coap_parse(struct mbuf *io, struct mg_coap_message *cm) { - char *ptr; - - memset(cm, 0, sizeof(*cm)); - - if ((ptr = coap_parse_header(io->buf, io, cm)) == NULL) { - return cm->flags; - } - - if ((ptr = coap_get_token(ptr, io, cm)) == NULL) { - return cm->flags; - } - - if ((ptr = coap_get_options(ptr, io, cm)) == NULL) { - return cm->flags; - } - - /* the rest is payload */ - cm->payload.len = io->len - (ptr - io->buf); - if (cm->payload.len != 0) { - cm->payload.p = ptr; - cm->flags |= MG_COAP_PAYLOAD_FIELD; - } - - return cm->flags; -} - -/* - * Calculates extended size of given Opt Number/Length in coap message. - * - * Helper function. - */ -static size_t coap_get_ext_opt_size(uint32_t value) { - int ret = 0; - - if (value >= 13 && value <= 0xFF + 13) { - ret = sizeof(uint8_t); - } else if (value > 0xFF + 13 && value <= 0xFFFF + 269) { - ret = sizeof(uint16_t); - } - - return ret; -} - -/* - * Splits given Opt Number/Length into base and ext values. - * - * Helper function. - */ -static int coap_split_opt(uint32_t value, uint8_t *base, uint16_t *ext) { - int ret = 0; - - if (value < 13) { - *base = value; - } else if (value >= 13 && value <= 0xFF + 13) { - *base = 13; - *ext = value - 13; - ret = sizeof(uint8_t); - } else if (value > 0xFF + 13 && value <= 0xFFFF + 269) { - *base = 14; - *ext = value - 269; - ret = sizeof(uint16_t); - } - - return ret; -} - -/* - * Puts uint16_t (in network order) into given char stream. - * - * Helper function. - */ -static char *coap_add_uint16(char *ptr, uint16_t val) { - *ptr = val >> 8; - ptr++; - *ptr = val & 0x00FF; - ptr++; - return ptr; -} - -/* - * Puts extended value of Opt Number/Length into given char stream. - * - * Helper function. - */ -static char *coap_add_opt_info(char *ptr, uint16_t val, size_t len) { - if (len == sizeof(uint8_t)) { - *ptr = (char) val; - ptr++; - } else if (len == sizeof(uint16_t)) { - ptr = coap_add_uint16(ptr, val); - } - - return ptr; -} - -/* - * Verifies given mg_coap_message and calculates message size for it. - * - * Helper function. - */ -static uint32_t coap_calculate_packet_size(struct mg_coap_message *cm, - size_t *len) { - struct mg_coap_option *opt; - uint32_t prev_opt_number; - - *len = 4; /* header */ - if (cm->msg_type > MG_COAP_MSG_MAX) { - return MG_COAP_ERROR | MG_COAP_MSG_TYPE_FIELD; - } - if (cm->token.len > 8) { - return MG_COAP_ERROR | MG_COAP_TOKEN_FIELD; - } - if (cm->code_class > 7) { - return MG_COAP_ERROR | MG_COAP_CODE_CLASS_FIELD; - } - if (cm->code_detail > 31) { - return MG_COAP_ERROR | MG_COAP_CODE_DETAIL_FIELD; - } - - *len += cm->token.len; - if (cm->payload.len != 0) { - *len += cm->payload.len + 1; /* ... + 1; add payload marker */ - } - - opt = cm->options; - prev_opt_number = 0; - while (opt != NULL) { - *len += 1; /* basic delta/length */ - *len += coap_get_ext_opt_size(opt->number - prev_opt_number); - *len += coap_get_ext_opt_size((uint32_t) opt->value.len); - /* - * Current implementation performs check if - * option_number > previous option_number and produces an error - * TODO(alashkin): write design doc with limitations - * May be resorting is more suitable solution. - */ - if ((opt->next != NULL && opt->number > opt->next->number) || - opt->value.len > 0xFFFF + 269 || - opt->number - prev_opt_number > 0xFFFF + 269) { - return MG_COAP_ERROR | MG_COAP_OPTIOMG_FIELD; - } - *len += opt->value.len; - prev_opt_number = opt->number; - opt = opt->next; - } - - return 0; -} - -uint32_t mg_coap_compose(struct mg_coap_message *cm, struct mbuf *io) { - struct mg_coap_option *opt; - uint32_t res, prev_opt_number; - size_t prev_io_len, packet_size; - char *ptr; - - res = coap_calculate_packet_size(cm, &packet_size); - if (res != 0) { - return res; - } - - /* saving previous lenght to handle non-empty mbuf */ - prev_io_len = io->len; - mbuf_append(io, NULL, packet_size); - ptr = io->buf + prev_io_len; - - /* - * since cm is verified, it is possible to use bits shift operator - * without additional zeroing of unused bits - */ - - /* ver: 2 bits, msg_type: 2 bits, toklen: 4 bits */ - *ptr = (1 << 6) | (cm->msg_type << 4) | (uint8_t)(cm->token.len); - ptr++; - - /* code class: 3 bits, code detail: 5 bits */ - *ptr = (cm->code_class << 5) | (cm->code_detail); - ptr++; - - ptr = coap_add_uint16(ptr, cm->msg_id); - - if (cm->token.len != 0) { - memcpy(ptr, cm->token.p, cm->token.len); - ptr += cm->token.len; - } - - opt = cm->options; - prev_opt_number = 0; - while (opt != NULL) { - uint8_t delta_base = 0, length_base = 0; - uint16_t delta_ext = 0, length_ext = 0; - - size_t opt_delta_len = - coap_split_opt(opt->number - prev_opt_number, &delta_base, &delta_ext); - size_t opt_lenght_len = - coap_split_opt((uint32_t) opt->value.len, &length_base, &length_ext); - - *ptr = (delta_base << 4) | length_base; - ptr++; - - ptr = coap_add_opt_info(ptr, delta_ext, opt_delta_len); - ptr = coap_add_opt_info(ptr, length_ext, opt_lenght_len); - - if (opt->value.len != 0) { - memcpy(ptr, opt->value.p, opt->value.len); - ptr += opt->value.len; - } - - prev_opt_number = opt->number; - opt = opt->next; - } - - if (cm->payload.len != 0) { - *ptr = (char) -1; - ptr++; - memcpy(ptr, cm->payload.p, cm->payload.len); - } - - return 0; -} - -uint32_t mg_coap_send_message(struct mg_connection *nc, - struct mg_coap_message *cm) { - struct mbuf packet_out; - uint32_t compose_res; - - mbuf_init(&packet_out, 0); - compose_res = mg_coap_compose(cm, &packet_out); - if (compose_res != 0) { - return compose_res; /* LCOV_EXCL_LINE */ - } - - mg_send(nc, packet_out.buf, (int) packet_out.len); - mbuf_free(&packet_out); - - return 0; -} - -uint32_t mg_coap_send_ack(struct mg_connection *nc, uint16_t msg_id) { - struct mg_coap_message cm; - memset(&cm, 0, sizeof(cm)); - cm.msg_type = MG_COAP_MSG_ACK; - cm.msg_id = msg_id; - - return mg_coap_send_message(nc, &cm); -} - -static void coap_handler(struct mg_connection *nc, int ev, void *ev_data) { - struct mbuf *io = &nc->recv_mbuf; - struct mg_coap_message cm; - uint32_t parse_res; - - memset(&cm, 0, sizeof(cm)); - - nc->handler(nc, ev, ev_data); - - switch (ev) { - case MG_EV_RECV: - parse_res = mg_coap_parse(io, &cm); - if ((parse_res & MG_COAP_IGNORE) == 0) { - if ((cm.flags & MG_COAP_NOT_ENOUGH_DATA) != 0) { - /* - * Since we support UDP only - * MG_COAP_NOT_ENOUGH_DATA == MG_COAP_FORMAT_ERROR - */ - cm.flags |= MG_COAP_FORMAT_ERROR; /* LCOV_EXCL_LINE */ - } /* LCOV_EXCL_LINE */ - nc->handler(nc, MG_COAP_EVENT_BASE + cm.msg_type, &cm); - } - - mg_coap_free_options(&cm); - mbuf_remove(io, io->len); - break; - } -} -/* - * Attach built-in CoAP event handler to the given connection. - * - * The user-defined event handler will receive following extra events: - * - * - MG_EV_COAP_CON - * - MG_EV_COAP_NOC - * - MG_EV_COAP_ACK - * - MG_EV_COAP_RST - */ -int mg_set_protocol_coap(struct mg_connection *nc) { - /* supports UDP only */ - if ((nc->flags & MG_F_UDP) == 0) { - return -1; - } - - nc->proto_handler = coap_handler; - - return 0; -} - -#endif /* MG_ENABLE_COAP */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/tun.c" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_TUN - -/* Amalgamated: #include "common/cs_dbg.h" */ -/* Amalgamated: #include "mongoose/src/http.h" */ -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/net.h" */ -/* Amalgamated: #include "mongoose/src/net_if_tun.h" */ -/* Amalgamated: #include "mongoose/src/tun.h" */ -/* Amalgamated: #include "mongoose/src/util.h" */ - -static void mg_tun_reconnect(struct mg_tun_client *client, int timeout); - -static void mg_tun_init_client(struct mg_tun_client *client, struct mg_mgr *mgr, - struct mg_iface *iface, const char *dispatcher, - struct mg_tun_ssl_opts ssl) { - client->mgr = mgr; - client->iface = iface; - client->disp_url = dispatcher; - client->last_stream_id = 0; - client->ssl = ssl; - - client->disp = NULL; /* will be set by mg_tun_reconnect */ - client->listener = NULL; /* will be set by mg_do_bind */ - client->reconnect = NULL; /* will be set by mg_tun_reconnect */ -} - -void mg_tun_log_frame(struct mg_tun_frame *frame) { - LOG(LL_DEBUG, ("Got TUN frame: type=0x%x, flags=0x%x stream_id=0x%lx, " - "len=%zu", - frame->type, frame->flags, frame->stream_id, frame->body.len)); -#if MG_ENABLE_HEXDUMP - { - char hex[512]; - mg_hexdump(frame->body.p, frame->body.len, hex, sizeof(hex) - 1); - hex[sizeof(hex) - 1] = '\0'; - LOG(LL_DEBUG, ("body:\n%s", hex)); - } -#else - LOG(LL_DEBUG, ("body: '%.*s'", (int) frame->body.len, frame->body.p)); -#endif -} - -static void mg_tun_close_all(struct mg_tun_client *client) { - struct mg_connection *nc; - for (nc = client->mgr->active_connections; nc != NULL; nc = nc->next) { - if (nc->iface == client->iface && !(nc->flags & MG_F_LISTENING)) { - LOG(LL_DEBUG, ("Closing tunneled connection %p", nc)); - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - /* mg_close_conn(nc); */ - } - } -} - -static void mg_tun_client_handler(struct mg_connection *nc, int ev, - void *ev_data) { - struct mg_tun_client *client = (struct mg_tun_client *) nc->user_data; - - switch (ev) { - case MG_EV_CONNECT: { - int err = *(int *) ev_data; - - if (err) { - LOG(LL_ERROR, ("Cannot connect to the tunnel dispatcher: %d", err)); - } else { - LOG(LL_INFO, ("Connected to the tunnel dispatcher")); - } - break; - } - case MG_EV_HTTP_REPLY: { - struct http_message *hm = (struct http_message *) ev_data; - - if (hm->resp_code != 200) { - LOG(LL_ERROR, - ("Tunnel dispatcher reply non-OK status code %d", hm->resp_code)); - } - break; - } - case MG_EV_WEBSOCKET_HANDSHAKE_DONE: { - LOG(LL_INFO, ("Tunnel dispatcher handshake done")); - break; - } - case MG_EV_WEBSOCKET_FRAME: { - struct websocket_message *wm = (struct websocket_message *) ev_data; - struct mg_connection *tc; - struct mg_tun_frame frame; - - if (mg_tun_parse_frame(wm->data, wm->size, &frame) == -1) { - LOG(LL_ERROR, ("Got invalid tun frame dropping", wm->size)); - break; - } - - mg_tun_log_frame(&frame); - - tc = mg_tun_if_find_conn(client, frame.stream_id); - if (tc == NULL) { - if (frame.body.len > 0) { - LOG(LL_DEBUG, ("Got frame after receiving end has been closed")); - } - break; - } - if (frame.body.len > 0) { - mg_if_recv_tcp_cb(tc, (void *) frame.body.p, frame.body.len, - 0 /* own */); - } - if (frame.flags & MG_TUN_F_END_STREAM) { - LOG(LL_DEBUG, ("Closing tunneled connection because got end of stream " - "from other end")); - tc->flags |= MG_F_CLOSE_IMMEDIATELY; - mg_close_conn(tc); - } - break; - } - case MG_EV_CLOSE: { - LOG(LL_DEBUG, ("Closing all tunneled connections")); - /* - * The client might have been already freed when the listening socket is - * closed. - */ - if (client != NULL) { - mg_tun_close_all(client); - client->disp = NULL; - LOG(LL_INFO, ("Dispatcher connection is no more, reconnecting")); - /* TODO(mkm): implement exp back off */ - mg_tun_reconnect(client, MG_TUN_RECONNECT_INTERVAL); - } - break; - } - default: - break; - } -} - -static void mg_tun_do_reconnect(struct mg_tun_client *client) { - struct mg_connection *dc; - struct mg_connect_opts opts; - memset(&opts, 0, sizeof(opts)); -#if MG_ENABLE_SSL - opts.ssl_cert = client->ssl.ssl_cert; - opts.ssl_key = client->ssl.ssl_key; - opts.ssl_ca_cert = client->ssl.ssl_ca_cert; -#endif - /* HTTP/Websocket listener */ - if ((dc = mg_connect_ws_opt(client->mgr, mg_tun_client_handler, opts, - client->disp_url, MG_TUN_PROTO_NAME, NULL)) == - NULL) { - LOG(LL_ERROR, - ("Cannot connect to WS server on addr [%s]\n", client->disp_url)); - return; - } - - client->disp = dc; - dc->user_data = client; -} - -void mg_tun_reconnect_ev_handler(struct mg_connection *nc, int ev, - void *ev_data) { - struct mg_tun_client *client = (struct mg_tun_client *) nc->user_data; - (void) ev_data; - - switch (ev) { - case MG_EV_TIMER: - if (!(client->listener->flags & MG_F_TUN_DO_NOT_RECONNECT)) { - mg_tun_do_reconnect(client); - } else { - /* Reconnecting is suppressed, we'll check again at the next poll */ - mg_tun_reconnect(client, 0); - } - break; - } -} - -static void mg_tun_reconnect(struct mg_tun_client *client, int timeout) { - if (client->reconnect == NULL) { - client->reconnect = - mg_add_sock(client->mgr, INVALID_SOCKET, mg_tun_reconnect_ev_handler); - client->reconnect->user_data = client; - } - client->reconnect->ev_timer_time = mg_time() + timeout; -} - -static struct mg_tun_client *mg_tun_create_client(struct mg_mgr *mgr, - const char *dispatcher, - struct mg_tun_ssl_opts ssl) { - struct mg_tun_client *client = NULL; - struct mg_iface *iface = mg_find_iface(mgr, &mg_tun_iface_vtable, NULL); - if (iface == NULL) { - LOG(LL_ERROR, ("The tun feature requires the manager to have a tun " - "interface enabled")); - return NULL; - } - - client = (struct mg_tun_client *) MG_MALLOC(sizeof(*client)); - mg_tun_init_client(client, mgr, iface, dispatcher, ssl); - iface->data = client; - - /* - * We need to give application a chance to set MG_F_TUN_DO_NOT_RECONNECT on a - * listening connection right after mg_tun_bind_opt() returned it, so we - * should use mg_tun_reconnect() here, instead of mg_tun_do_reconnect() - */ - mg_tun_reconnect(client, 0); - return client; -} - -void mg_tun_destroy_client(struct mg_tun_client *client) { - /* - * NOTE: - * `client` is NULL in case of OOM - * `client->disp` is NULL if connection failed - * `client->iface is NULL is `mg_find_iface` failed - */ - - if (client != NULL && client->disp != NULL) { - /* the dispatcher connection handler will in turn close all tunnels */ - client->disp->flags |= MG_F_CLOSE_IMMEDIATELY; - /* this is used as a signal to other tun handlers that the party is over */ - client->disp->user_data = NULL; - } - - if (client != NULL && client->reconnect != NULL) { - client->reconnect->flags |= MG_F_CLOSE_IMMEDIATELY; - } - - if (client != NULL && client->iface != NULL) { - client->iface->data = NULL; - } - - MG_FREE(client); -} - -static struct mg_connection *mg_tun_do_bind(struct mg_tun_client *client, - mg_event_handler_t handler, - struct mg_bind_opts opts) { - struct mg_connection *lc; - opts.iface = client->iface; - lc = mg_bind_opt(client->mgr, ":1234" /* dummy port */, handler, opts); - client->listener = lc; - return lc; -} - -struct mg_connection *mg_tun_bind_opt(struct mg_mgr *mgr, - const char *dispatcher, - mg_event_handler_t handler, - struct mg_bind_opts opts) { -#if MG_ENABLE_SSL - struct mg_tun_ssl_opts ssl = {opts.ssl_cert, opts.ssl_key, opts.ssl_ca_cert}; -#else - struct mg_tun_ssl_opts ssl = {0}; -#endif - struct mg_tun_client *client = mg_tun_create_client(mgr, dispatcher, ssl); - if (client == NULL) { - return NULL; - } -#if MG_ENABLE_SSL - /* these options don't make sense in the local mouth of the tunnel */ - opts.ssl_cert = NULL; - opts.ssl_key = NULL; - opts.ssl_ca_cert = NULL; -#endif - return mg_tun_do_bind(client, handler, opts); -} - -int mg_tun_parse_frame(void *data, size_t len, struct mg_tun_frame *frame) { - const size_t header_size = sizeof(uint32_t) + sizeof(uint8_t) * 2; - if (len < header_size) { - return -1; - } - - frame->type = *(uint8_t *) (data); - frame->flags = *(uint8_t *) ((char *) data + 1); - memcpy(&frame->stream_id, (char *) data + 2, sizeof(uint32_t)); - frame->stream_id = ntohl(frame->stream_id); - frame->body.p = (char *) data + header_size; - frame->body.len = len - header_size; - return 0; -} - -void mg_tun_send_frame(struct mg_connection *ws, uint32_t stream_id, - uint8_t type, uint8_t flags, struct mg_str msg) { - stream_id = htonl(stream_id); - { - struct mg_str parts[] = { - {(char *) &type, sizeof(type)}, - {(char *) &flags, sizeof(flags)}, - {(char *) &stream_id, sizeof(stream_id)}, - {msg.p, msg.len} /* vc6 doesn't like just `msg` here */}; - mg_send_websocket_framev(ws, WEBSOCKET_OP_BINARY, parts, - sizeof(parts) / sizeof(parts[0])); - } -} - -#endif /* MG_ENABLE_TUN */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/sntp.c" -#endif -/* - * Copyright (c) 2016 Cesanta Software Limited - * All rights reserved - */ - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/sntp.h" */ -/* Amalgamated: #include "mongoose/src/util.h" */ - -#if MG_ENABLE_SNTP - -#define SNTP_TIME_OFFSET 2208988800 - -#ifndef SNTP_TIMEOUT -#define SNTP_TIMEOUT 10 -#endif - -#ifndef SNTP_ATTEMPTS -#define SNTP_ATTEMPTS 3 -#endif - -static uint64_t mg_get_sec(uint64_t val) { - return (val & 0xFFFFFFFF00000000) >> 32; -} - -static uint64_t mg_get_usec(uint64_t val) { - uint64_t tmp = (val & 0x00000000FFFFFFFF); - tmp *= 1000000; - tmp >>= 32; - return tmp; -} - -static void mg_ntp_to_tv(uint64_t val, struct timeval *tv) { - uint64_t tmp; - tmp = mg_get_sec(val); - tmp -= SNTP_TIME_OFFSET; - tv->tv_sec = tmp; - tv->tv_usec = mg_get_usec(val); -} - -static void mg_get_ntp_ts(const char *ntp, uint64_t *val) { - uint32_t tmp; - memcpy(&tmp, ntp, sizeof(tmp)); - tmp = ntohl(tmp); - *val = (uint64_t) tmp << 32; - memcpy(&tmp, ntp + 4, sizeof(tmp)); - tmp = ntohl(tmp); - *val |= tmp; -} - -void mg_sntp_send_request(struct mg_connection *c) { - char buf[48] = {0}; - /* - * header - 8 bit: - * LI (2 bit) - 3 (not in sync), VN (3 bit) - 4 (version), - * mode (3 bit) - 3 (client) - */ - buf[0] = (3 << 6) | (4 << 3) | 3; - -/* - * Next fields should be empty in client request - * stratum, 8 bit - * poll interval, 8 bit - * rrecision, 8 bit - * root delay, 32 bit - * root dispersion, 32 bit - * ref id, 32 bit - * ref timestamp, 64 bit - * originate Timestamp, 64 bit - * receive Timestamp, 64 bit -*/ - -/* - * convert time to sntp format (sntp starts from 00:00:00 01.01.1900) - * according to rfc868 it is 2208988800L sec - * this information is used to correct roundtrip delay - * but if local clock is absolutely broken (and doesn't work even - * as simple timer), it is better to disable it -*/ -#ifndef MG_SNMP_NO_DELAY_CORRECTION - uint32_t sec; - sec = htonl(mg_time() + SNTP_TIME_OFFSET); - memcpy(&buf[40], &sec, sizeof(sec)); -#endif - - mg_send(c, buf, sizeof(buf)); -} - -#ifndef MG_SNMP_NO_DELAY_CORRECTION -static uint64_t mg_calculate_delay(uint64_t t1, uint64_t t2, uint64_t t3) { - /* roundloop delay = (T4 - T1) - (T3 - T2) */ - uint64_t d1 = ((mg_time() + SNTP_TIME_OFFSET) * 1000000) - - (mg_get_sec(t1) * 1000000 + mg_get_usec(t1)); - uint64_t d2 = (mg_get_sec(t3) * 1000000 + mg_get_usec(t3)) - - (mg_get_sec(t2) * 1000000 + mg_get_usec(t2)); - - return (d1 > d2) ? d1 - d2 : 0; -} -#endif - -MG_INTERNAL int mg_sntp_parse_reply(const char *buf, int len, - struct mg_sntp_message *msg) { - uint8_t hdr; - uint64_t orig_ts_T1, recv_ts_T2, trsm_ts_T3, delay = 0; - int mode; - struct timeval tv; - - (void) orig_ts_T1; - (void) recv_ts_T2; - if (len < 48) { - return -1; - } - - hdr = buf[0]; - - if ((hdr & 0x38) >> 3 != 4) { - /* Wrong version */ - return -1; - } - - mode = hdr & 0x7; - if (mode != 4 && mode != 5) { - /* Not a server reply */ - return -1; - } - - memset(msg, 0, sizeof(*msg)); - - msg->kiss_of_death = (buf[1] == 0); /* Server asks to not send requests */ - - mg_get_ntp_ts(&buf[40], &trsm_ts_T3); - -#ifndef MG_SNMP_NO_DELAY_CORRECTION - mg_get_ntp_ts(&buf[24], &orig_ts_T1); - mg_get_ntp_ts(&buf[32], &recv_ts_T2); - delay = mg_calculate_delay(orig_ts_T1, recv_ts_T2, trsm_ts_T3); -#endif - - mg_ntp_to_tv(trsm_ts_T3, &tv); - - msg->time = (double) tv.tv_sec + (((double) tv.tv_usec + delay) / 1000000.0); - - return 0; -} - -static void mg_sntp_handler(struct mg_connection *c, int ev, void *ev_data) { - struct mbuf *io = &c->recv_mbuf; - struct mg_sntp_message msg; - - c->handler(c, ev, ev_data); - - switch (ev) { - case MG_EV_RECV: { - if (mg_sntp_parse_reply(io->buf, io->len, &msg) < 0) { - DBG(("Invalid SNTP packet received (%d)", (int) io->len)); - c->handler(c, MG_SNTP_MALFORMED_REPLY, NULL); - } else { - c->handler(c, MG_SNTP_REPLY, (void *) &msg); - } - - mbuf_remove(io, io->len); - break; - } - } -} - -int mg_set_protocol_sntp(struct mg_connection *c) { - if ((c->flags & MG_F_UDP) == 0) { - return -1; - } - - c->proto_handler = mg_sntp_handler; - - return 0; -} - -struct mg_connection *mg_sntp_connect(struct mg_mgr *mgr, - mg_event_handler_t event_handler, - const char *sntp_server_name) { - struct mg_connection *c = NULL; - char url[100], *p_url = url; - const char *proto = "", *port = "", *tmp; - - /* If port is not specified, use default (123) */ - tmp = strchr(sntp_server_name, ':'); - if (tmp != NULL && *(tmp + 1) == '/') { - tmp = strchr(tmp + 1, ':'); - } - - if (tmp == NULL) { - port = ":123"; - } - - /* Add udp:// if needed */ - if (strncmp(sntp_server_name, "udp://", 6) != 0) { - proto = "udp://"; - } - - mg_asprintf(&p_url, sizeof(url), "%s%s%s", proto, sntp_server_name, port); - - c = mg_connect(mgr, p_url, event_handler); - - if (c == NULL) { - goto cleanup; - } - - mg_set_protocol_sntp(c); - -cleanup: - if (p_url != url) { - MG_FREE(p_url); - } - - return c; -} - -struct sntp_data { - mg_event_handler_t hander; - int count; -}; - -static void mg_sntp_util_ev_handler(struct mg_connection *c, int ev, - void *ev_data) { - struct sntp_data *sd = (struct sntp_data *) c->user_data; - - switch (ev) { - case MG_EV_CONNECT: - if (*(int *) ev_data != 0) { - mg_call(c, sd->hander, MG_SNTP_FAILED, NULL); - break; - } - /* fallthrough */ - case MG_EV_TIMER: - if (sd->count <= SNTP_ATTEMPTS) { - mg_sntp_send_request(c); - mg_set_timer(c, mg_time() + 10); - sd->count++; - } else { - mg_call(c, sd->hander, MG_SNTP_FAILED, NULL); - c->flags |= MG_F_CLOSE_IMMEDIATELY; - } - break; - case MG_SNTP_MALFORMED_REPLY: - mg_call(c, sd->hander, MG_SNTP_FAILED, NULL); - c->flags |= MG_F_CLOSE_IMMEDIATELY; - break; - case MG_SNTP_REPLY: - mg_call(c, sd->hander, MG_SNTP_REPLY, ev_data); - c->flags |= MG_F_CLOSE_IMMEDIATELY; - break; - case MG_EV_CLOSE: - MG_FREE(c->user_data); - c->user_data = NULL; - break; - } -} - -struct mg_connection *mg_sntp_get_time(struct mg_mgr *mgr, - mg_event_handler_t event_handler, - const char *sntp_server_name) { - struct mg_connection *c; - struct sntp_data *sd = (struct sntp_data *) MG_CALLOC(1, sizeof(*sd)); - if (sd == NULL) { - return NULL; - } - - c = mg_sntp_connect(mgr, mg_sntp_util_ev_handler, sntp_server_name); - if (c == NULL) { - MG_FREE(sd); - return NULL; - } - - sd->hander = event_handler; - c->user_data = sd; - - return c; -} - -#endif /* MG_ENABLE_SNTP */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/cc3200/cc3200_libc.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if CS_PLATFORM == CS_P_CC3200 - -#include -#include - -#ifndef __TI_COMPILER_VERSION__ -#include -#include -#include -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#define CONSOLE_UART UARTA0_BASE - -#ifdef __TI_COMPILER_VERSION__ -int asprintf(char **strp, const char *fmt, ...) { - va_list ap; - int len; - - *strp = malloc(BUFSIZ); - if (*strp == NULL) return -1; - - va_start(ap, fmt); - len = vsnprintf(*strp, BUFSIZ, fmt, ap); - va_end(ap); - - if (len > 0) { - *strp = realloc(*strp, len + 1); - if (*strp == NULL) return -1; - } - - if (len >= BUFSIZ) { - va_start(ap, fmt); - len = vsnprintf(*strp, len + 1, fmt, ap); - va_end(ap); - } - - return len; -} - -#if MG_TI_NO_HOST_INTERFACE -time_t HOSTtime() { - struct timeval tp; - gettimeofday(&tp, NULL); - return tp.tv_sec; -} -#endif - -#endif /* __TI_COMPILER_VERSION__ */ - -#ifndef __TI_COMPILER_VERSION__ -int _gettimeofday_r(struct _reent *r, struct timeval *tp, void *tzp) { -#else -int gettimeofday(struct timeval *tp, void *tzp) { -#endif - unsigned long long r1 = 0, r2; - /* Achieve two consecutive reads of the same value. */ - do { - r2 = r1; - r1 = PRCMSlowClkCtrFastGet(); - } while (r1 != r2); - /* This is a 32768 Hz counter. */ - tp->tv_sec = (r1 >> 15); - /* 1/32768-th of a second is 30.517578125 microseconds, approx. 31, - * but we round down so it doesn't overflow at 32767 */ - tp->tv_usec = (r1 & 0x7FFF) * 30; - return 0; -} - -void fprint_str(FILE *fp, const char *str) { - while (*str != '\0') { - if (*str == '\n') MAP_UARTCharPut(CONSOLE_UART, '\r'); - MAP_UARTCharPut(CONSOLE_UART, *str++); - } -} - -void _exit(int status) { - fprint_str(stderr, "_exit\n"); - /* cause an unaligned access exception, that will drop you into gdb */ - *(int *) 1 = status; - while (1) - ; /* avoid gcc warning because stdlib abort() has noreturn attribute */ -} - -void _not_implemented(const char *what) { - fprint_str(stderr, what); - fprint_str(stderr, " is not implemented\n"); - _exit(42); -} - -int _kill(int pid, int sig) { - (void) pid; - (void) sig; - _not_implemented("_kill"); - return -1; -} - -int _getpid() { - fprint_str(stderr, "_getpid is not implemented\n"); - return 42; -} - -int _isatty(int fd) { - /* 0, 1 and 2 are TTYs. */ - return fd < 2; -} - -#endif /* CS_PLATFORM == CS_P_CC3200 */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/msp432/msp432_libc.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if CS_PLATFORM == CS_P_MSP432 - -#include -#include - -int gettimeofday(struct timeval *tp, void *tzp) { - uint32_t ticks = Clock_getTicks(); - tp->tv_sec = ticks / 1000; - tp->tv_usec = (ticks % 1000) * 1000; - return 0; -} - -#endif /* CS_PLATFORM == CS_P_MSP432 */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/nrf5/nrf5_libc.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if (CS_PLATFORM == CS_P_NRF51 || CS_PLATFORM == CS_P_NRF52) && \ - defined(__ARMCC_VERSION) -int gettimeofday(struct timeval *tp, void *tzp) { - /* TODO */ - tp->tv_sec = 0; - tp->tv_usec = 0; - return 0; -} -#endif -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_fs_slfs.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_SL_FS_SLFS_H_ -#define CS_COMMON_PLATFORMS_SIMPLELINK_SL_FS_SLFS_H_ - -#if defined(MG_FS_SLFS) - -#include -#ifndef __TI_COMPILER_VERSION__ -#include -#include -#endif - -#define MAX_OPEN_SLFS_FILES 8 - -/* Indirect libc interface - same functions, different names. */ -int fs_slfs_open(const char *pathname, int flags, mode_t mode); -int fs_slfs_close(int fd); -ssize_t fs_slfs_read(int fd, void *buf, size_t count); -ssize_t fs_slfs_write(int fd, const void *buf, size_t count); -int fs_slfs_stat(const char *pathname, struct stat *s); -int fs_slfs_fstat(int fd, struct stat *s); -off_t fs_slfs_lseek(int fd, off_t offset, int whence); -int fs_slfs_unlink(const char *filename); -int fs_slfs_rename(const char *from, const char *to); - -void fs_slfs_set_new_file_size(const char *name, size_t size); - -#endif /* defined(MG_FS_SLFS) */ - -#endif /* CS_COMMON_PLATFORMS_SIMPLELINK_SL_FS_SLFS_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_fs_slfs.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -/* Standard libc interface to TI SimpleLink FS. */ - -#if defined(MG_FS_SLFS) || defined(CC3200_FS_SLFS) - -/* Amalgamated: #include "common/platforms/simplelink/sl_fs_slfs.h" */ - -#include - -#if CS_PLATFORM == CS_P_CC3200 -#include -#endif -#include -#include - -/* Amalgamated: #include "common/cs_dbg.h" */ - -/* From sl_fs.c */ -extern int set_errno(int e); -static const char *drop_dir(const char *fname, bool *is_slfs); - -/* - * With SLFS, you have to pre-declare max file size. Yes. Really. - * 64K should be enough for everyone. Right? - */ -#ifndef FS_SLFS_MAX_FILE_SIZE -#define FS_SLFS_MAX_FILE_SIZE (64 * 1024) -#endif - -struct sl_file_size_hint { - char *name; - size_t size; -}; - -struct sl_fd_info { - _i32 fh; - _off_t pos; - size_t size; -}; - -static struct sl_fd_info s_sl_fds[MAX_OPEN_SLFS_FILES]; -static struct sl_file_size_hint s_sl_file_size_hints[MAX_OPEN_SLFS_FILES]; - -static int sl_fs_to_errno(_i32 r) { - DBG(("SL error: %d", (int) r)); - switch (r) { - case SL_FS_OK: - return 0; - case SL_FS_FILE_NAME_EXIST: - return EEXIST; - case SL_FS_WRONG_FILE_NAME: - return EINVAL; - case SL_FS_ERR_NO_AVAILABLE_NV_INDEX: - case SL_FS_ERR_NO_AVAILABLE_BLOCKS: - return ENOSPC; - case SL_FS_ERR_FAILED_TO_ALLOCATE_MEM: - return ENOMEM; - case SL_FS_ERR_FILE_NOT_EXISTS: - return ENOENT; - case SL_FS_ERR_NOT_SUPPORTED: - return ENOTSUP; - } - return ENXIO; -} - -int fs_slfs_open(const char *pathname, int flags, mode_t mode) { - int fd; - for (fd = 0; fd < MAX_OPEN_SLFS_FILES; fd++) { - if (s_sl_fds[fd].fh <= 0) break; - } - if (fd >= MAX_OPEN_SLFS_FILES) return set_errno(ENOMEM); - struct sl_fd_info *fi = &s_sl_fds[fd]; - - /* - * Apply path manipulations again, in case we got here directly - * (via TI libc's "add_device"). - */ - pathname = drop_dir(pathname, NULL); - - _u32 am = 0; - fi->size = (size_t) -1; - int rw = (flags & 3); - if (rw == O_RDONLY) { - SlFsFileInfo_t sl_fi; - _i32 r = sl_FsGetInfo((const _u8 *) pathname, 0, &sl_fi); - if (r == SL_FS_OK) { - fi->size = sl_fi.FileLen; - } - am = FS_MODE_OPEN_READ; - } else { - if (!(flags & O_TRUNC) || (flags & O_APPEND)) { - // FailFS files cannot be opened for append and will be truncated - // when opened for write. - return set_errno(ENOTSUP); - } - if (flags & O_CREAT) { - size_t i, size = FS_SLFS_MAX_FILE_SIZE; - for (i = 0; i < MAX_OPEN_SLFS_FILES; i++) { - if (s_sl_file_size_hints[i].name != NULL && - strcmp(s_sl_file_size_hints[i].name, pathname) == 0) { - size = s_sl_file_size_hints[i].size; - free(s_sl_file_size_hints[i].name); - s_sl_file_size_hints[i].name = NULL; - break; - } - } - DBG(("creating %s with max size %d", pathname, (int) size)); - am = FS_MODE_OPEN_CREATE(size, 0); - } else { - am = FS_MODE_OPEN_WRITE; - } - } - _i32 r = sl_FsOpen((_u8 *) pathname, am, NULL, &fi->fh); - DBG(("sl_FsOpen(%s, 0x%x) = %d, %d", pathname, (int) am, (int) r, - (int) fi->fh)); - if (r == SL_FS_OK) { - fi->pos = 0; - r = fd; - } else { - fi->fh = -1; - r = set_errno(sl_fs_to_errno(r)); - } - return r; -} - -int fs_slfs_close(int fd) { - struct sl_fd_info *fi = &s_sl_fds[fd]; - if (fi->fh <= 0) return set_errno(EBADF); - _i32 r = sl_FsClose(fi->fh, NULL, NULL, 0); - DBG(("sl_FsClose(%d) = %d", (int) fi->fh, (int) r)); - s_sl_fds[fd].fh = -1; - return set_errno(sl_fs_to_errno(r)); -} - -ssize_t fs_slfs_read(int fd, void *buf, size_t count) { - struct sl_fd_info *fi = &s_sl_fds[fd]; - if (fi->fh <= 0) return set_errno(EBADF); - /* Simulate EOF. sl_FsRead @ file_size return SL_FS_ERR_OFFSET_OUT_OF_RANGE. - */ - if (fi->pos == fi->size) return 0; - _i32 r = sl_FsRead(fi->fh, fi->pos, buf, count); - DBG(("sl_FsRead(%d, %d, %d) = %d", (int) fi->fh, (int) fi->pos, (int) count, - (int) r)); - if (r >= 0) { - fi->pos += r; - return r; - } - return set_errno(sl_fs_to_errno(r)); -} - -ssize_t fs_slfs_write(int fd, const void *buf, size_t count) { - struct sl_fd_info *fi = &s_sl_fds[fd]; - if (fi->fh <= 0) return set_errno(EBADF); - _i32 r = sl_FsWrite(fi->fh, fi->pos, (_u8 *) buf, count); - DBG(("sl_FsWrite(%d, %d, %d) = %d", (int) fi->fh, (int) fi->pos, (int) count, - (int) r)); - if (r >= 0) { - fi->pos += r; - return r; - } - return set_errno(sl_fs_to_errno(r)); -} - -int fs_slfs_stat(const char *pathname, struct stat *s) { - SlFsFileInfo_t sl_fi; - /* - * Apply path manipulations again, in case we got here directly - * (via TI libc's "add_device"). - */ - pathname = drop_dir(pathname, NULL); - _i32 r = sl_FsGetInfo((const _u8 *) pathname, 0, &sl_fi); - if (r == SL_FS_OK) { - s->st_mode = S_IFREG | 0666; - s->st_nlink = 1; - s->st_size = sl_fi.FileLen; - return 0; - } - return set_errno(sl_fs_to_errno(r)); -} - -int fs_slfs_fstat(int fd, struct stat *s) { - struct sl_fd_info *fi = &s_sl_fds[fd]; - if (fi->fh <= 0) return set_errno(EBADF); - s->st_mode = 0666; - s->st_mode = S_IFREG | 0666; - s->st_nlink = 1; - s->st_size = fi->size; - return 0; -} - -off_t fs_slfs_lseek(int fd, off_t offset, int whence) { - if (s_sl_fds[fd].fh <= 0) return set_errno(EBADF); - switch (whence) { - case SEEK_SET: - s_sl_fds[fd].pos = offset; - break; - case SEEK_CUR: - s_sl_fds[fd].pos += offset; - break; - case SEEK_END: - return set_errno(ENOTSUP); - } - return 0; -} - -int fs_slfs_unlink(const char *pathname) { - /* - * Apply path manipulations again, in case we got here directly - * (via TI libc's "add_device"). - */ - pathname = drop_dir(pathname, NULL); - return set_errno(sl_fs_to_errno(sl_FsDel((const _u8 *) pathname, 0))); -} - -int fs_slfs_rename(const char *from, const char *to) { - return set_errno(ENOTSUP); -} - -void fs_slfs_set_new_file_size(const char *name, size_t size) { - int i; - for (i = 0; i < MAX_OPEN_SLFS_FILES; i++) { - if (s_sl_file_size_hints[i].name == NULL) { - DBG(("File size hint: %s %d", name, (int) size)); - s_sl_file_size_hints[i].name = strdup(name); - s_sl_file_size_hints[i].size = size; - break; - } - } -} - -#endif /* defined(MG_FS_SLFS) || defined(CC3200_FS_SLFS) */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_fs.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_NET_IF == MG_NET_IF_SIMPLELINK && \ - (defined(MG_FS_SLFS) || defined(MG_FS_SPIFFS)) - -#include -#include -#include -#include -#include -#ifdef __TI_COMPILER_VERSION__ -#include -#endif - -/* Amalgamated: #include "common/cs_dbg.h" */ -/* Amalgamated: #include "common/platform.h" */ - -#ifdef CC3200_FS_SPIFFS -/* Amalgamated: #include "cc3200_fs_spiffs.h" */ -#endif - -#ifdef MG_FS_SLFS -/* Amalgamated: #include "sl_fs_slfs.h" */ -#endif - -#define NUM_SYS_FDS 3 -#define SPIFFS_FD_BASE 10 -#define SLFS_FD_BASE 100 - -#ifndef MG_UART_CHAR_PUT -#if CS_PLATFORM == CS_P_CC3200 -#include -#include -#include -#include -#include -#define MG_UART_CHAR_PUT(fd, c) MAP_UARTCharPut(UARTA0_BASE, c); -#else -#define MG_UART_CHAR_PUT(fd, c) -#endif /* CS_PLATFORM == CS_P_CC3200 */ -#endif /* !MG_UART_CHAR_PUT */ - -int set_errno(int e) { - errno = e; - return (e == 0 ? 0 : -1); -} - -static const char *drop_dir(const char *fname, bool *is_slfs) { - if (is_slfs != NULL) { - *is_slfs = (strncmp(fname, "SL:", 3) == 0); - if (*is_slfs) fname += 3; - } - /* Drop "./", if any */ - if (fname[0] == '.' && fname[1] == '/') { - fname += 2; - } - /* - * Drop / if it is the only one in the path. - * This allows use of /pretend/directories but serves /file.txt as normal. - */ - if (fname[0] == '/' && strchr(fname + 1, '/') == NULL) { - fname++; - } - return fname; -} - -enum fd_type { - FD_INVALID, - FD_SYS, -#ifdef CC3200_FS_SPIFFS - FD_SPIFFS, -#endif -#ifdef MG_FS_SLFS - FD_SLFS -#endif -}; -static int fd_type(int fd) { - if (fd >= 0 && fd < NUM_SYS_FDS) return FD_SYS; -#ifdef CC3200_FS_SPIFFS - if (fd >= SPIFFS_FD_BASE && fd < SPIFFS_FD_BASE + MAX_OPEN_SPIFFS_FILES) { - return FD_SPIFFS; - } -#endif -#ifdef MG_FS_SLFS - if (fd >= SLFS_FD_BASE && fd < SLFS_FD_BASE + MAX_OPEN_SLFS_FILES) { - return FD_SLFS; - } -#endif - return FD_INVALID; -} - -#if MG_TI_NO_HOST_INTERFACE -int open(const char *pathname, unsigned flags, int mode) { -#else -int _open(const char *pathname, int flags, mode_t mode) { -#endif - int fd = -1; - bool is_sl; - const char *fname = drop_dir(pathname, &is_sl); - if (is_sl) { -#ifdef MG_FS_SLFS - fd = fs_slfs_open(fname, flags, mode); - if (fd >= 0) fd += SLFS_FD_BASE; -#endif - } else { -#ifdef CC3200_FS_SPIFFS - fd = fs_spiffs_open(fname, flags, mode); - if (fd >= 0) fd += SPIFFS_FD_BASE; -#endif - } - LOG(LL_DEBUG, - ("open(%s, 0x%x) = %d, fname = %s", pathname, flags, fd, fname)); - return fd; -} - -int _stat(const char *pathname, struct stat *st) { - int res = -1; - bool is_sl; - const char *fname = drop_dir(pathname, &is_sl); - memset(st, 0, sizeof(*st)); - /* Simulate statting the root directory. */ - if (fname[0] == '\0' || strcmp(fname, ".") == 0) { - st->st_ino = 0; - st->st_mode = S_IFDIR | 0777; - st->st_nlink = 1; - st->st_size = 0; - return 0; - } - if (is_sl) { -#ifdef MG_FS_SLFS - res = fs_slfs_stat(fname, st); -#endif - } else { -#ifdef CC3200_FS_SPIFFS - res = fs_spiffs_stat(fname, st); -#endif - } - LOG(LL_DEBUG, ("stat(%s) = %d; fname = %s", pathname, res, fname)); - return res; -} - -#if MG_TI_NO_HOST_INTERFACE -int close(int fd) { -#else -int _close(int fd) { -#endif - int r = -1; - switch (fd_type(fd)) { - case FD_INVALID: - r = set_errno(EBADF); - break; - case FD_SYS: - r = set_errno(EACCES); - break; -#ifdef CC3200_FS_SPIFFS - case FD_SPIFFS: - r = fs_spiffs_close(fd - SPIFFS_FD_BASE); - break; -#endif -#ifdef MG_FS_SLFS - case FD_SLFS: - r = fs_slfs_close(fd - SLFS_FD_BASE); - break; -#endif - } - DBG(("close(%d) = %d", fd, r)); - return r; -} - -#if MG_TI_NO_HOST_INTERFACE -off_t lseek(int fd, off_t offset, int whence) { -#else -off_t _lseek(int fd, off_t offset, int whence) { -#endif - int r = -1; - switch (fd_type(fd)) { - case FD_INVALID: - r = set_errno(EBADF); - break; - case FD_SYS: - r = set_errno(ESPIPE); - break; -#ifdef CC3200_FS_SPIFFS - case FD_SPIFFS: - r = fs_spiffs_lseek(fd - SPIFFS_FD_BASE, offset, whence); - break; -#endif -#ifdef MG_FS_SLFS - case FD_SLFS: - r = fs_slfs_lseek(fd - SLFS_FD_BASE, offset, whence); - break; -#endif - } - DBG(("lseek(%d, %d, %d) = %d", fd, (int) offset, whence, r)); - return r; -} - -int _fstat(int fd, struct stat *s) { - int r = -1; - memset(s, 0, sizeof(*s)); - switch (fd_type(fd)) { - case FD_INVALID: - r = set_errno(EBADF); - break; - case FD_SYS: { - /* Create barely passable stats for STD{IN,OUT,ERR}. */ - memset(s, 0, sizeof(*s)); - s->st_ino = fd; - s->st_mode = S_IFCHR | 0666; - r = 0; - break; - } -#ifdef CC3200_FS_SPIFFS - case FD_SPIFFS: - r = fs_spiffs_fstat(fd - SPIFFS_FD_BASE, s); - break; -#endif -#ifdef MG_FS_SLFS - case FD_SLFS: - r = fs_slfs_fstat(fd - SLFS_FD_BASE, s); - break; -#endif - } - DBG(("fstat(%d) = %d", fd, r)); - return r; -} - -#if MG_TI_NO_HOST_INTERFACE -int read(int fd, char *buf, unsigned count) { -#else -ssize_t _read(int fd, void *buf, size_t count) { -#endif - int r = -1; - switch (fd_type(fd)) { - case FD_INVALID: - r = set_errno(EBADF); - break; - case FD_SYS: { - if (fd != 0) { - r = set_errno(EACCES); - break; - } - /* Should we allow reading from stdin = uart? */ - r = set_errno(ENOTSUP); - break; - } -#ifdef CC3200_FS_SPIFFS - case FD_SPIFFS: - r = fs_spiffs_read(fd - SPIFFS_FD_BASE, buf, count); - break; -#endif -#ifdef MG_FS_SLFS - case FD_SLFS: - r = fs_slfs_read(fd - SLFS_FD_BASE, buf, count); - break; -#endif - } - DBG(("read(%d, %u) = %d", fd, count, r)); - return r; -} - -#if MG_TI_NO_HOST_INTERFACE -int write(int fd, const char *buf, unsigned count) { -#else -ssize_t _write(int fd, const void *buf, size_t count) { -#endif - int r = -1; - size_t i = 0; - switch (fd_type(fd)) { - case FD_INVALID: - r = set_errno(EBADF); - break; - case FD_SYS: { - if (fd == 0) { - r = set_errno(EACCES); - break; - } - for (i = 0; i < count; i++) { - const char c = ((const char *) buf)[i]; - if (c == '\n') MG_UART_CHAR_PUT(fd, '\r'); - MG_UART_CHAR_PUT(fd, c); - } - r = count; - break; - } -#ifdef CC3200_FS_SPIFFS - case FD_SPIFFS: - r = fs_spiffs_write(fd - SPIFFS_FD_BASE, buf, count); - break; -#endif -#ifdef MG_FS_SLFS - case FD_SLFS: - r = fs_slfs_write(fd - SLFS_FD_BASE, buf, count); - break; -#endif - } - return r; -} - -/* - * On Newlib we override rename directly too, because the default - * implementation using _link and _unlink doesn't work for us. - */ -#if MG_TI_NO_HOST_INTERFACE || defined(_NEWLIB_VERSION) -int rename(const char *frompath, const char *topath) { - int r = -1; - bool is_sl_from, is_sl_to; - const char *from = drop_dir(frompath, &is_sl_from); - const char *to = drop_dir(topath, &is_sl_to); - if (is_sl_from || is_sl_to) { - set_errno(ENOTSUP); - } else { -#ifdef CC3200_FS_SPIFFS - r = fs_spiffs_rename(from, to); -#endif - } - DBG(("rename(%s, %s) = %d", from, to, r)); - return r; -} -#endif /* MG_TI_NO_HOST_INTERFACE || defined(_NEWLIB_VERSION) */ - -#if MG_TI_NO_HOST_INTERFACE -int unlink(const char *pathname) { -#else -int _unlink(const char *pathname) { -#endif - int r = -1; - bool is_sl; - const char *fname = drop_dir(pathname, &is_sl); - if (is_sl) { -#ifdef MG_FS_SLFS - r = fs_slfs_unlink(fname); -#endif - } else { -#ifdef CC3200_FS_SPIFFS - r = fs_spiffs_unlink(fname); -#endif - } - DBG(("unlink(%s) = %d, fname = %s", pathname, r, fname)); - return r; -} - -#ifdef CC3200_FS_SPIFFS /* FailFS does not support listing files. */ -DIR *opendir(const char *dir_name) { - DIR *r = NULL; - bool is_sl; - drop_dir(dir_name, &is_sl); - if (is_sl) { - r = NULL; - set_errno(ENOTSUP); - } else { - r = fs_spiffs_opendir(dir_name); - } - DBG(("opendir(%s) = %p", dir_name, r)); - return r; -} - -struct dirent *readdir(DIR *dir) { - struct dirent *res = fs_spiffs_readdir(dir); - DBG(("readdir(%p) = %p", dir, res)); - return res; -} - -int closedir(DIR *dir) { - int res = fs_spiffs_closedir(dir); - DBG(("closedir(%p) = %d", dir, res)); - return res; -} - -int rmdir(const char *path) { - return fs_spiffs_rmdir(path); -} - -int mkdir(const char *path, mode_t mode) { - (void) path; - (void) mode; - /* for spiffs supports only root dir, which comes from mongoose as '.' */ - return (strlen(path) == 1 && *path == '.') ? 0 : ENOTDIR; -} -#endif - -int sl_fs_init(void) { - int ret = 1; -#ifdef __TI_COMPILER_VERSION__ -#ifdef MG_FS_SLFS -#pragma diag_push -#pragma diag_suppress 169 /* Nothing we can do about the prototype mismatch. \ - */ - ret = (add_device("SL", _MSA, fs_slfs_open, fs_slfs_close, fs_slfs_read, - fs_slfs_write, fs_slfs_lseek, fs_slfs_unlink, - fs_slfs_rename) == 0); -#pragma diag_pop -#endif -#endif - return ret; -} - -#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK && (defined(MG_FS_SLFS) || \ - defined(MG_FS_SPIFFS)) */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_socket.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_NET_IF == MG_NET_IF_SIMPLELINK - -#include -#include - -/* Amalgamated: #include "common/platform.h" */ - -const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) { - int res; - struct in_addr *in = (struct in_addr *) src; - if (af != AF_INET) { - errno = EAFNOSUPPORT; - return NULL; - } - res = snprintf(dst, size, "%lu.%lu.%lu.%lu", SL_IPV4_BYTE(in->s_addr, 0), - SL_IPV4_BYTE(in->s_addr, 1), SL_IPV4_BYTE(in->s_addr, 2), - SL_IPV4_BYTE(in->s_addr, 3)); - return res > 0 ? dst : NULL; -} - -char *inet_ntoa(struct in_addr n) { - static char a[16]; - return (char *) inet_ntop(AF_INET, &n, a, sizeof(a)); -} - -int inet_pton(int af, const char *src, void *dst) { - uint32_t a0, a1, a2, a3; - uint8_t *db = (uint8_t *) dst; - if (af != AF_INET) { - errno = EAFNOSUPPORT; - return 0; - } - if (sscanf(src, "%lu.%lu.%lu.%lu", &a0, &a1, &a2, &a3) != 4) { - return 0; - } - *db = a3; - *(db + 1) = a2; - *(db + 2) = a1; - *(db + 3) = a0; - return 1; -} - -#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_mg_task.c" -#endif -#if MG_NET_IF == MG_NET_IF_SIMPLELINK && !defined(MG_SIMPLELINK_NO_OSI) - -/* Amalgamated: #include "mg_task.h" */ - -#include - -enum mg_q_msg_type { - MG_Q_MSG_CB, -}; -struct mg_q_msg { - enum mg_q_msg_type type; - void (*cb)(struct mg_mgr *mgr, void *arg); - void *arg; -}; -static OsiMsgQ_t s_mg_q; -static void mg_task(void *arg); - -bool mg_start_task(int priority, int stack_size, mg_init_cb mg_init) { - if (osi_MsgQCreate(&s_mg_q, "MG", sizeof(struct mg_q_msg), 16) != OSI_OK) { - return false; - } - if (osi_TaskCreate(mg_task, (const signed char *) "MG", stack_size, - (void *) mg_init, priority, NULL) != OSI_OK) { - return false; - } - return true; -} - -static void mg_task(void *arg) { - struct mg_mgr mgr; - mg_init_cb mg_init = (mg_init_cb) arg; - mg_mgr_init(&mgr, NULL); - mg_init(&mgr); - while (1) { - struct mg_q_msg msg; - mg_mgr_poll(&mgr, 1); - if (osi_MsgQRead(&s_mg_q, &msg, 1) != OSI_OK) continue; - switch (msg.type) { - case MG_Q_MSG_CB: { - msg.cb(&mgr, msg.arg); - } - } - } -} - -void mg_run_in_task(void (*cb)(struct mg_mgr *mgr, void *arg), void *cb_arg) { - struct mg_q_msg msg = {MG_Q_MSG_CB, cb, cb_arg}; - osi_MsgQWrite(&s_mg_q, &msg, OSI_NO_WAIT); -} - -#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK && !defined(MG_SIMPLELINK_NO_OSI) \ - */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_net_if.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_SL_NET_IF_H_ -#define CS_COMMON_PLATFORMS_SIMPLELINK_SL_NET_IF_H_ - -/* Amalgamated: #include "mongoose/src/net_if.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef MG_ENABLE_NET_IF_SIMPLELINK -#define MG_ENABLE_NET_IF_SIMPLELINK MG_NET_IF == MG_NET_IF_SIMPLELINK -#endif - -extern struct mg_iface_vtable mg_simplelink_iface_vtable; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_COMMON_PLATFORMS_SIMPLELINK_SL_NET_IF_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_net_if.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -/* Amalgamated: #include "common/platforms/simplelink/sl_net_if.h" */ - -#if MG_ENABLE_NET_IF_SIMPLELINK - -/* Amalgamated: #include "mongoose/src/internal.h" */ -/* Amalgamated: #include "mongoose/src/util.h" */ - -#define MG_TCP_RECV_BUFFER_SIZE 1024 -#define MG_UDP_RECV_BUFFER_SIZE 1500 - -static sock_t mg_open_listening_socket(union socket_address *sa, int type, - int proto); - -int sl_set_ssl_opts(struct mg_connection *nc); - -void mg_set_non_blocking_mode(sock_t sock) { - SlSockNonblocking_t opt; - opt.NonblockingEnabled = 1; - sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &opt, sizeof(opt)); -} - -static int mg_is_error(int n) { - return (n < 0 && n != SL_EALREADY && n != SL_EAGAIN); -} - -void mg_sl_if_connect_tcp(struct mg_connection *nc, - const union socket_address *sa) { - int proto = 0; - if (nc->flags & MG_F_SSL) proto = SL_SEC_SOCKET; - sock_t sock = sl_Socket(AF_INET, SOCK_STREAM, proto); - if (sock < 0) { - nc->err = sock; - goto out; - } - mg_sock_set(nc, sock); -#if MG_ENABLE_SSL - nc->err = sl_set_ssl_opts(nc); - if (nc->err != 0) goto out; -#endif - nc->err = sl_Connect(sock, &sa->sa, sizeof(sa->sin)); -out: - DBG(("%p to %s:%d sock %d %d err %d", nc, inet_ntoa(sa->sin.sin_addr), - ntohs(sa->sin.sin_port), nc->sock, proto, nc->err)); -} - -void mg_sl_if_connect_udp(struct mg_connection *nc) { - sock_t sock = sl_Socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - nc->err = sock; - return; - } - mg_sock_set(nc, sock); - nc->err = 0; -} - -int mg_sl_if_listen_tcp(struct mg_connection *nc, union socket_address *sa) { - int proto = 0; - if (nc->flags & MG_F_SSL) proto = SL_SEC_SOCKET; - sock_t sock = mg_open_listening_socket(sa, SOCK_STREAM, proto); - if (sock < 0) return sock; - mg_sock_set(nc, sock); -#if MG_ENABLE_SSL - return sl_set_ssl_opts(nc); -#else - return 0; -#endif -} - -int mg_sl_if_listen_udp(struct mg_connection *nc, union socket_address *sa) { - sock_t sock = mg_open_listening_socket(sa, SOCK_DGRAM, 0); - if (sock == INVALID_SOCKET) return (errno ? errno : 1); - mg_sock_set(nc, sock); - return 0; -} - -void mg_sl_if_tcp_send(struct mg_connection *nc, const void *buf, size_t len) { - mbuf_append(&nc->send_mbuf, buf, len); -} - -void mg_sl_if_udp_send(struct mg_connection *nc, const void *buf, size_t len) { - mbuf_append(&nc->send_mbuf, buf, len); -} - -void mg_sl_if_recved(struct mg_connection *nc, size_t len) { - (void) nc; - (void) len; -} - -int mg_sl_if_create_conn(struct mg_connection *nc) { - (void) nc; - return 1; -} - -void mg_sl_if_destroy_conn(struct mg_connection *nc) { - if (nc->sock == INVALID_SOCKET) return; - /* For UDP, only close outgoing sockets or listeners. */ - if (!(nc->flags & MG_F_UDP) || nc->listener == NULL) { - sl_Close(nc->sock); - } - nc->sock = INVALID_SOCKET; -} - -static int mg_accept_conn(struct mg_connection *lc) { - struct mg_connection *nc; - union socket_address sa; - socklen_t sa_len = sizeof(sa); - sock_t sock = sl_Accept(lc->sock, &sa.sa, &sa_len); - if (sock < 0) { - DBG(("%p: failed to accept: %d", lc, sock)); - return 0; - } - nc = mg_if_accept_new_conn(lc); - if (nc == NULL) { - sl_Close(sock); - return 0; - } - DBG(("%p conn from %s:%d", nc, inet_ntoa(sa.sin.sin_addr), - ntohs(sa.sin.sin_port))); - mg_sock_set(nc, sock); - if (nc->flags & MG_F_SSL) nc->flags |= MG_F_SSL_HANDSHAKE_DONE; - mg_if_accept_tcp_cb(nc, &sa, sa_len); - return 1; -} - -/* 'sa' must be an initialized address to bind to */ -static sock_t mg_open_listening_socket(union socket_address *sa, int type, - int proto) { - int r; - socklen_t sa_len = - (sa->sa.sa_family == AF_INET) ? sizeof(sa->sin) : sizeof(sa->sin6); - sock_t sock = sl_Socket(sa->sa.sa_family, type, proto); - if (sock < 0) return sock; - if ((r = sl_Bind(sock, &sa->sa, sa_len)) < 0) { - sl_Close(sock); - return r; - } - if (type != SOCK_DGRAM && (r = sl_Listen(sock, SOMAXCONN)) < 0) { - sl_Close(sock); - return r; - } - mg_set_non_blocking_mode(sock); - return sock; -} - -static void mg_write_to_socket(struct mg_connection *nc) { - struct mbuf *io = &nc->send_mbuf; - int n = 0; - - if (nc->flags & MG_F_UDP) { - n = sl_SendTo(nc->sock, io->buf, io->len, 0, &nc->sa.sa, - sizeof(nc->sa.sin)); - DBG(("%p %d %d %d %s:%hu", nc, nc->sock, n, errno, - inet_ntoa(nc->sa.sin.sin_addr), ntohs(nc->sa.sin.sin_port))); - } else { - n = (int) sl_Send(nc->sock, io->buf, io->len, 0); - DBG(("%p %d bytes -> %d", nc, n, nc->sock)); - } - - if (n > 0) { - mbuf_remove(io, n); - mg_if_sent_cb(nc, n); - } else if (n < 0 && mg_is_error(n)) { - /* Something went wrong, drop the connection. */ - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - } -} - -MG_INTERNAL size_t recv_avail_size(struct mg_connection *conn, size_t max) { - size_t avail; - if (conn->recv_mbuf_limit < conn->recv_mbuf.len) return 0; - avail = conn->recv_mbuf_limit - conn->recv_mbuf.len; - return avail > max ? max : avail; -} - -static void mg_handle_tcp_read(struct mg_connection *conn) { - int n = 0; - char *buf = (char *) MG_MALLOC(MG_TCP_RECV_BUFFER_SIZE); - - if (buf == NULL) { - DBG(("OOM")); - return; - } - - n = (int) sl_Recv(conn->sock, buf, - recv_avail_size(conn, MG_TCP_RECV_BUFFER_SIZE), 0); - DBG(("%p %d bytes <- %d", conn, n, conn->sock)); - if (n > 0) { - mg_if_recv_tcp_cb(conn, buf, n, 1 /* own */); - } else { - MG_FREE(buf); - } - if (n == 0) { - /* Orderly shutdown of the socket, try flushing output. */ - conn->flags |= MG_F_SEND_AND_CLOSE; - } else if (mg_is_error(n)) { - conn->flags |= MG_F_CLOSE_IMMEDIATELY; - } -} - -static void mg_handle_udp_read(struct mg_connection *nc) { - char *buf = (char *) MG_MALLOC(MG_UDP_RECV_BUFFER_SIZE); - if (buf == NULL) return; - union socket_address sa; - socklen_t sa_len = sizeof(sa); - int n = sl_RecvFrom(nc->sock, buf, MG_UDP_RECV_BUFFER_SIZE, 0, - (SlSockAddr_t *) &sa, &sa_len); - DBG(("%p %d bytes from %s:%d", nc, n, inet_ntoa(nc->sa.sin.sin_addr), - ntohs(nc->sa.sin.sin_port))); - if (n > 0) { - mg_if_recv_udp_cb(nc, buf, n, &sa, sa_len); - } else { - MG_FREE(buf); - } -} - -#define _MG_F_FD_CAN_READ 1 -#define _MG_F_FD_CAN_WRITE 1 << 1 -#define _MG_F_FD_ERROR 1 << 2 - -void mg_mgr_handle_conn(struct mg_connection *nc, int fd_flags, double now) { - DBG(("%p fd=%d fd_flags=%d nc_flags=%lu rmbl=%d smbl=%d", nc, nc->sock, - fd_flags, nc->flags, (int) nc->recv_mbuf.len, (int) nc->send_mbuf.len)); - - if (nc->flags & MG_F_CONNECTING) { - if (nc->flags & MG_F_UDP || nc->err != SL_EALREADY) { - mg_if_connect_cb(nc, nc->err); - } else { - /* In SimpleLink, to get status of non-blocking connect() we need to wait - * until socket is writable and repeat the call to sl_Connect again, - * which will now return the real status. */ - if (fd_flags & _MG_F_FD_CAN_WRITE) { - nc->err = sl_Connect(nc->sock, &nc->sa.sa, sizeof(nc->sa.sin)); - DBG(("%p conn res=%d", nc, nc->err)); - if (nc->err == SL_ESECSNOVERIFY || - /* TODO(rojer): Provide API to set the date for verification. */ - nc->err == SL_ESECDATEERROR) { - nc->err = 0; - } - if (nc->flags & MG_F_SSL && nc->err == 0) { - nc->flags |= MG_F_SSL_HANDSHAKE_DONE; - } - mg_if_connect_cb(nc, nc->err); - } - } - /* Ignore read/write in further processing, we've handled it. */ - fd_flags &= ~(_MG_F_FD_CAN_READ | _MG_F_FD_CAN_WRITE); - } - - if (fd_flags & _MG_F_FD_CAN_READ) { - if (nc->flags & MG_F_UDP) { - mg_handle_udp_read(nc); - } else { - if (nc->flags & MG_F_LISTENING) { - mg_accept_conn(nc); - } else { - mg_handle_tcp_read(nc); - } - } - } - - if (!(nc->flags & MG_F_CLOSE_IMMEDIATELY)) { - if ((fd_flags & _MG_F_FD_CAN_WRITE) && nc->send_mbuf.len > 0) { - mg_write_to_socket(nc); - } - - if (!(fd_flags & (_MG_F_FD_CAN_READ | _MG_F_FD_CAN_WRITE))) { - mg_if_poll(nc, now); - } - mg_if_timer(nc, now); - } - - DBG(("%p after fd=%d nc_flags=%lu rmbl=%d smbl=%d", nc, nc->sock, nc->flags, - (int) nc->recv_mbuf.len, (int) nc->send_mbuf.len)); -} - -/* Associate a socket to a connection. */ -void mg_sl_if_sock_set(struct mg_connection *nc, sock_t sock) { - mg_set_non_blocking_mode(sock); - nc->sock = sock; - DBG(("%p %d", nc, sock)); -} - -void mg_sl_if_init(struct mg_iface *iface) { - (void) iface; - DBG(("%p using sl_Select()", iface->mgr)); -} - -void mg_sl_if_free(struct mg_iface *iface) { - (void) iface; -} - -void mg_sl_if_add_conn(struct mg_connection *nc) { - (void) nc; -} - -void mg_sl_if_remove_conn(struct mg_connection *nc) { - (void) nc; -} - -time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) { - struct mg_mgr *mgr = iface->mgr; - double now = mg_time(); - double min_timer; - struct mg_connection *nc, *tmp; - struct SlTimeval_t tv; - SlFdSet_t read_set, write_set, err_set; - sock_t max_fd = INVALID_SOCKET; - int num_fds, num_ev = 0, num_timers = 0; - - SL_FD_ZERO(&read_set); - SL_FD_ZERO(&write_set); - SL_FD_ZERO(&err_set); - - /* - * Note: it is ok to have connections with sock == INVALID_SOCKET in the list, - * e.g. timer-only "connections". - */ - min_timer = 0; - for (nc = mgr->active_connections, num_fds = 0; nc != NULL; nc = tmp) { - tmp = nc->next; - - if (nc->sock != INVALID_SOCKET) { - num_fds++; - - if (!(nc->flags & MG_F_WANT_WRITE) && - nc->recv_mbuf.len < nc->recv_mbuf_limit && - (!(nc->flags & MG_F_UDP) || nc->listener == NULL)) { - SL_FD_SET(nc->sock, &read_set); - if (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock; - } - - if (((nc->flags & MG_F_CONNECTING) && !(nc->flags & MG_F_WANT_READ)) || - (nc->send_mbuf.len > 0 && !(nc->flags & MG_F_CONNECTING))) { - SL_FD_SET(nc->sock, &write_set); - SL_FD_SET(nc->sock, &err_set); - if (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock; - } - } - - if (nc->ev_timer_time > 0) { - if (num_timers == 0 || nc->ev_timer_time < min_timer) { - min_timer = nc->ev_timer_time; - } - num_timers++; - } - } - - /* - * If there is a timer to be fired earlier than the requested timeout, - * adjust the timeout. - */ - if (num_timers > 0) { - double timer_timeout_ms = (min_timer - mg_time()) * 1000 + 1 /* rounding */; - if (timer_timeout_ms < timeout_ms) { - timeout_ms = timer_timeout_ms; - } - } - if (timeout_ms < 0) timeout_ms = 0; - - tv.tv_sec = timeout_ms / 1000; - tv.tv_usec = (timeout_ms % 1000) * 1000; - - if (num_fds > 0) { - num_ev = sl_Select((int) max_fd + 1, &read_set, &write_set, &err_set, &tv); - } - - now = mg_time(); - DBG(("sl_Select @ %ld num_ev=%d of %d, timeout=%d", (long) now, num_ev, - num_fds, timeout_ms)); - - for (nc = mgr->active_connections; nc != NULL; nc = tmp) { - int fd_flags = 0; - if (nc->sock != INVALID_SOCKET) { - if (num_ev > 0) { - fd_flags = - (SL_FD_ISSET(nc->sock, &read_set) && - (!(nc->flags & MG_F_UDP) || nc->listener == NULL) - ? _MG_F_FD_CAN_READ - : 0) | - (SL_FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE : 0) | - (SL_FD_ISSET(nc->sock, &err_set) ? _MG_F_FD_ERROR : 0); - } - /* SimpleLink does not report UDP sockets as writeable. */ - if (nc->flags & MG_F_UDP && nc->send_mbuf.len > 0) { - fd_flags |= _MG_F_FD_CAN_WRITE; - } - } - tmp = nc->next; - mg_mgr_handle_conn(nc, fd_flags, now); - } - - for (nc = mgr->active_connections; nc != NULL; nc = tmp) { - tmp = nc->next; - if ((nc->flags & MG_F_CLOSE_IMMEDIATELY) || - (nc->send_mbuf.len == 0 && (nc->flags & MG_F_SEND_AND_CLOSE))) { - mg_close_conn(nc); - } - } - - return now; -} - -void mg_sl_if_get_conn_addr(struct mg_connection *nc, int remote, - union socket_address *sa) { - /* SimpleLink does not provide a way to get socket's peer address after - * accept or connect. Address hould have been preserved in the connection, - * so we do our best here by using it. */ - if (remote) memcpy(sa, &nc->sa, sizeof(*sa)); -} - -void sl_restart_cb(struct mg_mgr *mgr) { - /* - * SimpleLink has been restarted, meaning all sockets have been invalidated. - * We try our best - we'll restart the listeners, but for outgoing - * connections we have no option but to terminate. - */ - struct mg_connection *nc; - for (nc = mg_next(mgr, NULL); nc != NULL; nc = mg_next(mgr, nc)) { - if (nc->sock == INVALID_SOCKET) continue; /* Could be a timer */ - if (nc->flags & MG_F_LISTENING) { - DBG(("restarting %p %s:%d", nc, inet_ntoa(nc->sa.sin.sin_addr), - ntohs(nc->sa.sin.sin_port))); - int res = (nc->flags & MG_F_UDP ? mg_sl_if_listen_udp(nc, &nc->sa) - : mg_sl_if_listen_tcp(nc, &nc->sa)); - if (res == 0) continue; - /* Well, we tried and failed. Fall through to closing. */ - } - nc->sock = INVALID_SOCKET; - DBG(("terminating %p %s:%d", nc, inet_ntoa(nc->sa.sin.sin_addr), - ntohs(nc->sa.sin.sin_port))); - /* TODO(rojer): Outgoing UDP? */ - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - } -} - -/* clang-format off */ -#define MG_SL_IFACE_VTABLE \ - { \ - mg_sl_if_init, \ - mg_sl_if_free, \ - mg_sl_if_add_conn, \ - mg_sl_if_remove_conn, \ - mg_sl_if_poll, \ - mg_sl_if_listen_tcp, \ - mg_sl_if_listen_udp, \ - mg_sl_if_connect_tcp, \ - mg_sl_if_connect_udp, \ - mg_sl_if_tcp_send, \ - mg_sl_if_udp_send, \ - mg_sl_if_recved, \ - mg_sl_if_create_conn, \ - mg_sl_if_destroy_conn, \ - mg_sl_if_sock_set, \ - mg_sl_if_get_conn_addr, \ - } -/* clang-format on */ - -struct mg_iface_vtable mg_simplelink_iface_vtable = MG_SL_IFACE_VTABLE; -#if MG_NET_IF == MG_NET_IF_SIMPLELINK -struct mg_iface_vtable mg_default_iface_vtable = MG_SL_IFACE_VTABLE; -#endif - -#endif /* MG_ENABLE_NET_IF_SIMPLELINK */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/sl_ssl_if.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_SSL && MG_SSL_IF == MG_SSL_IF_SIMPLELINK - -struct mg_ssl_if_ctx { - char *ssl_cert; - char *ssl_key; - char *ssl_ca_cert; - char *ssl_server_name; -}; - -void mg_ssl_if_init() { -} - -enum mg_ssl_if_result mg_ssl_if_conn_init( - struct mg_connection *nc, const struct mg_ssl_if_conn_params *params, - const char **err_msg) { - struct mg_ssl_if_ctx *ctx = - (struct mg_ssl_if_ctx *) MG_CALLOC(1, sizeof(*ctx)); - if (ctx == NULL) { - MG_SET_PTRPTR(err_msg, "Out of memory"); - return MG_SSL_ERROR; - } - nc->ssl_if_data = ctx; - - if (params->cert != NULL || params->key != NULL) { - if (params->cert != NULL && params->key != NULL) { - ctx->ssl_cert = strdup(params->cert); - ctx->ssl_key = strdup(params->key); - } else { - MG_SET_PTRPTR(err_msg, "Both cert and key are required."); - return MG_SSL_ERROR; - } - } - if (params->ca_cert != NULL && strcmp(params->ca_cert, "*") != 0) { - ctx->ssl_ca_cert = strdup(params->ca_cert); - } - /* TODO(rojer): cipher_suites. */ - if (params->server_name != NULL) { - ctx->ssl_server_name = strdup(params->server_name); - } - return MG_SSL_OK; -} - -void mg_ssl_if_conn_free(struct mg_connection *nc) { - struct mg_ssl_if_ctx *ctx = (struct mg_ssl_if_ctx *) nc->ssl_if_data; - if (ctx == NULL) return; - nc->ssl_if_data = NULL; - MG_FREE(ctx->ssl_cert); - MG_FREE(ctx->ssl_key); - MG_FREE(ctx->ssl_ca_cert); - MG_FREE(ctx->ssl_server_name); - memset(ctx, 0, sizeof(*ctx)); - MG_FREE(ctx); -} - -bool pem_to_der(const char *pem_file, const char *der_file) { - bool ret = false; - FILE *pf = NULL, *df = NULL; - bool writing = false; - pf = fopen(pem_file, "r"); - if (pf == NULL) goto clean; - remove(der_file); - fs_slfs_set_new_file_size(der_file + 3, 2048); - df = fopen(der_file, "w"); - if (df == NULL) goto clean; - while (1) { - char pem_buf[70]; - char der_buf[48]; - if (!fgets(pem_buf, sizeof(pem_buf), pf)) break; - if (writing) { - if (strstr(pem_buf, "-----END ") != NULL) { - ret = true; - break; - } - int l = 0; - while (!isspace((unsigned int) pem_buf[l])) l++; - int der_len = 0; - cs_base64_decode((const unsigned char *) pem_buf, sizeof(pem_buf), - der_buf, &der_len); - if (der_len <= 0) break; - if (fwrite(der_buf, 1, der_len, df) != der_len) break; - } else if (strstr(pem_buf, "-----BEGIN ") != NULL) { - writing = true; - } - } - -clean: - if (pf != NULL) fclose(pf); - if (df != NULL) { - fclose(df); - if (!ret) remove(der_file); - } - return ret; -} - -#if MG_ENABLE_FILESYSTEM && defined(MG_FS_SLFS) -/* If the file's extension is .pem, convert it to DER format and put on SLFS. */ -static char *sl_pem2der(const char *pem_file) { - const char *pem_ext = strstr(pem_file, ".pem"); - if (pem_ext == NULL || *(pem_ext + 4) != '\0') { - return strdup(pem_file); - } - char *der_file = NULL; - /* DER file must be located on SLFS, add prefix. */ - int l = mg_asprintf(&der_file, 0, "SL:%.*s.der", (int) (pem_ext - pem_file), - pem_file); - if (der_file == NULL) return NULL; - bool result = false; - cs_stat_t st; - if (mg_stat(der_file, &st) != 0) { - result = pem_to_der(pem_file, der_file); - LOG(LL_DEBUG, ("%s -> %s = %d", pem_file, der_file, result)); - } else { - /* File exists, assume it's already been converted. */ - result = true; - } - if (result) { - /* Strip the SL: prefix we added since NWP does not expect it. */ - memmove(der_file, der_file + 3, l - 2 /* including \0 */); - } else { - free(der_file); - der_file = NULL; - } - return der_file; -} -#else -static char *sl_pem2der(const char *pem_file) { - return strdup(pem_file); -} -#endif - -int sl_set_ssl_opts(struct mg_connection *nc) { - int err; - struct mg_ssl_if_ctx *ctx = (struct mg_ssl_if_ctx *) nc->ssl_if_data; - DBG(("%p ssl ctx: %p", nc, ctx)); - - if (ctx != NULL) { - DBG(("%p %s,%s,%s,%s", nc, (ctx->ssl_cert ? ctx->ssl_cert : "-"), - (ctx->ssl_key ? ctx->ssl_cert : "-"), - (ctx->ssl_ca_cert ? ctx->ssl_ca_cert : "-"), - (ctx->ssl_server_name ? ctx->ssl_server_name : "-"))); - if (ctx->ssl_cert != NULL && ctx->ssl_key != NULL) { - char *ssl_cert = sl_pem2der(ctx->ssl_cert); - char *ssl_key = sl_pem2der(ctx->ssl_key); - if (ssl_cert != NULL && ssl_key != NULL) { - err = sl_SetSockOpt(nc->sock, SL_SOL_SOCKET, - SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME, ssl_cert, - strlen(ssl_cert)); - LOG(LL_INFO, ("CERTIFICATE_FILE_NAME %s -> %d", ssl_cert, err)); - err = sl_SetSockOpt(nc->sock, SL_SOL_SOCKET, - SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME, ssl_key, - strlen(ssl_key)); - LOG(LL_INFO, ("PRIVATE_KEY_FILE_NAME %s -> %d", ssl_key, err)); - } else { - err = -1; - } - free(ssl_cert); - free(ssl_key); - if (err != 0) return err; - } - if (ctx->ssl_ca_cert != NULL) { - if (ctx->ssl_ca_cert[0] != '\0') { - char *ssl_ca_cert = sl_pem2der(ctx->ssl_ca_cert); - if (ssl_ca_cert != NULL) { - err = sl_SetSockOpt(nc->sock, SL_SOL_SOCKET, - SL_SO_SECURE_FILES_CA_FILE_NAME, ssl_ca_cert, - strlen(ssl_ca_cert)); - LOG(LL_INFO, ("CA_FILE_NAME %s -> %d", ssl_ca_cert, err)); - } else { - err = -1; - } - free(ssl_ca_cert); - if (err != 0) return err; - } - } - if (ctx->ssl_server_name != NULL) { - err = sl_SetSockOpt(nc->sock, SL_SOL_SOCKET, - SO_SECURE_DOMAIN_NAME_VERIFICATION, - ctx->ssl_server_name, strlen(ctx->ssl_server_name)); - DBG(("DOMAIN_NAME_VERIFICATION %s -> %d", ctx->ssl_server_name, err)); - /* Domain name verificationw as added in a NWP service pack, older - * versions return SL_ENOPROTOOPT. There isn't much we can do about it, - * so we ignore the error. */ - if (err != 0 && err != SL_ENOPROTOOPT) return err; - } - } - return 0; -} - -#endif /* MG_ENABLE_SSL && MG_SSL_IF == MG_SSL_IF_SIMPLELINK */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/lwip/mg_lwip_net_if.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_LWIP_MG_NET_IF_LWIP_H_ -#define CS_COMMON_PLATFORMS_LWIP_MG_NET_IF_LWIP_H_ - -#ifndef MG_ENABLE_NET_IF_LWIP_LOW_LEVEL -#define MG_ENABLE_NET_IF_LWIP_LOW_LEVEL MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL -#endif - -#if MG_ENABLE_NET_IF_LWIP_LOW_LEVEL - -#include - -extern struct mg_iface_vtable mg_lwip_iface_vtable; - -struct mg_lwip_conn_state { - struct mg_connection *nc; - union { - struct tcp_pcb *tcp; - struct udp_pcb *udp; - } pcb; - err_t err; - size_t num_sent; /* Number of acknowledged bytes to be reported to the core */ - struct pbuf *rx_chain; /* Chain of incoming data segments. */ - size_t rx_offset; /* Offset within the first pbuf (if partially consumed) */ - /* Last SSL write size, for retries. */ - int last_ssl_write_size; -}; - -enum mg_sig_type { - MG_SIG_CONNECT_RESULT = 1, - MG_SIG_RECV = 2, - MG_SIG_SENT_CB = 3, - MG_SIG_CLOSE_CONN = 4, - MG_SIG_TOMBSTONE = 5, -}; - -void mg_lwip_post_signal(enum mg_sig_type sig, struct mg_connection *nc); - -/* To be implemented by the platform. */ -void mg_lwip_mgr_schedule_poll(struct mg_mgr *mgr); - -#endif /* MG_ENABLE_NET_IF_LWIP_LOW_LEVEL */ - -#endif /* CS_COMMON_PLATFORMS_LWIP_MG_NET_IF_LWIP_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/lwip/mg_lwip_net_if.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_NET_IF_LWIP_LOW_LEVEL - -#include -#include -#if CS_PLATFORM != CS_P_STM32 -#include -#endif -#include - -/* Amalgamated: #include "common/cs_dbg.h" */ - -/* - * Depending on whether Mongoose is compiled with ipv6 support, use right - * lwip functions - */ -#if MG_ENABLE_IPV6 -#define TCP_NEW tcp_new_ip6 -#define TCP_BIND tcp_bind_ip6 -#define UDP_BIND udp_bind_ip6 -#define IPADDR_NTOA(x) ip6addr_ntoa((const ip6_addr_t *)(x)) -#define SET_ADDR(dst, src) \ - memcpy((dst)->sin6.sin6_addr.s6_addr, (src)->ip6.addr, \ - sizeof((dst)->sin6.sin6_addr.s6_addr)) -#else -#define TCP_NEW tcp_new -#define TCP_BIND tcp_bind -#define UDP_BIND udp_bind -#define IPADDR_NTOA ipaddr_ntoa -#define SET_ADDR(dst, src) (dst)->sin.sin_addr.s_addr = GET_IPV4(src) -#endif - -/* - * If lwip is compiled with ipv6 support, then API changes even for ipv4 - */ -#if !defined(LWIP_IPV6) || !LWIP_IPV6 -#define GET_IPV4(ipX_addr) ((ipX_addr)->addr) -#else -#define GET_IPV4(ipX_addr) ((ipX_addr)->ip4.addr) -#endif - -void mg_lwip_ssl_do_hs(struct mg_connection *nc); -void mg_lwip_ssl_send(struct mg_connection *nc); -void mg_lwip_ssl_recv(struct mg_connection *nc); - -void mg_lwip_if_init(struct mg_iface *iface); -void mg_lwip_if_free(struct mg_iface *iface); -void mg_lwip_if_add_conn(struct mg_connection *nc); -void mg_lwip_if_remove_conn(struct mg_connection *nc); -time_t mg_lwip_if_poll(struct mg_iface *iface, int timeout_ms); - -#if LWIP_TCP_KEEPALIVE -void mg_lwip_set_keepalive_params(struct mg_connection *nc, int idle, - int interval, int count) { - if (nc->sock == INVALID_SOCKET || nc->flags & MG_F_UDP) { - return; - } - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - struct tcp_pcb *tpcb = cs->pcb.tcp; - if (idle > 0 && interval > 0 && count > 0) { - tpcb->keep_idle = idle * 1000; - tpcb->keep_intvl = interval * 1000; - tpcb->keep_cnt = count; - tpcb->so_options |= SOF_KEEPALIVE; - } else { - tpcb->so_options &= ~SOF_KEEPALIVE; - } -} -#elif !defined(MG_NO_LWIP_TCP_KEEPALIVE) -#warning LWIP TCP keepalive is disabled. Please consider enabling it. -#endif /* LWIP_TCP_KEEPALIVE */ - -static err_t mg_lwip_tcp_conn_cb(void *arg, struct tcp_pcb *tpcb, err_t err) { - struct mg_connection *nc = (struct mg_connection *) arg; - DBG(("%p connect to %s:%u = %d", nc, IPADDR_NTOA(&tpcb->remote_ip), - tpcb->remote_port, err)); - if (nc == NULL) { - tcp_abort(tpcb); - return ERR_ARG; - } - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - cs->err = err; -#if LWIP_TCP_KEEPALIVE - if (err == 0) mg_lwip_set_keepalive_params(nc, 60, 10, 6); -#endif - mg_lwip_post_signal(MG_SIG_CONNECT_RESULT, nc); - return ERR_OK; -} - -static void mg_lwip_tcp_error_cb(void *arg, err_t err) { - struct mg_connection *nc = (struct mg_connection *) arg; - DBG(("%p conn error %d", nc, err)); - if (nc == NULL) return; - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - cs->pcb.tcp = NULL; /* Has already been deallocated */ - if (nc->flags & MG_F_CONNECTING) { - cs->err = err; - mg_lwip_post_signal(MG_SIG_CONNECT_RESULT, nc); - } else { - mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); - } -} - -static err_t mg_lwip_tcp_recv_cb(void *arg, struct tcp_pcb *tpcb, - struct pbuf *p, err_t err) { - struct mg_connection *nc = (struct mg_connection *) arg; - DBG(("%p %p %u %d", nc, tpcb, (p != NULL ? p->tot_len : 0), err)); - if (p == NULL) { - if (nc != NULL) { - mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); - } else { - /* Tombstoned connection, do nothing. */ - } - return ERR_OK; - } else if (nc == NULL) { - tcp_abort(tpcb); - return ERR_ARG; - } - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - /* - * If we get a chain of more than one segment at once, we need to bump - * refcount on the subsequent bufs to make them independent. - */ - if (p->next != NULL) { - struct pbuf *q = p->next; - for (; q != NULL; q = q->next) pbuf_ref(q); - } - if (cs->rx_chain == NULL) { - cs->rx_chain = p; - cs->rx_offset = 0; - } else { - if (pbuf_clen(cs->rx_chain) >= 4) { - /* ESP SDK has a limited pool of 5 pbufs. We must not hog them all or RX - * will be completely blocked. We already have at least 4 in the chain, - * this one is, so we have to make a copy and release this one. */ - struct pbuf *np = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); - if (np != NULL) { - pbuf_copy(np, p); - pbuf_free(p); - p = np; - } - } - pbuf_chain(cs->rx_chain, p); - } - mg_lwip_post_signal(MG_SIG_RECV, nc); - return ERR_OK; -} - -static void mg_lwip_handle_recv(struct mg_connection *nc) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - -#if MG_ENABLE_SSL - if (nc->flags & MG_F_SSL) { - if (nc->flags & MG_F_SSL_HANDSHAKE_DONE) { - mg_lwip_ssl_recv(nc); - } else { - mg_lwip_ssl_do_hs(nc); - } - return; - } -#endif - - while (cs->rx_chain != NULL) { - struct pbuf *seg = cs->rx_chain; - size_t len = (seg->len - cs->rx_offset); - char *data = (char *) malloc(len); - if (data == NULL) { - DBG(("OOM")); - return; - } - pbuf_copy_partial(seg, data, len, cs->rx_offset); - mg_if_recv_tcp_cb(nc, data, len, 1 /* own */); - cs->rx_offset += len; - if (cs->rx_offset == cs->rx_chain->len) { - cs->rx_chain = pbuf_dechain(cs->rx_chain); - pbuf_free(seg); - cs->rx_offset = 0; - } - } - - if (nc->send_mbuf.len > 0) { - mg_lwip_mgr_schedule_poll(nc->mgr); - } -} - -static err_t mg_lwip_tcp_sent_cb(void *arg, struct tcp_pcb *tpcb, - u16_t num_sent) { - struct mg_connection *nc = (struct mg_connection *) arg; - DBG(("%p %p %u", nc, tpcb, num_sent)); - if (nc == NULL) { - tcp_abort(tpcb); - return ERR_ABRT; - } - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - cs->num_sent += num_sent; - - mg_lwip_post_signal(MG_SIG_SENT_CB, nc); - return ERR_OK; -} - -void mg_lwip_if_connect_tcp(struct mg_connection *nc, - const union socket_address *sa) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - struct tcp_pcb *tpcb = TCP_NEW(); - cs->pcb.tcp = tpcb; - ip_addr_t *ip = (ip_addr_t *) &sa->sin.sin_addr.s_addr; - u16_t port = ntohs(sa->sin.sin_port); - tcp_arg(tpcb, nc); - tcp_err(tpcb, mg_lwip_tcp_error_cb); - tcp_sent(tpcb, mg_lwip_tcp_sent_cb); - tcp_recv(tpcb, mg_lwip_tcp_recv_cb); - cs->err = TCP_BIND(tpcb, IP_ADDR_ANY, 0 /* any port */); - DBG(("%p tcp_bind = %d", nc, cs->err)); - if (cs->err != ERR_OK) { - mg_lwip_post_signal(MG_SIG_CONNECT_RESULT, nc); - return; - } - cs->err = tcp_connect(tpcb, ip, port, mg_lwip_tcp_conn_cb); - DBG(("%p tcp_connect %p = %d", nc, tpcb, cs->err)); - if (cs->err != ERR_OK) { - mg_lwip_post_signal(MG_SIG_CONNECT_RESULT, nc); - return; - } -} - -/* - * Lwip included in the SDKs for nRF5x chips has different type for the - * callback of `udp_recv()` - */ -#if CS_PLATFORM == CS_P_NRF51 || CS_PLATFORM == CS_P_NRF52 || \ - CS_PLATFORM == CS_P_STM32 -static void mg_lwip_udp_recv_cb(void *arg, struct udp_pcb *pcb, struct pbuf *p, - const ip_addr_t *addr, u16_t port) -#else -static void mg_lwip_udp_recv_cb(void *arg, struct udp_pcb *pcb, struct pbuf *p, - ip_addr_t *addr, u16_t port) -#endif -{ - struct mg_connection *nc = (struct mg_connection *) arg; - size_t len = p->len; - char *data = (char *) malloc(len); - union socket_address sa; - (void) pcb; - DBG(("%p %s:%u %u", nc, IPADDR_NTOA(addr), port, p->len)); - if (data == NULL) { - DBG(("OOM")); - pbuf_free(p); - return; - } - sa.sin.sin_addr.s_addr = addr->addr; - sa.sin.sin_port = htons(port); - pbuf_copy_partial(p, data, len, 0); - pbuf_free(p); - mg_if_recv_udp_cb(nc, data, len, &sa, sizeof(sa.sin)); -} - -void mg_lwip_if_connect_udp(struct mg_connection *nc) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - struct udp_pcb *upcb = udp_new(); - cs->err = UDP_BIND(upcb, IP_ADDR_ANY, 0 /* any port */); - DBG(("%p udp_bind %p = %d", nc, upcb, cs->err)); - if (cs->err == ERR_OK) { - udp_recv(upcb, mg_lwip_udp_recv_cb, nc); - cs->pcb.udp = upcb; - } else { - udp_remove(upcb); - } - mg_lwip_post_signal(MG_SIG_CONNECT_RESULT, nc); -} - -void mg_lwip_accept_conn(struct mg_connection *nc, struct tcp_pcb *tpcb) { - union socket_address sa; - SET_ADDR(&sa, &tpcb->remote_ip); - sa.sin.sin_port = htons(tpcb->remote_port); - mg_if_accept_tcp_cb(nc, &sa, sizeof(sa.sin)); -} - -static err_t mg_lwip_accept_cb(void *arg, struct tcp_pcb *newtpcb, err_t err) { - struct mg_connection *lc = (struct mg_connection *) arg; - (void) err; - DBG(("%p conn %p from %s:%u", lc, newtpcb, IPADDR_NTOA(&newtpcb->remote_ip), - newtpcb->remote_port)); - struct mg_connection *nc = mg_if_accept_new_conn(lc); - if (nc == NULL) { - tcp_abort(newtpcb); - return ERR_ABRT; - } - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - cs->pcb.tcp = newtpcb; - tcp_arg(newtpcb, nc); - tcp_err(newtpcb, mg_lwip_tcp_error_cb); - tcp_sent(newtpcb, mg_lwip_tcp_sent_cb); - tcp_recv(newtpcb, mg_lwip_tcp_recv_cb); -#if LWIP_TCP_KEEPALIVE - mg_lwip_set_keepalive_params(nc, 60, 10, 6); -#endif -#if MG_ENABLE_SSL - if (lc->flags & MG_F_SSL) { - if (mg_ssl_if_conn_accept(nc, lc) != MG_SSL_OK) { - LOG(LL_ERROR, ("SSL error")); - tcp_close(newtpcb); - } - } else -#endif - { - mg_lwip_accept_conn(nc, newtpcb); - } - return ERR_OK; -} - -int mg_lwip_if_listen_tcp(struct mg_connection *nc, union socket_address *sa) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - struct tcp_pcb *tpcb = TCP_NEW(); - ip_addr_t *ip = (ip_addr_t *) &sa->sin.sin_addr.s_addr; - u16_t port = ntohs(sa->sin.sin_port); - cs->err = TCP_BIND(tpcb, ip, port); - DBG(("%p tcp_bind(%s:%u) = %d", nc, IPADDR_NTOA(ip), port, cs->err)); - if (cs->err != ERR_OK) { - tcp_close(tpcb); - return -1; - } - tcp_arg(tpcb, nc); - tpcb = tcp_listen(tpcb); - cs->pcb.tcp = tpcb; - tcp_accept(tpcb, mg_lwip_accept_cb); - return 0; -} - -int mg_lwip_if_listen_udp(struct mg_connection *nc, union socket_address *sa) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - struct udp_pcb *upcb = udp_new(); - ip_addr_t *ip = (ip_addr_t *) &sa->sin.sin_addr.s_addr; - u16_t port = ntohs(sa->sin.sin_port); - cs->err = UDP_BIND(upcb, ip, port); - DBG(("%p udb_bind(%s:%u) = %d", nc, IPADDR_NTOA(ip), port, cs->err)); - if (cs->err != ERR_OK) { - udp_remove(upcb); - return -1; - } - udp_recv(upcb, mg_lwip_udp_recv_cb, nc); - cs->pcb.udp = upcb; - return 0; -} - -int mg_lwip_tcp_write(struct mg_connection *nc, const void *data, - uint16_t len) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - struct tcp_pcb *tpcb = cs->pcb.tcp; - len = MIN(tpcb->mss, MIN(len, tpcb->snd_buf)); - if (len == 0) { - DBG(("%p no buf avail %u %u %u %p %p", tpcb, tpcb->acked, tpcb->snd_buf, - tpcb->snd_queuelen, tpcb->unsent, tpcb->unacked)); - tcp_output(tpcb); - return 0; - } -/* - * On ESP8266 we only allow one TCP segment in flight at any given time. - * This may increase latency and reduce efficiency of tcp windowing, - * but memory is scarce and precious on that platform so we do this to - * reduce footprint. - */ -#if CS_PLATFORM == CS_P_ESP8266 - if (tpcb->unacked != NULL) { - return 0; - } - if (tpcb->unsent != NULL) { - len = MIN(len, (TCP_MSS - tpcb->unsent->len)); - } -#endif - err_t err = tcp_write(tpcb, data, len, TCP_WRITE_FLAG_COPY); - DBG(("%p tcp_write %u = %d", tpcb, len, err)); - if (err != ERR_OK) { - /* - * We ignore ERR_MEM because memory will be freed up when the data is sent - * and we'll retry. - */ - return (err == ERR_MEM ? 0 : -1); - } - return len; -} - -static void mg_lwip_send_more(struct mg_connection *nc) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - if (nc->sock == INVALID_SOCKET || cs->pcb.tcp == NULL) { - DBG(("%p invalid socket", nc)); - return; - } - int num_written = mg_lwip_tcp_write(nc, nc->send_mbuf.buf, nc->send_mbuf.len); - DBG(("%p mg_lwip_tcp_write %u = %d", nc, nc->send_mbuf.len, num_written)); - if (num_written == 0) return; - if (num_written < 0) { - mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); - } - mbuf_remove(&nc->send_mbuf, num_written); - mbuf_trim(&nc->send_mbuf); -} - -void mg_lwip_if_tcp_send(struct mg_connection *nc, const void *buf, - size_t len) { - mbuf_append(&nc->send_mbuf, buf, len); - mg_lwip_mgr_schedule_poll(nc->mgr); -} - -void mg_lwip_if_udp_send(struct mg_connection *nc, const void *buf, - size_t len) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - if (nc->sock == INVALID_SOCKET || cs->pcb.udp == NULL) { - /* - * In case of UDP, this usually means, what - * async DNS resolve is still in progress and connection - * is not ready yet - */ - DBG(("%p socket is not connected", nc)); - return; - } - struct udp_pcb *upcb = cs->pcb.udp; - struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); - ip_addr_t *ip = (ip_addr_t *) &nc->sa.sin.sin_addr.s_addr; - u16_t port = ntohs(nc->sa.sin.sin_port); - memcpy(p->payload, buf, len); - cs->err = udp_sendto(upcb, p, (ip_addr_t *) ip, port); - DBG(("%p udp_sendto = %d", nc, cs->err)); - pbuf_free(p); - if (cs->err != ERR_OK) { - mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); - } else { - cs->num_sent += len; - mg_lwip_post_signal(MG_SIG_SENT_CB, nc); - } -} - -void mg_lwip_if_recved(struct mg_connection *nc, size_t len) { - if (nc->flags & MG_F_UDP) return; - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - if (nc->sock == INVALID_SOCKET || cs->pcb.tcp == NULL) { - DBG(("%p invalid socket", nc)); - return; - } - DBG(("%p %p %u", nc, cs->pcb.tcp, len)); -/* Currently SSL acknowledges data immediately. - * TODO(rojer): Find a way to propagate mg_lwip_if_recved. */ -#if MG_ENABLE_SSL - if (!(nc->flags & MG_F_SSL)) { - tcp_recved(cs->pcb.tcp, len); - } -#else - tcp_recved(cs->pcb.tcp, len); -#endif - mbuf_trim(&nc->recv_mbuf); -} - -int mg_lwip_if_create_conn(struct mg_connection *nc) { - struct mg_lwip_conn_state *cs = - (struct mg_lwip_conn_state *) calloc(1, sizeof(*cs)); - if (cs == NULL) return 0; - cs->nc = nc; - nc->sock = (intptr_t) cs; - return 1; -} - -void mg_lwip_if_destroy_conn(struct mg_connection *nc) { - if (nc->sock == INVALID_SOCKET) return; - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - if (!(nc->flags & MG_F_UDP)) { - struct tcp_pcb *tpcb = cs->pcb.tcp; - if (tpcb != NULL) { - tcp_arg(tpcb, NULL); - DBG(("%p tcp_close %p", nc, tpcb)); - tcp_arg(tpcb, NULL); - tcp_close(tpcb); - } - while (cs->rx_chain != NULL) { - struct pbuf *seg = cs->rx_chain; - cs->rx_chain = pbuf_dechain(cs->rx_chain); - pbuf_free(seg); - } - memset(cs, 0, sizeof(*cs)); - free(cs); - } else if (nc->listener == NULL) { - /* Only close outgoing UDP pcb or listeners. */ - struct udp_pcb *upcb = cs->pcb.udp; - if (upcb != NULL) { - DBG(("%p udp_remove %p", nc, upcb)); - udp_remove(upcb); - } - memset(cs, 0, sizeof(*cs)); - free(cs); - } - nc->sock = INVALID_SOCKET; -} - -void mg_lwip_if_get_conn_addr(struct mg_connection *nc, int remote, - union socket_address *sa) { - memset(sa, 0, sizeof(*sa)); - if (nc->sock == INVALID_SOCKET) return; - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - if (nc->flags & MG_F_UDP) { - struct udp_pcb *upcb = cs->pcb.udp; - if (remote) { - memcpy(sa, &nc->sa, sizeof(*sa)); - } else { - sa->sin.sin_port = htons(upcb->local_port); - SET_ADDR(sa, &upcb->local_ip); - } - } else { - struct tcp_pcb *tpcb = cs->pcb.tcp; - if (remote) { - sa->sin.sin_port = htons(tpcb->remote_port); - SET_ADDR(sa, &tpcb->remote_ip); - } else { - sa->sin.sin_port = htons(tpcb->local_port); - SET_ADDR(sa, &tpcb->local_ip); - } - } -} - -void mg_lwip_if_sock_set(struct mg_connection *nc, sock_t sock) { - nc->sock = sock; -} - -/* clang-format off */ -#define MG_LWIP_IFACE_VTABLE \ - { \ - mg_lwip_if_init, \ - mg_lwip_if_free, \ - mg_lwip_if_add_conn, \ - mg_lwip_if_remove_conn, \ - mg_lwip_if_poll, \ - mg_lwip_if_listen_tcp, \ - mg_lwip_if_listen_udp, \ - mg_lwip_if_connect_tcp, \ - mg_lwip_if_connect_udp, \ - mg_lwip_if_tcp_send, \ - mg_lwip_if_udp_send, \ - mg_lwip_if_recved, \ - mg_lwip_if_create_conn, \ - mg_lwip_if_destroy_conn, \ - mg_lwip_if_sock_set, \ - mg_lwip_if_get_conn_addr, \ - } -/* clang-format on */ - -struct mg_iface_vtable mg_lwip_iface_vtable = MG_LWIP_IFACE_VTABLE; -#if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL -struct mg_iface_vtable mg_default_iface_vtable = MG_LWIP_IFACE_VTABLE; -#endif - -#endif /* MG_ENABLE_NET_IF_LWIP_LOW_LEVEL */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/lwip/mg_lwip_ev_mgr.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL - -#ifndef MG_SIG_QUEUE_LEN -#define MG_SIG_QUEUE_LEN 16 -#endif - -struct mg_ev_mgr_lwip_signal { - int sig; - struct mg_connection *nc; -}; - -struct mg_ev_mgr_lwip_data { - struct mg_ev_mgr_lwip_signal sig_queue[MG_SIG_QUEUE_LEN]; - int sig_queue_len; - int start_index; -}; - -void mg_lwip_post_signal(enum mg_sig_type sig, struct mg_connection *nc) { - struct mg_ev_mgr_lwip_data *md = - (struct mg_ev_mgr_lwip_data *) nc->iface->data; - if (md->sig_queue_len >= MG_SIG_QUEUE_LEN) return; - int end_index = (md->start_index + md->sig_queue_len) % MG_SIG_QUEUE_LEN; - md->sig_queue[end_index].sig = sig; - md->sig_queue[end_index].nc = nc; - md->sig_queue_len++; -} - -void mg_ev_mgr_lwip_process_signals(struct mg_mgr *mgr) { - struct mg_ev_mgr_lwip_data *md = - (struct mg_ev_mgr_lwip_data *) mgr->ifaces[MG_MAIN_IFACE]->data; - while (md->sig_queue_len > 0) { - struct mg_connection *nc = md->sig_queue[md->start_index].nc; - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - switch (md->sig_queue[md->start_index].sig) { - case MG_SIG_CONNECT_RESULT: { -#if MG_ENABLE_SSL - if (cs->err == 0 && (nc->flags & MG_F_SSL) && - !(nc->flags & MG_F_SSL_HANDSHAKE_DONE)) { - mg_lwip_ssl_do_hs(nc); - } else -#endif - { - mg_if_connect_cb(nc, cs->err); - } - break; - } - case MG_SIG_CLOSE_CONN: { - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - mg_close_conn(nc); - break; - } - case MG_SIG_RECV: { - mg_lwip_handle_recv(nc); - break; - } - case MG_SIG_SENT_CB: { - if (cs->num_sent > 0) mg_if_sent_cb(nc, cs->num_sent); - cs->num_sent = 0; - - if (nc->send_mbuf.len == 0 && (nc->flags & MG_F_SEND_AND_CLOSE) && - !(nc->flags & MG_F_WANT_WRITE)) { - mg_close_conn(nc); - } - - break; - } - case MG_SIG_TOMBSTONE: { - break; - } - } - md->start_index = (md->start_index + 1) % MG_SIG_QUEUE_LEN; - md->sig_queue_len--; - } -} - -void mg_lwip_if_init(struct mg_iface *iface) { - LOG(LL_INFO, ("%p Mongoose init")); - iface->data = MG_CALLOC(1, sizeof(struct mg_ev_mgr_lwip_data)); -} - -void mg_lwip_if_free(struct mg_iface *iface) { - MG_FREE(iface->data); - iface->data = NULL; -} - -void mg_lwip_if_add_conn(struct mg_connection *nc) { - (void) nc; -} - -void mg_lwip_if_remove_conn(struct mg_connection *nc) { - struct mg_ev_mgr_lwip_data *md = - (struct mg_ev_mgr_lwip_data *) nc->iface->data; - /* Walk the queue and null-out further signals for this conn. */ - for (int i = 0; i < MG_SIG_QUEUE_LEN; i++) { - if (md->sig_queue[i].nc == nc) { - md->sig_queue[i].sig = MG_SIG_TOMBSTONE; - } - } -} - -time_t mg_lwip_if_poll(struct mg_iface *iface, int timeout_ms) { - struct mg_mgr *mgr = iface->mgr; - int n = 0; - double now = mg_time(); - struct mg_connection *nc, *tmp; - double min_timer = 0; - int num_timers = 0; -#if 0 - DBG(("begin poll @%u", (unsigned int) (now * 1000))); -#endif - mg_ev_mgr_lwip_process_signals(mgr); - for (nc = mgr->active_connections; nc != NULL; nc = tmp) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - tmp = nc->next; - n++; - if (nc->flags & MG_F_CLOSE_IMMEDIATELY) { - mg_close_conn(nc); - continue; - } - mg_if_poll(nc, now); - mg_if_timer(nc, now); -#if MG_ENABLE_SSL - if ((nc->flags & MG_F_SSL) && cs != NULL && cs->pcb.tcp != NULL && - cs->pcb.tcp->state == ESTABLISHED) { - if (((nc->flags & MG_F_WANT_WRITE) || - ((nc->send_mbuf.len > 0) && - (nc->flags & MG_F_SSL_HANDSHAKE_DONE))) && - cs->pcb.tcp->snd_buf > 0) { - /* Can write more. */ - if (nc->flags & MG_F_SSL_HANDSHAKE_DONE) { - if (!(nc->flags & MG_F_CONNECTING)) mg_lwip_ssl_send(nc); - } else { - mg_lwip_ssl_do_hs(nc); - } - } - if (cs->rx_chain != NULL || (nc->flags & MG_F_WANT_READ)) { - if (nc->flags & MG_F_SSL_HANDSHAKE_DONE) { - if (!(nc->flags & MG_F_CONNECTING)) mg_lwip_ssl_recv(nc); - } else { - mg_lwip_ssl_do_hs(nc); - } - } - } else -#endif /* MG_ENABLE_SSL */ - { - if (!(nc->flags & (MG_F_CONNECTING | MG_F_UDP))) { - if (nc->send_mbuf.len > 0) mg_lwip_send_more(nc); - } - } - if (nc->sock != INVALID_SOCKET && - !(nc->flags & (MG_F_UDP | MG_F_LISTENING)) && cs->pcb.tcp != NULL && - cs->pcb.tcp->unsent != NULL) { - tcp_output(cs->pcb.tcp); - } - if (nc->ev_timer_time > 0) { - if (num_timers == 0 || nc->ev_timer_time < min_timer) { - min_timer = nc->ev_timer_time; - } - num_timers++; - } - } -#if 0 - DBG(("end poll @%u, %d conns, %d timers (min %u), next in %d ms", - (unsigned int) (now * 1000), n, num_timers, - (unsigned int) (min_timer * 1000), timeout_ms)); -#endif - (void) timeout_ms; - return now; -} - -uint32_t mg_lwip_get_poll_delay_ms(struct mg_mgr *mgr) { - struct mg_connection *nc; - double now = mg_time(); - double min_timer = 0; - int num_timers = 0; - mg_ev_mgr_lwip_process_signals(mgr); - for (nc = mg_next(mgr, NULL); nc != NULL; nc = mg_next(mgr, nc)) { - if (nc->ev_timer_time > 0) { - if (num_timers == 0 || nc->ev_timer_time < min_timer) { - min_timer = nc->ev_timer_time; - } - num_timers++; - } - } - uint32_t timeout_ms = ~0; - if (num_timers > 0) { - double timer_timeout_ms = (min_timer - now) * 1000 + 1 /* rounding */; - if (timer_timeout_ms < timeout_ms) { - timeout_ms = timer_timeout_ms; - } - } - return timeout_ms; -} - -#endif /* MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/lwip/mg_lwip_ssl_if.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_SSL && MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL - -/* Amalgamated: #include "common/cs_dbg.h" */ - -#include -#include - -#ifndef MG_LWIP_SSL_IO_SIZE -#define MG_LWIP_SSL_IO_SIZE 1024 -#endif - -/* - * Stop processing incoming SSL traffic when recv_mbuf.size is this big. - * It'a a uick solution for SSL recv pushback. - */ -#ifndef MG_LWIP_SSL_RECV_MBUF_LIMIT -#define MG_LWIP_SSL_RECV_MBUF_LIMIT 3072 -#endif - -#ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -void mg_lwip_ssl_do_hs(struct mg_connection *nc) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - int server_side = (nc->listener != NULL); - enum mg_ssl_if_result res; - if (nc->flags & MG_F_CLOSE_IMMEDIATELY) return; - res = mg_ssl_if_handshake(nc); - DBG(("%p %d %d %d", nc, nc->flags, server_side, res)); - if (res != MG_SSL_OK) { - if (res == MG_SSL_WANT_WRITE) { - nc->flags |= MG_F_WANT_WRITE; - cs->err = 0; - } else if (res == MG_SSL_WANT_READ) { - /* - * Nothing to do in particular, we are callback-driven. - * What we definitely do not need anymore is SSL reading (nothing left). - */ - nc->flags &= ~MG_F_WANT_READ; - cs->err = 0; - } else { - cs->err = res; - if (server_side) { - mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); - } else { - mg_lwip_post_signal(MG_SIG_CONNECT_RESULT, nc); - } - } - } else { - cs->err = 0; - nc->flags &= ~MG_F_WANT_WRITE; - /* - * Handshake is done. Schedule a read immediately to consume app data - * which may already be waiting. - */ - nc->flags |= (MG_F_SSL_HANDSHAKE_DONE | MG_F_WANT_READ); - if (server_side) { - mg_lwip_accept_conn(nc, cs->pcb.tcp); - } else { - mg_lwip_post_signal(MG_SIG_CONNECT_RESULT, nc); - } - } -} - -void mg_lwip_ssl_send(struct mg_connection *nc) { - if (nc->sock == INVALID_SOCKET) { - DBG(("%p invalid socket", nc)); - return; - } - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - /* It's ok if the buffer is empty. Return value of 0 may also be valid. */ - int len = cs->last_ssl_write_size; - if (len == 0) { - len = MIN(MG_LWIP_SSL_IO_SIZE, nc->send_mbuf.len); - } - int ret = mg_ssl_if_write(nc, nc->send_mbuf.buf, len); - DBG(("%p SSL_write %u = %d, %d", nc, len, ret)); - if (ret > 0) { - mbuf_remove(&nc->send_mbuf, ret); - mbuf_trim(&nc->send_mbuf); - cs->last_ssl_write_size = 0; - } else if (ret < 0) { - /* This is tricky. We must remember the exact data we were sending to retry - * exactly the same send next time. */ - cs->last_ssl_write_size = len; - } - if (ret == len) { - nc->flags &= ~MG_F_WANT_WRITE; - } else if (ret == MG_SSL_WANT_WRITE) { - nc->flags |= MG_F_WANT_WRITE; - } else { - mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); - } -} - -void mg_lwip_ssl_recv(struct mg_connection *nc) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - /* Don't deliver data before connect callback */ - if (nc->flags & MG_F_CONNECTING) return; - while (nc->recv_mbuf.len < MG_LWIP_SSL_RECV_MBUF_LIMIT) { - char *buf = (char *) malloc(MG_LWIP_SSL_IO_SIZE); - if (buf == NULL) return; - int ret = mg_ssl_if_read(nc, buf, MG_LWIP_SSL_IO_SIZE); - DBG(("%p %p SSL_read %u = %d", nc, cs->rx_chain, MG_LWIP_SSL_IO_SIZE, ret)); - if (ret <= 0) { - free(buf); - if (ret == MG_SSL_WANT_WRITE) { - nc->flags |= MG_F_WANT_WRITE; - return; - } else if (ret == MG_SSL_WANT_READ) { - /* - * Nothing to do in particular, we are callback-driven. - * What we definitely do not need anymore is SSL reading (nothing left). - */ - nc->flags &= ~MG_F_WANT_READ; - cs->err = 0; - return; - } else { - mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); - return; - } - } else { - mg_if_recv_tcp_cb(nc, buf, ret, 1 /* own */); - } - } -} - -#ifdef KR_VERSION - -ssize_t kr_send(int fd, const void *buf, size_t len) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) fd; - int ret = mg_lwip_tcp_write(cs->nc, buf, len); - DBG(("%p mg_lwip_tcp_write %u = %d", cs->nc, len, ret)); - if (ret == 0) ret = KR_IO_WOULDBLOCK; - return ret; -} - -ssize_t kr_recv(int fd, void *buf, size_t len) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) fd; - struct pbuf *seg = cs->rx_chain; - if (seg == NULL) { - DBG(("%u - nothing to read", len)); - return KR_IO_WOULDBLOCK; - } - size_t seg_len = (seg->len - cs->rx_offset); - DBG(("%u %u %u %u", len, cs->rx_chain->len, seg_len, cs->rx_chain->tot_len)); - len = MIN(len, seg_len); - pbuf_copy_partial(seg, buf, len, cs->rx_offset); - cs->rx_offset += len; - tcp_recved(cs->pcb.tcp, len); - if (cs->rx_offset == cs->rx_chain->len) { - cs->rx_chain = pbuf_dechain(cs->rx_chain); - pbuf_free(seg); - cs->rx_offset = 0; - } - return len; -} - -#elif MG_SSL_IF == MG_SSL_IF_MBEDTLS - -int ssl_socket_send(void *ctx, const unsigned char *buf, size_t len) { - struct mg_connection *nc = (struct mg_connection *) ctx; - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - int ret = mg_lwip_tcp_write(cs->nc, buf, len); - LOG(LL_DEBUG, ("%p %d -> %d", nc, len, ret)); - if (ret == 0) ret = MBEDTLS_ERR_SSL_WANT_WRITE; - return ret; -} - -int ssl_socket_recv(void *ctx, unsigned char *buf, size_t len) { - struct mg_connection *nc = (struct mg_connection *) ctx; - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - struct pbuf *seg = cs->rx_chain; - if (seg == NULL) { - DBG(("%u - nothing to read", len)); - return MBEDTLS_ERR_SSL_WANT_READ; - } - size_t seg_len = (seg->len - cs->rx_offset); - DBG(("%u %u %u %u", len, cs->rx_chain->len, seg_len, cs->rx_chain->tot_len)); - len = MIN(len, seg_len); - pbuf_copy_partial(seg, buf, len, cs->rx_offset); - cs->rx_offset += len; - /* TCP PCB may be NULL if connection has already been closed - * but we still have data to deliver to SSL. */ - if (cs->pcb.tcp != NULL) tcp_recved(cs->pcb.tcp, len); - if (cs->rx_offset == cs->rx_chain->len) { - cs->rx_chain = pbuf_dechain(cs->rx_chain); - pbuf_free(seg); - cs->rx_offset = 0; - } - LOG(LL_DEBUG, ("%p <- %d", nc, (int) len)); - return len; -} - -#endif - -#endif /* MG_ENABLE_SSL && MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/wince/wince_libc.c" -#endif -/* - * Copyright (c) 2016 Cesanta Software Limited - * All rights reserved - */ - -#ifdef WINCE - -const char *strerror(int err) { - /* - * TODO(alashkin): there is no strerror on WinCE; - * look for similar wce_xxxx function - */ - static char buf[10]; - snprintf(buf, sizeof(buf), "%d", err); - return buf; -} - -int open(const char *filename, int oflag, int pmode) { - /* - * TODO(alashkin): mg_open function is not used in mongoose - * but exists in documentation as utility function - * Shall we delete it at all or implement for WinCE as well? - */ - DebugBreak(); - return 0; /* for compiler */ -} - -int _wstati64(const wchar_t *path, cs_stat_t *st) { - DWORD fa = GetFileAttributesW(path); - if (fa == INVALID_FILE_ATTRIBUTES) { - return -1; - } - memset(st, 0, sizeof(*st)); - if ((fa & FILE_ATTRIBUTE_DIRECTORY) == 0) { - HANDLE h; - FILETIME ftime; - st->st_mode |= _S_IFREG; - h = CreateFileW(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, NULL); - if (h == INVALID_HANDLE_VALUE) { - return -1; - } - st->st_size = GetFileSize(h, NULL); - GetFileTime(h, NULL, NULL, &ftime); - st->st_mtime = (uint32_t)((((uint64_t) ftime.dwLowDateTime + - ((uint64_t) ftime.dwHighDateTime << 32)) / - 10000000.0) - - 11644473600); - CloseHandle(h); - } else { - st->st_mode |= _S_IFDIR; - } - return 0; -} - -/* Windows CE doesn't have neither gmtime nor strftime */ -static void mg_gmt_time_string(char *buf, size_t buf_len, time_t *t) { - FILETIME ft; - SYSTEMTIME systime; - if (t != NULL) { - uint64_t filetime = (*t + 11644473600) * 10000000; - ft.dwLowDateTime = filetime & 0xFFFFFFFF; - ft.dwHighDateTime = (filetime & 0xFFFFFFFF00000000) >> 32; - FileTimeToSystemTime(&ft, &systime); - } else { - GetSystemTime(&systime); - } - /* There is no PRIu16 in WinCE SDK */ - snprintf(buf, buf_len, "%d.%d.%d %d:%d:%d GMT", (int) systime.wYear, - (int) systime.wMonth, (int) systime.wDay, (int) systime.wHour, - (int) systime.wMinute, (int) systime.wSecond); -} - -#endif -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/pic32/pic32_net_if.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PIC32_NET_IF_H_ -#define CS_COMMON_PLATFORMS_PIC32_NET_IF_H_ - -/* Amalgamated: #include "mongoose/src/net_if.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef MG_ENABLE_NET_IF_PIC32 -#define MG_ENABLE_NET_IF_PIC32 MG_NET_IF == MG_NET_IF_PIC32 -#endif - -extern struct mg_iface_vtable mg_pic32_iface_vtable; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_COMMON_PLATFORMS_PIC32_NET_IF_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/pic32/pic32_net_if.c" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#if MG_ENABLE_NET_IF_PIC32 - -int mg_pic32_if_create_conn(struct mg_connection *nc) { - (void) nc; - return 1; -} - -void mg_pic32_if_recved(struct mg_connection *nc, size_t len) { - (void) nc; - (void) len; -} - -void mg_pic32_if_add_conn(struct mg_connection *nc) { - (void) nc; -} - -void mg_pic32_if_init(struct mg_iface *iface) { - (void) iface; - (void) mg_get_errno(); /* Shutup compiler */ -} - -void mg_pic32_if_free(struct mg_iface *iface) { - (void) iface; -} - -void mg_pic32_if_remove_conn(struct mg_connection *nc) { - (void) nc; -} - -void mg_pic32_if_destroy_conn(struct mg_connection *nc) { - if (nc->sock == INVALID_SOCKET) return; - /* For UDP, only close outgoing sockets or listeners. */ - if (!(nc->flags & MG_F_UDP)) { - /* Close TCP */ - TCPIP_TCP_Close((TCP_SOCKET) nc->sock); - } else if (nc->listener == NULL) { - /* Only close outgoing UDP or listeners. */ - TCPIP_UDP_Close((UDP_SOCKET) nc->sock); - } - - nc->sock = INVALID_SOCKET; -} - -int mg_pic32_if_listen_udp(struct mg_connection *nc, union socket_address *sa) { - nc->sock = TCPIP_UDP_ServerOpen( - sa->sin.sin_family == AF_INET ? IP_ADDRESS_TYPE_IPV4 - : IP_ADDRESS_TYPE_IPV6, - ntohs(sa->sin.sin_port), - sa->sin.sin_addr.s_addr == 0 ? 0 : (IP_MULTI_ADDRESS *) &sa->sin); - if (nc->sock == INVALID_SOCKET) { - return -1; - } - return 0; -} - -void mg_pic32_if_udp_send(struct mg_connection *nc, const void *buf, - size_t len) { - mbuf_append(&nc->send_mbuf, buf, len); -} - -void mg_pic32_if_tcp_send(struct mg_connection *nc, const void *buf, - size_t len) { - mbuf_append(&nc->send_mbuf, buf, len); -} - -int mg_pic32_if_listen_tcp(struct mg_connection *nc, union socket_address *sa) { - nc->sock = TCPIP_TCP_ServerOpen( - sa->sin.sin_family == AF_INET ? IP_ADDRESS_TYPE_IPV4 - : IP_ADDRESS_TYPE_IPV6, - ntohs(sa->sin.sin_port), - sa->sin.sin_addr.s_addr == 0 ? 0 : (IP_MULTI_ADDRESS *) &sa->sin); - memcpy(&nc->sa, sa, sizeof(*sa)); - if (nc->sock == INVALID_SOCKET) { - return -1; - } - return 0; -} - -static int mg_accept_conn(struct mg_connection *lc) { - struct mg_connection *nc; - TCP_SOCKET_INFO si; - union socket_address sa; - - nc = mg_if_accept_new_conn(lc); - - if (nc == NULL) { - return 0; - } - - nc->sock = lc->sock; - nc->flags &= ~MG_F_LISTENING; - - if (!TCPIP_TCP_SocketInfoGet((TCP_SOCKET) nc->sock, &si)) { - return 0; - } - - if (si.addressType == IP_ADDRESS_TYPE_IPV4) { - sa.sin.sin_family = AF_INET; - sa.sin.sin_port = htons(si.remotePort); - sa.sin.sin_addr.s_addr = si.remoteIPaddress.v4Add.Val; - } else { - /* TODO(alashkin): do something with _potential_ IPv6 */ - memset(&sa, 0, sizeof(sa)); - } - - mg_if_accept_tcp_cb(nc, (union socket_address *) &sa, sizeof(sa)); - - return mg_pic32_if_listen_tcp(lc, &lc->sa) >= 0; -} - -char *inet_ntoa(struct in_addr in) { - static char addr[17]; - snprintf(addr, sizeof(addr), "%d.%d.%d.%d", (int) in.S_un.S_un_b.s_b1, - (int) in.S_un.S_un_b.s_b2, (int) in.S_un.S_un_b.s_b3, - (int) in.S_un.S_un_b.s_b4); - return addr; -} - -static void mg_handle_send(struct mg_connection *nc) { - uint16_t bytes_written = 0; - if (nc->flags & MG_F_UDP) { - if (!TCPIP_UDP_RemoteBind( - (UDP_SOCKET) nc->sock, - nc->sa.sin.sin_family == AF_INET ? IP_ADDRESS_TYPE_IPV4 - : IP_ADDRESS_TYPE_IPV6, - ntohs(nc->sa.sin.sin_port), (IP_MULTI_ADDRESS *) &nc->sa.sin)) { - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - return; - } - bytes_written = TCPIP_UDP_TxPutIsReady((UDP_SOCKET) nc->sock, 0); - if (bytes_written >= nc->send_mbuf.len) { - if (TCPIP_UDP_ArrayPut((UDP_SOCKET) nc->sock, - (uint8_t *) nc->send_mbuf.buf, - nc->send_mbuf.len) != nc->send_mbuf.len) { - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - bytes_written = 0; - } - } - } else { - bytes_written = TCPIP_TCP_FifoTxFreeGet((TCP_SOCKET) nc->sock); - if (bytes_written != 0) { - if (bytes_written > nc->send_mbuf.len) { - bytes_written = nc->send_mbuf.len; - } - if (TCPIP_TCP_ArrayPut((TCP_SOCKET) nc->sock, - (uint8_t *) nc->send_mbuf.buf, - bytes_written) != bytes_written) { - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - bytes_written = 0; - } - } - } - - if (bytes_written != 0) { - mbuf_remove(&nc->send_mbuf, bytes_written); - mg_if_sent_cb(nc, bytes_written); - } -} - -static void mg_handle_recv(struct mg_connection *nc) { - uint16_t bytes_read = 0; - uint8_t *buf = NULL; - if (nc->flags & MG_F_UDP) { - bytes_read = TCPIP_UDP_GetIsReady((UDP_SOCKET) nc->sock); - if (bytes_read != 0 && - (nc->recv_mbuf_limit == -1 || - nc->recv_mbuf.len + bytes_read < nc->recv_mbuf_limit)) { - buf = (uint8_t *) MG_MALLOC(bytes_read); - if (TCPIP_UDP_ArrayGet((UDP_SOCKET) nc->sock, buf, bytes_read) != - bytes_read) { - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - bytes_read = 0; - MG_FREE(buf); - } - } - } else { - bytes_read = TCPIP_TCP_GetIsReady((TCP_SOCKET) nc->sock); - if (bytes_read != 0) { - if (nc->recv_mbuf_limit != -1 && - nc->recv_mbuf_limit - nc->recv_mbuf.len > bytes_read) { - bytes_read = nc->recv_mbuf_limit - nc->recv_mbuf.len; - } - buf = (uint8_t *) MG_MALLOC(bytes_read); - if (TCPIP_TCP_ArrayGet((TCP_SOCKET) nc->sock, buf, bytes_read) != - bytes_read) { - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - MG_FREE(buf); - bytes_read = 0; - } - } - } - - if (bytes_read != 0) { - mg_if_recv_tcp_cb(nc, buf, bytes_read, 1 /* own */); - } -} - -time_t mg_pic32_if_poll(struct mg_iface *iface, int timeout_ms) { - struct mg_mgr *mgr = iface->mgr; - double now = mg_time(); - struct mg_connection *nc, *tmp; - - for (nc = mgr->active_connections; nc != NULL; nc = tmp) { - tmp = nc->next; - - if (nc->flags & MG_F_CONNECTING) { - /* processing connections */ - if (nc->flags & MG_F_UDP || - TCPIP_TCP_IsConnected((TCP_SOCKET) nc->sock)) { - mg_if_connect_cb(nc, 0); - } - } else if (nc->flags & MG_F_LISTENING) { - if (TCPIP_TCP_IsConnected((TCP_SOCKET) nc->sock)) { - /* accept new connections */ - mg_accept_conn(nc); - } - } else { - if (nc->send_mbuf.len != 0) { - mg_handle_send(nc); - } - - if (nc->recv_mbuf_limit == -1 || - nc->recv_mbuf.len < nc->recv_mbuf_limit) { - mg_handle_recv(nc); - } - } - } - - for (nc = mgr->active_connections; nc != NULL; nc = tmp) { - tmp = nc->next; - if ((nc->flags & MG_F_CLOSE_IMMEDIATELY) || - (nc->send_mbuf.len == 0 && (nc->flags & MG_F_SEND_AND_CLOSE))) { - mg_close_conn(nc); - } - } - - return now; -} - -void mg_pic32_if_sock_set(struct mg_connection *nc, sock_t sock) { - nc->sock = sock; -} - -void mg_pic32_if_get_conn_addr(struct mg_connection *nc, int remote, - union socket_address *sa) { - /* TODO(alaskin): not implemented yet */ -} - -void mg_pic32_if_connect_tcp(struct mg_connection *nc, - const union socket_address *sa) { - nc->sock = TCPIP_TCP_ClientOpen( - sa->sin.sin_family == AF_INET ? IP_ADDRESS_TYPE_IPV4 - : IP_ADDRESS_TYPE_IPV6, - ntohs(sa->sin.sin_port), (IP_MULTI_ADDRESS *) &sa->sin); - nc->err = (nc->sock == INVALID_SOCKET) ? -1 : 0; -} - -void mg_pic32_if_connect_udp(struct mg_connection *nc) { - nc->sock = TCPIP_UDP_ClientOpen(IP_ADDRESS_TYPE_ANY, 0, NULL); - nc->err = (nc->sock == INVALID_SOCKET) ? -1 : 0; -} - -/* clang-format off */ -#define MG_PIC32_IFACE_VTABLE \ - { \ - mg_pic32_if_init, \ - mg_pic32_if_free, \ - mg_pic32_if_add_conn, \ - mg_pic32_if_remove_conn, \ - mg_pic32_if_poll, \ - mg_pic32_if_listen_tcp, \ - mg_pic32_if_listen_udp, \ - mg_pic32_if_connect_tcp, \ - mg_pic32_if_connect_udp, \ - mg_pic32_if_tcp_send, \ - mg_pic32_if_udp_send, \ - mg_pic32_if_recved, \ - mg_pic32_if_create_conn, \ - mg_pic32_if_destroy_conn, \ - mg_pic32_if_sock_set, \ - mg_pic32_if_get_conn_addr, \ - } -/* clang-format on */ - -struct mg_iface_vtable mg_pic32_iface_vtable = MG_PIC32_IFACE_VTABLE; -#if MG_NET_IF == MG_NET_IF_PIC32 -struct mg_iface_vtable mg_default_iface_vtable = MG_PIC32_IFACE_VTABLE; -#endif - -#endif /* MG_ENABLE_NET_IF_PIC32 */ diff --git a/components/oap-wifi/mongoose.h b/components/oap-wifi/mongoose.h deleted file mode 100644 index 9c05d29..0000000 --- a/components/oap-wifi/mongoose.h +++ /dev/null @@ -1,5814 +0,0 @@ -//#define MG_ENABLE_DEBUG 1 - -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/common.h" -#endif -/* - * Copyright (c) 2004-2013 Sergey Lyubka - * Copyright (c) 2013-2015 Cesanta Software Limited - * All rights reserved - * - * This software is dual-licensed: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. For the terms of this - * license, see . - * - * You are free to use this software under the terms of the GNU General - * Public License, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * Alternatively, you can license this software under a commercial - * license, as set out in . - */ - -#ifndef CS_MONGOOSE_SRC_COMMON_H_ -#define CS_MONGOOSE_SRC_COMMON_H_ - -#define MG_VERSION "6.7" - -/* Local tweaks, applied before any of Mongoose's own headers. */ -#ifdef MG_LOCALS -#include -#endif - -#endif /* CS_MONGOOSE_SRC_COMMON_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platform.h" -#endif -#ifndef CS_COMMON_PLATFORM_H_ -#define CS_COMMON_PLATFORM_H_ - -/* - * For the "custom" platform, includes and dependencies can be - * provided through mg_locals.h. - */ -#define CS_P_CUSTOM 0 -#define CS_P_UNIX 1 -#define CS_P_WINDOWS 2 -#define CS_P_ESP32 15 -#define CS_P_ESP8266 3 -#define CS_P_CC3200 4 -#define CS_P_MSP432 5 -#define CS_P_CC3100 6 -#define CS_P_TM4C129 14 -#define CS_P_MBED 7 -#define CS_P_WINCE 8 -#define CS_P_NXP_LPC 13 -#define CS_P_NXP_KINETIS 9 -#define CS_P_NRF51 12 -#define CS_P_NRF52 10 -#define CS_P_PIC32 11 -#define CS_P_STM32 16 -/* Next id: 17 */ - -/* If not specified explicitly, we guess platform by defines. */ -#ifndef CS_PLATFORM - -#if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__) -#define CS_PLATFORM CS_P_MSP432 -#elif defined(cc3200) -#define CS_PLATFORM CS_P_CC3200 -#elif defined(__unix__) || defined(__APPLE__) -#define CS_PLATFORM CS_P_UNIX -#elif defined(WINCE) -#define CS_PLATFORM CS_P_WINCE -#elif defined(_WIN32) -#define CS_PLATFORM CS_P_WINDOWS -#elif defined(__MBED__) -#define CS_PLATFORM CS_P_MBED -#elif defined(__USE_LPCOPEN) -#define CS_PLATFORM CS_P_NXP_LPC -#elif defined(FRDM_K64F) || defined(FREEDOM) -#define CS_PLATFORM CS_P_NXP_KINETIS -#elif defined(PIC32) -#define CS_PLATFORM CS_P_PIC32 -#elif defined(ESP_PLATFORM) -#define CS_PLATFORM CS_P_ESP32 -#elif defined(ICACHE_FLASH) -#define CS_PLATFORM CS_P_ESP8266 -#elif defined(TARGET_IS_TM4C129_RA0) || defined(TARGET_IS_TM4C129_RA1) || \ - defined(TARGET_IS_TM4C129_RA2) -#define CS_PLATFORM CS_P_TM4C129 -#elif defined(STM32) -#define CS_PLATFORM CS_P_STM32 -#endif - -#ifndef CS_PLATFORM -#error "CS_PLATFORM is not specified and we couldn't guess it." -#endif - -#endif /* !defined(CS_PLATFORM) */ - -#define MG_NET_IF_SOCKET 1 -#define MG_NET_IF_SIMPLELINK 2 -#define MG_NET_IF_LWIP_LOW_LEVEL 3 -#define MG_NET_IF_PIC32 4 - -#define MG_SSL_IF_OPENSSL 1 -#define MG_SSL_IF_MBEDTLS 2 -#define MG_SSL_IF_SIMPLELINK 3 - -/* Amalgamated: #include "common/platforms/platform_unix.h" */ -/* Amalgamated: #include "common/platforms/platform_windows.h" */ -/* Amalgamated: #include "common/platforms/platform_esp32.h" */ -/* Amalgamated: #include "common/platforms/platform_esp8266.h" */ -/* Amalgamated: #include "common/platforms/platform_cc3200.h" */ -/* Amalgamated: #include "common/platforms/platform_cc3100.h" */ -/* Amalgamated: #include "common/platforms/platform_mbed.h" */ -/* Amalgamated: #include "common/platforms/platform_nrf51.h" */ -/* Amalgamated: #include "common/platforms/platform_nrf52.h" */ -/* Amalgamated: #include "common/platforms/platform_wince.h" */ -/* Amalgamated: #include "common/platforms/platform_nxp_lpc.h" */ -/* Amalgamated: #include "common/platforms/platform_nxp_kinetis.h" */ -/* Amalgamated: #include "common/platforms/platform_pic32.h" */ -/* Amalgamated: #include "common/platforms/platform_stm32.h" */ - -/* Common stuff */ - -#if !defined(WEAK) -#if (defined(__GNUC__) || defined(__TI_COMPILER_VERSION__)) && !defined(_WIN32) -#define WEAK __attribute__((weak)) -#else -#define WEAK -#endif -#endif - -#ifdef __GNUC__ -#define NORETURN __attribute__((noreturn)) -#define NOINLINE __attribute__((noinline)) -#define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#define NOINSTR __attribute__((no_instrument_function)) -#define DO_NOT_WARN_UNUSED __attribute__((unused)) -#else -#define NORETURN -#define NOINLINE -#define WARN_UNUSED_RESULT -#define NOINSTR -#define DO_NOT_WARN_UNUSED -#endif /* __GNUC__ */ - -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) -#endif - -#endif /* CS_COMMON_PLATFORM_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_windows.h" -#endif -#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ -#if CS_PLATFORM == CS_P_WINDOWS - -/* - * MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) - * MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) - * MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012) - * MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010) - * MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008) - * MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005) - * MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003) - * MSVC++ 7.0 _MSC_VER == 1300 - * MSVC++ 6.0 _MSC_VER == 1200 - * MSVC++ 5.0 _MSC_VER == 1100 - */ -#ifdef _MSC_VER -#pragma warning(disable : 4127) /* FD_SET() emits warning, disable it */ -#pragma warning(disable : 4204) /* missing c99 support */ -#endif - -#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS -#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 -#endif - -#ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef _MSC_VER -#pragma comment(lib, "ws2_32.lib") /* Linking with winsock library */ -#endif - -#include -#include -#include -#include - -#if defined(_MSC_VER) && _MSC_VER >= 1800 -#define strdup _strdup -#endif - -#ifndef EINPROGRESS -#define EINPROGRESS WSAEINPROGRESS -#endif -#ifndef EWOULDBLOCK -#define EWOULDBLOCK WSAEWOULDBLOCK -#endif -#ifndef __func__ -#define STRX(x) #x -#define STR(x) STRX(x) -#define __func__ __FILE__ ":" STR(__LINE__) -#endif -#define snprintf _snprintf -#define fileno _fileno -#define vsnprintf _vsnprintf -#define sleep(x) Sleep((x) *1000) -#define to64(x) _atoi64(x) -#if !defined(__MINGW32__) && !defined(__MINGW64__) -#define popen(x, y) _popen((x), (y)) -#define pclose(x) _pclose(x) -#endif -#define rmdir _rmdir -#if defined(_MSC_VER) && _MSC_VER >= 1400 -#define fseeko(x, y, z) _fseeki64((x), (y), (z)) -#else -#define fseeko(x, y, z) fseek((x), (y), (z)) -#endif -#if defined(_MSC_VER) && _MSC_VER <= 1200 -typedef unsigned long uintptr_t; -typedef long intptr_t; -#endif -typedef int socklen_t; -#if _MSC_VER >= 1700 -#include -#else -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef int int32_t; -typedef unsigned int uint32_t; -typedef short int16_t; -typedef unsigned short uint16_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#endif -typedef SOCKET sock_t; -typedef uint32_t in_addr_t; -#ifndef UINT16_MAX -#define UINT16_MAX 65535 -#endif -#ifndef UINT32_MAX -#define UINT32_MAX 4294967295 -#endif -#ifndef pid_t -#define pid_t HANDLE -#endif -#define INT64_FMT "I64d" -#define INT64_X_FMT "I64x" -#define SIZE_T_FMT "Iu" -typedef struct _stati64 cs_stat_t; -#ifndef S_ISDIR -#define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR) -#endif -#ifndef S_ISREG -#define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG) -#endif -#define DIRSEP '\\' -#define CS_DEFINE_DIRENT - -#ifndef va_copy -#ifdef __va_copy -#define va_copy __va_copy -#else -#define va_copy(x, y) (x) = (y) -#endif -#endif - -#ifndef MG_MAX_HTTP_REQUEST_SIZE -#define MG_MAX_HTTP_REQUEST_SIZE 8192 -#endif - -#ifndef MG_MAX_HTTP_SEND_MBUF -#define MG_MAX_HTTP_SEND_MBUF 4096 -#endif - -#ifndef MG_MAX_HTTP_HEADERS -#define MG_MAX_HTTP_HEADERS 40 -#endif - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#ifndef MG_ENABLE_BROADCAST -#define MG_ENABLE_BROADCAST 1 -#endif - -#ifndef MG_ENABLE_DIRECTORY_LISTING -#define MG_ENABLE_DIRECTORY_LISTING 1 -#endif - -#ifndef MG_ENABLE_FILESYSTEM -#define MG_ENABLE_FILESYSTEM 1 -#endif - -#ifndef MG_ENABLE_HTTP_CGI -#define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM -#endif - -#ifndef MG_NET_IF -#define MG_NET_IF MG_NET_IF_SOCKET -#endif - -#endif /* CS_PLATFORM == CS_P_WINDOWS */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_unix.h" -#endif -#ifndef CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ -#if CS_PLATFORM == CS_P_UNIX - -#ifndef _XOPEN_SOURCE -#define _XOPEN_SOURCE 600 -#endif - -/* wants this for C++ */ -#ifndef __STDC_FORMAT_MACROS -#define __STDC_FORMAT_MACROS -#endif - -/* C++ wants that for INT64_MAX */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS -#endif - -/* Enable fseeko() and ftello() functions */ -#ifndef _LARGEFILE_SOURCE -#define _LARGEFILE_SOURCE -#endif - -/* Enable 64-bit file offsets */ -#ifndef _FILE_OFFSET_BITS -#define _FILE_OFFSET_BITS 64 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __APPLE__ -#include -#ifndef BYTE_ORDER -#define LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN -#define BIG_ENDIAN __DARWIN_BIG_ENDIAN -#define PDP_ENDIAN __DARWIN_PDP_ENDIAN -#define BYTE_ORDER __DARWIN_BYTE_ORDER -#endif -#endif - -/* - * osx correctly avoids defining strtoll when compiling in strict ansi mode. - * c++ 11 standard defines strtoll as well. - * We require strtoll, and if your embedded pre-c99 compiler lacks one, please - * implement a shim. - */ -#if !(defined(__cplusplus) && __cplusplus >= 201103L) && \ - !(defined(__DARWIN_C_LEVEL) && __DARWIN_C_LEVEL >= 200809L) -long long strtoll(const char *, char **, int); -#endif - -typedef int sock_t; -#define INVALID_SOCKET (-1) -#define SIZE_T_FMT "zu" -typedef struct stat cs_stat_t; -#define DIRSEP '/' -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 - -#ifndef __cdecl -#define __cdecl -#endif - -#ifndef va_copy -#ifdef __va_copy -#define va_copy __va_copy -#else -#define va_copy(x, y) (x) = (y) -#endif -#endif - -#define closesocket(x) close(x) - -#ifndef MG_MAX_HTTP_REQUEST_SIZE -#define MG_MAX_HTTP_REQUEST_SIZE 8192 -#endif - -#ifndef MG_MAX_HTTP_SEND_MBUF -#define MG_MAX_HTTP_SEND_MBUF 4096 -#endif - -#ifndef MG_MAX_HTTP_HEADERS -#define MG_MAX_HTTP_HEADERS 40 -#endif - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#ifndef MG_ENABLE_BROADCAST -#define MG_ENABLE_BROADCAST 1 -#endif - -#ifndef MG_ENABLE_DIRECTORY_LISTING -#define MG_ENABLE_DIRECTORY_LISTING 1 -#endif - -#ifndef MG_ENABLE_FILESYSTEM -#define MG_ENABLE_FILESYSTEM 1 -#endif - -#ifndef MG_ENABLE_HTTP_CGI -#define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM -#endif - -#ifndef MG_NET_IF -#define MG_NET_IF MG_NET_IF_SOCKET -#endif - -#endif /* CS_PLATFORM == CS_P_UNIX */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_esp32.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_ -#if CS_PLATFORM == CS_P_ESP32 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define DIRSEP '/' -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 -#define __cdecl -#define _FILE_OFFSET_BITS 32 - -#define MG_LWIP 1 - -#ifndef MG_NET_IF -#define MG_NET_IF MG_NET_IF_SOCKET -#endif - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#endif /* CS_PLATFORM == CS_P_ESP32 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_esp8266.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_ -#if CS_PLATFORM == CS_P_ESP8266 - -#include -#include -#include -#include -#include -#include -#include -#include - -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define DIRSEP '/' -#define CS_DEFINE_DIRENT - -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 -#define __cdecl -#define _FILE_OFFSET_BITS 32 - -#ifndef RTOS_SDK -#define fileno(x) -1 -#endif - -#define MG_LWIP 1 - -/* struct timeval is defined in sys/time.h. */ -#define LWIP_TIMEVAL_PRIVATE 0 - -#ifndef MG_NET_IF -#include -#if LWIP_SOCKET /* RTOS SDK has LWIP sockets */ -# define MG_NET_IF MG_NET_IF_SOCKET -#else -# define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL -#endif -#endif - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#endif /* CS_PLATFORM == CS_P_ESP8266 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_cc3100.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_ -#if CS_PLATFORM == CS_P_CC3100 - -#include -#include -#include -#include -#include -#include -#include - -#define MG_NET_IF MG_NET_IF_SIMPLELINK -#define MG_SSL_IF MG_SSL_IF_SIMPLELINK - -/* - * CC3100 SDK and STM32 SDK include headers w/out path, just like - * #include "simplelink.h". As result, we have to add all required directories - * into Makefile IPATH and do the same thing (include w/out path) - */ - -#include -#include -#undef timeval - -typedef int sock_t; -#define INVALID_SOCKET (-1) - -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 -#define SIZE_T_FMT "u" - -#define SOMAXCONN 8 - -const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); -char *inet_ntoa(struct in_addr in); -int inet_pton(int af, const char *src, void *dst); - -#endif /* CS_PLATFORM == CS_P_CC3100 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_cc3200.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_ -#if CS_PLATFORM == CS_P_CC3200 - -#include -#include -#include -#include -#include -#include -#include - -#ifndef __TI_COMPILER_VERSION__ -#include -#include -#endif - -#define MG_NET_IF MG_NET_IF_SIMPLELINK -#define MG_SSL_IF MG_SSL_IF_SIMPLELINK - -/* Only SPIFFS supports directories, SLFS does not. */ -#if defined(CC3200_FS_SPIFFS) && !defined(MG_ENABLE_DIRECTORY_LISTING) -#define MG_ENABLE_DIRECTORY_LISTING 1 -#endif - -/* Amalgamated: #include "common/platforms/simplelink/cs_simplelink.h" */ - -typedef int sock_t; -#define INVALID_SOCKET (-1) -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define DIRSEP '/' -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 -#define __cdecl - -#define fileno(x) -1 - -/* Some functions we implement for Mongoose. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef __TI_COMPILER_VERSION__ -struct SlTimeval_t; -#define timeval SlTimeval_t -int gettimeofday(struct timeval *t, void *tz); - -int asprintf(char **strp, const char *fmt, ...); - -#endif - -/* TI's libc does not have stat & friends, add them. */ -#ifdef __TI_COMPILER_VERSION__ - -#include - -typedef unsigned int mode_t; -typedef size_t _off_t; -typedef long ssize_t; - -struct stat { - int st_ino; - mode_t st_mode; - int st_nlink; - time_t st_mtime; - off_t st_size; -}; - -int _stat(const char *pathname, struct stat *st); -#define stat(a, b) _stat(a, b) - -#define __S_IFMT 0170000 - -#define __S_IFDIR 0040000 -#define __S_IFCHR 0020000 -#define __S_IFREG 0100000 - -#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask)) - -#define S_IFDIR __S_IFDIR -#define S_IFCHR __S_IFCHR -#define S_IFREG __S_IFREG -#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) -#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) - -/* As of 5.2.7, TI compiler does not support va_copy() yet. */ -#define va_copy(apc, ap) ((apc) = (ap)) - -#endif /* __TI_COMPILER_VERSION__ */ - -#ifdef CC3200_FS_SLFS -#define MG_FS_SLFS -#endif - -#if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && \ - !defined(MG_ENABLE_FILESYSTEM) -#define MG_ENABLE_FILESYSTEM 1 -#define CS_DEFINE_DIRENT -#endif - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* CS_PLATFORM == CS_P_CC3200 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_msp432.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_ -#if CS_PLATFORM == CS_P_MSP432 - -#include -#include -#include -#include -#include -#include -#include - -#ifndef __TI_COMPILER_VERSION__ -#include -#include -#endif - -#define MG_NET_IF MG_NET_IF_SIMPLELINK -#define MG_SSL_IF MG_SSL_IF_SIMPLELINK - -/* Amalgamated: #include "common/platforms/simplelink/cs_simplelink.h" */ - -typedef int sock_t; -#define INVALID_SOCKET (-1) -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define DIRSEP '/' -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 -#define __cdecl - -#define fileno(x) -1 - -/* Some functions we implement for Mongoose. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef __TI_COMPILER_VERSION__ -struct SlTimeval_t; -#define timeval SlTimeval_t -int gettimeofday(struct timeval *t, void *tz); -#endif - -/* TI's libc does not have stat & friends, add them. */ -#ifdef __TI_COMPILER_VERSION__ - -#include - -typedef unsigned int mode_t; -typedef size_t _off_t; -typedef long ssize_t; - -struct stat { - int st_ino; - mode_t st_mode; - int st_nlink; - time_t st_mtime; - off_t st_size; -}; - -int _stat(const char *pathname, struct stat *st); -#define stat(a, b) _stat(a, b) - -#define __S_IFMT 0170000 - -#define __S_IFDIR 0040000 -#define __S_IFCHR 0020000 -#define __S_IFREG 0100000 - -#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask)) - -#define S_IFDIR __S_IFDIR -#define S_IFCHR __S_IFCHR -#define S_IFREG __S_IFREG -#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) -#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) - -/* As of 5.2.7, TI compiler does not support va_copy() yet. */ -#define va_copy(apc, ap) ((apc) = (ap)) - -#endif /* __TI_COMPILER_VERSION__ */ - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && !defined(MG_ENABLE_FILESYSTEM) -#define MG_ENABLE_FILESYSTEM 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* CS_PLATFORM == CS_P_MSP432 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_tm4c129.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_ -#if CS_PLATFORM == CS_P_TM4C129 - -#include -#include -#include -#include -#include -#include -#include - -#ifndef __TI_COMPILER_VERSION__ -#include -#include -#endif - -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define DIRSEP '/' -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 -#define __cdecl - -#ifndef MG_NET_IF -# include -# if LWIP_SOCKET -# define MG_NET_IF MG_NET_IF_SOCKET -# else -# define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL -# endif -# define MG_LWIP 1 -#elif MG_NET_IF == MG_NET_IF_SIMPLELINK -# include "common/platforms/simplelink/cs_simplelink.h" -#endif - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#ifdef __TI_COMPILER_VERSION__ -/* As of 5.2.8, TI compiler does not support va_copy() yet. */ -#define va_copy(apc, ap) ((apc) = (ap)) -#endif /* __TI_COMPILER_VERSION__ */ - -#ifdef __cplusplus -} -#endif - -#endif /* CS_PLATFORM == CS_P_TM4C129 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_mbed.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ -#if CS_PLATFORM == CS_P_MBED - -/* - * mbed.h contains C++ code (e.g. templates), thus, it should be processed - * only if included directly to startup file (ex: main.cpp) - */ -#ifdef __cplusplus -/* Amalgamated: #include "mbed.h" */ -#endif /* __cplusplus */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef struct stat cs_stat_t; -#define DIRSEP '/' - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -/* - * mbed can be compiled with the ARM compiler which - * just doesn't come with a gettimeofday shim - * because it's a BSD API and ARM targets embedded - * non-unix platforms. - */ -#if defined(__ARMCC_VERSION) || defined(__ICCARM__) -#define _TIMEVAL_DEFINED -#define gettimeofday _gettimeofday - -/* copied from GCC on ARM; for some reason useconds are signed */ -typedef long suseconds_t; /* microseconds (signed) */ -struct timeval { - time_t tv_sec; /* seconds */ - suseconds_t tv_usec; /* and microseconds */ -}; - -#endif - -#if MG_NET_IF == MG_NET_IF_SIMPLELINK - -#define MG_SIMPLELINK_NO_OSI 1 - -#include - -typedef int sock_t; -#define INVALID_SOCKET (-1) - -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define INT64_X_FMT PRIx64 -#define SIZE_T_FMT "u" - -#define SOMAXCONN 8 - -const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); -char *inet_ntoa(struct in_addr in); -int inet_pton(int af, const char *src, void *dst); -int inet_aton(const char *cp, struct in_addr *inp); -in_addr_t inet_addr(const char *cp); - -#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK */ - -#endif /* CS_PLATFORM == CS_P_MBED */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_nrf51.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ -#ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ -#if CS_PLATFORM == CS_P_NRF51 - -#include -#include -#include -#include -#include -#include - -#define to64(x) strtoll(x, NULL, 10) - -#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL -#define MG_LWIP 1 -#define MG_ENABLE_IPV6 1 - -/* - * For ARM C Compiler, make lwip to export `struct timeval`; for other - * compilers, suppress it. - */ -#if !defined(__ARMCC_VERSION) -# define LWIP_TIMEVAL_PRIVATE 0 -#else -struct timeval; -int gettimeofday(struct timeval *tp, void *tzp); -#endif - -#define INT64_FMT PRId64 -#define SIZE_T_FMT "u" - -/* - * ARM C Compiler doesn't have strdup, so we provide it - */ -#define CS_ENABLE_STRDUP defined(__ARMCC_VERSION) - -#endif /* CS_PLATFORM == CS_P_NRF51 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_nrf52.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ -#ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_ -#if CS_PLATFORM == CS_P_NRF52 - -#include -#include -#include -#include -#include -#include -#include - -#define to64(x) strtoll(x, NULL, 10) - -#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL -#define MG_LWIP 1 -#define MG_ENABLE_IPV6 1 - -#if !defined(ENOSPC) -# define ENOSPC 28 /* No space left on device */ -#endif - -/* - * For ARM C Compiler, make lwip to export `struct timeval`; for other - * compilers, suppress it. - */ -#if !defined(__ARMCC_VERSION) -# define LWIP_TIMEVAL_PRIVATE 0 -#endif - -#define INT64_FMT PRId64 -#define SIZE_T_FMT "u" - -/* - * ARM C Compiler doesn't have strdup, so we provide it - */ -#define CS_ENABLE_STRDUP defined(__ARMCC_VERSION) - -#endif /* CS_PLATFORM == CS_P_NRF52 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/simplelink/cs_simplelink.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ -#define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ - -/* If simplelink.h is already included, all bets are off. */ -#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK && \ - !defined(__SIMPLELINK_H__) - -#include - -#ifndef __TI_COMPILER_VERSION__ -#undef __CONCAT -#undef FD_CLR -#undef FD_ISSET -#undef FD_SET -#undef FD_SETSIZE -#undef FD_ZERO -#undef fd_set -#endif - -/* We want to disable SL_INC_STD_BSD_API_NAMING, so we include user.h ourselves - * and undef it. */ -#define PROVISIONING_API_H_ -#include -#undef PROVISIONING_API_H_ -#undef SL_INC_STD_BSD_API_NAMING - -#include -#include - -/* Now define only the subset of the BSD API that we use. - * Notably, close(), read() and write() are not defined. */ -#define AF_INET SL_AF_INET - -#define socklen_t SlSocklen_t -#define sockaddr SlSockAddr_t -#define sockaddr_in SlSockAddrIn_t -#define in_addr SlInAddr_t - -#define SOCK_STREAM SL_SOCK_STREAM -#define SOCK_DGRAM SL_SOCK_DGRAM - -#define htonl sl_Htonl -#define ntohl sl_Ntohl -#define htons sl_Htons -#define ntohs sl_Ntohs - -#ifndef EACCES -#define EACCES SL_EACCES -#endif -#ifndef EAFNOSUPPORT -#define EAFNOSUPPORT SL_EAFNOSUPPORT -#endif -#ifndef EAGAIN -#define EAGAIN SL_EAGAIN -#endif -#ifndef EBADF -#define EBADF SL_EBADF -#endif -#ifndef EINVAL -#define EINVAL SL_EINVAL -#endif -#ifndef ENOMEM -#define ENOMEM SL_ENOMEM -#endif -#ifndef EWOULDBLOCK -#define EWOULDBLOCK SL_EWOULDBLOCK -#endif - -#define SOMAXCONN 8 - -#ifdef __cplusplus -extern "C" { -#endif - -const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); -char *inet_ntoa(struct in_addr in); -int inet_pton(int af, const char *src, void *dst); - -struct mg_mgr; -struct mg_connection; - -typedef void (*mg_init_cb)(struct mg_mgr *mgr); -bool mg_start_task(int priority, int stack_size, mg_init_cb mg_init); - -void mg_run_in_task(void (*cb)(struct mg_mgr *mgr, void *arg), void *cb_arg); - -int sl_fs_init(void); - -void sl_restart_cb(struct mg_mgr *mgr); - -int sl_set_ssl_opts(struct mg_connection *nc); - -#ifdef __cplusplus -} -#endif - -#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK && !defined(__SIMPLELINK_H__) */ - -#endif /* CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_wince.h" -#endif -#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_ - -#if CS_PLATFORM == CS_P_WINCE - -/* - * MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) - * MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) - * MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012) - * MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010) - * MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008) - * MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005) - * MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003) - * MSVC++ 7.0 _MSC_VER == 1300 - * MSVC++ 6.0 _MSC_VER == 1200 - * MSVC++ 5.0 _MSC_VER == 1100 - */ -#pragma warning(disable : 4127) /* FD_SET() emits warning, disable it */ -#pragma warning(disable : 4204) /* missing c99 support */ - -#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS -#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 -#endif - -#ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include -#include -#include -#include -#include -#include - -#pragma comment(lib, "ws2.lib") /* Linking with WinCE winsock library */ - -#include -#include -#include - -#define strdup _strdup - -#ifndef EINPROGRESS -#define EINPROGRESS WSAEINPROGRESS -#endif - -#ifndef EWOULDBLOCK -#define EWOULDBLOCK WSAEWOULDBLOCK -#endif - -#ifndef __func__ -#define STRX(x) #x -#define STR(x) STRX(x) -#define __func__ __FILE__ ":" STR(__LINE__) -#endif - -#define snprintf _snprintf -#define fileno _fileno -#define vsnprintf _vsnprintf -#define sleep(x) Sleep((x) *1000) -#define to64(x) _atoi64(x) -#define rmdir _rmdir - -#if defined(_MSC_VER) && _MSC_VER >= 1400 -#define fseeko(x, y, z) _fseeki64((x), (y), (z)) -#else -#define fseeko(x, y, z) fseek((x), (y), (z)) -#endif - -typedef int socklen_t; - -#if _MSC_VER >= 1700 -#include -#else -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef int int32_t; -typedef unsigned int uint32_t; -typedef short int16_t; -typedef unsigned short uint16_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#endif - -typedef SOCKET sock_t; -typedef uint32_t in_addr_t; - -#ifndef UINT16_MAX -#define UINT16_MAX 65535 -#endif - -#ifndef UINT32_MAX -#define UINT32_MAX 4294967295 -#endif - -#ifndef pid_t -#define pid_t HANDLE -#endif - -#define INT64_FMT "I64d" -#define INT64_X_FMT "I64x" -/* TODO(alashkin): check if this is correct */ -#define SIZE_T_FMT "u" - -#define DIRSEP '\\' -#define CS_DEFINE_DIRENT - -#ifndef va_copy -#ifdef __va_copy -#define va_copy __va_copy -#else -#define va_copy(x, y) (x) = (y) -#endif -#endif - -#ifndef MG_MAX_HTTP_REQUEST_SIZE -#define MG_MAX_HTTP_REQUEST_SIZE 8192 -#endif - -#ifndef MG_MAX_HTTP_SEND_MBUF -#define MG_MAX_HTTP_SEND_MBUF 4096 -#endif - -#ifndef MG_MAX_HTTP_HEADERS -#define MG_MAX_HTTP_HEADERS 40 -#endif - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#define abort() DebugBreak(); - -#ifndef BUFSIZ -#define BUFSIZ 4096 -#endif -/* - * Explicitly disabling MG_ENABLE_THREADS for WinCE - * because they are enabled for _WIN32 by default - */ -#ifndef MG_ENABLE_THREADS -#define MG_ENABLE_THREADS 0 -#endif - -#ifndef MG_ENABLE_FILESYSTEM -#define MG_ENABLE_FILESYSTEM 1 -#endif - -#ifndef MG_NET_IF -#define MG_NET_IF MG_NET_IF_SOCKET -#endif - -typedef struct _stati64 { - uint32_t st_mtime; - uint32_t st_size; - uint32_t st_mode; -} cs_stat_t; - -/* - * WinCE 6.0 has a lot of useful definitions in ATL (not windows.h) headers - * use #ifdefs to avoid conflicts - */ - -#ifndef ENOENT -#define ENOENT ERROR_PATH_NOT_FOUND -#endif - -#ifndef EACCES -#define EACCES ERROR_ACCESS_DENIED -#endif - -#ifndef ENOMEM -#define ENOMEM ERROR_NOT_ENOUGH_MEMORY -#endif - -#ifndef _UINTPTR_T_DEFINED -typedef unsigned int* uintptr_t; -#endif - -#define _S_IFREG 2 -#define _S_IFDIR 4 - -#ifndef S_ISDIR -#define S_ISDIR(x) (((x) & _S_IFDIR) != 0) -#endif - -#ifndef S_ISREG -#define S_ISREG(x) (((x) & _S_IFREG) != 0) -#endif - -int open(const char *filename, int oflag, int pmode); -int _wstati64(const wchar_t *path, cs_stat_t *st); -const char *strerror(); - -#endif /* CS_PLATFORM == CS_P_WINCE */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_nxp_lpc.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_ - -#if CS_PLATFORM == CS_P_NXP_LPC - -#include -#include -#include - -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define INT64_FMT "lld" -#define INT64_X_FMT "llx" -#define __cdecl - -#define MG_LWIP 1 - -#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL - -/* - * LPCXpress comes with 3 C library implementations: Newlib, NewlibNano and Redlib. - * See https://community.nxp.com/message/630860 for more details. - * - * Redlib is the default and lacks certain things, so we provide them. - */ -#ifdef __REDLIB_INTERFACE_VERSION__ - -/* Let LWIP define timeval for us. */ -#define LWIP_TIMEVAL_PRIVATE 1 - -#define va_copy(d, s) __builtin_va_copy(d, s) - -#define CS_ENABLE_TO64 1 -#define to64(x) cs_to64(x) - -#define CS_ENABLE_STRDUP 1 - -#else - -#include -#define LWIP_TIMEVAL_PRIVATE 0 -#define to64(x) strtoll(x, NULL, 10) - -#endif - -#endif /* CS_PLATFORM == CS_P_NXP_LPC */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_nxp_kinetis.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_ - -#if CS_PLATFORM == CS_P_NXP_KINETIS - -#include -#include -#include -#include - -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT "lld" -#define INT64_X_FMT "llx" -#define __cdecl - -#define MG_LWIP 1 - -#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL - -/* struct timeval is defined in sys/time.h. */ -#define LWIP_TIMEVAL_PRIVATE 0 - -#endif /* CS_PLATFORM == CS_P_NXP_KINETIS */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_pic32.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_ - -#if CS_PLATFORM == CS_P_PIC32 - -#define MG_NET_IF MG_NET_IF_PIC32 - -#include -#include -#include -#include - -#include -#include - -#include - -typedef TCP_SOCKET sock_t; -#define to64(x) strtoll(x, NULL, 10) - -#define SIZE_T_FMT "lu" -#define INT64_FMT "lld" - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -char* inet_ntoa(struct in_addr in); - -#endif /* CS_PLATFORM == CS_P_PIC32 */ - -#endif /* CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/platform_stm32.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_PLATFORM_STM32_H_ -#define CS_COMMON_PLATFORMS_PLATFORM_STM32_H_ -#if CS_PLATFORM == CS_P_STM32 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 -#define SIZE_T_FMT "u" -typedef struct stat cs_stat_t; -#define DIRSEP '/' - -#ifndef CS_ENABLE_STDIO -#define CS_ENABLE_STDIO 1 -#endif - -#ifndef MG_ENABLE_FILESYSTEM -#define MG_ENABLE_FILESYSTEM 1 -#endif - -#define CS_DEFINE_DIRENT - -#endif /* CS_PLATFORM == CS_P_STM32 */ -#endif /* CS_COMMON_PLATFORMS_PLATFORM_STM32_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/platforms/lwip/mg_lwip.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_ -#define CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_ - -#ifndef MG_LWIP -#define MG_LWIP 0 -#endif - -#if MG_LWIP - -/* - * When compiling for nRF5x chips with arm-none-eabi-gcc, it has BYTE_ORDER - * already defined, so in order to avoid warnings in lwip, we have to undefine - * it. - * - * TODO: Check if in the future versions of nRF5 SDK that changes. - * Current version of nRF51 SDK: 0.8.0 - * nRF5 SDK: 0.9.0 - */ -#if CS_PLATFORM == CS_P_NRF51 || CS_PLATFORM == CS_P_NRF52 -#undef BYTE_ORDER -#endif - -#include -#include -#include -#include -#include -#include - -#ifndef LWIP_PROVIDE_ERRNO -#include -#endif - -#if LWIP_SOCKET -#include -#else -/* We really need the definitions from sockets.h. */ -#undef LWIP_SOCKET -#define LWIP_SOCKET 1 -#include -#undef LWIP_SOCKET -#define LWIP_SOCKET 0 -#endif - -#define INVALID_SOCKET (-1) -#define SOMAXCONN 10 -typedef int sock_t; - -#if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL -struct mg_mgr; -struct mg_connection; -uint32_t mg_lwip_get_poll_delay_ms(struct mg_mgr *mgr); -void mg_lwip_set_keepalive_params(struct mg_connection *nc, int idle, - int interval, int count); -#endif - -#endif /* MG_LWIP */ - -#endif /* CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/cs_time.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_CS_TIME_H_ -#define CS_COMMON_CS_TIME_H_ - -/* Amalgamated: #include "common/platform.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Sub-second granularity time(). */ -double cs_time(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_COMMON_CS_TIME_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/mg_str.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_MG_STR_H_ -#define CS_COMMON_MG_STR_H_ - -#include - -/* Amalgamated: #include "common/platform.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Describes chunk of memory */ -struct mg_str { - const char *p; /* Memory chunk pointer */ - size_t len; /* Memory chunk length */ -}; - -/* - * Helper functions for creating mg_str struct from plain C string. - * `NULL` is allowed and becomes `{NULL, 0}`. - */ -struct mg_str mg_mk_str(const char *s); -struct mg_str mg_mk_str_n(const char *s, size_t len); - -/* Macro for initializing mg_str. */ -#define MG_MK_STR(str_literal) \ - { str_literal, sizeof(str_literal) - 1 } - -/* - * Cross-platform version of `strcmp()` where where first string is - * specified by `struct mg_str`. - */ -int mg_vcmp(const struct mg_str *str2, const char *str1); - -/* - * Cross-platform version of `strncasecmp()` where first string is - * specified by `struct mg_str`. - */ -int mg_vcasecmp(const struct mg_str *str2, const char *str1); - -struct mg_str mg_strdup(const struct mg_str s); -int mg_strcmp(const struct mg_str str1, const struct mg_str str2); -int mg_strncmp(const struct mg_str str1, const struct mg_str str2, size_t n); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_COMMON_MG_STR_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/mbuf.h" -#endif -/* - * Copyright (c) 2015 Cesanta Software Limited - * All rights reserved - */ - -/* - * === Memory Buffers - * - * Mbufs are mutable/growing memory buffers, like C++ strings. - * Mbuf can append data to the end of a buffer or insert data into arbitrary - * position in the middle of a buffer. The buffer grows automatically when - * needed. - */ - -#ifndef CS_COMMON_MBUF_H_ -#define CS_COMMON_MBUF_H_ - -#include -/* Amalgamated: #include "common/platform.h" */ - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef MBUF_SIZE_MULTIPLIER -#define MBUF_SIZE_MULTIPLIER 1.5 -#endif - -/* Memory buffer descriptor */ -struct mbuf { - char *buf; /* Buffer pointer */ - size_t len; /* Data length. Data is located between offset 0 and len. */ - size_t size; /* Buffer size allocated by realloc(1). Must be >= len */ -}; - -/* - * Initialises an Mbuf. - * `initial_capacity` specifies the initial capacity of the mbuf. - */ -void mbuf_init(struct mbuf *, size_t initial_capacity); - -/* Frees the space allocated for the mbuffer and resets the mbuf structure. */ -void mbuf_free(struct mbuf *); - -/* - * Appends data to the Mbuf. - * - * Returns the number of bytes appended or 0 if out of memory. - */ -size_t mbuf_append(struct mbuf *, const void *data, size_t data_size); - -/* - * Inserts data at a specified offset in the Mbuf. - * - * Existing data will be shifted forwards and the buffer will - * be grown if necessary. - * Returns the number of bytes inserted. - */ -size_t mbuf_insert(struct mbuf *, size_t, const void *, size_t); - -/* Removes `data_size` bytes from the beginning of the buffer. */ -void mbuf_remove(struct mbuf *, size_t data_size); - -/* - * Resizes an Mbuf. - * - * If `new_size` is smaller than buffer's `len`, the - * resize is not performed. - */ -void mbuf_resize(struct mbuf *, size_t new_size); - -/* Shrinks an Mbuf by resizing its `size` to `len`. */ -void mbuf_trim(struct mbuf *); - -#if defined(__cplusplus) -} -#endif /* __cplusplus */ - -#endif /* CS_COMMON_MBUF_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/sha1.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_SHA1_H_ -#define CS_COMMON_SHA1_H_ - -#ifndef DISABLE_SHA1 -#define DISABLE_SHA1 0 -#endif - -#if !DISABLE_SHA1 - -/* Amalgamated: #include "common/platform.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -typedef struct { - uint32_t state[5]; - uint32_t count[2]; - unsigned char buffer[64]; -} cs_sha1_ctx; - -void cs_sha1_init(cs_sha1_ctx *); -void cs_sha1_update(cs_sha1_ctx *, const unsigned char *data, uint32_t len); -void cs_sha1_final(unsigned char digest[20], cs_sha1_ctx *); -void cs_hmac_sha1(const unsigned char *key, size_t key_len, - const unsigned char *text, size_t text_len, - unsigned char out[20]); -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* DISABLE_SHA1 */ - -#endif /* CS_COMMON_SHA1_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/md5.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_MD5_H_ -#define CS_COMMON_MD5_H_ - -/* Amalgamated: #include "common/platform.h" */ - -#ifndef DISABLE_MD5 -#define DISABLE_MD5 0 -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -typedef struct MD5Context { - uint32_t buf[4]; - uint32_t bits[2]; - unsigned char in[64]; -} MD5_CTX; - -void MD5_Init(MD5_CTX *c); -void MD5_Update(MD5_CTX *c, const unsigned char *data, size_t len); -void MD5_Final(unsigned char *md, MD5_CTX *c); - -/* - * Return stringified MD5 hash for NULL terminated list of pointer/length pairs. - * A length should be specified as size_t variable. - * Example: - * - * char buf[33]; - * cs_md5(buf, "foo", (size_t) 3, "bar", (size_t) 3, NULL); - */ -char *cs_md5(char buf[33], ...); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_COMMON_MD5_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/base64.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_BASE64_H_ -#define CS_COMMON_BASE64_H_ - -#ifndef DISABLE_BASE64 -#define DISABLE_BASE64 0 -#endif - -#if !DISABLE_BASE64 - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*cs_base64_putc_t)(char, void *); - -struct cs_base64_ctx { - /* cannot call it putc because it's a macro on some environments */ - cs_base64_putc_t b64_putc; - unsigned char chunk[3]; - int chunk_size; - void *user_data; -}; - -void cs_base64_init(struct cs_base64_ctx *ctx, cs_base64_putc_t putc, - void *user_data); -void cs_base64_update(struct cs_base64_ctx *ctx, const char *str, size_t len); -void cs_base64_finish(struct cs_base64_ctx *ctx); - -void cs_base64_encode(const unsigned char *src, int src_len, char *dst); -void cs_fprint_base64(FILE *f, const unsigned char *src, int src_len); -int cs_base64_decode(const unsigned char *s, int len, char *dst, int *dec_len); - -#ifdef __cplusplus -} -#endif - -#endif /* DISABLE_BASE64 */ - -#endif /* CS_COMMON_BASE64_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/str_util.h" -#endif -/* - * Copyright (c) 2015 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_COMMON_STR_UTIL_H_ -#define CS_COMMON_STR_UTIL_H_ - -#include -#include - -/* Amalgamated: #include "common/platform.h" */ - -#ifndef CS_ENABLE_STRDUP -#define CS_ENABLE_STRDUP 0 -#endif - -#ifndef CS_ENABLE_TO64 -#define CS_ENABLE_TO64 0 -#endif - -/* - * Expands to a string representation of its argument: e.g. - * `CS_STRINGIFY_LIT(5) expands to "5"` - */ -#define CS_STRINGIFY_LIT(x) #x - -/* - * Expands to a string representation of its argument, which is allowed - * to be a macro: e.g. - * - * #define FOO 123 - * CS_STRINGIFY_MACRO(FOO) - * - * expands to 123. - */ -#define CS_STRINGIFY_MACRO(x) CS_STRINGIFY_LIT(x) - -#ifdef __cplusplus -extern "C" { -#endif - -size_t c_strnlen(const char *s, size_t maxlen); -int c_snprintf(char *buf, size_t buf_size, const char *format, ...); -int c_vsnprintf(char *buf, size_t buf_size, const char *format, va_list ap); -/* - * Find the first occurrence of find in s, where the search is limited to the - * first slen characters of s. - */ -const char *c_strnstr(const char *s, const char *find, size_t slen); - -/* - * Stringify binary data. Output buffer size must be 2 * size_of_input + 1 - * because each byte of input takes 2 bytes in string representation - * plus 1 byte for the terminating \0 character. - */ -void cs_to_hex(char *to, const unsigned char *p, size_t len); - -/* - * Convert stringified binary data back to binary. - * Does the reverse of `cs_to_hex()`. - */ -void cs_from_hex(char *to, const char *p, size_t len); - -#if CS_ENABLE_STRDUP -char *strdup(const char *src); -#endif - -#if CS_ENABLE_TO64 -#include -/* - * Simple string -> int64 conversion routine. - */ -int64_t cs_to64(const char *s); -#endif - -/* - * Cross-platform version of `strncasecmp()`. - */ -int mg_ncasecmp(const char *s1, const char *s2, size_t len); - -/* - * Cross-platform version of `strcasecmp()`. - */ -int mg_casecmp(const char *s1, const char *s2); - -/* - * Prints message to the buffer. If the buffer is large enough to hold the - * message, it returns buffer. If buffer is to small, it allocates a large - * enough buffer on heap and returns allocated buffer. - * This is a supposed use case: - * - * char buf[5], *p = buf; - * mg_avprintf(&p, sizeof(buf), "%s", "hi there"); - * use_p_somehow(p); - * if (p != buf) { - * free(p); - * } - * - * The purpose of this is to avoid malloc-ing if generated strings are small. - */ -int mg_asprintf(char **buf, size_t size, const char *fmt, ...); - -/* Same as mg_asprintf, but takes varargs list. */ -int mg_avprintf(char **buf, size_t size, const char *fmt, va_list ap); - -#ifdef __cplusplus -} -#endif - -#endif /* CS_COMMON_STR_UTIL_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "common/queue.h" -#endif -/* clang-format off */ -/*- - * Copyright (c) 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)queue.h 8.5 (Berkeley) 8/20/94 - * $FreeBSD$ - */ - -#ifndef _SYS_QUEUE_H_ -#define _SYS_QUEUE_H_ - -/* - * This file defines four types of data structures: singly-linked lists, - * singly-linked tail queues, lists and tail queues. - * - * A singly-linked list is headed by a single forward pointer. The elements - * are singly linked for minimum space and pointer manipulation overhead at - * the expense of O(n) removal for arbitrary elements. New elements can be - * added to the list after an existing element or at the head of the list. - * Elements being removed from the head of the list should use the explicit - * macro for this purpose for optimum efficiency. A singly-linked list may - * only be traversed in the forward direction. Singly-linked lists are ideal - * for applications with large datasets and few or no removals or for - * implementing a LIFO queue. - * - * A singly-linked tail queue is headed by a pair of pointers, one to the - * head of the list and the other to the tail of the list. The elements are - * singly linked for minimum space and pointer manipulation overhead at the - * expense of O(n) removal for arbitrary elements. New elements can be added - * to the list after an existing element, at the head of the list, or at the - * end of the list. Elements being removed from the head of the tail queue - * should use the explicit macro for this purpose for optimum efficiency. - * A singly-linked tail queue may only be traversed in the forward direction. - * Singly-linked tail queues are ideal for applications with large datasets - * and few or no removals or for implementing a FIFO queue. - * - * A list is headed by a single forward pointer (or an array of forward - * pointers for a hash table header). The elements are doubly linked - * so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before - * or after an existing element or at the head of the list. A list - * may be traversed in either direction. - * - * A tail queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or - * after an existing element, at the head of the list, or at the end of - * the list. A tail queue may be traversed in either direction. - * - * For details on the use of these macros, see the queue(3) manual page. - * - * - * SLIST LIST STAILQ TAILQ - * _HEAD + + + + - * _CLASS_HEAD + + + + - * _HEAD_INITIALIZER + + + + - * _ENTRY + + + + - * _CLASS_ENTRY + + + + - * _INIT + + + + - * _EMPTY + + + + - * _FIRST + + + + - * _NEXT + + + + - * _PREV - + - + - * _LAST - - + + - * _FOREACH + + + + - * _FOREACH_FROM + + + + - * _FOREACH_SAFE + + + + - * _FOREACH_FROM_SAFE + + + + - * _FOREACH_REVERSE - - - + - * _FOREACH_REVERSE_FROM - - - + - * _FOREACH_REVERSE_SAFE - - - + - * _FOREACH_REVERSE_FROM_SAFE - - - + - * _INSERT_HEAD + + + + - * _INSERT_BEFORE - + - + - * _INSERT_AFTER + + + + - * _INSERT_TAIL - - + + - * _CONCAT - - + + - * _REMOVE_AFTER + - + - - * _REMOVE_HEAD + - + - - * _REMOVE + + + + - * _SWAP + + + + - * - */ -#ifdef QUEUE_MACRO_DEBUG -/* Store the last 2 places the queue element or head was altered */ -struct qm_trace { - unsigned long lastline; - unsigned long prevline; - const char *lastfile; - const char *prevfile; -}; - -#define TRACEBUF struct qm_trace trace; -#define TRACEBUF_INITIALIZER { __LINE__, 0, __FILE__, NULL } , -#define TRASHIT(x) do {(x) = (void *)-1;} while (0) -#define QMD_SAVELINK(name, link) void **name = (void *)&(link) - -#define QMD_TRACE_HEAD(head) do { \ - (head)->trace.prevline = (head)->trace.lastline; \ - (head)->trace.prevfile = (head)->trace.lastfile; \ - (head)->trace.lastline = __LINE__; \ - (head)->trace.lastfile = __FILE__; \ -} while (0) - -#define QMD_TRACE_ELEM(elem) do { \ - (elem)->trace.prevline = (elem)->trace.lastline; \ - (elem)->trace.prevfile = (elem)->trace.lastfile; \ - (elem)->trace.lastline = __LINE__; \ - (elem)->trace.lastfile = __FILE__; \ -} while (0) - -#else -#define QMD_TRACE_ELEM(elem) -#define QMD_TRACE_HEAD(head) -#define QMD_SAVELINK(name, link) -#define TRACEBUF -#define TRACEBUF_INITIALIZER -#define TRASHIT(x) -#endif /* QUEUE_MACRO_DEBUG */ - -#ifdef __cplusplus -/* - * In C++ there can be structure lists and class lists: - */ -#define QUEUE_TYPEOF(type) type -#else -#define QUEUE_TYPEOF(type) struct type -#endif - -/* - * Singly-linked List declarations. - */ -#define SLIST_HEAD(name, type) \ -struct name { \ - struct type *slh_first; /* first element */ \ -} - -#define SLIST_CLASS_HEAD(name, type) \ -struct name { \ - class type *slh_first; /* first element */ \ -} - -#define SLIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define SLIST_ENTRY(type) \ -struct { \ - struct type *sle_next; /* next element */ \ -} - -#define SLIST_CLASS_ENTRY(type) \ -struct { \ - class type *sle_next; /* next element */ \ -} - -/* - * Singly-linked List functions. - */ -#define SLIST_EMPTY(head) ((head)->slh_first == NULL) - -#define SLIST_FIRST(head) ((head)->slh_first) - -#define SLIST_FOREACH(var, head, field) \ - for ((var) = SLIST_FIRST((head)); \ - (var); \ - (var) = SLIST_NEXT((var), field)) - -#define SLIST_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \ - (var); \ - (var) = SLIST_NEXT((var), field)) - -#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = SLIST_FIRST((head)); \ - (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \ - (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ - for ((varp) = &SLIST_FIRST((head)); \ - ((var) = *(varp)) != NULL; \ - (varp) = &SLIST_NEXT((var), field)) - -#define SLIST_INIT(head) do { \ - SLIST_FIRST((head)) = NULL; \ -} while (0) - -#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ - SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \ - SLIST_NEXT((slistelm), field) = (elm); \ -} while (0) - -#define SLIST_INSERT_HEAD(head, elm, field) do { \ - SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \ - SLIST_FIRST((head)) = (elm); \ -} while (0) - -#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) - -#define SLIST_REMOVE(head, elm, type, field) do { \ - QMD_SAVELINK(oldnext, (elm)->field.sle_next); \ - if (SLIST_FIRST((head)) == (elm)) { \ - SLIST_REMOVE_HEAD((head), field); \ - } \ - else { \ - QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head); \ - while (SLIST_NEXT(curelm, field) != (elm)) \ - curelm = SLIST_NEXT(curelm, field); \ - SLIST_REMOVE_AFTER(curelm, field); \ - } \ - TRASHIT(*oldnext); \ -} while (0) - -#define SLIST_REMOVE_AFTER(elm, field) do { \ - SLIST_NEXT(elm, field) = \ - SLIST_NEXT(SLIST_NEXT(elm, field), field); \ -} while (0) - -#define SLIST_REMOVE_HEAD(head, field) do { \ - SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ -} while (0) - -#define SLIST_SWAP(head1, head2, type) do { \ - QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1); \ - SLIST_FIRST(head1) = SLIST_FIRST(head2); \ - SLIST_FIRST(head2) = swap_first; \ -} while (0) - -/* - * Singly-linked Tail queue declarations. - */ -#define STAILQ_HEAD(name, type) \ -struct name { \ - struct type *stqh_first;/* first element */ \ - struct type **stqh_last;/* addr of last next element */ \ -} - -#define STAILQ_CLASS_HEAD(name, type) \ -struct name { \ - class type *stqh_first; /* first element */ \ - class type **stqh_last; /* addr of last next element */ \ -} - -#define STAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).stqh_first } - -#define STAILQ_ENTRY(type) \ -struct { \ - struct type *stqe_next; /* next element */ \ -} - -#define STAILQ_CLASS_ENTRY(type) \ -struct { \ - class type *stqe_next; /* next element */ \ -} - -/* - * Singly-linked Tail queue functions. - */ -#define STAILQ_CONCAT(head1, head2) do { \ - if (!STAILQ_EMPTY((head2))) { \ - *(head1)->stqh_last = (head2)->stqh_first; \ - (head1)->stqh_last = (head2)->stqh_last; \ - STAILQ_INIT((head2)); \ - } \ -} while (0) - -#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) - -#define STAILQ_FIRST(head) ((head)->stqh_first) - -#define STAILQ_FOREACH(var, head, field) \ - for((var) = STAILQ_FIRST((head)); \ - (var); \ - (var) = STAILQ_NEXT((var), field)) - -#define STAILQ_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \ - (var); \ - (var) = STAILQ_NEXT((var), field)) - -#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = STAILQ_FIRST((head)); \ - (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \ - (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define STAILQ_INIT(head) do { \ - STAILQ_FIRST((head)) = NULL; \ - (head)->stqh_last = &STAILQ_FIRST((head)); \ -} while (0) - -#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ - if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\ - (head)->stqh_last = &STAILQ_NEXT((elm), field); \ - STAILQ_NEXT((tqelm), field) = (elm); \ -} while (0) - -#define STAILQ_INSERT_HEAD(head, elm, field) do { \ - if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ - (head)->stqh_last = &STAILQ_NEXT((elm), field); \ - STAILQ_FIRST((head)) = (elm); \ -} while (0) - -#define STAILQ_INSERT_TAIL(head, elm, field) do { \ - STAILQ_NEXT((elm), field) = NULL; \ - *(head)->stqh_last = (elm); \ - (head)->stqh_last = &STAILQ_NEXT((elm), field); \ -} while (0) - -#define STAILQ_LAST(head, type, field) \ - (STAILQ_EMPTY((head)) ? NULL : \ - __containerof((head)->stqh_last, \ - QUEUE_TYPEOF(type), field.stqe_next)) - -#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) - -#define STAILQ_REMOVE(head, elm, type, field) do { \ - QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \ - if (STAILQ_FIRST((head)) == (elm)) { \ - STAILQ_REMOVE_HEAD((head), field); \ - } \ - else { \ - QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head); \ - while (STAILQ_NEXT(curelm, field) != (elm)) \ - curelm = STAILQ_NEXT(curelm, field); \ - STAILQ_REMOVE_AFTER(head, curelm, field); \ - } \ - TRASHIT(*oldnext); \ -} while (0) - -#define STAILQ_REMOVE_AFTER(head, elm, field) do { \ - if ((STAILQ_NEXT(elm, field) = \ - STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \ - (head)->stqh_last = &STAILQ_NEXT((elm), field); \ -} while (0) - -#define STAILQ_REMOVE_HEAD(head, field) do { \ - if ((STAILQ_FIRST((head)) = \ - STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ - (head)->stqh_last = &STAILQ_FIRST((head)); \ -} while (0) - -#define STAILQ_SWAP(head1, head2, type) do { \ - QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1); \ - QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last; \ - STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \ - (head1)->stqh_last = (head2)->stqh_last; \ - STAILQ_FIRST(head2) = swap_first; \ - (head2)->stqh_last = swap_last; \ - if (STAILQ_EMPTY(head1)) \ - (head1)->stqh_last = &STAILQ_FIRST(head1); \ - if (STAILQ_EMPTY(head2)) \ - (head2)->stqh_last = &STAILQ_FIRST(head2); \ -} while (0) - - -/* - * List declarations. - */ -#define LIST_HEAD(name, type) \ -struct name { \ - struct type *lh_first; /* first element */ \ -} - -#define LIST_CLASS_HEAD(name, type) \ -struct name { \ - class type *lh_first; /* first element */ \ -} - -#define LIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define LIST_ENTRY(type) \ -struct { \ - struct type *le_next; /* next element */ \ - struct type **le_prev; /* address of previous next element */ \ -} - -#define LIST_CLASS_ENTRY(type) \ -struct { \ - class type *le_next; /* next element */ \ - class type **le_prev; /* address of previous next element */ \ -} - -/* - * List functions. - */ - -#if (defined(_KERNEL) && defined(INVARIANTS)) -#define QMD_LIST_CHECK_HEAD(head, field) do { \ - if (LIST_FIRST((head)) != NULL && \ - LIST_FIRST((head))->field.le_prev != \ - &LIST_FIRST((head))) \ - panic("Bad list head %p first->prev != head", (head)); \ -} while (0) - -#define QMD_LIST_CHECK_NEXT(elm, field) do { \ - if (LIST_NEXT((elm), field) != NULL && \ - LIST_NEXT((elm), field)->field.le_prev != \ - &((elm)->field.le_next)) \ - panic("Bad link elm %p next->prev != elm", (elm)); \ -} while (0) - -#define QMD_LIST_CHECK_PREV(elm, field) do { \ - if (*(elm)->field.le_prev != (elm)) \ - panic("Bad link elm %p prev->next != elm", (elm)); \ -} while (0) -#else -#define QMD_LIST_CHECK_HEAD(head, field) -#define QMD_LIST_CHECK_NEXT(elm, field) -#define QMD_LIST_CHECK_PREV(elm, field) -#endif /* (_KERNEL && INVARIANTS) */ - -#define LIST_EMPTY(head) ((head)->lh_first == NULL) - -#define LIST_FIRST(head) ((head)->lh_first) - -#define LIST_FOREACH(var, head, field) \ - for ((var) = LIST_FIRST((head)); \ - (var); \ - (var) = LIST_NEXT((var), field)) - -#define LIST_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : LIST_FIRST((head))); \ - (var); \ - (var) = LIST_NEXT((var), field)) - -#define LIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = LIST_FIRST((head)); \ - (var) && ((tvar) = LIST_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : LIST_FIRST((head))); \ - (var) && ((tvar) = LIST_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define LIST_INIT(head) do { \ - LIST_FIRST((head)) = NULL; \ -} while (0) - -#define LIST_INSERT_AFTER(listelm, elm, field) do { \ - QMD_LIST_CHECK_NEXT(listelm, field); \ - if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\ - LIST_NEXT((listelm), field)->field.le_prev = \ - &LIST_NEXT((elm), field); \ - LIST_NEXT((listelm), field) = (elm); \ - (elm)->field.le_prev = &LIST_NEXT((listelm), field); \ -} while (0) - -#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ - QMD_LIST_CHECK_PREV(listelm, field); \ - (elm)->field.le_prev = (listelm)->field.le_prev; \ - LIST_NEXT((elm), field) = (listelm); \ - *(listelm)->field.le_prev = (elm); \ - (listelm)->field.le_prev = &LIST_NEXT((elm), field); \ -} while (0) - -#define LIST_INSERT_HEAD(head, elm, field) do { \ - QMD_LIST_CHECK_HEAD((head), field); \ - if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \ - LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\ - LIST_FIRST((head)) = (elm); \ - (elm)->field.le_prev = &LIST_FIRST((head)); \ -} while (0) - -#define LIST_NEXT(elm, field) ((elm)->field.le_next) - -#define LIST_PREV(elm, head, type, field) \ - ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \ - __containerof((elm)->field.le_prev, \ - QUEUE_TYPEOF(type), field.le_next)) - -#define LIST_REMOVE(elm, field) do { \ - QMD_SAVELINK(oldnext, (elm)->field.le_next); \ - QMD_SAVELINK(oldprev, (elm)->field.le_prev); \ - QMD_LIST_CHECK_NEXT(elm, field); \ - QMD_LIST_CHECK_PREV(elm, field); \ - if (LIST_NEXT((elm), field) != NULL) \ - LIST_NEXT((elm), field)->field.le_prev = \ - (elm)->field.le_prev; \ - *(elm)->field.le_prev = LIST_NEXT((elm), field); \ - TRASHIT(*oldnext); \ - TRASHIT(*oldprev); \ -} while (0) - -#define LIST_SWAP(head1, head2, type, field) do { \ - QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1); \ - LIST_FIRST((head1)) = LIST_FIRST((head2)); \ - LIST_FIRST((head2)) = swap_tmp; \ - if ((swap_tmp = LIST_FIRST((head1))) != NULL) \ - swap_tmp->field.le_prev = &LIST_FIRST((head1)); \ - if ((swap_tmp = LIST_FIRST((head2))) != NULL) \ - swap_tmp->field.le_prev = &LIST_FIRST((head2)); \ -} while (0) - -/* - * Tail queue declarations. - */ -#define TAILQ_HEAD(name, type) \ -struct name { \ - struct type *tqh_first; /* first element */ \ - struct type **tqh_last; /* addr of last next element */ \ - TRACEBUF \ -} - -#define TAILQ_CLASS_HEAD(name, type) \ -struct name { \ - class type *tqh_first; /* first element */ \ - class type **tqh_last; /* addr of last next element */ \ - TRACEBUF \ -} - -#define TAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER } - -#define TAILQ_ENTRY(type) \ -struct { \ - struct type *tqe_next; /* next element */ \ - struct type **tqe_prev; /* address of previous next element */ \ - TRACEBUF \ -} - -#define TAILQ_CLASS_ENTRY(type) \ -struct { \ - class type *tqe_next; /* next element */ \ - class type **tqe_prev; /* address of previous next element */ \ - TRACEBUF \ -} - -/* - * Tail queue functions. - */ -#if (defined(_KERNEL) && defined(INVARIANTS)) -#define QMD_TAILQ_CHECK_HEAD(head, field) do { \ - if (!TAILQ_EMPTY(head) && \ - TAILQ_FIRST((head))->field.tqe_prev != \ - &TAILQ_FIRST((head))) \ - panic("Bad tailq head %p first->prev != head", (head)); \ -} while (0) - -#define QMD_TAILQ_CHECK_TAIL(head, field) do { \ - if (*(head)->tqh_last != NULL) \ - panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \ -} while (0) - -#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \ - if (TAILQ_NEXT((elm), field) != NULL && \ - TAILQ_NEXT((elm), field)->field.tqe_prev != \ - &((elm)->field.tqe_next)) \ - panic("Bad link elm %p next->prev != elm", (elm)); \ -} while (0) - -#define QMD_TAILQ_CHECK_PREV(elm, field) do { \ - if (*(elm)->field.tqe_prev != (elm)) \ - panic("Bad link elm %p prev->next != elm", (elm)); \ -} while (0) -#else -#define QMD_TAILQ_CHECK_HEAD(head, field) -#define QMD_TAILQ_CHECK_TAIL(head, headname) -#define QMD_TAILQ_CHECK_NEXT(elm, field) -#define QMD_TAILQ_CHECK_PREV(elm, field) -#endif /* (_KERNEL && INVARIANTS) */ - -#define TAILQ_CONCAT(head1, head2, field) do { \ - if (!TAILQ_EMPTY(head2)) { \ - *(head1)->tqh_last = (head2)->tqh_first; \ - (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ - (head1)->tqh_last = (head2)->tqh_last; \ - TAILQ_INIT((head2)); \ - QMD_TRACE_HEAD(head1); \ - QMD_TRACE_HEAD(head2); \ - } \ -} while (0) - -#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) - -#define TAILQ_FIRST(head) ((head)->tqh_first) - -#define TAILQ_FOREACH(var, head, field) \ - for ((var) = TAILQ_FIRST((head)); \ - (var); \ - (var) = TAILQ_NEXT((var), field)) - -#define TAILQ_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \ - (var); \ - (var) = TAILQ_NEXT((var), field)) - -#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) - -#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ - for ((var) = TAILQ_LAST((head), headname); \ - (var); \ - (var) = TAILQ_PREV((var), headname, field)) - -#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \ - for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \ - (var); \ - (var) = TAILQ_PREV((var), headname, field)) - -#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ - for ((var) = TAILQ_LAST((head), headname); \ - (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ - (var) = (tvar)) - -#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \ - for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \ - (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ - (var) = (tvar)) - -#define TAILQ_INIT(head) do { \ - TAILQ_FIRST((head)) = NULL; \ - (head)->tqh_last = &TAILQ_FIRST((head)); \ - QMD_TRACE_HEAD(head); \ -} while (0) - -#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - QMD_TAILQ_CHECK_NEXT(listelm, field); \ - if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\ - TAILQ_NEXT((elm), field)->field.tqe_prev = \ - &TAILQ_NEXT((elm), field); \ - else { \ - (head)->tqh_last = &TAILQ_NEXT((elm), field); \ - QMD_TRACE_HEAD(head); \ - } \ - TAILQ_NEXT((listelm), field) = (elm); \ - (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ - QMD_TRACE_ELEM(&(elm)->field); \ - QMD_TRACE_ELEM(&(listelm)->field); \ -} while (0) - -#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ - QMD_TAILQ_CHECK_PREV(listelm, field); \ - (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ - TAILQ_NEXT((elm), field) = (listelm); \ - *(listelm)->field.tqe_prev = (elm); \ - (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ - QMD_TRACE_ELEM(&(elm)->field); \ - QMD_TRACE_ELEM(&(listelm)->field); \ -} while (0) - -#define TAILQ_INSERT_HEAD(head, elm, field) do { \ - QMD_TAILQ_CHECK_HEAD(head, field); \ - if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \ - TAILQ_FIRST((head))->field.tqe_prev = \ - &TAILQ_NEXT((elm), field); \ - else \ - (head)->tqh_last = &TAILQ_NEXT((elm), field); \ - TAILQ_FIRST((head)) = (elm); \ - (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ - QMD_TRACE_HEAD(head); \ - QMD_TRACE_ELEM(&(elm)->field); \ -} while (0) - -#define TAILQ_INSERT_TAIL(head, elm, field) do { \ - QMD_TAILQ_CHECK_TAIL(head, field); \ - TAILQ_NEXT((elm), field) = NULL; \ - (elm)->field.tqe_prev = (head)->tqh_last; \ - *(head)->tqh_last = (elm); \ - (head)->tqh_last = &TAILQ_NEXT((elm), field); \ - QMD_TRACE_HEAD(head); \ - QMD_TRACE_ELEM(&(elm)->field); \ -} while (0) - -#define TAILQ_LAST(head, headname) \ - (*(((struct headname *)((head)->tqh_last))->tqh_last)) - -#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) - -#define TAILQ_PREV(elm, headname, field) \ - (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) - -#define TAILQ_REMOVE(head, elm, field) do { \ - QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \ - QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \ - QMD_TAILQ_CHECK_NEXT(elm, field); \ - QMD_TAILQ_CHECK_PREV(elm, field); \ - if ((TAILQ_NEXT((elm), field)) != NULL) \ - TAILQ_NEXT((elm), field)->field.tqe_prev = \ - (elm)->field.tqe_prev; \ - else { \ - (head)->tqh_last = (elm)->field.tqe_prev; \ - QMD_TRACE_HEAD(head); \ - } \ - *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ - TRASHIT(*oldnext); \ - TRASHIT(*oldprev); \ - QMD_TRACE_ELEM(&(elm)->field); \ -} while (0) - -#define TAILQ_SWAP(head1, head2, type, field) do { \ - QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first; \ - QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last; \ - (head1)->tqh_first = (head2)->tqh_first; \ - (head1)->tqh_last = (head2)->tqh_last; \ - (head2)->tqh_first = swap_first; \ - (head2)->tqh_last = swap_last; \ - if ((swap_first = (head1)->tqh_first) != NULL) \ - swap_first->field.tqe_prev = &(head1)->tqh_first; \ - else \ - (head1)->tqh_last = &(head1)->tqh_first; \ - if ((swap_first = (head2)->tqh_first) != NULL) \ - swap_first->field.tqe_prev = &(head2)->tqh_first; \ - else \ - (head2)->tqh_last = &(head2)->tqh_first; \ -} while (0) - -#endif /* !_SYS_QUEUE_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/features.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_MONGOOSE_SRC_FEATURES_H_ -#define CS_MONGOOSE_SRC_FEATURES_H_ - -#ifndef MG_DISABLE_HTTP_DIGEST_AUTH -#define MG_DISABLE_HTTP_DIGEST_AUTH 0 -#endif - -#ifndef MG_DISABLE_HTTP_KEEP_ALIVE -#define MG_DISABLE_HTTP_KEEP_ALIVE 0 -#endif - -#ifndef MG_DISABLE_PFS -#define MG_DISABLE_PFS 0 -#endif - -#ifndef MG_DISABLE_WS_RANDOM_MASK -#define MG_DISABLE_WS_RANDOM_MASK 0 -#endif - -#ifndef MG_ENABLE_ASYNC_RESOLVER -#define MG_ENABLE_ASYNC_RESOLVER 1 -#endif - -#ifndef MG_ENABLE_BROADCAST -#define MG_ENABLE_BROADCAST 0 -#endif - -#ifndef MG_ENABLE_COAP -#define MG_ENABLE_COAP 0 -#endif - -#ifndef MG_ENABLE_DEBUG -#define MG_ENABLE_DEBUG 0 -#endif - -#ifndef MG_ENABLE_DIRECTORY_LISTING -#define MG_ENABLE_DIRECTORY_LISTING 0 -#endif - -#ifndef MG_ENABLE_DNS -#define MG_ENABLE_DNS 1 -#endif - -#ifndef MG_ENABLE_DNS_SERVER -#define MG_ENABLE_DNS_SERVER 0 -#endif - -#ifndef MG_ENABLE_FAKE_DAVLOCK -#define MG_ENABLE_FAKE_DAVLOCK 0 -#endif - -#ifndef MG_ENABLE_FILESYSTEM -#define MG_ENABLE_FILESYSTEM 0 -#endif - -#ifndef MG_ENABLE_GETADDRINFO -#define MG_ENABLE_GETADDRINFO 0 -#endif - -#ifndef MG_ENABLE_HEXDUMP -#define MG_ENABLE_HEXDUMP CS_ENABLE_STDIO -#endif - -#ifndef MG_ENABLE_HTTP -#define MG_ENABLE_HTTP 1 -#endif - -#ifndef MG_ENABLE_HTTP_CGI -#define MG_ENABLE_HTTP_CGI 0 -#endif - -#ifndef MG_ENABLE_HTTP_SSI -#define MG_ENABLE_HTTP_SSI MG_ENABLE_FILESYSTEM -#endif - -#ifndef MG_ENABLE_HTTP_SSI_EXEC -#define MG_ENABLE_HTTP_SSI_EXEC 0 -#endif - -#ifndef MG_ENABLE_HTTP_STREAMING_MULTIPART -#define MG_ENABLE_HTTP_STREAMING_MULTIPART 0 -#endif - -#ifndef MG_ENABLE_HTTP_WEBDAV -#define MG_ENABLE_HTTP_WEBDAV 0 -#endif - -#ifndef MG_ENABLE_HTTP_WEBSOCKET -#define MG_ENABLE_HTTP_WEBSOCKET MG_ENABLE_HTTP -#endif - -#ifndef MG_ENABLE_IPV6 -#define MG_ENABLE_IPV6 0 -#endif - -#ifndef MG_ENABLE_JAVASCRIPT -#define MG_ENABLE_JAVASCRIPT 0 -#endif - -#ifndef MG_ENABLE_MQTT -#define MG_ENABLE_MQTT 1 -#endif - -#ifndef MG_ENABLE_MQTT_BROKER -#define MG_ENABLE_MQTT_BROKER 0 -#endif - -#ifndef MG_ENABLE_SSL -#define MG_ENABLE_SSL 0 -#endif - -#ifndef MG_ENABLE_SYNC_RESOLVER -#define MG_ENABLE_SYNC_RESOLVER 0 -#endif - -#ifndef MG_ENABLE_STDIO -#define MG_ENABLE_STDIO CS_ENABLE_STDIO -#endif - -#ifndef MG_NET_IF -#define MG_NET_IF MG_NET_IF_SOCKET -#endif - -#ifndef MG_SSL_IF -#define MG_SSL_IF MG_SSL_IF_OPENSSL -#endif - -#ifndef MG_ENABLE_THREADS /* ifdef-ok */ -#ifdef _WIN32 -#define MG_ENABLE_THREADS 1 -#else -#define MG_ENABLE_THREADS 0 -#endif -#endif - -#if MG_ENABLE_DEBUG && !defined(CS_ENABLE_DEBUG) -#define CS_ENABLE_DEBUG 1 -#endif - -/* MQTT broker requires MQTT */ -#if MG_ENABLE_MQTT_BROKER && !MG_ENABLE_MQTT -#undef MG_ENABLE_MQTT -#define MG_ENABLE_MQTT 1 -#endif - -#ifndef MG_ENABLE_HTTP_URL_REWRITES -#define MG_ENABLE_HTTP_URL_REWRITES \ - (CS_PLATFORM == CS_P_WINDOWS || CS_PLATFORM == CS_P_UNIX) -#endif - -#ifndef MG_ENABLE_TUN -#define MG_ENABLE_TUN MG_ENABLE_HTTP_WEBSOCKET -#endif - -#ifndef MG_ENABLE_SNTP -#define MG_ENABLE_SNTP 0 -#endif - -#ifndef MG_ENABLE_EXTRA_ERRORS_DESC -#define MG_ENABLE_EXTRA_ERRORS_DESC 0 -#endif - -#endif /* CS_MONGOOSE_SRC_FEATURES_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/net_if.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_MONGOOSE_SRC_NET_IF_H_ -#define CS_MONGOOSE_SRC_NET_IF_H_ - -/* Amalgamated: #include "common/platform.h" */ - -/* - * Internal async networking core interface. - * Consists of calls made by the core, which should not block, - * and callbacks back into the core ("..._cb"). - * Callbacks may (will) cause methods to be invoked from within, - * but methods are not allowed to invoke callbacks inline. - * - * Implementation must ensure that only one callback is invoked at any time. - */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define MG_MAIN_IFACE 0 - -struct mg_mgr; -struct mg_connection; -union socket_address; - -struct mg_iface_vtable; - -struct mg_iface { - struct mg_mgr *mgr; - void *data; /* Implementation-specific data */ - struct mg_iface_vtable *vtable; -}; - -struct mg_iface_vtable { - void (*init)(struct mg_iface *iface); - void (*free)(struct mg_iface *iface); - void (*add_conn)(struct mg_connection *nc); - void (*remove_conn)(struct mg_connection *nc); - time_t (*poll)(struct mg_iface *iface, int timeout_ms); - - /* Set up a listening TCP socket on a given address. rv = 0 -> ok. */ - int (*listen_tcp)(struct mg_connection *nc, union socket_address *sa); - /* Request that a "listening" UDP socket be created. */ - int (*listen_udp)(struct mg_connection *nc, union socket_address *sa); - - /* Request that a TCP connection is made to the specified address. */ - void (*connect_tcp)(struct mg_connection *nc, const union socket_address *sa); - /* Open a UDP socket. Doesn't actually connect anything. */ - void (*connect_udp)(struct mg_connection *nc); - - /* Send functions for TCP and UDP. Sent data is copied before return. */ - void (*tcp_send)(struct mg_connection *nc, const void *buf, size_t len); - void (*udp_send)(struct mg_connection *nc, const void *buf, size_t len); - - void (*recved)(struct mg_connection *nc, size_t len); - - /* Perform interface-related connection initialization. Return 1 on ok. */ - int (*create_conn)(struct mg_connection *nc); - /* Perform interface-related cleanup on connection before destruction. */ - void (*destroy_conn)(struct mg_connection *nc); - - /* Associate a socket to a connection. */ - void (*sock_set)(struct mg_connection *nc, sock_t sock); - - /* Put connection's address into *sa, local (remote = 0) or remote. */ - void (*get_conn_addr)(struct mg_connection *nc, int remote, - union socket_address *sa); -}; - -extern struct mg_iface_vtable *mg_ifaces[]; -extern int mg_num_ifaces; - -/* Creates a new interface instance. */ -struct mg_iface *mg_if_create_iface(struct mg_iface_vtable *vtable, - struct mg_mgr *mgr); - -/* - * Find an interface with a given implementation. The search is started from - * interface `from`, exclusive. Returns NULL if none is found. - */ -struct mg_iface *mg_find_iface(struct mg_mgr *mgr, - struct mg_iface_vtable *vtable, - struct mg_iface *from); -/* - * Deliver a new TCP connection. Returns NULL in case on error (unable to - * create connection, in which case interface state should be discarded. - * This is phase 1 of the two-phase process - MG_EV_ACCEPT will be delivered - * when mg_if_accept_tcp_cb is invoked. - */ -struct mg_connection *mg_if_accept_new_conn(struct mg_connection *lc); -void mg_if_accept_tcp_cb(struct mg_connection *nc, union socket_address *sa, - size_t sa_len); - -/* Callback invoked by connect methods. err = 0 -> ok, != 0 -> error. */ -void mg_if_connect_cb(struct mg_connection *nc, int err); -/* Callback that reports that data has been put on the wire. */ -void mg_if_sent_cb(struct mg_connection *nc, int num_sent); -/* - * Receive callback. - * if `own` is true, buf must be heap-allocated and ownership is transferred - * to the core. - * Core will acknowledge consumption by calling iface::recved. - */ -void mg_if_recv_tcp_cb(struct mg_connection *nc, void *buf, int len, int own); -/* - * Receive callback. - * buf must be heap-allocated and ownership is transferred to the core. - * Core will acknowledge consumption by calling iface::recved. - */ -void mg_if_recv_udp_cb(struct mg_connection *nc, void *buf, int len, - union socket_address *sa, size_t sa_len); - -/* void mg_if_close_conn(struct mg_connection *nc); */ - -/* Deliver a POLL event to the connection. */ -void mg_if_poll(struct mg_connection *nc, time_t now); - -/* Deliver a TIMER event to the connection. */ -void mg_if_timer(struct mg_connection *c, double now); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_MONGOOSE_SRC_NET_IF_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/ssl_if.h" -#endif -/* - * Copyright (c) 2014-2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_MONGOOSE_SRC_SSL_IF_H_ -#define CS_MONGOOSE_SRC_SSL_IF_H_ - -#if MG_ENABLE_SSL - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -struct mg_ssl_if_ctx; -struct mg_connection; - -void mg_ssl_if_init(); - -enum mg_ssl_if_result { - MG_SSL_OK = 0, - MG_SSL_WANT_READ = -1, - MG_SSL_WANT_WRITE = -2, - MG_SSL_ERROR = -3, -}; - -struct mg_ssl_if_conn_params { - const char *cert; - const char *key; - const char *ca_cert; - const char *server_name; - const char *cipher_suites; -}; - -enum mg_ssl_if_result mg_ssl_if_conn_init( - struct mg_connection *nc, const struct mg_ssl_if_conn_params *params, - const char **err_msg); -enum mg_ssl_if_result mg_ssl_if_conn_accept(struct mg_connection *nc, - struct mg_connection *lc); -void mg_ssl_if_conn_free(struct mg_connection *nc); - -enum mg_ssl_if_result mg_ssl_if_handshake(struct mg_connection *nc); -int mg_ssl_if_read(struct mg_connection *nc, void *buf, size_t buf_size); -int mg_ssl_if_write(struct mg_connection *nc, const void *data, size_t len); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MG_ENABLE_SSL */ - -#endif /* CS_MONGOOSE_SRC_SSL_IF_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/net.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - * This software is dual-licensed: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. For the terms of this - * license, see . - * - * You are free to use this software under the terms of the GNU General - * Public License, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * Alternatively, you can license this software under a commercial - * license, as set out in . - */ - -/* - * === Core API: TCP/UDP/SSL - * - * NOTE: Mongoose manager is single threaded. It does not protect - * its data structures by mutexes, therefore all functions that are dealing - * with a particular event manager should be called from the same thread, - * with exception of the `mg_broadcast()` function. It is fine to have different - * event managers handled by different threads. - */ - -#ifndef CS_MONGOOSE_SRC_NET_H_ -#define CS_MONGOOSE_SRC_NET_H_ - -#if MG_ENABLE_JAVASCRIPT -#define EXCLUDE_COMMON -#include -#endif - -/* Amalgamated: #include "mongoose/src/common.h" */ -/* Amalgamated: #include "mongoose/src/net_if.h" */ -/* Amalgamated: #include "common/mbuf.h" */ - -#ifndef MG_VPRINTF_BUFFER_SIZE -#define MG_VPRINTF_BUFFER_SIZE 100 -#endif - -#ifdef MG_USE_READ_WRITE -#define MG_RECV_FUNC(s, b, l, f) read(s, b, l) -#define MG_SEND_FUNC(s, b, l, f) write(s, b, l) -#else -#define MG_RECV_FUNC(s, b, l, f) recv(s, b, l, f) -#define MG_SEND_FUNC(s, b, l, f) send(s, b, l, f) -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -union socket_address { - struct sockaddr sa; - struct sockaddr_in sin; -#if MG_ENABLE_IPV6 - struct sockaddr_in6 sin6; -#else - struct sockaddr sin6; -#endif -}; - -struct mg_connection; - -/* - * Callback function (event handler) prototype. Must be defined by the user. - * Mongoose calls the event handler, passing the events defined below. - */ -typedef void (*mg_event_handler_t)(struct mg_connection *nc, int ev, - void *ev_data); - -/* Events. Meaning of event parameter (evp) is given in the comment. */ -#define MG_EV_POLL 0 /* Sent to each connection on each mg_mgr_poll() call */ -#define MG_EV_ACCEPT 1 /* New connection accepted. union socket_address * */ -#define MG_EV_CONNECT 2 /* connect() succeeded or failed. int * */ -#define MG_EV_RECV 3 /* Data has benn received. int *num_bytes */ -#define MG_EV_SEND 4 /* Data has been written to a socket. int *num_bytes */ -#define MG_EV_CLOSE 5 /* Connection is closed. NULL */ -#define MG_EV_TIMER 6 /* now >= conn->ev_timer_time. double * */ - -/* - * Mongoose event manager. - */ -struct mg_mgr { - struct mg_connection *active_connections; -#if MG_ENABLE_HEXDUMP - const char *hexdump_file; /* Debug hexdump file path */ -#endif -#if MG_ENABLE_BROADCAST - sock_t ctl[2]; /* Socketpair for mg_broadcast() */ -#endif - void *user_data; /* User data */ - int num_ifaces; - struct mg_iface **ifaces; /* network interfaces */ -#if MG_ENABLE_JAVASCRIPT - struct v7 *v7; -#endif -}; - -/* - * Mongoose connection. - */ -struct mg_connection { - struct mg_connection *next, *prev; /* mg_mgr::active_connections linkage */ - struct mg_connection *listener; /* Set only for accept()-ed connections */ - struct mg_mgr *mgr; /* Pointer to containing manager */ - - sock_t sock; /* Socket to the remote peer */ - int err; - union socket_address sa; /* Remote peer address */ - size_t recv_mbuf_limit; /* Max size of recv buffer */ - struct mbuf recv_mbuf; /* Received data */ - struct mbuf send_mbuf; /* Data scheduled for sending */ - time_t last_io_time; /* Timestamp of the last socket IO */ - double ev_timer_time; /* Timestamp of the future MG_EV_TIMER */ -#if MG_ENABLE_SSL - void *ssl_if_data; /* SSL library data. */ -#endif - mg_event_handler_t proto_handler; /* Protocol-specific event handler */ - void *proto_data; /* Protocol-specific data */ - void (*proto_data_destructor)(void *proto_data); - mg_event_handler_t handler; /* Event handler function */ - void *user_data; /* User-specific data */ - union { - void *v; - /* - * the C standard is fussy about fitting function pointers into - * void pointers, since some archs might have fat pointers for functions. - */ - mg_event_handler_t f; - } priv_1; - void *priv_2; - void *mgr_data; /* Implementation-specific event manager's data. */ - struct mg_iface *iface; - unsigned long flags; -/* Flags set by Mongoose */ -#define MG_F_LISTENING (1 << 0) /* This connection is listening */ -#define MG_F_UDP (1 << 1) /* This connection is UDP */ -#define MG_F_RESOLVING (1 << 2) /* Waiting for async resolver */ -#define MG_F_CONNECTING (1 << 3) /* connect() call in progress */ -#define MG_F_SSL (1 << 4) /* SSL is enabled on the connection */ -#define MG_F_SSL_HANDSHAKE_DONE (1 << 5) /* SSL hanshake has completed */ -#define MG_F_WANT_READ (1 << 6) /* SSL specific */ -#define MG_F_WANT_WRITE (1 << 7) /* SSL specific */ -#define MG_F_IS_WEBSOCKET (1 << 8) /* Websocket specific */ - -/* Flags that are settable by user */ -#define MG_F_SEND_AND_CLOSE (1 << 10) /* Push remaining data and close */ -#define MG_F_CLOSE_IMMEDIATELY (1 << 11) /* Disconnect */ -#define MG_F_WEBSOCKET_NO_DEFRAG (1 << 12) /* Websocket specific */ -#define MG_F_DELETE_CHUNK (1 << 13) /* HTTP specific */ -#define MG_F_ENABLE_BROADCAST (1 << 14) /* Allow broadcast address usage */ -#define MG_F_TUN_DO_NOT_RECONNECT (1 << 15) /* Don't reconnect tunnel */ - -#define MG_F_USER_1 (1 << 20) /* Flags left for application */ -#define MG_F_USER_2 (1 << 21) -#define MG_F_USER_3 (1 << 22) -#define MG_F_USER_4 (1 << 23) -#define MG_F_USER_5 (1 << 24) -#define MG_F_USER_6 (1 << 25) -}; - -/* - * Initialise Mongoose manager. Side effect: ignores SIGPIPE signal. - * `mgr->user_data` field will be initialised with a `user_data` parameter. - * That is an arbitrary pointer, where the user code can associate some data - * with the particular Mongoose manager. For example, a C++ wrapper class - * could be written in which case `user_data` can hold a pointer to the - * class instance. - */ -void mg_mgr_init(struct mg_mgr *mgr, void *user_data); - -/* - * Optional parameters to `mg_mgr_init_opt()`. - * - * If `main_iface` is not NULL, it will be used as the main interface in the - * default interface set. The pointer will be free'd by `mg_mgr_free`. - * Otherwise, the main interface will be autodetected based on the current - * platform. - * - * If `num_ifaces` is 0 and `ifaces` is NULL, the default interface set will be - * used. - * This is an advanced option, as it requires you to construct a full interface - * set, including special networking interfaces required by some optional - * features such as TCP tunneling. Memory backing `ifaces` and each of the - * `num_ifaces` pointers it contains will be reclaimed by `mg_mgr_free`. - */ -struct mg_mgr_init_opts { - struct mg_iface_vtable *main_iface; - int num_ifaces; - struct mg_iface_vtable **ifaces; -}; - -/* - * Like `mg_mgr_init` but with more options. - * - * Notably, this allows you to create a manger and choose - * dynamically which networking interface implementation to use. - */ -void mg_mgr_init_opt(struct mg_mgr *mgr, void *user_data, - struct mg_mgr_init_opts opts); - -/* - * De-initialises Mongoose manager. - * - * Closes and deallocates all active connections. - */ -void mg_mgr_free(struct mg_mgr *); - -/* - * This function performs the actual IO and must be called in a loop - * (an event loop). It returns the current timestamp. - * `milli` is the maximum number of milliseconds to sleep. - * `mg_mgr_poll()` checks all connections for IO readiness. If at least one - * of the connections is IO-ready, `mg_mgr_poll()` triggers the respective - * event handlers and returns. - */ -time_t mg_mgr_poll(struct mg_mgr *, int milli); - -#if MG_ENABLE_BROADCAST -/* - * Passes a message of a given length to all connections. - * - * Must be called from a thread that does NOT call `mg_mgr_poll()`. - * Note that `mg_broadcast()` is the only function - * that can be, and must be, called from a different (non-IO) thread. - * - * `func` callback function will be called by the IO thread for each - * connection. When called, the event will be `MG_EV_POLL`, and a message will - * be passed as the `ev_data` pointer. Maximum message size is capped - * by `MG_CTL_MSG_MESSAGE_SIZE` which is set to 8192 bytes. - */ -void mg_broadcast(struct mg_mgr *, mg_event_handler_t func, void *, size_t); -#endif - -/* - * Iterates over all active connections. - * - * Returns the next connection from the list - * of active connections or `NULL` if there are no more connections. Below - * is the iteration idiom: - * - * ```c - * for (c = mg_next(srv, NULL); c != NULL; c = mg_next(srv, c)) { - * // Do something with connection `c` - * } - * ``` - */ -struct mg_connection *mg_next(struct mg_mgr *, struct mg_connection *); - -/* - * Optional parameters to `mg_add_sock_opt()`. - * - * `flags` is an initial `struct mg_connection::flags` bitmask to set, - * see `MG_F_*` flags definitions. - */ -struct mg_add_sock_opts { - void *user_data; /* Initial value for connection's user_data */ - unsigned int flags; /* Initial connection flags */ - const char **error_string; /* Placeholder for the error string */ - struct mg_iface *iface; /* Interface instance */ -}; - -/* - * Creates a connection, associates it with the given socket and event handler - * and adds it to the manager. - * - * For more options see the `mg_add_sock_opt` variant. - */ -struct mg_connection *mg_add_sock(struct mg_mgr *, sock_t, mg_event_handler_t); - -/* - * Creates a connection, associates it with the given socket and event handler - * and adds to the manager. - * - * See the `mg_add_sock_opts` structure for a description of the options. - */ -struct mg_connection *mg_add_sock_opt(struct mg_mgr *, sock_t, - mg_event_handler_t, - struct mg_add_sock_opts); - -/* - * Optional parameters to `mg_bind_opt()`. - * - * `flags` is an initial `struct mg_connection::flags` bitmask to set, - * see `MG_F_*` flags definitions. - */ -struct mg_bind_opts { - void *user_data; /* Initial value for connection's user_data */ - unsigned int flags; /* Extra connection flags */ - const char **error_string; /* Placeholder for the error string */ - struct mg_iface *iface; /* Interface instance */ -#if MG_ENABLE_SSL - /* - * SSL settings. - * - * Server certificate to present to clients or client certificate to - * present to tunnel dispatcher (for tunneled connections). - */ - const char *ssl_cert; - /* Private key corresponding to the certificate. If ssl_cert is set but - * ssl_key is not, ssl_cert is used. */ - const char *ssl_key; - /* CA bundle used to verify client certificates or tunnel dispatchers. */ - const char *ssl_ca_cert; - /* Colon-delimited list of acceptable cipher suites. - * Names depend on the library used, for example: - * - * ECDH-ECDSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256 (OpenSSL) - * TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256 - * (mbedTLS) - * - * For OpenSSL the list can be obtained by running "openssl ciphers". - * For mbedTLS, names can be found in library/ssl_ciphersuites.c - * If NULL, a reasonable default is used. - */ - const char *ssl_cipher_suites; -#endif -}; - -/* - * Creates a listening connection. - * - * See `mg_bind_opt` for full documentation. - */ -struct mg_connection *mg_bind(struct mg_mgr *, const char *, - mg_event_handler_t); -/* - * Creates a listening connection. - * - * The `address` parameter specifies which address to bind to. It's format is - * the same as for the `mg_connect()` call, where `HOST` part is optional. - * `address` can be just a port number, e.g. `:8000`. To bind to a specific - * interface, an IP address can be specified, e.g. `1.2.3.4:8000`. By default, - * a TCP connection is created. To create UDP connection, prepend `udp://` - * prefix, e.g. `udp://:8000`. To summarize, `address` paramer has following - * format: `[PROTO://][IP_ADDRESS]:PORT`, where `PROTO` could be `tcp` or - * `udp`. - * - * See the `mg_bind_opts` structure for a description of the optional - * parameters. - * - * Returns a new listening connection or `NULL` on error. - * NOTE: The connection remains owned by the manager, do not free(). - */ -struct mg_connection *mg_bind_opt(struct mg_mgr *mgr, const char *address, - mg_event_handler_t handler, - struct mg_bind_opts opts); - -/* Optional parameters to `mg_connect_opt()` */ -struct mg_connect_opts { - void *user_data; /* Initial value for connection's user_data */ - unsigned int flags; /* Extra connection flags */ - const char **error_string; /* Placeholder for the error string */ - struct mg_iface *iface; /* Interface instance */ -#if MG_ENABLE_SSL - /* - * SSL settings. - * Client certificate to present to the server. - */ - const char *ssl_cert; - /* - * Private key corresponding to the certificate. - * If ssl_cert is set but ssl_key is not, ssl_cert is used. - */ - const char *ssl_key; - /* - * Verify server certificate using this CA bundle. If set to "*", then SSL - * is enabled but no cert verification is performed. - */ - const char *ssl_ca_cert; - /* Colon-delimited list of acceptable cipher suites. - * Names depend on the library used, for example: - * - * ECDH-ECDSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256 (OpenSSL) - * TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256 - * (mbedTLS) - * - * For OpenSSL the list can be obtained by running "openssl ciphers". - * For mbedTLS, names can be found in library/ssl_ciphersuites.c - * If NULL, a reasonable default is used. - */ - const char *ssl_cipher_suites; - /* - * Server name verification. If ssl_ca_cert is set and the certificate has - * passed verification, its subject will be verified against this string. - * By default (if ssl_server_name is NULL) hostname part of the address will - * be used. Wildcard matching is supported. A special value of "*" disables - * name verification. - */ - const char *ssl_server_name; -#endif -}; - -/* - * Connects to a remote host. - * - * See `mg_connect_opt()` for full documentation. - */ -struct mg_connection *mg_connect(struct mg_mgr *mgr, const char *address, - mg_event_handler_t handler); - -/* - * Connects to a remote host. - * - * The `address` format is `[PROTO://]HOST:PORT`. `PROTO` could be `tcp` or - * `udp`. `HOST` could be an IP address, - * IPv6 address (if Mongoose is compiled with `-DMG_ENABLE_IPV6`) or a host - * name. If `HOST` is a name, Mongoose will resolve it asynchronously. Examples - * of valid addresses: `google.com:80`, `udp://1.2.3.4:53`, `10.0.0.1:443`, - * `[::1]:80` - * - * See the `mg_connect_opts` structure for a description of the optional - * parameters. - * - * Returns a new outbound connection or `NULL` on error. - * - * NOTE: The connection remains owned by the manager, do not free(). - * - * NOTE: To enable IPv6 addresses `-DMG_ENABLE_IPV6` should be specified - * in the compilation flags. - * - * NOTE: The new connection will receive `MG_EV_CONNECT` as its first event - * which will report the connect success status. - * If the asynchronous resolution fails or the `connect()` syscall fails for - * whatever reason (e.g. with `ECONNREFUSED` or `ENETUNREACH`), then - * `MG_EV_CONNECT` event will report failure. Code example below: - * - * ```c - * static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { - * int connect_status; - * - * switch (ev) { - * case MG_EV_CONNECT: - * connect_status = * (int *) ev_data; - * if (connect_status == 0) { - * // Success - * } else { - * // Error - * printf("connect() error: %s\n", strerror(connect_status)); - * } - * break; - * ... - * } - * } - * - * ... - * mg_connect(mgr, "my_site.com:80", ev_handler); - * ``` - */ -struct mg_connection *mg_connect_opt(struct mg_mgr *mgr, const char *address, - mg_event_handler_t handler, - struct mg_connect_opts opts); - -#if MG_ENABLE_SSL && MG_NET_IF != MG_NET_IF_SIMPLELINK -/* - * Note: This function is deprecated. Please, use SSL options in - * mg_connect_opt. - * - * Enables SSL for a given connection. - * `cert` is a server certificate file name for a listening connection - * or a client certificate file name for an outgoing connection. - * The certificate files must be in PEM format. The server certificate file - * must contain a certificate, concatenated with a private key, optionally - * concatenated with DH parameters. - * `ca_cert` is a CA certificate or NULL if peer verification is not - * required. - * Return: NULL on success or error message on error. - */ -const char *mg_set_ssl(struct mg_connection *nc, const char *cert, - const char *ca_cert); -#endif - -/* - * Sends data to the connection. - * - * Note that sending functions do not actually push data to the socket. - * They just append data to the output buffer. MG_EV_SEND will be delivered when - * the data has actually been pushed out. - */ -void mg_send(struct mg_connection *, const void *buf, int len); - -/* Enables format string warnings for mg_printf */ -#if defined(__GNUC__) -__attribute__((format(printf, 2, 3))) -#endif -/* don't separate from mg_printf declaration */ - -/* - * Sends `printf`-style formatted data to the connection. - * - * See `mg_send` for more details on send semantics. - */ -int mg_printf(struct mg_connection *, const char *fmt, ...); - -/* Same as `mg_printf()`, but takes `va_list ap` as an argument. */ -int mg_vprintf(struct mg_connection *, const char *fmt, va_list ap); - -/* - * Creates a socket pair. - * `sock_type` can be either `SOCK_STREAM` or `SOCK_DGRAM`. - * Returns 0 on failure and 1 on success. - */ -int mg_socketpair(sock_t[2], int sock_type); - -#if MG_ENABLE_SYNC_RESOLVER -/* - * Convert domain name into IP address. - * - * This is a utility function. If compilation flags have - * `-DMG_ENABLE_GETADDRINFO`, then `getaddrinfo()` call is used for name - * resolution. Otherwise, `gethostbyname()` is used. - * - * CAUTION: this function can block. - * Return 1 on success, 0 on failure. - */ -int mg_resolve(const char *domain_name, char *ip_addr_buf, size_t buf_len); -#endif - -/* - * Verify given IP address against the ACL. - * - * `remote_ip` - an IPv4 address to check, in host byte order - * `acl` - a comma separated list of IP subnets: `x.x.x.x/x` or `x.x.x.x`. - * Each subnet is - * prepended by either a - or a + sign. A plus sign means allow, where a - * minus sign means deny. If a subnet mask is omitted, such as `-1.2.3.4`, - * it means that only that single IP address is denied. - * Subnet masks may vary from 0 to 32, inclusive. The default setting - * is to allow all access. On each request the full list is traversed, - * and the last match wins. Example: - * - * `-0.0.0.0/0,+192.168/16` - deny all acccesses, only allow 192.168/16 subnet - * - * To learn more about subnet masks, see this - * link:https://en.wikipedia.org/wiki/Subnetwork[Wikipedia page on Subnetwork]. - * - * Returns -1 if ACL is malformed, 0 if address is disallowed, 1 if allowed. - */ -int mg_check_ip_acl(const char *acl, uint32_t remote_ip); - -#if MG_ENABLE_JAVASCRIPT -/* - * Enables server-side JavaScript scripting. - * Requires a `-DMG_ENABLE_JAVASCRIPT` compilation flag and V7 engine sources. - * V7 instance must not be destroyed during manager's lifetime. - * Returns a V7 error. - */ -enum v7_err mg_enable_javascript(struct mg_mgr *m, struct v7 *v7, - const char *init_js_file_name); -#endif - -/* - * Schedules an MG_EV_TIMER event to be delivered at `timestamp` time. - * `timestamp` is UNIX time (the number of seconds since Epoch). It is - * `double` instead of `time_t` to allow for sub-second precision. - * Returns the old timer value. - * - * Example: set the connect timeout to 1.5 seconds: - * - * ``` - * c = mg_connect(&mgr, "cesanta.com", ev_handler); - * mg_set_timer(c, mg_time() + 1.5); - * ... - * - * void ev_handler(struct mg_connection *c, int ev, void *ev_data) { - * switch (ev) { - * case MG_EV_CONNECT: - * mg_set_timer(c, 0); // Clear connect timer - * break; - * case MG_EV_TIMER: - * log("Connect timeout"); - * c->flags |= MG_F_CLOSE_IMMEDIATELY; - * break; - * ``` - */ -double mg_set_timer(struct mg_connection *c, double timestamp); - -/* - * A sub-second precision version of time(). - */ -double mg_time(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_MONGOOSE_SRC_NET_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/uri.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* - * === URI - */ - -#ifndef CS_MONGOOSE_SRC_URI_H_ -#define CS_MONGOOSE_SRC_URI_H_ - -/* Amalgamated: #include "mongoose/src/net.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * Parses an URI and fills string chunks with locations of the respective - * uri components within the input uri string. NULL pointers will be - * ignored. - * - * General syntax: - * - * [scheme://[user_info@]]host[:port][/path][?query][#fragment] - * - * Example: - * - * foo.com:80 - * tcp://foo.com:1234 - * http://foo.com:80/bar?baz=1 - * https://user:pw@foo.com:443/blah - * - * `path` will include the leading slash. `query` won't include the leading `?`. - * `host` can contain embedded colons if surrounded by square brackets in order - * to support IPv6 literal addresses. - * - * - * Returns 0 on success, -1 on error. - */ -int mg_parse_uri(struct mg_str uri, struct mg_str *scheme, - struct mg_str *user_info, struct mg_str *host, - unsigned int *port, struct mg_str *path, struct mg_str *query, - struct mg_str *fragment); - -int mg_normalize_uri_path(const struct mg_str *in, struct mg_str *out); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* CS_MONGOOSE_SRC_URI_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/util.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* - * === Utility API - */ - -#ifndef CS_MONGOOSE_SRC_UTIL_H_ -#define CS_MONGOOSE_SRC_UTIL_H_ - -#include - -/* Amalgamated: #include "mongoose/src/common.h" */ -/* Amalgamated: #include "mongoose/src/net_if.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef MAX_PATH_SIZE -#define MAX_PATH_SIZE 500 -#endif - -/* - * Fetches substring from input string `s`, `end` into `v`. - * Skips initial delimiter characters. Records first non-delimiter character - * at the beginning of substring `v`. Then scans the rest of the string - * until a delimiter character or end-of-string is found. - * `delimiters` is a 0-terminated string containing delimiter characters. - * Either one of `delimiters` or `end_string` terminates the search. - * Returns an `s` pointer, advanced forward where parsing has stopped. - */ -const char *mg_skip(const char *s, const char *end_string, - const char *delimiters, struct mg_str *v); - -/* - * Decodes base64-encoded string `s`, `len` into the destination `dst`. - * The destination has to have enough space to hold the decoded buffer. - * Decoding stops either when all strings have been decoded or invalid an - * character appeared. - * Destination is '\0'-terminated. - * Returns the number of decoded characters. On success, that should be equal - * to `len`. On error (invalid character) the return value is smaller then - * `len`. - */ -int mg_base64_decode(const unsigned char *s, int len, char *dst); - -/* - * Base64-encode chunk of memory `src`, `src_len` into the destination `dst`. - * Destination has to have enough space to hold encoded buffer. - * Destination is '\0'-terminated. - */ -void mg_base64_encode(const unsigned char *src, int src_len, char *dst); - -#if MG_ENABLE_FILESYSTEM -/* - * Performs a 64-bit `stat()` call against a given file. - * - * `path` should be UTF8 encoded. - * - * Return value is the same as for `stat()` syscall. - */ -int mg_stat(const char *path, cs_stat_t *st); - -/* - * Opens the given file and returns a file stream. - * - * `path` and `mode` should be UTF8 encoded. - * - * Return value is the same as for the `fopen()` call. - */ -FILE *mg_fopen(const char *path, const char *mode); - -/* - * Opens the given file and returns a file stream. - * - * `path` should be UTF8 encoded. - * - * Return value is the same as for the `open()` syscall. - */ -int mg_open(const char *path, int flag, int mode); -#endif /* MG_ENABLE_FILESYSTEM */ - -#if MG_ENABLE_THREADS -/* - * Starts a new detached thread. - * Arguments and semantics are the same as pthead's `pthread_create()`. - * `thread_func` is a thread function, `thread_func_param` is a parameter - * that is passed to the thread function. - */ -void *mg_start_thread(void *(*thread_func)(void *), void *thread_func_param); -#endif - -void mg_set_close_on_exec(sock_t); - -#define MG_SOCK_STRINGIFY_IP 1 -#define MG_SOCK_STRINGIFY_PORT 2 -#define MG_SOCK_STRINGIFY_REMOTE 4 -/* - * Converts a connection's local or remote address into string. - * - * The `flags` parameter is a bit mask that controls the behaviour, - * see `MG_SOCK_STRINGIFY_*` definitions. - * - * - MG_SOCK_STRINGIFY_IP - print IP address - * - MG_SOCK_STRINGIFY_PORT - print port number - * - MG_SOCK_STRINGIFY_REMOTE - print remote peer's IP/port, not local address - * - * If both port number and IP address are printed, they are separated by `:`. - * If compiled with `-DMG_ENABLE_IPV6`, IPv6 addresses are supported. - */ -void mg_conn_addr_to_str(struct mg_connection *nc, char *buf, size_t len, - int flags); -#if MG_NET_IF == MG_NET_IF_SOCKET -/* Legacy interface. */ -void mg_sock_to_str(sock_t sock, char *buf, size_t len, int flags); -#endif - -/* - * Convert the socket's address into string. - * - * `flags` is MG_SOCK_STRINGIFY_IP and/or MG_SOCK_STRINGIFY_PORT. - */ -void mg_sock_addr_to_str(const union socket_address *sa, char *buf, size_t len, - int flags); - -#if MG_ENABLE_HEXDUMP -/* - * Generates a human-readable hexdump of memory chunk. - * - * Takes a memory buffer `buf` of length `len` and creates a hex dump of that - * buffer in `dst`. The generated output is a-la hexdump(1). - * Returns the length of generated string, excluding terminating `\0`. If - * returned length is bigger than `dst_len`, the overflow bytes are discarded. - */ -int mg_hexdump(const void *buf, int len, char *dst, int dst_len); - -/* - * Generates human-readable hexdump of the data sent or received by the - * connection. `path` is a file name where hexdump should be written. - * `num_bytes` is a number of bytes sent/received. `ev` is one of the `MG_*` - * events sent to an event handler. This function is supposed to be called from - * the event handler. - */ -void mg_hexdump_connection(struct mg_connection *nc, const char *path, - const void *buf, int num_bytes, int ev); -#endif - -/* - * Returns true if target platform is big endian. - */ -int mg_is_big_endian(void); - -/* - * A helper function for traversing a comma separated list of values. - * It returns a list pointer shifted to the next value or NULL if the end - * of the list found. - * The value is stored in a val vector. If the value has a form "x=y", then - * eq_val vector is initialised to point to the "y" part, and val vector length - * is adjusted to point only to "x". - * If the list is just a comma separated list of entries, like "aa,bb,cc" then - * `eq_val` will contain zero-length string. - * - * The purpose of this function is to parse comma separated string without - * any copying/memory allocation. - */ -const char *mg_next_comma_list_entry(const char *list, struct mg_str *val, - struct mg_str *eq_val); - -/* - * Matches 0-terminated string (mg_match_prefix) or string with given length - * mg_match_prefix_n against a glob pattern. - * - * Match is case-insensitive. Returns number of bytes matched, or -1 if no - * match. - */ -int mg_match_prefix(const char *pattern, int pattern_len, const char *str); -int mg_match_prefix_n(const struct mg_str pattern, const struct mg_str str); - -/* - * Use with cs_base64_init/update/finish in order to write out base64 in chunks. - */ -void mg_mbuf_append_base64_putc(char ch, void *user_data); - -/* - * Encode `len` bytes starting at `data` as base64 and append them to an mbuf. - */ -void mg_mbuf_append_base64(struct mbuf *mbuf, const void *data, size_t len); - -/* - * Generate a Basic Auth header and appends it to buf. - * If pass is NULL, then user is expected to contain the credentials pair - * already encoded as `user:pass`. - */ -void mg_basic_auth_header(const char *user, const char *pass, struct mbuf *buf); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* CS_MONGOOSE_SRC_UTIL_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/http.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* - * === Common API reference - */ - -#ifndef CS_MONGOOSE_SRC_HTTP_H_ -#define CS_MONGOOSE_SRC_HTTP_H_ - -#if MG_ENABLE_HTTP - -/* Amalgamated: #include "mongoose/src/net.h" */ -/* Amalgamated: #include "common/mg_str.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef MG_MAX_HTTP_HEADERS -#define MG_MAX_HTTP_HEADERS 20 -#endif - -#ifndef MG_MAX_HTTP_REQUEST_SIZE -#define MG_MAX_HTTP_REQUEST_SIZE 1024 -#endif - -#ifndef MG_MAX_PATH -#ifdef PATH_MAX -#define MG_MAX_PATH PATH_MAX -#else -#define MG_MAX_PATH 256 -#endif -#endif - -#ifndef MG_MAX_HTTP_SEND_MBUF -#define MG_MAX_HTTP_SEND_MBUF 1024 -#endif - -#ifndef MG_CGI_ENVIRONMENT_SIZE -#define MG_CGI_ENVIRONMENT_SIZE 8192 -#endif - -/* HTTP message */ -struct http_message { - struct mg_str message; /* Whole message: request line + headers + body */ - - /* HTTP Request line (or HTTP response line) */ - struct mg_str method; /* "GET" */ - struct mg_str uri; /* "/my_file.html" */ - struct mg_str proto; /* "HTTP/1.1" -- for both request and response */ - - /* For responses, code and response status message are set */ - int resp_code; - struct mg_str resp_status_msg; - - /* - * Query-string part of the URI. For example, for HTTP request - * GET /foo/bar?param1=val1¶m2=val2 - * | uri | query_string | - * - * Note that question mark character doesn't belong neither to the uri, - * nor to the query_string - */ - struct mg_str query_string; - - /* Headers */ - struct mg_str header_names[MG_MAX_HTTP_HEADERS]; - struct mg_str header_values[MG_MAX_HTTP_HEADERS]; - - /* Message body */ - struct mg_str body; /* Zero-length for requests with no body */ -}; - -#if MG_ENABLE_HTTP_WEBSOCKET -/* WebSocket message */ -struct websocket_message { - unsigned char *data; - size_t size; - unsigned char flags; -}; -#endif - -/* HTTP multipart part */ -struct mg_http_multipart_part { - const char *file_name; - const char *var_name; - struct mg_str data; - int status; /* <0 on error */ - void *user_data; -}; - -/* SSI call context */ -struct mg_ssi_call_ctx { - struct http_message *req; /* The request being processed. */ - struct mg_str file; /* Filesystem path of the file being processed. */ - struct mg_str arg; /* The argument passed to the tag: . */ -}; - -/* HTTP and websocket events. void *ev_data is described in a comment. */ -#define MG_EV_HTTP_REQUEST 100 /* struct http_message * */ -#define MG_EV_HTTP_REPLY 101 /* struct http_message * */ -#define MG_EV_HTTP_CHUNK 102 /* struct http_message * */ -#define MG_EV_SSI_CALL 105 /* char * */ -#define MG_EV_SSI_CALL_CTX 106 /* struct mg_ssi_call_ctx * */ - -#if MG_ENABLE_HTTP_WEBSOCKET -#define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111 /* struct http_message * */ -#define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112 /* NULL */ -#define MG_EV_WEBSOCKET_FRAME 113 /* struct websocket_message * */ -#define MG_EV_WEBSOCKET_CONTROL_FRAME 114 /* struct websocket_message * */ -#endif - -#if MG_ENABLE_HTTP_STREAMING_MULTIPART -#define MG_EV_HTTP_MULTIPART_REQUEST 121 /* struct http_message */ -#define MG_EV_HTTP_PART_BEGIN 122 /* struct mg_http_multipart_part */ -#define MG_EV_HTTP_PART_DATA 123 /* struct mg_http_multipart_part */ -#define MG_EV_HTTP_PART_END 124 /* struct mg_http_multipart_part */ -/* struct mg_http_multipart_part */ -#define MG_EV_HTTP_MULTIPART_REQUEST_END 125 -#endif - -/* - * Attaches a built-in HTTP event handler to the given connection. - * The user-defined event handler will receive following extra events: - * - * - MG_EV_HTTP_REQUEST: HTTP request has arrived. Parsed HTTP request - * is passed as - * `struct http_message` through the handler's `void *ev_data` pointer. - * - MG_EV_HTTP_REPLY: The HTTP reply has arrived. The parsed HTTP reply is - * passed as `struct http_message` through the handler's `void *ev_data` - * pointer. - * - MG_EV_HTTP_CHUNK: The HTTP chunked-encoding chunk has arrived. - * The parsed HTTP reply is passed as `struct http_message` through the - * handler's `void *ev_data` pointer. `http_message::body` would contain - * incomplete, reassembled HTTP body. - * It will grow with every new chunk that arrives, and it can - * potentially consume a lot of memory. An event handler may process - * the body as chunks are coming, and signal Mongoose to delete processed - * body by setting `MG_F_DELETE_CHUNK` in `mg_connection::flags`. When - * the last zero chunk is received, - * Mongoose sends `MG_EV_HTTP_REPLY` event with - * full reassembled body (if handler did not signal to delete chunks) or - * with empty body (if handler did signal to delete chunks). - * - MG_EV_WEBSOCKET_HANDSHAKE_REQUEST: server has received the WebSocket - * handshake request. `ev_data` contains parsed HTTP request. - * - MG_EV_WEBSOCKET_HANDSHAKE_DONE: server has completed the WebSocket - * handshake. `ev_data` is `NULL`. - * - MG_EV_WEBSOCKET_FRAME: new WebSocket frame has arrived. `ev_data` is - * `struct websocket_message *` - * - * When compiled with MG_ENABLE_HTTP_STREAMING_MULTIPART, Mongoose parses - * multipart requests and splits them into separate events: - * - MG_EV_HTTP_MULTIPART_REQUEST: Start of the request. - * This event is sent before body is parsed. After this, the user - * should expect a sequence of PART_BEGIN/DATA/END requests. - * This is also the last time when headers and other request fields are - * accessible. - * - MG_EV_HTTP_PART_BEGIN: Start of a part of a multipart message. - * Argument: mg_http_multipart_part with var_name and file_name set - * (if present). No data is passed in this message. - * - MG_EV_HTTP_PART_DATA: new portion of data from the multipart message. - * Argument: mg_http_multipart_part. var_name and file_name are preserved, - * data is available in mg_http_multipart_part.data. - * - MG_EV_HTTP_PART_END: End of the current part. var_name, file_name are - * the same, no data in the message. If status is 0, then the part is - * properly terminated with a boundary, status < 0 means that connection - * was terminated. - * - MG_EV_HTTP_MULTIPART_REQUEST_END: End of the multipart request. - * Argument: mg_http_multipart_part, var_name and file_name are NULL, - * status = 0 means request was properly closed, < 0 means connection - * was terminated (note: in this case both PART_END and REQUEST_END are - * delivered). - */ -void mg_set_protocol_http_websocket(struct mg_connection *nc); - -#if MG_ENABLE_HTTP_WEBSOCKET -/* - * Send websocket handshake to the server. - * - * `nc` must be a valid connection, connected to a server. `uri` is an URI - * to fetch, extra_headers` is extra HTTP headers to send or `NULL`. - * - * This function is intended to be used by websocket client. - * - * Note that the Host header is mandatory in HTTP/1.1 and must be - * included in `extra_headers`. `mg_send_websocket_handshake2` offers - * a better API for that. - * - * Deprecated in favour of `mg_send_websocket_handshake2` - */ -void mg_send_websocket_handshake(struct mg_connection *nc, const char *uri, - const char *extra_headers); - -/* - * Send websocket handshake to the server. - * - * `nc` must be a valid connection, connected to a server. `uri` is an URI - * to fetch, `host` goes into the `Host` header, `protocol` goes into the - * `Sec-WebSocket-Proto` header (NULL to omit), extra_headers` is extra HTTP - * headers to send or `NULL`. - * - * This function is intended to be used by websocket client. - */ -void mg_send_websocket_handshake2(struct mg_connection *nc, const char *path, - const char *host, const char *protocol, - const char *extra_headers); - -/* Like mg_send_websocket_handshake2 but also passes basic auth header */ -void mg_send_websocket_handshake3(struct mg_connection *nc, const char *path, - const char *host, const char *protocol, - const char *extra_headers, const char *user, - const char *pass); -/* - * Helper function that creates an outbound WebSocket connection. - * - * `url` is a URL to connect to. It must be properly URL-encoded, e.g. have - * no spaces, etc. By default, `mg_connect_ws()` sends Connection and - * Host headers. `extra_headers` is an extra HTTP header to send, e.g. - * `"User-Agent: my-app\r\n"`. - * If `protocol` is not NULL, then a `Sec-WebSocket-Protocol` header is sent. - * - * Examples: - * - * ```c - * nc1 = mg_connect_ws(mgr, ev_handler_1, "ws://echo.websocket.org", NULL, - * NULL); - * nc2 = mg_connect_ws(mgr, ev_handler_1, "wss://echo.websocket.org", NULL, - * NULL); - * nc3 = mg_connect_ws(mgr, ev_handler_1, "ws://api.cesanta.com", - * "clubby.cesanta.com", NULL); - * ``` - */ -struct mg_connection *mg_connect_ws(struct mg_mgr *mgr, - mg_event_handler_t event_handler, - const char *url, const char *protocol, - const char *extra_headers); - -/* - * Helper function that creates an outbound WebSocket connection - * - * Mostly identical to `mg_connect_ws`, but allows to provide extra parameters - * (for example, SSL parameters) - */ -struct mg_connection *mg_connect_ws_opt(struct mg_mgr *mgr, - mg_event_handler_t ev_handler, - struct mg_connect_opts opts, - const char *url, const char *protocol, - const char *extra_headers); - -/* - * Send WebSocket frame to the remote end. - * - * `op_and_flags` specifies the frame's type. It's one of: - * - * - WEBSOCKET_OP_CONTINUE - * - WEBSOCKET_OP_TEXT - * - WEBSOCKET_OP_BINARY - * - WEBSOCKET_OP_CLOSE - * - WEBSOCKET_OP_PING - * - WEBSOCKET_OP_PONG - * - * Orred with one of the flags: - * - * - WEBSOCKET_DONT_FIN: Don't set the FIN flag on the frame to be sent. - * - * `data` and `data_len` contain frame data. - */ -void mg_send_websocket_frame(struct mg_connection *nc, int op_and_flags, - const void *data, size_t data_len); - -/* - * Sends multiple websocket frames. - * - * Like `mg_send_websocket_frame()`, but composes a frame from multiple buffers. - */ -void mg_send_websocket_framev(struct mg_connection *nc, int op_and_flags, - const struct mg_str *strings, int num_strings); - -/* - * Sends WebSocket frame to the remote end. - * - * Like `mg_send_websocket_frame()`, but allows to create formatted messages - * with `printf()`-like semantics. - */ -void mg_printf_websocket_frame(struct mg_connection *nc, int op_and_flags, - const char *fmt, ...); - -/* Websocket opcodes, from http://tools.ietf.org/html/rfc6455 */ -#define WEBSOCKET_OP_CONTINUE 0 -#define WEBSOCKET_OP_TEXT 1 -#define WEBSOCKET_OP_BINARY 2 -#define WEBSOCKET_OP_CLOSE 8 -#define WEBSOCKET_OP_PING 9 -#define WEBSOCKET_OP_PONG 10 - -/* - * If set causes the FIN flag to not be set on outbound - * frames. This enables sending multiple fragments of a single - * logical message. - * - * The WebSocket protocol mandates that if the FIN flag of a data - * frame is not set, the next frame must be a WEBSOCKET_OP_CONTINUE. - * The last frame must have the FIN bit set. - * - * Note that mongoose will automatically defragment incoming messages, - * so this flag is used only on outbound messages. - */ -#define WEBSOCKET_DONT_FIN 0x100 - -#endif /* MG_ENABLE_HTTP_WEBSOCKET */ - -/* - * Decodes a URL-encoded string. - * - * Source string is specified by (`src`, `src_len`), and destination is - * (`dst`, `dst_len`). If `is_form_url_encoded` is non-zero, then - * `+` character is decoded as a blank space character. This function - * guarantees to NUL-terminate the destination. If destination is too small, - * then the source string is partially decoded and `-1` is returned. Otherwise, - * a length of the decoded string is returned, not counting final NUL. - */ -int mg_url_decode(const char *src, int src_len, char *dst, int dst_len, - int is_form_url_encoded); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MG_ENABLE_HTTP */ - -#endif /* CS_MONGOOSE_SRC_HTTP_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/http_server.h" -#endif -/* - * === Server API reference - */ - -#ifndef CS_MONGOOSE_SRC_HTTP_SERVER_H_ -#define CS_MONGOOSE_SRC_HTTP_SERVER_H_ - -#if MG_ENABLE_HTTP - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * Parses a HTTP message. - * - * `is_req` should be set to 1 if parsing a request, 0 if reply. - * - * Returns the number of bytes parsed. If HTTP message is - * incomplete `0` is returned. On parse error, a negative number is returned. - */ -int mg_parse_http(const char *s, int n, struct http_message *hm, int is_req); - -/* - * Searches and returns the header `name` in parsed HTTP message `hm`. - * If header is not found, NULL is returned. Example: - * - * struct mg_str *host_hdr = mg_get_http_header(hm, "Host"); - */ -struct mg_str *mg_get_http_header(struct http_message *hm, const char *name); - -/* - * Parses the HTTP header `hdr`. Finds variable `var_name` and stores its value - * in the buffer `buf`, `buf_size`. Returns 0 if variable not found, non-zero - * otherwise. - * - * This function is supposed to parse cookies, authentication headers, etc. - * Example (error handling omitted): - * - * char user[20]; - * struct mg_str *hdr = mg_get_http_header(hm, "Authorization"); - * mg_http_parse_header(hdr, "username", user, sizeof(user)); - * - * Returns the length of the variable's value. If buffer is not large enough, - * or variable not found, 0 is returned. - */ -int mg_http_parse_header(struct mg_str *hdr, const char *var_name, char *buf, - size_t buf_size); - -/* - * Gets and parses the Authorization: Basic header - * Returns -1 if no Authorization header is found, or if - * mg_parse_http_basic_auth - * fails parsing the resulting header. - */ -int mg_get_http_basic_auth(struct http_message *hm, char *user, size_t user_len, - char *pass, size_t pass_len); - -/* - * Parses the Authorization: Basic header - * Returns -1 iif the authorization type is not "Basic" or any other error such - * as incorrectly encoded base64 user password pair. - */ -int mg_parse_http_basic_auth(struct mg_str *hdr, char *user, size_t user_len, - char *pass, size_t pass_len); - -/* - * Parses the buffer `buf`, `buf_len` that contains multipart form data chunks. - * Stores the chunk name in a `var_name`, `var_name_len` buffer. - * If a chunk is an uploaded file, then `file_name`, `file_name_len` is - * filled with an uploaded file name. `chunk`, `chunk_len` - * points to the chunk data. - * - * Return: number of bytes to skip to the next chunk or 0 if there are - * no more chunks. - * - * Usage example: - * - * ```c - * static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { - * switch(ev) { - * case MG_EV_HTTP_REQUEST: { - * struct http_message *hm = (struct http_message *) ev_data; - * char var_name[100], file_name[100]; - * const char *chunk; - * size_t chunk_len, n1, n2; - * - * n1 = n2 = 0; - * while ((n2 = mg_parse_multipart(hm->body.p + n1, - * hm->body.len - n1, - * var_name, sizeof(var_name), - * file_name, sizeof(file_name), - * &chunk, &chunk_len)) > 0) { - * printf("var: %s, file_name: %s, size: %d, chunk: [%.*s]\n", - * var_name, file_name, (int) chunk_len, - * (int) chunk_len, chunk); - * n1 += n2; - * } - * } - * break; - * ``` - */ -size_t mg_parse_multipart(const char *buf, size_t buf_len, char *var_name, - size_t var_name_len, char *file_name, - size_t file_name_len, const char **chunk, - size_t *chunk_len); - -/* - * Fetches a HTTP form variable. - * - * Fetches a variable `name` from a `buf` into a buffer specified by `dst`, - * `dst_len`. The destination is always zero-terminated. Returns the length of - * a fetched variable. If not found, 0 is returned. `buf` must be valid - * url-encoded buffer. If destination is too small, `-1` is returned. - */ -int mg_get_http_var(const struct mg_str *buf, const char *name, char *dst, - size_t dst_len); - -#if MG_ENABLE_FILESYSTEM -/* - * This structure defines how `mg_serve_http()` works. - * Best practice is to set only required settings, and leave the rest as NULL. - */ -struct mg_serve_http_opts { - /* Path to web root directory */ - const char *document_root; - - /* List of index files. Default is "" */ - const char *index_files; - - /* - * Leave as NULL to disable authentication. - * To enable directory protection with authentication, set this to ".htpasswd" - * Then, creating ".htpasswd" file in any directory automatically protects - * it with digest authentication. - * Use `mongoose` web server binary, or `htdigest` Apache utility to - * create/manipulate passwords file. - * Make sure `auth_domain` is set to a valid domain name. - */ - const char *per_directory_auth_file; - - /* Authorization domain (domain name of this web server) */ - const char *auth_domain; - - /* - * Leave as NULL to disable authentication. - * Normally, only selected directories in the document root are protected. - * If absolutely every access to the web server needs to be authenticated, - * regardless of the URI, set this option to the path to the passwords file. - * Format of that file is the same as ".htpasswd" file. Make sure that file - * is located outside document root to prevent people fetching it. - */ - const char *global_auth_file; - - /* Set to "no" to disable directory listing. Enabled by default. */ - const char *enable_directory_listing; - - /* - * SSI files pattern. If not set, "**.shtml$|**.shtm$" is used. - * - * All files that match ssi_pattern are treated as SSI. - * - * Server Side Includes (SSI) is a simple interpreted server-side scripting - * language which is most commonly used to include the contents of a file - * into a web page. It can be useful when it is desirable to include a common - * piece of code throughout a website, for example, headers and footers. - * - * In order for a webpage to recognize an SSI-enabled HTML file, the - * filename should end with a special extension, by default the extension - * should be either .shtml or .shtm - * - * Unknown SSI directives are silently ignored by Mongoose. Currently, - * the following SSI directives are supported: - * <!--#include FILE_TO_INCLUDE --> - * <!--#exec "COMMAND_TO_EXECUTE" --> - * <!--#call COMMAND --> - * - * Note that <!--#include ...> directive supports three path - *specifications: - * - * <!--#include virtual="path" --> Path is relative to web server root - * <!--#include abspath="path" --> Path is absolute or relative to the - * web server working dir - * <!--#include file="path" -->, Path is relative to current document - * <!--#include "path" --> - * - * The include directive may be used to include the contents of a file or - * the result of running a CGI script. - * - * The exec directive is used to execute - * a command on a server, and show command's output. Example: - * - * <!--#exec "ls -l" --> - * - * The call directive is a way to invoke a C handler from the HTML page. - * On each occurence of <!--#call COMMAND OPTIONAL_PARAMS> directive, - * Mongoose calls a registered event handler with MG_EV_SSI_CALL event, - * and event parameter will point to the COMMAND OPTIONAL_PARAMS string. - * An event handler can output any text, for example by calling - * `mg_printf()`. This is a flexible way of generating a web page on - * server side by calling a C event handler. Example: - * - * <!--#call foo --> ... <!--#call bar --> - * - * In the event handler: - * case MG_EV_SSI_CALL: { - * const char *param = (const char *) ev_data; - * if (strcmp(param, "foo") == 0) { - * mg_printf(c, "hello from foo"); - * } else if (strcmp(param, "bar") == 0) { - * mg_printf(c, "hello from bar"); - * } - * break; - * } - */ - const char *ssi_pattern; - - /* IP ACL. By default, NULL, meaning all IPs are allowed to connect */ - const char *ip_acl; - -#if MG_ENABLE_HTTP_URL_REWRITES - /* URL rewrites. - * - * Comma-separated list of `uri_pattern=url_file_or_directory_path` rewrites. - * When HTTP request is received, Mongoose constructs a file name from the - * requested URI by combining `document_root` and the URI. However, if the - * rewrite option is used and `uri_pattern` matches requested URI, then - * `document_root` is ignored. Instead, `url_file_or_directory_path` is used, - * which should be a full path name or a path relative to the web server's - * current working directory. It can also be an URI (http:// or https://) - * in which case mongoose will behave as a reverse proxy for that destination. - * - * Note that `uri_pattern`, as all Mongoose patterns, is a prefix pattern. - * - * If uri_pattern starts with `@` symbol, then Mongoose compares it with the - * HOST header of the request. If they are equal, Mongoose sets document root - * to `file_or_directory_path`, implementing virtual hosts support. - * Example: `@foo.com=/document/root/for/foo.com` - * - * If `uri_pattern` starts with `%` symbol, then Mongoose compares it with - * the listening port. If they match, then Mongoose issues a 301 redirect. - * For example, to redirect all HTTP requests to the - * HTTPS port, do `%80=https://my.site.com`. Note that the request URI is - * automatically appended to the redirect location. - */ - const char *url_rewrites; -#endif - - /* DAV document root. If NULL, DAV requests are going to fail. */ - const char *dav_document_root; - - /* - * DAV passwords file. If NULL, DAV requests are going to fail. - * If passwords file is set to "-", then DAV auth is disabled. - */ - const char *dav_auth_file; - - /* Glob pattern for the files to hide. */ - const char *hidden_file_pattern; - - /* Set to non-NULL to enable CGI, e.g. **.cgi$|**.php$" */ - const char *cgi_file_pattern; - - /* If not NULL, ignore CGI script hashbang and use this interpreter */ - const char *cgi_interpreter; - - /* - * Comma-separated list of Content-Type overrides for path suffixes, e.g. - * ".txt=text/plain; charset=utf-8,.c=text/plain" - */ - const char *custom_mime_types; - - /* - * Extra HTTP headers to add to each server response. - * Example: to enable CORS, set this to "Access-Control-Allow-Origin: *". - */ - const char *extra_headers; -}; - -/* - * Serves given HTTP request according to the `options`. - * - * Example code snippet: - * - * ```c - * static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { - * struct http_message *hm = (struct http_message *) ev_data; - * struct mg_serve_http_opts opts = { .document_root = "/var/www" }; // C99 - * - * switch (ev) { - * case MG_EV_HTTP_REQUEST: - * mg_serve_http(nc, hm, opts); - * break; - * default: - * break; - * } - * } - * ``` - */ -void mg_serve_http(struct mg_connection *nc, struct http_message *hm, - struct mg_serve_http_opts opts); - -/* - * Serves a specific file with a given MIME type and optional extra headers. - * - * Example code snippet: - * - * ```c - * static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { - * switch (ev) { - * case MG_EV_HTTP_REQUEST: { - * struct http_message *hm = (struct http_message *) ev_data; - * mg_http_serve_file(nc, hm, "file.txt", - * mg_mk_str("text/plain"), mg_mk_str("")); - * break; - * } - * ... - * } - * } - * ``` - */ -void mg_http_serve_file(struct mg_connection *nc, struct http_message *hm, - const char *path, const struct mg_str mime_type, - const struct mg_str extra_headers); - -#if MG_ENABLE_HTTP_STREAMING_MULTIPART - -/* Callback prototype for `mg_file_upload_handler()`. */ -typedef struct mg_str (*mg_fu_fname_fn)(struct mg_connection *nc, - struct mg_str fname); - -/* - * File upload handler. - * This handler can be used to implement file uploads with minimum code. - * This handler will process MG_EV_HTTP_PART_* events and store file data into - * a local file. - * `local_name_fn` will be invoked with whatever name was provided by the client - * and will expect the name of the local file to open. A return value of NULL - * will abort file upload (client will get a "403 Forbidden" response). If - * non-null, the returned string must be heap-allocated and will be freed by - * the caller. - * Exception: it is ok to return the same string verbatim. - * - * Example: - * - * ```c - * struct mg_str upload_fname(struct mg_connection *nc, struct mg_str fname) { - * // Just return the same filename. Do not actually do this except in test! - * // fname is user-controlled and needs to be sanitized. - * return fname; - * } - * void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { - * switch (ev) { - * ... - * case MG_EV_HTTP_PART_BEGIN: - * case MG_EV_HTTP_PART_DATA: - * case MG_EV_HTTP_PART_END: - * mg_file_upload_handler(nc, ev, ev_data, upload_fname); - * break; - * } - * } - * ``` - */ -void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data, - mg_fu_fname_fn local_name_fn); -#endif /* MG_ENABLE_HTTP_STREAMING_MULTIPART */ -#endif /* MG_ENABLE_FILESYSTEM */ - -/* - * Registers a callback for a specified http endpoint - * Note: if callback is registered it is called instead of the - * callback provided in mg_bind - * - * Example code snippet: - * - * ```c - * static void handle_hello1(struct mg_connection *nc, int ev, void *ev_data) { - * (void) ev; (void) ev_data; - * mg_printf(nc, "HTTP/1.0 200 OK\r\n\r\n[I am Hello1]"); - * nc->flags |= MG_F_SEND_AND_CLOSE; - * } - * - * static void handle_hello1(struct mg_connection *nc, int ev, void *ev_data) { - * (void) ev; (void) ev_data; - * mg_printf(nc, "HTTP/1.0 200 OK\r\n\r\n[I am Hello2]"); - * nc->flags |= MG_F_SEND_AND_CLOSE; - * } - * - * void init() { - * nc = mg_bind(&mgr, local_addr, cb1); - * mg_register_http_endpoint(nc, "/hello1", handle_hello1); - * mg_register_http_endpoint(nc, "/hello1/hello2", handle_hello2); - * } - * ``` - */ -void mg_register_http_endpoint(struct mg_connection *nc, const char *uri_path, - mg_event_handler_t handler); - -/* - * Authenticates a HTTP request against an opened password file. - * Returns 1 if authenticated, 0 otherwise. - */ -int mg_http_check_digest_auth(struct http_message *hm, const char *auth_domain, - FILE *fp); - -/* - * Sends buffer `buf` of size `len` to the client using chunked HTTP encoding. - * This function sends the buffer size as hex number + newline first, then - * the buffer itself, then the newline. For example, - * `mg_send_http_chunk(nc, "foo", 3)` whill append the `3\r\nfoo\r\n` string - * to the `nc->send_mbuf` output IO buffer. - * - * NOTE: The HTTP header "Transfer-Encoding: chunked" should be sent prior to - * using this function. - * - * NOTE: do not forget to send an empty chunk at the end of the response, - * to tell the client that everything was sent. Example: - * - * ``` - * mg_printf_http_chunk(nc, "%s", "my response!"); - * mg_send_http_chunk(nc, "", 0); // Tell the client we're finished - * ``` - */ -void mg_send_http_chunk(struct mg_connection *nc, const char *buf, size_t len); - -/* - * Sends a printf-formatted HTTP chunk. - * Functionality is similar to `mg_send_http_chunk()`. - */ -void mg_printf_http_chunk(struct mg_connection *nc, const char *fmt, ...); - -/* - * Sends the response status line. - * If `extra_headers` is not NULL, then `extra_headers` are also sent - * after the reponse line. `extra_headers` must NOT end end with new line. - * Example: - * - * mg_send_response_line(nc, 200, "Access-Control-Allow-Origin: *"); - * - * Will result in: - * - * HTTP/1.1 200 OK\r\n - * Access-Control-Allow-Origin: *\r\n - */ -void mg_send_response_line(struct mg_connection *nc, int status_code, - const char *extra_headers); - -/* - * Sends an error response. If reason is NULL, the message will be inferred - * from the error code (if supported). - */ -void mg_http_send_error(struct mg_connection *nc, int code, const char *reason); - -/* - * Sends a redirect response. - * `status_code` should be either 301 or 302 and `location` point to the - * new location. - * If `extra_headers` is not empty, then `extra_headers` are also sent - * after the reponse line. `extra_headers` must NOT end end with new line. - * - * Example: - * - * mg_http_send_redirect(nc, 302, mg_mk_str("/login"), mg_mk_str(NULL)); - */ -void mg_http_send_redirect(struct mg_connection *nc, int status_code, - const struct mg_str location, - const struct mg_str extra_headers); - -/* - * Sends the response line and headers. - * This function sends the response line with the `status_code`, and - * automatically - * sends one header: either "Content-Length" or "Transfer-Encoding". - * If `content_length` is negative, then "Transfer-Encoding: chunked" header - * is sent, otherwise, "Content-Length" header is sent. - * - * NOTE: If `Transfer-Encoding` is `chunked`, then message body must be sent - * using `mg_send_http_chunk()` or `mg_printf_http_chunk()` functions. - * Otherwise, `mg_send()` or `mg_printf()` must be used. - * Extra headers could be set through `extra_headers`. Note `extra_headers` - * must NOT be terminated by a new line. - */ -void mg_send_head(struct mg_connection *n, int status_code, - int64_t content_length, const char *extra_headers); - -/* - * Sends a printf-formatted HTTP chunk, escaping HTML tags. - */ -void mg_printf_html_escape(struct mg_connection *nc, const char *fmt, ...); - -#if MG_ENABLE_HTTP_URL_REWRITES -/* - * Proxies a given request to a given upstream http server. The path prefix - * in `mount` will be stripped of the path requested to the upstream server, - * e.g. if mount is /api and upstream is http://localhost:8001/foo - * then an incoming request to /api/bar will cause a request to - * http://localhost:8001/foo/bar - * - * EXPERIMENTAL API. Please use http_serve_http + url_rewrites if a static - * mapping is good enough. - */ -void mg_http_reverse_proxy(struct mg_connection *nc, - const struct http_message *hm, struct mg_str mount, - struct mg_str upstream); -#endif - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MG_ENABLE_HTTP */ - -#endif /* CS_MONGOOSE_SRC_HTTP_SERVER_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/http_client.h" -#endif -/* - * === Client API reference - */ - -#ifndef CS_MONGOOSE_SRC_HTTP_CLIENT_H_ -#define CS_MONGOOSE_SRC_HTTP_CLIENT_H_ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * Helper function that creates an outbound HTTP connection. - * - * `url` is the URL to fetch. It must be properly URL-encoded, e.g. have - * no spaces, etc. By default, `mg_connect_http()` sends the Connection and - * Host headers. `extra_headers` is an extra HTTP header to send, e.g. - * `"User-Agent: my-app\r\n"`. - * If `post_data` is NULL, then a GET request is created. Otherwise, a POST - * request is created with the specified POST data. Note that if the data being - * posted is a form submission, the `Content-Type` header should be set - * accordingly (see example below). - * - * Examples: - * - * ```c - * nc1 = mg_connect_http(mgr, ev_handler_1, "http://www.google.com", NULL, - * NULL); - * nc2 = mg_connect_http(mgr, ev_handler_1, "https://github.com", NULL, NULL); - * nc3 = mg_connect_http( - * mgr, ev_handler_1, "my_server:8000/form_submit/", - * "Content-Type: application/x-www-form-urlencoded\r\n", - * "var_1=value_1&var_2=value_2"); - * ``` - */ -struct mg_connection *mg_connect_http(struct mg_mgr *mgr, - mg_event_handler_t event_handler, - const char *url, - const char *extra_headers, - const char *post_data); - -/* - * Helper function that creates an outbound HTTP connection. - * - * Mostly identical to mg_connect_http, but allows you to provide extra - *parameters - * (for example, SSL parameters) - */ -struct mg_connection *mg_connect_http_opt(struct mg_mgr *mgr, - mg_event_handler_t ev_handler, - struct mg_connect_opts opts, - const char *url, - const char *extra_headers, - const char *post_data); - -/* Creates digest authentication header for a client request. */ -int mg_http_create_digest_auth_header(char *buf, size_t buf_len, - const char *method, const char *uri, - const char *auth_domain, const char *user, - const char *passwd); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* CS_MONGOOSE_SRC_HTTP_CLIENT_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/mqtt.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - * This software is dual-licensed: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. For the terms of this - * license, see . - * - * You are free to use this software under the terms of the GNU General - * Public License, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * Alternatively, you can license this software under a commercial - * license, as set out in . - */ - -/* - * === MQTT API reference - */ - -#ifndef CS_MONGOOSE_SRC_MQTT_H_ -#define CS_MONGOOSE_SRC_MQTT_H_ - -/* Amalgamated: #include "mongoose/src/net.h" */ - -struct mg_mqtt_message { - int cmd; - int qos; - struct mg_str topic; - struct mg_str payload; - - uint8_t connack_ret_code; /* connack */ - uint16_t message_id; /* puback */ - - /* connect */ - uint8_t protocol_version; - uint8_t connect_flags; - uint16_t keep_alive_timer; - struct mg_str protocol_name; - struct mg_str client_id; - struct mg_str will_topic; - struct mg_str will_message; - struct mg_str user_name; - struct mg_str password; -}; - -struct mg_mqtt_topic_expression { - const char *topic; - uint8_t qos; -}; - -struct mg_send_mqtt_handshake_opts { - unsigned char flags; /* connection flags */ - uint16_t keep_alive; - const char *will_topic; - const char *will_message; - const char *user_name; - const char *password; -}; - -/* mg_mqtt_proto_data should be in header to allow external access to it */ -struct mg_mqtt_proto_data { - uint16_t keep_alive; -}; - -/* Message types */ -#define MG_MQTT_CMD_CONNECT 1 -#define MG_MQTT_CMD_CONNACK 2 -#define MG_MQTT_CMD_PUBLISH 3 -#define MG_MQTT_CMD_PUBACK 4 -#define MG_MQTT_CMD_PUBREC 5 -#define MG_MQTT_CMD_PUBREL 6 -#define MG_MQTT_CMD_PUBCOMP 7 -#define MG_MQTT_CMD_SUBSCRIBE 8 -#define MG_MQTT_CMD_SUBACK 9 -#define MG_MQTT_CMD_UNSUBSCRIBE 10 -#define MG_MQTT_CMD_UNSUBACK 11 -#define MG_MQTT_CMD_PINGREQ 12 -#define MG_MQTT_CMD_PINGRESP 13 -#define MG_MQTT_CMD_DISCONNECT 14 - -/* MQTT event types */ -#define MG_MQTT_EVENT_BASE 200 -#define MG_EV_MQTT_CONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNECT) -#define MG_EV_MQTT_CONNACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNACK) -#define MG_EV_MQTT_PUBLISH (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBLISH) -#define MG_EV_MQTT_PUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBACK) -#define MG_EV_MQTT_PUBREC (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREC) -#define MG_EV_MQTT_PUBREL (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREL) -#define MG_EV_MQTT_PUBCOMP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBCOMP) -#define MG_EV_MQTT_SUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBSCRIBE) -#define MG_EV_MQTT_SUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBACK) -#define MG_EV_MQTT_UNSUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBSCRIBE) -#define MG_EV_MQTT_UNSUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBACK) -#define MG_EV_MQTT_PINGREQ (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGREQ) -#define MG_EV_MQTT_PINGRESP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGRESP) -#define MG_EV_MQTT_DISCONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_DISCONNECT) - -/* Message flags */ -#define MG_MQTT_RETAIN 0x1 -#define MG_MQTT_DUP 0x4 -#define MG_MQTT_QOS(qos) ((qos) << 1) -#define MG_MQTT_GET_QOS(flags) (((flags) &0x6) >> 1) -#define MG_MQTT_SET_QOS(flags, qos) (flags) = ((flags) & ~0x6) | ((qos) << 1) - -/* Connection flags */ -#define MG_MQTT_CLEAN_SESSION 0x02 -#define MG_MQTT_HAS_WILL 0x04 -#define MG_MQTT_WILL_RETAIN 0x20 -#define MG_MQTT_HAS_PASSWORD 0x40 -#define MG_MQTT_HAS_USER_NAME 0x80 -#define MG_MQTT_GET_WILL_QOS(flags) (((flags) &0x18) >> 3) -#define MG_MQTT_SET_WILL_QOS(flags, qos) \ - (flags) = ((flags) & ~0x18) | ((qos) << 3) - -/* CONNACK return codes */ -#define MG_EV_MQTT_CONNACK_ACCEPTED 0 -#define MG_EV_MQTT_CONNACK_UNACCEPTABLE_VERSION 1 -#define MG_EV_MQTT_CONNACK_IDENTIFIER_REJECTED 2 -#define MG_EV_MQTT_CONNACK_SERVER_UNAVAILABLE 3 -#define MG_EV_MQTT_CONNACK_BAD_AUTH 4 -#define MG_EV_MQTT_CONNACK_NOT_AUTHORIZED 5 - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * Attaches a built-in MQTT event handler to the given connection. - * - * The user-defined event handler will receive following extra events: - * - * - MG_EV_MQTT_CONNACK - * - MG_EV_MQTT_PUBLISH - * - MG_EV_MQTT_PUBACK - * - MG_EV_MQTT_PUBREC - * - MG_EV_MQTT_PUBREL - * - MG_EV_MQTT_PUBCOMP - * - MG_EV_MQTT_SUBACK - */ -void mg_set_protocol_mqtt(struct mg_connection *nc); - -/* Sends an MQTT handshake. */ -void mg_send_mqtt_handshake(struct mg_connection *nc, const char *client_id); - -/* Sends an MQTT handshake with optional parameters. */ -void mg_send_mqtt_handshake_opt(struct mg_connection *nc, const char *client_id, - struct mg_send_mqtt_handshake_opts); - -/* Publishes a message to a given topic. */ -void mg_mqtt_publish(struct mg_connection *nc, const char *topic, - uint16_t message_id, int flags, const void *data, - size_t len); - -/* Subscribes to a bunch of topics. */ -void mg_mqtt_subscribe(struct mg_connection *nc, - const struct mg_mqtt_topic_expression *topics, - size_t topics_len, uint16_t message_id); - -/* Unsubscribes from a bunch of topics. */ -void mg_mqtt_unsubscribe(struct mg_connection *nc, char **topics, - size_t topics_len, uint16_t message_id); - -/* Sends a DISCONNECT command. */ -void mg_mqtt_disconnect(struct mg_connection *nc); - -/* Sends a CONNACK command with a given `return_code`. */ -void mg_mqtt_connack(struct mg_connection *nc, uint8_t return_code); - -/* Sends a PUBACK command with a given `message_id`. */ -void mg_mqtt_puback(struct mg_connection *nc, uint16_t message_id); - -/* Sends a PUBREC command with a given `message_id`. */ -void mg_mqtt_pubrec(struct mg_connection *nc, uint16_t message_id); - -/* Sends a PUBREL command with a given `message_id`. */ -void mg_mqtt_pubrel(struct mg_connection *nc, uint16_t message_id); - -/* Sends a PUBCOMP command with a given `message_id`. */ -void mg_mqtt_pubcomp(struct mg_connection *nc, uint16_t message_id); - -/* - * Sends a SUBACK command with a given `message_id` - * and a sequence of granted QoSs. - */ -void mg_mqtt_suback(struct mg_connection *nc, uint8_t *qoss, size_t qoss_len, - uint16_t message_id); - -/* Sends a UNSUBACK command with a given `message_id`. */ -void mg_mqtt_unsuback(struct mg_connection *nc, uint16_t message_id); - -/* Sends a PINGREQ command. */ -void mg_mqtt_ping(struct mg_connection *nc); - -/* Sends a PINGRESP command. */ -void mg_mqtt_pong(struct mg_connection *nc); - -/* - * Extracts the next topic expression from a SUBSCRIBE command payload. - * - * The topic expression name will point to a string in the payload buffer. - * Returns the pos of the next topic expression or -1 when the list - * of topics is exhausted. - */ -int mg_mqtt_next_subscribe_topic(struct mg_mqtt_message *msg, - struct mg_str *topic, uint8_t *qos, int pos); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CS_MONGOOSE_SRC_MQTT_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/mqtt_server.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - * This software is dual-licensed: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. For the terms of this - * license, see . - * - * You are free to use this software under the terms of the GNU General - * Public License, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * Alternatively, you can license this software under a commercial - * license, as set out in . - */ - -/* - * === MQTT Server API reference - */ - -#ifndef CS_MONGOOSE_SRC_MQTT_BROKER_H_ -#define CS_MONGOOSE_SRC_MQTT_BROKER_H_ - -#if MG_ENABLE_MQTT_BROKER - -/* Amalgamated: #include "common/queue.h" */ -/* Amalgamated: #include "mongoose/src/mqtt.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define MG_MQTT_MAX_SESSION_SUBSCRIPTIONS 512; - -struct mg_mqtt_broker; - -/* MQTT session (Broker side). */ -struct mg_mqtt_session { - struct mg_mqtt_broker *brk; /* Broker */ - LIST_ENTRY(mg_mqtt_session) link; /* mg_mqtt_broker::sessions linkage */ - struct mg_connection *nc; /* Connection with the client */ - size_t num_subscriptions; /* Size of `subscriptions` array */ - void *user_data; /* User data */ - struct mg_mqtt_topic_expression *subscriptions; -}; - -/* MQTT broker. */ -struct mg_mqtt_broker { - LIST_HEAD(_mg_sesshead, mg_mqtt_session) sessions; /* Session list */ - void *user_data; /* User data */ -}; - -/* Initialises a MQTT broker. */ -void mg_mqtt_broker_init(struct mg_mqtt_broker *brk, void *user_data); - -/* - * Processes a MQTT broker message. - * - * The listening connection expects a pointer to an initialised - * `mg_mqtt_broker` structure in the `user_data` field. - * - * Basic usage: - * - * ```c - * mg_mqtt_broker_init(&brk, NULL); - * - * if ((nc = mg_bind(&mgr, address, mg_mqtt_broker)) == NULL) { - * // fail; - * } - * nc->user_data = &brk; - * ``` - * - * New incoming connections will receive a `mg_mqtt_session` structure - * in the connection `user_data`. The original `user_data` will be stored - * in the `user_data` field of the session structure. This allows the user - * handler to store user data before `mg_mqtt_broker` creates the session. - * - * Since only the MG_EV_ACCEPT message is processed by the listening socket, - * for most events the `user_data` will thus point to a `mg_mqtt_session`. - */ -void mg_mqtt_broker(struct mg_connection *brk, int ev, void *data); - -/* - * Iterates over all MQTT session connections. Example: - * - * ```c - * struct mg_mqtt_session *s; - * for (s = mg_mqtt_next(brk, NULL); s != NULL; s = mg_mqtt_next(brk, s)) { - * // Do something - * } - * ``` - */ -struct mg_mqtt_session *mg_mqtt_next(struct mg_mqtt_broker *brk, - struct mg_mqtt_session *s); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MG_ENABLE_MQTT_BROKER */ -#endif /* CS_MONGOOSE_SRC_MQTT_BROKER_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/dns.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* - * === DNS API reference - */ - -#ifndef CS_MONGOOSE_SRC_DNS_H_ -#define CS_MONGOOSE_SRC_DNS_H_ - -/* Amalgamated: #include "mongoose/src/net.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define MG_DNS_A_RECORD 0x01 /* Lookup IP address */ -#define MG_DNS_CNAME_RECORD 0x05 /* Lookup CNAME */ -#define MG_DNS_PTR_RECORD 0x0c /* Lookup PTR */ -#define MG_DNS_TXT_RECORD 0x10 /* Lookup TXT */ -#define MG_DNS_AAAA_RECORD 0x1c /* Lookup IPv6 address */ -#define MG_DNS_SRV_RECORD 0x21 /* Lookup SRV */ -#define MG_DNS_MX_RECORD 0x0f /* Lookup mail server for domain */ - -#define MG_MAX_DNS_QUESTIONS 32 -#define MG_MAX_DNS_ANSWERS 32 - -#define MG_DNS_MESSAGE 100 /* High-level DNS message event */ - -enum mg_dns_resource_record_kind { - MG_DNS_INVALID_RECORD = 0, - MG_DNS_QUESTION, - MG_DNS_ANSWER -}; - -/* DNS resource record. */ -struct mg_dns_resource_record { - struct mg_str name; /* buffer with compressed name */ - int rtype; - int rclass; - int ttl; - enum mg_dns_resource_record_kind kind; - struct mg_str rdata; /* protocol data (can be a compressed name) */ -}; - -/* DNS message (request and response). */ -struct mg_dns_message { - struct mg_str pkt; /* packet body */ - uint16_t flags; - uint16_t transaction_id; - int num_questions; - int num_answers; - struct mg_dns_resource_record questions[MG_MAX_DNS_QUESTIONS]; - struct mg_dns_resource_record answers[MG_MAX_DNS_ANSWERS]; -}; - -struct mg_dns_resource_record *mg_dns_next_record( - struct mg_dns_message *msg, int query, struct mg_dns_resource_record *prev); - -/* - * Parses the record data from a DNS resource record. - * - * - A: struct in_addr *ina - * - AAAA: struct in6_addr *ina - * - CNAME: char buffer - * - * Returns -1 on error. - * - * TODO(mkm): MX - */ -int mg_dns_parse_record_data(struct mg_dns_message *msg, - struct mg_dns_resource_record *rr, void *data, - size_t data_len); - -/* - * Sends a DNS query to the remote end. - */ -void mg_send_dns_query(struct mg_connection *nc, const char *name, - int query_type); - -/* - * Inserts a DNS header to an IO buffer. - * - * Returns the number of bytes inserted. - */ -int mg_dns_insert_header(struct mbuf *io, size_t pos, - struct mg_dns_message *msg); - -/* - * Appends already encoded questions from an existing message. - * - * This is useful when generating a DNS reply message which includes - * all question records. - * - * Returns the number of appended bytes. - */ -int mg_dns_copy_questions(struct mbuf *io, struct mg_dns_message *msg); - -/* - * Encodes and appends a DNS resource record to an IO buffer. - * - * The record metadata is taken from the `rr` parameter, while the name and data - * are taken from the parameters, encoded in the appropriate format depending on - * record type and stored in the IO buffer. The encoded values might contain - * offsets within the IO buffer. It's thus important that the IO buffer doesn't - * get trimmed while a sequence of records are encoded while preparing a DNS - * reply. - * - * This function doesn't update the `name` and `rdata` pointers in the `rr` - * struct because they might be invalidated as soon as the IO buffer grows - * again. - * - * Returns the number of bytes appened or -1 in case of error. - */ -int mg_dns_encode_record(struct mbuf *io, struct mg_dns_resource_record *rr, - const char *name, size_t nlen, const void *rdata, - size_t rlen); - -/* - * Encodes a DNS name. - */ -int mg_dns_encode_name(struct mbuf *io, const char *name, size_t len); - -/* Low-level: parses a DNS response. */ -int mg_parse_dns(const char *buf, int len, struct mg_dns_message *msg); - -/* - * Uncompresses a DNS compressed name. - * - * The containing DNS message is required because of the compressed encoding - * and reference suffixes present elsewhere in the packet. - * - * If the name is less than `dst_len` characters long, the remainder - * of `dst` is terminated with `\0` characters. Otherwise, `dst` is not - * terminated. - * - * If `dst_len` is 0 `dst` can be NULL. - * Returns the uncompressed name length. - */ -size_t mg_dns_uncompress_name(struct mg_dns_message *msg, struct mg_str *name, - char *dst, int dst_len); - -/* - * Attaches a built-in DNS event handler to the given listening connection. - * - * The DNS event handler parses the incoming UDP packets, treating them as DNS - * requests. If an incoming packet gets successfully parsed by the DNS event - * handler, a user event handler will receive an `MG_DNS_REQUEST` event, with - * `ev_data` pointing to the parsed `struct mg_dns_message`. - * - * See - * [captive_dns_server](https://github.com/cesanta/mongoose/tree/master/examples/captive_dns_server) - * example on how to handle DNS request and send DNS reply. - */ -void mg_set_protocol_dns(struct mg_connection *nc); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* CS_MONGOOSE_SRC_DNS_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/dns_server.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* - * === DNS server API reference - * - * Disabled by default; enable with `-DMG_ENABLE_DNS_SERVER`. - */ - -#ifndef CS_MONGOOSE_SRC_DNS_SERVER_H_ -#define CS_MONGOOSE_SRC_DNS_SERVER_H_ - -#if MG_ENABLE_DNS_SERVER - -/* Amalgamated: #include "mongoose/src/dns.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define MG_DNS_SERVER_DEFAULT_TTL 3600 - -struct mg_dns_reply { - struct mg_dns_message *msg; - struct mbuf *io; - size_t start; -}; - -/* - * Creates a DNS reply. - * - * The reply will be based on an existing query message `msg`. - * The query body will be appended to the output buffer. - * "reply + recursion allowed" will be added to the message flags and the - * message's num_answers will be set to 0. - * - * Answer records can be appended with `mg_dns_send_reply` or by lower - * level function defined in the DNS API. - * - * In order to send a reply use `mg_dns_send_reply`. - * It's possible to use a connection's send buffer as reply buffer, - * and it will work for both UDP and TCP connections. - * - * Example: - * - * ```c - * reply = mg_dns_create_reply(&nc->send_mbuf, msg); - * for (i = 0; i < msg->num_questions; i++) { - * rr = &msg->questions[i]; - * if (rr->rtype == MG_DNS_A_RECORD) { - * mg_dns_reply_record(&reply, rr, 3600, &dummy_ip_addr, 4); - * } - * } - * mg_dns_send_reply(nc, &reply); - * ``` - */ -struct mg_dns_reply mg_dns_create_reply(struct mbuf *io, - struct mg_dns_message *msg); - -/* - * Appends a DNS reply record to the IO buffer and to the DNS message. - * - * The message's num_answers field will be incremented. It's the caller's duty - * to ensure num_answers is properly initialised. - * - * Returns -1 on error. - */ -int mg_dns_reply_record(struct mg_dns_reply *reply, - struct mg_dns_resource_record *question, - const char *name, int rtype, int ttl, const void *rdata, - size_t rdata_len); - -/* - * Sends a DNS reply through a connection. - * - * The DNS data is stored in an IO buffer pointed by reply structure in `r`. - * This function mutates the content of that buffer in order to ensure that - * the DNS header reflects the size and flags of the message, that might have - * been updated either with `mg_dns_reply_record` or by direct manipulation of - * `r->message`. - * - * Once sent, the IO buffer will be trimmed unless the reply IO buffer - * is the connection's send buffer and the connection is not in UDP mode. - */ -void mg_dns_send_reply(struct mg_connection *nc, struct mg_dns_reply *r); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MG_ENABLE_DNS_SERVER */ -#endif /* CS_MONGOOSE_SRC_DNS_SERVER_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/resolv.h" -#endif -/* - * Copyright (c) 2014 Cesanta Software Limited - * All rights reserved - */ - -/* - * === API reference - */ - -#ifndef CS_MONGOOSE_SRC_RESOLV_H_ -#define CS_MONGOOSE_SRC_RESOLV_H_ - -/* Amalgamated: #include "mongoose/src/dns.h" */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -enum mg_resolve_err { - MG_RESOLVE_OK = 0, - MG_RESOLVE_NO_ANSWERS = 1, - MG_RESOLVE_EXCEEDED_RETRY_COUNT = 2, - MG_RESOLVE_TIMEOUT = 3 -}; - -typedef void (*mg_resolve_callback_t)(struct mg_dns_message *dns_message, - void *user_data, enum mg_resolve_err); - -/* Options for `mg_resolve_async_opt`. */ -struct mg_resolve_async_opts { - const char *nameserver_url; - int max_retries; /* defaults to 2 if zero */ - int timeout; /* in seconds; defaults to 5 if zero */ - int accept_literal; /* pseudo-resolve literal ipv4 and ipv6 addrs */ - int only_literal; /* only resolves literal addrs; sync cb invocation */ - struct mg_connection **dns_conn; /* return DNS connection */ -}; - -/* See `mg_resolve_async_opt()` */ -int mg_resolve_async(struct mg_mgr *mgr, const char *name, int query, - mg_resolve_callback_t cb, void *data); - -/* - * Resolved a DNS name asynchronously. - * - * Upon successful resolution, the user callback will be invoked - * with the full DNS response message and a pointer to the user's - * context `data`. - * - * In case of timeout while performing the resolution the callback - * will receive a NULL `msg`. - * - * The DNS answers can be extracted with `mg_next_record` and - * `mg_dns_parse_record_data`: - * - * [source,c] - * ---- - * struct in_addr ina; - * struct mg_dns_resource_record *rr = mg_next_record(msg, MG_DNS_A_RECORD, - * NULL); - * mg_dns_parse_record_data(msg, rr, &ina, sizeof(ina)); - * ---- - */ -int mg_resolve_async_opt(struct mg_mgr *mgr, const char *name, int query, - mg_resolve_callback_t cb, void *data, - struct mg_resolve_async_opts opts); - -/* - * Resolve a name from `/etc/hosts`. - * - * Returns 0 on success, -1 on failure. - */ -int mg_resolve_from_hosts_file(const char *host, union socket_address *usa); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* CS_MONGOOSE_SRC_RESOLV_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/coap.h" -#endif -/* - * Copyright (c) 2015 Cesanta Software Limited - * All rights reserved - * This software is dual-licensed: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. For the terms of this - * license, see . - * - * You are free to use this software under the terms of the GNU General - * Public License, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * Alternatively, you can license this software under a commercial - * license, as set out in . - */ - -/* - * === CoAP API reference - * - * CoAP message format: - * - * ``` - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - * |Ver| T | TKL | Code | Message ID | Token (if any, TKL bytes) ... - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - * | Options (if any) ... |1 1 1 1 1 1 1 1| Payload (if any) ... - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - * ``` - */ - -#ifndef CS_MONGOOSE_SRC_COAP_H_ -#define CS_MONGOOSE_SRC_COAP_H_ - -#if MG_ENABLE_COAP - -#define MG_COAP_MSG_TYPE_FIELD 0x2 -#define MG_COAP_CODE_CLASS_FIELD 0x4 -#define MG_COAP_CODE_DETAIL_FIELD 0x8 -#define MG_COAP_MSG_ID_FIELD 0x10 -#define MG_COAP_TOKEN_FIELD 0x20 -#define MG_COAP_OPTIOMG_FIELD 0x40 -#define MG_COAP_PAYLOAD_FIELD 0x80 - -#define MG_COAP_ERROR 0x10000 -#define MG_COAP_FORMAT_ERROR (MG_COAP_ERROR | 0x20000) -#define MG_COAP_IGNORE (MG_COAP_ERROR | 0x40000) -#define MG_COAP_NOT_ENOUGH_DATA (MG_COAP_ERROR | 0x80000) -#define MG_COAP_NETWORK_ERROR (MG_COAP_ERROR | 0x100000) - -#define MG_COAP_MSG_CON 0 -#define MG_COAP_MSG_NOC 1 -#define MG_COAP_MSG_ACK 2 -#define MG_COAP_MSG_RST 3 -#define MG_COAP_MSG_MAX 3 - -#define MG_COAP_CODECLASS_REQUEST 0 -#define MG_COAP_CODECLASS_RESP_OK 2 -#define MG_COAP_CODECLASS_CLIENT_ERR 4 -#define MG_COAP_CODECLASS_SRV_ERR 5 - -#define MG_COAP_EVENT_BASE 300 -#define MG_EV_COAP_CON (MG_COAP_EVENT_BASE + MG_COAP_MSG_CON) -#define MG_EV_COAP_NOC (MG_COAP_EVENT_BASE + MG_COAP_MSG_NOC) -#define MG_EV_COAP_ACK (MG_COAP_EVENT_BASE + MG_COAP_MSG_ACK) -#define MG_EV_COAP_RST (MG_COAP_EVENT_BASE + MG_COAP_MSG_RST) - -/* - * CoAP options. - * Use mg_coap_add_option and mg_coap_free_options - * for creation and destruction. - */ -struct mg_coap_option { - struct mg_coap_option *next; - uint32_t number; - struct mg_str value; -}; - -/* CoAP message. See RFC 7252 for details. */ -struct mg_coap_message { - uint32_t flags; - uint8_t msg_type; - uint8_t code_class; - uint8_t code_detail; - uint16_t msg_id; - struct mg_str token; - struct mg_coap_option *options; - struct mg_str payload; - struct mg_coap_option *optiomg_tail; -}; - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Sets CoAP protocol handler - triggers CoAP specific events. */ -int mg_set_protocol_coap(struct mg_connection *nc); - -/* - * Adds a new option to mg_coap_message structure. - * Returns pointer to the newly created option. - * Note: options must be freed by using mg_coap_free_options - */ -struct mg_coap_option *mg_coap_add_option(struct mg_coap_message *cm, - uint32_t number, char *value, - size_t len); - -/* - * Frees the memory allocated for options. - * If the cm paramater doesn't contain any option it does nothing. - */ -void mg_coap_free_options(struct mg_coap_message *cm); - -/* - * Composes a CoAP message from `mg_coap_message` - * and sends it into `nc` connection. - * Returns 0 on success. On error, it is a bitmask: - * - * - `#define MG_COAP_ERROR 0x10000` - * - `#define MG_COAP_FORMAT_ERROR (MG_COAP_ERROR | 0x20000)` - * - `#define MG_COAP_IGNORE (MG_COAP_ERROR | 0x40000)` - * - `#define MG_COAP_NOT_ENOUGH_DATA (MG_COAP_ERROR | 0x80000)` - * - `#define MG_COAP_NETWORK_ERROR (MG_COAP_ERROR | 0x100000)` - */ -uint32_t mg_coap_send_message(struct mg_connection *nc, - struct mg_coap_message *cm); - -/* - * Composes CoAP acknowledgement from `mg_coap_message` - * and sends it into `nc` connection. - * Return value: see `mg_coap_send_message()` - */ -uint32_t mg_coap_send_ack(struct mg_connection *nc, uint16_t msg_id); - -/* - * Parses CoAP message and fills mg_coap_message and returns cm->flags. - * This is a helper function. - * - * NOTE: usually CoAP works over UDP, so lack of data means format error. - * But, in theory, it is possible to use CoAP over TCP (according to RFC) - * - * The caller has to check results and treat COAP_NOT_ENOUGH_DATA according to - * underlying protocol: - * - * - in case of UDP COAP_NOT_ENOUGH_DATA means COAP_FORMAT_ERROR, - * - in case of TCP client can try to receive more data - * - * Return value: see `mg_coap_send_message()` - */ -uint32_t mg_coap_parse(struct mbuf *io, struct mg_coap_message *cm); - -/* - * Composes CoAP message from mg_coap_message structure. - * This is a helper function. - * Return value: see `mg_coap_send_message()` - */ -uint32_t mg_coap_compose(struct mg_coap_message *cm, struct mbuf *io); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MG_ENABLE_COAP */ - -#endif /* CS_MONGOOSE_SRC_COAP_H_ */ -#ifdef MG_MODULE_LINES -#line 1 "mongoose/src/sntp.h" -#endif -/* - * Copyright (c) 2016 Cesanta Software Limited - * All rights reserved - */ - -#ifndef CS_MONGOOSE_SRC_SNTP_H_ -#define CS_MONGOOSE_SRC_SNTP_H_ - -#if MG_ENABLE_SNTP - -#define MG_SNTP_EVENT_BASE 500 - -/* - * Received reply from time server. Event handler parameter contains - * pointer to mg_sntp_message structure - */ -#define MG_SNTP_REPLY (MG_SNTP_EVENT_BASE + 1) - -/* Received malformed SNTP packet */ -#define MG_SNTP_MALFORMED_REPLY (MG_SNTP_EVENT_BASE + 2) - -/* Failed to get time from server (timeout etc) */ -#define MG_SNTP_FAILED (MG_SNTP_EVENT_BASE + 3) - -struct mg_sntp_message { - /* if server sends this flags, user should not send requests to it */ - int kiss_of_death; - /* usual mg_time */ - double time; -}; - -/* Establishes connection to given sntp server */ -struct mg_connection *mg_sntp_connect(struct mg_mgr *mgr, - mg_event_handler_t event_handler, - const char *sntp_server_name); - -/* Sends time request to given connection */ -void mg_sntp_send_request(struct mg_connection *c); - -/* - * Helper function - * Establishes connection to time server, tries to send request - * repeats sending SNTP_ATTEMPTS times every SNTP_TIMEOUT sec - * (if needed) - * See sntp_client example - */ -struct mg_connection *mg_sntp_get_time(struct mg_mgr *mgr, - mg_event_handler_t event_handler, - const char *sntp_server_name); - -#endif - -#endif /* CS_MONGOOSE_SRC_SNTP_H_ */ diff --git a/components/oap-wifi/server.c b/components/oap-wifi/server.c deleted file mode 100644 index d06b135..0000000 --- a/components/oap-wifi/server.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * server.c - * - * Created on: Oct 4, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -#include "server.h" -#include -#include -#include -#include -#include "esp_err.h" -#include "oap_common.h" - -#define tag "serv" - -typedef enum { - NOT_RUN = 0, - IDLE, - RUNNING, - RESTARTING -} server_mode_t; - -extern int mg_invalid_socket; - -static server_mode_t mode = NOT_RUN; - -/* -char *mongoose_eventToString(int ev) { - static char temp[100]; - switch (ev) { - case MG_EV_CONNECT: - return "MG_EV_CONNECT"; - case MG_EV_ACCEPT: - return "MG_EV_ACCEPT"; - case MG_EV_CLOSE: - return "MG_EV_CLOSE"; - case MG_EV_SEND: - return "MG_EV_SEND"; - case MG_EV_RECV: - return "MG_EV_RECV"; - case MG_EV_HTTP_REQUEST: - return "MG_EV_HTTP_REQUEST"; - case MG_EV_MQTT_CONNACK: - return "MG_EV_MQTT_CONNACK"; - case MG_EV_MQTT_CONNACK_ACCEPTED: - return "MG_EV_MQTT_CONNACK"; - case MG_EV_MQTT_CONNECT: - return "MG_EV_MQTT_CONNECT"; - case MG_EV_MQTT_DISCONNECT: - return "MG_EV_MQTT_DISCONNECT"; - case MG_EV_MQTT_PINGREQ: - return "MG_EV_MQTT_PINGREQ"; - case MG_EV_MQTT_PINGRESP: - return "MG_EV_MQTT_PINGRESP"; - case MG_EV_MQTT_PUBACK: - return "MG_EV_MQTT_PUBACK"; - case MG_EV_MQTT_PUBCOMP: - return "MG_EV_MQTT_PUBCOMP"; - case MG_EV_MQTT_PUBLISH: - return "MG_EV_MQTT_PUBLISH"; - case MG_EV_MQTT_PUBREC: - return "MG_EV_MQTT_PUBREC"; - case MG_EV_MQTT_PUBREL: - return "MG_EV_MQTT_PUBREL"; - case MG_EV_MQTT_SUBACK: - return "MG_EV_MQTT_SUBACK"; - case MG_EV_MQTT_SUBSCRIBE: - return "MG_EV_MQTT_SUBSCRIBE"; - case MG_EV_MQTT_UNSUBACK: - return "MG_EV_MQTT_UNSUBACK"; - case MG_EV_MQTT_UNSUBSCRIBE: - return "MG_EV_MQTT_UNSUBSCRIBE"; - case MG_EV_WEBSOCKET_HANDSHAKE_REQUEST: - return "MG_EV_WEBSOCKET_HANDSHAKE_REQUEST"; - case MG_EV_WEBSOCKET_HANDSHAKE_DONE: - return "MG_EV_WEBSOCKET_HANDSHAKE_DONE"; - case MG_EV_WEBSOCKET_FRAME: - return "MG_EV_WEBSOCKET_FRAME"; - } - sprintf(temp, "Unknown event: %d", ev); - return temp; -}*/ - - -static esp_err_t main_loop(void *mongoose_event_handler) { - struct mg_mgr mgr; - struct mg_connection *connection; - - ESP_LOGD(tag, ">> main_loop"); - mg_mgr_init(&mgr, NULL); - - connection = mg_bind(&mgr, ":80", mongoose_event_handler); - - if (connection == NULL) { - //when this happens usually it won't recover until it gets a new IP - //maybe we should reboot? - ESP_LOGW(tag, "No connection from the mg_bind()."); - mg_mgr_free(&mgr); - oap_reboot("No connection from the mg_bind()."); - return ESP_FAIL; - } - //use http - mg_set_protocol_http_websocket(connection); - - mg_invalid_socket=0; //hack for corrupted mongoose sockets (AP mode + http request triggers it) - while (mode == RUNNING && !mg_invalid_socket) { - mg_mgr_poll(&mgr, 1000); - } - - mg_mgr_free(&mgr); - ESP_LOGD(tag, "<< main_loop"); - return ESP_OK; -} - -static void server_task(void *mongoose_event_handler) { - ESP_LOGD(tag, "start"); - while (1) { - switch (mode) { - case RUNNING: - if (main_loop(mongoose_event_handler) != ESP_OK) { - vTaskDelay(1000 / portTICK_PERIOD_MS); - } - break; - case IDLE: - vTaskDelay(1000 / portTICK_PERIOD_MS); - break; - default: //{RESTARTING,NOT_RUN} => RUNNING - mode = RUNNING; - } - } - vTaskDelete(NULL); -} - -void server_restart() { - ESP_LOGD(tag, "restart"); - mode = RESTARTING; -} - -void server_stop() { - ESP_LOGD(tag, "idle"); - mode = IDLE; -} - -void server_start(void *event_handler) { - if (mode == NOT_RUN) { - mode = RUNNING; - xTaskCreatePinnedToCore(&server_task, "mongoose_task", 10000, event_handler, DEFAULT_TASK_PRIORITY+1, NULL, 0); - } else { - server_restart(); - } -} diff --git a/components/oap-wifi/server.h b/components/oap-wifi/server.h deleted file mode 100644 index 3e3a053..0000000 --- a/components/oap-wifi/server.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * server.h - * - * Created on: Oct 4, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -#ifndef COMPONENTS_BOOTWIFI_SERVER_H_ -#define COMPONENTS_BOOTWIFI_SERVER_H_ - -#include "mongoose.h" - -void server_restart(); -void server_stop(); -void server_start(void *event_handler); - - - -#endif /* COMPONENTS_BOOTWIFI_SERVER_H_ */ diff --git a/components/oap-wifi/server_cpanel.c b/components/oap-wifi/server_cpanel.c deleted file mode 100644 index a7b9832..0000000 --- a/components/oap-wifi/server_cpanel.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * server_cpanel.c - * - * Created on: Oct 5, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ - -#include "server_cpanel.h" -#include "server.h" -#include "cpanel.h" - -void cpanel_wifi_handler(bool connected, bool ap_mode) { - if (connected) { - server_start(cpanel_event_handler); - } else { - server_restart(); - } -} - - diff --git a/components/oap-wifi/cpanel.c b/components/oap-wifi/web.c similarity index 59% rename from components/oap-wifi/cpanel.c rename to components/oap-wifi/web.c index b755140..2d06088 100644 --- a/components/oap-wifi/cpanel.c +++ b/components/oap-wifi/web.c @@ -1,139 +1,108 @@ -/* - * cpanel.c - * - * Created on: Oct 5, 2017 - * Author: kris - * - * This file is part of OpenAirProject-ESP32. - * - * OpenAirProject-ESP32 is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * OpenAirProject-ESP32 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenAirProject-ESP32. If not, see . - */ +#include +#include +#include +#include #include "oap_common.h" -#include "mongoose.h" +#undef HTTP_GET +#undef HTTP_POST #include "cJSON.h" #include "oap_storage.h" #include "pm_meter.h" #include "mhz19.h" #include "hw_gpio.h" -#define tag "cpanel" +#include "web.h" +static const char *TAG="web"; extern const uint8_t index_html_start[] asm("_binary_index_html_start"); extern const uint8_t index_html_end[] asm("_binary_index_html_end"); -inline int ishex(int x) { - return (x >= '0' && x <= '9') || - (x >= 'a' && x <= 'f') || - (x >= 'A' && x <= 'F'); +static esp_err_t index_handler(httpd_req_t *req) +{ + size_t resp_size = index_html_end-index_html_start; + httpd_resp_set_type(req, HTTPD_TYPE_TEXT); + httpd_resp_send(req, (const char *)index_html_start, resp_size); + return ESP_OK; } - -static int decode(const char *s, char *dec) { - char *o; - const char *end = s + strlen(s); - int c; - - for (o = dec; s <= end; o++) { - c = *s++; - if (c == '+') c = ' '; - else if (c == '%' && ( !ishex(*s++) || - !ishex(*s++) || - !sscanf(s - 2, "%2x", &c))) - return -1; - - if (dec) *o = c; - } - - return o - dec; + +httpd_uri_t index_desc = { + .uri = "/", + .method = HTTP_GET, + .handler = index_handler +}; + +static esp_err_t reboot_handler(httpd_req_t *req) +{ + httpd_resp_set_type(req, HTTPD_TYPE_TEXT); + httpd_resp_send(req, "", 0); + oap_reboot("requested by user"); + return ESP_OK; } -static int parse_query(char *str, char *key, char *val, size_t szval) { - char *delimiter1 = "&\r\n "; - char *delimiter2 = "="; - - char *ptr1; - char *ptr2; - char *saveptr1; - char *saveptr2; - ptr1 = strtok_r(str, delimiter1, &saveptr1); -// ESP_LOGD(tag, "-->parse_query: str:%s key:%s ptr1:%s", str, key, ptr1); - while(ptr1 != NULL) { - ptr2 = strtok_r(ptr1, delimiter2, &saveptr2); - if(ptr1 && ptr2) { -// ESP_LOGD(tag, "ptr1: %s ptr2: %s", ptr1, ptr2); - } - while(ptr2 != NULL) { - char *tmp=ptr2; - ptr2=strtok_r(NULL, delimiter2, &saveptr2); - if(ptr2) { -// ESP_LOGD(tag, "ptr2: %s", ptr2); - } - if(!strcmp(tmp, key)) { -// ESP_LOGD(tag, "parse_query: %s == %s", tmp, key); - memset(val, 0, szval); - decode(ptr2, val); -// ESP_LOGD(tag, "parse_query: val:%s", val); - return 1; - } - } - ptr1 = strtok_r(NULL, delimiter1, &saveptr1); - } - return 0; +httpd_uri_t reboot_desc = { + .uri = "/reboot", + .method = HTTP_GET, + .handler = reboot_handler +}; + +static esp_err_t handler_get_config(httpd_req_t *req) +{ + httpd_resp_set_type(req, HTTPD_TYPE_JSON); + httpd_resp_set_hdr(req, "X-Version", oap_version_str()); + + cJSON* config = storage_get_config_to_update(); + char* json = cJSON_Print(config); + httpd_resp_send(req, json, strlen(json)); + free(json); + return ESP_OK; } -static int parse_query_int(char *query, char *key, int *val) { - char valstr[32]; - char *str = strdup(query); - int ret=parse_query(str, key, valstr, sizeof(valstr)); - ESP_LOGI(tag, "parse_query_int: %s %s -> %s", str, key, valstr); - if(ret) { - *val = atoi(valstr); +httpd_uri_t get_config_desc = { + .uri = "/config", + .method = HTTP_GET, + .handler = handler_get_config +}; + +static esp_err_t handler_post_config(httpd_req_t *req) +{ + /* Read request bod */ + char content[1000]; + + /* Truncate if content length larger than the buffer */ + size_t recv_size = MIN(req->content_len, sizeof(content)); + + int ret = httpd_req_recv(req, content, recv_size); + if (ret < 0) { + /* In case of recv error, returning ESP_FAIL will + * ensure that the underlying socket is closed */ + return ESP_FAIL; + } + cJSON* config = cJSON_Parse(content); + if (config) { + storage_update_config(config); + handler_get_config(req); } else { - *val=0; + httpd_resp_set_status(req, HTTPD_500); } - free(str); - return ret; -} + cJSON_Delete(config); -static char *mgStrToStr(struct mg_str mgStr) { - char *retStr = (char *) malloc(mgStr.len + 1); - memcpy(retStr, mgStr.p, mgStr.len); - retStr[mgStr.len] = 0; - return retStr; -} // mgStrToStr - -static void handler_index(struct mg_connection *nc) { - size_t resp_size = index_html_end-index_html_start; - mg_send_head(nc, 200, resp_size, "Content-Type: text/html"); - mg_send(nc, index_html_start, resp_size); - ESP_LOGD(tag, "served %d bytes", resp_size); + /* Send a simple response */ + const char *resp = "URI POST Response"; + httpd_resp_send(req, resp, strlen(resp)); + + return ESP_OK; } -static void handler_get_config(struct mg_connection *nc, struct http_message *message) { - ESP_LOGD(tag, "handler_get_config"); - cJSON* config = storage_get_config_to_update(); - char* json = cJSON_Print(config); - char* headers = malloc(200); - sprintf(headers, "Content-Type: application/json\r\nX-Version: %s", oap_version_str()); - mg_send_head(nc, 200, strlen(json), headers); - mg_send(nc, json, strlen(json)); - free(headers); - free(json); -} +httpd_uri_t post_config_desc = { + .uri = "/config", + .method = HTTP_POST, + .handler = handler_post_config +}; -static void handler_get_status(struct mg_connection *nc, struct http_message *message) { - ESP_LOGD(tag, "handler_get_status"); +static esp_err_t handler_get_status(httpd_req_t *req) +{ + httpd_resp_set_type(req, HTTPD_TYPE_JSON); cJSON *root, *status, *data; root = cJSON_CreateObject(); @@ -281,107 +250,122 @@ static void handler_get_status(struct mg_connection *nc, struct http_message *me } #endif char* json = cJSON_Print(root); - mg_send(nc, json, strlen(json)); + httpd_resp_send(req, json, strlen(json)); + free(json); cJSON_Delete(root); + return ESP_OK; } -static void handler_reboot(struct mg_connection *nc) { - mg_send_head(nc, 200, 0, "Content-Type: text/plain"); - oap_reboot("requested by user"); +httpd_uri_t get_status_desc = { + .uri = "/status", + .method = HTTP_GET, + .handler = handler_get_status +}; + +static esp_err_t trigger_handler(httpd_req_t *req) +{ + char* buf; + size_t buf_len; + char *str = "ok\n"; + httpd_resp_set_type(req, HTTPD_TYPE_TEXT); + buf_len = httpd_req_get_url_query_len(req) + 1; + if (buf_len > 1) { + buf = malloc(buf_len); + if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) { + ESP_LOGI(TAG, "Found URL query => %s", buf); + char param[32]; + int delay = 1000; + int value = 0; + int gpio = -1; + /* Get value of expected key from query string */ + if (httpd_query_key_value(buf, "delay", param, sizeof(param)) == ESP_OK) { + ESP_LOGI(TAG, "Found URL query parameter => delay=%s", param); + delay=atoi(param); + } + if (httpd_query_key_value(buf, "value", param, sizeof(param)) == ESP_OK) { + ESP_LOGI(TAG, "Found URL query parameter => value=%s", param); + value=atoi(param); + } + if (httpd_query_key_value(buf, "gpio", param, sizeof(param)) == ESP_OK) { + ESP_LOGI(TAG, "Found URL query parameter => gpio=%s", param); + gpio=atoi(param); + } + if (httpd_query_key_value(buf, "func", param, sizeof(param)) == ESP_OK) { + ESP_LOGI(TAG, "Found URL query parameter => func=%s", param); + if(!strcasecmp(param, "calibrate")) { + mhz19_calibrate(&mhz19_cfg[0]); + } + } else if(gpio >= 0) { + hw_gpio_queue_trigger(gpio, value, delay); + } + } + free(buf); + } + httpd_resp_send(req, str, strlen(str)); + return ESP_OK; } -static void handler_set_config(struct mg_connection *nc, struct http_message *message) { - ESP_LOGD(tag, "handler_set_config"); - char *body = mgStrToStr(message->body); - cJSON* config = cJSON_Parse(body); - free(body); - if (config) { - storage_update_config(config); - handler_get_config(nc, message); - } else { - mg_http_send_error(nc, 500, "invalid config"); - } - cJSON_Delete(config); +httpd_uri_t trigger_desc = { + .uri = "/trigger", + .method = HTTP_GET, + .handler = trigger_handler +}; + +httpd_handle_t start_webserver(void) +{ + httpd_handle_t server = NULL; + httpd_config_t config = HTTPD_DEFAULT_CONFIG(); + config.stack_size = 6*1024; + config.lru_purge_enable = true; + config.backlog_conn = 25; + config.max_open_sockets = 12; + config.max_uri_handlers = 6; + + // Start the httpd server + ESP_LOGI(TAG, "Starting server on port: '%d'", config.server_port); + if (httpd_start(&server, &config) == ESP_OK) { + // Set URI handlers + ESP_LOGI(TAG, "Registering URI handlers"); + httpd_register_uri_handler(server, &index_desc); + httpd_register_uri_handler(server, &reboot_desc); + httpd_register_uri_handler(server, &get_config_desc); + httpd_register_uri_handler(server, &post_config_desc); + httpd_register_uri_handler(server, &get_status_desc); + httpd_register_uri_handler(server, &trigger_desc); + esp_log_level_set("httpd_parse", ESP_LOG_WARN); + esp_log_level_set("httpd_txrx", ESP_LOG_WARN); + esp_log_level_set("httpd_uri", ESP_LOG_WARN); + esp_log_level_set("httpd_sess", ESP_LOG_WARN); + esp_log_level_set("httpd", ESP_LOG_WARN); + return server; + } + + ESP_LOGI(TAG, "Error starting server!"); + return NULL; } -/** - * Handle mongoose events. These are mostly requests to process incoming - * browser requests. The ones we handle are: - * GET / - Send the enter details page. - * GET /set - Set the connection info (REST request). - * POST /ssidSelected - Set the connection info (HTML FORM). - */ - -void cpanel_event_handler(struct mg_connection *nc, int ev, void *evData) { - ESP_LOGV(tag, "- Event: %d", ev); - uint8_t handled = 0; - switch (ev) { - case MG_EV_HTTP_REQUEST: { - struct http_message *message = (struct http_message *) evData; - - //mg_str is not terminated with '\0' - char *uri = mgStrToStr(message->uri); - char *method = mgStrToStr(message->method); - char *query_string = mgStrToStr(message->query_string); - - ESP_LOGD(tag, "%s %s %s", method, uri, query_string); - - if (strcmp(uri, "/") == 0) { - handler_index(nc); - handled = 1; - } - if (strcmp(uri, "/reboot") == 0) { - handler_reboot(nc); - handled = 1; - } - if(strcmp(uri, "/config") == 0) { - if (strcmp(method, "GET") == 0) { - handler_get_config(nc, message); - handled = 1; - } else if (strcmp(method, "POST") == 0) { - handler_set_config(nc, message); - handled = 1; - } - } - if(strcmp(uri, "/status") == 0) { - if (strcmp(method, "GET") == 0) { - handler_get_status(nc, message); - handled = 1; - } else if (strcmp(method, "POST") == 0) { - handler_get_status(nc, message); - handled = 1; - } - } - if(strcmp(uri, "/calibrate") == 0) { - char *str="ok\n"; - int len=strlen(str); - mg_send_head(nc, 200, len, "Content-Type: text/plain"); - mhz19_calibrate(&mhz19_cfg[0]); - mg_send(nc, str, len); - handled = 1; - } - if(strcmp(uri, "/trigger") == 0) { - int delay; - int value; - int gpio; - char *str="ok\n"; - int len=strlen(str); - mg_send_head(nc, 200, len, "Content-Type: text/plain"); - parse_query_int(query_string, "delay", &delay); - parse_query_int(query_string, "value", &value); - parse_query_int(query_string, "gpio", &gpio); - hw_gpio_queue_trigger(gpio, value, delay); - mg_send(nc,str, len); - handled = 1; - } - if (!handled) { - } - nc->flags |= MG_F_SEND_AND_CLOSE; - free(uri); - free(method); - free(query_string); - break; - } - } +void stop_webserver(httpd_handle_t server) +{ + // Stop the httpd server + httpd_stop(server); } + + +static httpd_handle_t server = NULL; + +void web_wifi_handler(bool connected, bool ap_mode) +{ + if (connected) { + if (server == NULL) { + server = start_webserver(); + } + } else { + + if (server) { + stop_webserver(server); + server = NULL; + } + } +} + diff --git a/main/main.c b/main/main.c index 8506c12..e0caadb 100644 --- a/main/main.c +++ b/main/main.c @@ -50,11 +50,11 @@ #include "awsiot.h" #include "ota.h" #include "oap_data.h" -#include "server_cpanel.h" #include "ssd1366.h" #include "hcsr04.h" #include "hw_gpio.h" #include "udp_server.h" +#include "web.h" #define ESP_INTR_FLAG_DEFAULT 0 @@ -521,7 +521,7 @@ void app_main() { //wifi/mongoose requires plenty of mem, start it here btn_configure(&btn_handler); - wifi_configure(is_ap_mode_pressed() ? NULL : storage_get_config("wifi"), CONFIG_OAP_CONTROL_PANEL ? cpanel_wifi_handler : NULL); + wifi_configure(is_ap_mode_pressed() ? NULL : storage_get_config("wifi"), CONFIG_OAP_CONTROL_PANEL ? web_wifi_handler : NULL); wifi_boot(); start_ota_task(storage_get_config("ota")); From ff30c2b07ef27ffb6d889aaea845f4ea22b2a44e Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Fri, 5 Oct 2018 23:11:26 +0200 Subject: [PATCH 195/200] minor fixes, bump version to 1.4.25 --- components/oap-common/include/oap_version.h | 2 +- components/oap-wifi/web.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 5e509e8..e5b89b4 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 23 +#define OAP_VER_PATCH 25 typedef struct { uint8_t major; diff --git a/components/oap-wifi/web.c b/components/oap-wifi/web.c index 2d06088..04cfd37 100644 --- a/components/oap-wifi/web.c +++ b/components/oap-wifi/web.c @@ -42,7 +42,7 @@ static esp_err_t reboot_handler(httpd_req_t *req) httpd_uri_t reboot_desc = { .uri = "/reboot", - .method = HTTP_GET, + .method = HTTP_POST, .handler = reboot_handler }; @@ -275,7 +275,7 @@ static esp_err_t trigger_handler(httpd_req_t *req) if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) { ESP_LOGI(TAG, "Found URL query => %s", buf); char param[32]; - int delay = 1000; + int delay = 0; int value = 0; int gpio = -1; /* Get value of expected key from query string */ From fda5c2cb801da3a883ebf4083864c52f850c49c1 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 7 Oct 2018 00:15:01 +0200 Subject: [PATCH 196/200] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 11e9cac..07fa2ea 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ hardware like: - CO2 sensor: MH-Z19 (can be calibrated via - http:///calibrate + http:///trigger?func=calibrate - OLED display: SSD 1306 From f56db20c25861729e272872547f46f8801fb1d5f Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 9 Jun 2019 18:22:16 +0200 Subject: [PATCH 197/200] bring code up to date with current sdk --- components/oap-common/include/oap_version.h | 2 +- components/oap-common/oap_common.c | 1 + components/oap-wifi/include/web.h | 2 +- main/main.c | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index e5b89b4..5456434 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 25 +#define OAP_VER_PATCH 26 typedef struct { uint8_t major; diff --git a/components/oap-common/oap_common.c b/components/oap-common/oap_common.c index d24bac3..0183c58 100644 --- a/components/oap-common/oap_common.c +++ b/components/oap-common/oap_common.c @@ -30,6 +30,7 @@ #include "esp_log.h" #include "esp_system.h" #include "freertos/task.h" +#include "driver/gpio.h" static const long FEB22_2017 = 1487795557; static const char *TAG="oap"; diff --git a/components/oap-wifi/include/web.h b/components/oap-wifi/include/web.h index 51f14f4..08ca24d 100644 --- a/components/oap-wifi/include/web.h +++ b/components/oap-wifi/include/web.h @@ -3,7 +3,7 @@ #undef HTTP_GET #undef HTTP_POST -#include +#include httpd_handle_t start_webserver(void); void stop_webserver(httpd_handle_t server); diff --git a/main/main.c b/main/main.c index e0caadb..eb8b5fd 100644 --- a/main/main.c +++ b/main/main.c @@ -31,6 +31,7 @@ #include "esp_system.h" #include "nvs_flash.h" #include "esp_log.h" +#include "driver/gpio.h" #include #include "thing_speak.h" From 1ce06922e268f1266fc89c4b57ee37a493018193 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 9 Jun 2019 19:22:09 +0200 Subject: [PATCH 198/200] fix wifi init --- components/oap-wifi/bootwifi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/oap-wifi/bootwifi.c b/components/oap-wifi/bootwifi.c index 2e251be..85555e8 100644 --- a/components/oap-wifi/bootwifi.c +++ b/components/oap-wifi/bootwifi.c @@ -314,7 +314,7 @@ static void become_station() { } ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); - wifi_config_t sta_config; + wifi_config_t sta_config = {0}; sta_config.sta.bssid_set = 0; memcpy(sta_config.sta.ssid, oap_wifi_config.ssid, SSID_SIZE); memcpy(sta_config.sta.password, oap_wifi_config.password, PASSWORD_SIZE); From c04e95d0bd569e41c96ca57ff3fb4d01fd66bb35 Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 9 Jun 2019 19:57:33 +0200 Subject: [PATCH 199/200] fix lwip max sockets --- components/oap-common/include/oap_version.h | 2 +- sdkconfig.defaults | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 5456434..93bdda8 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 26 +#define OAP_VER_PATCH 28 typedef struct { uint8_t major; diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 7b6a5b9..a19da40 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -248,7 +248,7 @@ CONFIG_LOG_COLORS=y # LWIP # # CONFIG_L2_TO_L3_COPY is not set -CONFIG_LWIP_MAX_SOCKETS=4 +CONFIG_LWIP_MAX_SOCKETS=16 CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 # CONFIG_LWIP_SO_REUSE is not set CONFIG_LWIP_SO_RCVBUF=y From 12ac08072852966d1971dac27a754021b152cf3d Mon Sep 17 00:00:00 2001 From: BayCom GmbH Date: Sun, 9 Jun 2019 21:05:03 +0200 Subject: [PATCH 200/200] disable wifi power saver --- components/oap-common/include/oap_version.h | 2 +- components/oap-wifi/bootwifi.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/components/oap-common/include/oap_version.h b/components/oap-common/include/oap_version.h index 93bdda8..62fb540 100644 --- a/components/oap-common/include/oap_version.h +++ b/components/oap-common/include/oap_version.h @@ -38,7 +38,7 @@ #define OAP_VER_MAJOR 1 #define OAP_VER_MINOR 4 -#define OAP_VER_PATCH 28 +#define OAP_VER_PATCH 29 typedef struct { uint8_t major; diff --git a/components/oap-wifi/bootwifi.c b/components/oap-wifi/bootwifi.c index 85555e8..507eeb2 100644 --- a/components/oap-wifi/bootwifi.c +++ b/components/oap-wifi/bootwifi.c @@ -343,6 +343,7 @@ static void init_wifi() { wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); + ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE)); } void wifi_boot() {