Merge branch 'preview_espnow_pr3237' into mdev

This commit is contained in:
Frank
2023-07-30 21:50:19 +02:00
11 changed files with 438 additions and 141 deletions

View File

@@ -483,6 +483,13 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
CJSON(retainMqttMsg, if_mqtt[F("rtn")]);
#endif
#ifndef WLED_DISABLE_ESPNOW
JsonObject remote = doc["remote"];
CJSON(enable_espnow_remote, remote[F("remote_enabled")]);
getStringFromJson(linked_remote, remote[F("linked_remote")], 13);
#endif
#ifndef WLED_DISABLE_HUESYNC
JsonObject if_hue = interfaces["hue"];
CJSON(huePollingEnabled, if_hue["en"]);
@@ -964,6 +971,13 @@ void serializeConfig() {
if_mqtt_topics[F("group")] = mqttGroupTopic;
#endif
#ifndef WLED_DISABLE_ESPNOW
JsonObject remote = doc.createNestedObject(F("remote"));
remote[F("remote_enabled")] = enable_espnow_remote;
remote[F("linked_remote")] = linked_remote;
#endif
#ifndef WLED_DISABLE_HUESYNC
JsonObject if_hue = interfaces.createNestedObject("hue");
if_hue["en"] = huePollingEnabled;

View File

@@ -182,6 +182,17 @@
Disable WiFi sleep: <input type="checkbox" name="WS"><br>
<i>Can help with connectivity issues.<br>
Do not enable if WiFi is working correctly, increases power consumption.</i>
<div id="remd">
<h3>Wireless Remote</h3>
<i>Listen for events over ESP-NOW<br>
Keep disabled if not using a remote, increases power consumption.<br></i>
Enable Remote: <input type="checkbox" name="RE"><br>
Hardware MAC: <input type="text" name="RMAC"><br>
Last Seen: <span class="rlid">None</span> <br>
</div>
<div id="ethd">
<h3>Ethernet Type</h3>
<select name="ETH">

View File

@@ -204,12 +204,16 @@ bool presetsActionPending(void); // WLEDMM true if presetToApply, presetToSave,
void initPresetsFile();
void handlePresets();
bool applyPreset(byte index, byte callMode = CALL_MODE_DIRECT_CHANGE);
void applyPresetWithFallback(uint8_t presetID, uint8_t callMode, uint8_t effectID = 0, uint8_t paletteID = 0);
inline bool applyTemporaryPreset() {return applyPreset(255);};
void savePreset(byte index, const char* pname = nullptr, JsonObject saveobj = JsonObject());
inline void saveTemporaryPreset() {savePreset(255);};
void deletePreset(byte index);
bool getPresetName(byte index, String& name);
//remote.cpp
void handleRemote();
//set.cpp
bool isAsterisksOnly(const char* str, byte maxLen);
void handleSettingsSet(AsyncWebServerRequest *request, byte subPage);

View File

@@ -151,142 +151,150 @@ const uint8_t PAGE_settings[] PROGMEM = {
// Autogenerated from wled00/data/settings_wifi.htm, do not edit!!
const uint16_t PAGE_settings_wifi_length = 2144;
const uint16_t PAGE_settings_wifi_length = 2262;
const uint8_t PAGE_settings_wifi[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xb5, 0x58, 0x6b, 0x73, 0xdb, 0xba,
0x11, 0xfd, 0xae, 0x5f, 0x01, 0xa3, 0x1d, 0x0f, 0x39, 0xa6, 0x29, 0xc9, 0x4a, 0x72, 0x53, 0x5b,
0x54, 0xea, 0x87, 0x6e, 0xec, 0x36, 0xd7, 0x56, 0x47, 0x9e, 0x78, 0x3a, 0x69, 0xe6, 0x5e, 0x9a,
0x5c, 0x49, 0x88, 0x49, 0x80, 0x25, 0x40, 0xc9, 0x1e, 0x47, 0xff, 0xbd, 0xbb, 0x00, 0xf5, 0xb4,
0x9d, 0x76, 0x32, 0xee, 0x64, 0x92, 0x90, 0xc4, 0x62, 0x77, 0x71, 0xf6, 0xec, 0x03, 0xea, 0xee,
0x9c, 0x5d, 0x9d, 0x5e, 0xff, 0x73, 0xd0, 0x67, 0x13, 0x93, 0x67, 0xbd, 0x2e, 0xfd, 0xcb, 0xb2,
0x58, 0x8e, 0x23, 0x0e, 0x92, 0xe3, 0x3b, 0xc4, 0x69, 0xaf, 0x9b, 0x83, 0x89, 0x59, 0x32, 0x89,
0x4b, 0x0d, 0x26, 0xe2, 0x95, 0x19, 0xed, 0xbf, 0xe7, 0xf5, 0xd7, 0x86, 0x8c, 0x73, 0x88, 0xf8,
0x54, 0xc0, 0xac, 0x50, 0xa5, 0xe1, 0x2c, 0x51, 0xd2, 0x80, 0x44, 0xb1, 0x99, 0x48, 0xcd, 0x24,
0x7a, 0xdb, 0x6a, 0x2d, 0x45, 0xb7, 0x96, 0x52, 0x98, 0x8a, 0x04, 0xf6, 0xed, 0x4b, 0x20, 0xa4,
0x30, 0x22, 0xce, 0xf6, 0x75, 0x12, 0x67, 0x10, 0xb5, 0x83, 0x3c, 0xbe, 0x17, 0x79, 0x95, 0x2f,
0xdf, 0x2b, 0x0d, 0xa5, 0x7d, 0x89, 0x6f, 0xf1, 0x5d, 0x2a, 0xfe, 0xc4, 0x72, 0xaf, 0x6b, 0x84,
0xc9, 0xa0, 0x77, 0x23, 0x7e, 0x15, 0x6c, 0x08, 0xc6, 0x08, 0x39, 0xd6, 0xdd, 0xa6, 0xfb, 0xd8,
0xd5, 0x49, 0x29, 0x0a, 0xd3, 0x6b, 0x4c, 0xe3, 0x92, 0x65, 0x2a, 0x11, 0x45, 0x90, 0x46, 0xa9,
0x4a, 0xaa, 0x1c, 0x1d, 0x0a, 0xf0, 0x43, 0xb4, 0xd3, 0x0e, 0x50, 0xbd, 0xfc, 0xa4, 0x54, 0xa1,
0xa3, 0x56, 0x50, 0x94, 0x30, 0xc4, 0xd7, 0xe1, 0xf0, 0xe2, 0x2c, 0xe2, 0xfc, 0x68, 0x54, 0xc9,
0xc4, 0x08, 0x25, 0xd9, 0xf8, 0x22, 0xf5, 0x8c, 0xff, 0x58, 0x82, 0xa9, 0x4a, 0xc9, 0xd2, 0x70,
0x0c, 0xa6, 0x9f, 0x01, 0x69, 0x39, 0x79, 0xb0, 0x4b, 0xf3, 0xa5, 0x68, 0xd2, 0xdf, 0x90, 0x4c,
0x4a, 0x88, 0x0d, 0xd4, 0xc2, 0x1b, 0x82, 0xe7, 0x9e, 0xff, 0x38, 0x13, 0x32, 0x55, 0xb3, 0x50,
0x15, 0x20, 0x3d, 0x3e, 0x31, 0xa6, 0xd0, 0x87, 0xcd, 0x66, 0x9e, 0x87, 0x77, 0x52, 0x85, 0xb3,
0x0c, 0xc8, 0x50, 0x73, 0x84, 0x0a, 0xaa, 0x12, 0x74, 0x53, 0xd7, 0xa7, 0x6b, 0xfe, 0x69, 0x26,
0x46, 0x62, 0x7f, 0xf1, 0xca, 0xd7, 0x74, 0x9e, 0x6c, 0xeb, 0x5c, 0x6e, 0xe2, 0x01, 0xff, 0x5d,
0x43, 0x36, 0x5a, 0x97, 0xbe, 0x44, 0x69, 0x8c, 0x8e, 0x36, 0xcc, 0x44, 0x1e, 0xa2, 0xf1, 0xc1,
0xba, 0x80, 0x1e, 0xf0, 0x3d, 0x0b, 0xd6, 0x21, 0xe7, 0xfe, 0x1e, 0x6f, 0x7e, 0xd3, 0x4a, 0x36,
0x25, 0x18, 0x1e, 0x40, 0x44, 0x40, 0x70, 0x42, 0x8c, 0xfb, 0x47, 0x10, 0xa6, 0x42, 0x53, 0x60,
0xd2, 0x68, 0xa7, 0x15, 0x40, 0x68, 0xe0, 0xde, 0x9c, 0x2e, 0x82, 0x4d, 0x30, 0x4a, 0x34, 0x1c,
0x86, 0x21, 0x0f, 0x46, 0x60, 0x92, 0x09, 0x1e, 0x3e, 0x34, 0x13, 0x74, 0xca, 0x44, 0x3d, 0x13,
0x92, 0x52, 0xcf, 0x5f, 0x7d, 0xb9, 0xba, 0xfd, 0x06, 0x89, 0x09, 0x63, 0xad, 0xc5, 0x58, 0x7a,
0x8f, 0xf3, 0xe0, 0x11, 0x2d, 0xce, 0x54, 0x79, 0xa7, 0x0f, 0xbf, 0x7c, 0x9d, 0x07, 0xb8, 0x77,
0xf1, 0x1e, 0x6a, 0x8c, 0xbb, 0xe7, 0x99, 0x00, 0xfc, 0xa8, 0x07, 0x61, 0x89, 0x3b, 0xf6, 0x8d,
0xfd, 0xcf, 0x0f, 0x4b, 0x48, 0xab, 0x04, 0x16, 0x8b, 0x9e, 0x41, 0xd9, 0x1c, 0x9c, 0x41, 0x5c,
0x4f, 0xa3, 0x28, 0x02, 0xfb, 0xe0, 0x7f, 0xff, 0x6e, 0xc2, 0xa2, 0xd2, 0x13, 0x0f, 0x7c, 0xd4,
0x1d, 0x7c, 0xf9, 0xba, 0xe6, 0xca, 0xa3, 0x18, 0x79, 0x2d, 0x14, 0x35, 0x61, 0x06, 0x72, 0x6c,
0x26, 0xbb, 0xbb, 0x4b, 0x8a, 0x74, 0xdb, 0x2d, 0xbf, 0x0e, 0xed, 0xf2, 0xdb, 0xde, 0x5e, 0x30,
0x55, 0x22, 0x65, 0x88, 0xf4, 0xb5, 0xc8, 0x41, 0x55, 0xc6, 0xbb, 0x0c, 0xda, 0xd0, 0xf1, 0x8f,
0xd6, 0x98, 0x75, 0x94, 0x81, 0x61, 0xd2, 0xc1, 0x77, 0x3a, 0x44, 0xf0, 0xd0, 0x86, 0xf4, 0x1f,
0xe9, 0x2b, 0x44, 0x48, 0x19, 0x8e, 0xb1, 0xc1, 0xf3, 0x5b, 0x54, 0x51, 0xd1, 0xb1, 0x31, 0xa5,
0xb8, 0xad, 0x0c, 0x78, 0x5c, 0xa4, 0x18, 0x3a, 0xda, 0x12, 0x6c, 0xaf, 0x50, 0x26, 0xbc, 0xb4,
0xa6, 0x24, 0x26, 0xae, 0x1c, 0xd3, 0xfa, 0xb5, 0xe7, 0xa3, 0xc0, 0x3a, 0xb3, 0x65, 0x38, 0x8d,
0xb3, 0x0a, 0x8e, 0x46, 0xaa, 0xf4, 0xc8, 0x03, 0x83, 0xfe, 0x99, 0x2e, 0x84, 0xc9, 0x44, 0x64,
0x69, 0x09, 0xb2, 0x3e, 0xf7, 0x91, 0xd9, 0xdb, 0xf3, 0x11, 0x60, 0xc8, 0xd5, 0x14, 0x4e, 0x69,
0xcd, 0x5b, 0xc9, 0x7c, 0x31, 0x5f, 0xfd, 0xa5, 0x02, 0x85, 0x0a, 0x54, 0x77, 0x81, 0xd7, 0x91,
0xc2, 0x7d, 0x35, 0xb1, 0xb4, 0x3d, 0x9c, 0x2a, 0x88, 0x6f, 0x78, 0x38, 0xbd, 0xe5, 0xa6, 0xf5,
0x83, 0x07, 0xe6, 0x8b, 0xfa, 0xea, 0xe2, 0x12, 0xe8, 0x0d, 0x1a, 0xfd, 0xf1, 0xe7, 0xc7, 0xe5,
0xda, 0x9c, 0x79, 0xf5, 0x1b, 0xc5, 0x7a, 0xce, 0xd2, 0x93, 0xdc, 0xff, 0x63, 0xb5, 0x15, 0x03,
0x56, 0x9f, 0x0b, 0xe3, 0xb5, 0x65, 0xc6, 0x81, 0x0b, 0x84, 0xe4, 0xf2, 0x91, 0x30, 0x8b, 0x0b,
0x4c, 0x92, 0xd4, 0x1d, 0x4d, 0xfb, 0x73, 0xe7, 0xb2, 0xda, 0x74, 0x59, 0x3d, 0xef, 0x32, 0xdf,
0x39, 0xc5, 0xcc, 0x0b, 0xd4, 0x26, 0xeb, 0xaf, 0x90, 0x43, 0x25, 0xab, 0x99, 0x6a, 0xa9, 0xbf,
0x69, 0x44, 0xf9, 0x81, 0x44, 0x40, 0x8b, 0x2c, 0x4e, 0xe0, 0x46, 0x18, 0xa2, 0xdf, 0x7c, 0x3d,
0x8d, 0xda, 0xcf, 0xa5, 0x11, 0x9f, 0xaf, 0xe5, 0x2c, 0x46, 0xf3, 0xd1, 0xc5, 0x6c, 0x83, 0x4b,
0x3b, 0xe6, 0xfb, 0x77, 0xeb, 0xd2, 0x0e, 0xd2, 0xd6, 0xba, 0x58, 0xf3, 0xf4, 0x68, 0x45, 0x31,
0x21, 0x8b, 0xca, 0x31, 0xcc, 0x3c, 0x14, 0x58, 0x43, 0xc9, 0x10, 0x39, 0x88, 0xd8, 0x91, 0x1e,
0x7c, 0x72, 0xb5, 0xd5, 0x3d, 0x6f, 0x9e, 0x1a, 0x0b, 0xb3, 0x0b, 0x2e, 0x0f, 0x3a, 0x07, 0x04,
0x9d, 0xb5, 0x11, 0xad, 0xb1, 0x2a, 0x30, 0xdb, 0x07, 0x5b, 0xfa, 0x9c, 0xa9, 0x38, 0xfd, 0xdb,
0x90, 0x92, 0x12, 0x0b, 0x85, 0x73, 0x5f, 0x3a, 0xd2, 0xdb, 0xf2, 0x8c, 0x2e, 0xc9, 0xed, 0x80,
0x95, 0x09, 0xa7, 0xbc, 0xdc, 0xfe, 0x4e, 0x8e, 0x23, 0xf6, 0xe4, 0x79, 0xf3, 0x5b, 0x3c, 0x8d,
0x17, 0x0a, 0x9e, 0x08, 0xc6, 0xfa, 0x41, 0xa2, 0x0a, 0xcc, 0xee, 0x34, 0xbc, 0x55, 0xe9, 0xc3,
0x46, 0x14, 0x24, 0xc9, 0xc7, 0x69, 0xda, 0x9f, 0x22, 0xc6, 0x9f, 0x84, 0x46, 0xa8, 0xa1, 0xf4,
0x38, 0xb9, 0xc9, 0x03, 0x0f, 0x0b, 0xc7, 0xe3, 0x47, 0x30, 0x9f, 0x3d, 0x7f, 0xfe, 0xbc, 0x1c,
0x94, 0xa5, 0x2a, 0xd1, 0x3d, 0x94, 0x23, 0xc6, 0xa8, 0x0c, 0xc2, 0x4c, 0x8d, 0x3d, 0xde, 0xa7,
0xef, 0xac, 0x3e, 0x2f, 0x96, 0x3e, 0x36, 0x12, 0x19, 0xd8, 0x63, 0x60, 0x33, 0xc3, 0x92, 0xc5,
0x3f, 0xd5, 0xdf, 0xd5, 0x88, 0xfa, 0xe5, 0x48, 0x8c, 0xab, 0x32, 0xb6, 0x00, 0xb9, 0x63, 0xb0,
0x51, 0x2c, 0xa8, 0xe6, 0xff, 0x4b, 0x5e, 0xc8, 0x44, 0xe5, 0x05, 0xe2, 0x04, 0xac, 0x88, 0xc7,
0xc0, 0xd2, 0xd8, 0xc4, 0x3b, 0x58, 0xb9, 0xd7, 0x30, 0x1d, 0x22, 0x0f, 0x38, 0x19, 0x38, 0xe4,
0x51, 0x54, 0x97, 0x7c, 0x2c, 0xda, 0x56, 0x5f, 0x58, 0x94, 0xca, 0xa8, 0x44, 0x65, 0xbb, 0xbb,
0x9e, 0x6d, 0x72, 0xad, 0xc0, 0xb3, 0x05, 0x3d, 0x22, 0x89, 0x6c, 0x68, 0x54, 0x89, 0x5a, 0xa9,
0x89, 0x5d, 0x18, 0xc8, 0xe9, 0xe0, 0xc9, 0x45, 0xc1, 0x7d, 0x2c, 0x8a, 0xb5, 0x18, 0xee, 0xcf,
0x0b, 0x74, 0xf8, 0x57, 0xd4, 0xcf, 0x7e, 0x53, 0x29, 0x84, 0x6c, 0x90, 0x41, 0xac, 0x81, 0x21,
0x10, 0x48, 0xf0, 0x9b, 0x4f, 0xfd, 0x33, 0x76, 0x31, 0x40, 0x97, 0x82, 0x0d, 0x8d, 0x7a, 0x53,
0x63, 0x60, 0xb5, 0xf9, 0x3e, 0x49, 0x59, 0x06, 0xfc, 0xa0, 0xc9, 0x2c, 0x9b, 0x9b, 0xc6, 0xd6,
0xf0, 0xa1, 0x88, 0xda, 0x3c, 0xd8, 0x69, 0xfb, 0xf3, 0x46, 0xb7, 0x59, 0xf7, 0xf0, 0xae, 0x36,
0x0f, 0xd8, 0xd2, 0xff, 0x2a, 0x72, 0xea, 0xfb, 0xac, 0x2a, 0x33, 0xa4, 0x09, 0x7d, 0x0a, 0x13,
0x8d, 0x99, 0x78, 0x84, 0x82, 0x56, 0xa0, 0xdb, 0x74, 0xd3, 0x0b, 0x45, 0x1d, 0x83, 0x41, 0x96,
0x31, 0x8d, 0xb0, 0x06, 0xf6, 0xba, 0x58, 0xae, 0xf2, 0x06, 0x23, 0xba, 0xd3, 0xd3, 0xef, 0x9a,
0x33, 0x47, 0xf8, 0xe1, 0x88, 0x33, 0x9c, 0x55, 0x26, 0x0a, 0x57, 0x0a, 0xa5, 0x69, 0xa8, 0x48,
0xc5, 0x94, 0x25, 0x19, 0x76, 0x23, 0x4c, 0x13, 0x85, 0x70, 0xcc, 0x36, 0xbf, 0x4d, 0x20, 0x2b,
0x4e, 0x78, 0xaf, 0xd1, 0x45, 0xb6, 0x19, 0x8c, 0x86, 0x4b, 0x28, 0xf7, 0xc2, 0xd1, 0x6a, 0x92,
0x89, 0xe4, 0x2e, 0xe2, 0xe7, 0x64, 0xf6, 0x43, 0xb7, 0xe9, 0x16, 0xd0, 0x35, 0x54, 0xd1, 0x7b,
0x7e, 0x4f, 0x63, 0xb9, 0xe9, 0x84, 0x36, 0x9d, 0xc4, 0xc9, 0xdd, 0x6a, 0xdf, 0xc6, 0x0e, 0x5d,
0xdd, 0xe6, 0x02, 0x7d, 0x1c, 0xc6, 0x53, 0x60, 0xbb, 0x0c, 0x4b, 0x85, 0xc4, 0x8a, 0xb6, 0x12,
0x9e, 0x94, 0xe8, 0x97, 0xb3, 0x34, 0x39, 0x70, 0x73, 0x11, 0x82, 0x5b, 0x15, 0x08, 0xcc, 0x01,
0x7e, 0xea, 0xf4, 0xea, 0x1d, 0xcc, 0x28, 0x06, 0xf7, 0xc8, 0x6a, 0xa2, 0x64, 0x5d, 0xb2, 0x50,
0xa6, 0xb3, 0x34, 0xd7, 0xd8, 0xf4, 0x90, 0x70, 0xb3, 0x9d, 0x7f, 0x75, 0xbe, 0x4b, 0x72, 0x95,
0x0a, 0xc0, 0x9a, 0xab, 0x68, 0xfd, 0xd2, 0x29, 0xb3, 0xe8, 0x32, 0xcf, 0x16, 0x07, 0x06, 0x48,
0xa8, 0x07, 0x32, 0x29, 0x95, 0x21, 0xf6, 0x93, 0x07, 0xfe, 0x21, 0x89, 0x77, 0x6d, 0x5d, 0x62,
0x6b, 0x35, 0x89, 0xd5, 0x15, 0x69, 0x31, 0xec, 0xd1, 0xe3, 0xb2, 0x00, 0x45, 0xbc, 0x73, 0xc0,
0xad, 0x9d, 0x85, 0x99, 0x02, 0x43, 0x82, 0x0f, 0xe9, 0x53, 0x6d, 0x8b, 0x95, 0x95, 0xa6, 0xc1,
0x86, 0xa6, 0x77, 0x1d, 0xa7, 0x69, 0x68, 0x30, 0x6f, 0x12, 0x64, 0x34, 0xc3, 0x76, 0x46, 0xb0,
0xc6, 0x86, 0xb5, 0x42, 0xfb, 0x87, 0x21, 0x55, 0xd8, 0xd9, 0xf9, 0xe9, 0x60, 0xc3, 0xd9, 0x5a,
0xdd, 0x45, 0x8b, 0xd7, 0x96, 0x64, 0x95, 0xdf, 0x42, 0xc9, 0x17, 0xfc, 0x40, 0x6a, 0xe5, 0x42,
0x46, 0xbc, 0x65, 0xcd, 0x45, 0xfc, 0xe0, 0xed, 0x5b, 0xce, 0x4a, 0xf8, 0x77, 0x25, 0x70, 0x42,
0xe9, 0xb1, 0x90, 0x6d, 0xe9, 0x69, 0xbf, 0x92, 0x9e, 0x83, 0x57, 0xd2, 0xd3, 0xf9, 0x29, 0x3d,
0x6b, 0x50, 0x8e, 0x71, 0xe8, 0x9d, 0xc5, 0x0f, 0x87, 0x8d, 0x35, 0xd0, 0x9c, 0xee, 0x8f, 0x3f,
0x8d, 0x59, 0x63, 0x53, 0xcf, 0x2b, 0x61, 0xf6, 0xf1, 0x95, 0x30, 0xfb, 0xf8, 0xf3, 0x98, 0x35,
0x6a, 0xd0, 0x30, 0xb3, 0x31, 0x0f, 0x51, 0x4a, 0xdf, 0x1d, 0x3e, 0xc1, 0x6d, 0xf8, 0x3f, 0xe0,
0xd6, 0xf8, 0xa1, 0xa3, 0xb5, 0x9e, 0xf6, 0x2b, 0xe9, 0x39, 0x78, 0x25, 0x3d, 0x9d, 0x9f, 0xd3,
0x43, 0x00, 0xe5, 0x67, 0x97, 0x43, 0x86, 0x0d, 0x1a, 0x6f, 0x47, 0x7a, 0x91, 0xba, 0xae, 0xd0,
0x50, 0xd6, 0x4a, 0xc5, 0x48, 0xc0, 0x25, 0x6e, 0xdd, 0x74, 0x6a, 0xdb, 0x8d, 0x8d, 0x72, 0x53,
0xd7, 0x86, 0xdf, 0x9e, 0x54, 0x19, 0x66, 0x5b, 0x6a, 0x46, 0xfb, 0x4f, 0x33, 0x81, 0xbd, 0x0f,
0x4b, 0xc4, 0x21, 0xeb, 0xea, 0x22, 0x96, 0x4b, 0x2f, 0x45, 0x81, 0x7d, 0xe0, 0x72, 0x55, 0xd4,
0x20, 0xc5, 0x4e, 0x84, 0x02, 0xd6, 0xc1, 0xba, 0xdc, 0xda, 0x56, 0x0f, 0xec, 0x38, 0x49, 0xc8,
0xd1, 0x81, 0x12, 0xd2, 0xd8, 0x4a, 0xdb, 0x38, 0x1e, 0x30, 0x2a, 0x8f, 0xcf, 0xfa, 0x7e, 0x3c,
0x78, 0xb1, 0x3e, 0x3a, 0x87, 0x8f, 0x9f, 0x96, 0x45, 0x9b, 0x6e, 0xe7, 0x22, 0x45, 0x5b, 0x03,
0x2b, 0x75, 0xc8, 0x36, 0xb6, 0x27, 0x13, 0x48, 0xee, 0x6e, 0xd5, 0xfd, 0x52, 0xc5, 0xb9, 0x2b,
0x80, 0xe4, 0xc8, 0xa2, 0x58, 0x3e, 0x75, 0x86, 0xae, 0x92, 0xfe, 0x8f, 0xaa, 0x6b, 0xad, 0x6c,
0xe0, 0x22, 0xb5, 0x56, 0x5d, 0x51, 0xa9, 0xc1, 0x81, 0x01, 0xa3, 0xe8, 0x85, 0x8f, 0xef, 0x83,
0x77, 0x9d, 0xb9, 0xff, 0x1d, 0x7b, 0x06, 0xb3, 0xd7, 0xf3, 0x88, 0xf7, 0xad, 0x09, 0xb4, 0x80,
0x81, 0x0e, 0xd9, 0x7b, 0xfb, 0x63, 0x43, 0x8c, 0x10, 0x96, 0x7a, 0xe1, 0xd6, 0x1a, 0x62, 0xcc,
0xb6, 0x32, 0xba, 0xd6, 0x48, 0xc8, 0x0e, 0x37, 0x49, 0x74, 0x7c, 0xfa, 0x02, 0x89, 0xee, 0x17,
0x2c, 0x6a, 0x2f, 0x58, 0xd4, 0xee, 0x6c, 0x91, 0x08, 0x8f, 0x4e, 0x07, 0xd4, 0x14, 0x58, 0x7b,
0x39, 0x58, 0xe8, 0xc4, 0x06, 0xdf, 0x75, 0xd7, 0x00, 0xe6, 0xa6, 0x5d, 0xa4, 0x22, 0x85, 0x7a,
0x11, 0x69, 0x5a, 0x88, 0x47, 0x34, 0x0f, 0xdd, 0x2a, 0x85, 0x01, 0x75, 0xb2, 0xdb, 0x7b, 0xda,
0xbc, 0x77, 0x26, 0xf4, 0x1a, 0x39, 0xb6, 0xc4, 0x1a, 0xb5, 0x1c, 0x46, 0xef, 0x38, 0xc3, 0x92,
0xa9, 0x5f, 0x52, 0x84, 0xbd, 0xea, 0x12, 0xa6, 0x68, 0xcd, 0xa3, 0x16, 0x5a, 0x02, 0x8e, 0x88,
0x39, 0x8e, 0xb4, 0x90, 0xfa, 0xcb, 0x1d, 0x34, 0x2d, 0xd9, 0x23, 0x2c, 0x0e, 0xf6, 0x3c, 0x5d,
0x89, 0xad, 0x08, 0xb3, 0x98, 0xc2, 0x16, 0x55, 0xfb, 0xf7, 0x05, 0x94, 0x82, 0x7e, 0xa9, 0x40,
0xd2, 0x5b, 0x82, 0x9e, 0xb9, 0xab, 0x89, 0xc3, 0x5e, 0x67, 0x00, 0xc5, 0x7f, 0x61, 0xd4, 0xcd,
0xd0, 0x85, 0xae, 0x2b, 0x7a, 0x8d, 0x53, 0xb4, 0x4b, 0x93, 0x12, 0x9b, 0xe1, 0x8d, 0x60, 0x89,
0xda, 0x54, 0x60, 0xcc, 0x85, 0xd6, 0x15, 0xe8, 0xd0, 0x06, 0xf9, 0xcc, 0x0d, 0x05, 0x20, 0xad,
0x25, 0x31, 0x72, 0xc6, 0x84, 0x66, 0xd4, 0xdd, 0x69, 0x38, 0x49, 0x54, 0x89, 0xc7, 0x35, 0xd9,
0x43, 0xc0, 0x84, 0xa4, 0x1f, 0x54, 0x34, 0x68, 0x56, 0xa8, 0x19, 0x62, 0x41, 0x03, 0x78, 0x95,
0xdb, 0xd3, 0x87, 0xdd, 0xa6, 0xb0, 0x43, 0x9a, 0x1b, 0xf1, 0x70, 0x9e, 0x4b, 0xb9, 0x3b, 0x15,
0x5d, 0xca, 0xa8, 0xb0, 0x5e, 0xa3, 0xc7, 0x6e, 0xc2, 0xd9, 0x08, 0x74, 0xff, 0xfa, 0xfc, 0xb9,
0x48, 0x5f, 0x2a, 0x09, 0x8d, 0x97, 0x82, 0xf1, 0x17, 0x8c, 0xd6, 0xc9, 0xe9, 0x8e, 0x9b, 0x84,
0x3f, 0xbf, 0xe9, 0xe0, 0x20, 0x46, 0x23, 0x3b, 0x96, 0x71, 0x3c, 0xc3, 0x4b, 0x9b, 0x28, 0x41,
0xfb, 0xc3, 0x41, 0xe7, 0x60, 0x7f, 0x70, 0xd5, 0x7f, 0x49, 0xe8, 0x1d, 0xef, 0x59, 0x99, 0x33,
0xa8, 0xee, 0x5f, 0x92, 0xf9, 0x85, 0xf7, 0xfe, 0x7e, 0x71, 0xbd, 0xff, 0xb9, 0xff, 0xa2, 0x7f,
0xef, 0x79, 0xef, 0x1f, 0x95, 0x90, 0xe8, 0xdd, 0xfe, 0x99, 0x18, 0xef, 0x5f, 0x25, 0x26, 0x46,
0x17, 0xaf, 0xf7, 0xf1, 0xac, 0xcf, 0x1a, 0x5f, 0xb0, 0xf0, 0xcd, 0x6a, 0x9f, 0xf5, 0xe2, 0x45,
0x56, 0x23, 0x40, 0x43, 0x28, 0xc7, 0xbf, 0xbc, 0x21, 0x95, 0xcf, 0xc8, 0x2d, 0x14, 0xbe, 0xe5,
0xbd, 0xeb, 0x99, 0xc8, 0xc4, 0x78, 0x62, 0x3e, 0x61, 0xad, 0xf8, 0xb1, 0x56, 0xa4, 0xf8, 0xcd,
0xf3, 0x02, 0x8d, 0x55, 0x36, 0xdd, 0x5c, 0x23, 0x80, 0x68, 0xb4, 0xd5, 0x5e, 0x49, 0xad, 0xd3,
0xde, 0xfe, 0xad, 0xe7, 0xdf, 0xf2, 0xff, 0x3e, 0x6d, 0x37, 0xe9, 0x2a, 0x41, 0x89, 0x47, 0xf7,
0x0d, 0xba, 0x7c, 0xd0, 0x0f, 0xaa, 0xff, 0x01, 0x6c, 0x02, 0x6b, 0xc8, 0x60, 0x15, 0x00, 0x00
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xb5, 0x58, 0xff, 0x53, 0xdb, 0x3a,
0x12, 0xff, 0x3d, 0x7f, 0x85, 0xd0, 0xdd, 0x74, 0xec, 0xc1, 0x38, 0x84, 0xb4, 0x7d, 0x3d, 0x88,
0xf3, 0x0e, 0x42, 0x5e, 0xe1, 0x1e, 0x85, 0x5c, 0xc3, 0x94, 0xb9, 0xe9, 0x75, 0xde, 0x33, 0xf6,
0x26, 0x51, 0xb1, 0x25, 0x9f, 0x25, 0x27, 0x30, 0x94, 0xff, 0xfd, 0x76, 0x25, 0xe7, 0x2b, 0xd0,
0xde, 0x74, 0xb8, 0xe9, 0x0c, 0xb5, 0xad, 0xd5, 0xee, 0x47, 0x9f, 0xfd, 0x68, 0x57, 0x4a, 0x67,
0xeb, 0xf8, 0xa2, 0x77, 0xf9, 0xaf, 0x41, 0x9f, 0x4d, 0x4c, 0x9e, 0x75, 0x3b, 0xf4, 0x97, 0x65,
0xb1, 0x1c, 0x47, 0x1c, 0x24, 0xc7, 0x77, 0x88, 0xd3, 0x6e, 0x27, 0x07, 0x13, 0xb3, 0x64, 0x12,
0x97, 0x1a, 0x4c, 0xc4, 0x2b, 0x33, 0xda, 0x79, 0xc7, 0xeb, 0xaf, 0x0d, 0x19, 0xe7, 0x10, 0xf1,
0xa9, 0x80, 0x59, 0xa1, 0x4a, 0xc3, 0x59, 0xa2, 0xa4, 0x01, 0x89, 0x66, 0x33, 0x91, 0x9a, 0x49,
0xf4, 0x66, 0x77, 0x77, 0x61, 0xba, 0x31, 0x94, 0xc2, 0x54, 0x24, 0xb0, 0x63, 0x5f, 0x02, 0x21,
0x85, 0x11, 0x71, 0xb6, 0xa3, 0x93, 0x38, 0x83, 0xa8, 0x15, 0xe4, 0xf1, 0xad, 0xc8, 0xab, 0x7c,
0xf1, 0x5e, 0x69, 0x28, 0xed, 0x4b, 0x7c, 0x8d, 0xef, 0x52, 0xf1, 0x47, 0x91, 0xbb, 0x1d, 0x23,
0x4c, 0x06, 0xdd, 0x2b, 0xf1, 0x9b, 0x60, 0x43, 0x30, 0x46, 0xc8, 0xb1, 0xee, 0x34, 0xdd, 0xc7,
0x8e, 0x4e, 0x4a, 0x51, 0x98, 0x6e, 0x63, 0x1a, 0x97, 0x2c, 0x53, 0x89, 0x28, 0x82, 0x34, 0x4a,
0x55, 0x52, 0xe5, 0x08, 0x28, 0xc0, 0x0f, 0xd1, 0x56, 0x2b, 0x40, 0xf7, 0xf2, 0x4c, 0xa9, 0x42,
0x47, 0xbb, 0x41, 0x51, 0xc2, 0x10, 0x5f, 0x87, 0xc3, 0xd3, 0xe3, 0x88, 0xf3, 0x83, 0x51, 0x25,
0x13, 0x23, 0x94, 0x64, 0xe3, 0xd3, 0xd4, 0x33, 0xfe, 0x7d, 0x09, 0xa6, 0x2a, 0x25, 0x4b, 0xc3,
0x31, 0x98, 0x7e, 0x06, 0xe4, 0xe5, 0xe8, 0xce, 0x0e, 0x3d, 0x2c, 0x4c, 0x93, 0xfe, 0x9a, 0x65,
0x52, 0x42, 0x6c, 0xa0, 0x36, 0x5e, 0x33, 0x3c, 0xf1, 0xfc, 0xfb, 0x99, 0x90, 0xa9, 0x9a, 0x85,
0xaa, 0x00, 0xe9, 0xf1, 0x89, 0x31, 0x85, 0xde, 0x6f, 0x36, 0xf3, 0x3c, 0xbc, 0x91, 0x2a, 0x9c,
0x65, 0x40, 0x81, 0x9a, 0x23, 0x74, 0x50, 0x95, 0xa0, 0x9b, 0xba, 0x5e, 0x5d, 0xf3, 0x2f, 0x33,
0x31, 0x12, 0x3b, 0xf3, 0x57, 0xbe, 0xe2, 0xf3, 0x68, 0xd3, 0xe7, 0x62, 0x12, 0x0f, 0xf8, 0x1f,
0x1a, 0xb2, 0xd1, 0xaa, 0xf5, 0x39, 0x5a, 0x63, 0x76, 0xb4, 0x61, 0x26, 0xf2, 0x90, 0x8d, 0x5f,
0x2d, 0x04, 0x44, 0xc0, 0xb7, 0x2d, 0x59, 0xfb, 0x9c, 0xfb, 0xdb, 0xbc, 0xf9, 0x55, 0x2b, 0xd9,
0x94, 0x60, 0x78, 0x00, 0x11, 0x11, 0xc1, 0x89, 0x31, 0xee, 0x1f, 0x40, 0x98, 0x0a, 0x4d, 0x89,
0x49, 0xa3, 0xad, 0xdd, 0x00, 0x42, 0x03, 0xb7, 0xa6, 0x37, 0x4f, 0x36, 0xd1, 0x28, 0x31, 0x70,
0x18, 0x86, 0x3c, 0x18, 0x81, 0x49, 0x26, 0xb8, 0xf8, 0xd0, 0x4c, 0x10, 0x94, 0x89, 0xba, 0x26,
0x24, 0xa7, 0x9e, 0xbf, 0xfc, 0x72, 0x71, 0xfd, 0x15, 0x12, 0x13, 0xc6, 0x5a, 0x8b, 0xb1, 0xf4,
0xee, 0x1f, 0x82, 0x7b, 0x8c, 0x38, 0x53, 0xe5, 0x8d, 0xde, 0xff, 0xfc, 0xe5, 0x21, 0xc0, 0xb9,
0xf3, 0xf7, 0x50, 0x63, 0xde, 0x3d, 0xcf, 0x04, 0xe0, 0x47, 0x5d, 0x08, 0x4b, 0x9c, 0xb1, 0x63,
0xec, 0x7f, 0x7e, 0x58, 0x42, 0x5a, 0x25, 0x30, 0x1f, 0xf4, 0x0c, 0xda, 0xe6, 0xe0, 0x02, 0xe2,
0x78, 0x1a, 0x45, 0x11, 0xd8, 0x07, 0xff, 0xdb, 0x37, 0x13, 0x16, 0x95, 0x9e, 0x78, 0xe0, 0xa3,
0xef, 0xe0, 0xf3, 0x97, 0x15, 0x28, 0xf7, 0x62, 0xe4, 0xed, 0xa2, 0xa9, 0x09, 0x33, 0x90, 0x63,
0x33, 0x79, 0xf5, 0x6a, 0x21, 0x91, 0x4e, 0x6b, 0xd7, 0xaf, 0x53, 0xbb, 0xf8, 0xb6, 0xbd, 0x1d,
0x4c, 0x95, 0x48, 0x19, 0x32, 0x7d, 0x29, 0x72, 0x50, 0x95, 0xf1, 0xce, 0x83, 0x16, 0xb4, 0xfd,
0x83, 0x15, 0x65, 0x1d, 0x64, 0x60, 0x98, 0x74, 0xf4, 0xf5, 0x86, 0x48, 0x1e, 0xc6, 0x90, 0xfe,
0x3d, 0x7d, 0x85, 0x08, 0x25, 0xc3, 0x31, 0x37, 0xb8, 0x7e, 0xcb, 0x2a, 0x3a, 0x3a, 0x34, 0xa6,
0x14, 0xd7, 0x95, 0x01, 0x8f, 0x8b, 0x14, 0x53, 0x47, 0x53, 0x82, 0xcd, 0x11, 0xda, 0x09, 0xcf,
0x8d, 0x29, 0x89, 0x1b, 0x57, 0x8e, 0x69, 0xfc, 0xd2, 0xf3, 0xd1, 0x60, 0x55, 0xd9, 0x32, 0x9c,
0xc6, 0x59, 0x05, 0x07, 0x23, 0x55, 0x7a, 0x84, 0xc0, 0x20, 0x3e, 0xd3, 0x81, 0x30, 0x99, 0x88,
0x2c, 0x2d, 0x41, 0xd6, 0xeb, 0x3e, 0x30, 0xdb, 0xdb, 0x3e, 0x12, 0x0c, 0xb9, 0x9a, 0x42, 0x8f,
0xc6, 0xbc, 0xa5, 0xcd, 0x67, 0xf3, 0xc5, 0x5f, 0x38, 0x50, 0xe8, 0x40, 0x75, 0xe6, 0x7c, 0x1d,
0x28, 0x9c, 0x57, 0x0b, 0x4b, 0xdb, 0xc5, 0xa9, 0x82, 0xf4, 0x86, 0x8b, 0xd3, 0x1b, 0x30, 0x2d,
0x0e, 0x1e, 0x98, 0xcf, 0xea, 0x8b, 0xcb, 0x4b, 0xa0, 0xd7, 0x64, 0xf4, 0xe7, 0x5f, 0xef, 0x17,
0x63, 0x0f, 0xcc, 0xab, 0xdf, 0x28, 0xd7, 0x0f, 0x2c, 0x3d, 0xca, 0xfd, 0x3f, 0x97, 0x53, 0x31,
0x61, 0xf5, 0xba, 0x30, 0x5f, 0x1b, 0x61, 0x1c, 0xb9, 0x40, 0x4c, 0x2e, 0x1e, 0x89, 0xb3, 0xb8,
0xc0, 0x4d, 0x92, 0xba, 0xa5, 0x69, 0xff, 0xc1, 0x41, 0x56, 0xeb, 0x90, 0xd5, 0xd3, 0x90, 0xf9,
0x56, 0x0f, 0x77, 0x5e, 0xa0, 0xd6, 0x55, 0x7f, 0x81, 0x1a, 0x2a, 0x59, 0xad, 0x54, 0x2b, 0xfd,
0xf5, 0x20, 0xca, 0x0f, 0x24, 0x12, 0x5a, 0x64, 0x71, 0x02, 0x57, 0xc2, 0x90, 0xfc, 0x1e, 0x56,
0xb7, 0x51, 0xeb, 0xa9, 0x6d, 0xc4, 0x1f, 0x56, 0xf6, 0x2c, 0x66, 0xf3, 0xde, 0xe5, 0x6c, 0x4d,
0x4b, 0x5b, 0xe6, 0xdb, 0x37, 0x0b, 0x69, 0x0b, 0x65, 0x6b, 0x21, 0xd6, 0x3a, 0x3d, 0x58, 0x4a,
0x4c, 0xc8, 0xa2, 0x72, 0x0a, 0x33, 0x77, 0x05, 0xd6, 0x50, 0x0a, 0x44, 0x00, 0x91, 0x3b, 0xf2,
0x83, 0x4f, 0xae, 0xb6, 0xba, 0xe7, 0xf5, 0x55, 0x63, 0x61, 0x76, 0xc9, 0xe5, 0x41, 0x7b, 0x8f,
0xa8, 0xb3, 0x31, 0xa2, 0x15, 0x55, 0x05, 0x66, 0x73, 0x61, 0x0b, 0xcc, 0x99, 0x8a, 0xd3, 0x7f,
0x0c, 0x69, 0x53, 0x62, 0xa1, 0x70, 0xf0, 0xa5, 0x13, 0xbd, 0x2d, 0xcf, 0x08, 0x49, 0x6e, 0x26,
0xac, 0x4c, 0x38, 0xed, 0xcb, 0xcd, 0xef, 0x04, 0x1c, 0xb9, 0x27, 0xe4, 0xcd, 0xaf, 0xf1, 0x34,
0x9e, 0x3b, 0x78, 0x64, 0x18, 0xeb, 0x3b, 0x89, 0x2e, 0x70, 0x77, 0xa7, 0xe1, 0xb5, 0x4a, 0xef,
0xd6, 0xb2, 0x20, 0xc9, 0x3e, 0x4e, 0xd3, 0xfe, 0x14, 0x39, 0x3e, 0x13, 0x1a, 0xa9, 0x86, 0xd2,
0xe3, 0x04, 0x93, 0x07, 0x1e, 0x16, 0x8e, 0xfb, 0xf7, 0x60, 0x3e, 0x79, 0xfe, 0xc3, 0xd3, 0x76,
0x50, 0x96, 0xaa, 0x44, 0x78, 0x68, 0x47, 0x8a, 0x51, 0x19, 0x84, 0x99, 0x1a, 0x7b, 0xbc, 0x4f,
0xdf, 0x59, 0xbd, 0x5e, 0x2c, 0x7d, 0x6c, 0x24, 0x32, 0xb0, 0xcb, 0xc0, 0x66, 0x86, 0x25, 0x8b,
0x9f, 0xd5, 0xdf, 0xd5, 0x88, 0xfa, 0xe5, 0x48, 0x8c, 0xab, 0x32, 0xb6, 0x04, 0xb9, 0x65, 0xb0,
0x51, 0x2c, 0xa8, 0xe6, 0xff, 0x5b, 0x9e, 0xca, 0x44, 0xe5, 0x05, 0xf2, 0x04, 0xac, 0x88, 0xc7,
0xc0, 0xd2, 0xd8, 0xc4, 0x5b, 0x58, 0xb9, 0x57, 0x38, 0x1d, 0xa2, 0x0e, 0x38, 0x05, 0xd8, 0xe7,
0x51, 0x54, 0x97, 0x7c, 0x2c, 0xda, 0xd6, 0x5f, 0x58, 0x94, 0xca, 0xa8, 0x44, 0x65, 0xaf, 0x5e,
0x79, 0xb6, 0xc9, 0xed, 0x06, 0x9e, 0x2d, 0xe8, 0x11, 0x59, 0x64, 0x43, 0xa3, 0x4a, 0xf4, 0x4a,
0x4d, 0xec, 0xd4, 0x40, 0x4e, 0x0b, 0x4f, 0x4e, 0x0b, 0xee, 0x63, 0x51, 0xac, 0xcd, 0x70, 0x7e,
0x5e, 0x20, 0xe0, 0xdf, 0xd0, 0x3f, 0xfb, 0xa0, 0x52, 0x08, 0xd9, 0x20, 0x83, 0x58, 0x03, 0x43,
0x22, 0x50, 0xe0, 0x57, 0x67, 0xfd, 0x63, 0x76, 0x3a, 0x40, 0x48, 0xc1, 0x9a, 0x47, 0xbd, 0xee,
0x31, 0xb0, 0xde, 0x7c, 0x9f, 0xac, 0xac, 0x02, 0xbe, 0xd3, 0x64, 0x16, 0xcd, 0x4d, 0x63, 0x6b,
0xf8, 0xb5, 0x88, 0x5a, 0x3c, 0xd8, 0x6a, 0xf9, 0x0f, 0x8d, 0x4e, 0xb3, 0xee, 0xe1, 0x1d, 0x6d,
0xee, 0xb0, 0xa5, 0xff, 0x5d, 0xe4, 0xd4, 0xf7, 0x59, 0x55, 0x66, 0x28, 0x13, 0xfa, 0x14, 0x26,
0x1a, 0x77, 0xe2, 0x01, 0x1a, 0x5a, 0x83, 0x4e, 0xd3, 0x9d, 0x5e, 0x28, 0xeb, 0x98, 0x0c, 0x8a,
0x8c, 0xdb, 0x08, 0x6b, 0x60, 0xb7, 0x83, 0xe5, 0x2a, 0x6f, 0x30, 0x92, 0x3b, 0x3d, 0xfd, 0xa1,
0x39, 0x73, 0x82, 0x1f, 0x8e, 0x38, 0xc3, 0xb3, 0xca, 0x44, 0xe1, 0x48, 0xa1, 0x34, 0x1d, 0x2a,
0x52, 0x31, 0x65, 0x49, 0x86, 0xdd, 0x08, 0xb7, 0x89, 0x42, 0x3a, 0x66, 0xeb, 0xdf, 0x26, 0x90,
0x15, 0x47, 0xbc, 0xdb, 0xe8, 0xa0, 0xda, 0x0c, 0x66, 0xc3, 0x6d, 0x28, 0xf7, 0xc2, 0x31, 0x6a,
0x92, 0x89, 0xe4, 0x26, 0xe2, 0x27, 0x14, 0xf6, 0xd7, 0x4e, 0xd3, 0x0d, 0x20, 0x34, 0x74, 0xd1,
0x7d, 0x7a, 0x4e, 0x63, 0x31, 0xe9, 0x88, 0x26, 0x1d, 0xc5, 0xc9, 0xcd, 0x72, 0xde, 0xda, 0x0c,
0x5d, 0x5d, 0xe7, 0x02, 0x31, 0x0e, 0xe3, 0x29, 0xb0, 0x57, 0x0c, 0x4b, 0x85, 0xc4, 0x8a, 0xb6,
0x34, 0x9e, 0x94, 0x88, 0xcb, 0x45, 0x9a, 0xec, 0xb9, 0x73, 0x11, 0x92, 0x5b, 0x15, 0x48, 0xcc,
0x1e, 0x7e, 0x6a, 0x77, 0xeb, 0x19, 0xcc, 0x28, 0x06, 0xb7, 0xa8, 0x6a, 0x92, 0x64, 0x5d, 0xb2,
0xd0, 0xa6, 0xbd, 0x08, 0xd7, 0x58, 0x47, 0x48, 0xbc, 0xd9, 0xce, 0xbf, 0x5c, 0xdf, 0x39, 0x41,
0xa5, 0x02, 0xb0, 0x02, 0x15, 0xa3, 0x9f, 0x3b, 0x67, 0x96, 0x5d, 0xe6, 0xd9, 0xe2, 0xc0, 0x00,
0x05, 0x75, 0x47, 0x21, 0xa5, 0x32, 0xa4, 0x7e, 0x42, 0xe0, 0xef, 0x93, 0x79, 0xc7, 0xd6, 0x25,
0xb6, 0x52, 0x93, 0x58, 0x5d, 0x91, 0xe6, 0x87, 0x3d, 0x7a, 0x5c, 0x14, 0xa0, 0x88, 0xb7, 0xf7,
0xb8, 0x8d, 0x33, 0x0f, 0x53, 0x60, 0x4a, 0xf0, 0x21, 0x7d, 0xec, 0x6d, 0x3e, 0xb2, 0xf4, 0x34,
0x58, 0xf3, 0xf4, 0xb6, 0xed, 0x3c, 0x0d, 0x0d, 0xee, 0x9b, 0x04, 0x15, 0xcd, 0xb0, 0x9d, 0x11,
0xad, 0xb1, 0x61, 0xbb, 0xa1, 0xfd, 0xc7, 0x50, 0x2a, 0xec, 0xf8, 0xa4, 0x37, 0x58, 0x03, 0x5b,
0xbb, 0x3b, 0xdd, 0xe5, 0x75, 0x24, 0x59, 0xe5, 0xd7, 0x50, 0xf2, 0xb9, 0x3e, 0x50, 0x5a, 0xb9,
0x90, 0x11, 0xdf, 0xb5, 0xe1, 0x22, 0xbe, 0xf7, 0xe6, 0x0d, 0x67, 0x25, 0xfc, 0xa7, 0x12, 0x78,
0x42, 0xe9, 0xb2, 0x90, 0x6d, 0xf8, 0x69, 0xbd, 0x90, 0x9f, 0xbd, 0x17, 0xf2, 0xd3, 0xfe, 0x29,
0x3f, 0x2b, 0x54, 0x8e, 0xf1, 0xd0, 0x3b, 0x8b, 0xef, 0xf6, 0x1b, 0x2b, 0xa4, 0x39, 0xdf, 0xef,
0x7f, 0x9a, 0xb3, 0xc6, 0xba, 0x9f, 0x17, 0xe2, 0xec, 0xfd, 0x0b, 0x71, 0xf6, 0xfe, 0xe7, 0x39,
0x6b, 0xd4, 0xa4, 0xe1, 0xce, 0xc6, 0x7d, 0x88, 0x56, 0xfa, 0x66, 0xff, 0x11, 0x6f, 0xc3, 0xff,
0x81, 0xb7, 0xc6, 0x77, 0x81, 0xd6, 0x7e, 0x5a, 0x2f, 0xe4, 0x67, 0xef, 0x85, 0xfc, 0xb4, 0x7f,
0xce, 0x0f, 0x11, 0x94, 0x1f, 0x9f, 0x0f, 0x19, 0x36, 0x68, 0xbc, 0x1d, 0xe9, 0xf9, 0xd6, 0x75,
0x85, 0x86, 0x76, 0xad, 0x54, 0x8c, 0x0c, 0xdc, 0xc6, 0xad, 0x9b, 0x4e, 0x1d, 0xbb, 0xb1, 0x56,
0x6e, 0xea, 0xda, 0xf0, 0xe1, 0x51, 0x95, 0x61, 0xb6, 0xa5, 0x66, 0x34, 0xbf, 0x97, 0x09, 0xec,
0x7d, 0x58, 0x22, 0xf6, 0x59, 0x47, 0x17, 0xb1, 0x5c, 0xa0, 0x14, 0x05, 0xf6, 0x81, 0xf3, 0x65,
0x51, 0x83, 0x14, 0x3b, 0x11, 0x1a, 0x58, 0x80, 0x75, 0xb9, 0xb5, 0xad, 0x1e, 0xd8, 0x61, 0x92,
0x10, 0xd0, 0x81, 0x12, 0xd2, 0xd8, 0x4a, 0xdb, 0x38, 0x1c, 0x30, 0x2a, 0x8f, 0x4f, 0x62, 0x3f,
0x1c, 0x3c, 0x5b, 0x1f, 0x1d, 0xe0, 0xc3, 0xc7, 0x65, 0xd1, 0x6e, 0xb7, 0x13, 0x91, 0x62, 0xac,
0x81, 0xb5, 0xda, 0x67, 0x6b, 0xd3, 0x93, 0x09, 0x24, 0x37, 0xd7, 0xea, 0x76, 0xe1, 0xe2, 0xc4,
0x15, 0x40, 0x02, 0x32, 0x2f, 0x96, 0x8f, 0xc1, 0xd0, 0x55, 0xd2, 0xff, 0x5e, 0x75, 0xad, 0x9d,
0x0d, 0x5c, 0xa6, 0x56, 0xaa, 0x2b, 0x3a, 0x35, 0x78, 0x60, 0xc0, 0x2c, 0x7a, 0xe1, 0xfd, 0xbb,
0xe0, 0x6d, 0xfb, 0xc1, 0xff, 0x86, 0x3d, 0x83, 0xd9, 0xeb, 0x79, 0xc4, 0xfb, 0x36, 0x04, 0x46,
0xc0, 0x44, 0x87, 0xec, 0x9d, 0xfd, 0xb1, 0x21, 0x46, 0x0a, 0x4b, 0x3d, 0x87, 0xb5, 0xc2, 0x18,
0xb3, 0xad, 0x8c, 0xae, 0x35, 0x12, 0xb2, 0xfd, 0x75, 0x11, 0x1d, 0xf6, 0x9e, 0x11, 0xd1, 0xed,
0x5c, 0x45, 0xad, 0xb9, 0x8a, 0x5a, 0xed, 0x0d, 0x11, 0xe1, 0xd2, 0x69, 0x81, 0x9a, 0x12, 0x6b,
0x2f, 0x07, 0x73, 0x9f, 0xd8, 0xe0, 0x3b, 0xee, 0x1a, 0xc0, 0xdc, 0x69, 0x17, 0xa5, 0x48, 0xa9,
0x9e, 0x67, 0x9a, 0x06, 0xe2, 0x11, 0x9d, 0x87, 0xae, 0x95, 0xc2, 0x84, 0x3a, 0xdb, 0xcd, 0x39,
0x2d, 0xde, 0x3d, 0x16, 0x7a, 0x45, 0x1c, 0x1b, 0x66, 0x8d, 0xda, 0x0e, 0xb3, 0x77, 0x98, 0x61,
0xc9, 0xd4, 0xcf, 0x39, 0xc2, 0x5e, 0x75, 0x0e, 0x53, 0x8c, 0xe6, 0x51, 0x0b, 0x2d, 0x01, 0x8f,
0x88, 0x39, 0x1e, 0x69, 0x21, 0xf5, 0x17, 0x33, 0xe8, 0xb4, 0x64, 0x97, 0x30, 0x5f, 0xd8, 0xd3,
0x72, 0x25, 0xb5, 0x22, 0xcd, 0x62, 0x0a, 0x1b, 0x52, 0xed, 0xdf, 0x16, 0x50, 0x0a, 0xfa, 0xa5,
0x02, 0x45, 0x6f, 0x05, 0x7a, 0xec, 0xae, 0x26, 0x8e, 0x7b, 0x9d, 0x01, 0x14, 0x3f, 0x50, 0xd4,
0xd5, 0xd0, 0xa5, 0xae, 0x23, 0xba, 0x8d, 0x1e, 0xc6, 0xa5, 0x93, 0x12, 0x9b, 0xe1, 0x8d, 0x60,
0xc1, 0xda, 0x54, 0x60, 0xce, 0x85, 0xd6, 0x15, 0xe8, 0xd0, 0x26, 0xf9, 0xd8, 0x1d, 0x0a, 0x40,
0xda, 0x48, 0x62, 0xe4, 0x82, 0x09, 0xcd, 0xa8, 0xbb, 0xd3, 0xe1, 0x24, 0x51, 0x25, 0x2e, 0xd7,
0x64, 0x77, 0x01, 0x13, 0x92, 0x7e, 0x50, 0xd1, 0xa0, 0x59, 0xa1, 0x66, 0xc8, 0x05, 0x1d, 0xc0,
0xab, 0xdc, 0xae, 0x3e, 0xec, 0x34, 0x85, 0x3d, 0xa4, 0xb9, 0x23, 0x1e, 0x5e, 0x5b, 0x53, 0x6e,
0x57, 0x75, 0x85, 0xa9, 0xce, 0x48, 0x46, 0x1f, 0xf1, 0x26, 0x6b, 0xc0, 0x9d, 0x71, 0x44, 0xd7,
0x1d, 0xe8, 0xad, 0xc0, 0x81, 0x0e, 0xf8, 0x9a, 0x29, 0x62, 0xb7, 0x3f, 0x1c, 0xec, 0x9c, 0x5f,
0x5c, 0x59, 0x64, 0xbf, 0xe3, 0x7a, 0xd9, 0xfc, 0x76, 0x46, 0xc8, 0x08, 0x67, 0xa5, 0x09, 0x53,
0xcc, 0x4a, 0xeb, 0xed, 0x07, 0x90, 0x88, 0x09, 0x84, 0xd5, 0xe8, 0xbb, 0xc5, 0x39, 0x04, 0x3f,
0xa0, 0xf0, 0x63, 0xdf, 0x51, 0x78, 0x12, 0x97, 0xe9, 0x2c, 0xc6, 0xba, 0xf1, 0xe1, 0xb0, 0xb7,
0x98, 0xd2, 0x78, 0x5c, 0x07, 0x3e, 0xe2, 0xb8, 0x9b, 0x71, 0x16, 0xe3, 0xfd, 0x75, 0x08, 0x20,
0x37, 0xb2, 0x5e, 0x66, 0x22, 0xa5, 0xb4, 0xcb, 0xb5, 0x84, 0xdb, 0x33, 0x62, 0xc3, 0x1e, 0x6b,
0x89, 0x30, 0x3c, 0x00, 0xd7, 0x84, 0xf5, 0xe9, 0x16, 0x4b, 0x9d, 0xe8, 0x12, 0x63, 0x39, 0xba,
0xd6, 0x76, 0x46, 0xff, 0xf2, 0xe4, 0xa9, 0xad, 0x41, 0xfe, 0x1b, 0xcf, 0xa9, 0xf7, 0x6f, 0x28,
0xef, 0xa3, 0xde, 0x96, 0xbb, 0x3a, 0x7c, 0x7a, 0xdd, 0xc6, 0x93, 0x2b, 0xdd, 0x71, 0xb0, 0xef,
0x21, 0x2f, 0xcf, 0x4d, 0xa2, 0x8a, 0x86, 0xf9, 0x68, 0xef, 0xed, 0x0c, 0x2e, 0xfa, 0xcf, 0x19,
0xbd, 0xe5, 0x5d, 0x6b, 0x73, 0x0c, 0xd5, 0xed, 0x73, 0x36, 0xbf, 0xf0, 0xee, 0xef, 0xa7, 0x97,
0x3b, 0x9f, 0xfa, 0xcf, 0xe2, 0x7b, 0xc7, 0xbb, 0xff, 0xac, 0x84, 0x44, 0x74, 0x3b, 0xc7, 0x62,
0xbc, 0x73, 0x91, 0x98, 0x18, 0x21, 0x5e, 0xee, 0xe0, 0x5a, 0x9f, 0x0c, 0x3e, 0xdf, 0xb6, 0xaf,
0x97, 0xf3, 0x2c, 0x8a, 0x67, 0xcb, 0x00, 0x12, 0x34, 0x84, 0x72, 0xfc, 0xcb, 0x6b, 0x72, 0xf9,
0x84, 0xdd, 0xdc, 0xe1, 0x1b, 0xde, 0xbd, 0x9c, 0x89, 0x4c, 0x8c, 0x27, 0xe6, 0x0c, 0x8b, 0xeb,
0xf7, 0xbd, 0x62, 0x4d, 0xb8, 0x7a, 0xda, 0xa0, 0xb1, 0x2c, 0x3f, 0x57, 0x97, 0x48, 0x20, 0x06,
0xdd, 0x6d, 0x2d, 0xad, 0x56, 0xeb, 0xc4, 0x52, 0x0c, 0x74, 0x77, 0xf8, 0x7f, 0x5f, 0x4f, 0x9a,
0x74, 0xf7, 0xa2, 0x4a, 0x45, 0x17, 0x34, 0xba, 0xad, 0xd1, 0x2f, 0xd0, 0xff, 0x05, 0xae, 0xcc,
0x7b, 0xe8, 0x91, 0x16, 0x00, 0x00
};

View File

@@ -70,15 +70,15 @@ void decBrightness()
}
}
// apply preset or fallback to a effect and palette if it doesn't exist
void presetFallback(uint8_t presetID, uint8_t effectID, uint8_t paletteID)
{
USER_PRINTF("presetFallback1 %d %d %d\n", presetID, effectID, paletteID);
applyPreset(presetID, CALL_MODE_BUTTON_PRESET);
//USER_PRINTF("presetFallback1 %d %d %d\n", presetID, effectID, paletteID);
//applyPreset(presetID, CALL_MODE_BUTTON_PRESET);
//these two will be overwritten if preset exists in handlePresets()
USER_PRINTF("presetFallback2 %d %d %d\n", presetID, effectID, paletteID);
effectCurrent = effectID;
effectPalette = paletteID;
applyPresetWithFallback(presetID, CALL_MODE_BUTTON_PRESET, effectID, paletteID);
USER_PRINTF("applyPresetWithFallback %d %d %d\n", presetID, effectID, paletteID);
//effectCurrent = effectID;
//effectPalette = paletteID;
}
byte relativeChange(byte property, int8_t amount, byte lowerBoundary, byte higherBoundary)

