mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-27 12:46:34 +00:00
Merge branch 'development' into pre-release-9.6.0
This commit is contained in:
commit
e96ce2f637
40
.github/workflows/copy_change.yml
vendored
Normal file
40
.github/workflows/copy_change.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
name: Copy to docs repo
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch: # Manually start a workflow
|
||||||
|
push:
|
||||||
|
branches: development
|
||||||
|
paths:
|
||||||
|
- 'BUILDS.md'
|
||||||
|
- 'I2CDEVICES.md'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
copy_change:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Push I2CDevices.md to https://github.com/Tasmota/docs
|
||||||
|
uses: dmnemec/copy_file_to_another_repo_action@main
|
||||||
|
env:
|
||||||
|
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
|
||||||
|
with:
|
||||||
|
source_file: 'I2CDEVICES.md'
|
||||||
|
destination_repo: 'Tasmota/docs'
|
||||||
|
destination_branch: 'development'
|
||||||
|
destination_folder: 'docs'
|
||||||
|
user_email: 'github-actions@github.com'
|
||||||
|
user_name: 'github-actions'
|
||||||
|
commit_message: 'I2CDevices.md changed'
|
||||||
|
- name: Push Builds.md to https://github.com/Tasmota/docs
|
||||||
|
uses: dmnemec/copy_file_to_another_repo_action@main
|
||||||
|
env:
|
||||||
|
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
|
||||||
|
with:
|
||||||
|
source_file: 'BUILDS.md'
|
||||||
|
destination_repo: 'Tasmota/docs'
|
||||||
|
destination_branch: 'development'
|
||||||
|
destination_folder: 'docs'
|
||||||
|
user_email: 'github-actions@github.com'
|
||||||
|
user_name: 'github-actions'
|
||||||
|
commit_message: 'Builds.md changed'
|
@ -191,6 +191,11 @@ void WiFiClientSecure_light::_clear() {
|
|||||||
_last_error = 0;
|
_last_error = 0;
|
||||||
_recvapp_buf = nullptr;
|
_recvapp_buf = nullptr;
|
||||||
_recvapp_len = 0;
|
_recvapp_len = 0;
|
||||||
|
#ifdef USE_MQTT_TLS_CA_CERT
|
||||||
|
_insecure = false; // insecure (fingerprint) mode is only enabled if setPubKeyFingerprint() is called
|
||||||
|
#else
|
||||||
|
_insecure = true; // force insecure if CA validation is not enabled
|
||||||
|
#endif
|
||||||
_fingerprint_any = true; // by default accept all fingerprints
|
_fingerprint_any = true; // by default accept all fingerprints
|
||||||
_fingerprint1 = nullptr;
|
_fingerprint1 = nullptr;
|
||||||
_fingerprint2 = nullptr;
|
_fingerprint2 = nullptr;
|
||||||
@ -954,10 +959,9 @@ extern "C" {
|
|||||||
bool WiFiClientSecure_light::_connectSSL(const char* hostName) {
|
bool WiFiClientSecure_light::_connectSSL(const char* hostName) {
|
||||||
// Validation context, either full CA validation or checking only fingerprints
|
// Validation context, either full CA validation or checking only fingerprints
|
||||||
#ifdef USE_MQTT_TLS_CA_CERT
|
#ifdef USE_MQTT_TLS_CA_CERT
|
||||||
br_x509_minimal_context *x509_minimal;
|
br_x509_minimal_context *x509_minimal = nullptr;
|
||||||
#else
|
|
||||||
br_x509_pubkeyfingerprint_context *x509_insecure;
|
|
||||||
#endif
|
#endif
|
||||||
|
br_x509_pubkeyfingerprint_context *x509_insecure = nullptr;
|
||||||
|
|
||||||
LOG_HEAP_SIZE("_connectSSL.start");
|
LOG_HEAP_SIZE("_connectSSL.start");
|
||||||
|
|
||||||
@ -984,24 +988,26 @@ bool WiFiClientSecure_light::_connectSSL(const char* hostName) {
|
|||||||
// Allocatte and initialize Decoder Context
|
// Allocatte and initialize Decoder Context
|
||||||
LOG_HEAP_SIZE("_connectSSL before DecoderContext allocation");
|
LOG_HEAP_SIZE("_connectSSL before DecoderContext allocation");
|
||||||
// Only failure possible in the installation is OOM
|
// Only failure possible in the installation is OOM
|
||||||
#ifdef USE_MQTT_TLS_CA_CERT
|
|
||||||
x509_minimal = (br_x509_minimal_context*) malloc(sizeof(br_x509_minimal_context));
|
|
||||||
if (!x509_minimal) break;
|
|
||||||
br_x509_minimal_init(x509_minimal, &br_sha256_vtable, _ta_P, _ta_size);
|
|
||||||
br_x509_minimal_set_rsa(x509_minimal, br_ssl_engine_get_rsavrfy(_eng));
|
|
||||||
br_x509_minimal_set_hash(x509_minimal, br_sha256_ID, &br_sha256_vtable);
|
|
||||||
br_ssl_engine_set_x509(_eng, &x509_minimal->vtable);
|
|
||||||
uint32_t now = UtcTime();
|
|
||||||
uint32_t cfg_time = CfgTime();
|
|
||||||
if (cfg_time > now) { now = cfg_time; }
|
|
||||||
br_x509_minimal_set_time(x509_minimal, now / 86400 + 719528, now % 86400);
|
|
||||||
|
|
||||||
#else
|
|
||||||
x509_insecure = (br_x509_pubkeyfingerprint_context*) malloc(sizeof(br_x509_pubkeyfingerprint_context));
|
x509_insecure = (br_x509_pubkeyfingerprint_context*) malloc(sizeof(br_x509_pubkeyfingerprint_context));
|
||||||
//x509_insecure = std::unique_ptr<br_x509_pubkeyfingerprint_context>(new br_x509_pubkeyfingerprint_context);
|
//x509_insecure = std::unique_ptr<br_x509_pubkeyfingerprint_context>(new br_x509_pubkeyfingerprint_context);
|
||||||
if (!x509_insecure) break;
|
if (!x509_insecure) break;
|
||||||
br_x509_pubkeyfingerprint_init(x509_insecure, _fingerprint1, _fingerprint2, _recv_fingerprint, _fingerprint_any);
|
br_x509_pubkeyfingerprint_init(x509_insecure, _fingerprint1, _fingerprint2, _recv_fingerprint, _fingerprint_any);
|
||||||
br_ssl_engine_set_x509(_eng, &x509_insecure->vtable);
|
br_ssl_engine_set_x509(_eng, &x509_insecure->vtable);
|
||||||
|
|
||||||
|
#ifdef USE_MQTT_TLS_CA_CERT
|
||||||
|
if (!_insecure) {
|
||||||
|
x509_minimal = (br_x509_minimal_context*) malloc(sizeof(br_x509_minimal_context));
|
||||||
|
if (!x509_minimal) break;
|
||||||
|
br_x509_minimal_init(x509_minimal, &br_sha256_vtable, _ta_P, _ta_size);
|
||||||
|
br_x509_minimal_set_rsa(x509_minimal, br_ssl_engine_get_rsavrfy(_eng));
|
||||||
|
br_x509_minimal_set_hash(x509_minimal, br_sha256_ID, &br_sha256_vtable);
|
||||||
|
br_ssl_engine_set_x509(_eng, &x509_minimal->vtable);
|
||||||
|
uint32_t now = UtcTime();
|
||||||
|
uint32_t cfg_time = CfgTime();
|
||||||
|
if (cfg_time > now) { now = cfg_time; }
|
||||||
|
br_x509_minimal_set_time(x509_minimal, now / 86400 + 719528, now % 86400);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
LOG_HEAP_SIZE("_connectSSL after DecoderContext allocation");
|
LOG_HEAP_SIZE("_connectSSL after DecoderContext allocation");
|
||||||
|
|
||||||
@ -1043,9 +1049,8 @@ bool WiFiClientSecure_light::_connectSSL(const char* hostName) {
|
|||||||
|
|
||||||
#ifdef USE_MQTT_TLS_CA_CERT
|
#ifdef USE_MQTT_TLS_CA_CERT
|
||||||
free(x509_minimal);
|
free(x509_minimal);
|
||||||
#else
|
|
||||||
free(x509_insecure);
|
|
||||||
#endif
|
#endif
|
||||||
|
free(x509_insecure);
|
||||||
LOG_HEAP_SIZE("_connectSSL after release of Priv Key");
|
LOG_HEAP_SIZE("_connectSSL after release of Priv Key");
|
||||||
return ret;
|
return ret;
|
||||||
} while (0);
|
} while (0);
|
||||||
@ -1059,9 +1064,8 @@ bool WiFiClientSecure_light::_connectSSL(const char* hostName) {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef USE_MQTT_TLS_CA_CERT
|
#ifdef USE_MQTT_TLS_CA_CERT
|
||||||
free(x509_minimal);
|
free(x509_minimal);
|
||||||
#else
|
|
||||||
free(x509_insecure);
|
|
||||||
#endif
|
#endif
|
||||||
|
free(x509_insecure);
|
||||||
LOG_HEAP_SIZE("_connectSSL clean_on_error");
|
LOG_HEAP_SIZE("_connectSSL clean_on_error");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -82,6 +82,7 @@ class WiFiClientSecure_light : public WiFiClient {
|
|||||||
_fingerprint1 = f1;
|
_fingerprint1 = f1;
|
||||||
_fingerprint2 = f2;
|
_fingerprint2 = f2;
|
||||||
_fingerprint_any = f_any;
|
_fingerprint_any = f_any;
|
||||||
|
_insecure = true;
|
||||||
}
|
}
|
||||||
const uint8_t * getRecvPubKeyFingerprint(void) {
|
const uint8_t * getRecvPubKeyFingerprint(void) {
|
||||||
return _recv_fingerprint;
|
return _recv_fingerprint;
|
||||||
@ -132,7 +133,8 @@ class WiFiClientSecure_light : public WiFiClient {
|
|||||||
bool _handshake_done;
|
bool _handshake_done;
|
||||||
uint64_t _last_error;
|
uint64_t _last_error;
|
||||||
|
|
||||||
bool _fingerprint_any; // accept all fingerprints
|
bool _fingerprint_any; // accept all fingerprints
|
||||||
|
bool _insecure; // force fingerprint
|
||||||
const uint8_t *_fingerprint1; // fingerprint1 to be checked against
|
const uint8_t *_fingerprint1; // fingerprint1 to be checked against
|
||||||
const uint8_t *_fingerprint2; // fingerprint2 to be checked against
|
const uint8_t *_fingerprint2; // fingerprint2 to be checked against
|
||||||
// **** Start patch Castellucci
|
// **** Start patch Castellucci
|
||||||
|
@ -7,139 +7,6 @@
|
|||||||
*******************************************************************/
|
*******************************************************************/
|
||||||
#include "be_constobj.h"
|
#include "be_constobj.h"
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
** Solidified function: tostring
|
|
||||||
********************************************************************/
|
|
||||||
be_local_closure(tostring, /* name */
|
|
||||||
be_nested_proto(
|
|
||||||
8, /* nstack */
|
|
||||||
1, /* argc */
|
|
||||||
0, /* varg */
|
|
||||||
0, /* has upvals */
|
|
||||||
NULL, /* no upvals */
|
|
||||||
0, /* has sup protos */
|
|
||||||
NULL, /* no sub protos */
|
|
||||||
1, /* has constants */
|
|
||||||
( &(const bvalue[ 4]) { /* constants */
|
|
||||||
/* K0 */ be_nested_string("string", 398550328, 6),
|
|
||||||
/* K1 */ be_nested_string("format", -1180859054, 6),
|
|
||||||
/* K2 */ be_nested_string("<instance: %s(%s)>", 1553432777, 18),
|
|
||||||
/* K3 */ be_nested_string("_p", 1594591802, 2),
|
|
||||||
}),
|
|
||||||
(be_nested_const_str("tostring", -1995258651, 8)),
|
|
||||||
(be_nested_const_str("input", -103256197, 5)),
|
|
||||||
( &(const binstruction[11]) { /* code */
|
|
||||||
0xA4060000, // 0000 IMPORT R1 K0
|
|
||||||
0x8C080301, // 0001 GETMET R2 R1 K1
|
|
||||||
0x58100002, // 0002 LDCONST R4 K2
|
|
||||||
0x60140005, // 0003 GETGBL R5 G5
|
|
||||||
0x5C180000, // 0004 MOVE R6 R0
|
|
||||||
0x7C140200, // 0005 CALL R5 1
|
|
||||||
0x60180008, // 0006 GETGBL R6 G8
|
|
||||||
0x881C0103, // 0007 GETMBR R7 R0 K3
|
|
||||||
0x7C180200, // 0008 CALL R6 1
|
|
||||||
0x7C080800, // 0009 CALL R2 4
|
|
||||||
0x80040400, // 000A RET 1 R2
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
/*******************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
** Solidified function: member
|
|
||||||
********************************************************************/
|
|
||||||
be_local_closure(member, /* name */
|
|
||||||
be_nested_proto(
|
|
||||||
5, /* nstack */
|
|
||||||
2, /* argc */
|
|
||||||
0, /* varg */
|
|
||||||
0, /* has upvals */
|
|
||||||
NULL, /* no upvals */
|
|
||||||
0, /* has sup protos */
|
|
||||||
NULL, /* no sub protos */
|
|
||||||
1, /* has constants */
|
|
||||||
( &(const bvalue[ 2]) { /* constants */
|
|
||||||
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
|
||||||
/* K1 */ be_nested_string("find", -1108310694, 4),
|
|
||||||
}),
|
|
||||||
(be_nested_const_str("member", 719708611, 6)),
|
|
||||||
(be_nested_const_str("input", -103256197, 5)),
|
|
||||||
( &(const binstruction[ 5]) { /* code */
|
|
||||||
0x88080100, // 0000 GETMBR R2 R0 K0
|
|
||||||
0x8C080501, // 0001 GETMET R2 R2 K1
|
|
||||||
0x5C100200, // 0002 MOVE R4 R1
|
|
||||||
0x7C080400, // 0003 CALL R2 2
|
|
||||||
0x80040400, // 0004 RET 1 R2
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
/*******************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
** Solidified function: setmember
|
|
||||||
********************************************************************/
|
|
||||||
be_local_closure(setmember, /* name */
|
|
||||||
be_nested_proto(
|
|
||||||
4, /* nstack */
|
|
||||||
3, /* argc */
|
|
||||||
0, /* varg */
|
|
||||||
0, /* has upvals */
|
|
||||||
NULL, /* no upvals */
|
|
||||||
0, /* has sup protos */
|
|
||||||
NULL, /* no sub protos */
|
|
||||||
1, /* has constants */
|
|
||||||
( &(const bvalue[ 2]) { /* constants */
|
|
||||||
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
|
||||||
/* K1 */ be_nested_string("_dirty", 283846766, 6),
|
|
||||||
}),
|
|
||||||
(be_nested_const_str("setmember", 1432909441, 9)),
|
|
||||||
(be_nested_const_str("input", -103256197, 5)),
|
|
||||||
( &(const binstruction[ 5]) { /* code */
|
|
||||||
0x880C0100, // 0000 GETMBR R3 R0 K0
|
|
||||||
0x980C0202, // 0001 SETIDX R3 R1 R2
|
|
||||||
0x500C0200, // 0002 LDBOOL R3 1 0
|
|
||||||
0x90020203, // 0003 SETMBR R0 K1 R3
|
|
||||||
0x80000000, // 0004 RET 0
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
/*******************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
** Solidified function: zero
|
|
||||||
********************************************************************/
|
|
||||||
be_local_closure(zero, /* name */
|
|
||||||
be_nested_proto(
|
|
||||||
2, /* nstack */
|
|
||||||
1, /* argc */
|
|
||||||
0, /* varg */
|
|
||||||
0, /* has upvals */
|
|
||||||
NULL, /* no upvals */
|
|
||||||
0, /* has sup protos */
|
|
||||||
NULL, /* no sub protos */
|
|
||||||
1, /* has constants */
|
|
||||||
( &(const bvalue[ 2]) { /* constants */
|
|
||||||
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
|
||||||
/* K1 */ be_nested_string("_dirty", 283846766, 6),
|
|
||||||
}),
|
|
||||||
(be_nested_const_str("zero", -1955600541, 4)),
|
|
||||||
(be_nested_const_str("input", -103256197, 5)),
|
|
||||||
( &(const binstruction[ 6]) { /* code */
|
|
||||||
0x60040013, // 0000 GETGBL R1 G19
|
|
||||||
0x7C040000, // 0001 CALL R1 0
|
|
||||||
0x90020001, // 0002 SETMBR R0 K0 R1
|
|
||||||
0x50040200, // 0003 LDBOOL R1 1 0
|
|
||||||
0x90020201, // 0004 SETMBR R0 K1 R1
|
|
||||||
0x80000000, // 0005 RET 0
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
/*******************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
** Solidified function: save
|
** Solidified function: save
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
@ -203,12 +70,12 @@ be_local_closure(save, /* name */
|
|||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
** Solidified function: has
|
** Solidified function: setmember
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
be_local_closure(has, /* name */
|
be_local_closure(setmember, /* name */
|
||||||
be_nested_proto(
|
be_nested_proto(
|
||||||
5, /* nstack */
|
4, /* nstack */
|
||||||
2, /* argc */
|
3, /* argc */
|
||||||
0, /* varg */
|
0, /* varg */
|
||||||
0, /* has upvals */
|
0, /* has upvals */
|
||||||
NULL, /* no upvals */
|
NULL, /* no upvals */
|
||||||
@ -217,16 +84,16 @@ be_local_closure(has, /* name */
|
|||||||
1, /* has constants */
|
1, /* has constants */
|
||||||
( &(const bvalue[ 2]) { /* constants */
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
||||||
/* K1 */ be_nested_string("has", -306245661, 3),
|
/* K1 */ be_nested_string("_dirty", 283846766, 6),
|
||||||
}),
|
}),
|
||||||
(be_nested_const_str("has", -306245661, 3)),
|
(be_nested_const_str("setmember", 1432909441, 9)),
|
||||||
(be_nested_const_str("input", -103256197, 5)),
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
( &(const binstruction[ 5]) { /* code */
|
( &(const binstruction[ 5]) { /* code */
|
||||||
0x88080100, // 0000 GETMBR R2 R0 K0
|
0x880C0100, // 0000 GETMBR R3 R0 K0
|
||||||
0x8C080501, // 0001 GETMET R2 R2 K1
|
0x980C0202, // 0001 SETIDX R3 R1 R2
|
||||||
0x5C100200, // 0002 MOVE R4 R1
|
0x500C0200, // 0002 LDBOOL R3 1 0
|
||||||
0x7C080400, // 0003 CALL R2 2
|
0x90020203, // 0003 SETMBR R0 K1 R3
|
||||||
0x80040400, // 0004 RET 1 R2
|
0x80000000, // 0004 RET 0
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -234,11 +101,11 @@ be_local_closure(has, /* name */
|
|||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
** Solidified function: remove
|
** Solidified function: init
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
be_local_closure(remove, /* name */
|
be_local_closure(init, /* name */
|
||||||
be_nested_proto(
|
be_nested_proto(
|
||||||
5, /* nstack */
|
6, /* nstack */
|
||||||
2, /* argc */
|
2, /* argc */
|
||||||
0, /* varg */
|
0, /* varg */
|
||||||
0, /* has upvals */
|
0, /* has upvals */
|
||||||
@ -246,21 +113,37 @@ be_local_closure(remove, /* name */
|
|||||||
0, /* has sup protos */
|
0, /* has sup protos */
|
||||||
NULL, /* no sub protos */
|
NULL, /* no sub protos */
|
||||||
1, /* has constants */
|
1, /* has constants */
|
||||||
( &(const bvalue[ 3]) { /* constants */
|
( &(const bvalue[ 6]) { /* constants */
|
||||||
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
/* K0 */ be_nested_string("_filename", 1430813195, 9),
|
||||||
/* K1 */ be_nested_string("remove", -611183107, 6),
|
/* K1 */ be_nested_string("_persist.json", 2008425138, 13),
|
||||||
/* K2 */ be_nested_string("_dirty", 283846766, 6),
|
/* K2 */ be_nested_string("_p", 1594591802, 2),
|
||||||
|
/* K3 */ be_nested_string("copy", -446502332, 4),
|
||||||
|
/* K4 */ be_nested_string("load", -435725847, 4),
|
||||||
|
/* K5 */ be_nested_string("_dirty", 283846766, 6),
|
||||||
}),
|
}),
|
||||||
(be_nested_const_str("remove", -611183107, 6)),
|
(be_nested_const_str("init", 380752755, 4)),
|
||||||
(be_nested_const_str("input", -103256197, 5)),
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
( &(const binstruction[ 7]) { /* code */
|
( &(const binstruction[20]) { /* code */
|
||||||
0x88080100, // 0000 GETMBR R2 R0 K0
|
0x90020101, // 0000 SETMBR R0 K0 K1
|
||||||
0x8C080501, // 0001 GETMET R2 R2 K1
|
0x6008000F, // 0001 GETGBL R2 G15
|
||||||
0x5C100200, // 0002 MOVE R4 R1
|
0x5C0C0200, // 0002 MOVE R3 R1
|
||||||
0x7C080400, // 0003 CALL R2 2
|
0x60100013, // 0003 GETGBL R4 G19
|
||||||
0x50080200, // 0004 LDBOOL R2 1 0
|
0x7C080400, // 0004 CALL R2 2
|
||||||
0x90020402, // 0005 SETMBR R0 K2 R2
|
0x780A0003, // 0005 JMPF R2 #000A
|
||||||
0x80000000, // 0006 RET 0
|
0x8C080303, // 0006 GETMET R2 R1 K3
|
||||||
|
0x7C080200, // 0007 CALL R2 1
|
||||||
|
0x90020402, // 0008 SETMBR R0 K2 R2
|
||||||
|
0x70020002, // 0009 JMP #000D
|
||||||
|
0x60080013, // 000A GETGBL R2 G19
|
||||||
|
0x7C080000, // 000B CALL R2 0
|
||||||
|
0x90020402, // 000C SETMBR R0 K2 R2
|
||||||
|
0x8C080104, // 000D GETMET R2 R0 K4
|
||||||
|
0x88100102, // 000E GETMBR R4 R0 K2
|
||||||
|
0x88140100, // 000F GETMBR R5 R0 K0
|
||||||
|
0x7C080600, // 0010 CALL R2 3
|
||||||
|
0x50080000, // 0011 LDBOOL R2 0 0
|
||||||
|
0x90020A02, // 0012 SETMBR R0 K5 R2
|
||||||
|
0x80000000, // 0013 RET 0
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -339,11 +222,11 @@ be_local_closure(load, /* name */
|
|||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
** Solidified function: init
|
** Solidified function: has
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
be_local_closure(init, /* name */
|
be_local_closure(has, /* name */
|
||||||
be_nested_proto(
|
be_nested_proto(
|
||||||
6, /* nstack */
|
5, /* nstack */
|
||||||
2, /* argc */
|
2, /* argc */
|
||||||
0, /* varg */
|
0, /* varg */
|
||||||
0, /* has upvals */
|
0, /* has upvals */
|
||||||
@ -351,37 +234,115 @@ be_local_closure(init, /* name */
|
|||||||
0, /* has sup protos */
|
0, /* has sup protos */
|
||||||
NULL, /* no sub protos */
|
NULL, /* no sub protos */
|
||||||
1, /* has constants */
|
1, /* has constants */
|
||||||
( &(const bvalue[ 6]) { /* constants */
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
/* K0 */ be_nested_string("_filename", 1430813195, 9),
|
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
||||||
/* K1 */ be_nested_string("_persist.json", 2008425138, 13),
|
/* K1 */ be_nested_string("has", -306245661, 3),
|
||||||
/* K2 */ be_nested_string("_p", 1594591802, 2),
|
|
||||||
/* K3 */ be_nested_string("copy", -446502332, 4),
|
|
||||||
/* K4 */ be_nested_string("load", -435725847, 4),
|
|
||||||
/* K5 */ be_nested_string("_dirty", 283846766, 6),
|
|
||||||
}),
|
}),
|
||||||
(be_nested_const_str("init", 380752755, 4)),
|
(be_nested_const_str("has", -306245661, 3)),
|
||||||
(be_nested_const_str("input", -103256197, 5)),
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
( &(const binstruction[20]) { /* code */
|
( &(const binstruction[ 5]) { /* code */
|
||||||
0x90020101, // 0000 SETMBR R0 K0 K1
|
0x88080100, // 0000 GETMBR R2 R0 K0
|
||||||
0x6008000F, // 0001 GETGBL R2 G15
|
0x8C080501, // 0001 GETMET R2 R2 K1
|
||||||
0x5C0C0200, // 0002 MOVE R3 R1
|
0x5C100200, // 0002 MOVE R4 R1
|
||||||
0x60100013, // 0003 GETGBL R4 G19
|
0x7C080400, // 0003 CALL R2 2
|
||||||
0x7C080400, // 0004 CALL R2 2
|
0x80040400, // 0004 RET 1 R2
|
||||||
0x780A0003, // 0005 JMPF R2 #000A
|
})
|
||||||
0x8C080303, // 0006 GETMET R2 R1 K3
|
)
|
||||||
0x7C080200, // 0007 CALL R2 1
|
);
|
||||||
0x90020402, // 0008 SETMBR R0 K2 R2
|
/*******************************************************************/
|
||||||
0x70020002, // 0009 JMP #000D
|
|
||||||
0x60080013, // 000A GETGBL R2 G19
|
|
||||||
0x7C080000, // 000B CALL R2 0
|
/********************************************************************
|
||||||
0x90020402, // 000C SETMBR R0 K2 R2
|
** Solidified function: zero
|
||||||
0x8C080104, // 000D GETMET R2 R0 K4
|
********************************************************************/
|
||||||
0x88100102, // 000E GETMBR R4 R0 K2
|
be_local_closure(zero, /* name */
|
||||||
0x88140100, // 000F GETMBR R5 R0 K0
|
be_nested_proto(
|
||||||
0x7C080600, // 0010 CALL R2 3
|
2, /* nstack */
|
||||||
0x50080000, // 0011 LDBOOL R2 0 0
|
1, /* argc */
|
||||||
0x90020A02, // 0012 SETMBR R0 K5 R2
|
0, /* varg */
|
||||||
0x80000000, // 0013 RET 0
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
||||||
|
/* K1 */ be_nested_string("_dirty", 283846766, 6),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("zero", -1955600541, 4)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 6]) { /* code */
|
||||||
|
0x60040013, // 0000 GETGBL R1 G19
|
||||||
|
0x7C040000, // 0001 CALL R1 0
|
||||||
|
0x90020001, // 0002 SETMBR R0 K0 R1
|
||||||
|
0x50040200, // 0003 LDBOOL R1 1 0
|
||||||
|
0x90020201, // 0004 SETMBR R0 K1 R1
|
||||||
|
0x80000000, // 0005 RET 0
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: member
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(member, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
5, /* nstack */
|
||||||
|
2, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 2]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
||||||
|
/* K1 */ be_nested_string("find", -1108310694, 4),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("member", 719708611, 6)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 5]) { /* code */
|
||||||
|
0x88080100, // 0000 GETMBR R2 R0 K0
|
||||||
|
0x8C080501, // 0001 GETMET R2 R2 K1
|
||||||
|
0x5C100200, // 0002 MOVE R4 R1
|
||||||
|
0x7C080400, // 0003 CALL R2 2
|
||||||
|
0x80040400, // 0004 RET 1 R2
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
** Solidified function: remove
|
||||||
|
********************************************************************/
|
||||||
|
be_local_closure(remove, /* name */
|
||||||
|
be_nested_proto(
|
||||||
|
5, /* nstack */
|
||||||
|
2, /* argc */
|
||||||
|
0, /* varg */
|
||||||
|
0, /* has upvals */
|
||||||
|
NULL, /* no upvals */
|
||||||
|
0, /* has sup protos */
|
||||||
|
NULL, /* no sub protos */
|
||||||
|
1, /* has constants */
|
||||||
|
( &(const bvalue[ 3]) { /* constants */
|
||||||
|
/* K0 */ be_nested_string("_p", 1594591802, 2),
|
||||||
|
/* K1 */ be_nested_string("remove", -611183107, 6),
|
||||||
|
/* K2 */ be_nested_string("_dirty", 283846766, 6),
|
||||||
|
}),
|
||||||
|
(be_nested_const_str("remove", -611183107, 6)),
|
||||||
|
(be_nested_const_str("input", -103256197, 5)),
|
||||||
|
( &(const binstruction[ 7]) { /* code */
|
||||||
|
0x88080100, // 0000 GETMBR R2 R0 K0
|
||||||
|
0x8C080501, // 0001 GETMET R2 R2 K1
|
||||||
|
0x5C100200, // 0002 MOVE R4 R1
|
||||||
|
0x7C080400, // 0003 CALL R2 2
|
||||||
|
0x50080200, // 0004 LDBOOL R2 1 0
|
||||||
|
0x90020402, // 0005 SETMBR R0 K2 R2
|
||||||
|
0x80000000, // 0006 RET 0
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -426,21 +387,20 @@ be_local_closure(find, /* name */
|
|||||||
be_local_class(Persist,
|
be_local_class(Persist,
|
||||||
3,
|
3,
|
||||||
NULL,
|
NULL,
|
||||||
be_nested_map(13,
|
be_nested_map(12,
|
||||||
( (struct bmapnode*) &(const bmapnode[]) {
|
( (struct bmapnode*) &(const bmapnode[]) {
|
||||||
{ be_nested_key("tostring", -1995258651, 8, -1), be_const_closure(tostring_closure) },
|
|
||||||
{ be_nested_key("member", 719708611, 6, 3), be_const_closure(member_closure) },
|
|
||||||
{ be_nested_key("setmember", 1432909441, 9, 5), be_const_closure(setmember_closure) },
|
|
||||||
{ be_nested_key("zero", -1955600541, 4, 9), be_const_closure(zero_closure) },
|
|
||||||
{ be_nested_key("save", -855671224, 4, -1), be_const_closure(save_closure) },
|
{ be_nested_key("save", -855671224, 4, -1), be_const_closure(save_closure) },
|
||||||
{ be_nested_key("has", -306245661, 3, -1), be_const_closure(has_closure) },
|
{ be_nested_key("setmember", 1432909441, 9, 4), be_const_closure(setmember_closure) },
|
||||||
{ be_nested_key("_filename", 1430813195, 9, 10), be_const_var(0) },
|
{ be_nested_key("_p", 1594591802, 2, 5), be_const_var(1) },
|
||||||
{ be_nested_key("remove", -611183107, 6, -1), be_const_closure(remove_closure) },
|
|
||||||
{ be_nested_key("_dirty", 283846766, 6, -1), be_const_var(2) },
|
|
||||||
{ be_nested_key("load", -435725847, 4, -1), be_const_closure(load_closure) },
|
|
||||||
{ be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) },
|
{ be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) },
|
||||||
{ be_nested_key("_p", 1594591802, 2, 1), be_const_var(1) },
|
{ be_nested_key("load", -435725847, 4, -1), be_const_closure(load_closure) },
|
||||||
|
{ be_nested_key("_dirty", 283846766, 6, -1), be_const_var(2) },
|
||||||
|
{ be_nested_key("has", -306245661, 3, -1), be_const_closure(has_closure) },
|
||||||
|
{ be_nested_key("zero", -1955600541, 4, 8), be_const_closure(zero_closure) },
|
||||||
|
{ be_nested_key("member", 719708611, 6, 6), be_const_closure(member_closure) },
|
||||||
|
{ be_nested_key("remove", -611183107, 6, -1), be_const_closure(remove_closure) },
|
||||||
{ be_nested_key("find", -1108310694, 4, -1), be_const_closure(find_closure) },
|
{ be_nested_key("find", -1108310694, 4, -1), be_const_closure(find_closure) },
|
||||||
|
{ be_nested_key("_filename", 1430813195, 9, -1), be_const_var(0) },
|
||||||
})),
|
})),
|
||||||
(be_nested_const_str("Persist", 1456346147, 7))
|
(be_nested_const_str("Persist", 1456346147, 7))
|
||||||
);
|
);
|
||||||
|
@ -60,12 +60,6 @@ persist_module.init = def (m)
|
|||||||
return self._p.find(k, d)
|
return self._p.find(k, d)
|
||||||
end
|
end
|
||||||
|
|
||||||
#- custom tostring -#
|
|
||||||
def tostring()
|
|
||||||
import string
|
|
||||||
return string.format("<instance: %s(%s)>", classname(self), str(self._p))
|
|
||||||
end
|
|
||||||
|
|
||||||
def load()
|
def load()
|
||||||
import json
|
import json
|
||||||
import path
|
import path
|
||||||
|
@ -479,6 +479,12 @@ void *special_calloc(size_t num, size_t size) {
|
|||||||
float CpuTemperature(void) {
|
float CpuTemperature(void) {
|
||||||
#ifdef CONFIG_IDF_TARGET_ESP32
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
return (float)temperatureRead(); // In Celsius
|
return (float)temperatureRead(); // In Celsius
|
||||||
|
/*
|
||||||
|
// These jumps are not stable either. Sometimes it jumps to 77.3
|
||||||
|
float t = (float)temperatureRead(); // In Celsius
|
||||||
|
if (t > 81) { t = t - 27.2; } // Fix temp jump observed on some ESP32 like DualR3
|
||||||
|
return t;
|
||||||
|
*/
|
||||||
#else
|
#else
|
||||||
// Currently (20210801) repeated calls to temperatureRead() on ESP32C3 and ESP32S2 result in IDF error messages
|
// Currently (20210801) repeated calls to temperatureRead() on ESP32C3 and ESP32S2 result in IDF error messages
|
||||||
static float t = NAN;
|
static float t = NAN;
|
||||||
@ -489,6 +495,39 @@ float CpuTemperature(void) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t temprature_sens_read();
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
|
uint8_t temprature_sens_read();
|
||||||
|
|
||||||
|
float CpuTemperature(void) {
|
||||||
|
uint8_t t = temprature_sens_read();
|
||||||
|
|
||||||
|
AddLog(LOG_LEVEL_DEBUG, PSTR("TMP: value %d"), t);
|
||||||
|
|
||||||
|
return (t - 32) / 1.8;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
float CpuTemperature(void) {
|
||||||
|
// Currently (20210801) repeated calls to temperatureRead() on ESP32C3 and ESP32S2 result in IDF error messages
|
||||||
|
static float t = NAN;
|
||||||
|
if (isnan(t)) {
|
||||||
|
t = (float)temperatureRead(); // In Celsius
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#if CONFIG_IDF_TARGET_ESP32S2
|
#if CONFIG_IDF_TARGET_ESP32S2
|
||||||
#include "esp32s2/esp_efuse.h"
|
#include "esp32s2/esp_efuse.h"
|
||||||
|
@ -1818,6 +1818,7 @@ void LightAnimate(void)
|
|||||||
memcpy(Light.fade_start_10, cur_col_10, sizeof(Light.fade_start_10));
|
memcpy(Light.fade_start_10, cur_col_10, sizeof(Light.fade_start_10));
|
||||||
// push the final values at 8 and 10 bits resolution to the PWMs
|
// push the final values at 8 and 10 bits resolution to the PWMs
|
||||||
LightSetOutputs(cur_col_10);
|
LightSetOutputs(cur_col_10);
|
||||||
|
LightStopFade();
|
||||||
Light.fade_initialized = true; // it is now ok to fade
|
Light.fade_initialized = true; // it is now ok to fade
|
||||||
Light.fade_once_enabled = false; // light has been set, reset fade_once_enabled
|
Light.fade_once_enabled = false; // light has been set, reset fade_once_enabled
|
||||||
Light.speed_once_enabled = false; // light has been set, reset speed_once_enabled
|
Light.speed_once_enabled = false; // light has been set, reset speed_once_enabled
|
||||||
@ -1842,10 +1843,6 @@ void LightAnimate(void)
|
|||||||
LightSetOutputs(Light.fade_cur_10);
|
LightSetOutputs(Light.fade_cur_10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef USE_PWM_DIMMER
|
|
||||||
// If the power is off and the fade is done, turn the relay off.
|
|
||||||
if (PWM_DIMMER == TasmotaGlobal.module_type && !Light.power && !Light.fade_running) PWMDimmerSetPower();
|
|
||||||
#endif // USE_PWM_DIMMER
|
|
||||||
// For WYZE bulbs we must set the CT pin (PWM2) to INPUT to fully turn it off
|
// For WYZE bulbs we must set the CT pin (PWM2) to INPUT to fully turn it off
|
||||||
if (TasmotaGlobal.gpio_optiona.pwm1_input && !Light.power && !Light.fade_running) { // GPIO Option_A1
|
if (TasmotaGlobal.gpio_optiona.pwm1_input && !Light.power && !Light.fade_running) { // GPIO Option_A1
|
||||||
if (PinUsed(GPIO_PWM1, 1)) { pinMode(Pin(GPIO_PWM1, 1), INPUT); }
|
if (PinUsed(GPIO_PWM1, 1)) { pinMode(Pin(GPIO_PWM1, 1), INPUT); }
|
||||||
@ -1902,6 +1899,14 @@ uint8_t LightGetCurFadeBri(void) {
|
|||||||
return max_bri;
|
return max_bri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LightStopFade(void) {
|
||||||
|
Light.fade_running = false;
|
||||||
|
#ifdef USE_PWM_DIMMER
|
||||||
|
// If the power is off and the fade is done, turn the relay off.
|
||||||
|
if (PWM_DIMMER == TasmotaGlobal.module_type && !Light.power) PWMDimmerSetPower();
|
||||||
|
#endif // USE_PWM_DIMMER
|
||||||
|
}
|
||||||
|
|
||||||
bool LightApplyFade(void) { // did the value chanegd and needs to be applied
|
bool LightApplyFade(void) { // did the value chanegd and needs to be applied
|
||||||
static uint32_t last_millis = 0;
|
static uint32_t last_millis = 0;
|
||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
@ -1940,7 +1945,7 @@ bool LightApplyFade(void) { // did the value chanegd and needs to be applied
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// no fade needed, we keep the duration at zero, it will fallback directly to end of fade
|
// no fade needed, we keep the duration at zero, it will fallback directly to end of fade
|
||||||
Light.fade_running = false;
|
LightStopFade();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1960,7 +1965,7 @@ bool LightApplyFade(void) { // did the value chanegd and needs to be applied
|
|||||||
} else {
|
} else {
|
||||||
// stop fade
|
// stop fade
|
||||||
//AddLop_P2(LOG_LEVEL_DEBUG, PSTR("Stop fade"));
|
//AddLop_P2(LOG_LEVEL_DEBUG, PSTR("Stop fade"));
|
||||||
Light.fade_running = false;
|
LightStopFade();
|
||||||
Light.fade_start = 0;
|
Light.fade_start = 0;
|
||||||
Light.fade_duration = 0;
|
Light.fade_duration = 0;
|
||||||
// set light to target value
|
// set light to target value
|
||||||
@ -2937,7 +2942,7 @@ void CmndFade(void)
|
|||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
if (XdrvMailbox.payload >= 0 && XdrvMailbox.payload <= 2) SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_FADE, Settings->light_fade);
|
if (XdrvMailbox.payload >= 0 && XdrvMailbox.payload <= 2) SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_FADE, Settings->light_fade);
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
if (!Settings->light_fade) { Light.fade_running = false; }
|
if (!Settings->light_fade) { LightStopFade(); }
|
||||||
}
|
}
|
||||||
ResponseCmndStateText(Settings->light_fade);
|
ResponseCmndStateText(Settings->light_fade);
|
||||||
}
|
}
|
||||||
@ -2951,7 +2956,7 @@ void CmndSpeed(void)
|
|||||||
Light.fade_once_value = (XdrvMailbox.payload > 0);
|
Light.fade_once_value = (XdrvMailbox.payload > 0);
|
||||||
Light.speed_once_enabled = true;
|
Light.speed_once_enabled = true;
|
||||||
Light.speed_once_value = XdrvMailbox.payload;
|
Light.speed_once_value = XdrvMailbox.payload;
|
||||||
if (!Light.fade_once_value) { Light.fade_running = false; }
|
if (!Light.fade_once_value) { LightStopFade(); }
|
||||||
}
|
}
|
||||||
ResponseCmndIdxNumber(Light.speed_once_value);
|
ResponseCmndIdxNumber(Light.speed_once_value);
|
||||||
} else {
|
} else {
|
||||||
|
@ -271,7 +271,8 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
{
|
{
|
||||||
bool handle_tap = false;
|
bool handle_tap = false;
|
||||||
bool state_updated = false;
|
bool state_updated = false;
|
||||||
int32_t bri_offset = 0;
|
int8_t bri_hold = 0;
|
||||||
|
int8_t bri_tap = 0;
|
||||||
uint8_t power_on_bri = 0;
|
uint8_t power_on_bri = 0;
|
||||||
uint8_t dgr_item = 0;
|
uint8_t dgr_item = 0;
|
||||||
uint8_t dgr_value = 0;
|
uint8_t dgr_value = 0;
|
||||||
@ -294,7 +295,7 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
|
|
||||||
// If the button was pressed and released but was not processed by support_button because the
|
// If the button was pressed and released but was not processed by support_button because the
|
||||||
// button interval had not elapsed,
|
// button interval had not elapsed, publish an MQTT message.
|
||||||
if (button_unprocessed[button_index]) {
|
if (button_unprocessed[button_index]) {
|
||||||
mqtt_trigger = 5;
|
mqtt_trigger = 5;
|
||||||
#ifdef USE_PWM_DIMMER_REMOTE
|
#ifdef USE_PWM_DIMMER_REMOTE
|
||||||
@ -314,9 +315,9 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
// The new brightness will be calculated below.
|
// The new brightness will be calculated below.
|
||||||
if (power_is_on) {
|
if (power_is_on) {
|
||||||
#ifdef USE_PWM_DIMMER_REMOTE
|
#ifdef USE_PWM_DIMMER_REMOTE
|
||||||
bri_offset = (active_remote_pwm_dimmer ? (active_remote_pwm_dimmer->power_button_increases_bri ? 1 : -1) : (power_button_increases_bri ? 1 : -1));
|
bri_hold = (active_remote_pwm_dimmer ? (active_remote_pwm_dimmer->power_button_increases_bri ? 1 : -1) : (power_button_increases_bri ? 1 : -1));
|
||||||
#else // USE_PWM_DIMMER_REMOTE
|
#else // USE_PWM_DIMMER_REMOTE
|
||||||
bri_offset = (power_button_increases_bri ? 1 : -1);
|
bri_hold = (power_button_increases_bri ? 1 : -1);
|
||||||
#endif // USE_PWM_DIMMER_REMOTE
|
#endif // USE_PWM_DIMMER_REMOTE
|
||||||
invert_power_button_bri_direction = true;
|
invert_power_button_bri_direction = true;
|
||||||
}
|
}
|
||||||
@ -351,7 +352,7 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
// Otherwise, if the power is on and remote mode is enabled, adjust the brightness. Set the
|
// Otherwise, if the power is on and remote mode is enabled, adjust the brightness. Set the
|
||||||
// direction based on which button is pressed. The new brightness will be calculated below.
|
// direction based on which button is pressed. The new brightness will be calculated below.
|
||||||
else if (power_is_on && Settings->flag4.multiple_device_groups) {
|
else if (power_is_on && Settings->flag4.multiple_device_groups) {
|
||||||
bri_offset = (is_down_button ? -1 : 1);
|
bri_hold = (is_down_button ? -1 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, publish MQTT Event Trigger#.
|
// Otherwise, publish MQTT Event Trigger#.
|
||||||
@ -365,7 +366,7 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
// Otherwise, if the power is on, adjust the brightness. Set the direction based on which
|
// Otherwise, if the power is on, adjust the brightness. Set the direction based on which
|
||||||
// button is pressed. The new brightness will be calculated below.
|
// button is pressed. The new brightness will be calculated below.
|
||||||
else if (power_is_on && !button_tapped) {
|
else if (power_is_on && !button_tapped) {
|
||||||
bri_offset = (is_down_button ? -1 : 1);
|
bri_hold = (is_down_button ? -1 : 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -465,7 +466,7 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
// If the button was not held, adjust the brightness. Set the direction based on which
|
// If the button was not held, adjust the brightness. Set the direction based on which
|
||||||
// button is pressed. The new brightness will be calculated below.
|
// button is pressed. The new brightness will be calculated below.
|
||||||
if (!button_was_held) {
|
if (!button_was_held) {
|
||||||
bri_offset = (is_down_button ? -5 : 5);
|
bri_tap = (is_down_button ? -1 : 1);
|
||||||
dgr_more_to_come = false;
|
dgr_more_to_come = false;
|
||||||
state_updated = true;
|
state_updated = true;
|
||||||
}
|
}
|
||||||
@ -494,7 +495,7 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
|
|
||||||
// If we need to adjust the brightness, do it.
|
// If we need to adjust the brightness, do it.
|
||||||
int32_t negated_device_group_index = -power_button_index;
|
int32_t negated_device_group_index = -power_button_index;
|
||||||
if (bri_offset) {
|
if (bri_hold || bri_tap) {
|
||||||
int32_t bri;
|
int32_t bri;
|
||||||
#ifdef USE_PWM_DIMMER_REMOTE
|
#ifdef USE_PWM_DIMMER_REMOTE
|
||||||
if (active_remote_pwm_dimmer)
|
if (active_remote_pwm_dimmer)
|
||||||
@ -502,8 +503,16 @@ void PWMDimmerHandleButton(uint32_t button_index, bool pressed)
|
|||||||
else
|
else
|
||||||
#endif // USE_PWM_DIMMER_REMOTE
|
#endif // USE_PWM_DIMMER_REMOTE
|
||||||
bri = light_state.getBri();
|
bri = light_state.getBri();
|
||||||
int32_t new_bri = bri + bri_offset * (Settings->light_correction ? 4 : bri / 16 + 1);
|
int32_t bri_offset = Settings->dimmer_step;
|
||||||
|
if (bri_tap)
|
||||||
|
bri_offset *= bri_tap;
|
||||||
|
else {
|
||||||
|
bri_offset /= 5;
|
||||||
|
if (!Settings->light_correction) bri_offset *= bri / 32;
|
||||||
|
if (bri_offset < 1) bri_offset = 1;
|
||||||
|
bri_offset *= bri_hold;
|
||||||
|
}
|
||||||
|
int32_t new_bri = bri + bri_offset;
|
||||||
if (bri_offset > 0) {
|
if (bri_offset > 0) {
|
||||||
if (new_bri > 255) new_bri = 255;
|
if (new_bri > 255) new_bri = 255;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user