diff --git a/CHANGELOG.md b/CHANGELOG.md index f8b14b070..eaf410195 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ## [9.5.0.8] ### Added - Command ``WebGetConfig `` if ``#define USE_WEBGETCONFIG`` is enabled to restore/init configuration from external webserver (#13034) +- Berry class ``webclient`` for HTTP/HTTPS requests ### Fixed - OpenTherm invalid JSON (#13028) diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp index 720ca2580..21317479c 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp @@ -288,6 +288,17 @@ void WiFiClientSecure_light::flush(void) { } #endif +#ifdef ESP32 +int WiFiClientSecure_light::connect(IPAddress ip, uint16_t port, int32_t timeout) { + DEBUG_BSSL("connect(%s,%d)", ip.toString().c_str(), port); + clearLastError(); + if (!WiFiClient::connect(ip, port, timeout)) { + setLastError(ERR_TCP_CONNECT); + return 0; + } + return _connectSSL(nullptr); +} +#else // ESP32 int WiFiClientSecure_light::connect(IPAddress ip, uint16_t port) { DEBUG_BSSL("connect(%s,%d)", ip.toString().c_str(), port); clearLastError(); @@ -297,7 +308,28 @@ int WiFiClientSecure_light::connect(IPAddress ip, uint16_t port) { } return _connectSSL(nullptr); } +#endif +#ifdef ESP32 +int WiFiClientSecure_light::connect(const char* name, uint16_t port, int32_t timeout) { + DEBUG_BSSL("connect(%s,%d)\n", name, port); + IPAddress remote_addr; + clearLastError(); + if (!WiFi.hostByName(name, remote_addr)) { + DEBUG_BSSL("connect: Name loopup failure\n"); + setLastError(ERR_CANT_RESOLVE_IP); + return 0; + } + DEBUG_BSSL("connect(%s,%d)\n", remote_addr.toString().c_str(), port); + if (!WiFiClient::connect(remote_addr, port, timeout)) { + DEBUG_BSSL("connect: Unable to connect TCP socket\n"); + _last_error = ERR_TCP_CONNECT; + return 0; + } + LOG_HEAP_SIZE("Before calling _connectSSL"); + return _connectSSL(name); +} +#else // ESP32 int WiFiClientSecure_light::connect(const char* name, uint16_t port) { DEBUG_BSSL("connect(%s,%d)\n", name, port); IPAddress remote_addr; @@ -316,6 +348,7 @@ int WiFiClientSecure_light::connect(const char* name, uint16_t port) { LOG_HEAP_SIZE("Before calling _connectSSL"); return _connectSSL(name); } +#endif void WiFiClientSecure_light::_freeSSL() { _ctx_present = false; diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h index f88a9f17f..2e140308d 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h @@ -38,8 +38,13 @@ class WiFiClientSecure_light : public WiFiClient { void allocateBuffers(void); + #ifdef ESP32 // the method to override in ESP32 has timeout argument + int connect(IPAddress ip, uint16_t port, int32_t timeout) override; + int connect(const char* name, uint16_t port, int32_t timeout) override; + #else int connect(IPAddress ip, uint16_t port) override; int connect(const char* name, uint16_t port) override; + #endif uint8_t connected() override; size_t write(const uint8_t *buf, size_t size) override; diff --git a/lib/libesp32/Berry-HttpClientLight/library.json b/lib/libesp32/Berry-HttpClientLight/library.json new file mode 100644 index 000000000..1e1479bbb --- /dev/null +++ b/lib/libesp32/Berry-HttpClientLight/library.json @@ -0,0 +1,17 @@ +{ + "name": "HttpClient light for Berry", + "version": "1.0", + "description": "Forked version of Arduino HttpClient to support BearSSL instead of mbedTLS", + "license": "MIT", + "homepage": "https://github.com/arendst/Tasmota", + "frameworks": "*", + "platforms": "*", + "authors": + { + "name": "Stephan Hadinger", + "maintainer": true + }, + "build": { + "flags": [ "-I$PROJECT_DIR/include" ] + } +} \ No newline at end of file diff --git a/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.cpp b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.cpp new file mode 100644 index 000000000..420cbfb71 --- /dev/null +++ b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.cpp @@ -0,0 +1,1508 @@ +/** + * HTTPClientLight.cpp + * + * Created on: 02.11.2015 + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the HTTPClient for Arduino. + * Port to ESP32 by Evandro Luis Copercini (2017), + * changed fingerprints to CA verification. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Adapted in October 2018 + */ + +#ifdef ESP32 +#include "tasmota_options.h" + +#ifdef USE_BERRY +#include + +#ifdef HTTPCLIENT_1_1_COMPATIBLE +#include +#include +#endif + +#include +#include + +#include "HttpClientLight.h" + +#ifdef USE_WEBCLIENT_HTTPS +#include "WiFiClientSecureLightBearSSL.h" +#endif // USE_WEBCLIENT_HTTPS + +// #ifdef HTTPCLIENT_1_1_COMPATIBLE +class TransportTraits +{ +public: + virtual ~TransportTraits() + { + } + + virtual std::unique_ptr create() + { + return std::unique_ptr(new WiFiClient()); + } + + virtual bool verify(WiFiClient& client, const char* host) + { + return true; + } + + virtual int32_t getLastError(WiFiClient& client) + { + return 0; + } + +}; + +#ifdef USE_WEBCLIENT_HTTPS +static const uint8_t _fingerprint_any[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; +class BearSSLTraits : public TransportTraits +{ +public: + BearSSLTraits(int recv, int xmit) : + _recv(recv), _xmit(xmit) + { + } + + std::unique_ptr create() override + { + std::unique_ptr p = std::unique_ptr(new BearSSL::WiFiClientSecure_light(_recv, _xmit)); + return p; + } + + bool verify(WiFiClient& client, const char* host) override + { + BearSSL::WiFiClientSecure_light& wcs = static_cast(client); + wcs.setPubKeyFingerprint(_fingerprint_any, _fingerprint_any, true); // allow all fingerprints + return true; + } + + int32_t getLastError(WiFiClient& client) + { + BearSSL::WiFiClientSecure_light& wcs = static_cast(client); + return wcs.getLastError(); + } + + +protected: + int _recv; + int _xmit; +}; +#endif // USE_WEBCLIENT_HTTPS + +/** + * constructor + */ +HTTPClientLight::HTTPClientLight() +{ +} + +/** + * destructor + */ +HTTPClientLight::~HTTPClientLight() +{ + if(_client) { + _client->stop(); + } + if(_currentHeaders) { + delete[] _currentHeaders; + } + if(_tcpDeprecated) { + _tcpDeprecated.reset(nullptr); + } + if(_transportTraits) { + _transportTraits.reset(nullptr); + } +} + +void HTTPClientLight::clear() +{ + _returnCode = 0; + _size = -1; + _headers = ""; +} + + +/** + * parsing the url for all needed parameters + * @param client Client& + * @param url String + * @param https bool + * @return success bool + */ +// bool HTTPClientLight::begin(WiFiClient &client, String url) { +// #ifdef HTTPCLIENT_1_1_COMPATIBLE +// if(_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } +// #endif + +// _client = &client; + +// // check for : (http: or https:) +// int index = url.indexOf(':'); +// if(index < 0) { +// log_d("failed to parse protocol"); +// return false; +// } + +// String protocol = url.substring(0, index); +// if(protocol != "http" && protocol != "https") { +// log_d("unknown protocol '%s'", protocol.c_str()); +// return false; +// } + +// _port = (protocol == "https" ? 443 : 80); +// return beginInternal(url, protocol.c_str()); +// } + + +/** + * directly supply all needed parameters + * @param client Client& + * @param host String + * @param port uint16_t + * @param uri String + * @param https bool + * @return success bool + */ +// bool HTTPClientLight::begin(WiFiClient &client, String host, uint16_t port, String uri, bool https) +// { +// #ifdef HTTPCLIENT_1_1_COMPATIBLE +// if(_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } +// #endif + +// _client = &client; + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; +// _protocol = (https ? "https" : "http"); +// return true; +// } + + +#ifdef HTTPCLIENT_1_1_COMPATIBLE +bool HTTPClientLight::begin(String url, const char* CAcert) +{ + if(_client && !_tcpDeprecated) { + log_d("mix up of new and deprecated api"); + _canReuse = false; + end(); + } + + _port = 443; + if (!beginInternal(url, "https")) { + return false; + } + _secure = true; +#ifdef USE_WEBCLIENT_HTTPS + _transportTraits = TransportTraitsPtr(new BearSSLTraits(16384, 0)); + // set buffer to 16KB half duplex, so we won't lose responses bigger than 16KB + // half duplex is well suited for HTTPS: one request followed by responses +#else + _transportTraits = nullptr; +#endif + if(!_transportTraits) { + log_e("could not create transport traits"); + return false; + } + + return true; +} + +/** + * parsing the url for all needed parameters + * @param url String + */ +bool HTTPClientLight::begin(String url) +{ + if(_client && !_tcpDeprecated) { + log_d("mix up of new and deprecated api"); + _canReuse = false; + end(); + } + + _port = 80; + if (!beginInternal(url, "http")) { + return begin(url, (const char*)NULL); + } + _transportTraits = TransportTraitsPtr(new TransportTraits()); + if(!_transportTraits) { + log_e("could not create transport traits"); + return false; + } + + return true; +} +#endif // HTTPCLIENT_1_1_COMPATIBLE + +bool HTTPClientLight::beginInternal(String url, const char* expectedProtocol) +{ + log_v("url: %s", url.c_str()); + clear(); + + // check for : (http: or https: + int index = url.indexOf(':'); + if(index < 0) { + log_e("failed to parse protocol"); + return false; + } + + _protocol = url.substring(0, index); + if (_protocol != expectedProtocol) { + log_w("unexpected protocol: %s, expected %s", _protocol.c_str(), expectedProtocol); + return false; + } + + url.remove(0, (index + 3)); // remove http:// or https:// + + index = url.indexOf('/'); + String host = url.substring(0, index); + url.remove(0, index); // remove host part + + // get Authorization + index = host.indexOf('@'); + if(index >= 0) { + // auth info + String auth = host.substring(0, index); + host.remove(0, index + 1); // remove auth part including @ + _base64Authorization = base64::encode(auth); + } + + // get port + index = host.indexOf(':'); + String the_host; + if(index >= 0) { + the_host = host.substring(0, index); // hostname + host.remove(0, (index + 1)); // remove hostname + : + _port = host.toInt(); // get port + } else { + the_host = host; + } + if(_host != the_host && connected()){ + log_d("switching host from '%s' to '%s'. disconnecting first", _host.c_str(), the_host.c_str()); + _canReuse = false; + disconnect(true); + } + _host = the_host; + _uri = url; + log_d("protocol: %s, host: %s port: %d url: %s", _protocol.c_str(), _host.c_str(), _port, _uri.c_str()); + return true; +} + +#ifdef HTTPCLIENT_1_1_COMPATIBLE +// bool HTTPClientLight::begin(String host, uint16_t port, String uri) +// { +// if(_client && !_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; +// // _transportTraits = TransportTraitsPtr(new TransportTraits()); TODO +// _transportTraits = nullptr; +// log_d("host: %s port: %d uri: %s", host.c_str(), port, uri.c_str()); +// return true; +// } + +// bool HTTPClientLight::begin(String host, uint16_t port, String uri, const char* CAcert) +// { +// if(_client && !_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; + +// if (strlen(CAcert) == 0) { +// return false; +// } +// _secure = true; +// _transportTraits = TransportTraitsPtr(new TLSTraits(CAcert)); +// return true; +// } + +// bool HTTPClientLight::begin(String host, uint16_t port, String uri, const char* CAcert, const char* cli_cert, const char* cli_key) +// { +// if(_client && !_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; + +// if (strlen(CAcert) == 0) { +// return false; +// } +// _secure = true; +// _transportTraits = TransportTraitsPtr(new TLSTraits(CAcert, cli_cert, cli_key)); +// return true; +// } +#endif // HTTPCLIENT_1_1_COMPATIBLE + +/** + * end + * called after the payload is handled + */ +void HTTPClientLight::end(void) +{ + disconnect(false); + _tcpDeprecated.reset(nullptr); // release the TLS implementation + _client = _tcpDeprecated.get(); // update client + clear(); +} + + + +/** + * disconnect + * close the TCP socket + */ +void HTTPClientLight::disconnect(bool preserveClient) +{ + if(connected()) { + if(_client->available() > 0) { + log_d("still data in buffer (%d), clean up.\n", _client->available()); + while(_client->available() > 0) { + _client->read(); + } + } + + if(_reuse && _canReuse) { + log_d("tcp keep open for reuse"); + } else { + log_d("tcp stop"); + _client->stop(); + if(!preserveClient) { + _client = nullptr; +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if(_tcpDeprecated) { + _transportTraits.reset(nullptr); + _tcpDeprecated.reset(nullptr); + _client = _tcpDeprecated.get(); // update client + } +#endif + } + } + } else { + log_d("tcp is closed\n"); + } +} + + +/** + * connected + * @return connected status + */ +bool HTTPClientLight::connected() +{ + if(_client) { + return ((_client->available() > 0) || _client->connected()); + } + return false; +} + +/** + * try to reuse the connection to the server + * keep-alive + * @param reuse bool + */ +void HTTPClientLight::setReuse(bool reuse) +{ + _reuse = reuse; +} + +/** + * set User Agent + * @param userAgent const char * + */ +void HTTPClientLight::setUserAgent(const String& userAgent) +{ + _userAgent = userAgent; +} + +/** + * set the Authorizatio for the http request + * @param user const char * + * @param password const char * + */ +void HTTPClientLight::setAuthorization(const char * user, const char * password) +{ + if(user && password) { + String auth = user; + auth += ":"; + auth += password; + _base64Authorization = base64::encode(auth); + } +} + +/** + * set the Authorizatio for the http request + * @param auth const char * base64 + */ +void HTTPClientLight::setAuthorization(const char * auth) +{ + if(auth) { + _base64Authorization = auth; + } +} + +/** + * set the timeout (ms) for establishing a connection to the server + * @param connectTimeout int32_t + */ +void HTTPClientLight::setConnectTimeout(int32_t connectTimeout) +{ + _connectTimeout = connectTimeout; +} + +/** + * set the timeout for the TCP connection + * @param timeout unsigned int + */ +void HTTPClientLight::setTimeout(uint16_t timeout) +{ + _tcpTimeout = timeout; + if(connected()) { + _client->setTimeout((timeout + 500) / 1000); + } +} + +/** + * use HTTP1.0 + * @param use + */ +void HTTPClientLight::useHTTP10(bool useHTTP10) +{ + _useHTTP10 = useHTTP10; + _reuse = !useHTTP10; +} + +/** + * send a GET request + * @return http code + */ +int HTTPClientLight::GET() +{ + return sendRequest("GET"); +} + +/** + * sends a post request to the server + * @param payload uint8_t * + * @param size size_t + * @return http code + */ +int HTTPClientLight::POST(uint8_t * payload, size_t size) +{ + return sendRequest("POST", payload, size); +} + +int HTTPClientLight::POST(String payload) +{ + return POST((uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sends a patch request to the server + * @param payload uint8_t * + * @param size size_t + * @return http code + */ +int HTTPClientLight::PATCH(uint8_t * payload, size_t size) +{ + return sendRequest("PATCH", payload, size); +} + +int HTTPClientLight::PATCH(String payload) +{ + return PATCH((uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sends a put request to the server + * @param payload uint8_t * + * @param size size_t + * @return http code + */ +int HTTPClientLight::PUT(uint8_t * payload, size_t size) { + return sendRequest("PUT", payload, size); +} + +int HTTPClientLight::PUT(String payload) { + return PUT((uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sendRequest + * @param type const char * "GET", "POST", .... + * @param payload String data for the message body + * @return + */ +int HTTPClientLight::sendRequest(const char * type, String payload) +{ + return sendRequest(type, (uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sendRequest + * @param type const char * "GET", "POST", .... + * @param payload uint8_t * data for the message body if null not send + * @param size size_t size for the message body if 0 not send + * @return -1 if no info or > 0 when Content-Length is set by server + */ +int HTTPClientLight::sendRequest(const char * type, uint8_t * payload, size_t size) +{ + int code; + bool redirect = false; + uint16_t redirectCount = 0; + do { + // wipe out any existing headers from previous request + for(size_t i = 0; i < _headerKeysCount; i++) { + if (_currentHeaders[i].value.length() > 0) { + _currentHeaders[i].value.clear(); + } + } + + log_d("request type: '%s' redirCount: %d\n", type, redirectCount); + + // connect to server + if(!connect()) { + if (_secure) { + int32_t ret = _transportTraits->getLastError(*_client); + if (ret) { + return returnError(-1000 - ret); // BearSSL error 46 transformed to -1046 + } + } + return returnError(HTTPC_ERROR_CONNECTION_REFUSED); + } + + if(payload && size > 0) { + addHeader(F("Content-Length"), String(size)); + } + + // send Header + if(!sendHeader(type)) { + return returnError(HTTPC_ERROR_SEND_HEADER_FAILED); + } + + // send Payload if needed + if(payload && size > 0) { + if(_client->write(&payload[0], size) != size) { + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } + } + + code = handleHeaderResponse(); + log_d("sendRequest code=%d\n", code); + + // Handle redirections as stated in RFC document: + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + // + // Implementing HTTP_CODE_FOUND as redirection with GET method, + // to follow most of existing user agent implementations. + // + redirect = false; + if ( + _followRedirects != HTTPC_DISABLE_FOLLOW_REDIRECTS && + redirectCount < _redirectLimit && + _location.length() > 0 + ) { + switch (code) { + // redirecting using the same method + case HTTP_CODE_MOVED_PERMANENTLY: + case HTTP_CODE_TEMPORARY_REDIRECT: { + if ( + // allow to force redirections on other methods + // (the RFC require user to accept the redirection) + _followRedirects == HTTPC_FORCE_FOLLOW_REDIRECTS || + // allow GET and HEAD methods without force + !strcmp(type, "GET") || + !strcmp(type, "HEAD") + ) { + redirectCount += 1; + log_d("following redirect (the same method): '%s' redirCount: %d\n", _location.c_str(), redirectCount); + if (!setURL(_location)) { + log_d("failed setting URL for redirection\n"); + // no redirection + break; + } + // redirect using the same request method and payload, diffrent URL + redirect = true; + } + break; + } + // redirecting with method dropped to GET or HEAD + // note: it does not need `HTTPC_FORCE_FOLLOW_REDIRECTS` for any method + case HTTP_CODE_FOUND: + case HTTP_CODE_SEE_OTHER: { + redirectCount += 1; + log_d("following redirect (dropped to GET/HEAD): '%s' redirCount: %d\n", _location.c_str(), redirectCount); + if (!setURL(_location)) { + log_d("failed setting URL for redirection\n"); + // no redirection + break; + } + // redirect after changing method to GET/HEAD and dropping payload + type = "GET"; + payload = nullptr; + size = 0; + redirect = true; + break; + } + + default: + break; + } + } + + } while (redirect); + // handle Server Response (Header) + return returnError(code); +} + +/** + * sendRequest + * @param type const char * "GET", "POST", .... + * @param stream Stream * data stream for the message body + * @param size size_t size for the message body if 0 not Content-Length is send + * @return -1 if no info or > 0 when Content-Length is set by server + */ +int HTTPClientLight::sendRequest(const char * type, Stream * stream, size_t size) +{ + + if(!stream) { + return returnError(HTTPC_ERROR_NO_STREAM); + } + + // connect to server + if(!connect()) { + return returnError(HTTPC_ERROR_CONNECTION_REFUSED); + } + + if(size > 0) { + addHeader("Content-Length", String(size)); + } + + // send Header + if(!sendHeader(type)) { + return returnError(HTTPC_ERROR_SEND_HEADER_FAILED); + } + + int buff_size = HTTP_TCP_BUFFER_SIZE; + + int len = size; + int bytesWritten = 0; + + if(len == 0) { + len = -1; + } + + // if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE + if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) { + buff_size = len; + } + + // create buffer for read + uint8_t * buff = (uint8_t *) malloc(buff_size); + + if(buff) { + // read all data from stream and send it to server + while(connected() && (stream->available() > -1) && (len > 0 || len == -1)) { + + // get available data size + int sizeAvailable = stream->available(); + + if(sizeAvailable) { + + int readBytes = sizeAvailable; + + // read only the asked bytes + if(len > 0 && readBytes > len) { + readBytes = len; + } + + // not read more the buffer can handle + if(readBytes > buff_size) { + readBytes = buff_size; + } + + // read data + int bytesRead = stream->readBytes(buff, readBytes); + + // write it to Stream + int bytesWrite = _client->write((const uint8_t *) buff, bytesRead); + bytesWritten += bytesWrite; + + // are all Bytes a writen to stream ? + if(bytesWrite != bytesRead) { + log_d("short write, asked for %d but got %d retry...", bytesRead, bytesWrite); + + // check for write error + if(_client->getWriteError()) { + log_d("stream write error %d", _client->getWriteError()); + + //reset write error for retry + _client->clearWriteError(); + } + + // some time for the stream + delay(1); + + int leftBytes = (readBytes - bytesWrite); + + // retry to send the missed bytes + bytesWrite = _client->write((const uint8_t *) (buff + bytesWrite), leftBytes); + bytesWritten += bytesWrite; + + if(bytesWrite != leftBytes) { + // failed again + log_d("short write, asked for %d but got %d failed.", leftBytes, bytesWrite); + free(buff); + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } + } + + // check for write error + if(_client->getWriteError()) { + log_d("stream write error %d", _client->getWriteError()); + free(buff); + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } + + // count bytes to read left + if(len > 0) { + len -= readBytes; + } + + delay(0); + } else { + delay(1); + } + } + + free(buff); + + if(size && (int) size != bytesWritten) { + log_d("Stream payload bytesWritten %d and size %d mismatch!.", bytesWritten, size); + log_d("ERROR SEND PAYLOAD FAILED!"); + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } else { + log_d("Stream payload written: %d", bytesWritten); + } + + } else { + log_d("too less ram! need %d", HTTP_TCP_BUFFER_SIZE); + return returnError(HTTPC_ERROR_TOO_LESS_RAM); + } + + // handle Server Response (Header) + return returnError(handleHeaderResponse()); +} + +/** + * size of message body / payload + * @return -1 if no info or > 0 when Content-Length is set by server + */ +int HTTPClientLight::getSize(void) +{ + return _size; +} + +/** + * returns the stream of the tcp connection + * @return WiFiClient + */ +WiFiClient& HTTPClientLight::getStream(void) +{ + if (connected()) { + return *_client; + } + + log_w("getStream: not connected"); + static WiFiClient empty; + return empty; +} + +/** + * returns a pointer to the stream of the tcp connection + * @return WiFiClient* + */ +WiFiClient* HTTPClientLight::getStreamPtr(void) +{ + if(connected()) { + return _client; + } + + log_w("getStreamPtr: not connected"); + return nullptr; +} + +/** + * write all message body / payload to Stream + * @param stream Stream * + * @return bytes written ( negative values are error codes ) + */ +int HTTPClientLight::writeToStream(Stream * stream) +{ + + if(!stream) { + return returnError(HTTPC_ERROR_NO_STREAM); + } + + if(!connected()) { + return returnError(HTTPC_ERROR_NOT_CONNECTED); + } + + // get length of document (is -1 when Server sends no Content-Length header) + int len = _size; + int ret = 0; + + if(_transferEncoding == HTTPC_TE_IDENTITY) { + ret = writeToStreamDataBlock(stream, len); + + // have we an error? + if(ret < 0) { + return returnError(ret); + } + } else if(_transferEncoding == HTTPC_TE_CHUNKED) { + int size = 0; + while(1) { + if(!connected()) { + return returnError(HTTPC_ERROR_CONNECTION_LOST); + } + String chunkHeader = _client->readStringUntil('\n'); + + if(chunkHeader.length() <= 0) { + return returnError(HTTPC_ERROR_READ_TIMEOUT); + } + + chunkHeader.trim(); // remove \r + + // read size of chunk + len = (uint32_t) strtol((const char *) chunkHeader.c_str(), NULL, 16); + size += len; + log_d(" read chunk len: %d", len); + + // data left? + if(len > 0) { + int r = writeToStreamDataBlock(stream, len); + if(r < 0) { + // error in writeToStreamDataBlock + return returnError(r); + } + ret += r; + } else { + + // if no length Header use global chunk size + if(_size <= 0) { + _size = size; + } + + // check if we have write all data out + if(ret != _size) { + return returnError(HTTPC_ERROR_STREAM_WRITE); + } + break; + } + + // read trailing \r\n at the end of the chunk + char buf[2]; + auto trailing_seq_len = _client->readBytes((uint8_t*)buf, 2); + if (trailing_seq_len != 2 || buf[0] != '\r' || buf[1] != '\n') { + return returnError(HTTPC_ERROR_READ_TIMEOUT); + } + + delay(0); + } + } else { + return returnError(HTTPC_ERROR_ENCODING); + } + +// end(); + disconnect(true); + return ret; +} + +/** + * return all payload as String (may need lot of ram or trigger out of memory!) + * @return String + */ +String HTTPClientLight::getString(void) +{ + // _size can be -1 when Server sends no Content-Length header + if(_size > 0 || _size == -1) { + StreamString sstring; + // try to reserve needed memory (noop if _size == -1) + if(sstring.reserve((_size + 1))) { + writeToStream(&sstring); + return sstring; + } else { + log_d("not enough memory to reserve a string! need: %d", (_size + 1)); + } + } + + return ""; +} + +/** + * converts error code to String + * @param error int + * @return String + */ +String HTTPClientLight::errorToString(int error) +{ + switch(error) { + case HTTPC_ERROR_CONNECTION_REFUSED: + return F("connection refused"); + case HTTPC_ERROR_SEND_HEADER_FAILED: + return F("send header failed"); + case HTTPC_ERROR_SEND_PAYLOAD_FAILED: + return F("send payload failed"); + case HTTPC_ERROR_NOT_CONNECTED: + return F("not connected"); + case HTTPC_ERROR_CONNECTION_LOST: + return F("connection lost"); + case HTTPC_ERROR_NO_STREAM: + return F("no stream"); + case HTTPC_ERROR_NO_HTTP_SERVER: + return F("no HTTP server"); + case HTTPC_ERROR_TOO_LESS_RAM: + return F("too less ram"); + case HTTPC_ERROR_ENCODING: + return F("Transfer-Encoding not supported"); + case HTTPC_ERROR_STREAM_WRITE: + return F("Stream write error"); + case HTTPC_ERROR_READ_TIMEOUT: + return F("read Timeout"); + default: + return String(); + } +} + +/** + * adds Header to the request + * @param name + * @param value + * @param first + */ +void HTTPClientLight::addHeader(const String& name, const String& value, bool first, bool replace) +{ + // not allow set of Header handled by code + if(!name.equalsIgnoreCase(F("Connection")) && + !name.equalsIgnoreCase(F("User-Agent")) && + !name.equalsIgnoreCase(F("Host")) && + !(name.equalsIgnoreCase(F("Authorization")) && _base64Authorization.length())){ + + String headerLine = name; + headerLine += ": "; + + if (replace) { + int headerStart = _headers.indexOf(headerLine); + if (headerStart != -1 && (headerStart == 0 || _headers[headerStart - 1] == '\n')) { + int headerEnd = _headers.indexOf('\n', headerStart); + _headers = _headers.substring(0, headerStart) + _headers.substring(headerEnd + 1); + } + } + + headerLine += value; + headerLine += "\r\n"; + if(first) { + _headers = headerLine + _headers; + } else { + _headers += headerLine; + } + } +} + +void HTTPClientLight::collectHeaders(const char* headerKeys[], const size_t headerKeysCount) +{ + _headerKeysCount = headerKeysCount; + if(_currentHeaders) { + delete[] _currentHeaders; + } + _currentHeaders = new RequestArgument[_headerKeysCount]; + for(size_t i = 0; i < _headerKeysCount; i++) { + _currentHeaders[i].key = headerKeys[i]; + } +} + +String HTTPClientLight::header(const char* name) +{ + for(size_t i = 0; i < _headerKeysCount; ++i) { + if(_currentHeaders[i].key == name) { + return _currentHeaders[i].value; + } + } + return String(); +} + +String HTTPClientLight::header(size_t i) +{ + if(i < _headerKeysCount) { + return _currentHeaders[i].value; + } + return String(); +} + +String HTTPClientLight::headerName(size_t i) +{ + if(i < _headerKeysCount) { + return _currentHeaders[i].key; + } + return String(); +} + +int HTTPClientLight::headers() +{ + return _headerKeysCount; +} + +bool HTTPClientLight::hasHeader(const char* name) +{ + for(size_t i = 0; i < _headerKeysCount; ++i) { + if((_currentHeaders[i].key == name) && (_currentHeaders[i].value.length() > 0)) { + return true; + } + } + return false; +} + +/** + * init TCP connection and handle ssl verify if needed + * @return true if connection is ok + */ +bool HTTPClientLight::connect(void) +{ + if(connected()) { + if(_reuse) { + log_d("already connected, reusing connection"); + } else { + log_d("already connected, try reuse!"); + } + while(_client->available() > 0) { + _client->read(); + } + return true; + } + +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if(_transportTraits && !_client) { + _tcpDeprecated = _transportTraits->create(); + if(!_tcpDeprecated) { + log_e("failed to create client"); + return false; + } + _client = _tcpDeprecated.get(); + } +#endif + + if (!_client) { + log_d("HTTPClientLight::begin was not called or returned error"); + return false; + } +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if (_tcpDeprecated && !_transportTraits->verify(*_client, _host.c_str())) { + log_d("transport level verify failed"); + _client->stop(); + return false; + } +#endif + if(!_client->connect(_host.c_str(), _port, _connectTimeout)) { + log_d("failed connect to %s:%u", _host.c_str(), _port); + return false; + } + + // set Timeout for WiFiClient and for Stream::readBytesUntil() and Stream::readStringUntil() + _client->setTimeout((_tcpTimeout + 500) / 1000); + + log_d(" connected to %s:%u", _host.c_str(), _port); + + +/* +#ifdef ESP8266 + _client->setNoDelay(true); +#endif + */ + return connected(); +} + +/** + * sends HTTP request header + * @param type (GET, POST, ...) + * @return status + */ +bool HTTPClientLight::sendHeader(const char * type) +{ + if(!connected()) { + return false; + } + + String header = String(type) + " " + _uri + F(" HTTP/1."); + + if(_useHTTP10) { + header += "0"; + } else { + header += "1"; + } + + header += String(F("\r\nHost: ")) + _host; + if (_port != 80 && _port != 443) + { + header += ':'; + header += String(_port); + } + header += String(F("\r\nUser-Agent: ")) + _userAgent + + F("\r\nConnection: "); + + if(_reuse) { + header += F("keep-alive"); + } else { + header += F("close"); + } + header += "\r\n"; + + if(!_useHTTP10) { + header += F("Accept-Encoding: identity;q=1,chunked;q=0.1,*;q=0\r\n"); + } + + if(_base64Authorization.length()) { + _base64Authorization.replace("\n", ""); + header += F("Authorization: Basic "); + header += _base64Authorization; + header += "\r\n"; + } + + header += _headers + "\r\n"; + + return (_client->write((const uint8_t *) header.c_str(), header.length()) == header.length()); +} + +/** + * reads the response from the server + * @return int http code + */ +int HTTPClientLight::handleHeaderResponse() +{ + + if(!connected()) { + return HTTPC_ERROR_NOT_CONNECTED; + } + + clear(); + + _canReuse = _reuse; + + String transferEncoding; + + _transferEncoding = HTTPC_TE_IDENTITY; + unsigned long lastDataTime = millis(); + bool firstLine = true; + + while(connected()) { + size_t len = _client->available(); + if(len > 0) { + String headerLine = _client->readStringUntil('\n'); + headerLine.trim(); // remove \r + + lastDataTime = millis(); + + log_v("RX: '%s'", headerLine.c_str()); + + if(firstLine) { + firstLine = false; + if(_canReuse && headerLine.startsWith("HTTP/1.")) { + _canReuse = (headerLine[sizeof "HTTP/1." - 1] != '0'); + } + int codePos = headerLine.indexOf(' ') + 1; + _returnCode = headerLine.substring(codePos, headerLine.indexOf(' ', codePos)).toInt(); + } else if(headerLine.indexOf(':')) { + String headerName = headerLine.substring(0, headerLine.indexOf(':')); + String headerValue = headerLine.substring(headerLine.indexOf(':') + 1); + headerValue.trim(); + + if(headerName.equalsIgnoreCase("Content-Length")) { + _size = headerValue.toInt(); + } + + if(_canReuse && headerName.equalsIgnoreCase("Connection")) { + if(headerValue.indexOf("close") >= 0 && headerValue.indexOf("keep-alive") < 0) { + _canReuse = false; + } + } + + if(headerName.equalsIgnoreCase("Transfer-Encoding")) { + transferEncoding = headerValue; + } + + if (headerName.equalsIgnoreCase("Location")) { + _location = headerValue; + } + + for(size_t i = 0; i < _headerKeysCount; i++) { + if(_currentHeaders[i].key.equalsIgnoreCase(headerName)) { + _currentHeaders[i].value = headerValue; + break; + } + } + } + + if(headerLine == "") { + log_d("code: %d", _returnCode); + + if(_size > 0) { + log_d("size: %d", _size); + } + + if(transferEncoding.length() > 0) { + log_d("Transfer-Encoding: %s", transferEncoding.c_str()); + if(transferEncoding.equalsIgnoreCase("chunked")) { + _transferEncoding = HTTPC_TE_CHUNKED; + } else if(transferEncoding.equalsIgnoreCase("identity")) { + _transferEncoding = HTTPC_TE_IDENTITY; + } else { + return HTTPC_ERROR_ENCODING; + } + } else { + _transferEncoding = HTTPC_TE_IDENTITY; + } + + if(_returnCode) { + return _returnCode; + } else { + log_d("Remote host is not an HTTP Server!"); + return HTTPC_ERROR_NO_HTTP_SERVER; + } + } + + } else { + if((millis() - lastDataTime) > _tcpTimeout) { + return HTTPC_ERROR_READ_TIMEOUT; + } + delay(10); + } + } + + return HTTPC_ERROR_CONNECTION_LOST; +} + +/** + * write one Data Block to Stream + * @param stream Stream * + * @param size int + * @return < 0 = error >= 0 = size written + */ +int HTTPClientLight::writeToStreamDataBlock(Stream * stream, int size) +{ + int buff_size = HTTP_TCP_BUFFER_SIZE; + int len = size; + int bytesWritten = 0; + + // if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE + if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) { + buff_size = len; + } + + // create buffer for read + uint8_t * buff = (uint8_t *) malloc(buff_size); + + if(buff) { + // read all data from server + while(connected() && (len > 0 || len == -1)) { + + // get available data size + size_t sizeAvailable = _client->available(); + + if(sizeAvailable) { + + int readBytes = sizeAvailable; + + // read only the asked bytes + if(len > 0 && readBytes > len) { + readBytes = len; + } + + // not read more the buffer can handle + if(readBytes > buff_size) { + readBytes = buff_size; + } + + // stop if no more reading + if (readBytes == 0) + break; + + // read data + int bytesRead = _client->readBytes(buff, readBytes); + + // write it to Stream + int bytesWrite = stream->write(buff, bytesRead); + bytesWritten += bytesWrite; + + // are all Bytes a writen to stream ? + if(bytesWrite != bytesRead) { + log_d("short write asked for %d but got %d retry...", bytesRead, bytesWrite); + + // check for write error + if(stream->getWriteError()) { + log_d("stream write error %d", stream->getWriteError()); + + //reset write error for retry + stream->clearWriteError(); + } + + // some time for the stream + delay(1); + + int leftBytes = (readBytes - bytesWrite); + + // retry to send the missed bytes + bytesWrite = stream->write((buff + bytesWrite), leftBytes); + bytesWritten += bytesWrite; + + if(bytesWrite != leftBytes) { + // failed again + log_w("short write asked for %d but got %d failed.", leftBytes, bytesWrite); + free(buff); + return HTTPC_ERROR_STREAM_WRITE; + } + } + + // check for write error + if(stream->getWriteError()) { + log_w("stream write error %d", stream->getWriteError()); + free(buff); + return HTTPC_ERROR_STREAM_WRITE; + } + + // count bytes to read left + if(len > 0) { + len -= readBytes; + } + + delay(0); + } else { + delay(1); + } + } + + free(buff); + + log_d("connection closed or file end (written: %d).", bytesWritten); + + if((size > 0) && (size != bytesWritten)) { + log_d("bytesWritten %d and size %d mismatch!.", bytesWritten, size); + return HTTPC_ERROR_STREAM_WRITE; + } + + } else { + log_w("too less ram! need %d", HTTP_TCP_BUFFER_SIZE); + return HTTPC_ERROR_TOO_LESS_RAM; + } + + return bytesWritten; +} + +/** + * called to handle error return, may disconnect the connection if still exists + * @param error + * @return error + */ +int HTTPClientLight::returnError(int error) +{ + if(error < 0) { + log_w("error(%d): %s", error, errorToString(error).c_str()); + if(connected()) { + log_d("tcp stop"); + _client->stop(); + } + } + return error; +} + +void HTTPClientLight::setFollowRedirects(followRedirects_t follow) +{ + _followRedirects = follow; +} + +void HTTPClientLight::setRedirectLimit(uint16_t limit) +{ + _redirectLimit = limit; +} + +/** + * set the URL to a new value. Handy for following redirects. + * @param url + */ +bool HTTPClientLight::setURL(const String& url) +{ + // if the new location is only a path then only update the URI + if (url && url[0] == '/') { + _uri = url; + clear(); + return true; + } + + if (!url.startsWith(_protocol + ':')) { + log_d("new URL not the same protocol, expected '%s', URL: '%s'\n", _protocol.c_str(), url.c_str()); + return false; + } + + // check if the port is specified + int indexPort = url.indexOf(':', 6); // find the first ':' excluding the one from the protocol + int indexURI = url.indexOf('/', 7); // find where the URI starts to make sure the ':' is not part of it + if (indexPort == -1 || indexPort > indexURI) { + // the port is not specified + _port = (_protocol == "https" ? 443 : 80); + } + + // disconnect but preserve _client. + // Also have to keep the connection otherwise it will free some of the memory used by _client + // and will blow up later when trying to do _client->available() or similar + _canReuse = true; + disconnect(true); + return beginInternal(url, _protocol.c_str()); +} + +const String &HTTPClientLight::getLocation(void) +{ + return _location; +} +#endif // USE_BERRY +#endif // ESP32 diff --git a/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h new file mode 100644 index 000000000..dc2bc0e58 --- /dev/null +++ b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h @@ -0,0 +1,270 @@ +/** + * HTTPClientLight.h + * + * Created on: 02.11.2015 + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the HTTPClient for Arduino. + * Port to ESP32 by Evandro Luis Copercini (2017), + * changed fingerprints to CA verification. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef HTTPClient_Light_H_ +#define HTTPClient_Light_H_ + +#define HTTPCLIENT_1_1_COMPATIBLE + +#include +#include +#include +#include + +#include // import definitions from the original code + +#include "tasmota_options.h" + +#define HTTPCLIENT_DEFAULT_TCP_TIMEOUT (5000) + +/// HTTP client errors +#define HTTPC_ERROR_CONNECTION_REFUSED (-1) +#define HTTPC_ERROR_SEND_HEADER_FAILED (-2) +#define HTTPC_ERROR_SEND_PAYLOAD_FAILED (-3) +#define HTTPC_ERROR_NOT_CONNECTED (-4) +#define HTTPC_ERROR_CONNECTION_LOST (-5) +#define HTTPC_ERROR_NO_STREAM (-6) +#define HTTPC_ERROR_NO_HTTP_SERVER (-7) +#define HTTPC_ERROR_TOO_LESS_RAM (-8) +#define HTTPC_ERROR_ENCODING (-9) +#define HTTPC_ERROR_STREAM_WRITE (-10) +#define HTTPC_ERROR_READ_TIMEOUT (-11) + +/// size for the stream handling +#define HTTP_TCP_BUFFER_SIZE (1460) + +/// HTTP codes see RFC7231 +// typedef enum { +// HTTP_CODE_CONTINUE = 100, +// HTTP_CODE_SWITCHING_PROTOCOLS = 101, +// HTTP_CODE_PROCESSING = 102, +// HTTP_CODE_OK = 200, +// HTTP_CODE_CREATED = 201, +// HTTP_CODE_ACCEPTED = 202, +// HTTP_CODE_NON_AUTHORITATIVE_INFORMATION = 203, +// HTTP_CODE_NO_CONTENT = 204, +// HTTP_CODE_RESET_CONTENT = 205, +// HTTP_CODE_PARTIAL_CONTENT = 206, +// HTTP_CODE_MULTI_STATUS = 207, +// HTTP_CODE_ALREADY_REPORTED = 208, +// HTTP_CODE_IM_USED = 226, +// HTTP_CODE_MULTIPLE_CHOICES = 300, +// HTTP_CODE_MOVED_PERMANENTLY = 301, +// HTTP_CODE_FOUND = 302, +// HTTP_CODE_SEE_OTHER = 303, +// HTTP_CODE_NOT_MODIFIED = 304, +// HTTP_CODE_USE_PROXY = 305, +// HTTP_CODE_TEMPORARY_REDIRECT = 307, +// HTTP_CODE_PERMANENT_REDIRECT = 308, +// HTTP_CODE_BAD_REQUEST = 400, +// HTTP_CODE_UNAUTHORIZED = 401, +// HTTP_CODE_PAYMENT_REQUIRED = 402, +// HTTP_CODE_FORBIDDEN = 403, +// HTTP_CODE_NOT_FOUND = 404, +// HTTP_CODE_METHOD_NOT_ALLOWED = 405, +// HTTP_CODE_NOT_ACCEPTABLE = 406, +// HTTP_CODE_PROXY_AUTHENTICATION_REQUIRED = 407, +// HTTP_CODE_REQUEST_TIMEOUT = 408, +// HTTP_CODE_CONFLICT = 409, +// HTTP_CODE_GONE = 410, +// HTTP_CODE_LENGTH_REQUIRED = 411, +// HTTP_CODE_PRECONDITION_FAILED = 412, +// HTTP_CODE_PAYLOAD_TOO_LARGE = 413, +// HTTP_CODE_URI_TOO_LONG = 414, +// HTTP_CODE_UNSUPPORTED_MEDIA_TYPE = 415, +// HTTP_CODE_RANGE_NOT_SATISFIABLE = 416, +// HTTP_CODE_EXPECTATION_FAILED = 417, +// HTTP_CODE_MISDIRECTED_REQUEST = 421, +// HTTP_CODE_UNPROCESSABLE_ENTITY = 422, +// HTTP_CODE_LOCKED = 423, +// HTTP_CODE_FAILED_DEPENDENCY = 424, +// HTTP_CODE_UPGRADE_REQUIRED = 426, +// HTTP_CODE_PRECONDITION_REQUIRED = 428, +// HTTP_CODE_TOO_MANY_REQUESTS = 429, +// HTTP_CODE_REQUEST_HEADER_FIELDS_TOO_LARGE = 431, +// HTTP_CODE_INTERNAL_SERVER_ERROR = 500, +// HTTP_CODE_NOT_IMPLEMENTED = 501, +// HTTP_CODE_BAD_GATEWAY = 502, +// HTTP_CODE_SERVICE_UNAVAILABLE = 503, +// HTTP_CODE_GATEWAY_TIMEOUT = 504, +// HTTP_CODE_HTTP_VERSION_NOT_SUPPORTED = 505, +// HTTP_CODE_VARIANT_ALSO_NEGOTIATES = 506, +// HTTP_CODE_INSUFFICIENT_STORAGE = 507, +// HTTP_CODE_LOOP_DETECTED = 508, +// HTTP_CODE_NOT_EXTENDED = 510, +// HTTP_CODE_NETWORK_AUTHENTICATION_REQUIRED = 511 +// } t_http_codes; + +// typedef enum { +// HTTPC_TE_IDENTITY, +// HTTPC_TE_CHUNKED +// } transferEncoding_t; + +/** + * redirection follow mode. + * + `HTTPC_DISABLE_FOLLOW_REDIRECTS` - no redirection will be followed. + * + `HTTPC_STRICT_FOLLOW_REDIRECTS` - strict RFC2616, only requests using + * GET or HEAD methods will be redirected (using the same method), + * since the RFC requires end-user confirmation in other cases. + * + `HTTPC_FORCE_FOLLOW_REDIRECTS` - all redirections will be followed, + * regardless of a used method. New request will use the same method, + * and they will include the same body data and the same headers. + * In the sense of the RFC, it's just like every redirection is confirmed. + */ +// typedef enum { +// HTTPC_DISABLE_FOLLOW_REDIRECTS, +// HTTPC_STRICT_FOLLOW_REDIRECTS, +// HTTPC_FORCE_FOLLOW_REDIRECTS +// } followRedirects_t; + + + +class HTTPClientLight +{ +public: + HTTPClientLight(); + ~HTTPClientLight(); + +/* + * Since both begin() functions take a reference to client as a parameter, you need to + * ensure the client object lives the entire time of the HTTPClientLight + */ + // bool begin(WiFiClient &client, String url); + // bool begin(WiFiClient &client, String host, uint16_t port, String uri = "/", bool https = false); + +#ifdef HTTPCLIENT_1_1_COMPATIBLE + bool begin(String url); + bool begin(String url, const char* CAcert); + // bool begin(String host, uint16_t port, String uri = "/"); + // bool begin(String host, uint16_t port, String uri, const char* CAcert); + // bool begin(String host, uint16_t port, String uri, const char* CAcert, const char* cli_cert, const char* cli_key); +#endif + + void end(void); + + bool connected(void); + + void setReuse(bool reuse); /// keep-alive + void setUserAgent(const String& userAgent); + void setAuthorization(const char * user, const char * password); + void setAuthorization(const char * auth); + void setConnectTimeout(int32_t connectTimeout); + void setTimeout(uint16_t timeout); + + // Redirections + void setFollowRedirects(followRedirects_t follow); + void setRedirectLimit(uint16_t limit); // max redirects to follow for a single request + + bool setURL(const String &url); + void useHTTP10(bool usehttp10 = true); + + /// request handling + int GET(); + int PATCH(uint8_t * payload, size_t size); + int PATCH(String payload); + int POST(uint8_t * payload, size_t size); + int POST(String payload); + int PUT(uint8_t * payload, size_t size); + int PUT(String payload); + int sendRequest(const char * type, String payload); + int sendRequest(const char * type, uint8_t * payload = NULL, size_t size = 0); + int sendRequest(const char * type, Stream * stream, size_t size = 0); + + void addHeader(const String& name, const String& value, bool first = false, bool replace = true); + + /// Response handling + void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); + String header(const char* name); // get request header value by name + String header(size_t i); // get request header value by number + String headerName(size_t i); // get request header name by number + int headers(); // get header count + bool hasHeader(const char* name); // check if header exists + + + int getSize(void); + const String &getLocation(void); + + WiFiClient& getStream(void); + WiFiClient* getStreamPtr(void); + int writeToStream(Stream* stream); + String getString(void); + + static String errorToString(int error); + +protected: + struct RequestArgument { + String key; + String value; + }; + + bool beginInternal(String url, const char* expectedProtocol); + void disconnect(bool preserveClient = false); + void clear(); + int returnError(int error); + bool connect(void); + bool sendHeader(const char * type); + int handleHeaderResponse(); + int writeToStreamDataBlock(Stream * stream, int len); + + +#ifdef HTTPCLIENT_1_1_COMPATIBLE + TransportTraitsPtr _transportTraits; + std::unique_ptr _tcpDeprecated; +#endif + + WiFiClient* _client = nullptr; + + /// request handling + String _host; + uint16_t _port = 0; + int32_t _connectTimeout = -1; + bool _reuse = true; + uint16_t _tcpTimeout = HTTPCLIENT_DEFAULT_TCP_TIMEOUT; + bool _useHTTP10 = false; + bool _secure = false; + + String _uri; + String _protocol; + String _headers; + String _userAgent = "ESP32HTTPClient"; + String _base64Authorization; + + /// Response handling + RequestArgument* _currentHeaders = nullptr; + size_t _headerKeysCount = 0; + + int _returnCode = 0; + int _size = -1; + bool _canReuse = false; + followRedirects_t _followRedirects = HTTPC_DISABLE_FOLLOW_REDIRECTS; + uint16_t _redirectLimit = 10; + String _location; + transferEncoding_t _transferEncoding = HTTPC_TE_IDENTITY; +}; + + + +#endif /* HTTPClient_Light_H_ */ \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_modtab.c b/lib/libesp32/Berry/default/be_modtab.c index 189da0e61..10ddb439f 100644 --- a/lib/libesp32/Berry/default/be_modtab.c +++ b/lib/libesp32/Berry/default/be_modtab.c @@ -109,6 +109,7 @@ extern void be_load_Driver_class(bvm *vm); extern void be_load_Timer_class(bvm *vm); extern void be_load_driver_i2c_lib(bvm *vm); extern void be_load_md5_lib(bvm *vm); +extern void be_load_webclient_lib(bvm *vm); extern void be_load_crypto_lib(bvm *vm); #ifdef USE_I2S_AUDIO_BERRY @@ -148,6 +149,9 @@ BERRY_API void be_load_custom_libs(bvm *vm) be_load_wirelib(vm); be_load_driver_i2c_lib(vm); #endif // USE_I2C +#ifdef USE_WEBCLIENT + be_load_webclient_lib(vm); +#endif // USE_WEBCLIENT #if defined(USE_ONEWIRE) || defined(USE_DS18x20) be_load_onewirelib(vm); #endif diff --git a/lib/libesp32/Berry/default/be_webclient_lib.c b/lib/libesp32/Berry/default/be_webclient_lib.c new file mode 100644 index 000000000..bc24705d6 --- /dev/null +++ b/lib/libesp32/Berry/default/be_webclient_lib.c @@ -0,0 +1,55 @@ +/******************************************************************** + * Webclient mapped to Arduino framework + * + * To use: `d = webclient()` + * + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_WEBCLIENT + +extern int wc_init(bvm *vm); +extern int wc_deinit(bvm *vm); +extern int wc_urlencode(bvm *vm); +extern int wc_begin(bvm *vm); +extern int wc_set_timeouts(bvm *vm); +extern int wc_set_useragent(bvm *vm); +extern int wc_set_auth(bvm *vm); +extern int wc_connected(bvm *vm); +extern int wc_close(bvm *vm); +extern int wc_addheader(bvm *vm); +extern int wc_GET(bvm *vm); +extern int wc_POST(bvm *vm); +extern int wc_getstring(bvm *vm); +extern int wc_getsize(bvm *vm); + +#include "../generate/be_fixed_be_class_webclient.h" + +void be_load_webclient_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_webclient); + be_setglobal(vm, "webclient"); + be_pop(vm, 1); +} +/* @const_object_info_begin + +class be_class_webclient (scope: global, name: webclient) { + .p, var + .w, var + init, func(wc_init) + deinit, func(wc_deinit) + url_encode, func(wc_urlencode) + + begin, func(wc_begin) + set_timeouts, func(wc_set_timeouts) + set_useragent, func(wc_set_useragent) + set_auth, func(wc_set_auth) + close, func(wc_close) + add_header, func(wc_addheader) + GET, func(wc_GET) + POST, func(wc_POST) + get_string, func(wc_getstring) + get_size, func(wc_getsize) +} +@const_object_info_end */ + +#endif // USE_WEBCLIENT diff --git a/lib/libesp32/Berry/generate/be_const_strtab.h b/lib/libesp32/Berry/generate/be_const_strtab.h index ea86eeb84..19694bcc1 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab.h +++ b/lib/libesp32/Berry/generate/be_const_strtab.h @@ -1,668 +1,680 @@ -extern const bcstring be_const_str_lv_checkbox; -extern const bcstring be_const_str_lv_draw_line_dsc; -extern const bcstring be_const_str_I2S_IN_SLCT; -extern const bcstring be_const_str_SDM120_TX; -extern const bcstring be_const_str_byte; -extern const bcstring be_const_str_count; -extern const bcstring be_const_str_tostring; -extern const bcstring be_const_str_sinh; -extern const bcstring be_const_str_write; -extern const bcstring be_const_str_AudioGenerator; -extern const bcstring be_const_str_XPT2046_CS; -extern const bcstring be_const_str_HPMA_RX; -extern const bcstring be_const_str_INTERRUPT; -extern const bcstring be_const_str_arg; -extern const bcstring be_const_str_read12; -extern const bcstring be_const_str_LEDLNK; -extern const bcstring be_const_str_REL1; -extern const bcstring be_const_str_SDS0X1_RX; -extern const bcstring be_const_str_continue; -extern const bcstring be_const_str_SYMBOL_COPY; -extern const bcstring be_const_str_compile; -extern const bcstring be_const_str__write; -extern const bcstring be_const_str_member; -extern const bcstring be_const_str_wire2; -extern const bcstring be_const_str__timers; -extern const bcstring be_const_str_SYMBOL_BLUETOOTH; -extern const bcstring be_const_str_ROT1A_NP; -extern const bcstring be_const_str_lv_color; -extern const bcstring be_const_str_ADC_TEMP; -extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; -extern const bcstring be_const_str_Tasmota; -extern const bcstring be_const_str_WEBCAM_RESET; -extern const bcstring be_const_str_SPI_MOSI; -extern const bcstring be_const_str_reset; -extern const bcstring be_const_str_time_reached; -extern const bcstring be_const_str_encrypt; -extern const bcstring be_const_str_ADC_PH; -extern const bcstring be_const_str_MCP39F5_TX; -extern const bcstring be_const_str_NRG_CF1; -extern const bcstring be_const_str_SYMBOL_RIGHT; -extern const bcstring be_const_str_IRRECV; -extern const bcstring be_const_str_dump; -extern const bcstring be_const_str_WEBCAM_PSCLK; -extern const bcstring be_const_str_top; -extern const bcstring be_const_str_I2C_SCL; -extern const bcstring be_const_str_INPUT_PULLDOWN; -extern const bcstring be_const_str_SENSOR_END; -extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; -extern const bcstring be_const_str_SYMBOL_BATTERY_1; -extern const bcstring be_const_str_attrdump; -extern const bcstring be_const_str_SYMBOL_USB; -extern const bcstring be_const_str_BUZZER_INV; -extern const bcstring be_const_str_DYP_RX; -extern const bcstring be_const_str_pi; -extern const bcstring be_const_str_true; -extern const bcstring be_const_str_load_freetype_font; -extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; -extern const bcstring be_const_str_lv_draw_mask_line_param_cfg; -extern const bcstring be_const_str_log10; -extern const bcstring be_const_str_module; -extern const bcstring be_const_str_wire; -extern const bcstring be_const_str_SYMBOL_FILE; -extern const bcstring be_const_str_TASMOTACLIENT_RST; -extern const bcstring be_const_str_skip; -extern const bcstring be_const_str_stop; -extern const bcstring be_const_str_HRE_DATA; -extern const bcstring be_const_str_lv_cont; -extern const bcstring be_const_str_else; -extern const bcstring be_const_str_check_privileged_access; -extern const bcstring be_const_str_init; -extern const bcstring be_const_str_redirect; -extern const bcstring be_const_str_while; -extern const bcstring be_const_str_KEY1_INV_NP; -extern const bcstring be_const_str_resize; -extern const bcstring be_const_str_set_light; -extern const bcstring be_const_str_SPI_DC; -extern const bcstring be_const_str_TASMOTACLIENT_TXD; -extern const bcstring be_const_str_publish; -extern const bcstring be_const_str_screenshot; -extern const bcstring be_const_str_PMS5003_RX; -extern const bcstring be_const_str__ccmd; -extern const bcstring be_const_str_read32; -extern const bcstring be_const_str_ETH_PHY_POWER; -extern const bcstring be_const_str_HRXL_RX; -extern const bcstring be_const_str_BS814_CLK; -extern const bcstring be_const_str_SDM72_RX; -extern const bcstring be_const_str_SYMBOL_NEXT; -extern const bcstring be_const_str_lv_bar; -extern const bcstring be_const_str_lv_draw_mask_radius_param_cfg; -extern const bcstring be_const_str_EPAPER42_CS; -extern const bcstring be_const_str_gen_cb; -extern const bcstring be_const_str_geti; -extern const bcstring be_const_str_depower; -extern const bcstring be_const_str_digital_write; -extern const bcstring be_const_str_event; -extern const bcstring be_const_str_read; -extern const bcstring be_const_str_RC522_CS; -extern const bcstring be_const_str_content_send_style; -extern const bcstring be_const_str__end_transmission; -extern const bcstring be_const_str_SOLAXX1_TX; -extern const bcstring be_const_str_arg_size; -extern const bcstring be_const_str_TM1638STB; -extern const bcstring be_const_str_WS2812; -extern const bcstring be_const_str_add_driver; -extern const bcstring be_const_str_setmember; -extern const bcstring be_const_str_SYMBOL_NEW_LINE; -extern const bcstring be_const_str_Wire; -extern const bcstring be_const_str_bytes; -extern const bcstring be_const_str_lv_signal_cb; -extern const bcstring be_const_str_AES_GCM; -extern const bcstring be_const_str_OUTPUT; -extern const bcstring be_const_str_i2c_enabled; -extern const bcstring be_const_str_WEBCAM_HSD; -extern const bcstring be_const_str_srand; -extern const bcstring be_const_str_try_rule; -extern const bcstring be_const_str_TUYA_TX; -extern const bcstring be_const_str_write8; -extern const bcstring be_const_str_SYMBOL_BATTERY_2; -extern const bcstring be_const_str_AS608_TX; -extern const bcstring be_const_str_TM1637CLK; -extern const bcstring be_const_str_lv_group_focus_cb; -extern const bcstring be_const_str_resp_cmnd_done; -extern const bcstring be_const_str_ADC_LIGHT; -extern const bcstring be_const_str_lv_chart; -extern const bcstring be_const_str_write_bytes; -extern const bcstring be_const_str_PZEM0XX_TX; -extern const bcstring be_const_str_ROT1B; -extern const bcstring be_const_str_SYMBOL_PASTE; -extern const bcstring be_const_str_time_dump; -extern const bcstring be_const_str_SSD1351_DC; -extern const bcstring be_const_str_pop; -extern const bcstring be_const_str_lv_gauge_format_cb; -extern const bcstring be_const_str_isinstance; -extern const bcstring be_const_str_vcall; -extern const bcstring be_const_str_content_stop; -extern const bcstring be_const_str_lv_area; -extern const bcstring be_const_str_WEBCAM_HREF; -extern const bcstring be_const_str_search; -extern const bcstring be_const_str_HJL_CF; -extern const bcstring be_const_str_SYMBOL_GPS; -extern const bcstring be_const_str_lv_draw_rect_dsc; -extern const bcstring be_const_str_copy; -extern const bcstring be_const_str_response_append; -extern const bcstring be_const_str_; -extern const bcstring be_const_str_SM2135_DAT; -extern const bcstring be_const_str_number; -extern const bcstring be_const_str_false; -extern const bcstring be_const_str_SPI_CLK; -extern const bcstring be_const_str_do; -extern const bcstring be_const_str_lv_tileview; -extern const bcstring be_const_str_NRG_SEL_INV; -extern const bcstring be_const_str_lv_cpicker; -extern const bcstring be_const_str_lv_draw_mask_angle_param; -extern const bcstring be_const_str_load_font; -extern const bcstring be_const_str_lv_textarea; -extern const bcstring be_const_str_reset_search; -extern const bcstring be_const_str_BUZZER; -extern const bcstring be_const_str_KEY1_INV; -extern const bcstring be_const_str_SYMBOL_TRASH; -extern const bcstring be_const_str_find_key_i; -extern const bcstring be_const_str_delay; -extern const bcstring be_const_str_tolower; -extern const bcstring be_const_str_INPUT_PULLUP; -extern const bcstring be_const_str_classof; -extern const bcstring be_const_str_HM10_RX; -extern const bcstring be_const_str_MAX7219CLK; -extern const bcstring be_const_str_SYMBOL_BATTERY_3; -extern const bcstring be_const_str_reverse_gamma10; -extern const bcstring be_const_str_lv_draw_mask_map_param; -extern const bcstring be_const_str__available; -extern const bcstring be_const_str_setbits; -extern const bcstring be_const_str_P9813_DAT; -extern const bcstring be_const_str_concat; -extern const bcstring be_const_str_SDM120_RX; -extern const bcstring be_const_str_SDS0X1_TX; -extern const bcstring be_const_str_WEBCAM_SIOC; -extern const bcstring be_const_str_return; -extern const bcstring be_const_str_asin; -extern const bcstring be_const_str_break; -extern const bcstring be_const_str_DSB_OUT; -extern const bcstring be_const_str_OUTPUT_LO; -extern const bcstring be_const_str_PULLUP; -extern const bcstring be_const_str_int; -extern const bcstring be_const_str_DDS2382_TX; -extern const bcstring be_const_str_HLW_CF; -extern const bcstring be_const_str_SSPI_MISO; -extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; -extern const bcstring be_const_str_except; -extern const bcstring be_const_str_opt_call; -extern const bcstring be_const_str_SYMBOL_CHARGE; -extern const bcstring be_const_str_get_light; -extern const bcstring be_const_str_millis; -extern const bcstring be_const_str_RA8876_CS; -extern const bcstring be_const_str_lv_draw_mask_common_dsc; -extern const bcstring be_const_str_yield; -extern const bcstring be_const_str_SDM630_RX; -extern const bcstring be_const_str_WEBCAM_VSYNC; -extern const bcstring be_const_str_lv_draw_mask_radius_param; -extern const bcstring be_const_str_tan; -extern const bcstring be_const_str_WEBCAM_DATA; -extern const bcstring be_const_str_iter; -extern const bcstring be_const_str_LED1_INV; -extern const bcstring be_const_str_MAX31855CLK; -extern const bcstring be_const_str_allocated; -extern const bcstring be_const_str_gamma8; -extern const bcstring be_const_str_memory; -extern const bcstring be_const_str_wifi; -extern const bcstring be_const_str_SPI_CS; -extern const bcstring be_const_str_imax; -extern const bcstring be_const_str_lv_design_cb; -extern const bcstring be_const_str_read_bytes; -extern const bcstring be_const_str_tob64; -extern const bcstring be_const_str_MIEL_HVAC_RX; -extern const bcstring be_const_str_TELEINFO_RX; -extern const bcstring be_const_str_find_op; -extern const bcstring be_const_str_DHT11_OUT; -extern const bcstring be_const_str_NRF24_DC; -extern const bcstring be_const_str_SYMBOL_BELL; -extern const bcstring be_const_str_SYMBOL_EJECT; -extern const bcstring be_const_str_SYMBOL_LOOP; -extern const bcstring be_const_str_SYMBOL_MUTE; -extern const bcstring be_const_str_content_start; -extern const bcstring be_const_str_get_power; -extern const bcstring be_const_str_SOLAXX1_RX; -extern const bcstring be_const_str_IBEACON_TX; -extern const bcstring be_const_str_reverse; -extern const bcstring be_const_str_OneWire; -extern const bcstring be_const_str_RISING; -extern const bcstring be_const_str__read; -extern const bcstring be_const_str_KEY1_INV_PD; -extern const bcstring be_const_str_super; -extern const bcstring be_const_str_end; -extern const bcstring be_const_str_SYMBOL_CLOSE; -extern const bcstring be_const_str_cos; -extern const bcstring be_const_str_ADC_CT_POWER; -extern const bcstring be_const_str_AS608_RX; -extern const bcstring be_const_str_PZEM017_RX; -extern const bcstring be_const_str_TX2X_TXD_BLACK; -extern const bcstring be_const_str_TUYA_RX; -extern const bcstring be_const_str_begin; -extern const bcstring be_const_str_rtc; -extern const bcstring be_const_str_lv_draw_img_dsc; -extern const bcstring be_const_str_RDM6300_RX; -extern const bcstring be_const_str__buffer; -extern const bcstring be_const_str_SM2135_CLK; -extern const bcstring be_const_str_ZEROCROSS; -extern const bcstring be_const_str_lv_indev; -extern const bcstring be_const_str_DSB; -extern const bcstring be_const_str_PROJECTOR_CTRL_RX; -extern const bcstring be_const_str_add_rule; -extern const bcstring be_const_str_finish; -extern const bcstring be_const_str_CNTR1_NP; -extern const bcstring be_const_str_dot_def; -extern const bcstring be_const_str_cb_dispatch; -extern const bcstring be_const_str_lv_slider; -extern const bcstring be_const_str_CSE7761_TX; -extern const bcstring be_const_str_lv_win; -extern const bcstring be_const_str_SYMBOL_POWER; -extern const bcstring be_const_str_upper; -extern const bcstring be_const_str_ADC_RANGE; -extern const bcstring be_const_str_SBR_RX; -extern const bcstring be_const_str_pin; -extern const bcstring be_const_str_shared_key; -extern const bcstring be_const_str_SYMBOL_SHUFFLE; -extern const bcstring be_const_str_SYMBOL_CUT; -extern const bcstring be_const_str_cosh; -extern const bcstring be_const_str_lv_group; -extern const bcstring be_const_str_lv_roller; -extern const bcstring be_const_str_DHT22; -extern const bcstring be_const_str_HPMA_TX; -extern const bcstring be_const_str_get; -extern const bcstring be_const_str_setitem; -extern const bcstring be_const_str_str; -extern const bcstring be_const_str_SYMBOL_VOLUME_MID; -extern const bcstring be_const_str_TELEINFO_ENABLE; -extern const bcstring be_const_str_collect; -extern const bcstring be_const_str_deinit; -extern const bcstring be_const_str_remove_timer; -extern const bcstring be_const_str_HX711_DAT; -extern const bcstring be_const_str_public_key; -extern const bcstring be_const_str_exists; -extern const bcstring be_const_str_lv_line; -extern const bcstring be_const_str_ADC_INPUT; -extern const bcstring be_const_str_lv_list; -extern const bcstring be_const_str_I2S_OUT_DATA; -extern const bcstring be_const_str_ST7789_DC; -extern const bcstring be_const_str_log; -extern const bcstring be_const_str_I2S_IN_CLK; -extern const bcstring be_const_str_BOILER_OT_RX; -extern const bcstring be_const_str_TM1638CLK; -extern const bcstring be_const_str_SYMBOL_SAVE; -extern const bcstring be_const_str_TFMINIPLUS_TX; -extern const bcstring be_const_str_MAX31855CS; -extern const bcstring be_const_str_SDM630_TX; -extern const bcstring be_const_str_SYMBOL_EDIT; -extern const bcstring be_const_str_assert; -extern const bcstring be_const_str_lv_calendar; -extern const bcstring be_const_str_MCP39F5_RST; -extern const bcstring be_const_str_SYMBOL_LIST; -extern const bcstring be_const_str_SYMBOL_PAUSE; -extern const bcstring be_const_str_lv_spinbox; -extern const bcstring be_const_str_CC1101_GDO0; -extern const bcstring be_const_str_CNTR1; -extern const bcstring be_const_str_TM1637DIO; -extern const bcstring be_const_str_exec_cmd; -extern const bcstring be_const_str_lv_draw_mask_saved; -extern const bcstring be_const_str_VL53L0X_XSHUT1; -extern const bcstring be_const_str_I2S_IN_DATA; -extern const bcstring be_const_str_ILI9488_CS; -extern const bcstring be_const_str_SWT1_PD; -extern const bcstring be_const_str_acos; -extern const bcstring be_const_str_PZEM016_RX; -extern const bcstring be_const_str_SDCARD_CS; -extern const bcstring be_const_str_save; -extern const bcstring be_const_str_LE01MR_RX; -extern const bcstring be_const_str_KEY1_TC; -extern const bcstring be_const_str_FTC532; -extern const bcstring be_const_str_HX711_SCK; -extern const bcstring be_const_str_AZ_RXD; -extern const bcstring be_const_str_IEM3000_RX; -extern const bcstring be_const_str_NEOPOOL_RX; -extern const bcstring be_const_str_as; -extern const bcstring be_const_str_WEBCAM_PCLK; -extern const bcstring be_const_str_lv_cb; -extern const bcstring be_const_str_PULLDOWN; -extern const bcstring be_const_str_ARIRFSEL; -extern const bcstring be_const_str_RXD; -extern const bcstring be_const_str_WINDMETER_SPEED; -extern const bcstring be_const_str_write_bit; -extern const bcstring be_const_str_A4988_STP; -extern const bcstring be_const_str_get_free_heap; -extern const bcstring be_const_str_isrunning; -extern const bcstring be_const_str_lv_label; -extern const bcstring be_const_str_AudioOutput; -extern const bcstring be_const_str_I2S_OUT_CLK; -extern const bcstring be_const_str_KEY1; -extern const bcstring be_const_str__rules; -extern const bcstring be_const_str_gamma10; -extern const bcstring be_const_str_lv_dropdown; -extern const bcstring be_const_str_OLED_RESET; -extern const bcstring be_const_str_remove_cmd; -extern const bcstring be_const_str_SYMBOL_BULLET; -extern const bcstring be_const_str_atan; -extern const bcstring be_const_str_lv_tabview; -extern const bcstring be_const_str_PN532_TXD; -extern const bcstring be_const_str_set_timer; -extern const bcstring be_const_str_opt_connect; -extern const bcstring be_const_str_DEEPSLEEP; -extern const bcstring be_const_str_SSPI_CS; -extern const bcstring be_const_str_TASMOTACLIENT_RXD; -extern const bcstring be_const_str_content_button; -extern const bcstring be_const_str_fromb64; -extern const bcstring be_const_str_size; -extern const bcstring be_const_str_members; -extern const bcstring be_const_str_LED1; -extern const bcstring be_const_str_exp; -extern const bcstring be_const_str_issubclass; -extern const bcstring be_const_str_OUTPUT_HI; -extern const bcstring be_const_str_SYMBOL_EYE_OPEN; -extern const bcstring be_const_str_floor; -extern const bcstring be_const_str_opt_neq; -extern const bcstring be_const_str_DCKI; -extern const bcstring be_const_str_lv_draw_mask_line_param; -extern const bcstring be_const_str_getbits; -extern const bcstring be_const_str_SWT1_NP; -extern const bcstring be_const_str_MAX31855DO; -extern const bcstring be_const_str_SR04_TRIG; -extern const bcstring be_const_str_lv_style; -extern const bcstring be_const_str_select; -extern const bcstring be_const_str_var; -extern const bcstring be_const_str_tanh; -extern const bcstring be_const_str_DDS2382_RX; -extern const bcstring be_const_str_MAX7219CS; -extern const bcstring be_const_str_MHZ_RXD; -extern const bcstring be_const_str_SYMBOL_PLAY; -extern const bcstring be_const_str_pin_mode; -extern const bcstring be_const_str_elif; -extern const bcstring be_const_str_SSD1331_DC; -extern const bcstring be_const_str_traceback; -extern const bcstring be_const_str_PMS5003_TX; -extern const bcstring be_const_str_calldepth; -extern const bcstring be_const_str_PWM1_INV; -extern const bcstring be_const_str_SSPI_DC; -extern const bcstring be_const_str_time_str; -extern const bcstring be_const_str_ETH_PHY_MDC; -extern const bcstring be_const_str_lv_sqrt_res; -extern const bcstring be_const_str_push; -extern const bcstring be_const_str_AudioGeneratorMP3; -extern const bcstring be_const_str_lv_gauge; -extern const bcstring be_const_str_resolvecmnd; -extern const bcstring be_const_str_lv_draw_mask_map_param_cfg; -extern const bcstring be_const_str_DI; -extern const bcstring be_const_str_REL1_INV; -extern const bcstring be_const_str_on; -extern const bcstring be_const_str_GPS_RX; -extern const bcstring be_const_str_SYMBOL_OK; -extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; -extern const bcstring be_const_str_HIGH; -extern const bcstring be_const_str_I2C_SDA; -extern const bcstring be_const_str_resp_cmnd_error; -extern const bcstring be_const_str_IBEACON_RX; -extern const bcstring be_const_str_SBR_TX; -extern const bcstring be_const_str_SYMBOL_WIFI; -extern const bcstring be_const_str_AudioFileSourceFS; -extern const bcstring be_const_str_MP3_DFR562; -extern const bcstring be_const_str_RC522_RST; -extern const bcstring be_const_str_SSD1331_CS; -extern const bcstring be_const_str_SYMBOL_DOWN; -extern const bcstring be_const_str_WIEGAND_D1; -extern const bcstring be_const_str_arg_name; -extern const bcstring be_const_str_get_option; -extern const bcstring be_const_str_ETH_PHY_MDIO; -extern const bcstring be_const_str_LMT01; -extern const bcstring be_const_str_MGC3130_RESET; -extern const bcstring be_const_str_PWM1; -extern const bcstring be_const_str_ZIGBEE_TX; -extern const bcstring be_const_str_scale_uint; -extern const bcstring be_const_str_AudioOutputI2S; -extern const bcstring be_const_str_SYMBOL_SETTINGS; -extern const bcstring be_const_str_lv_switch; -extern const bcstring be_const_str_LEDLNK_INV; -extern const bcstring be_const_str_SI7021; -extern const bcstring be_const_str_SSPI_MAX31865_CS1; -extern const bcstring be_const_str_TCP_RX; -extern const bcstring be_const_str_BS814_DAT; -extern const bcstring be_const_str_RFSEND; -extern const bcstring be_const_str_SYMBOL_UPLOAD; -extern const bcstring be_const_str_publish_result; -extern const bcstring be_const_str_remove; -extern const bcstring be_const_str_opt_add; -extern const bcstring be_const_str_lv_draw_mask_angle_param_cfg; -extern const bcstring be_const_str_lv_point; -extern const bcstring be_const_str_SSPI_SCLK; -extern const bcstring be_const_str_BOILER_OT_TX; -extern const bcstring be_const_str_ZIGBEE_RST; -extern const bcstring be_const_str_nil; -extern const bcstring be_const_str_SYMBOL_SD_CARD; -extern const bcstring be_const_str_CC1101_GDO2; -extern const bcstring be_const_str_lv_spinner; -extern const bcstring be_const_str_HM10_TX; -extern const bcstring be_const_str_lv_btn; -extern const bcstring be_const_str_DHT11; -extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; -extern const bcstring be_const_str_SSD1351_CS; -extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; -extern const bcstring be_const_str_SYMBOL_HOME; -extern const bcstring be_const_str_SYMBOL_MINUS; -extern const bcstring be_const_str_imin; -extern const bcstring be_const_str_list; -extern const bcstring be_const_str_EPAPER29_CS; -extern const bcstring be_const_str_LE01MR_TX; -extern const bcstring be_const_str_WE517_RX; -extern const bcstring be_const_str__cmd; -extern const bcstring be_const_str_tag; -extern const bcstring be_const_str_A4988_DIR; -extern const bcstring be_const_str_if; -extern const bcstring be_const_str_dot_p2; -extern const bcstring be_const_str_IEM3000_TX; -extern const bcstring be_const_str___upper__; -extern const bcstring be_const_str_content_flush; -extern const bcstring be_const_str_ILI9341_DC; -extern const bcstring be_const_str_I2C_Driver; -extern const bcstring be_const_str_add; -extern const bcstring be_const_str_remove_rule; -extern const bcstring be_const_str_web_send; -extern const bcstring be_const_str_ADC_BUTTON; -extern const bcstring be_const_str_TXD; -extern const bcstring be_const_str_resp_cmnd_str; -extern const bcstring be_const_str_split; -extern const bcstring be_const_str_MAX7219DIN; -extern const bcstring be_const_str_WIEGAND_D0; -extern const bcstring be_const_str_DDSU666_RX; -extern const bcstring be_const_str_MIEL_HVAC_TX; -extern const bcstring be_const_str_KEY1_PD; -extern const bcstring be_const_str_TFMINIPLUS_RX; -extern const bcstring be_const_str_ceil; -extern const bcstring be_const_str_cmd; -extern const bcstring be_const_str_digital_read; -extern const bcstring be_const_str_target_search; -extern const bcstring be_const_str_SYMBOL_LEFT; -extern const bcstring be_const_str_LOW; -extern const bcstring be_const_str_gc; -extern const bcstring be_const_str_bus; -extern const bcstring be_const_str_EC_C25519; -extern const bcstring be_const_str_char; -extern const bcstring be_const_str_lv_keyboard; -extern const bcstring be_const_str_open; -extern const bcstring be_const_str_lv_draw_mask_fade_param; -extern const bcstring be_const_str_class; -extern const bcstring be_const_str_exec_rules; -extern const bcstring be_const_str_insert; -extern const bcstring be_const_str_SAIR_RX; -extern const bcstring be_const_str_toupper; -extern const bcstring be_const_str_def; -extern const bcstring be_const_str_A4988_ENA; -extern const bcstring be_const_str_asstring; -extern const bcstring be_const_str___iterator__; -extern const bcstring be_const_str_static; -extern const bcstring be_const_str_I2S_OUT_SLCT; -extern const bcstring be_const_str_P9813_CLK; -extern const bcstring be_const_str_lv_draw_label_dsc; -extern const bcstring be_const_str_type; -extern const bcstring be_const_str_lv_img; -extern const bcstring be_const_str_CHANGE; extern const bcstring be_const_str_EXS_ENABLE; extern const bcstring be_const_str_SYMBOL_WARNING; -extern const bcstring be_const_str_lv_draw_mask_fade_param_cfg; -extern const bcstring be_const_str_lv_msgbox; -extern const bcstring be_const_str_CSE7766_TX; -extern const bcstring be_const_str_sqrt; -extern const bcstring be_const_str_A4988_MS1; -extern const bcstring be_const_str_EPD_DATA; -extern const bcstring be_const_str_SYMBOL_CALL; -extern const bcstring be_const_str_WEBCAM_SIOD; -extern const bcstring be_const_str_read13; -extern const bcstring be_const_str_WEBCAM_PWDN; -extern const bcstring be_const_str_input; -extern const bcstring be_const_str_read8; -extern const bcstring be_const_str_lv_linemeter; -extern const bcstring be_const_str_lv_page; -extern const bcstring be_const_str_dot_p1; -extern const bcstring be_const_str_WEBCAM_PSRCS; -extern const bcstring be_const_str_CSE7761_RX; -extern const bcstring be_const_str_TM1638DIO; -extern const bcstring be_const_str_ADC_JOY; -extern const bcstring be_const_str_CSE7766_RX; -extern const bcstring be_const_str_SYMBOL_DIRECTORY; -extern const bcstring be_const_str_lower; -extern const bcstring be_const_str_loop; -extern const bcstring be_const_str_SYMBOL_BACKSPACE; -extern const bcstring be_const_str_print; -extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; -extern const bcstring be_const_str_addr; -extern const bcstring be_const_str_dot_p; -extern const bcstring be_const_str_lv_canvas; -extern const bcstring be_const_str_INPUT; -extern const bcstring be_const_str_chars_in_string; -extern const bcstring be_const_str_lv_event_cb; -extern const bcstring be_const_str_opt_eq; -extern const bcstring be_const_str_ZIGBEE_RX; -extern const bcstring be_const_str__drivers; -extern const bcstring be_const_str_ADC_BUTTON_INV; -extern const bcstring be_const_str_detect; -extern const bcstring be_const_str_KEY1_NP; -extern const bcstring be_const_str_SSPI_MOSI; -extern const bcstring be_const_str_SYMBOL_KEYBOARD; -extern const bcstring be_const_str__cb; -extern const bcstring be_const_str_SM16716_CLK; -extern const bcstring be_const_str_rad; -extern const bcstring be_const_str_toint; -extern const bcstring be_const_str_item; -extern const bcstring be_const_str_lv_objmask; -extern const bcstring be_const_str_NRF24_CS; -extern const bcstring be_const_str_PZEM004_RX; -extern const bcstring be_const_str_deg; -extern const bcstring be_const_str_GPS_TX; -extern const bcstring be_const_str_OPEN_DRAIN; -extern const bcstring be_const_str_SYMBOL_DOWNLOAD; -extern const bcstring be_const_str_resp_cmnd_failed; -extern const bcstring be_const_str_SYMBOL_AUDIO; -extern const bcstring be_const_str_state; -extern const bcstring be_const_str_call; -extern const bcstring be_const_str_lv_btnmatrix; -extern const bcstring be_const_str_SYMBOL_UP; -extern const bcstring be_const_str_for; -extern const bcstring be_const_str_SPI_MISO; -extern const bcstring be_const_str_BL0940_RX; -extern const bcstring be_const_str_seg7_font; -extern const bcstring be_const_str_start; -extern const bcstring be_const_str_strftime; -extern const bcstring be_const_str_SM16716_SEL; -extern const bcstring be_const_str___lower__; -extern const bcstring be_const_str_lv_imgbtn; -extern const bcstring be_const_str_pow; -extern const bcstring be_const_str_NEOPOOL_TX; -extern const bcstring be_const_str_SYMBOL_STOP; -extern const bcstring be_const_str_name; -extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; -extern const bcstring be_const_str_AZ_TXD; -extern const bcstring be_const_str_FALLING; -extern const bcstring be_const_str_rand; -extern const bcstring be_const_str_import; -extern const bcstring be_const_str_SR04_ECHO; -extern const bcstring be_const_str_scan; -extern const bcstring be_const_str_set_power; -extern const bcstring be_const_str_DDSU666_TX; -extern const bcstring be_const_str_IRSEND; -extern const bcstring be_const_str__request_from; -extern const bcstring be_const_str_keys; -extern const bcstring be_const_str_lv_led; -extern const bcstring be_const_str_real; -extern const bcstring be_const_str_ST7789_CS; -extern const bcstring be_const_str_TCP_TX; -extern const bcstring be_const_str_NONE; -extern const bcstring be_const_str_NRG_SEL; -extern const bcstring be_const_str_read24; -extern const bcstring be_const_str_RF_SENSOR; -extern const bcstring be_const_str_erase; -extern const bcstring be_const_str_clear; -extern const bcstring be_const_str_montserrat_font; -extern const bcstring be_const_str_has_arg; -extern const bcstring be_const_str_lv_table; -extern const bcstring be_const_str_SYMBOL_PLUS; -extern const bcstring be_const_str_map; -extern const bcstring be_const_str_MHZ_TXD; -extern const bcstring be_const_str_lv_arc; -extern const bcstring be_const_str_PN532_RXD; -extern const bcstring be_const_str_ROT1A; -extern const bcstring be_const_str_SWT1; -extern const bcstring be_const_str_WEBCAM_XCLK; -extern const bcstring be_const_str_HRE_CLOCK; -extern const bcstring be_const_str_abs; -extern const bcstring be_const_str_SM16716_DAT; -extern const bcstring be_const_str_codedump; -extern const bcstring be_const_str_decrypt; -extern const bcstring be_const_str_find; -extern const bcstring be_const_str_WE517_TX; -extern const bcstring be_const_str_MCP39F5_RX; -extern const bcstring be_const_str_content_send; -extern const bcstring be_const_str_set; -extern const bcstring be_const_str_ADE7953_IRQ; -extern const bcstring be_const_str_RFRECV; -extern const bcstring be_const_str_ctypes_bytes; -extern const bcstring be_const_str_resp_cmnd; -extern const bcstring be_const_str_update; -extern const bcstring be_const_str_web_send_decimal; -extern const bcstring be_const_str_add_cmd; -extern const bcstring be_const_str_fromstring; -extern const bcstring be_const_str_load; -extern const bcstring be_const_str_wire1; -extern const bcstring be_const_str_MGC3130_XFER; -extern const bcstring be_const_str_AudioFileSource; -extern const bcstring be_const_str_sin; -extern const bcstring be_const_str_try; -extern const bcstring be_const_str_ARIRFRCV; -extern const bcstring be_const_str_MD5; -extern const bcstring be_const_str_hex; -extern const bcstring be_const_str_setrange; -extern const bcstring be_const_str_HALLEFFECT; -extern const bcstring be_const_str_SAIR_TX; -extern const bcstring be_const_str_lv_font; extern const bcstring be_const_str_raise; -extern const bcstring be_const_str_BACKLIGHT; -extern const bcstring be_const_str__begin_transmission; -extern const bcstring be_const_str_SYMBOL_IMAGE; -extern const bcstring be_const_str_SYMBOL_VIDEO; -extern const bcstring be_const_str_wire_scan; -extern const bcstring be_const_str_pin_used; -extern const bcstring be_const_str_register_button_encoder; -extern const bcstring be_const_str_AS3935; -extern const bcstring be_const_str_ROT1B_NP; +extern const bcstring be_const_str_opt_connect; +extern const bcstring be_const_str_calldepth; +extern const bcstring be_const_str_lv_spinner; +extern const bcstring be_const_str_stop; +extern const bcstring be_const_str_gamma10; +extern const bcstring be_const_str_rtc; +extern const bcstring be_const_str_HRXL_RX; +extern const bcstring be_const_str_ETH_PHY_MDC; +extern const bcstring be_const_str_SYMBOL_EYE_OPEN; +extern const bcstring be_const_str_time_dump; +extern const bcstring be_const_str_lv_draw_mask_angle_param; +extern const bcstring be_const_str_setitem; +extern const bcstring be_const_str_split; +extern const bcstring be_const_str_pow; +extern const bcstring be_const_str_resp_cmnd_failed; +extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; +extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; +extern const bcstring be_const_str_PULLDOWN; +extern const bcstring be_const_str_SYMBOL_POWER; +extern const bcstring be_const_str_LOW; +extern const bcstring be_const_str_dot_def; +extern const bcstring be_const_str_DDSU666_TX; +extern const bcstring be_const_str_EC_C25519; +extern const bcstring be_const_str_add_cmd; +extern const bcstring be_const_str_ST7789_CS; +extern const bcstring be_const_str_Wire; +extern const bcstring be_const_str_HM10_TX; +extern const bcstring be_const_str_IRSEND; +extern const bcstring be_const_str_SDM120_RX; +extern const bcstring be_const_str_lv_draw_mask_common_dsc; +extern const bcstring be_const_str_KEY1_INV_NP; +extern const bcstring be_const_str_SSD1331_DC; +extern const bcstring be_const_str_WEBCAM_PCLK; +extern const bcstring be_const_str_gc; +extern const bcstring be_const_str_try; +extern const bcstring be_const_str_SYMBOL_LEFT; +extern const bcstring be_const_str_pin_mode; +extern const bcstring be_const_str_OPEN_DRAIN; +extern const bcstring be_const_str_pin; +extern const bcstring be_const_str_HX711_DAT; +extern const bcstring be_const_str___upper__; +extern const bcstring be_const_str_LE01MR_RX; +extern const bcstring be_const_str_SYMBOL_SETTINGS; +extern const bcstring be_const_str_get_free_heap; +extern const bcstring be_const_str_opt_call; +extern const bcstring be_const_str_LEDLNK_INV; +extern const bcstring be_const_str_WIEGAND_D1; +extern const bcstring be_const_str_lv_draw_mask_line_param; +extern const bcstring be_const_str_CC1101_GDO0; +extern const bcstring be_const_str_RC522_CS; +extern const bcstring be_const_str_BUZZER_INV; +extern const bcstring be_const_str_DHT11_OUT; +extern const bcstring be_const_str_MCP39F5_TX; +extern const bcstring be_const_str_pi; +extern const bcstring be_const_str_PN532_RXD; +extern const bcstring be_const_str_lv_style; +extern const bcstring be_const_str_I2S_IN_CLK; +extern const bcstring be_const_str_get; +extern const bcstring be_const_str_lv_checkbox; +extern const bcstring be_const_str_lv_design_cb; +extern const bcstring be_const_str_MAX31855CLK; +extern const bcstring be_const_str_isrunning; extern const bcstring be_const_str_lv_obj; -extern const bcstring be_const_str_run_deferred; -extern const bcstring be_const_str_AudioGeneratorWAV; -extern const bcstring be_const_str_SYMBOL_REFRESH; -extern const bcstring be_const_str_classname; -extern const bcstring be_const_str_SDM72_TX; -extern const bcstring be_const_str_SYMBOL_PREV; -extern const bcstring be_const_str_eth; -extern const bcstring be_const_str_range; -extern const bcstring be_const_str_PROJECTOR_CTRL_TX; -extern const bcstring be_const_str_format; -extern const bcstring be_const_str_SYMBOL_DRIVE; -extern const bcstring be_const_str_ILI9341_CS; +extern const bcstring be_const_str_LMT01; +extern const bcstring be_const_str_SYMBOL_SD_CARD; +extern const bcstring be_const_str_begin; +extern const bcstring be_const_str_dot_p2; +extern const bcstring be_const_str_ROT1B_NP; +extern const bcstring be_const_str_SBR_TX; +extern const bcstring be_const_str_erase; +extern const bcstring be_const_str_module; +extern const bcstring be_const_str_read13; +extern const bcstring be_const_str_EPAPER29_CS; +extern const bcstring be_const_str_SPI_CLK; +extern const bcstring be_const_str_digital_write; +extern const bcstring be_const_str_public_key; +extern const bcstring be_const_str_I2C_SCL; +extern const bcstring be_const_str_IEM3000_RX; +extern const bcstring be_const_str_vcall; +extern const bcstring be_const_str_set_power; +extern const bcstring be_const_str_lv_area; +extern const bcstring be_const_str_write8; +extern const bcstring be_const_str_A4988_STP; +extern const bcstring be_const_str_SYMBOL_CHARGE; +extern const bcstring be_const_str_upper; +extern const bcstring be_const_str_ROT1B; +extern const bcstring be_const_str_RXD; +extern const bcstring be_const_str_XPT2046_CS; +extern const bcstring be_const_str_try_rule; +extern const bcstring be_const_str_DYP_RX; +extern const bcstring be_const_str_cos; +extern const bcstring be_const_str_lv_arc; +extern const bcstring be_const_str_read12; +extern const bcstring be_const_str_write_bytes; extern const bcstring be_const_str_OPTION_A; -extern const bcstring be_const_str_SYMBOL_DUMMY; -extern const bcstring be_const_str__get_cb; +extern const bcstring be_const_str_lv_draw_mask_angle_param_cfg; +extern const bcstring be_const_str_url_encode; +extern const bcstring be_const_str_MHZ_RXD; +extern const bcstring be_const_str__read; +extern const bcstring be_const_str_A4988_ENA; +extern const bcstring be_const_str_bytes; +extern const bcstring be_const_str_lv_draw_mask_fade_param; +extern const bcstring be_const_str_lv_led; +extern const bcstring be_const_str_run_deferred; +extern const bcstring be_const_str_SDM630_TX; +extern const bcstring be_const_str_WEBCAM_DATA; +extern const bcstring be_const_str_detect; +extern const bcstring be_const_str_reset; +extern const bcstring be_const_str_member; +extern const bcstring be_const_str_load; +extern const bcstring be_const_str_content_send_style; +extern const bcstring be_const_str_content_stop; +extern const bcstring be_const_str__cmd; +extern const bcstring be_const_str_add_header; +extern const bcstring be_const_str_SYMBOL_RIGHT; +extern const bcstring be_const_str_opt_eq; +extern const bcstring be_const_str_HX711_SCK; +extern const bcstring be_const_str_WINDMETER_SPEED; +extern const bcstring be_const_str_byte; +extern const bcstring be_const_str_arg_name; +extern const bcstring be_const_str_lv_objmask; +extern const bcstring be_const_str_SPI_DC; +extern const bcstring be_const_str_rand; +extern const bcstring be_const_str_MP3_DFR562; +extern const bcstring be_const_str_TM1638STB; +extern const bcstring be_const_str_lv_dropdown; +extern const bcstring be_const_str_MGC3130_XFER; +extern const bcstring be_const_str_SDM120_TX; +extern const bcstring be_const_str_loop; +extern const bcstring be_const_str_tag; +extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; +extern const bcstring be_const_str_DEEPSLEEP; +extern const bcstring be_const_str_SOLAXX1_RX; +extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; +extern const bcstring be_const_str_assert; +extern const bcstring be_const_str_ADC_LIGHT; +extern const bcstring be_const_str_find_key_i; +extern const bcstring be_const_str_init; +extern const bcstring be_const_str_except; +extern const bcstring be_const_str_return; +extern const bcstring be_const_str_DHT22; +extern const bcstring be_const_str_PWM1; +extern const bcstring be_const_str_call; +extern const bcstring be_const_str_TM1637CLK; +extern const bcstring be_const_str_abs; +extern const bcstring be_const_str_lv_draw_mask_saved; +extern const bcstring be_const_str_SDM72_RX; +extern const bcstring be_const_str_SSPI_MAX31865_CS1; +extern const bcstring be_const_str_input; +extern const bcstring be_const_str_MIEL_HVAC_TX; +extern const bcstring be_const_str_KEY1_INV; +extern const bcstring be_const_str_MHZ_TXD; +extern const bcstring be_const_str_SYMBOL_PAUSE; +extern const bcstring be_const_str_lv_chart; +extern const bcstring be_const_str_AZ_RXD; +extern const bcstring be_const_str_SYMBOL_DOWNLOAD; +extern const bcstring be_const_str_write; +extern const bcstring be_const_str_SYMBOL_COPY; +extern const bcstring be_const_str_I2C_Driver; +extern const bcstring be_const_str_I2S_IN_SLCT; +extern const bcstring be_const_str_KEY1_TC; +extern const bcstring be_const_str_lv_draw_mask_map_param; +extern const bcstring be_const_str_target_search; +extern const bcstring be_const_str_SR04_TRIG; +extern const bcstring be_const_str__rules; +extern const bcstring be_const_str_rad; +extern const bcstring be_const_str_type; +extern const bcstring be_const_str_ETH_PHY_MDIO; +extern const bcstring be_const_str_HPMA_RX; +extern const bcstring be_const_str_NRG_SEL; +extern const bcstring be_const_str_TASMOTACLIENT_RXD; +extern const bcstring be_const_str_tob64; +extern const bcstring be_const_str_srand; +extern const bcstring be_const_str_BS814_CLK; +extern const bcstring be_const_str_SYMBOL_DIRECTORY; +extern const bcstring be_const_str_read24; +extern const bcstring be_const_str_PROJECTOR_CTRL_TX; +extern const bcstring be_const_str_SSPI_CS; +extern const bcstring be_const_str_TELEINFO_RX; +extern const bcstring be_const_str_TUYA_RX; extern const bcstring be_const_str_seti; +extern const bcstring be_const_str__begin_transmission; +extern const bcstring be_const_str_do; +extern const bcstring be_const_str_SAIR_RX; +extern const bcstring be_const_str_Tasmota; +extern const bcstring be_const_str_keys; +extern const bcstring be_const_str_pin_used; +extern const bcstring be_const_str_GET; +extern const bcstring be_const_str_item; +extern const bcstring be_const_str_resp_cmnd_done; +extern const bcstring be_const_str_exec_rules; +extern const bcstring be_const_str_HIGH; +extern const bcstring be_const_str_PN532_TXD; +extern const bcstring be_const_str_SSD1351_CS; +extern const bcstring be_const_str_LEDLNK; +extern const bcstring be_const_str_SAIR_TX; +extern const bcstring be_const_str_lv_calendar; +extern const bcstring be_const_str_lv_group; +extern const bcstring be_const_str_get_string; +extern const bcstring be_const_str_lv_draw_mask_radius_param_cfg; +extern const bcstring be_const_str_publish; +extern const bcstring be_const_str_KEY1; +extern const bcstring be_const_str_PWM1_INV; +extern const bcstring be_const_str__timers; +extern const bcstring be_const_str_map; +extern const bcstring be_const_str_ADC_CT_POWER; +extern const bcstring be_const_str_SYMBOL_BULLET; +extern const bcstring be_const_str_SYMBOL_LIST; +extern const bcstring be_const_str_check_privileged_access; +extern const bcstring be_const_str_lv_cont; +extern const bcstring be_const_str_content_send; +extern const bcstring be_const_str_dump; +extern const bcstring be_const_str_memory; +extern const bcstring be_const_str_SYMBOL_BATTERY_3; +extern const bcstring be_const_str_ZIGBEE_TX; +extern const bcstring be_const_str_cmd; +extern const bcstring be_const_str_fromstring; +extern const bcstring be_const_str_ADC_INPUT; +extern const bcstring be_const_str_INPUT; +extern const bcstring be_const_str_exists; +extern const bcstring be_const_str_floor; +extern const bcstring be_const_str_EPD_DATA; +extern const bcstring be_const_str_SM2135_CLK; +extern const bcstring be_const_str_SYMBOL_VOLUME_MID; +extern const bcstring be_const_str_find; +extern const bcstring be_const_str_var; +extern const bcstring be_const_str_ZEROCROSS; +extern const bcstring be_const_str_depower; +extern const bcstring be_const_str_AudioOutputI2S; +extern const bcstring be_const_str_SYMBOL_UPLOAD; +extern const bcstring be_const_str_class; +extern const bcstring be_const_str_SDM630_RX; +extern const bcstring be_const_str_SYMBOL_SAVE; +extern const bcstring be_const_str_WE517_TX; +extern const bcstring be_const_str_I2S_OUT_DATA; +extern const bcstring be_const_str_MCP39F5_RX; +extern const bcstring be_const_str_fromb64; +extern const bcstring be_const_str_OLED_RESET; +extern const bcstring be_const_str_RDM6300_RX; +extern const bcstring be_const_str_REL1; +extern const bcstring be_const_str_SYMBOL_STOP; +extern const bcstring be_const_str_screenshot; +extern const bcstring be_const_str_print; +extern const bcstring be_const_str_I2S_OUT_CLK; +extern const bcstring be_const_str_set_timeouts; +extern const bcstring be_const_str_AZ_TXD; +extern const bcstring be_const_str_CSE7766_TX; +extern const bcstring be_const_str_SYMBOL_DUMMY; +extern const bcstring be_const_str_VL53L0X_XSHUT1; +extern const bcstring be_const_str_PZEM016_RX; +extern const bcstring be_const_str__available; +extern const bcstring be_const_str_get_power; +extern const bcstring be_const_str_lv_canvas; +extern const bcstring be_const_str_lv_roller; +extern const bcstring be_const_str_while; +extern const bcstring be_const_str_SYMBOL_CUT; +extern const bcstring be_const_str_AudioGeneratorMP3; +extern const bcstring be_const_str_SYMBOL_BLUETOOTH; +extern const bcstring be_const_str_ADC_JOY; +extern const bcstring be_const_str_RC522_RST; +extern const bcstring be_const_str_list; +extern const bcstring be_const_str_lv_draw_rect_dsc; +extern const bcstring be_const_str_AS608_TX; +extern const bcstring be_const_str_FALLING; +extern const bcstring be_const_str_HPMA_TX; +extern const bcstring be_const_str_insert; +extern const bcstring be_const_str_lv_draw_img_dsc; +extern const bcstring be_const_str_ILI9341_DC; +extern const bcstring be_const_str_TX2X_TXD_BLACK; +extern const bcstring be_const_str_load_font; +extern const bcstring be_const_str_sinh; +extern const bcstring be_const_str_SDM72_TX; +extern const bcstring be_const_str_HLW_CF; +extern const bcstring be_const_str_ROT1A_NP; +extern const bcstring be_const_str_lv_switch; +extern const bcstring be_const_str_read_bytes; +extern const bcstring be_const_str_nil; +extern const bcstring be_const_str_SPI_MISO; +extern const bcstring be_const_str_FTC532; +extern const bcstring be_const_str_pop; +extern const bcstring be_const_str_scan; +extern const bcstring be_const_str_setbits; +extern const bcstring be_const_str_int; +extern const bcstring be_const_str_GPS_RX; +extern const bcstring be_const_str__request_from; +extern const bcstring be_const_str_SDCARD_CS; +extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; +extern const bcstring be_const_str_else; +extern const bcstring be_const_str_AudioGenerator; +extern const bcstring be_const_str_BACKLIGHT; +extern const bcstring be_const_str_NRG_CF1; +extern const bcstring be_const_str_remove; +extern const bcstring be_const_str_OUTPUT_LO; +extern const bcstring be_const_str_lv_draw_label_dsc; +extern const bcstring be_const_str_lv_font; +extern const bcstring be_const_str_SYMBOL_USB; +extern const bcstring be_const_str_lv_sqrt_res; +extern const bcstring be_const_str_SYMBOL_EJECT; +extern const bcstring be_const_str_MCP39F5_RST; +extern const bcstring be_const_str_TASMOTACLIENT_TXD; +extern const bcstring be_const_str_ETH_PHY_POWER; +extern const bcstring be_const_str_ctypes_bytes; +extern const bcstring be_const_str_remove_timer; +extern const bcstring be_const_str_AudioFileSourceFS; +extern const bcstring be_const_str_LE01MR_TX; +extern const bcstring be_const_str_SENSOR_END; +extern const bcstring be_const_str_finish; +extern const bcstring be_const_str_lv_gauge; +extern const bcstring be_const_str_get_size; +extern const bcstring be_const_str_name; +extern const bcstring be_const_str_save; +extern const bcstring be_const_str_read; +extern const bcstring be_const_str_wire; +extern const bcstring be_const_str_char; +extern const bcstring be_const_str_acos; +extern const bcstring be_const_str_deinit; +extern const bcstring be_const_str_NONE; +extern const bcstring be_const_str_ADE7953_IRQ; +extern const bcstring be_const_str_ILI9488_CS; +extern const bcstring be_const_str_SSPI_MOSI; +extern const bcstring be_const_str_HJL_CF; +extern const bcstring be_const_str_lv_spinbox; +extern const bcstring be_const_str_chars_in_string; +extern const bcstring be_const_str_set_useragent; +extern const bcstring be_const_str_SPI_CS; +extern const bcstring be_const_str_EPAPER42_CS; +extern const bcstring be_const_str_SI7021; +extern const bcstring be_const_str_classname; +extern const bcstring be_const_str_get_option; +extern const bcstring be_const_str_lv_point; +extern const bcstring be_const_str_members; +extern const bcstring be_const_str_AudioOutput; +extern const bcstring be_const_str_IEM3000_TX; +extern const bcstring be_const_str_lv_textarea; +extern const bcstring be_const_str_LED1; +extern const bcstring be_const_str_MAX7219DIN; +extern const bcstring be_const_str_opt_neq; +extern const bcstring be_const_str_WE517_RX; +extern const bcstring be_const_str_WEBCAM_PSRCS; +extern const bcstring be_const_str_on; +extern const bcstring be_const_str_codedump; +extern const bcstring be_const_str_wire2; +extern const bcstring be_const_str_SSD1331_CS; +extern const bcstring be_const_str_event; +extern const bcstring be_const_str_lv_indev; +extern const bcstring be_const_str_set_auth; +extern const bcstring be_const_str_SDS0X1_RX; +extern const bcstring be_const_str_SYMBOL_LOOP; +extern const bcstring be_const_str_WEBCAM_VSYNC; +extern const bcstring be_const_str_lv_draw_mask_line_param_cfg; +extern const bcstring be_const_str_DSB_OUT; +extern const bcstring be_const_str_WEBCAM_RESET; +extern const bcstring be_const_str_compile; +extern const bcstring be_const_str_lv_imgbtn; +extern const bcstring be_const_str_number; +extern const bcstring be_const_str_set; +extern const bcstring be_const_str_ADC_TEMP; +extern const bcstring be_const_str_ADC_PH; +extern const bcstring be_const_str_MAX31855DO; +extern const bcstring be_const_str_register_button_encoder; +extern const bcstring be_const_str_bus; +extern const bcstring be_const_str_log10; +extern const bcstring be_const_str_SYMBOL_BATTERY_2; +extern const bcstring be_const_str_TCP_TX; +extern const bcstring be_const_str_ceil; +extern const bcstring be_const_str_delay; +extern const bcstring be_const_str_SDS0X1_TX; +extern const bcstring be_const_str_ST7789_DC; +extern const bcstring be_const_str_SYMBOL_BACKSPACE; +extern const bcstring be_const_str_lv_line; +extern const bcstring be_const_str_GPS_TX; +extern const bcstring be_const_str_DHT11; +extern const bcstring be_const_str_NRG_SEL_INV; +extern const bcstring be_const_str_gen_cb; +extern const bcstring be_const_str_DCKI; +extern const bcstring be_const_str_MAX7219CS; +extern const bcstring be_const_str_P9813_CLK; +extern const bcstring be_const_str_DI; +extern const bcstring be_const_str_SM16716_DAT; +extern const bcstring be_const_str__drivers; +extern const bcstring be_const_str_open; +extern const bcstring be_const_str_AS3935; +extern const bcstring be_const_str_SYMBOL_UP; +extern const bcstring be_const_str_BL0940_RX; +extern const bcstring be_const_str_BOILER_OT_RX; +extern const bcstring be_const_str_SYMBOL_SHUFFLE; +extern const bcstring be_const_str__write; +extern const bcstring be_const_str_traceback; +extern const bcstring be_const_str_true; +extern const bcstring be_const_str_webclient; +extern const bcstring be_const_str_ARIRFSEL; +extern const bcstring be_const_str_A4988_MS1; +extern const bcstring be_const_str_ADC_RANGE; +extern const bcstring be_const_str_dot_p; +extern const bcstring be_const_str_INTERRUPT; +extern const bcstring be_const_str_OUTPUT; +extern const bcstring be_const_str_wire_scan; +extern const bcstring be_const_str_I2C_SDA; +extern const bcstring be_const_str_lv_signal_cb; +extern const bcstring be_const_str_toupper; +extern const bcstring be_const_str_update; +extern const bcstring be_const_str_break; +extern const bcstring be_const_str_IBEACON_TX; +extern const bcstring be_const_str_RFSEND; +extern const bcstring be_const_str_has_arg; +extern const bcstring be_const_str_dot_w; +extern const bcstring be_const_str_WEBCAM_HSD; +extern const bcstring be_const_str_SYMBOL_PLUS; +extern const bcstring be_const_str_lv_slider; +extern const bcstring be_const_str_SPI_MOSI; +extern const bcstring be_const_str_count; +extern const bcstring be_const_str_lv_tileview; +extern const bcstring be_const_str_if; +extern const bcstring be_const_str_NRF24_CS; +extern const bcstring be_const_str_RFRECV; +extern const bcstring be_const_str_format; +extern const bcstring be_const_str_scale_uint; +extern const bcstring be_const_str_BUZZER; +extern const bcstring be_const_str_P9813_DAT; +extern const bcstring be_const_str_PROJECTOR_CTRL_RX; +extern const bcstring be_const_str_IBEACON_RX; +extern const bcstring be_const_str_INPUT_PULLUP; +extern const bcstring be_const_str_ZIGBEE_RST; +extern const bcstring be_const_str_montserrat_font; +extern const bcstring be_const_str_remove_rule; +extern const bcstring be_const_str_time_reached; +extern const bcstring be_const_str_SWT1_NP; +extern const bcstring be_const_str_asin; +extern const bcstring be_const_str_start; +extern const bcstring be_const_str_opt_add; +extern const bcstring be_const_str_i2c_enabled; +extern const bcstring be_const_str_deg; +extern const bcstring be_const_str_allocated; +extern const bcstring be_const_str_millis; +extern const bcstring be_const_str_WEBCAM_SIOC; +extern const bcstring be_const_str_SYMBOL_CLOSE; +extern const bcstring be_const_str_search; +extern const bcstring be_const_str_state; +extern const bcstring be_const_str_hex; +extern const bcstring be_const_str_resize; +extern const bcstring be_const_str_cosh; +extern const bcstring be_const_str_SYMBOL_DOWN; +extern const bcstring be_const_str_WEBCAM_SIOD; +extern const bcstring be_const_str_close; +extern const bcstring be_const_str_NEOPOOL_RX; +extern const bcstring be_const_str_select; +extern const bcstring be_const_str_lv_draw_line_dsc; +extern const bcstring be_const_str_lv_draw_mask_map_param_cfg; +extern const bcstring be_const_str_KEY1_PD; +extern const bcstring be_const_str_arg_size; +extern const bcstring be_const_str_lv_linemeter; +extern const bcstring be_const_str_log; +extern const bcstring be_const_str_lv_draw_mask_radius_param; +extern const bcstring be_const_str_DDSU666_RX; +extern const bcstring be_const_str_MAX7219CLK; +extern const bcstring be_const_str_TFMINIPLUS_TX; +extern const bcstring be_const_str_web_send_decimal; +extern const bcstring be_const_str_PULLUP; +extern const bcstring be_const_str_TCP_RX; +extern const bcstring be_const_str_eth; +extern const bcstring be_const_str_publish_result; +extern const bcstring be_const_str_CNTR1_NP; +extern const bcstring be_const_str_PZEM0XX_TX; +extern const bcstring be_const_str_KEY1_NP; +extern const bcstring be_const_str_SYMBOL_REFRESH; +extern const bcstring be_const_str_HRE_CLOCK; +extern const bcstring be_const_str_TFMINIPLUS_RX; +extern const bcstring be_const_str_classof; +extern const bcstring be_const_str_set_timer; +extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; +extern const bcstring be_const_str_lv_tabview; +extern const bcstring be_const_str_CC1101_GDO2; +extern const bcstring be_const_str_I2S_IN_DATA; +extern const bcstring be_const_str_KEY1_INV_PD; +extern const bcstring be_const_str_lv_group_focus_cb; +extern const bcstring be_const_str_PMS5003_TX; +extern const bcstring be_const_str_AES_GCM; +extern const bcstring be_const_str_add; +extern const bcstring be_const_str_TM1638CLK; +extern const bcstring be_const_str_ZIGBEE_RX; +extern const bcstring be_const_str_wire1; +extern const bcstring be_const_str_elif; +extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; +extern const bcstring be_const_str_SWT1; +extern const bcstring be_const_str_SYMBOL_NEW_LINE; +extern const bcstring be_const_str_concat; +extern const bcstring be_const_str_HM10_RX; +extern const bcstring be_const_str_PMS5003_RX; +extern const bcstring be_const_str_addr; +extern const bcstring be_const_str_SSPI_DC; +extern const bcstring be_const_str_for; +extern const bcstring be_const_str_CSE7761_TX; +extern const bcstring be_const_str_SYMBOL_BATTERY_1; +extern const bcstring be_const_str_POST; +extern const bcstring be_const_str_RA8876_CS; +extern const bcstring be_const_str_redirect; +extern const bcstring be_const_str__get_cb; +extern const bcstring be_const_str_ROT1A; +extern const bcstring be_const_str_SSPI_MISO; +extern const bcstring be_const_str_TM1637DIO; +extern const bcstring be_const_str_lv_color; +extern const bcstring be_const_str_SBR_RX; +extern const bcstring be_const_str_setrange; +extern const bcstring be_const_str_HRE_DATA; +extern const bcstring be_const_str_OneWire; +extern const bcstring be_const_str_SYMBOL_PREV; +extern const bcstring be_const_str_WEBCAM_PSCLK; +extern const bcstring be_const_str_add_rule; +extern const bcstring be_const_str_lv_btn; +extern const bcstring be_const_str_sqrt; +extern const bcstring be_const_str_reset_search; +extern const bcstring be_const_str_NRF24_DC; +extern const bcstring be_const_str_SYMBOL_VIDEO; +extern const bcstring be_const_str_OUTPUT_HI; +extern const bcstring be_const_str_SSD1351_DC; +extern const bcstring be_const_str___lower__; +extern const bcstring be_const_str_sin; +extern const bcstring be_const_str_resp_cmnd_str; +extern const bcstring be_const_str_CNTR1; +extern const bcstring be_const_str_imin; +extern const bcstring be_const_str__cb; +extern const bcstring be_const_str__buffer; +extern const bcstring be_const_str_lv_table; +extern const bcstring be_const_str_SYMBOL_CALL; +extern const bcstring be_const_str_SYMBOL_MINUS; +extern const bcstring be_const_str_SYMBOL_PASTE; +extern const bcstring be_const_str_imax; +extern const bcstring be_const_str_time_str; +extern const bcstring be_const_str_RISING; +extern const bcstring be_const_str_resp_cmnd; +extern const bcstring be_const_str_ILI9341_CS; +extern const bcstring be_const_str_SYMBOL_EDIT; +extern const bcstring be_const_str_SYMBOL_KEYBOARD; +extern const bcstring be_const_str_SR04_ECHO; +extern const bcstring be_const_str_AudioGeneratorWAV; +extern const bcstring be_const_str_PZEM004_RX; +extern const bcstring be_const_str_attrdump; +extern const bcstring be_const_str_; +extern const bcstring be_const_str_geti; +extern const bcstring be_const_str_exp; +extern const bcstring be_const_str_SYMBOL_DRIVE; +extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; +extern const bcstring be_const_str_WEBCAM_XCLK; +extern const bcstring be_const_str___iterator__; +extern const bcstring be_const_str_content_flush; +extern const bcstring be_const_str_SYMBOL_NEXT; +extern const bcstring be_const_str_strftime; +extern const bcstring be_const_str_import; +extern const bcstring be_const_str_REL1_INV; +extern const bcstring be_const_str_tan; +extern const bcstring be_const_str_CHANGE; +extern const bcstring be_const_str_range; +extern const bcstring be_const_str_SYMBOL_WIFI; +extern const bcstring be_const_str_WEBCAM_PWDN; +extern const bcstring be_const_str_resolvecmnd; +extern const bcstring be_const_str_def; +extern const bcstring be_const_str_content_button; +extern const bcstring be_const_str_find_op; +extern const bcstring be_const_str_lv_cpicker; +extern const bcstring be_const_str_write_bit; +extern const bcstring be_const_str_end; +extern const bcstring be_const_str_MD5; +extern const bcstring be_const_str_SOLAXX1_TX; +extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; +extern const bcstring be_const_str_reverse_gamma10; +extern const bcstring be_const_str_lv_keyboard; +extern const bcstring be_const_str_SM16716_CLK; +extern const bcstring be_const_str_gamma8; +extern const bcstring be_const_str_isinstance; +extern const bcstring be_const_str_I2S_OUT_SLCT; +extern const bcstring be_const_str_decrypt; +extern const bcstring be_const_str_yield; +extern const bcstring be_const_str_setmember; +extern const bcstring be_const_str_WS2812; +extern const bcstring be_const_str_add_driver; +extern const bcstring be_const_str_lv_btnmatrix; +extern const bcstring be_const_str_MAX31855CS; +extern const bcstring be_const_str_load_freetype_font; +extern const bcstring be_const_str_SYMBOL_IMAGE; +extern const bcstring be_const_str_lv_event_cb; +extern const bcstring be_const_str_lv_gauge_format_cb; +extern const bcstring be_const_str_AS608_RX; +extern const bcstring be_const_str_CSE7761_RX; +extern const bcstring be_const_str_false; +extern const bcstring be_const_str_exec_cmd; +extern const bcstring be_const_str_static; +extern const bcstring be_const_str_SWT1_PD; +extern const bcstring be_const_str_lv_list; +extern const bcstring be_const_str_AudioFileSource; +extern const bcstring be_const_str_tanh; +extern const bcstring be_const_str_toint; +extern const bcstring be_const_str_real; +extern const bcstring be_const_str_TXD; +extern const bcstring be_const_str_lv_page; +extern const bcstring be_const_str_SYMBOL_PLAY; +extern const bcstring be_const_str_WIEGAND_D0; +extern const bcstring be_const_str_tostring; +extern const bcstring be_const_str_TASMOTACLIENT_RST; +extern const bcstring be_const_str_TUYA_TX; +extern const bcstring be_const_str_SYMBOL_GPS; +extern const bcstring be_const_str_lv_img; +extern const bcstring be_const_str_HALLEFFECT; +extern const bcstring be_const_str_SYMBOL_FILE; +extern const bcstring be_const_str_TELEINFO_ENABLE; +extern const bcstring be_const_str_TM1638DIO; +extern const bcstring be_const_str_copy; +extern const bcstring be_const_str_CSE7766_RX; +extern const bcstring be_const_str_shared_key; +extern const bcstring be_const_str_dot_p1; +extern const bcstring be_const_str_encrypt; +extern const bcstring be_const_str_get_light; +extern const bcstring be_const_str_set_light; +extern const bcstring be_const_str_lv_msgbox; +extern const bcstring be_const_str_ADC_BUTTON_INV; +extern const bcstring be_const_str_ARIRFRCV; +extern const bcstring be_const_str_asstring; +extern const bcstring be_const_str_lv_cb; +extern const bcstring be_const_str_MIEL_HVAC_RX; +extern const bcstring be_const_str_PZEM017_RX; +extern const bcstring be_const_str_SYMBOL_MUTE; +extern const bcstring be_const_str_SYMBOL_TRASH; +extern const bcstring be_const_str_reverse; +extern const bcstring be_const_str_DDS2382_TX; +extern const bcstring be_const_str_lv_label; +extern const bcstring be_const_str_str; +extern const bcstring be_const_str_MGC3130_RESET; +extern const bcstring be_const_str_SYMBOL_OK; +extern const bcstring be_const_str_SYMBOL_AUDIO; +extern const bcstring be_const_str_seg7_font; +extern const bcstring be_const_str_as; +extern const bcstring be_const_str_RF_SENSOR; +extern const bcstring be_const_str_lv_bar; +extern const bcstring be_const_str_web_send; +extern const bcstring be_const_str_BOILER_OT_TX; +extern const bcstring be_const_str_IRRECV; +extern const bcstring be_const_str_collect; +extern const bcstring be_const_str_atan; +extern const bcstring be_const_str_getbits; +extern const bcstring be_const_str_DDS2382_RX; +extern const bcstring be_const_str_iter; +extern const bcstring be_const_str_lower; +extern const bcstring be_const_str_ADC_BUTTON; +extern const bcstring be_const_str_SSPI_SCLK; +extern const bcstring be_const_str_read32; +extern const bcstring be_const_str_tolower; +extern const bcstring be_const_str_digital_read; +extern const bcstring be_const_str_response_append; +extern const bcstring be_const_str_size; +extern const bcstring be_const_str__end_transmission; +extern const bcstring be_const_str_LED1_INV; +extern const bcstring be_const_str_super; +extern const bcstring be_const_str_issubclass; +extern const bcstring be_const_str_SM2135_DAT; +extern const bcstring be_const_str_SYMBOL_BELL; +extern const bcstring be_const_str_SYMBOL_HOME; +extern const bcstring be_const_str_read8; +extern const bcstring be_const_str_clear; +extern const bcstring be_const_str_top; +extern const bcstring be_const_str_WEBCAM_HREF; +extern const bcstring be_const_str__ccmd; +extern const bcstring be_const_str_skip; +extern const bcstring be_const_str_wifi; +extern const bcstring be_const_str_A4988_DIR; +extern const bcstring be_const_str_BS814_DAT; +extern const bcstring be_const_str_arg; +extern const bcstring be_const_str_cb_dispatch; +extern const bcstring be_const_str_lv_draw_mask_fade_param_cfg; +extern const bcstring be_const_str_resp_cmnd_error; +extern const bcstring be_const_str_push; +extern const bcstring be_const_str_NEOPOOL_TX; +extern const bcstring be_const_str_SM16716_SEL; +extern const bcstring be_const_str_continue; +extern const bcstring be_const_str_INPUT_PULLDOWN; +extern const bcstring be_const_str_content_start; +extern const bcstring be_const_str_lv_win; +extern const bcstring be_const_str_remove_cmd; +extern const bcstring be_const_str_DSB; diff --git a/lib/libesp32/Berry/generate/be_const_strtab_def.h b/lib/libesp32/Berry/generate/be_const_strtab_def.h index a3f04a988..24b50ecd5 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/Berry/generate/be_const_strtab_def.h @@ -1,1000 +1,1018 @@ -be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, &be_const_str_lv_draw_line_dsc); -be_define_const_str(lv_draw_line_dsc, "lv_draw_line_dsc", 2422805236u, 0, 16, NULL); -be_define_const_str(I2S_IN_SLCT, "I2S_IN_SLCT", 706051516u, 0, 11, &be_const_str_SDM120_TX); -be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, &be_const_str_byte); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_count); -be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_tostring); -be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, &be_const_str_write); -be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_XPT2046_CS); -be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, NULL); -be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_INTERRUPT); -be_define_const_str(INTERRUPT, "INTERRUPT", 3809502704u, 0, 9, &be_const_str_arg); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_read12); -be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); -be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, NULL); -be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_SDS0X1_RX); -be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_continue); -be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_compile); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_member); -be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str_wire2); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, NULL); -be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, NULL); -be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, NULL); -be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL); -be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_TASMOTACLIENT_RST_INV); -be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_Tasmota); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_WEBCAM_RESET); -be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, NULL); -be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_reset); -be_define_const_str(reset, "reset", 1695364032u, 0, 5, &be_const_str_time_reached); -be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); -be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, NULL); -be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_MCP39F5_TX); -be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_NRG_CF1); -be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_SYMBOL_RIGHT); -be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, NULL); -be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_dump); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); -be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str_top); -be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); -be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_INPUT_PULLDOWN); -be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_SENSOR_END); -be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, NULL); -be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_SYMBOL_BATTERY_1); -be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_attrdump); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); -be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, NULL); -be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_DYP_RX); -be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_pi); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_true); -be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); -be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str_lv_draw_mask_line_param_cfg); -be_define_const_str(lv_draw_mask_line_param_cfg, "lv_draw_mask_line_param_cfg", 2154874825u, 0, 27, NULL); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_module); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_wire); -be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); -be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_TASMOTACLIENT_RST); -be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_skip); -be_define_const_str(skip, "skip", 1097563074u, 0, 4, &be_const_str_stop); -be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); -be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_lv_cont); -be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, &be_const_str_else); -be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_init); -be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_redirect); -be_define_const_str(redirect, "redirect", 389758641u, 0, 8, &be_const_str_while); -be_define_const_str(while, "while", 231090382u, 53, 5, NULL); -be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_resize); -be_define_const_str(resize, "resize", 3514612129u, 0, 6, &be_const_str_set_light); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); -be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str_TASMOTACLIENT_TXD); -be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL); -be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_screenshot); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); -be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str__ccmd); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_read32); -be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); -be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_HRXL_RX); -be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, NULL); -be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_SDM72_RX); -be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_SYMBOL_NEXT); -be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_lv_bar); -be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, &be_const_str_lv_draw_mask_radius_param_cfg); -be_define_const_str(lv_draw_mask_radius_param_cfg, "lv_draw_mask_radius_param_cfg", 3889386773u, 0, 29, NULL); -be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_gen_cb); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_geti); -be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); -be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_digital_write); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_event); -be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); -be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); -be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_content_send_style); -be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, NULL); -be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_arg_size); -be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL); -be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_WS2812); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_add_driver); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_setmember); -be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); -be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_Wire); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_bytes); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_lv_signal_cb); -be_define_const_str(lv_signal_cb, "lv_signal_cb", 3295792564u, 0, 12, NULL); -be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_OUTPUT); -be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_i2c_enabled); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); -be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, NULL); -be_define_const_str(srand, "srand", 465518633u, 0, 5, &be_const_str_try_rule); -be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, &be_const_str_write8); -be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); -be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, NULL); -be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, NULL); -be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str_lv_group_focus_cb); -be_define_const_str(lv_group_focus_cb, "lv_group_focus_cb", 4288873836u, 0, 17, &be_const_str_resp_cmnd_done); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); -be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_lv_chart); -be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, NULL); -be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); -be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, NULL); -be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_SYMBOL_PASTE); -be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, &be_const_str_time_dump); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); -be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_pop); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); -be_define_const_str(lv_gauge_format_cb, "lv_gauge_format_cb", 4073149249u, 0, 18, NULL); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_vcall); -be_define_const_str(vcall, "vcall", 2639337069u, 0, 5, NULL); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_lv_area); -be_define_const_str(lv_area, "lv_area", 2521150401u, 0, 7, NULL); -be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str_search); -be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); -be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, NULL); -be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_lv_draw_rect_dsc); -be_define_const_str(lv_draw_rect_dsc, "lv_draw_rect_dsc", 3246772488u, 0, 16, NULL); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_response_append); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_SM2135_DAT); -be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, NULL); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_false); -be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, NULL); -be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, NULL); -be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_lv_cpicker); -be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, &be_const_str_lv_draw_mask_angle_param); -be_define_const_str(lv_draw_mask_angle_param, "lv_draw_mask_angle_param", 4192166041u, 0, 24, NULL); -be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, &be_const_str_lv_textarea); -be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL); -be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); -be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, NULL); -be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_SYMBOL_TRASH); -be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str_find_key_i); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_tolower); -be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_classof); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); -be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_MAX7219CLK); -be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_SYMBOL_BATTERY_3); -be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_reverse_gamma10); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); -be_define_const_str(lv_draw_mask_map_param, "lv_draw_mask_map_param", 1666886804u, 0, 22, NULL); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); -be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); -be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, NULL); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); -be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_SDS0X1_TX); -be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_WEBCAM_SIOC); -be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL); -be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_break); -be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_OUTPUT_LO); -be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_PULLUP); -be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_int); -be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); -be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_HLW_CF); -be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, NULL); -be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str_SYMBOL_BATTERY_EMPTY); -be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str_except); -be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_SYMBOL_CHARGE); -be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, &be_const_str_get_light); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_millis); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); -be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str_lv_draw_mask_common_dsc); -be_define_const_str(lv_draw_mask_common_dsc, "lv_draw_mask_common_dsc", 1429224708u, 0, 23, &be_const_str_yield); -be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); -be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_WEBCAM_VSYNC); -be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_lv_draw_mask_radius_param); -be_define_const_str(lv_draw_mask_radius_param, "lv_draw_mask_radius_param", 3777679220u, 0, 25, &be_const_str_tan); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); -be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str_iter); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); -be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str_MAX31855CLK); -be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_allocated); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_gamma8); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_memory); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_wifi); -be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); -be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_imax); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); -be_define_const_str(lv_design_cb, "lv_design_cb", 3822640502u, 0, 12, &be_const_str_read_bytes); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, &be_const_str_tob64); -be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); -be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_TELEINFO_RX); -be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, &be_const_str_find_op); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); -be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_NRF24_DC); -be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_SYMBOL_BELL); -be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, &be_const_str_SYMBOL_EJECT); -be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, &be_const_str_SYMBOL_LOOP); -be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_SYMBOL_MUTE); -be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, &be_const_str_content_start); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, NULL); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); -be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, NULL); -be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_reverse); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_RISING); -be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, NULL); -be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); -be_define_const_str(KEY1_INV_PD, "KEY1_INV_PD", 3828014584u, 0, 11, &be_const_str_super); -be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_end); -be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str_cos); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, NULL); -be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_AS608_RX); -be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, NULL); -be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_TX2X_TXD_BLACK); -be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, NULL); -be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_begin); -be_define_const_str(begin, "begin", 1748273790u, 0, 5, &be_const_str_rtc); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); -be_define_const_str(lv_draw_img_dsc, "lv_draw_img_dsc", 999847907u, 0, 15, NULL); -be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str__buffer); -be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL); -be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_ZEROCROSS); -be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_lv_indev); -be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, NULL); -be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_PROJECTOR_CTRL_RX); -be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str_add_rule); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_finish); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); -be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, NULL); -be_define_const_str(dot_def, ".def", 4095748648u, 0, 4, &be_const_str_cb_dispatch); -be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, &be_const_str_lv_slider); -be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, NULL); -be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, NULL); -be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, NULL); -be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_upper); -be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); -be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_SBR_RX); -be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, NULL); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_shared_key); -be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); -be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, NULL); -be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, &be_const_str_cosh); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_lv_group); -be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, &be_const_str_lv_roller); -be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL); -be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_HPMA_TX); -be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_get); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_setitem); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_str); -be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); -be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, &be_const_str_TELEINFO_ENABLE); -be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, &be_const_str_collect); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_deinit); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_remove_timer); -be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); -be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_public_key); -be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_lv_line); -be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL); -be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_lv_list); -be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL); -be_define_const_str(I2S_OUT_DATA, "I2S_OUT_DATA", 1176288293u, 0, 12, &be_const_str_ST7789_DC); -be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_log); -be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); -be_define_const_str(I2S_IN_CLK, "I2S_IN_CLK", 2996930120u, 0, 10, NULL); -be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, NULL); -be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, NULL); -be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str_TFMINIPLUS_TX); -be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, NULL); -be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_SDM630_TX); -be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_SYMBOL_EDIT); -be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str_assert); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_lv_calendar); -be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL); -be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_SYMBOL_LIST); -be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, &be_const_str_SYMBOL_PAUSE); -be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, &be_const_str_lv_spinbox); -be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, NULL); -be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_CNTR1); -be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_TM1637DIO); -be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_exec_cmd); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_lv_draw_mask_saved); -be_define_const_str(lv_draw_mask_saved, "lv_draw_mask_saved", 2063709159u, 0, 18, NULL); -be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, NULL); -be_define_const_str(I2S_IN_DATA, "I2S_IN_DATA", 4125971460u, 0, 11, &be_const_str_ILI9488_CS); -be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_SWT1_PD); -be_define_const_str(SWT1_PD, "SWT1_PD", 4166278953u, 0, 7, &be_const_str_acos); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, NULL); -be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_SDCARD_CS); -be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_save); -be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); -be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, NULL); -be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, NULL); -be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_HX711_SCK); -be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, NULL); -be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_IEM3000_RX); -be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_NEOPOOL_RX); -be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_as); -be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_lv_cb); -be_define_const_str(lv_cb, "lv_cb", 1389787433u, 0, 5, NULL); -be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, NULL); -be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_RXD); -be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_WINDMETER_SPEED); -be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_write_bit); -be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); -be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_get_free_heap); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); -be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_lv_label); -be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, NULL); -be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_I2S_OUT_CLK); -be_define_const_str(I2S_OUT_CLK, "I2S_OUT_CLK", 2580200387u, 0, 11, &be_const_str_KEY1); -be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str__rules); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_gamma10); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_lv_dropdown); -be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL); -be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_remove_cmd); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); -be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_atan); -be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_lv_tabview); -be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, NULL); -be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_set_timer); -be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); -be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_DEEPSLEEP); -be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_SSPI_CS); -be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, &be_const_str_TASMOTACLIENT_RXD); -be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_content_button); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_fromb64); -be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, &be_const_str_size); -be_define_const_str(size, "size", 597743964u, 0, 4, NULL); -be_define_const_str(members, "members", 937576464u, 0, 7, NULL); -be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_exp); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_issubclass); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); -be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_SYMBOL_EYE_OPEN); -be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_floor); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); -be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_DCKI); -be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_lv_draw_mask_line_param); -be_define_const_str(lv_draw_mask_line_param, "lv_draw_mask_line_param", 2692990704u, 0, 23, NULL); -be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, NULL); -be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, NULL); -be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_SR04_TRIG); -be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_lv_style); -be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, &be_const_str_select); -be_define_const_str(select, "select", 297952813u, 0, 6, &be_const_str_var); -be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); -be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_MAX7219CS); -be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_MHZ_RXD); -be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_SYMBOL_PLAY); -be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, &be_const_str_pin_mode); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); -be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_traceback); -be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); -be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_calldepth); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL); -be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_SSPI_DC); -be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_time_str); -be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); -be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_lv_sqrt_res); -be_define_const_str(lv_sqrt_res, "lv_sqrt_res", 2904473995u, 0, 11, &be_const_str_push); -be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); -be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_lv_gauge); -be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, &be_const_str_resolvecmnd); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); -be_define_const_str(lv_draw_mask_map_param_cfg, "lv_draw_mask_map_param_cfg", 3822900597u, 0, 26, NULL); -be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_REL1_INV); -be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_on); -be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, &be_const_str_SYMBOL_OK); -be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, &be_const_str_SYMBOL_VOLUME_MAX); -be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, NULL); -be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_I2C_SDA); -be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, NULL); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_SBR_TX); -be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_SYMBOL_WIFI); -be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, NULL); -be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_MP3_DFR562); -be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_RC522_RST); -be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_SSD1331_CS); -be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_SYMBOL_DOWN); -be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, &be_const_str_WIEGAND_D1); -be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_arg_name); -be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_get_option); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); -be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, NULL); -be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, NULL); -be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_PWM1); -be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, NULL); -be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, &be_const_str_scale_uint); -be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); -be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_SYMBOL_SETTINGS); -be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, &be_const_str_lv_switch); -be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, NULL); -be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_SI7021); -be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, NULL); -be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, &be_const_str_TCP_RX); -be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, NULL); -be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_RFSEND); -be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_SYMBOL_UPLOAD); -be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_publish_result); -be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, &be_const_str_remove); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); -be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_lv_draw_mask_angle_param_cfg); -be_define_const_str(lv_draw_mask_angle_param_cfg, "lv_draw_mask_angle_param_cfg", 3599767368u, 0, 28, &be_const_str_lv_point); -be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, NULL); -be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, NULL); -be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, NULL); -be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, &be_const_str_nil); -be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, NULL); -be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_lv_spinner); -be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL); -be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_lv_btn); -be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, NULL); -be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_SHELLY_DIMMER_RST_INV); -be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, NULL); -be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, NULL); -be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, &be_const_str_SYMBOL_HOME); -be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, &be_const_str_SYMBOL_MINUS); -be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, &be_const_str_imin); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_list); -be_define_const_str(list, "list", 217798785u, 0, 4, NULL); -be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, NULL); -be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_WE517_RX); -be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, &be_const_str__cmd); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_tag); -be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); -be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_if); -be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(dot_p2, ".p2", 232398067u, 0, 3, &be_const_str_IEM3000_TX); -be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str___upper__); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_content_flush); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); -be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, NULL); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_add); -be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_remove_rule); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_web_send); -be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); -be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_TXD); -be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_resp_cmnd_str); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_split); -be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); -be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_WIEGAND_D0); -be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, NULL); -be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_MIEL_HVAC_TX); -be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, NULL); -be_define_const_str(KEY1_PD, "KEY1_PD", 3934075620u, 0, 7, &be_const_str_TFMINIPLUS_RX); -be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, &be_const_str_ceil); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_digital_read); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_target_search); -be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); -be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, NULL); -be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, &be_const_str_gc); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); -be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_char); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_lv_keyboard); -be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, NULL); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(lv_draw_mask_fade_param, "lv_draw_mask_fade_param", 2743309964u, 0, 23, &be_const_str_class); -be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_insert); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, NULL); -be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_toupper); -be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, &be_const_str_def); -be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_asstring); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_static); -be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); -be_define_const_str(I2S_OUT_SLCT, "I2S_OUT_SLCT", 4037293837u, 0, 12, &be_const_str_P9813_CLK); -be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_lv_draw_label_dsc); -be_define_const_str(lv_draw_label_dsc, "lv_draw_label_dsc", 265601842u, 0, 17, &be_const_str_type); -be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); -be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL); -be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_EXS_ENABLE); be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_SYMBOL_WARNING); -be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str_lv_draw_mask_fade_param_cfg); -be_define_const_str(lv_draw_mask_fade_param_cfg, "lv_draw_mask_fade_param_cfg", 4158595197u, 0, 27, &be_const_str_lv_msgbox); -be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, NULL); -be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_sqrt); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); -be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_EPD_DATA); -be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_SYMBOL_CALL); -be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, &be_const_str_WEBCAM_SIOD); -be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_read13); -be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); -be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, &be_const_str_input); -be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); -be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); -be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, &be_const_str_lv_page); -be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, NULL); -be_define_const_str(dot_p1, ".p1", 249175686u, 0, 3, &be_const_str_WEBCAM_PSRCS); -be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, NULL); -be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_TM1638DIO); -be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL); -be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, NULL); -be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, NULL); -be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_lower); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); -be_define_const_str(loop, "loop", 3723446379u, 0, 4, NULL); -be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, &be_const_str_print); -be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_addr); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, NULL); -be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_lv_canvas); -be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL); -be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_chars_in_string); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL); -be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, NULL); -be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_ZIGBEE_RX); -be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, &be_const_str__drivers); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, NULL); -be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_detect); -be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); -be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_SSPI_MOSI); -be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_SYMBOL_KEYBOARD); -be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str__cb); -be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, NULL); -be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, &be_const_str_rad); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_toint); -be_define_const_str(toint, "toint", 3613182909u, 0, 5, NULL); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_lv_objmask); -be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, NULL); -be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_PZEM004_RX); -be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_deg); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL); -be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str_OPEN_DRAIN); -be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_SYMBOL_DOWNLOAD); -be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_resp_cmnd_failed); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); -be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str_state); -be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); -be_define_const_str(call, "call", 3018949801u, 0, 4, &be_const_str_lv_btnmatrix); -be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, NULL); -be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, &be_const_str_for); -be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, NULL); -be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_seg7_font); -be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, &be_const_str_start); -be_define_const_str(start, "start", 1697318111u, 0, 5, &be_const_str_strftime); -be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); -be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str___lower__); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_lv_imgbtn); -be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, &be_const_str_pow); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); -be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, NULL); -be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, NULL); -be_define_const_str(name, "name", 2369371622u, 0, 4, NULL); -be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, NULL); -be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str_FALLING); -be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_rand); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_import); -be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_scan); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_set_power); -be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); -be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_IRSEND); -be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str__request_from); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_keys); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_lv_led); -be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, &be_const_str_real); -be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); -be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, NULL); -be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, NULL); -be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, NULL); -be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, NULL); -be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); -be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_erase); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, NULL); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_montserrat_font); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_lv_table); -be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, NULL); -be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, &be_const_str_map); -be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); -be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_lv_arc); -be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, NULL); -be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_ROT1A); -be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_SWT1); -be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, &be_const_str_WEBCAM_XCLK); -be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, NULL); -be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_abs); -be_define_const_str(abs, "abs", 709362235u, 0, 3, NULL); -be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_codedump); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_decrypt); -be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_find); -be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); -be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, NULL); -be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_content_send); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_set); -be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); -be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_RFRECV); -be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_ctypes_bytes); -be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, NULL); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); -be_define_const_str(update, "update", 672109684u, 0, 6, NULL); -be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_fromstring); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_load); -be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_wire1); -be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, NULL); -be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_sin); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_try); -be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_MD5); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, NULL); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_setrange); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_SAIR_TX); -be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_lv_font); -be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, &be_const_str_raise); +be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str_raise); be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str__begin_transmission); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL); -be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_SYMBOL_VIDEO); -be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, &be_const_str_wire_scan); -be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_register_button_encoder); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); -be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_ROT1B_NP); -be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_lv_obj); +be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_calldepth); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL); +be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL); +be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_rtc); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); +be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, NULL); +be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_SYMBOL_EYE_OPEN); +be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_time_dump); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); +be_define_const_str(lv_draw_mask_angle_param, "lv_draw_mask_angle_param", 4192166041u, 0, 24, &be_const_str_setitem); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_split); +be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); +be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_OUTPUT_OPEN_DRAIN); +be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_PULLDOWN); +be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str_SYMBOL_POWER); +be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, NULL); +be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, NULL); +be_define_const_str(dot_def, ".def", 4095748648u, 0, 4, &be_const_str_DDSU666_TX); +be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_EC_C25519); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, &be_const_str_add_cmd); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, NULL); +be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_Wire); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL); +be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_IRSEND); +be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, NULL); +be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_lv_draw_mask_common_dsc); +be_define_const_str(lv_draw_mask_common_dsc, "lv_draw_mask_common_dsc", 1429224708u, 0, 23, NULL); +be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_SSD1331_DC); +be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_WEBCAM_PCLK); +be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_gc); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_try); +be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); +be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, NULL); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); +be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_pin); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); +be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, NULL); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); +be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_SYMBOL_SETTINGS); +be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, &be_const_str_get_free_heap); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); +be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_LEDLNK_INV); +be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_WIEGAND_D1); +be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_lv_draw_mask_line_param); +be_define_const_str(lv_draw_mask_line_param, "lv_draw_mask_line_param", 2692990704u, 0, 23, NULL); +be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_RC522_CS); +be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, NULL); +be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_DHT11_OUT); +be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_MCP39F5_TX); +be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_pi); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); +be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_lv_style); +be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, NULL); +be_define_const_str(I2S_IN_CLK, "I2S_IN_CLK", 2996930120u, 0, 10, &be_const_str_get); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_lv_checkbox); +be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, &be_const_str_lv_design_cb); +be_define_const_str(lv_design_cb, "lv_design_cb", 3822640502u, 0, 12, NULL); +be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_isrunning); +be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, &be_const_str_lv_obj); be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); +be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_SYMBOL_SD_CARD); +be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, &be_const_str_begin); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, NULL); +be_define_const_str(dot_p2, ".p2", 232398067u, 0, 3, &be_const_str_ROT1B_NP); +be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_SBR_TX); +be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_erase); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_module); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_read13); +be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); +be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, NULL); +be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_digital_write); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_public_key); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL); +be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_IEM3000_RX); +be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, NULL); +be_define_const_str(vcall, "vcall", 2639337069u, 0, 5, NULL); +be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); +be_define_const_str(lv_area, "lv_area", 2521150401u, 0, 7, &be_const_str_write8); +be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); +be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_SYMBOL_CHARGE); +be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, &be_const_str_upper); +be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); +be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, NULL); +be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_XPT2046_CS); +be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_try_rule); +be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); +be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_cos); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, NULL); +be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, &be_const_str_read12); +be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); +be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL); +be_define_const_str(lv_draw_mask_angle_param_cfg, "lv_draw_mask_angle_param_cfg", 3599767368u, 0, 28, &be_const_str_url_encode); +be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); +be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str__read); +be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); +be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_bytes); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_lv_draw_mask_fade_param); +be_define_const_str(lv_draw_mask_fade_param, "lv_draw_mask_fade_param", 2743309964u, 0, 23, &be_const_str_lv_led); +be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, NULL); be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); -be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_SYMBOL_REFRESH); -be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, &be_const_str_classname); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL); -be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_SYMBOL_PREV); -be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, NULL); -be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_range); -be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); -be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_format); -be_define_const_str(format, "format", 3114108242u, 0, 6, NULL); -be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, NULL); -be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_OPTION_A); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_SYMBOL_DUMMY); -be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str__get_cb); -be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, &be_const_str_seti); +be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_WEBCAM_DATA); +be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str_detect); +be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_reset); +be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); +be_define_const_str(member, "member", 719708611u, 0, 6, NULL); +be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); +be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, &be_const_str_content_stop); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_add_header); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, NULL); +be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, NULL); +be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_HX711_SCK); +be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_WINDMETER_SPEED); +be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_byte); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_lv_objmask); +be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, NULL); +be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str_rand); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); +be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_TM1638STB); +be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_lv_dropdown); +be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL); +be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_SDM120_TX); +be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, &be_const_str_loop); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, &be_const_str_tag); +be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); +be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, NULL); +be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_SOLAXX1_RX); +be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_TASMOTACLIENT_RST_INV); +be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_assert); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL); +be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_find_key_i); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_init); +be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_except); +be_define_const_str(except, "except", 950914032u, 69, 6, &be_const_str_return); +be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); +be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_PWM1); +be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, NULL); +be_define_const_str(call, "call", 3018949801u, 0, 4, NULL); +be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str_abs); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_lv_draw_mask_saved); +be_define_const_str(lv_draw_mask_saved, "lv_draw_mask_saved", 2063709159u, 0, 18, NULL); +be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_SSPI_MAX31865_CS1); +be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, &be_const_str_input); +be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); +be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, NULL); +be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_MHZ_TXD); +be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_SYMBOL_PAUSE); +be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, NULL); +be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, NULL); +be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_SYMBOL_DOWNLOAD); +be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_write); +be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); +be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, NULL); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_I2S_IN_SLCT); +be_define_const_str(I2S_IN_SLCT, "I2S_IN_SLCT", 706051516u, 0, 11, &be_const_str_KEY1_TC); +be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_lv_draw_mask_map_param); +be_define_const_str(lv_draw_mask_map_param, "lv_draw_mask_map_param", 1666886804u, 0, 22, &be_const_str_target_search); +be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); +be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str__rules); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_rad); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_type); +be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); +be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, NULL); +be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_NRG_SEL); +be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, &be_const_str_TASMOTACLIENT_RXD); +be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_tob64); +be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); +be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); +be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_SYMBOL_DIRECTORY); +be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_read24); +be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); +be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_SSPI_CS); +be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, &be_const_str_TELEINFO_RX); +be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, &be_const_str_TUYA_RX); +be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_seti); be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_do); +be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); +be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_Tasmota); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, NULL); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_pin_used); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_item); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_resp_cmnd_done); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); +be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_PN532_TXD); +be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_SSD1351_CS); +be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, NULL); +be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_SAIR_TX); +be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_lv_calendar); +be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL); +be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, NULL); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, NULL); +be_define_const_str(lv_draw_mask_radius_param_cfg, "lv_draw_mask_radius_param_cfg", 3889386773u, 0, 29, &be_const_str_publish); +be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); +be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_PWM1_INV); +be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str__timers); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_map); +be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); +be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_SYMBOL_BULLET); +be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_SYMBOL_LIST); +be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, NULL); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL); +be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_dump); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_memory); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL); +be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_ZIGBEE_TX); +be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, &be_const_str_cmd); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_fromstring); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL); +be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_INPUT); +be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_exists); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_floor); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); +be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_SM2135_CLK); +be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_SYMBOL_VOLUME_MID); +be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, &be_const_str_find); +be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_var); +be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); +be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_depower); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, NULL); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, NULL); +be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_class); +be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); +be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, NULL); +be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str_WE517_TX); +be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, NULL); +be_define_const_str(I2S_OUT_DATA, "I2S_OUT_DATA", 1176288293u, 0, 12, &be_const_str_MCP39F5_RX); +be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_fromb64); +be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, NULL); +be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_RDM6300_RX); +be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_REL1); +be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_SYMBOL_STOP); +be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, &be_const_str_screenshot); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); +be_define_const_str(print, "print", 372738696u, 0, 5, NULL); +be_define_const_str(I2S_OUT_CLK, "I2S_OUT_CLK", 2580200387u, 0, 11, &be_const_str_set_timeouts); +be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); +be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str_CSE7766_TX); +be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_SYMBOL_DUMMY); +be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str_VL53L0X_XSHUT1); +be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, NULL); +be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str__available); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_get_power); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_lv_canvas); +be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL); +be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, &be_const_str_while); +be_define_const_str(while, "while", 231090382u, 53, 5, NULL); +be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, NULL); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_SYMBOL_BLUETOOTH); +be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, NULL); +be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_RC522_RST); +be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_list); +be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_lv_draw_rect_dsc); +be_define_const_str(lv_draw_rect_dsc, "lv_draw_rect_dsc", 3246772488u, 0, 16, NULL); +be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_FALLING); +be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_HPMA_TX); +be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_insert); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_lv_draw_img_dsc); +be_define_const_str(lv_draw_img_dsc, "lv_draw_img_dsc", 999847907u, 0, 15, NULL); +be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, NULL); +be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_load_font); +be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, &be_const_str_sinh); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); +be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, NULL); +be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_ROT1A_NP); +be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_lv_switch); +be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, &be_const_str_read_bytes); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, &be_const_str_nil); +be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); +be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, NULL); +be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_pop); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_scan); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_setbits); +be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); +be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); +be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, NULL); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, NULL); +be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, NULL); +be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, &be_const_str_else); +be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, &be_const_str_BACKLIGHT); +be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_NRG_CF1); +be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_remove); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); +be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_lv_draw_label_dsc); +be_define_const_str(lv_draw_label_dsc, "lv_draw_label_dsc", 265601842u, 0, 17, &be_const_str_lv_font); +be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, NULL); +be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_lv_sqrt_res); +be_define_const_str(lv_sqrt_res, "lv_sqrt_res", 2904473995u, 0, 11, NULL); +be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, NULL); +be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_TASMOTACLIENT_TXD); +be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL); +be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_ctypes_bytes); +be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, &be_const_str_remove_timer); +be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, NULL); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, NULL); +be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_SENSOR_END); +be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_finish); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_lv_gauge); +be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, NULL); +be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_name); +be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_save); +be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); +be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_wire); +be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); +be_define_const_str(char, "char", 2823553821u, 0, 4, NULL); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_deinit); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, NULL); +be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, NULL); +be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_ILI9488_CS); +be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_SSPI_MOSI); +be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, NULL); +be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_lv_spinbox); +be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, NULL); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_set_useragent); +be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); +be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, NULL); +be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_SI7021); +be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_classname); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_get_option); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); +be_define_const_str(lv_point, "lv_point", 4120221790u, 0, 8, &be_const_str_members); +be_define_const_str(members, "members", 937576464u, 0, 7, NULL); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str_IEM3000_TX); +be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_lv_textarea); +be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL); +be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_MAX7219DIN); +be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, NULL); +be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_WE517_RX); +be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, &be_const_str_WEBCAM_PSRCS); +be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_on); +be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_wire2); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); +be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_event); +be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_lv_indev); +be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, &be_const_str_set_auth); +be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); +be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_SYMBOL_LOOP); +be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_WEBCAM_VSYNC); +be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_lv_draw_mask_line_param_cfg); +be_define_const_str(lv_draw_mask_line_param_cfg, "lv_draw_mask_line_param_cfg", 2154874825u, 0, 27, NULL); +be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_WEBCAM_RESET); +be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_compile); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_lv_imgbtn); +be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, &be_const_str_number); +be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_set); +be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); +be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, NULL); +be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_MAX31855DO); +be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_register_button_encoder); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_log10); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); +be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, &be_const_str_TCP_TX); +be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_ceil); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_delay); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, NULL); +be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_ST7789_DC); +be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_SYMBOL_BACKSPACE); +be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, &be_const_str_lv_line); +be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL); +be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, NULL); +be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_NRG_SEL_INV); +be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_gen_cb); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL); +be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_MAX7219CS); +be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_P9813_CLK); +be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, NULL); +be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_SM16716_DAT); +be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str__drivers); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, NULL); +be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); +be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_SYMBOL_UP); +be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, NULL); +be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_BOILER_OT_RX); +be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_SYMBOL_SHUFFLE); +be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, NULL); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_traceback); +be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_true); +be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); +be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL); +be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, NULL); +be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_ADC_RANGE); +be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, NULL); +be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_INTERRUPT); +be_define_const_str(INTERRUPT, "INTERRUPT", 3809502704u, 0, 9, &be_const_str_OUTPUT); +be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_wire_scan); +be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); +be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, &be_const_str_lv_signal_cb); +be_define_const_str(lv_signal_cb, "lv_signal_cb", 3295792564u, 0, 12, &be_const_str_toupper); +be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, &be_const_str_update); +be_define_const_str(update, "update", 672109684u, 0, 6, &be_const_str_break); +be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); +be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_RFSEND); +be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_has_arg); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); +be_define_const_str(dot_w, ".w", 1255414514u, 0, 2, &be_const_str_WEBCAM_HSD); +be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, NULL); +be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, &be_const_str_lv_slider); +be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, NULL); +be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_count); +be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_lv_tileview); +be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, &be_const_str_if); +be_define_const_str(if, "if", 959999494u, 50, 2, NULL); +be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_RFRECV); +be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_format); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_scale_uint); +be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); +be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_P9813_DAT); +be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_PROJECTOR_CTRL_RX); +be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, NULL); +be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, NULL); +be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_ZIGBEE_RST); +be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, &be_const_str_montserrat_font); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_remove_rule); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_time_reached); +be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); +be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, NULL); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, NULL); +be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); +be_define_const_str(opt_add, "+", 772578730u, 0, 1, NULL); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_millis); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); +be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL); +be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str_search); +be_define_const_str(search, "search", 2150836393u, 0, 6, &be_const_str_state); +be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_resize); +be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL); +be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, &be_const_str_WEBCAM_SIOD); +be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_close); +be_define_const_str(close, "close", 667630371u, 0, 5, NULL); +be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, NULL); +be_define_const_str(select, "select", 297952813u, 0, 6, NULL); +be_define_const_str(lv_draw_line_dsc, "lv_draw_line_dsc", 2422805236u, 0, 16, &be_const_str_lv_draw_mask_map_param_cfg); +be_define_const_str(lv_draw_mask_map_param_cfg, "lv_draw_mask_map_param_cfg", 3822900597u, 0, 26, NULL); +be_define_const_str(KEY1_PD, "KEY1_PD", 3934075620u, 0, 7, &be_const_str_arg_size); +be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_lv_linemeter); +be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, NULL); +be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_lv_draw_mask_radius_param); +be_define_const_str(lv_draw_mask_radius_param, "lv_draw_mask_radius_param", 3777679220u, 0, 25, NULL); +be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_MAX7219CLK); +be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_TFMINIPLUS_TX); +be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, &be_const_str_web_send_decimal); +be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); +be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, NULL); +be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, &be_const_str_eth); +be_define_const_str(eth, "eth", 2191266556u, 0, 3, &be_const_str_publish_result); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); +be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_PZEM0XX_TX); +be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, NULL); +be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_SYMBOL_REFRESH); +be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, NULL); +be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_TFMINIPLUS_RX); +be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, &be_const_str_classof); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_set_timer); +be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); +be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str_lv_tabview); +be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, NULL); +be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_I2S_IN_DATA); +be_define_const_str(I2S_IN_DATA, "I2S_IN_DATA", 4125971460u, 0, 11, &be_const_str_KEY1_INV_PD); +be_define_const_str(KEY1_INV_PD, "KEY1_INV_PD", 3828014584u, 0, 11, &be_const_str_lv_group_focus_cb); +be_define_const_str(lv_group_focus_cb, "lv_group_focus_cb", 4288873836u, 0, 17, NULL); +be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, NULL); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_add); +be_define_const_str(add, "add", 993596020u, 0, 3, NULL); +be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_ZIGBEE_RX); +be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, &be_const_str_wire1); +be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, &be_const_str_elif); +be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); +be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str_SWT1); +be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, &be_const_str_SYMBOL_NEW_LINE); +be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_concat); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); +be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_PMS5003_RX); +be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_addr); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, NULL); +be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, NULL); +be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); +be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_SYMBOL_BATTERY_1); +be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, NULL); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_RA8876_CS); +be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str_redirect); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); +be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, NULL); +be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_SSPI_MISO); +be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str_TM1637DIO); +be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_lv_color); +be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL); +be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, NULL); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); +be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_OneWire); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, NULL); +be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, &be_const_str_WEBCAM_PSCLK); +be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str_add_rule); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_lv_btn); +be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, &be_const_str_sqrt); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); +be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); +be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_SYMBOL_VIDEO); +be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, NULL); +be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_SSD1351_DC); +be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str___lower__); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_sin); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); +be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_imin); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL); +be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, NULL); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, NULL); +be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, NULL); +be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, &be_const_str_SYMBOL_MINUS); +be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, &be_const_str_SYMBOL_PASTE); +be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, &be_const_str_imax); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_time_str); +be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); +be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, &be_const_str_resp_cmnd); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); +be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_SYMBOL_EDIT); +be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str_SYMBOL_KEYBOARD); +be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, NULL); +be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, NULL); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_PZEM004_RX); +be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_attrdump); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_geti); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); +be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, &be_const_str_SYMBOL_VOLUME_MAX); +be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, &be_const_str_WEBCAM_XCLK); +be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, &be_const_str___iterator__); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_content_flush); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); +be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_strftime); +be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); +be_define_const_str(import, "import", 288002260u, 66, 6, NULL); +be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, NULL); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_range); +be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); +be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_WEBCAM_PWDN); +be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, &be_const_str_resolvecmnd); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_def); +be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_find_op); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_lv_cpicker); +be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, &be_const_str_write_bit); +be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, &be_const_str_end); +be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_SOLAXX1_TX); +be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_SYMBOL_BATTERY_EMPTY); +be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str_reverse_gamma10); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); +be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, NULL); +be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, &be_const_str_gamma8); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_isinstance); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL); +be_define_const_str(I2S_OUT_SLCT, "I2S_OUT_SLCT", 4037293837u, 0, 12, &be_const_str_decrypt); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_yield); +be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); +be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_add_driver); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_lv_btnmatrix); +be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, NULL); +be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_load_freetype_font); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); +be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_lv_event_cb); +be_define_const_str(lv_event_cb, "lv_event_cb", 2480731016u, 0, 11, &be_const_str_lv_gauge_format_cb); +be_define_const_str(lv_gauge_format_cb, "lv_gauge_format_cb", 4073149249u, 0, 18, NULL); +be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_CSE7761_RX); +be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_false); +be_define_const_str(false, "false", 184981848u, 62, 5, NULL); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_static); +be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); +be_define_const_str(SWT1_PD, "SWT1_PD", 4166278953u, 0, 7, &be_const_str_lv_list); +be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_tanh); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, &be_const_str_toint); +be_define_const_str(toint, "toint", 3613182909u, 0, 5, NULL); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_lv_page); +be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, NULL); +be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, &be_const_str_WIEGAND_D0); +be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, &be_const_str_tostring); +be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); +be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_TUYA_TX); +be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, NULL); +be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_lv_img); +be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL); +be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_SYMBOL_FILE); +be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, NULL); +be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, &be_const_str_TM1638DIO); +be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, NULL); +be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_shared_key); +be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); +be_define_const_str(dot_p1, ".p1", 249175686u, 0, 3, &be_const_str_encrypt); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, &be_const_str_get_light); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_set_light); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); +be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, NULL); +be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_ARIRFRCV); +be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_asstring); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_lv_cb); +be_define_const_str(lv_cb, "lv_cb", 1389787433u, 0, 5, NULL); +be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_PZEM017_RX); +be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_SYMBOL_MUTE); +be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, &be_const_str_SYMBOL_TRASH); +be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str_reverse); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); +be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_lv_label); +be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, &be_const_str_str); +be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); +be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_SYMBOL_OK); +be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, NULL); +be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str_seg7_font); +be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, &be_const_str_as); +be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); +be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_lv_bar); +be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, &be_const_str_web_send); +be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); +be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_IRRECV); +be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_collect); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_getbits); +be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, NULL); +be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_iter); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_lower); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, NULL); +be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_SSPI_SCLK); +be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, NULL); +be_define_const_str(read32, "read32", 1741276240u, 0, 6, &be_const_str_tolower); +be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_response_append); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_size); +be_define_const_str(size, "size", 597743964u, 0, 4, NULL); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, NULL); +be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str_super); +be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); +be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_SYMBOL_BELL); +be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, &be_const_str_SYMBOL_HOME); +be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, &be_const_str_read8); +be_define_const_str(read8, "read8", 2802788167u, 0, 5, NULL); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_top); +be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); +be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str__ccmd); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_skip); +be_define_const_str(skip, "skip", 1097563074u, 0, 4, &be_const_str_wifi); +be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); +be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, NULL); +be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_arg); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_cb_dispatch); +be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, &be_const_str_lv_draw_mask_fade_param_cfg); +be_define_const_str(lv_draw_mask_fade_param_cfg, "lv_draw_mask_fade_param_cfg", 4158595197u, 0, 27, &be_const_str_resp_cmnd_error); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); +be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); +be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, NULL); +be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_continue); +be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); +be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_content_start); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_lv_win); +be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, &be_const_str_remove_cmd); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); +be_define_const_str(DSB, "DSB", 98073254u, 0, 3, NULL); static const bstring* const m_string_table[] = { - NULL, - (const bstring *)&be_const_str_lv_checkbox, - (const bstring *)&be_const_str_I2S_IN_SLCT, - (const bstring *)&be_const_str_sinh, - NULL, - (const bstring *)&be_const_str_AudioGenerator, - (const bstring *)&be_const_str_HPMA_RX, - NULL, - (const bstring *)&be_const_str_LEDLNK, - (const bstring *)&be_const_str_REL1, - (const bstring *)&be_const_str_SYMBOL_COPY, - (const bstring *)&be_const_str__write, - (const bstring *)&be_const_str__timers, - (const bstring *)&be_const_str_SYMBOL_BLUETOOTH, - (const bstring *)&be_const_str_ROT1A_NP, - (const bstring *)&be_const_str_lv_color, - (const bstring *)&be_const_str_ADC_TEMP, - (const bstring *)&be_const_str_SPI_MOSI, - (const bstring *)&be_const_str_encrypt, - (const bstring *)&be_const_str_ADC_PH, - (const bstring *)&be_const_str_IRRECV, - (const bstring *)&be_const_str_WEBCAM_PSCLK, - (const bstring *)&be_const_str_I2C_SCL, - (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, - (const bstring *)&be_const_str_SYMBOL_USB, - (const bstring *)&be_const_str_BUZZER_INV, - NULL, - (const bstring *)&be_const_str_load_freetype_font, - (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, - (const bstring *)&be_const_str_log10, - (const bstring *)&be_const_str_SYMBOL_FILE, - (const bstring *)&be_const_str_HRE_DATA, - (const bstring *)&be_const_str_check_privileged_access, - (const bstring *)&be_const_str_KEY1_INV_NP, - (const bstring *)&be_const_str_SPI_DC, - (const bstring *)&be_const_str_publish, - (const bstring *)&be_const_str_PMS5003_RX, - (const bstring *)&be_const_str_ETH_PHY_POWER, - (const bstring *)&be_const_str_BS814_CLK, - (const bstring *)&be_const_str_EPAPER42_CS, - (const bstring *)&be_const_str_depower, - (const bstring *)&be_const_str_read, - (const bstring *)&be_const_str_RC522_CS, - (const bstring *)&be_const_str__end_transmission, - (const bstring *)&be_const_str_SOLAXX1_TX, - (const bstring *)&be_const_str_TM1638STB, - NULL, - NULL, - (const bstring *)&be_const_str_SYMBOL_NEW_LINE, - (const bstring *)&be_const_str_AES_GCM, - (const bstring *)&be_const_str_WEBCAM_HSD, - (const bstring *)&be_const_str_srand, - (const bstring *)&be_const_str_TUYA_TX, - (const bstring *)&be_const_str_SYMBOL_BATTERY_2, - (const bstring *)&be_const_str_AS608_TX, - (const bstring *)&be_const_str_TM1637CLK, - (const bstring *)&be_const_str_ADC_LIGHT, - (const bstring *)&be_const_str_write_bytes, - (const bstring *)&be_const_str_PZEM0XX_TX, - NULL, - (const bstring *)&be_const_str_ROT1B, - (const bstring *)&be_const_str_SSD1351_DC, - (const bstring *)&be_const_str_lv_gauge_format_cb, - (const bstring *)&be_const_str_isinstance, - (const bstring *)&be_const_str_content_stop, - (const bstring *)&be_const_str_WEBCAM_HREF, - (const bstring *)&be_const_str_HJL_CF, - (const bstring *)&be_const_str_SYMBOL_GPS, - (const bstring *)&be_const_str_copy, - (const bstring *)&be_const_str_, - NULL, - (const bstring *)&be_const_str_number, - (const bstring *)&be_const_str_SPI_CLK, - (const bstring *)&be_const_str_do, - (const bstring *)&be_const_str_lv_tileview, - (const bstring *)&be_const_str_NRG_SEL_INV, - NULL, - (const bstring *)&be_const_str_load_font, - (const bstring *)&be_const_str_reset_search, - (const bstring *)&be_const_str_BUZZER, - (const bstring *)&be_const_str_KEY1_INV, - (const bstring *)&be_const_str_delay, - (const bstring *)&be_const_str_INPUT_PULLUP, - (const bstring *)&be_const_str_HM10_RX, - (const bstring *)&be_const_str_lv_draw_mask_map_param, - (const bstring *)&be_const_str__available, - (const bstring *)&be_const_str_setbits, - (const bstring *)&be_const_str_P9813_DAT, - (const bstring *)&be_const_str_concat, - (const bstring *)&be_const_str_SDM120_RX, - (const bstring *)&be_const_str_return, - (const bstring *)&be_const_str_asin, - (const bstring *)&be_const_str_DSB_OUT, - (const bstring *)&be_const_str_DDS2382_TX, - (const bstring *)&be_const_str_SSPI_MISO, - (const bstring *)&be_const_str_opt_call, - (const bstring *)&be_const_str_RA8876_CS, - (const bstring *)&be_const_str_SDM630_RX, - NULL, - (const bstring *)&be_const_str_WEBCAM_DATA, - (const bstring *)&be_const_str_LED1_INV, - (const bstring *)&be_const_str_SPI_CS, - (const bstring *)&be_const_str_lv_design_cb, - (const bstring *)&be_const_str_MIEL_HVAC_RX, - (const bstring *)&be_const_str_DHT11_OUT, - (const bstring *)&be_const_str_get_power, - (const bstring *)&be_const_str_SOLAXX1_RX, - (const bstring *)&be_const_str_IBEACON_TX, - (const bstring *)&be_const_str_OneWire, - (const bstring *)&be_const_str__read, - (const bstring *)&be_const_str_KEY1_INV_PD, - (const bstring *)&be_const_str_SYMBOL_CLOSE, - (const bstring *)&be_const_str_ADC_CT_POWER, - (const bstring *)&be_const_str_PZEM017_RX, - (const bstring *)&be_const_str_TUYA_RX, - (const bstring *)&be_const_str_lv_draw_img_dsc, - (const bstring *)&be_const_str_RDM6300_RX, - (const bstring *)&be_const_str_SM2135_CLK, - (const bstring *)&be_const_str_DSB, - (const bstring *)&be_const_str_CNTR1_NP, + (const bstring *)&be_const_str_EXS_ENABLE, + (const bstring *)&be_const_str_opt_connect, + (const bstring *)&be_const_str_lv_spinner, + (const bstring *)&be_const_str_stop, + (const bstring *)&be_const_str_gamma10, + (const bstring *)&be_const_str_HRXL_RX, + (const bstring *)&be_const_str_ETH_PHY_MDC, + (const bstring *)&be_const_str_lv_draw_mask_angle_param, + (const bstring *)&be_const_str_pow, + (const bstring *)&be_const_str_resp_cmnd_failed, + (const bstring *)&be_const_str_ELECTRIQ_MOODL_TX, + (const bstring *)&be_const_str_LOW, (const bstring *)&be_const_str_dot_def, - (const bstring *)&be_const_str_CSE7761_TX, - (const bstring *)&be_const_str_lv_win, - (const bstring *)&be_const_str_SYMBOL_POWER, NULL, - (const bstring *)&be_const_str_ADC_RANGE, - (const bstring *)&be_const_str_pin, - (const bstring *)&be_const_str_SYMBOL_SHUFFLE, - (const bstring *)&be_const_str_SYMBOL_CUT, - (const bstring *)&be_const_str_DHT22, - (const bstring *)&be_const_str_SYMBOL_VOLUME_MID, + (const bstring *)&be_const_str_ST7789_CS, + (const bstring *)&be_const_str_HM10_TX, + (const bstring *)&be_const_str_SDM120_RX, + (const bstring *)&be_const_str_KEY1_INV_NP, + (const bstring *)&be_const_str_SYMBOL_LEFT, + NULL, + (const bstring *)&be_const_str_pin_mode, + (const bstring *)&be_const_str_OPEN_DRAIN, (const bstring *)&be_const_str_HX711_DAT, - (const bstring *)&be_const_str_exists, + (const bstring *)&be_const_str___upper__, NULL, - NULL, - (const bstring *)&be_const_str_ADC_INPUT, - (const bstring *)&be_const_str_I2S_OUT_DATA, - (const bstring *)&be_const_str_I2S_IN_CLK, - (const bstring *)&be_const_str_BOILER_OT_RX, - (const bstring *)&be_const_str_TM1638CLK, - (const bstring *)&be_const_str_SYMBOL_SAVE, - (const bstring *)&be_const_str_MAX31855CS, - (const bstring *)&be_const_str_MCP39F5_RST, - (const bstring *)&be_const_str_CC1101_GDO0, - (const bstring *)&be_const_str_VL53L0X_XSHUT1, - (const bstring *)&be_const_str_I2S_IN_DATA, - NULL, - (const bstring *)&be_const_str_PZEM016_RX, (const bstring *)&be_const_str_LE01MR_RX, - (const bstring *)&be_const_str_KEY1_TC, - (const bstring *)&be_const_str_FTC532, - (const bstring *)&be_const_str_AZ_RXD, - (const bstring *)&be_const_str_WEBCAM_PCLK, - (const bstring *)&be_const_str_PULLDOWN, + (const bstring *)&be_const_str_opt_call, + (const bstring *)&be_const_str_CC1101_GDO0, + (const bstring *)&be_const_str_BUZZER_INV, + (const bstring *)&be_const_str_PN532_RXD, + (const bstring *)&be_const_str_I2S_IN_CLK, + (const bstring *)&be_const_str_MAX31855CLK, + (const bstring *)&be_const_str_LMT01, NULL, + (const bstring *)&be_const_str_dot_p2, + (const bstring *)&be_const_str_EPAPER29_CS, NULL, - (const bstring *)&be_const_str_ARIRFSEL, + (const bstring *)&be_const_str_SPI_CLK, + (const bstring *)&be_const_str_I2C_SCL, + NULL, + (const bstring *)&be_const_str_vcall, + (const bstring *)&be_const_str_set_power, + (const bstring *)&be_const_str_lv_area, (const bstring *)&be_const_str_A4988_STP, - (const bstring *)&be_const_str_isrunning, - (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_ROT1B, + (const bstring *)&be_const_str_RXD, + (const bstring *)&be_const_str_DYP_RX, + (const bstring *)&be_const_str_lv_arc, + (const bstring *)&be_const_str_write_bytes, + (const bstring *)&be_const_str_OPTION_A, + (const bstring *)&be_const_str_lv_draw_mask_angle_param_cfg, + (const bstring *)&be_const_str_MHZ_RXD, + (const bstring *)&be_const_str_A4988_ENA, + (const bstring *)&be_const_str_run_deferred, + (const bstring *)&be_const_str_SDM630_TX, + (const bstring *)&be_const_str_member, + (const bstring *)&be_const_str_load, + (const bstring *)&be_const_str_content_send_style, + (const bstring *)&be_const_str__cmd, + (const bstring *)&be_const_str_SYMBOL_RIGHT, + (const bstring *)&be_const_str_opt_eq, + (const bstring *)&be_const_str_arg_name, + (const bstring *)&be_const_str_SPI_DC, + (const bstring *)&be_const_str_MP3_DFR562, + NULL, + (const bstring *)&be_const_str_MGC3130_XFER, + (const bstring *)&be_const_str_SHELLY_DIMMER_BOOT0, + (const bstring *)&be_const_str_DEEPSLEEP, + (const bstring *)&be_const_str_ADC_LIGHT, + (const bstring *)&be_const_str_DHT22, + (const bstring *)&be_const_str_call, + (const bstring *)&be_const_str_TM1637CLK, + (const bstring *)&be_const_str_SDM72_RX, + (const bstring *)&be_const_str_MIEL_HVAC_TX, + (const bstring *)&be_const_str_KEY1_INV, + NULL, + (const bstring *)&be_const_str_lv_chart, + (const bstring *)&be_const_str_AZ_RXD, + (const bstring *)&be_const_str_SYMBOL_COPY, + (const bstring *)&be_const_str_I2C_Driver, + (const bstring *)&be_const_str_SR04_TRIG, + (const bstring *)&be_const_str_ETH_PHY_MDIO, + (const bstring *)&be_const_str_HPMA_RX, + (const bstring *)&be_const_str_srand, + (const bstring *)&be_const_str_BS814_CLK, + (const bstring *)&be_const_str_PROJECTOR_CTRL_TX, + (const bstring *)&be_const_str__begin_transmission, + (const bstring *)&be_const_str_SAIR_RX, + (const bstring *)&be_const_str_keys, + (const bstring *)&be_const_str_GET, + NULL, + (const bstring *)&be_const_str_exec_rules, + (const bstring *)&be_const_str_HIGH, + (const bstring *)&be_const_str_LEDLNK, + (const bstring *)&be_const_str_lv_group, + NULL, + (const bstring *)&be_const_str_get_string, + (const bstring *)&be_const_str_lv_draw_mask_radius_param_cfg, + (const bstring *)&be_const_str_KEY1, + (const bstring *)&be_const_str_ADC_CT_POWER, + NULL, + (const bstring *)&be_const_str_check_privileged_access, + (const bstring *)&be_const_str_lv_cont, + NULL, + NULL, + (const bstring *)&be_const_str_content_send, + (const bstring *)&be_const_str_SYMBOL_BATTERY_3, + (const bstring *)&be_const_str_ADC_INPUT, + (const bstring *)&be_const_str_EPD_DATA, + (const bstring *)&be_const_str_ZEROCROSS, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str_SYMBOL_UPLOAD, + NULL, + (const bstring *)&be_const_str_SDM630_RX, + (const bstring *)&be_const_str_SYMBOL_SAVE, + NULL, + NULL, + (const bstring *)&be_const_str_I2S_OUT_DATA, (const bstring *)&be_const_str_OLED_RESET, NULL, - (const bstring *)&be_const_str_SYMBOL_BULLET, - (const bstring *)&be_const_str_PN532_TXD, - (const bstring *)&be_const_str_opt_connect, - (const bstring *)&be_const_str_members, - (const bstring *)&be_const_str_LED1, - (const bstring *)&be_const_str_OUTPUT_HI, - (const bstring *)&be_const_str_opt_neq, - (const bstring *)&be_const_str_getbits, - (const bstring *)&be_const_str_SWT1_NP, - (const bstring *)&be_const_str_MAX31855DO, - (const bstring *)&be_const_str_tanh, - (const bstring *)&be_const_str_DDS2382_RX, - (const bstring *)&be_const_str_elif, - (const bstring *)&be_const_str_SSD1331_DC, - (const bstring *)&be_const_str_PMS5003_TX, - (const bstring *)&be_const_str_PWM1_INV, - (const bstring *)&be_const_str_ETH_PHY_MDC, - (const bstring *)&be_const_str_AudioGeneratorMP3, - NULL, - NULL, - (const bstring *)&be_const_str_lv_draw_mask_map_param_cfg, - (const bstring *)&be_const_str_DI, - (const bstring *)&be_const_str_GPS_RX, - (const bstring *)&be_const_str_HIGH, - (const bstring *)&be_const_str_resp_cmnd_error, - (const bstring *)&be_const_str_IBEACON_RX, - (const bstring *)&be_const_str_AudioFileSourceFS, - (const bstring *)&be_const_str_ETH_PHY_MDIO, - (const bstring *)&be_const_str_LMT01, - (const bstring *)&be_const_str_MGC3130_RESET, - (const bstring *)&be_const_str_ZIGBEE_TX, - NULL, - (const bstring *)&be_const_str_AudioOutputI2S, - (const bstring *)&be_const_str_LEDLNK_INV, - (const bstring *)&be_const_str_SSPI_MAX31865_CS1, - (const bstring *)&be_const_str_BS814_DAT, - (const bstring *)&be_const_str_opt_add, - (const bstring *)&be_const_str_SSPI_SCLK, - (const bstring *)&be_const_str_BOILER_OT_TX, - (const bstring *)&be_const_str_ZIGBEE_RST, - (const bstring *)&be_const_str_SYMBOL_SD_CARD, - (const bstring *)&be_const_str_CC1101_GDO2, - NULL, - (const bstring *)&be_const_str_HM10_TX, - (const bstring *)&be_const_str_DHT11, - (const bstring *)&be_const_str_SSD1351_CS, - (const bstring *)&be_const_str_SYMBOL_EYE_CLOSE, - (const bstring *)&be_const_str_EPAPER29_CS, - (const bstring *)&be_const_str_LE01MR_TX, - NULL, - (const bstring *)&be_const_str_A4988_DIR, - (const bstring *)&be_const_str_dot_p2, - NULL, - (const bstring *)&be_const_str_ILI9341_DC, - (const bstring *)&be_const_str_I2C_Driver, - (const bstring *)&be_const_str_ADC_BUTTON, - (const bstring *)&be_const_str_MAX7219DIN, - (const bstring *)&be_const_str_DDSU666_RX, - (const bstring *)&be_const_str_KEY1_PD, - (const bstring *)&be_const_str_cmd, - (const bstring *)&be_const_str_SYMBOL_LEFT, - (const bstring *)&be_const_str_LOW, - (const bstring *)&be_const_str_bus, - (const bstring *)&be_const_str_EC_C25519, - (const bstring *)&be_const_str_open, - (const bstring *)&be_const_str_lv_draw_mask_fade_param, - (const bstring *)&be_const_str_exec_rules, - (const bstring *)&be_const_str_SAIR_RX, - NULL, - NULL, - (const bstring *)&be_const_str_A4988_ENA, - (const bstring *)&be_const_str___iterator__, - (const bstring *)&be_const_str_I2S_OUT_SLCT, - (const bstring *)&be_const_str_lv_img, - (const bstring *)&be_const_str_CHANGE, - NULL, - (const bstring *)&be_const_str_CSE7766_TX, - (const bstring *)&be_const_str_A4988_MS1, - (const bstring *)&be_const_str_WEBCAM_PWDN, - (const bstring *)&be_const_str_read8, - (const bstring *)&be_const_str_lv_linemeter, - (const bstring *)&be_const_str_dot_p1, - (const bstring *)&be_const_str_CSE7761_RX, - (const bstring *)&be_const_str_ADC_JOY, - (const bstring *)&be_const_str_CSE7766_RX, - (const bstring *)&be_const_str_SYMBOL_DIRECTORY, - (const bstring *)&be_const_str_loop, - (const bstring *)&be_const_str_SYMBOL_BACKSPACE, - (const bstring *)&be_const_str_SHELLY_DIMMER_BOOT0, - (const bstring *)&be_const_str_dot_p, - (const bstring *)&be_const_str_INPUT, - (const bstring *)&be_const_str_lv_event_cb, - (const bstring *)&be_const_str_opt_eq, - (const bstring *)&be_const_str_ADC_BUTTON_INV, - (const bstring *)&be_const_str_KEY1_NP, - (const bstring *)&be_const_str_SM16716_CLK, - (const bstring *)&be_const_str_item, - (const bstring *)&be_const_str_NRF24_CS, - (const bstring *)&be_const_str_GPS_TX, - (const bstring *)&be_const_str_SYMBOL_AUDIO, - (const bstring *)&be_const_str_call, - NULL, - NULL, - (const bstring *)&be_const_str_SYMBOL_UP, - (const bstring *)&be_const_str_SPI_MISO, - NULL, - NULL, - (const bstring *)&be_const_str_BL0940_RX, - NULL, - (const bstring *)&be_const_str_SM16716_SEL, - NULL, - (const bstring *)&be_const_str_NEOPOOL_TX, - NULL, - (const bstring *)&be_const_str_SYMBOL_STOP, - NULL, - (const bstring *)&be_const_str_name, - (const bstring *)&be_const_str_ELECTRIQ_MOODL_TX, + (const bstring *)&be_const_str_print, + (const bstring *)&be_const_str_I2S_OUT_CLK, (const bstring *)&be_const_str_AZ_TXD, - (const bstring *)&be_const_str_SR04_ECHO, - (const bstring *)&be_const_str_DDSU666_TX, - (const bstring *)&be_const_str_ST7789_CS, - (const bstring *)&be_const_str_TCP_TX, + (const bstring *)&be_const_str_PZEM016_RX, + (const bstring *)&be_const_str_lv_roller, + (const bstring *)&be_const_str_SYMBOL_CUT, + (const bstring *)&be_const_str_AudioGeneratorMP3, + (const bstring *)&be_const_str_ADC_JOY, + (const bstring *)&be_const_str_AS608_TX, + (const bstring *)&be_const_str_ILI9341_DC, + (const bstring *)&be_const_str_TX2X_TXD_BLACK, + (const bstring *)&be_const_str_SDM72_TX, + (const bstring *)&be_const_str_HLW_CF, + (const bstring *)&be_const_str_SPI_MISO, + (const bstring *)&be_const_str_FTC532, + (const bstring *)&be_const_str_int, + (const bstring *)&be_const_str_GPS_RX, + (const bstring *)&be_const_str__request_from, + (const bstring *)&be_const_str_SDCARD_CS, + (const bstring *)&be_const_str_SYMBOL_EYE_CLOSE, + NULL, + (const bstring *)&be_const_str_AudioGenerator, + (const bstring *)&be_const_str_OUTPUT_LO, + (const bstring *)&be_const_str_SYMBOL_USB, + (const bstring *)&be_const_str_SYMBOL_EJECT, + (const bstring *)&be_const_str_MCP39F5_RST, + (const bstring *)&be_const_str_ETH_PHY_POWER, + (const bstring *)&be_const_str_AudioFileSourceFS, + (const bstring *)&be_const_str_LE01MR_TX, + (const bstring *)&be_const_str_get_size, + (const bstring *)&be_const_str_read, + (const bstring *)&be_const_str_char, + (const bstring *)&be_const_str_acos, (const bstring *)&be_const_str_NONE, - (const bstring *)&be_const_str_NRG_SEL, - (const bstring *)&be_const_str_read24, - (const bstring *)&be_const_str_RF_SENSOR, - (const bstring *)&be_const_str_clear, - (const bstring *)&be_const_str_has_arg, - NULL, - (const bstring *)&be_const_str_SYMBOL_PLUS, - (const bstring *)&be_const_str_MHZ_TXD, - (const bstring *)&be_const_str_PN532_RXD, - (const bstring *)&be_const_str_HRE_CLOCK, - (const bstring *)&be_const_str_SM16716_DAT, - NULL, - (const bstring *)&be_const_str_WE517_TX, - (const bstring *)&be_const_str_MCP39F5_RX, (const bstring *)&be_const_str_ADE7953_IRQ, NULL, - (const bstring *)&be_const_str_resp_cmnd, - (const bstring *)&be_const_str_update, - (const bstring *)&be_const_str_web_send_decimal, - (const bstring *)&be_const_str_add_cmd, - (const bstring *)&be_const_str_MGC3130_XFER, - (const bstring *)&be_const_str_AudioFileSource, - (const bstring *)&be_const_str_ARIRFRCV, - (const bstring *)&be_const_str_hex, - (const bstring *)&be_const_str_HALLEFFECT, - (const bstring *)&be_const_str_BACKLIGHT, - (const bstring *)&be_const_str_SYMBOL_IMAGE, + (const bstring *)&be_const_str_HJL_CF, + (const bstring *)&be_const_str_chars_in_string, + (const bstring *)&be_const_str_SPI_CS, + (const bstring *)&be_const_str_EPAPER42_CS, + (const bstring *)&be_const_str_lv_point, + (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_LED1, + (const bstring *)&be_const_str_opt_neq, + (const bstring *)&be_const_str_codedump, + (const bstring *)&be_const_str_SSD1331_CS, + (const bstring *)&be_const_str_SDS0X1_RX, + (const bstring *)&be_const_str_DSB_OUT, + (const bstring *)&be_const_str_ADC_TEMP, + (const bstring *)&be_const_str_ADC_PH, + (const bstring *)&be_const_str_bus, + (const bstring *)&be_const_str_SYMBOL_BATTERY_2, + (const bstring *)&be_const_str_SDS0X1_TX, + (const bstring *)&be_const_str_GPS_TX, + (const bstring *)&be_const_str_DHT11, + (const bstring *)&be_const_str_DCKI, NULL, - (const bstring *)&be_const_str_pin_used, + NULL, + NULL, + (const bstring *)&be_const_str_DI, + (const bstring *)&be_const_str_open, (const bstring *)&be_const_str_AS3935, - (const bstring *)&be_const_str_run_deferred, - (const bstring *)&be_const_str_AudioGeneratorWAV, - (const bstring *)&be_const_str_SDM72_TX, - (const bstring *)&be_const_str_eth, - (const bstring *)&be_const_str_PROJECTOR_CTRL_TX, NULL, + (const bstring *)&be_const_str_BL0940_RX, + (const bstring *)&be_const_str__write, + NULL, + (const bstring *)&be_const_str_webclient, + (const bstring *)&be_const_str_ARIRFSEL, + (const bstring *)&be_const_str_A4988_MS1, + (const bstring *)&be_const_str_dot_p, + (const bstring *)&be_const_str_I2C_SDA, + NULL, + (const bstring *)&be_const_str_IBEACON_TX, + (const bstring *)&be_const_str_dot_w, + (const bstring *)&be_const_str_SYMBOL_PLUS, + (const bstring *)&be_const_str_SPI_MOSI, + (const bstring *)&be_const_str_NRF24_CS, + (const bstring *)&be_const_str_BUZZER, + (const bstring *)&be_const_str_IBEACON_RX, + (const bstring *)&be_const_str_INPUT_PULLUP, + (const bstring *)&be_const_str_SWT1_NP, + (const bstring *)&be_const_str_asin, + (const bstring *)&be_const_str_start, + (const bstring *)&be_const_str_opt_add, + (const bstring *)&be_const_str_i2c_enabled, + (const bstring *)&be_const_str_deg, + (const bstring *)&be_const_str_allocated, + NULL, + (const bstring *)&be_const_str_WEBCAM_SIOC, + (const bstring *)&be_const_str_SYMBOL_CLOSE, + (const bstring *)&be_const_str_hex, + (const bstring *)&be_const_str_cosh, + (const bstring *)&be_const_str_SYMBOL_DOWN, + (const bstring *)&be_const_str_NEOPOOL_RX, + (const bstring *)&be_const_str_select, + (const bstring *)&be_const_str_lv_draw_line_dsc, + (const bstring *)&be_const_str_KEY1_PD, + (const bstring *)&be_const_str_log, + (const bstring *)&be_const_str_DDSU666_RX, + (const bstring *)&be_const_str_PULLUP, + (const bstring *)&be_const_str_TCP_RX, + NULL, + (const bstring *)&be_const_str_CNTR1_NP, + (const bstring *)&be_const_str_KEY1_NP, + (const bstring *)&be_const_str_HRE_CLOCK, + (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, + (const bstring *)&be_const_str_CC1101_GDO2, + (const bstring *)&be_const_str_PMS5003_TX, + (const bstring *)&be_const_str_AES_GCM, + (const bstring *)&be_const_str_TM1638CLK, + NULL, + (const bstring *)&be_const_str_SHELLY_DIMMER_RST_INV, + (const bstring *)&be_const_str_HM10_RX, + (const bstring *)&be_const_str_SSPI_DC, + (const bstring *)&be_const_str_for, + NULL, + (const bstring *)&be_const_str_CSE7761_TX, + (const bstring *)&be_const_str_POST, + (const bstring *)&be_const_str__get_cb, + (const bstring *)&be_const_str_ROT1A, + (const bstring *)&be_const_str_SBR_RX, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str_setrange, + (const bstring *)&be_const_str_HRE_DATA, + (const bstring *)&be_const_str_SYMBOL_PREV, + (const bstring *)&be_const_str_reset_search, + (const bstring *)&be_const_str_NRF24_DC, + NULL, + (const bstring *)&be_const_str_OUTPUT_HI, + (const bstring *)&be_const_str_resp_cmnd_str, + (const bstring *)&be_const_str_CNTR1, + (const bstring *)&be_const_str__cb, + (const bstring *)&be_const_str__buffer, + (const bstring *)&be_const_str_lv_table, + (const bstring *)&be_const_str_SYMBOL_CALL, + (const bstring *)&be_const_str_RISING, + (const bstring *)&be_const_str_ILI9341_CS, + (const bstring *)&be_const_str_SR04_ECHO, + (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str_, + NULL, + (const bstring *)&be_const_str_exp, (const bstring *)&be_const_str_SYMBOL_DRIVE, - (const bstring *)&be_const_str_ILI9341_CS + (const bstring *)&be_const_str_SYMBOL_NEXT, + (const bstring *)&be_const_str_import, + (const bstring *)&be_const_str_REL1_INV, + (const bstring *)&be_const_str_tan, + (const bstring *)&be_const_str_CHANGE, + (const bstring *)&be_const_str_SYMBOL_WIFI, + NULL, + (const bstring *)&be_const_str_content_button, + (const bstring *)&be_const_str_MD5, + (const bstring *)&be_const_str_lv_keyboard, + (const bstring *)&be_const_str_SM16716_CLK, + (const bstring *)&be_const_str_I2S_OUT_SLCT, + NULL, + (const bstring *)&be_const_str_setmember, + (const bstring *)&be_const_str_WS2812, + (const bstring *)&be_const_str_MAX31855CS, + (const bstring *)&be_const_str_SYMBOL_IMAGE, + (const bstring *)&be_const_str_AS608_RX, + (const bstring *)&be_const_str_exec_cmd, + (const bstring *)&be_const_str_SWT1_PD, + NULL, + NULL, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_real, + (const bstring *)&be_const_str_TXD, + (const bstring *)&be_const_str_SYMBOL_PLAY, + (const bstring *)&be_const_str_TASMOTACLIENT_RST, + (const bstring *)&be_const_str_SYMBOL_GPS, + (const bstring *)&be_const_str_HALLEFFECT, + (const bstring *)&be_const_str_TELEINFO_ENABLE, + (const bstring *)&be_const_str_copy, + NULL, + (const bstring *)&be_const_str_CSE7766_RX, + (const bstring *)&be_const_str_dot_p1, + (const bstring *)&be_const_str_lv_msgbox, + (const bstring *)&be_const_str_ADC_BUTTON_INV, + (const bstring *)&be_const_str_MIEL_HVAC_RX, + (const bstring *)&be_const_str_DDS2382_TX, + (const bstring *)&be_const_str_MGC3130_RESET, + (const bstring *)&be_const_str_SYMBOL_AUDIO, + (const bstring *)&be_const_str_RF_SENSOR, + (const bstring *)&be_const_str_BOILER_OT_TX, + (const bstring *)&be_const_str_atan, + (const bstring *)&be_const_str_DDS2382_RX, + NULL, + NULL, + (const bstring *)&be_const_str_ADC_BUTTON, + (const bstring *)&be_const_str_read32, + NULL, + (const bstring *)&be_const_str_digital_read, + (const bstring *)&be_const_str__end_transmission, + (const bstring *)&be_const_str_LED1_INV, + (const bstring *)&be_const_str_issubclass, + NULL, + (const bstring *)&be_const_str_SM2135_DAT, + (const bstring *)&be_const_str_clear, + (const bstring *)&be_const_str_WEBCAM_HREF, + (const bstring *)&be_const_str_A4988_DIR, + (const bstring *)&be_const_str_BS814_DAT, + (const bstring *)&be_const_str_push, + (const bstring *)&be_const_str_NEOPOOL_TX, + (const bstring *)&be_const_str_SM16716_SEL, + (const bstring *)&be_const_str_INPUT_PULLDOWN, + (const bstring *)&be_const_str_DSB }; static const struct bconststrtab m_const_string_table = { - .size = 323, - .count = 646, + .size = 329, + .count = 658, .table = m_string_table }; diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h b/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h new file mode 100644 index 000000000..6a7044c15 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h @@ -0,0 +1,31 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_webclient_map) { + { be_const_key(url_encode, 3), be_const_func(wc_urlencode) }, + { be_const_key(POST, -1), be_const_func(wc_POST) }, + { be_const_key(dot_p, -1), be_const_var(0) }, + { be_const_key(begin, 5), be_const_func(wc_begin) }, + { be_const_key(set_useragent, 2), be_const_func(wc_set_useragent) }, + { be_const_key(set_auth, 12), be_const_func(wc_set_auth) }, + { be_const_key(close, -1), be_const_func(wc_close) }, + { be_const_key(add_header, 9), be_const_func(wc_addheader) }, + { be_const_key(get_size, -1), be_const_func(wc_getsize) }, + { be_const_key(deinit, -1), be_const_func(wc_deinit) }, + { be_const_key(set_timeouts, -1), be_const_func(wc_set_timeouts) }, + { be_const_key(GET, 13), be_const_func(wc_GET) }, + { be_const_key(init, -1), be_const_func(wc_init) }, + { be_const_key(dot_w, -1), be_const_var(1) }, + { be_const_key(get_string, 11), be_const_func(wc_getstring) }, +}; + +static be_define_const_map( + be_class_webclient_map, + 15 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_webclient, + 2, + NULL, + webclient +); diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index c0802790d..6f0378fc7 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -980,7 +980,11 @@ #define USE_BERRY // Enable Berry scripting language //#define USE_BERRY_PSRAM // Allocate Berry memory in PSRAM if PSRAM is connected - this might be slightly slower but leaves main memory intact - + #define USE_WEBCLIENT // Enable `webclient` to make HTTP/HTTPS requests. Can be disabled for security reasons. + // #define USE_WEBCLIENT_HTTPS // Enable HTTPS outgoing requests based on BearSSL (much ligher then mbedTLS, 42KB vs 150KB) in insecure mode (no verification of server's certificate) + // Note that only one cipher is enabled: ECDHE_RSA_WITH_AES_128_GCM_SHA256 which is very commonly used and highly secure + #define USE_BERRY_WEBCLIENT_USERAGENT "TasmotaClient" // default user-agent used, can be changed with `wc.set_useragent()` + #define USE_BERRY_WEBCLIENT_TIMEOUT 5000 // Default timeout in milliseconds #define USE_CSE7761 // Add support for CSE7761 Energy monitor as used in Sonoff Dual R3 // -- LVGL Graphics Library --------------------------------- @@ -1075,10 +1079,10 @@ * Post-process compile options for TLS \*********************************************************************************************/ -#if defined(USE_MQTT_TLS) || defined(USE_SENDMAIL) || defined(USE_TELEGRAM) +#if defined(USE_MQTT_TLS) || defined(USE_SENDMAIL) || defined(USE_TELEGRAM) || defined(USE_WEBCLIENT_HTTPS) || defined(USE_ALEXA_AVS) #define USE_TLS // flag indicates we need to include TLS code - #if defined(USE_MQTT_AWS_IOT) || defined(USE_TELEGRAM) + #if defined(USE_MQTT_AWS_IOT) || defined(USE_TELEGRAM) || defined(USE_WEBCLIENT_HTTPS) #define USE_MQTT_TLS_FORCE_EC_CIPHER // AWS IoT and TELEGRAM require EC Cipher #endif #endif diff --git a/tasmota/xdrv_52_3_berry_webclient.ino b/tasmota/xdrv_52_3_berry_webclient.ino new file mode 100644 index 000000000..5c98043a2 --- /dev/null +++ b/tasmota/xdrv_52_3_berry_webclient.ino @@ -0,0 +1,306 @@ +/* + xdrv_52_3_berry_webserver.ino - Berry scripting language, webserver module + + Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry + + This program 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. + + This program 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 this program. If not, see . +*/ + + +#ifdef USE_BERRY + +#ifdef USE_WEBCLIENT + +#include +#include "HttpClientLight.h" + +String wc_UrlEncode(const String& text) { + const char hex[] = "0123456789ABCDEF"; + + String encoded = ""; + int len = text.length(); + int i = 0; + while (i < len) { + char decodedChar = text.charAt(i++); + + if (('a' <= decodedChar && decodedChar <= 'z') || + ('A' <= decodedChar && decodedChar <= 'Z') || + ('0' <= decodedChar && decodedChar <= '9') || + ('=' == decodedChar)) { + encoded += decodedChar; + } else { + encoded += '%'; + encoded += hex[decodedChar >> 4]; + encoded += hex[decodedChar & 0xF]; + } + + } + return encoded; +} + +/*********************************************************************************************\ + * Int constants + *********************************************************************************************/ +// const be_constint_t webserver_constants[] = { +// { "BUTTON_CONFIGURATION", BUTTON_CONFIGURATION }, +// { "BUTTON_INFORMATION", BUTTON_INFORMATION }, +// { "BUTTON_MAIN", BUTTON_MAIN }, +// { "BUTTON_MANAGEMENT", BUTTON_MANAGEMENT }, +// { "BUTTON_MODULE", BUTTON_MODULE }, +// { "HTTP_ADMIN", HTTP_ADMIN }, +// { "HTTP_ANY", HTTP_ANY }, +// { "HTTP_GET", HTTP_GET }, +// { "HTTP_MANAGER", HTTP_MANAGER }, +// { "HTTP_MANAGER_RESET_ONLY", HTTP_MANAGER_RESET_ONLY }, +// { "HTTP_OFF", HTTP_OFF }, +// { "HTTP_OPTIONS", HTTP_OPTIONS }, +// { "HTTP_POST", HTTP_POST }, +// { "HTTP_USER", HTTP_USER }, +// }; + +/*********************************************************************************************\ + * Native functions mapped to Berry functions + * + * import webclient + * +\*********************************************************************************************/ +extern "C" { + // Berry: `` + // + int32_t wc_init(struct bvm *vm); + int32_t wc_init(struct bvm *vm) { + // int32_t argc = be_top(vm); // Get the number of arguments + WiFiClient * wcl = new WiFiClient(); + be_pushcomptr(vm, (void*) wcl); + be_setmember(vm, 1, ".w"); + HTTPClientLight * cl = new HTTPClientLight(); + cl->setUserAgent(USE_BERRY_WEBCLIENT_USERAGENT); + cl->setConnectTimeout(USE_BERRY_WEBCLIENT_TIMEOUT); // set default timeout + be_pushcomptr(vm, (void*) cl); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + + HTTPClientLight * wc_getclient(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + void *p = be_tocomptr(vm, -1); + be_pop(vm, 1); + return (HTTPClientLight*) p; + } + + WiFiClient * wc_getwificlient(struct bvm *vm) { + be_getmember(vm, 1, ".w"); + void *p = be_tocomptr(vm, -1); + be_pop(vm, 1); + return (WiFiClient*) p; + } + + int32_t wc_deinit(struct bvm *vm); + int32_t wc_deinit(struct bvm *vm) { + // int32_t argc = be_top(vm); // Get the number of arguments + HTTPClientLight * cl = wc_getclient(vm); + if (cl != nullptr) { delete cl; } + be_pushnil(vm); + be_setmember(vm, 1, ".p"); + WiFiClient * wcl = wc_getwificlient(vm); + if (wcl != nullptr) { delete wcl; } + be_setmember(vm, 1, ".w"); + be_return_nil(vm); + } + + // wc.url_encode(string) -> string + int32_t wc_urlencode(struct bvm *vm); + int32_t wc_urlencode(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2)) { + const char * s = be_tostring(vm, 2); + String url = wc_UrlEncode(String(s)); + be_pushstring(vm, url.c_str()); + be_return(vm); /* return self */ + } + be_raise(vm, kTypeError, nullptr); + } + + // wc.begin(url:string) -> self + int32_t wc_begin(struct bvm *vm); + int32_t wc_begin(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc == 1 || !be_tostring(vm, 2)) { be_raise(vm, "attribute_error", "missing URL as string"); } + const char * url = be_tostring(vm, 2); + HTTPClientLight * cl = wc_getclient(vm); + // open connection + if (!cl->begin(url)) { + be_raise(vm, "value_error", "unsupported protocol"); + } + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + + // wc.close(void) -> nil + int32_t wc_close(struct bvm *vm); + int32_t wc_close(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + cl->end(); + be_return_nil(vm); + } + + // wc.wc_set_timeouts([http_timeout_ms:int, tcp_timeout_ms:int]) -> self + int32_t wc_set_timeouts(struct bvm *vm); + int32_t wc_set_timeouts(struct bvm *vm) { + int32_t argc = be_top(vm); + HTTPClientLight * cl = wc_getclient(vm); + if (argc >= 2) { + cl->setTimeout(be_toint(vm, 2)); + } + if (argc >= 3) { + cl->setConnectTimeout(be_toint(vm, 3)); + } + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + + // wc.set_useragent(user_agent:string) -> self + int32_t wc_set_useragent(struct bvm *vm); + int32_t wc_set_useragent(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2)) { + HTTPClientLight * cl = wc_getclient(vm); + const char * useragent = be_tostring(vm, 2); + cl->setUserAgent(String(useragent)); + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + be_raise(vm, kTypeError, nullptr); + } + + // wc.wc_set_auth(auth:string | (user:string, password:string)) -> self + int32_t wc_set_auth(struct bvm *vm); + int32_t wc_set_auth(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2) && (argc < 3 || be_isstring(vm, 3))) { + HTTPClientLight * cl = wc_getclient(vm); + const char * user = be_tostring(vm, 2); + if (argc == 2) { + cl->setAuthorization(user); + } else { + const char * password = be_tostring(vm, 3); + cl->setAuthorization(user, password); + } + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + be_raise(vm, kTypeError, nullptr); + } + + // wc.addheader(name:string, value:string [, first:bool=false [, replace:bool=true]]) -> nil + int32_t wc_addheader(struct bvm *vm); + int32_t wc_addheader(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 3 && (be_isstring(vm, 2) || be_isstring(vm, 2))) { + HTTPClientLight * cl = wc_getclient(vm); + + const char * name = be_tostring(vm, 2); + const char * value = be_tostring(vm, 3); + bool first = false; + bool replace = true; + if (argc >= 4) { + first = be_tobool(vm, 4); + } + if (argc >= 5) { + replace = be_tobool(vm, 5); + } + // do the call + cl->addHeader(String(name), String(value), first, replace); + be_return_nil(vm); + } + be_raise(vm, kTypeError, nullptr); + } + + // cw.connected(void) -> bool + int32_t wc_connected(struct bvm *vm); + int32_t wc_connected(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + be_pushbool(vm, cl->connected()); + be_return(vm); /* return code */ + } + + // cw.GET(void) -> httpCode:int + int32_t wc_GET(struct bvm *vm); + int32_t wc_GET(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + uint32_t http_connect_time = millis(); + int32_t httpCode = cl->GET(); + if (httpCode <= -1000) { + AddLog(LOG_LEVEL_INFO, D_LOG_HTTP "TLS connection error: %d", -httpCode - 1000); + } else { + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP "TLS connected in %d ms, stack low mark %d"), + millis() - http_connect_time, uxTaskGetStackHighWaterMark(nullptr)); + } + be_pushint(vm, httpCode); + be_return(vm); /* return code */ + } + + // wc.POST(string | bytes) -> httpCode:int + int32_t wc_POST(struct bvm *vm); + int32_t wc_POST(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && (be_isstring(vm, 2) || be_isbytes(vm, 2))) { + HTTPClientLight * cl = wc_getclient(vm); + const char * buf = nullptr; + size_t buf_len = 0; + if (be_isstring(vm, 2)) { // string + buf = be_tostring(vm, 2); + buf_len = strlen(buf); + } else { // bytes + buf = (const char*) be_tobytes(vm, 2, &buf_len); + } + uint32_t http_connect_time = millis(); + int32_t httpCode = cl->POST((uint8_t*)buf, buf_len); + if (httpCode <= -1000) { + AddLog(LOG_LEVEL_INFO, D_LOG_HTTP "TLS connection error: %d", -httpCode - 1000); + } else { + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP "TLS connected in %d ms, stack low mark %d"), + millis() - http_connect_time, uxTaskGetStackHighWaterMark(nullptr)); + } + be_pushint(vm, httpCode); + be_return(vm); /* return code */ + } + be_raise(vm, kTypeError, nullptr); + } + + int32_t wc_getstring(struct bvm *vm); + int32_t wc_getstring(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + int32_t sz = cl->getSize(); + // abort if we exceed 32KB size, things will not go well otherwise + if (sz >= 32767) { + be_raise(vm, "value_error", "response size too big (>32KB)"); + } + String payload = cl->getString(); + be_pushstring(vm, payload.c_str()); + cl->end(); // free allocated memory ~16KB + be_return(vm); /* return code */ + } + + int32_t wc_getsize(struct bvm *vm); + int32_t wc_getsize(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + be_pushint(vm, cl->getSize()); + be_return(vm); /* return code */ + } + +} + +#endif // USE_WEBCLIENT +#endif // USE_BERRY