From 3f97a5cad6567a8749b90bc1765488598df60433 Mon Sep 17 00:00:00 2001 From: Verkehrsrot Date: Mon, 9 Sep 2019 20:02:21 +0200 Subject: [PATCH] TTGO T-Beam V10 power (AXP192 PMU) fixes --- src/payload.cpp | 2 +- src/power.cpp | 43 ++++++++++++++++++++++--------------------- src/rcommand.cpp | 12 ++++-------- src/senddata.cpp | 5 +++-- 4 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/payload.cpp b/src/payload.cpp index 8afd0b3b..5d167fa1 100644 --- a/src/payload.cpp +++ b/src/payload.cpp @@ -371,7 +371,7 @@ void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime, float celsius, uint32_t mem, uint8_t reset1, uint8_t reset2) { uint16_t temp = celsius * 10; uint16_t volt = voltage / 10; -#ifdef BAT_MEASURE_ADC +#if (defined BAT_MEASURE_ADC || defined HAS_PMU) #if (PAYLOAD_ENCODER == 3) buffer[cursor++] = LPP_BATT_CHANNEL; #endif diff --git a/src/power.cpp b/src/power.cpp index 5c0d93cb..89aac6ae 100644 --- a/src/power.cpp +++ b/src/power.cpp @@ -28,33 +28,34 @@ void AXP192_init(void) { pmu.adc1Enable(AXP202_BATT_CUR_ADC1, 1); /* + // I2C access of AXP202X library currently is not mutexable + // so we need to disable AXP interrupts + - // I2C access of AXP202X library currently is not mutexable - // so we need to disable AXP interrupts - - #ifdef PMU_INT - pinMode(PMU_INT, INPUT_PULLUP); - attachInterrupt(digitalPinToInterrupt(PMU_INT), - [] { - ESP_LOGI(TAG, "Power source changed"); - // put your code here - }, - FALLING); - pmu.enableIRQ(AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | - AXP202_BATT_REMOVED_IRQ | AXP202_BATT_CONNECT_IRQ, - 1); - pmu.clearIRQ(); - #endif // PMU_INT - */ + #ifdef PMU_INT + pinMode(PMU_INT, INPUT_PULLUP); + attachInterrupt(digitalPinToInterrupt(PMU_INT), + [] { + ESP_LOGI(TAG, "Power source changed"); + // put your code here + }, + FALLING); + pmu.enableIRQ(AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | + AXP202_BATT_REMOVED_IRQ | AXP202_BATT_CONNECT_IRQ, + 1); + pmu.clearIRQ(); + #endif // PMU_INT + */ ESP_LOGI(TAG, "AXP192 PMU initialized."); + if (pmu.isBatteryConnect()) if (pmu.isChargeing()) - ESP_LOGI(TAG, "Running on battery, charging."); + ESP_LOGI(TAG, "Battery deteced, charging."); else - ESP_LOGI(TAG, "Running on battery, not charging."); - else if (pmu.isVBUSPlug()) - ESP_LOGI(TAG, "Running on USB power."); + ESP_LOGI(TAG, "Battery deteced, not charging."); + else + ESP_LOGI(TAG, "No Battery deteced."); } I2C_MUTEX_UNLOCK(); // release i2c bus access } else diff --git a/src/rcommand.cpp b/src/rcommand.cpp index a5cca590..a74aa770 100644 --- a/src/rcommand.cpp +++ b/src/rcommand.cpp @@ -263,14 +263,10 @@ void get_config(uint8_t val[]) { void get_status(uint8_t val[]) { ESP_LOGI(TAG, "Remote command: get device status"); -#ifdef BAT_MEASURE_ADC - uint16_t voltage = read_voltage(); -#else - uint16_t voltage = 0; -#endif payload.reset(); - payload.addStatus(voltage, uptime() / 1000, temperatureRead(), getFreeRAM(), - rtc_get_reset_reason(0), rtc_get_reset_reason(1)); + payload.addStatus(read_voltage(), uptime() / 1000, temperatureRead(), + getFreeRAM(), rtc_get_reset_reason(0), + rtc_get_reset_reason(1)); SendPayload(STATUSPORT, prio_high); }; @@ -300,7 +296,7 @@ void get_bme(uint8_t val[]) { void get_batt(uint8_t val[]) { ESP_LOGI(TAG, "Remote command: get battery voltage"); -#ifdef BAT_MEASURE_ADC +#if (defined BAT_MEASURE_ADC || defined HAS_PMU) payload.reset(); payload.addVoltage(read_voltage()); SendPayload(BATTPORT, prio_normal); diff --git a/src/senddata.cpp b/src/senddata.cpp index 5e209faf..76d412e2 100644 --- a/src/senddata.cpp +++ b/src/senddata.cpp @@ -10,7 +10,8 @@ void sendcycle() { // put data to send in RTos Queues used for transmit over channels Lora and SPI void SendPayload(uint8_t port, sendprio_t prio) { - MessageBuffer_t SendBuffer; // contains MessageSize, MessagePort, MessagePrio, Message[] + MessageBuffer_t + SendBuffer; // contains MessageSize, MessagePort, MessagePrio, Message[] SendBuffer.MessageSize = payload.getSize(); SendBuffer.MessagePrio = prio; @@ -117,7 +118,7 @@ void sendData() { break; #endif -#ifdef BAT_MEASURE_ADC +#if (defined BAT_MEASURE_ADC || defined HAS_PMU) case BATT_DATA: payload.reset(); payload.addVoltage(read_voltage());