From 079cf0f2f57e69892e6ebcea3b17cd995c59b5c9 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 5 Mar 2022 15:09:17 +0100 Subject: [PATCH] Prep ADE7880 - Shelly3EM --- I2CDEVICES.md | 1 + tasmota/language/af_AF.h | 1 + tasmota/language/bg_BG.h | 1 + tasmota/language/cs_CZ.h | 1 + tasmota/language/de_DE.h | 1 + tasmota/language/el_GR.h | 1 + tasmota/language/en_GB.h | 5 +- tasmota/language/es_ES.h | 1 + tasmota/language/fr_FR.h | 1 + tasmota/language/fy_NL.h | 1 + tasmota/language/he_HE.h | 1 + tasmota/language/hu_HU.h | 1 + tasmota/language/it_IT.h | 1 + tasmota/language/ko_KO.h | 1 + tasmota/language/nl_NL.h | 1 + tasmota/language/pl_PL.h | 1 + tasmota/language/pt_BR.h | 1 + tasmota/language/pt_PT.h | 1 + tasmota/language/ro_RO.h | 1 + tasmota/language/ru_RU.h | 1 + tasmota/language/sk_SK.h | 1 + tasmota/language/sv_SE.h | 1 + tasmota/language/tr_TR.h | 1 + tasmota/language/uk_UA.h | 1 + tasmota/language/vi_VN.h | 1 + tasmota/language/zh_CN.h | 1 + tasmota/language/zh_TW.h | 1 + tasmota/tasmota_template.h | 5 ++ tasmota/xnrg_23_ade7880.ino | 133 ++++++++++++++++++++++++++++++++++++ 29 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 tasmota/xnrg_23_ade7880.ino diff --git a/I2CDEVICES.md b/I2CDEVICES.md index d411e2a55..a14badcfe 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -98,3 +98,4 @@ Index | Define | Driver | Device | Address(es) | Description 62 | USE_SCD40 | xsns_92 | SCD40 | 0x62 | CO2 sensor Sensirion SCD40/SCD41 63 | USE_HM330X | xsns_93 | HM330X | 0x40 | Particule sensor 64 | USE_HDC2010 | xsns_94 | HDC2010 | 0x40 | Temperature and Humidity sensor + 65 | USE_ADE7880 | xnrg_23 | ADE7880 | 0x38 | Energy monitor diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 8a2c5e5f0..b56aa4beb 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Draai" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Klok" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Gonser" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 41485e29a..82b70438d 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Зумер" #define D_SENSOR_DISP_RESET "Нулиране дисплей" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 2a6f91636..a5a537298 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 2c020ad3e..e457f7507 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 98b58c971..fceb42bd8 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 8de4e9743..f9dc18b83 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" @@ -854,8 +855,8 @@ #define D_GPIO_SHIFT595_RCLK "74x595 RCLK" #define D_GPIO_SHIFT595_OE "74x595 OE" #define D_GPIO_SHIFT595_SER "74x595 SER" -#define D_SENSOR_CM11_TX "CM110x TX" -#define D_SENSOR_CM11_RX "CM110x RX" +#define D_SENSOR_CM11_TX "CM110x TX" +#define D_SENSOR_CM11_RX "CM110x RX" // Units #define D_UNIT_AMPERE "A" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 0831d4c8b..804029e77 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 5671da05d..de929c48e 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE CLK" #define D_SENSOR_HRE_DATA "HRE DAT" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 8305f8aac..e122e17ab 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Zoemer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index e72ff9d8e..329dfedf3 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 702a476e4..8c566a63e 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 256417c3d..f8f824c70 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -730,6 +730,7 @@ #define D_SENSOR_ROTARY "Rotativo" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE - Clock" #define D_SENSOR_HRE_DATA "HRE - Dati" +#define D_SENSOR_ADE7880_IRQ "ADE7880 - IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 - IRQ" #define D_SENSOR_BUZZER "Cicalino" #define D_SENSOR_DISP_RESET "Display - RESET" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 713e3be14..e9228e5f8 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index e4d5e8916..f44ac2d51 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Zoemer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 64b3347d6..f628977f4 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Obroty" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Zegar" #define D_SENSOR_HRE_DATA "HRE Dane" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Dzwonek" #define D_SENSOR_DISP_RESET "Reset Display" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 038d8354d..196d27625 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 932a10650..e96ce05b3 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotativo" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 6c5433891..b6a02c466 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 845bc6f30..c0484512f 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 3b2883bf2..2457d312b 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 38697b695..8b821b66d 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index e76e8076d..d0fc1c40a 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 5e4a99e10..ab5821eed 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Регулятор" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Зуммер" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index f52e6599a..3bf878c1a 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 882d9756e..2014b08e8 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index b7eb80a67..0fc3c3b64 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -732,6 +732,7 @@ #define D_SENSOR_ROTARY "Rotary" // Suffix "1A" #define D_SENSOR_HRE_CLOCK "HRE Clock" #define D_SENSOR_HRE_DATA "HRE Data" +#define D_SENSOR_ADE7880_IRQ "ADE7880 IRQ" #define D_SENSOR_ADE7953_IRQ "ADE7953 IRQ" #define D_SENSOR_BUZZER "Buzzer" #define D_SENSOR_DISP_RESET "Display Rst" diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 3c2ab3902..d5a589bf6 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -183,6 +183,7 @@ enum UserSelectablePins { GPIO_ADC_MQ, // Analog MQ Sensor GPIO_CM11_TXD, GPIO_CM11_RXD, // CM11 Serial interface GPIO_BL6523_TX, GPIO_BL6523_RX, // BL6523 based Watt meter Serial interface + GPIO_ADE7880_IRQ, // ADE7880 IRQ GPIO_SENSOR_END }; enum ProgramSelectablePins { @@ -405,6 +406,7 @@ const char kSensorNames[] PROGMEM = D_SENSOR_ADC_MQ "|" D_SENSOR_CM11_TX "|" D_SENSOR_CM11_RX "|" D_SENSOR_BL6523_TX "|" D_SENSOR_BL6523_RX "|" + D_SENSOR_ADE7880_IRQ "|" ; const char kSensorNamesFixed[] PROGMEM = @@ -697,6 +699,9 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_HLW_CF), // HLW8012 CF power AGPIO(GPIO_HJL_CF), // HJL-01/BL0937 CF power #endif +#if defined(USE_I2C) && defined(USE_ADE7880) + AGPIO(GPIO_ADE7880_IRQ) + 2, // ADE7880 IRQ +#endif #if defined(USE_I2C) && defined(USE_ADE7953) AGPIO(GPIO_ADE7953_IRQ) + 2, // ADE7953 IRQ #endif diff --git a/tasmota/xnrg_23_ade7880.ino b/tasmota/xnrg_23_ade7880.ino new file mode 100644 index 000000000..1a9d40ca3 --- /dev/null +++ b/tasmota/xnrg_23_ade7880.ino @@ -0,0 +1,133 @@ +/* + xnrg_23_ade7880.ino - ADE7880 energy sensor support for Tasmota + + SPDX-FileCopyrightText: 2022 Theo Arends and AndreKR + + SPDX-License-Identifier: GPL-3.0-only +*/ + +#ifdef USE_I2C +#ifdef USE_ENERGY_SENSOR +#ifdef USE_ADE7880 +/*********************************************************************************************\ + * ADE7880 - Energy used in Shelly 3EM + * + * {"NAME":"Shelly 3EM","GPIO":[0,0,0,0,0,8065,0,0,640,8064,608,0,0,0],"FLAG":0,"BASE":18} + * + * Based on datasheet from https://www.analog.com/en/products/ade7880.html + * + * I2C Address: 0x38 +\*********************************************************************************************/ + +#define XNRG_23 23 +#define XI2C_65 65 // See I2CDEVICES.md + +#define ADE7880_ADDR 0x38 + + +int Ade7880RegSize(uint16_t reg) { + int size = 0; +/* + TBD + switch ((reg >> 8) & 0x0F) { + case 0x03: + size++; + case 0x02: + size++; + case 0x01: + size++; + case 0x00: + case 0x07: + case 0x08: + size++; + } +*/ + return size; +} + +void Ade7880Write(uint16_t reg, uint32_t val) { + int size = Ade7880RegSize(reg); + if (size) { + Wire.beginTransmission(ADE7880_ADDR); + Wire.write((reg >> 8) & 0xFF); + Wire.write(reg & 0xFF); + while (size--) { + Wire.write((val >> (8 * size)) & 0xFF); // Write data, MSB first + } + Wire.endTransmission(); + delayMicroseconds(5); // Bus-free time minimum 4.7us + } +} + +int32_t Ade7880Read(uint16_t reg) { + uint32_t response = 0; + + int size = Ade7880RegSize(reg); + if (size) { + Wire.beginTransmission(ADE7880_ADDR); + Wire.write((reg >> 8) & 0xFF); + Wire.write(reg & 0xFF); + Wire.endTransmission(0); + Wire.requestFrom(ADE7880_ADDR, size); + if (size <= Wire.available()) { + for (uint32_t i = 0; i < size; i++) { + response = response << 8 | Wire.read(); // receive DATA (MSB first) + } + } + } + return response; +} + +void Ade7880Init(void) { +// Ade7953Write(0x102, 0x0004); // Locking the communication interface (Clear bit COMM_LOCK), Enable HPF +// Ade7953Write(0x0FE, 0x00AD); // Unlock register 0x120 +// Ade7953Write(0x120, 0x0030); // Configure optimum setting +} + +void Ade7880EnergyEverySecond(void) { + +} + +void Ade7880DrvInit(void) { + if (PinUsed(GPIO_ADE7880_IRQ) && PinUsed(GPIO_ADE7880_IRQ, 1)) { + + + + + } +} + +bool Ade7880Command(void) { + // Will need calibration for all three phases + bool serviced = true; + + + return serviced; +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xnrg23(uint8_t function) { + if (!I2cEnabled(XI2C_07)) { return false; } + + bool result = false; + + switch (function) { + case FUNC_ENERGY_EVERY_SECOND: + Ade7880EnergyEverySecond(); + break; + case FUNC_COMMAND: + result = Ade7880Command(); + break; + case FUNC_PRE_INIT: + Ade7880DrvInit(); + break; + } + return result; +} + +#endif // USE_ADE7880 +#endif // USE_ENERGY_SENSOR +#endif // USE_I2C