View File

@@ -134,6 +134,15 @@ bool applyPreset(byte index, byte callMode)
return true;
}
// apply preset or fallback to a effect and palette if it doesn't exist
void applyPresetWithFallback(uint8_t index, uint8_t callMode, uint8_t effectID, uint8_t paletteID)
{
applyPreset(index, callMode);
//these two will be overwritten if preset exists in handlePresets()
effectCurrent = effectID;
effectPalette = paletteID;
}
void handlePresets()
{
if (presetToSave) {

204
wled00/remote.cpp Normal file
View File

@@ -0,0 +1,204 @@
#include "wled.h"
#define ESP_NOW_STATE_UNINIT 0
#define ESP_NOW_STATE_ON 1
#define ESP_NOW_STATE_ERROR 2
#define NIGHT_MODE_DEACTIVATED -1
#define NIGHT_MODE_BRIGHTNESS 5
#define WIZMOTE_BUTTON_ON 1
#define WIZMOTE_BUTTON_OFF 2
#define WIZMOTE_BUTTON_NIGHT 3
#define WIZMOTE_BUTTON_ONE 16
#define WIZMOTE_BUTTON_TWO 17
#define WIZMOTE_BUTTON_THREE 18
#define WIZMOTE_BUTTON_FOUR 19
#define WIZMOTE_BUTTON_BRIGHT_UP 9
#define WIZMOTE_BUTTON_BRIGHT_DOWN 8
#ifdef WLED_DISABLE_ESPNOW
void handleRemote(){}
#else
#if !defined(ARDUINO_ARCH_ESP32) && !defined(ESP_OK)
#define ESP_OK 0 // add missing constant for stupid esp8266
#endif
// This is kind of an esoteric strucure because it's pulled from the "Wizmote"
// product spec. That remote is used as the baseline for behavior and availability
// since it's broadly commercially available and works out of the box as a drop-in
typedef struct message_structure {
uint8_t program; // 0x91 for ON button, 0x81 for all others
uint8_t seq[4]; // Incremetal sequence number 32 bit unsigned integer LSB first
uint8_t byte5 = 32; // Unknown
uint8_t button; // Identifies which button is being pressed
uint8_t byte8 = 1; // Unknown, but always 0x01
uint8_t byte9 = 100; // Unnkown, but always 0x64
uint8_t byte10; // Unknown, maybe checksum
uint8_t byte11; // Unknown, maybe checksum
uint8_t byte12; // Unknown, maybe checksum
uint8_t byte13; // Unknown, maybe checksum
} message_structure;
static int esp_now_state = ESP_NOW_STATE_UNINIT;
static uint32_t last_seq = -1;
static int brightnessBeforeNightMode = NIGHT_MODE_DEACTIVATED;
static message_structure incoming;
// Pulled from the IR Remote logic but reduced to 10 steps with a constant of 3
static const byte brightnessSteps[] = {
6, 9, 14, 22, 33, 50, 75, 113, 170, 255
};
static const size_t numBrightnessSteps = sizeof(brightnessSteps) / sizeof(uint8_t);
static bool nightModeActive() {
return brightnessBeforeNightMode != NIGHT_MODE_DEACTIVATED;
}
static void activateNightMode() {
brightnessBeforeNightMode = bri;
bri = NIGHT_MODE_BRIGHTNESS;
}
static bool resetNightMode() {
if (!nightModeActive()) {
return false;
}
bri = brightnessBeforeNightMode;
brightnessBeforeNightMode = NIGHT_MODE_DEACTIVATED;
return true;
}
// increment `bri` to the next `brightnessSteps` value
static void brightnessUp() {
if (nightModeActive()) { return; }
// dumb incremental search is efficient enough for so few items
for (uint8_t index = 0; index < numBrightnessSteps; ++index) {
if (brightnessSteps[index] > bri) {
bri = brightnessSteps[index];
break;
}
}
}
// decrement `bri` to the next `brightnessSteps` value
static void brightnessDown() {
if (nightModeActive()) { return; }
// dumb incremental search is efficient enough for so few items
for (int index = numBrightnessSteps - 1; index >= 0; --index) {
if (brightnessSteps[index] < bri) {
bri = brightnessSteps[index];
break;
}
}
}
static void setOn() {
if (resetNightMode()) {
stateUpdated(CALL_MODE_BUTTON);
}
if (!bri) {
toggleOnOff();
}
}
static void setOff() {
if (resetNightMode()) {
stateUpdated(CALL_MODE_BUTTON);
}
if (bri) {
toggleOnOff();
}
}
static void presetWithFallback(uint8_t presetID, uint8_t effectID, uint8_t paletteID) {
applyPresetWithFallback(presetID, CALL_MODE_BUTTON_PRESET, effectID, paletteID);
}
// Callback function that will be executed when data is received
#ifdef ESP8266
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
#else
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
#endif
sprintf (last_signal_src, "%02x%02x%02x%02x%02x%02x",
mac [0], mac [1], mac [2], mac [3], mac [4], mac [5]);
if (strcmp(last_signal_src, linked_remote) != 0) {
USER_PRINT(F("ESP Now Message Received from Unlinked Sender: "));
USER_PRINTLN(last_signal_src);
return;
}
if (len != sizeof(incoming)) {
USER_PRINT(F("Unknown incoming ESP Now message received of length "));
USER_PRINTLN(len);
return;
}
memcpy(&(incoming.program), incomingData, sizeof(incoming));
uint32_t cur_seq = incoming.seq[0] | (incoming.seq[1] << 8) | (incoming.seq[2] << 16) | (incoming.seq[3] << 24);
if (cur_seq == last_seq) {
return;
}
USER_PRINT(F("\nIncoming ESP Now Packet["));
USER_PRINT(cur_seq);
USER_PRINT(F("] from sender["));
USER_PRINT(last_signal_src);
USER_PRINT(F("] button: "));
USER_PRINTLN(incoming.button);
switch (incoming.button) {
case WIZMOTE_BUTTON_ON : setOn(); stateUpdated(CALL_MODE_BUTTON); break;
case WIZMOTE_BUTTON_OFF : setOff(); stateUpdated(CALL_MODE_BUTTON); break;
case WIZMOTE_BUTTON_ONE : presetWithFallback(1, FX_MODE_STATIC, 0); resetNightMode(); break;
case WIZMOTE_BUTTON_TWO : presetWithFallback(2, FX_MODE_BREATH, 0); resetNightMode(); break;
case WIZMOTE_BUTTON_THREE : presetWithFallback(3, FX_MODE_FIRE_FLICKER, 0); resetNightMode(); break;
case WIZMOTE_BUTTON_FOUR : presetWithFallback(4, FX_MODE_RAINBOW, 0); resetNightMode(); break;
case WIZMOTE_BUTTON_NIGHT : activateNightMode(); stateUpdated(CALL_MODE_BUTTON); break;
case WIZMOTE_BUTTON_BRIGHT_UP : brightnessUp(); stateUpdated(CALL_MODE_BUTTON); break;
case WIZMOTE_BUTTON_BRIGHT_DOWN : brightnessDown(); stateUpdated(CALL_MODE_BUTTON); break;
default: break;
}
last_seq = cur_seq;
}
void handleRemote() {
if (enable_espnow_remote) {
if (esp_now_state == ESP_NOW_STATE_UNINIT) {
USER_PRINTLN(F("\nInitializing ESP_NOW listener!\n"));
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
USER_PRINTLN(F("Error initializing ESP-NOW"));
esp_now_state = ESP_NOW_STATE_ERROR;
}
#ifdef ESP8266
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
#endif
esp_now_register_recv_cb(OnDataRecv);
esp_now_state = ESP_NOW_STATE_ON;
}
} else {
if (esp_now_state == ESP_NOW_STATE_ON) {
USER_PRINTLN(F("Disabling ESP-NOW Remote Listener"));
if (esp_now_deinit() != ESP_OK) {
USER_PRINTLN(F("Error de-initializing ESP-NOW"));
}
esp_now_state = ESP_NOW_STATE_UNINIT;
} else if (esp_now_state == ESP_NOW_STATE_ERROR) {
//Clear any error states (allows retrying by cycling)
esp_now_state = ESP_NOW_STATE_UNINIT;
}
}
}
#endif

