From cf80b826ac98e5cced12f08a4faf4bcd93d15c97 Mon Sep 17 00:00:00 2001
From: Staars
Date: Fri, 25 Mar 2022 10:15:58 +0100
Subject: [PATCH 1/2] add watch and block, code changes only
---
lib/libesp32/berry_tasmota/src/be_MI32_lib.c | 6 ++-
tasmota/xdrv_52_3_berry_MI32.ino | 41 ++++++++++++++++++--
tasmota/xsns_62_esp32_mi.ino | 39 ++++++++++++++++++-
3 files changed, 79 insertions(+), 7 deletions(-)
diff --git a/lib/libesp32/berry_tasmota/src/be_MI32_lib.c b/lib/libesp32/berry_tasmota/src/be_MI32_lib.c
index 18c365e95..7a52e5c3d 100644
--- a/lib/libesp32/berry_tasmota/src/be_MI32_lib.c
+++ b/lib/libesp32/berry_tasmota/src/be_MI32_lib.c
@@ -32,6 +32,8 @@ extern int be_BLE_set_MAC(bvm *vm);
extern int be_BLE_set_characteristic(bvm *vm);
extern int be_BLE_run(bvm *vm);
extern int be_BLE_set_service(bvm *vm);
+extern int be_BLE_adv_watch(bvm *vm);
+extern int be_BLE_adv_block(bvm *vm);
#include "be_fixed_be_class_BLE.h"
@@ -43,7 +45,9 @@ class be_class_BLE (scope: global, name: BLE) {
set_chr, func(be_BLE_set_characteristic)
adv_cb, func(be_BLE_reg_adv_cb)
set_MAC, func(be_BLE_set_MAC)
+ adv_watch, func(be_BLE_adv_watch)
+ adv_block, func(be_BLE_adv_block)
}
@const_object_info_end */
-#endif //USE_MI_ESP32
+#endif //USE_MI_ESP32
\ No newline at end of file
diff --git a/tasmota/xdrv_52_3_berry_MI32.ino b/tasmota/xdrv_52_3_berry_MI32.ino
index a2f03fe21..027d4892a 100644
--- a/tasmota/xdrv_52_3_berry_MI32.ino
+++ b/tasmota/xdrv_52_3_berry_MI32.ino
@@ -122,6 +122,8 @@ extern "C" {
extern bool MI32setBerryCtxSvc(const char *Svc);
extern bool MI32setBerryCtxChr(const char *Chr);
extern bool MI32setBerryCtxMAC(uint8_t *MAC, uint8_t type);
+ extern bool MI32addMACtoBlockList(uint8_t *MAC, uint8_t type);
+ extern bool MI32addMACtoWatchList(uint8_t *MAC, uint8_t type);
int be_BLE_reg_conn_cb(bvm *vm);
@@ -191,11 +193,40 @@ extern "C" {
int be_BLE_run(bvm *vm);
int be_BLE_run(bvm *vm){
int32_t argc = be_top(vm); // Get the number of arguments
- if (argc == 2 && be_isint(vm, 2)) {
+ if ((argc == 2) && be_isint(vm, 2)) {
if (MI32runBerryConnection(be_toint(vm, 2))) be_return(vm);
}
be_raise(vm, kTypeError, nullptr);
}
+
+ int be_BLE_adv_block(bvm *vm);
+ int be_BLE_adv_block(bvm *vm){
+ int32_t argc = be_top(vm); // Get the number of arguments
+ if (argc > 1 && be_isbytes(vm, 2)) {
+ size_t len = 6;
+ uint8_t type = 0;
+ if(argc == 3 && be_isint(vm, 3)){
+ type = be_toint(vm,3);
+ }
+ if(MI32addMACtoBlockList((uint8_t*)be_tobytes(vm, 2, &len),type)) be_return(vm);
+ }
+ be_raise(vm, kTypeError, nullptr);
+ }
+
+ int be_BLE_adv_watch(bvm *vm);
+ int be_BLE_adv_watch(bvm *vm){
+ int32_t argc = be_top(vm); // Get the number of arguments
+ if (argc > 1 && be_isbytes(vm, 2)) {
+ size_t len = 6;
+ uint8_t type = 0;
+ if(argc == 3 && be_isint(vm, 3)){
+ type = be_toint(vm,3);
+ }
+ if (MI32addMACtoWatchList((uint8_t*)be_tobytes(vm, 2, &len),type)) be_return(vm);
+ }
+ be_raise(vm, kTypeError, nullptr);
+ }
+
} //extern "C"
@@ -213,16 +244,18 @@ be_BLE_op:
1 read
2 write
3 subscribe
-4 unsubscribe
+4 unsubscribe - maybe later
5 disconnect
11 read once, then disconnect
12 write once, then disconnect
13 subscribe once, then disconnect
-14 unsubscribe once, then disconnect
+14 unsubscribe once, then disconnect - maybe later
BLE.conn_cb(cb,buffer)
BLE.adv_cb(cb,buffer)
+BLE.adv_watch(MAC)
+BLE.adv_block(MAC)
MI32.devices()
MI32.get_name(slot)
@@ -231,4 +264,4 @@ MI32.set_bat(slot,int)
MI32.set_hum(slot,float)
MI32.set_temp(slot,float)
-*/
+*/
\ No newline at end of file
diff --git a/tasmota/xsns_62_esp32_mi.ino b/tasmota/xsns_62_esp32_mi.ino
index d61e27d99..b1485e148 100644
--- a/tasmota/xsns_62_esp32_mi.ino
+++ b/tasmota/xsns_62_esp32_mi.ino
@@ -22,6 +22,8 @@
--------------------------------------------------------------------------------------------
Version yyyymmdd Action Description
--------------------------------------------------------------------------------------------
+ 0.9.5.4 20220325 changed - add Berry adv_watch and adv_block to BLE class
+ -------
0.9.5.3 20220315 changed - reworked Berry part, active scanning and holding active connections possible, new format of advertisement buffer
-------
0.9.5.1 20220209 changed - rename YEERC to YLYK01, add dimmer YLKG08 (incl. YLKG07), change button report scheme
@@ -707,6 +709,33 @@ extern "C" {
MI32.beAdvBuf = buffer;
}
+ bool MI32addMACtoBlockList(uint8_t *MAC, uint8_t type){
+ NimBLEDevice::addIgnored(NimBLEAddress(MAC,type));
+ return NimBLEDevice::isIgnored(NimBLEAddress(MAC,type));
+ }
+
+ bool MI32addMACtoWatchList(uint8_t *MAC, uint8_t type){
+ NimBLEAddress _newAddress = NimBLEAddress(MAC,type);
+ if(MI32Scan==nullptr){
+ if(!NimBLEDevice::whiteListAdd(_newAddress)){
+ return false;
+ }
+ }
+ else{
+ bool _runningScan = MI32Scan->stop();
+ if(NimBLEDevice::whiteListAdd(_newAddress)){
+ MI32Scan->setFilterPolicy(BLE_HCI_SCAN_FILT_USE_WL);
+ if(_runningScan) MI32Scan->start(0, MI32scanEndedCB, false);
+ }
+ else {
+ if(_runningScan) MI32Scan->start(0, MI32scanEndedCB, false);
+ return false;
+ }
+ }
+ AddLog(LOG_LEVEL_INFO,PSTR("M32: add %s to watchlist of size: %u"),_newAddress.toString().c_str(),NimBLEDevice::getWhiteListCount());
+ return true;
+ }
+
void MI32setBatteryForSlot(uint32_t slot, uint8_t value){
if(slot>MIBLEsensors.size()-1) return;
if(MIBLEsensors[slot].feature.bat){
@@ -1017,9 +1046,15 @@ void MI32ScanTask(void *pvParameters){
MI32Scan->setInterval(70);
MI32Scan->setWindow(50);
MI32Scan->setAdvertisedDeviceCallbacks(&MI32ScanCallbacks,true);
+ if(NimBLEDevice::getWhiteListCount()>0){
+ MI32Scan->setFilterPolicy(BLE_HCI_SCAN_FILT_USE_WL);
+ }
+ else {
+ MI32Scan->setFilterPolicy(BLE_HCI_SCAN_FILT_NO_WL);
+ }
MI32Scan->setActiveScan(MI32.option.activeScan);
MI32Scan->setMaxResults(0);
- MI32Scan->start(0, MI32scanEndedCB, true); // never stop scanning, will pause automatically while connecting
+ MI32Scan->start(0, MI32scanEndedCB, false); // never stop scanning, will pause automatically while connecting
MI32.infoMsg = MI32_START_SCANNING;
uint32_t timer = 0;
@@ -2282,4 +2317,4 @@ bool Xsns62(uint8_t function)
#endif // USE_MI_ESP32
#endif // CONFIG_IDF_TARGET_ESP32 or CONFIG_IDF_TARGET_ESP32C3
#endif // ESP32
-#endif // USE_BLE_ESP32
+#endif // USE_BLE_ESP32
\ No newline at end of file
From 4fe37a10a49c6f9aeb68aa4ffdf47ab5ea6b1597 Mon Sep 17 00:00:00 2001
From: Staars
Date: Fri, 25 Mar 2022 10:16:42 +0100
Subject: [PATCH 2/2] add watch and block, generated part
---
lib/libesp32/berry/generate/be_const_strtab.h | 2 +
.../berry/generate/be_const_strtab_def.h | 2361 +++++++++--------
.../berry/generate/be_fixed_be_class_BLE.h | 14 +-
3 files changed, 1192 insertions(+), 1185 deletions(-)
diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h
index 9dacf5511..a3152e78d 100644
--- a/lib/libesp32/berry/generate/be_const_strtab.h
+++ b/lib/libesp32/berry/generate/be_const_strtab.h
@@ -257,7 +257,9 @@ extern const bcstring be_const_str_add_header;
extern const bcstring be_const_str_add_light;
extern const bcstring be_const_str_add_rule;
extern const bcstring be_const_str_addr;
+extern const bcstring be_const_str_adv_block;
extern const bcstring be_const_str_adv_cb;
+extern const bcstring be_const_str_adv_watch;
extern const bcstring be_const_str_allocated;
extern const bcstring be_const_str_alternate;
extern const bcstring be_const_str_animate;
diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h
index 0e5b0ccd8..13efbf51e 100644
--- a/lib/libesp32/berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/berry/generate/be_const_strtab_def.h
@@ -1,852 +1,854 @@
-be_define_const_str(, "", 2166136261u, 0, 0, NULL);
-be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str__debug_present);
-be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_pc_abs);
-be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E);
-be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str_CFG_X3A_X20removing_X20autoconf_X20files);
-be_define_const_str(_X22, "\"", 655135397u, 0, 1, NULL);
-be_define_const_str(_X22_X3A, "\":", 399167565u, 0, 2, NULL);
-be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_cb_obj);
-be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_seg7_font);
-be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_SERIAL_5E1);
-be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_STATE_DEFAULT);
-be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_CFG_X3A_X20_X27init_X2Ebat_X27_X20done_X2C_X20restarting);
-be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_code);
-be_define_const_str(_X25, "%", 537692064u, 0, 1, &be_const_str_id);
-be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, NULL);
-be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_every_second);
-be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_i2c_enabled);
-be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_pin);
-be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_exists);
-be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, NULL);
-be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_detected_X20on_X20bus);
-be_define_const_str(_X2A, "*", 789356349u, 0, 1, &be_const_str_push);
-be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_AudioFileSource);
-be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_energy_struct);
-be_define_const_str(_X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D, ",\"AXP192\":{\"VBusVoltage\":%.3f,\"VBusCurrent\":%.1f,\"BattVoltage\":%.3f,\"BattCurrent\":%.1f,\"Temperature\":%.1f}", 2598755376u, 0, 106, &be_const_str_SERIAL_8E1);
-be_define_const_str(_X2D, "-", 671913016u, 0, 1, &be_const_str_argument_X20must_X20be_X20a_X20list_X20or_X20a_X20pointer_X2Bsize);
-be_define_const_str(_X2D_X2A, "-*", 499980374u, 0, 2, NULL);
-be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str_LVG_X3A_X20object_X3A);
-be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str_draw_ctx);
-be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str__X3A);
-be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_set_exten);
-be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_img);
-be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_true);
-be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str__X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_height_def);
-be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_persist);
-be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str__end_transmission);
-be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str__X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E);
-be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_try_run_compiled);
-be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str__dirty);
-be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_load);
-be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str___upper__);
-be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_full_state);
-be_define_const_str(_X2Flights_X2F, "/lights/", 2370247908u, 0, 8, &be_const_str_SERIAL_7E2);
-be_define_const_str(_X2Fstate_X2F, "/state/", 4226179876u, 0, 7, &be_const_str_set_timeouts);
-be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_Tele);
-be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29);
-be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "
", 3546571739u, 0, 11, &be_const_str_add_light);
-be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str__settings_def);
-be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_adv_cb);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str__X3D);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str__splash);
-be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "", 2052843416u, 0, 25, &be_const_str_find_key_i);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 2058443583u, 0, 110, &be_const_str_ct);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "