From 8e904eaed6143f9e3bd8fb6a9e771600957fd4e8 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Wed, 17 Mar 2021 09:47:42 +0100 Subject: [PATCH 1/5] Update Italian language --- tasmota/language/it_IT.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index c2251af85..b8a7d828b 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -28,11 +28,11 @@ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. * Use online command Prefix to translate cmnd, stat and tele. * - * Updated until v9.3.1.1 + * Last update - 9.3.1.1 (17.03.2021) \*********************************************************************/ #define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) - +// https://www.science.co.il/language/Locale-codes.php #define LANGUAGE_LCID 1040 // HTML (ISO 639-1) Language Code #define D_HTML_LANGUAGE "it" @@ -798,8 +798,8 @@ #define D_SENSOR_NEOPOOL_TX "NeoPool - TX" #define D_SENSOR_NEOPOOL_RX "NeoPool - RX" #define D_SENSOR_VL53L0X_XSHUT "VL53L0X XSHUT" -#define D_NEW_ADDRESS "Cambio di indirizzo a" -#define D_OUT_OF_RANGE "Fuori dal limite" +#define D_NEW_ADDRESS "Imposta indirizzo a" +#define D_OUT_OF_RANGE "Fuori limite" #define D_SENSOR_DETECTED "rilevato" // Units From dce555cf6b219e8b1ebe1bcca71626c3e6c97f5f Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Wed, 17 Mar 2021 13:30:51 +0100 Subject: [PATCH 2/5] homekit update --- tasmota/homekit.c | 347 ++++++++++++++++++----------------- tasmota/xdrv_10_scripter.ino | 51 ++++- 2 files changed, 223 insertions(+), 175 deletions(-) diff --git a/tasmota/homekit.c b/tasmota/homekit.c index 44f1dc536..5bd539ddb 100755 --- a/tasmota/homekit.c +++ b/tasmota/homekit.c @@ -59,11 +59,11 @@ extern uint32_t Ext_UpdVar(char *vname, float *fvar, uint32_t mode); #define MAX_HAP_DEFS 16 struct HAP_DESC { - char hap_name[16]; - char var_name[16]; - char var2_name[16]; - char var3_name[16]; - char var4_name[16]; + char hap_name[24]; + char var_name[12]; + char var2_name[12]; + char var3_name[12]; + char var4_name[12]; uint8_t hap_cid; uint8_t type; hap_acc_t *accessory; @@ -148,45 +148,66 @@ static int accessory_identify(hap_acc_t *ha) return HAP_SUCCESS; } +const struct HAP_CHAR_TABLE { + char stype[4]; + char ntype; + int8_t index; +} hap_rtab[] = { + {HAP_CHAR_UUID_CURRENT_TEMPERATURE,'f',0}, + {HAP_CHAR_UUID_CURRENT_RELATIVE_HUMIDITY,'f',0}, + {HAP_CHAR_UUID_CURRENT_AMBIENT_LIGHT_LEVEL,'f',0}, + {HAP_CHAR_UUID_BATTERY_LEVEL,'u',0}, + {HAP_CHAR_UUID_STATUS_LOW_BATTERY,'b',1}, + {HAP_CHAR_UUID_CHARGING_STATE,'b',2}, + {HAP_CHAR_UUID_ON,'b',0}, + {HAP_CHAR_UUID_HUE,'f',1}, + {HAP_CHAR_UUID_SATURATION,'f',2}, + {HAP_CHAR_UUID_BRIGHTNESS,'u',3}, + {HAP_CHAR_UUID_COLOR_TEMPERATURE,'u',0}, + {HAP_CHAR_UUID_CONTACT_SENSOR_STATE,'u',0}, + {HAP_CHAR_UUID_WATTAGE,'f',0} +}; + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + /* A dummy callback for handling a write on the "On" characteristic of Outlet. * In an actual accessory, this should control the hardware */ static int sensor_write(hap_write_data_t write_data[], int count, void *serv_priv, void *write_priv, uint32_t index) { int i, ret = HAP_SUCCESS; + float fvar; hap_write_data_t *write; for (i = 0; i < count; i++) { write = &write_data[i]; + bool found = false; const char *hcp = hap_char_get_type_uuid(write->hc); - if (!strcmp(hcp, HAP_CHAR_UUID_ON)) { - //ESP_LOGI(TAG, "Received Write. Outlet %s", write->val.b ? "On" : "Off"); - ESP_LOG_LEVEL(ESP_LOG_INFO, TAG, "Received Write. Outlet %s", write->val.b ? "On" : "Off"); - hap_char_update_val(write->hc, &(write->val)); - float fvar = write->val.b; - Ext_UpdVar(hap_devs[index].var_name, &fvar, 1); - *(write->status) = HAP_STATUS_SUCCESS; - } else if (!strcmp(hcp, HAP_CHAR_UUID_HUE)) { - hap_char_update_val(write->hc, &(write->val)); - float fvar = write->val.f; - Ext_UpdVar(hap_devs[index].var2_name, &fvar, 1); - *(write->status) = HAP_STATUS_SUCCESS; - } else if (!strcmp(hcp, HAP_CHAR_UUID_SATURATION)) { - hap_char_update_val(write->hc, &(write->val)); - float fvar = write->val.f; - Ext_UpdVar(hap_devs[index].var3_name, &fvar, 1); - *(write->status) = HAP_STATUS_SUCCESS; - } else if (!strcmp(hcp, HAP_CHAR_UUID_BRIGHTNESS)) { - hap_char_update_val(write->hc, &(write->val)); - float fvar = write->val.u; - Ext_UpdVar(hap_devs[index].var4_name, &fvar, 1); - *(write->status) = HAP_STATUS_SUCCESS; - } else { + for (uint32_t cnt = 0; cnt < ARRAY_SIZE(hap_rtab); cnt++ ) { + if (!strcmp(hcp, hap_rtab[cnt].stype)) { + hap_char_update_val(write->hc, &(write->val)); + switch (hap_rtab[cnt].ntype) { + case 'f': fvar = write->val.f; break; + case 'u': fvar = write->val.u; break; + case 'b': fvar = write->val.b; break; + } + switch (hap_rtab[cnt].index) { + case 0: Ext_UpdVar(hap_devs[index].var_name, &fvar, 1);break; + case 1: Ext_UpdVar(hap_devs[index].var2_name, &fvar, 1);break; + case 2: Ext_UpdVar(hap_devs[index].var3_name, &fvar, 1);break; + case 3: Ext_UpdVar(hap_devs[index].var4_name, &fvar, 1);break; + } + *(write->status) = HAP_STATUS_SUCCESS; + found = true; + break; + } + } + if (!found) { *(write->status) = HAP_STATUS_RES_ABSENT; } + } return ret; } - // common read routine static int sensor_read(hap_char_t *hc, hap_status_t *status_code, void *serv_priv, void *read_priv, uint32_t index) { hap_val_t new_val; @@ -200,61 +221,123 @@ static int sensor_read(hap_char_t *hc, hap_status_t *status_code, void *serv_pri printf("read values %s\n", hcp ); - if (!strcmp(hcp, HAP_CHAR_UUID_CURRENT_TEMPERATURE) - || !strcmp(hcp, HAP_CHAR_UUID_CURRENT_RELATIVE_HUMIDITY) - || !strcmp(hcp, HAP_CHAR_UUID_CURRENT_AMBIENT_LIGHT_LEVEL) - ) { - - Ext_UpdVar(hap_devs[index].var_name, &fvar, 0); - new_val.f = fvar; + for (uint32_t cnt = 0; cnt < ARRAY_SIZE(hap_rtab); cnt++ ) { + if (!strcmp(hcp, hap_rtab[cnt].stype)) { + switch (hap_rtab[cnt].index) { + case 0: Ext_UpdVar(hap_devs[index].var_name, &fvar, 0);break; + case 1: Ext_UpdVar(hap_devs[index].var2_name, &fvar, 0);break; + case 2: Ext_UpdVar(hap_devs[index].var3_name, &fvar, 0);break; + case 3: Ext_UpdVar(hap_devs[index].var4_name, &fvar, 0);break; + } + switch (hap_rtab[cnt].ntype) { + case 'f': new_val.f = fvar; break; + case 'u': new_val.u = fvar; break; + case 'b': new_val.b = fvar; break; + } hap_char_update_val(hc, &new_val); *status_code = HAP_STATUS_SUCCESS; - } - if (!strcmp(hcp, HAP_CHAR_UUID_ON)) { - Ext_UpdVar(hap_devs[index].var_name, &fvar, 0); - new_val.b = fvar; - hap_char_update_val(hc, &new_val); - *status_code = HAP_STATUS_SUCCESS; - } - if (!strcmp(hcp, HAP_CHAR_UUID_HUE)) { - Ext_UpdVar(hap_devs[index].var2_name, &fvar, 0); - new_val.f = fvar; - hap_char_update_val(hc, &new_val); - *status_code = HAP_STATUS_SUCCESS; - } - if (!strcmp(hcp, HAP_CHAR_UUID_SATURATION)) { - Ext_UpdVar(hap_devs[index].var3_name, &fvar, 0); - new_val.f = fvar; - hap_char_update_val(hc, &new_val); - *status_code = HAP_STATUS_SUCCESS; - } - if (!strcmp(hcp, HAP_CHAR_UUID_BRIGHTNESS)) { - Ext_UpdVar(hap_devs[index].var4_name, &fvar, 0); - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - *status_code = HAP_STATUS_SUCCESS; - } - if (!strcmp(hcp, HAP_CHAR_UUID_BATTERY_LEVEL)) { - Ext_UpdVar(hap_devs[index].var_name, &fvar, 0); - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - *status_code = HAP_STATUS_SUCCESS; - } - if (!strcmp(hcp, HAP_CHAR_UUID_STATUS_LOW_BATTERY)) { - Ext_UpdVar(hap_devs[index].var2_name, &fvar, 0); - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - *status_code = HAP_STATUS_SUCCESS; - } - if (!strcmp(hcp, HAP_CHAR_UUID_CHARGING_STATE)) { - Ext_UpdVar(hap_devs[index].var3_name, &fvar, 0); - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - *status_code = HAP_STATUS_SUCCESS; + } } return HAP_SUCCESS; } +// update values every 500 ms +void hap_update_from_vars(void) { + float fvar; + hap_char_t *hc; + hap_val_t new_val; + for (uint32_t cnt = 0; cnt < hk_services; cnt++) { + switch (hap_devs[cnt].hap_cid) { + case HAP_CID_SENSOR: + switch (hap_devs[cnt].type) { + case 0: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CURRENT_TEMPERATURE); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.f = fvar; + hap_char_update_val(hc, &new_val); + } + break; + case 1: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CURRENT_RELATIVE_HUMIDITY); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.f = fvar; + hap_char_update_val(hc, &new_val); + } + break; + case 2: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CURRENT_AMBIENT_LIGHT_LEVEL); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.f = fvar; + hap_char_update_val(hc, &new_val); + } + break; + case 3: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_BATTERY_LEVEL); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.u = fvar; + hap_char_update_val(hc, &new_val); + } + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_STATUS_LOW_BATTERY); + if (Ext_UpdVar(hap_devs[cnt].var2_name, &fvar, 0)) { + new_val.u = fvar; + hap_char_update_val(hc, &new_val); + } + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_STATUS_LOW_BATTERY); + if (Ext_UpdVar(hap_devs[cnt].var3_name, &fvar, 0)) { + new_val.u = fvar; + hap_char_update_val(hc, &new_val); + } + break; + case 4: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CURRENT_AMBIENT_LIGHT_LEVEL); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.f = fvar; + hap_char_update_val(hc, &new_val); + } + break; + case 5: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CONTACT_SENSOR_STATE); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.u = fvar; + hap_char_update_val(hc, &new_val); + } + break; + } + break; + case HAP_CID_OUTLET: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_ON); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.b = fvar; + hap_char_update_val(hc, &new_val); + } + break; + case HAP_CID_LIGHTING: + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_ON); + if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { + new_val.b = fvar; + hap_char_update_val(hc, &new_val); + } + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_HUE); + if (Ext_UpdVar(hap_devs[cnt].var2_name, &fvar, 0)) { + new_val.f = fvar; + hap_char_update_val(hc, &new_val); + } + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_SATURATION); + if (Ext_UpdVar(hap_devs[cnt].var3_name, &fvar, 0)) { + new_val.f = fvar; + hap_char_update_val(hc, &new_val); + } + hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_BRIGHTNESS); + if (Ext_UpdVar(hap_devs[cnt].var4_name, &fvar, 0)) { + new_val.u = fvar; + hap_char_update_val(hc, &new_val); + } + break; + } + } + +} + #define HAP_READ hap_char_t *hc, hap_status_t *status_code, void *serv_priv, void *read_priv) { return sensor_read(hc, status_code, serv_priv, read_priv static int sensor_read1(HAP_READ, 0);} @@ -377,6 +460,8 @@ uint32_t str2c(char **sp, char *vp, uint32_t len) { return 1; } +extern char *GetFName(); + /*The main thread for handling the Smart Outlet Accessory */ static void smart_outlet_thread_entry(void *p) { /* Initialize the HAP core */ @@ -385,7 +470,8 @@ static void smart_outlet_thread_entry(void *p) { hap_acc_t *accessory; hap_acc_cfg_t cfg = { - .name = "Tasmota-Bridge", + //.name = "Tasmota-Bridge", + .name = GetFName(), .manufacturer = "Tasmota", .model = "Bridge", .serial_num = "001122334455", @@ -462,7 +548,6 @@ static void smart_outlet_thread_entry(void *p) { /* Create accessory object */ hap_devs[index].accessory = hap_acc_create(&hap_cfg); /* Add a dummy Product Data */ - uint8_t product_data[] = {'E','S','P','3','2','H','A','P'}; hap_acc_add_product_data(hap_devs[index].accessory, product_data, sizeof(product_data)); int ret; @@ -500,6 +585,8 @@ static void smart_outlet_thread_entry(void *p) { hap_devs[index].service = hap_serv_battery_service_create(fvar, fvar1, fvar2); } break; + case 4: hap_devs[index].service = hap_serv_wattage_create(fvar); break; + case 5: hap_devs[index].service = hap_serv_contact_sensor_create(fvar); break; } } break; @@ -513,7 +600,7 @@ static void smart_outlet_thread_entry(void *p) { hap_set_write(hap_devs[index].service, index); /* Get pointer to the outlet in use characteristic which we need to monitor for state changes */ - hap_char_t *outlet_in_use = hap_serv_get_char_by_uuid(hap_devs[index].service, HAP_CHAR_UUID_OUTLET_IN_USE); + outlet_in_use = hap_serv_get_char_by_uuid(hap_devs[index].service, HAP_CHAR_UUID_OUTLET_IN_USE); /* Add the Outlet Service to the Accessory Object */ hap_acc_add_serv(hap_devs[index].accessory, hap_devs[index].service); @@ -565,13 +652,8 @@ nextline: /* Enable Hardware MFi authentication (applicable only for MFi variant of SDK) */ hap_enable_mfi_auth(HAP_MFI_AUTH_HW); - /* Initialize Wi-Fi */ - //app_wifi_init(); - /* After all the initializations are done, start the HAP core */ hap_start(); - /* Start Wi-Fi */ - //app_wifi_start(portMAX_DELAY); int32_t io_num = OUTLET_IN_USE_GPIO; if (io_num >= 0) { @@ -597,93 +679,16 @@ nextline: } } else { // vTaskDelete(NULL); - // update values every 100 ms while (1) { - delay(100); - float fvar; - hap_char_t *hc; - hap_val_t new_val; - for (uint32_t cnt = 0; cnt < hk_services; cnt++) { - switch (hap_devs[cnt].hap_cid) { - case HAP_CID_SENSOR: - switch (hap_devs[cnt].type) { - case 0: - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CURRENT_TEMPERATURE); - if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { - new_val.f = fvar; - hap_char_update_val(hc, &new_val); - } - break; - case 1: - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CURRENT_RELATIVE_HUMIDITY); - if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { - new_val.f = fvar; - hap_char_update_val(hc, &new_val); - } - break; - case 2: - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_CURRENT_AMBIENT_LIGHT_LEVEL); - if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { - new_val.f = fvar; - hap_char_update_val(hc, &new_val); - } - break; - case 3: - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_BATTERY_LEVEL); - if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - } - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_STATUS_LOW_BATTERY); - if (Ext_UpdVar(hap_devs[cnt].var2_name, &fvar, 0)) { - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - } - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_STATUS_LOW_BATTERY); - if (Ext_UpdVar(hap_devs[cnt].var3_name, &fvar, 0)) { - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - } - break; - } - break; - case HAP_CID_OUTLET: - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_ON); - if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { - new_val.b = fvar; - hap_char_update_val(hc, &new_val); - } - break; - case HAP_CID_LIGHTING: - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_ON); - if (Ext_UpdVar(hap_devs[cnt].var_name, &fvar, 0)) { - new_val.b = fvar; - hap_char_update_val(hc, &new_val); - } - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_HUE); - if (Ext_UpdVar(hap_devs[cnt].var2_name, &fvar, 0)) { - new_val.f = fvar; - hap_char_update_val(hc, &new_val); - } - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_SATURATION); - if (Ext_UpdVar(hap_devs[cnt].var3_name, &fvar, 0)) { - new_val.f = fvar; - hap_char_update_val(hc, &new_val); - } - hc = hap_serv_get_char_by_uuid(hap_devs[cnt].service, HAP_CHAR_UUID_BRIGHTNESS); - if (Ext_UpdVar(hap_devs[cnt].var4_name, &fvar, 0)) { - new_val.u = fvar; - hap_char_update_val(hc, &new_val); - } - break; - } - } + delay(500); + // hap_update_from_vars(); } } } - #define HK_PASSCODE "111-11-111" +int hap_loop_stop(void); +extern void Ext_toLog(char *str); void homekit_main(char *desc, uint32_t flag ) { if (desc) { @@ -710,10 +715,14 @@ void homekit_main(char *desc, uint32_t flag ) { hk_desc = cp; } else { if (flag == 99) { + hap_loop_stop(); hap_reset_to_factory(); + } else if (flag == 98) { + hap_loop_stop(); + // is just the folder in wrapper + hap_platfrom_keystore_erase_partition(hap_platform_keystore_get_nvs_partition_name()); } else { - // not yet implemented - hap_stop(); + hap_loop_stop(); } return; } diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index 7e34f8102..97ebfad30 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -2515,9 +2515,12 @@ chknext: if (!TasmotaGlobal.global_state.wifi_down) { // erase nvs lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv); + homekit_main(0, fvar); - // restart homekit - TasmotaGlobal.restart_flag = 2; + if (fvar >= 98) { + glob_script_mem.homekit_running == false; + } + } lp++; len = 0; @@ -3589,13 +3592,51 @@ extern "C" { uint32_t Ext_UpdVar(char *vname, float *fvar, uint32_t mode) { return UpdVar(vname, fvar, mode); } + void Ext_toLog(char *str) { + toLog(str); + } + + char *GetFName(void) { + return SettingsText(SET_FRIENDLYNAME1); + } } int32_t UpdVar(char *vname, float *fvar, uint32_t mode) { + uint8_t type; + uint8_t index; + if (*vname == '@') { + vname++; + type = *vname; + vname++; + index = (*vname & 0x0f); + if (index < 1) index = 1; + if (index > 9) index = 9; + switch (type) { + case 'p': + if (mode) { + // set power + ExecuteCommandPower(index, *fvar, SRC_BUTTON); + return 0; + } else { + // read power + *fvar = bitRead(TasmotaGlobal.power, index - 1); + return 1; + } + break; + case 's': + *fvar = SwitchLastState(index - 1); + return 1; + break; + case 'b': + *fvar = Button.last_state[index - 1]; + return 1; + break; + } + return 0; + } struct T_INDEX ind; uint8_t vtype; float res = *fvar; - uint8_t index; isvar(vname, &vtype, &ind, fvar, 0, 0); if (vtype != VAR_NV) { // found variable as result @@ -3604,7 +3645,7 @@ int32_t UpdVar(char *vname, float *fvar, uint32_t mode) { // set var index = glob_script_mem.type[ind.index].index; glob_script_mem.fvars[index] = res; - SetChanged(ind.index); + glob_script_mem.type[ind.index].bits.changed = 1; return 0; } else { // get var @@ -3724,13 +3765,11 @@ void Replace_Cmd_Vars(char *srcbuf, uint32_t srcsize, char *dstbuf, uint32_t dst dstbuf[count] = 0; } - void toLog(const char *str) { if (!str) return; AddLog(LOG_LEVEL_INFO, str); } - void toLogN(const char *cp, uint8_t len) { if (!cp) return; char str[32]; From 1d38a6465d10193ef1ed6d52e57fa270f86ae6a4 Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Wed, 17 Mar 2021 13:33:55 +0100 Subject: [PATCH 3/5] update homekit --- .../ESP32-HomeKit/src/_esp_hap_config.h | 2 +- lib/libesp32_div/ESP32-HomeKit/src/hap.h | 0 .../ESP32-HomeKit/src/hap_apple_chars.c | 21 +++++++++-- .../ESP32-HomeKit/src/hap_apple_chars.h | 3 ++ .../ESP32-HomeKit/src/hap_apple_servs.c | 17 ++++++++- .../ESP32-HomeKit/src/hap_apple_servs.h | 4 +++ .../src/hap_platform_keystore.cpp | 35 ++++++++++--------- 7 files changed, 61 insertions(+), 21 deletions(-) mode change 100644 => 100755 lib/libesp32_div/ESP32-HomeKit/src/_esp_hap_config.h mode change 100644 => 100755 lib/libesp32_div/ESP32-HomeKit/src/hap.h mode change 100644 => 100755 lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.c mode change 100644 => 100755 lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.h mode change 100644 => 100755 lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.c mode change 100644 => 100755 lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.h diff --git a/lib/libesp32_div/ESP32-HomeKit/src/_esp_hap_config.h b/lib/libesp32_div/ESP32-HomeKit/src/_esp_hap_config.h old mode 100644 new mode 100755 index e848049b8..ea5421b62 --- a/lib/libesp32_div/ESP32-HomeKit/src/_esp_hap_config.h +++ b/lib/libesp32_div/ESP32-HomeKit/src/_esp_hap_config.h @@ -14,7 +14,7 @@ #define CONFIG_HAP_HTTP_STACK_SIZE 12288 #define CONFIG_HAP_HTTP_SERVER_PORT 5556 // 80 for normal webserver #define CONFIG_HAP_HTTP_CONTROL_PORT 32859 -#define CONFIG_HAP_HTTP_MAX_OPEN_SOCKETS 6 +#define CONFIG_HAP_HTTP_MAX_OPEN_SOCKETS 5 // 6 #define CONFIG_HAP_HTTP_MAX_URI_HANDLERS 16 #endif /* ESP_HAP_CONFIG_H_ */ diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap.h b/lib/libesp32_div/ESP32-HomeKit/src/hap.h old mode 100644 new mode 100755 diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.c b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.c old mode 100644 new mode 100755 index 773cf31fd..de079b4dd --- a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.c +++ b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.c @@ -39,6 +39,21 @@ hap_char_t *hap_char_brightness_create(int brightness) return hc; } +/* Char: Brightness */ +hap_char_t *hap_char_wattage_create(float watts) +{ + hap_char_t *hc = hap_char_float_create(HAP_CHAR_UUID_CURRENT_AMBIENT_LIGHT_LEVEL, + HAP_CHAR_PERM_PR | HAP_CHAR_PERM_PW | HAP_CHAR_PERM_EV, watts); + if (!hc) { + return NULL; + } + + hap_char_float_set_constraints(hc, -10000.0, 10000.0, 1); + hap_char_add_unit(hc, HAP_CHAR_UNIT_LUX); + + return hc; +} + /* Char: Cooling Threshold Temperature */ hap_char_t *hap_char_cooling_threshold_temperature_create(float cooling_threshold_temp) { @@ -1284,7 +1299,7 @@ hap_char_t *hap_char_relative_humidity_humidifier_threshold_create(float rel_hum } hap_char_float_set_constraints(hc, 0.0, 100.0, 1.0); - hap_char_add_unit(hc, HAP_CHAR_UNIT_PERCENTAGE); + hap_char_add_unit(hc, HAP_CHAR_UNIT_LUX); return hc; } @@ -1391,7 +1406,7 @@ hap_char_t *hap_char_status_jammed_create(uint8_t status_jammed) hap_char_t *hap_char_administrator_only_access_create(bool administrator_only_access) { hap_char_t *hc = hap_char_bool_create(HAP_CHAR_UUID_ADMINISTRATOR_ONLY_ACCESS, - HAP_CHAR_PERM_PR | HAP_CHAR_PERM_PW | HAP_CHAR_PERM_EV, + HAP_CHAR_PERM_PR | HAP_CHAR_PERM_PW | HAP_CHAR_PERM_EV, administrator_only_access); if (!hc) { return NULL; @@ -1430,7 +1445,7 @@ hap_char_t *hap_char_lock_last_known_action_create(uint8_t lock_last_known_actio hap_char_t *hap_char_lock_management_auto_security_timeout_create(uint32_t lock_management_auto_security_timeout) { hap_char_t *hc = hap_char_uint32_create(HAP_CHAR_UUID_LOCK_MANAGEMENT_AUTO_SECURITY_TIMEOUT, - HAP_CHAR_PERM_PR | HAP_CHAR_PERM_PW | HAP_CHAR_PERM_EV, + HAP_CHAR_PERM_PR | HAP_CHAR_PERM_PW | HAP_CHAR_PERM_EV, lock_management_auto_security_timeout); if (!hc) { return NULL; diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.h b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.h old mode 100644 new mode 100755 index e734a6e57..90aa12e08 --- a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.h +++ b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_chars.h @@ -142,6 +142,7 @@ extern "C" { #define HAP_CHAR_UUID_REMAINING_DURATION "D4" #define HAP_CHAR_UUID_VALVE_TYPE "D5" #define HAP_CHAR_UUID_IS_CONFIGURED "D6" +#define HAP_CHAR_UUID_WATTAGE "DC" #define HAP_CHAR_UUID_PRODUCT_DATA "220" /** Create Brightness Characteristic @@ -1415,6 +1416,8 @@ hap_char_t *hap_char_air_particulate_density_create(float air_particulate_densit */ hap_char_t *hap_char_air_particulate_size_create(uint8_t air_particulate_size); +hap_char_t *hap_char_wattage_create(float watts); + #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.c b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.c old mode 100644 new mode 100755 index b8783695f..fec046ffc --- a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.c +++ b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.c @@ -419,6 +419,22 @@ err: return NULL; } +hap_serv_t *hap_serv_wattage_create(float curr_watts) +{ + hap_serv_t *hs = hap_serv_create(HAP_SERV_UUID_LIGHT_SENSOR); + if (!hs) { + return NULL; + } + if (hap_serv_add_char(hs, hap_char_wattage_create(curr_watts)) != HAP_SUCCESS) { + goto err; + } + return hs; +err: + hap_serv_delete(hs); + return NULL; +} + + hap_serv_t *hap_serv_temperature_sensor_create(float curr_temp) { hap_serv_t *hs = hap_serv_create(HAP_SERV_UUID_TEMPERATURE_SENSOR); @@ -703,4 +719,3 @@ err: hap_serv_delete(hs); return NULL; } - diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.h b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.h old mode 100644 new mode 100755 index e3f6101f9..f1e65e441 --- a/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.h +++ b/lib/libesp32_div/ESP32-HomeKit/src/hap_apple_servs.h @@ -75,6 +75,7 @@ extern "C" { #define HAP_SERV_UUID_VALVE "D0" #define HAP_SERV_UUID_FAUCET "D7" + /** Create Accessory Information Service * * This API will create the Accessory Information Service with the mandatory @@ -553,6 +554,9 @@ hap_serv_t *hap_serv_valve_create(uint8_t active, uint8_t in_use, uint8_t valve_ */ hap_serv_t *hap_serv_faucet_create(uint8_t active); + +hap_serv_t *hap_serv_wattage_create(float curr_watts); + #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp b/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp index db6c3e905..ec27c90c5 100755 --- a/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp +++ b/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp @@ -144,12 +144,10 @@ int hap_platform_keystore_delete_namespace(const char *part_name, const char *na while (true) { File entry = fp.openNextFile(); if (!entry) break; - char fp[48]; - strcpy(fp,path); - strcat(fp, "/"); - strcat(fp, entry.name()); - ffsp->remove(fp); + char p[48]; + strcpy(p,entry.name()); entry.close(); + ffsp->remove(p); } } return 0; @@ -157,7 +155,6 @@ int hap_platform_keystore_delete_namespace(const char *part_name, const char *na // last resort only int hap_platfrom_keystore_erase_partition(const char *part_name) { -// LITTLEFS.format(); char path[48]; strcpy(path, "/"); strcat(path, part_name); @@ -166,17 +163,23 @@ if (fp.isDirectory()) { while (true) { File entry = fp.openNextFile(); if (!entry) break; - char fp[48]; - strcpy(fp,path); - strcat(fp, "/"); - strcat(fp, entry.name()); - if (entry.isDirectory()) { - hap_platform_keystore_delete_namespace(part_name, entry.name()); - ffsp->rmdir(fp); - } else { - ffsp->remove(fp); + const char *ep = entry.name(); + if (*ep=='/') ep++; + char *lcp = strrchr(ep,'/'); + if (lcp) { + ep = lcp + 1; } - entry.close(); + char p[48]; + strcpy(p,entry.name()); + if (entry.isDirectory()) { + hap_platform_keystore_delete_namespace(part_name, ep); + entry.close(); + ffsp->rmdir(p); + } else { + entry.close(); + ffsp->remove(p); + } + } } return 0; From b427267e2b831cbd972b4ff76ea8ca8669f178eb Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 17 Mar 2021 16:26:04 +0100 Subject: [PATCH 4/5] Fix TM1637 driver selection Fix TM1637 driver selection (#11358) --- tasmota/xdrv_13_display.ino | 54 +++++++++++++++++++++--------------- tasmota/xdsp_01_lcd.ino | 5 ++-- tasmota/xdsp_02_ssd1306.ino | 5 ++-- tasmota/xdsp_03_matrix.ino | 5 ++-- tasmota/xdsp_07_sh1106.ino | 5 ++-- tasmota/xdsp_11_sevenseg.ino | 5 ++-- 6 files changed, 46 insertions(+), 33 deletions(-) diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino index 1d319750b..e73b611e4 100755 --- a/tasmota/xdrv_13_display.ino +++ b/tasmota/xdrv_13_display.ino @@ -17,7 +17,6 @@ along with this program. If not, see . */ -#if defined(USE_I2C) || defined(USE_SPI) #ifdef USE_DISPLAY #define XDRV_13 13 @@ -1600,7 +1599,9 @@ void DisplayInitDriver(void) Display_Text_From_File("/display.ini"); #endif - +#ifdef USE_GRAPH + for (uint8_t count = 0; count < NUM_GRAPHS; count++) { graph[count] = 0; } +#endif // AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "Display model %d"), Settings.display_model); @@ -2037,8 +2038,9 @@ void CmndDisplayRows(void) } /*********************************************************************************************\ - * optional drivers + * Optional drivers \*********************************************************************************************/ + #ifdef USE_TOUCH_BUTTONS // very limited path size, so, add .jpg void draw_picture(char *path, uint32_t xp, uint32_t yp, uint32_t xs, uint32_t ys, uint32_t ocol, bool inverted) { @@ -2059,7 +2061,7 @@ char ppath[16]; } Draw_RGB_Bitmap(ppath, xp, yp, inverted); } -#endif +#endif // USE_TOUCH_BUTTONS #ifdef ESP32 @@ -2173,6 +2175,10 @@ void Draw_RGB_Bitmap(char *file,uint16_t xp, uint16_t yp, bool inverted ) { } #endif // USE_UFILESYS +/*********************************************************************************************\ + * AWatch +\*********************************************************************************************/ + #ifdef USE_AWATCH #define MINUTE_REDUCT 4 @@ -2210,6 +2216,9 @@ void DrawAClock(uint16_t rad) { } #endif // USE_AWATCH +/*********************************************************************************************\ + * Graphics +\*********************************************************************************************/ #ifdef USE_GRAPH @@ -2250,7 +2259,6 @@ struct GRAPH { GFLAGS flags; }; - struct GRAPH *graph[NUM_GRAPHS]; #define TICKLEN 4 @@ -2447,6 +2455,7 @@ void Save_graph(uint8_t num, char *path) { fp.print("\n"); fp.close(); } + void Restore_graph(uint8_t num, char *path) { if (!renderer) return; uint16_t index=num%NUM_GRAPHS; @@ -2558,7 +2567,6 @@ void AddGraph(uint8_t num,uint8_t val) { } } - // add next value void AddValue(uint8_t num,float fval) { // not yet defined ??? @@ -2593,7 +2601,12 @@ void AddValue(uint8_t num,float fval) { } #endif // USE_GRAPH +/*********************************************************************************************\ + * Touch panel control +\*********************************************************************************************/ + #if defined(USE_FT5206) || defined(USE_XPT2046) + #ifdef USE_FT5206 #include @@ -2630,7 +2643,7 @@ uint32_t Touch_Status(uint32_t sel) { return 0; } } -#endif +#endif // USE_FT5206 #if defined(USE_XPT2046) && defined(USE_DISPLAY_ILI9341) #include @@ -2664,7 +2677,7 @@ uint32_t Touch_Status(uint32_t sel) { } } -#endif +#endif // USE_XPT2046 && USE_DISPLAY_ILI9341 #ifdef USE_TOUCH_BUTTONS void Touch_MQTT(uint8_t index, const char *cp, uint32_t val) { @@ -2672,7 +2685,7 @@ void Touch_MQTT(uint8_t index, const char *cp, uint32_t val) { ResponseTime_P(PSTR(",\"FT5206\":{\"%s%d\":\"%d\"}}"), cp, index+1, val); #elif defined(USE_XPT2046) ResponseTime_P(PSTR(",\"XPT2046\":{\"%s%d\":\"%d\"}}"), cp, index+1, val); -#endif +#endif // USE_XPT2046 MqttPublishTeleSensor(); } @@ -2688,18 +2701,17 @@ uint8_t tbstate[3]; // check digitizer hit void Touch_Check(void(*rotconvert)(int16_t *x, int16_t *y)) { -uint16_t temp; -uint8_t rbutt=0; -uint8_t vbutt=0; + uint16_t temp; + uint8_t rbutt=0; + uint8_t vbutt=0; - - if (touchp->touched()) { + if (touchp->touched()) { // did find a hit #if defined(USE_FT5206) pLoc = touchp->getPoint(0); #elif defined(USE_XPT2046) pLoc = touchp->getPoint(); -#endif +#endif // USE_XPT2046 if (renderer) { #ifdef USE_M5STACK_CORE2 @@ -2720,7 +2732,7 @@ uint8_t vbutt=0; } xcenter += 100; } -#endif +#endif // USE_M5STACK_CORE2 rotconvert(&pLoc.x, &pLoc.y); @@ -2784,7 +2796,7 @@ uint8_t vbutt=0; //AddLog(LOG_LEVEL_INFO, PSTR("tbut: %d released"), tbut); } } -#endif +#endif // USE_M5STACK_CORE2 for (uint8_t count = 0; count < MAX_TOUCH_BUTTONS; count++) { if (buttons[count]) { if (!buttons[count]->vpower.slider) { @@ -2817,7 +2829,7 @@ uint8_t vbutt=0; } #endif // USE_TOUCH_BUTTONS -#endif // USE_FT5206 +#endif // USE_FT5206 || USE_XPT2046 /*********************************************************************************************\ * Interface @@ -2827,13 +2839,10 @@ bool Xdrv13(uint8_t function) { bool result = false; - if ((TasmotaGlobal.i2c_enabled || TasmotaGlobal.spi_enabled || TasmotaGlobal.soft_spi_enabled) && XdspPresent()) { + if (XdspPresent()) { switch (function) { case FUNC_PRE_INIT: DisplayInitDriver(); -#ifdef USE_GRAPH - for (uint8_t count = 0; count < NUM_GRAPHS; count++) { graph[count] = 0; } -#endif break; case FUNC_EVERY_50_MSECOND: if (Settings.display_model) { XdspCall(FUNC_DISPLAY_EVERY_50_MSECOND); } @@ -2875,4 +2884,3 @@ bool Xdrv13(uint8_t function) } #endif // USE_DISPLAY -#endif // USE_I2C or USE_SPI diff --git a/tasmota/xdsp_01_lcd.ino b/tasmota/xdsp_01_lcd.ino index 8f3a9a779..efb3b542c 100644 --- a/tasmota/xdsp_01_lcd.ino +++ b/tasmota/xdsp_01_lcd.ino @@ -55,8 +55,9 @@ void LcdInit(uint8_t mode) } } -void LcdInitDriver(void) -{ +void LcdInitDriver(void) { + if (!TasmotaGlobal.i2c_enabled) { return; } + if (!Settings.display_model) { if (I2cSetDevice(LCD_ADDRESS1)) { Settings.display_address[0] = LCD_ADDRESS1; diff --git a/tasmota/xdsp_02_ssd1306.ino b/tasmota/xdsp_02_ssd1306.ino index 1698f00f6..03bea26b6 100644 --- a/tasmota/xdsp_02_ssd1306.ino +++ b/tasmota/xdsp_02_ssd1306.ino @@ -47,8 +47,9 @@ extern uint8_t *buffer; /*********************************************************************************************/ -void SSD1306InitDriver(void) -{ +void SSD1306InitDriver(void) { + if (!TasmotaGlobal.i2c_enabled) { return; } + if (!Settings.display_model) { if (I2cSetDevice(OLED_ADDRESS1)) { Settings.display_address[0] = OLED_ADDRESS1; diff --git a/tasmota/xdsp_03_matrix.ino b/tasmota/xdsp_03_matrix.ino index 3b0155a8f..6d20efeec 100644 --- a/tasmota/xdsp_03_matrix.ino +++ b/tasmota/xdsp_03_matrix.ino @@ -194,8 +194,9 @@ void MatrixInit(uint8_t mode) } } -void MatrixInitDriver(void) -{ +void MatrixInitDriver(void) { + if (!TasmotaGlobal.i2c_enabled) { return; } + mtx_buffer = (char*)(malloc(MTX_MAX_SCREEN_BUFFER)); if (mtx_buffer != nullptr) { if (!Settings.display_model) { diff --git a/tasmota/xdsp_07_sh1106.ino b/tasmota/xdsp_07_sh1106.ino index 3ca925932..a4fa94509 100644 --- a/tasmota/xdsp_07_sh1106.ino +++ b/tasmota/xdsp_07_sh1106.ino @@ -48,8 +48,9 @@ Adafruit_SH1106 *oled1106; /*********************************************************************************************/ -void SH1106InitDriver() -{ +void SH1106InitDriver() { + if (!TasmotaGlobal.i2c_enabled) { return; } + if (!Settings.display_model) { if (I2cSetDevice(OLED_ADDRESS1)) { Settings.display_address[0] = OLED_ADDRESS1; diff --git a/tasmota/xdsp_11_sevenseg.ino b/tasmota/xdsp_11_sevenseg.ino index b3bde3149..69342cbbf 100644 --- a/tasmota/xdsp_11_sevenseg.ino +++ b/tasmota/xdsp_11_sevenseg.ino @@ -147,8 +147,9 @@ void SevensegInit(uint8_t mode) } } -void SevensegInitDriver(void) -{ +void SevensegInitDriver(void) { + if (!TasmotaGlobal.i2c_enabled) { return; } + if (!Settings.display_model) { if (I2cSetDevice(Settings.display_address[0])) { Settings.display_model = XDSP_11; From 2f7eefa8f48249b5ef3a957ad10473a5c7e0e7bd Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 17 Mar 2021 17:26:00 +0100 Subject: [PATCH 5/5] Fix some display issues Fix some display issues (#11358) --- tasmota/tasmota_template.h | 3 ++- tasmota/xdrv_13_display.ino | 2 +- tasmota/xdsp_04_ili9341.ino | 13 ++++++------- tasmota/xdsp_interface.ino | 2 -- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index bffb281bf..41df68ff8 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -410,11 +410,13 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_SDCARD_CS), #endif // USE_SDCARD #endif // USE_SPI + AGPIO(GPIO_SSPI_MISO), // Software SPI Master Input Client Output AGPIO(GPIO_SSPI_MOSI), // Software SPI Master Output Client Input AGPIO(GPIO_SSPI_SCLK), // Software SPI Serial Clock AGPIO(GPIO_SSPI_CS), // Software SPI Chip Select AGPIO(GPIO_SSPI_DC), // Software SPI Data or Command + #ifdef USE_DISPLAY #ifdef USE_DISPLAY_ILI9341 AGPIO(GPIO_ILI9341_CS), @@ -422,7 +424,6 @@ const uint16_t kGpioNiceList[] PROGMEM = { #ifdef USE_XPT2046 AGPIO(GPIO_XPT2046_CS), // XPT2046 SPI Chip Select #endif - #endif // USE_DISPLAY_ILI9341 #ifdef USE_DISPLAY_ILI9488 AGPIO(GPIO_ILI9488_CS), diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino index e73b611e4..a3586c14d 100755 --- a/tasmota/xdrv_13_display.ino +++ b/tasmota/xdrv_13_display.ino @@ -1932,7 +1932,7 @@ void CmndDisplayFont(void) void CmndDisplayILIMOde(void) { - if ((XdrvMailbox.payload >= 1) && (XdrvMailbox.payload < 16)) { + if ((XdrvMailbox.payload >= 1) && (XdrvMailbox.payload <= 7)) { Settings.display_options.ilimode = XdrvMailbox.payload; TasmotaGlobal.restart_flag = 2; } diff --git a/tasmota/xdsp_04_ili9341.ino b/tasmota/xdsp_04_ili9341.ino index 599964ab9..737b9376f 100644 --- a/tasmota/xdsp_04_ili9341.ino +++ b/tasmota/xdsp_04_ili9341.ino @@ -23,6 +23,8 @@ #define XDSP_04 4 +enum IliModes { ILIMODE_9341 = 1, ILIMODE_9342, ILIMODE_MAX }; + #include extern uint8_t *buffer; @@ -37,13 +39,10 @@ uint8_t ili9342_ctouch_counter = 0; uint8_t ili9342_ctouch_counter = 0; #endif // USE_FT5206 - bool tft_init_done = false; -#define ILI9341_ID 1 -#define ILI9342_ID 2 -//Settings.display_options.ilimode = ILI9341_ID; +//Settings.display_options.ilimode = ILIMODE_9341; /*********************************************************************************************/ @@ -66,8 +65,8 @@ void ILI9341_InitDriver() // disable screen buffer buffer = NULL; - if (!Settings.display_options.ilimode) { - Settings.display_options.ilimode = ILI9341_ID; + if (!Settings.display_options.ilimode || (Settings.display_options.ilimode >= ILIMODE_MAX)) { + Settings.display_options.ilimode = ILIMODE_9341; } // default colors @@ -102,7 +101,7 @@ void ILI9341_InitDriver() renderer->setTextFont(2); renderer->setTextSize(1); renderer->setTextColor(ILI9341_WHITE, ILI9341_BLACK); - renderer->DrawStringAt(50, (Settings.display_height/2)-12, (Settings.display_options.ilimode & 3)==ILI9341_ID?"ILI9341 TFT!":"ILI9342 TFT!", ILI9341_WHITE, 0); + renderer->DrawStringAt(50, (Settings.display_height/2)-12, (Settings.display_options.ilimode & 3)==ILIMODE_9341?"ILI9341 TFT!":"ILI9342 TFT!", ILI9341_WHITE, 0); delay(1000); #endif // SHOW_SPLASH diff --git a/tasmota/xdsp_interface.ino b/tasmota/xdsp_interface.ino index 3ca49f3d6..d404e169e 100644 --- a/tasmota/xdsp_interface.ino +++ b/tasmota/xdsp_interface.ino @@ -17,7 +17,6 @@ along with this program. If not, see . */ -#if defined(USE_I2C) || defined(USE_SPI) #ifdef USE_DISPLAY #ifdef XFUNC_PTR_IN_ROM @@ -201,4 +200,3 @@ bool XdspCall(uint8_t Function) } #endif // USE_DISPLAY -#endif // USE_I2C or USE_SPI