View File

@@ -48,6 +48,14 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
noWifiSleep = request->hasArg(F("WS"));
#ifndef WLED_DISABLE_ESPNOW
enable_espnow_remote = request->hasArg(F("RE"));
strlcpy(linked_remote,request->arg(F("RMAC")).c_str(), 13);
//Normalize MAC format to lowercase
strlcpy(linked_remote,strlwr(linked_remote), 13);
#endif
#ifdef WLED_USE_ETHERNET
ethernetType = request->arg(F("ETH")).toInt();
WLED::instance().initEthernet();

View File

@@ -105,6 +105,9 @@ void WLED::loop()
handleIR(); // 2nd call to function needed for ESP32 to return valid results -- should be good for ESP8266, too
#endif
handleConnection();
#ifndef WLED_DISABLE_ESPNOW
handleRemote();
#endif
handleSerial();
#if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_PROTECT_SERVICE) // WLEDMM experimental: handleNotifications() calls strip.show(); handleTransitions modifies segments

View File

@@ -45,6 +45,8 @@
#define WLED_ENABLE_WEBSOCKETS
#endif
//#define WLED_DISABLE_ESPNOW // Removes dependence on esp now
#define WLED_ENABLE_FS_EDITOR // enable /edit page for editing FS content. Will also be disabled with OTA lock
// to toggle usb serial debug (un)comment the following line
@@ -77,6 +79,9 @@
{
#include <user_interface.h>
}
#ifndef WLED_DISABLE_ESPNOW
#include <espnow.h>
#endif
#else // ESP32
#include <HardwareSerial.h> // ensure we have the correct "Serial" on new MCUs (depends on ARDUINO_USB_MODE and ARDUINO_USB_CDC_ON_BOOT)
#include <WiFi.h>
@@ -93,6 +98,10 @@
#include <LittleFS.h>
#endif
#include "esp_task_wdt.h"
#ifndef WLED_DISABLE_ESPNOW
#include <esp_now.h>
#endif
#endif
#include <Wire.h>
#include <SPI.h>
@@ -459,6 +468,12 @@ WLED_GLOBAL bool hueApplyColor _INIT(true);
WLED_GLOBAL uint16_t serialBaud _INIT(1152); // serial baud rate, multiply by 100
#ifndef WLED_DISABLE_ESPNOW
WLED_GLOBAL bool enable_espnow_remote _INIT(false);
WLED_GLOBAL char linked_remote[13] _INIT("");
WLED_GLOBAL char last_signal_src[13] _INIT("");
#endif
// Time CONFIG
WLED_GLOBAL bool ntpEnabled _INIT(false); // get internet time. Only required if you use clock overlays or time-activated macros
WLED_GLOBAL bool useAMPM _INIT(false); // 12h/24h clock format

View File

@@ -345,6 +345,14 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
sappend('v',SET_F("AC"),apChannel);
sappend('c',SET_F("WS"),noWifiSleep);
#ifndef WLED_DISABLE_ESPNOW
sappend('c',SET_F("RE"),enable_espnow_remote);
sappends('s',SET_F("RMAC"),linked_remote);
#else
//hide remote settings if not compiled
oappend(SET_F("document.getElementById('remd').style.display='none';"));
#endif
#ifdef WLED_USE_ETHERNET
sappend('v',SET_F("ETH"),ethernetType);
#else
@@ -377,6 +385,19 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
{
sappends('m',SET_F("(\"sip\")[1]"),(char*)F("Not active"));
}
#ifndef WLED_DISABLE_ESPNOW
if (last_signal_src[0] != 0) //Have seen an ESP-NOW Remote
{
sappends('m',SET_F("(\"rlid\")[0]"),last_signal_src);
} else if (!enable_espnow_remote)
{
sappends('m',SET_F("(\"rlid\")[0]"),(char*)F("(Enable remote to listen)"));
} else
{
sappends('m',SET_F("(\"rlid\")[0]"),(char*)F("None"));
}
#endif
}
if (subPage == 2)