add update and battery settings
This commit is contained in:
@@ -29,11 +29,13 @@
|
||||
#include "gui/statusbar.h"
|
||||
|
||||
EventGroupHandle_t bma_event_handle = NULL;
|
||||
|
||||
void IRAM_ATTR bma_irq( void );
|
||||
|
||||
bma_config_t bma_config[ BMA_CONFIG_NUM ];
|
||||
|
||||
__NOINIT_ATTR uint32_t stepcounter_valid;
|
||||
__NOINIT_ATTR uint32_t stepcounter;
|
||||
|
||||
void IRAM_ATTR bma_irq( void );
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
@@ -45,6 +47,12 @@ void bma_setup( TTGOClass *ttgo ) {
|
||||
bma_config[ i ].enable = true;
|
||||
}
|
||||
|
||||
if ( stepcounter_valid != 0xa5a5a5a5 ) {
|
||||
stepcounter = 0;
|
||||
stepcounter_valid = 0xa5a5a5a5;
|
||||
log_e("stepcounter not valid. reset");
|
||||
}
|
||||
|
||||
bma_read_config();
|
||||
|
||||
ttgo->bma->begin();
|
||||
@@ -101,7 +109,8 @@ void bma_loop( TTGOClass *ttgo ) {
|
||||
}
|
||||
|
||||
if ( !powermgm_get_event( POWERMGM_STANDBY ) && xEventGroupGetBitsFromISR( bma_event_handle ) & BMA_EVENT_INT ) {
|
||||
statusbar_update_stepcounter( ttgo->bma->getCounter() );
|
||||
stepcounter =+ ttgo->bma->getCounter();
|
||||
statusbar_update_stepcounter( stepcounter );
|
||||
xEventGroupClearBitsFromISR( bma_event_handle, BMA_EVENT_INT );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#define DISPLAY_MIN_TIMEOUT 15
|
||||
#define DISPLAY_MAX_TIMEOUT 300
|
||||
|
||||
#define DISPLAY_MIN_BRIGHTNESS 32
|
||||
#define DISPLAY_MIN_BRIGHTNESS 8
|
||||
#define DISPLAY_MAX_BRIGHTNESS 255
|
||||
|
||||
#define DISPLAY_MIN_ROTATE 0
|
||||
|
||||
@@ -12,12 +12,16 @@ EventGroupHandle_t pmu_event_handle = NULL;
|
||||
|
||||
void IRAM_ATTR pmu_irq( void );
|
||||
|
||||
pmu_config_t pmu_config;
|
||||
|
||||
/*
|
||||
* init the pmu: AXP202
|
||||
*/
|
||||
void pmu_setup( TTGOClass *ttgo ) {
|
||||
pmu_event_handle = xEventGroupCreate();
|
||||
|
||||
pmu_read_config();
|
||||
|
||||
// Turn on the IRQ used
|
||||
ttgo->power->adc1Enable( AXP202_BATT_VOL_ADC1 | AXP202_BATT_CUR_ADC1 | AXP202_VBUS_VOL_ADC1 | AXP202_VBUS_CUR_ADC1, AXP202_ON);
|
||||
ttgo->power->enableIRQ( AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_CHARGING_FINISHED_IRQ | AXP202_TIMER_TIMEOUT_IRQ, AXP202_ON );
|
||||
@@ -62,6 +66,61 @@ void IRAM_ATTR pmu_irq( void ) {
|
||||
setCpuFrequencyMhz(240);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
void pmu_save_config( void ) {
|
||||
fs::File file = SPIFFS.open( PMU_CONFIG_FILE, FILE_WRITE );
|
||||
|
||||
if ( !file ) {
|
||||
log_e("Can't save file: %s", PMU_CONFIG_FILE );
|
||||
}
|
||||
else {
|
||||
file.write( (uint8_t *)&pmu_config, sizeof( pmu_config ) );
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
void pmu_read_config( void ) {
|
||||
fs::File file = SPIFFS.open( PMU_CONFIG_FILE, FILE_READ );
|
||||
|
||||
if (!file) {
|
||||
log_e("Can't open file: %s!", PMU_CONFIG_FILE );
|
||||
}
|
||||
else {
|
||||
int filesize = file.size();
|
||||
if ( filesize > sizeof( pmu_config ) ) {
|
||||
log_e("Failed to read configfile. Wrong filesize!" );
|
||||
}
|
||||
else {
|
||||
file.read( (uint8_t *)&pmu_config, filesize );
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool pmu_get_calculated_percent( void ) {
|
||||
return( pmu_config.compute_percent );
|
||||
}
|
||||
|
||||
bool pmu_get_experimental_power_save( void ) {
|
||||
return( pmu_config.experimental_power_save );
|
||||
}
|
||||
|
||||
void pmu_set_calculated_percent( bool value ) {
|
||||
pmu_config.compute_percent = value;
|
||||
pmu_save_config();
|
||||
}
|
||||
|
||||
void pmu_set_experimental_power_save( bool value ) {
|
||||
pmu_config.experimental_power_save = value;
|
||||
pmu_save_config();
|
||||
}
|
||||
|
||||
/*
|
||||
* loop routine for handling IRQ in main loop
|
||||
*/
|
||||
@@ -110,16 +169,21 @@ void pmu_loop( TTGOClass *ttgo ) {
|
||||
if ( !powermgm_get_event( POWERMGM_STANDBY ) ) {
|
||||
if ( nextmillis < millis() || updatetrigger == true ) {
|
||||
nextmillis = millis() + 1000;
|
||||
statusbar_update_battery( pmu_get_byttery_percent( ttgo ), ttgo->power->isChargeing(), ttgo->power->isVBUSPlug() );
|
||||
statusbar_update_battery( pmu_get_battery_percent( ttgo ), ttgo->power->isChargeing(), ttgo->power->isVBUSPlug() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t pmu_get_byttery_percent( TTGOClass *ttgo ) {
|
||||
// discharg coulumb higher then charge coulumb, battery state unknow and set to zero
|
||||
if ( ttgo->power->getBattChargeCoulomb() < ttgo->power->getBattDischargeCoulomb() || ttgo->power->getBattVoltage() < 3200 ) {
|
||||
ttgo->power->ClearCoulombcounter();
|
||||
return( -1 );
|
||||
int32_t pmu_get_battery_percent( TTGOClass *ttgo ) {
|
||||
if ( pmu_get_calculated_percent() ) {
|
||||
if ( ttgo->power->getBattChargeCoulomb() < ttgo->power->getBattDischargeCoulomb() || ttgo->power->getBattVoltage() < 3200 ) {
|
||||
ttgo->power->ClearCoulombcounter();
|
||||
return( -1 );
|
||||
}
|
||||
return( ( ttgo->power->getCoulombData() / PMU_BATTERY_CAP ) * 100 );
|
||||
}
|
||||
return( ( ttgo->power->getCoulombData() / PMU_BATTERY_CAP ) * 100 );
|
||||
else {
|
||||
return( ttgo->power->getBattPercentage() );
|
||||
}
|
||||
// discharg coulumb higher then charge coulumb, battery state unknow and set to zero
|
||||
}
|
||||
@@ -26,6 +26,13 @@
|
||||
|
||||
#define PMU_BATTERY_CAP 300
|
||||
|
||||
#define PMU_CONFIG_FILE "/pmu.cfg"
|
||||
|
||||
typedef struct {
|
||||
bool compute_percent = false;
|
||||
bool experimental_power_save = false;
|
||||
} pmu_config_t;
|
||||
|
||||
/*
|
||||
* @brief setup pmu: axp202
|
||||
*
|
||||
@@ -46,6 +53,12 @@
|
||||
*
|
||||
* @return charge in percent or -1 if unknown
|
||||
*/
|
||||
uint32_t pmu_get_byttery_percent( TTGOClass *ttgo );
|
||||
int32_t pmu_get_battery_percent( TTGOClass *ttgo );
|
||||
void pmu_save_config( void );
|
||||
void pmu_read_config( void );
|
||||
bool pmu_get_calculated_percent( void );
|
||||
bool pmu_get_experimental_power_save( void );
|
||||
void pmu_set_calculated_percent( bool value );
|
||||
void pmu_set_experimental_power_save( bool value );
|
||||
|
||||
#endif // _PMU_H
|
||||
@@ -70,7 +70,14 @@ void powermgm_loop( TTGOClass *ttgo ) {
|
||||
|
||||
if ( powermgm_get_event( POWERMGM_STANDBY ) ) {
|
||||
powermgm_clear_event( POWERMGM_STANDBY );
|
||||
ttgo->power->setDCDC3Voltage( 3300 );
|
||||
if ( pmu_get_experimental_power_save() ) {
|
||||
ttgo->power->setDCDC3Voltage( 3000 );
|
||||
log_e("enable 3.0V voltage");
|
||||
}
|
||||
else {
|
||||
ttgo->power->setDCDC3Voltage( 3300 );
|
||||
log_e("enable 3.3V voltage");
|
||||
}
|
||||
// normal wake up from standby
|
||||
if ( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP ) ) {
|
||||
log_i("wakeup");
|
||||
@@ -89,7 +96,11 @@ void powermgm_loop( TTGOClass *ttgo ) {
|
||||
lv_disp_trig_activity(NULL);
|
||||
if ( bma_get_config( BMA_STEPCOUNTER ) )
|
||||
ttgo->bma->enableStepCountInterrupt( true );
|
||||
wifictl_on();
|
||||
|
||||
if ( ttgo->power->getBattVoltage() > 3300 ) {
|
||||
wifictl_on();
|
||||
}
|
||||
|
||||
ttgo->power->clearTimerStatus();
|
||||
ttgo->power->offTimer();
|
||||
}
|
||||
@@ -104,9 +115,16 @@ void powermgm_loop( TTGOClass *ttgo ) {
|
||||
ttgo->bma->enableStepCountInterrupt( false );
|
||||
powermgm_set_event( POWERMGM_STANDBY );
|
||||
powermgm_clear_event( POWERMGM_SILENCE_WAKEUP );
|
||||
ttgo->power->setDCDC3Voltage( 3000 );
|
||||
ttgo->power->clearTimerStatus();
|
||||
ttgo->power->setTimer( 60 );
|
||||
if ( pmu_get_experimental_power_save() ) {
|
||||
ttgo->power->setDCDC3Voltage( 2700 );
|
||||
log_e("enable 2.7V standby voltage");
|
||||
}
|
||||
else {
|
||||
ttgo->power->setDCDC3Voltage( 3000 );
|
||||
log_e("enable 3.0V standby voltage");
|
||||
}
|
||||
setCpuFrequencyMhz( 10 );
|
||||
gpio_wakeup_enable ((gpio_num_t)AXP202_INT, GPIO_INTR_LOW_LEVEL);
|
||||
gpio_wakeup_enable ((gpio_num_t)BMA423_INT1, GPIO_INTR_HIGH_LEVEL);
|
||||
|
||||
@@ -52,6 +52,7 @@ void wifictl_Task( void * pvParameters );
|
||||
void wifictl_setup( void ) {
|
||||
if ( wifi_init == true )
|
||||
return;
|
||||
|
||||
wifi_init = true;
|
||||
powermgm_clear_event( POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ON_REQUEST | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_SCAN );
|
||||
|
||||
@@ -122,14 +123,6 @@ void wifictl_setup( void ) {
|
||||
statusbar_hide_icon( STATUSBAR_WIFI );
|
||||
statusbar_wifi_set_state( false, "" );
|
||||
}, WiFiEvent_t::SYSTEM_EVENT_STA_STOP );
|
||||
|
||||
// start Wifo controll task
|
||||
xTaskCreate( wifictl_Task, /* Function to implement the task */
|
||||
"wifictl Task", /* Name of the task */
|
||||
2000, /* Stack size in words */
|
||||
NULL, /* Task input parameter */
|
||||
1, /* Priority of the task */
|
||||
&_wifictl_Task ); /* Task handle. */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -172,6 +165,9 @@ void wifictl_load_network( void ) {
|
||||
*
|
||||
*/
|
||||
bool wifictl_is_known( const char* networkname ) {
|
||||
if ( wifi_init == false )
|
||||
return( false );
|
||||
|
||||
for( int entry = 0 ; entry < NETWORKLIST_ENTRYS; entry++ ) {
|
||||
if( !strcmp( networkname, wifictl_networklist[ entry ].ssid ) ) {
|
||||
return( true );
|
||||
@@ -184,6 +180,9 @@ bool wifictl_is_known( const char* networkname ) {
|
||||
*
|
||||
*/
|
||||
bool wifictl_delete_network( const char *ssid ) {
|
||||
if ( wifi_init == false )
|
||||
return( false );
|
||||
|
||||
for( int entry = 0 ; entry < NETWORKLIST_ENTRYS; entry++ ) {
|
||||
if( !strcmp( ssid, wifictl_networklist[ entry ].ssid ) ) {
|
||||
wifictl_networklist[ entry ].ssid[ 0 ] = '\0';
|
||||
@@ -199,6 +198,9 @@ bool wifictl_delete_network( const char *ssid ) {
|
||||
*
|
||||
*/
|
||||
bool wifictl_insert_network( const char *ssid, const char *password ) {
|
||||
if ( wifi_init == false )
|
||||
return( false );
|
||||
|
||||
// check if existin
|
||||
for( int entry = 0 ; entry < NETWORKLIST_ENTRYS; entry++ ) {
|
||||
if( !strcmp( ssid, wifictl_networklist[ entry ].ssid ) ) {
|
||||
@@ -229,13 +231,19 @@ bool wifictl_insert_network( const char *ssid, const char *password ) {
|
||||
void wifictl_on( void ) {
|
||||
if ( wifi_init == false )
|
||||
return;
|
||||
if ( powermgm_get_event( POWERMGM_WIFI_OFF_REQUEST ) || powermgm_get_event( POWERMGM_WIFI_ON_REQUEST )) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
powermgm_set_event( POWERMGM_WIFI_ON_REQUEST );
|
||||
vTaskResume( _wifictl_Task );
|
||||
}
|
||||
|
||||
if ( powermgm_get_event( POWERMGM_WIFI_OFF_REQUEST ) || powermgm_get_event( POWERMGM_WIFI_ON_REQUEST )) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
powermgm_set_event( POWERMGM_WIFI_ON_REQUEST );
|
||||
xTaskCreate( wifictl_Task, /* Function to implement the task */
|
||||
"wifictl Task", /* Name of the task */
|
||||
2000, /* Stack size in words */
|
||||
NULL, /* Task input parameter */
|
||||
1, /* Priority of the task */
|
||||
&_wifictl_Task ); /* Task handle. */
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -244,13 +252,19 @@ void wifictl_on( void ) {
|
||||
void wifictl_off( void ) {
|
||||
if ( wifi_init == false )
|
||||
return;
|
||||
if ( powermgm_get_event( POWERMGM_WIFI_OFF_REQUEST ) || powermgm_get_event( POWERMGM_WIFI_ON_REQUEST )) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
powermgm_set_event( POWERMGM_WIFI_OFF_REQUEST );
|
||||
vTaskResume( _wifictl_Task );
|
||||
}
|
||||
|
||||
if ( powermgm_get_event( POWERMGM_WIFI_OFF_REQUEST ) || powermgm_get_event( POWERMGM_WIFI_ON_REQUEST )) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
powermgm_set_event( POWERMGM_WIFI_OFF_REQUEST );
|
||||
xTaskCreate( wifictl_Task, /* Function to implement the task */
|
||||
"wifictl Task", /* Name of the task */
|
||||
2000, /* Stack size in words */
|
||||
NULL, /* Task input parameter */
|
||||
1, /* Priority of the task */
|
||||
&_wifictl_Task ); /* Task handle. */
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -260,19 +274,16 @@ void wifictl_Task( void * pvParameters ) {
|
||||
if ( wifi_init == false )
|
||||
return;
|
||||
|
||||
while( true ) {
|
||||
vTaskDelay( 125 );
|
||||
if ( powermgm_get_event( POWERMGM_WIFI_ON_REQUEST ) ) {
|
||||
statusbar_wifi_set_state( true, "activate" );
|
||||
WiFi.mode( WIFI_STA );
|
||||
powermgm_clear_event( POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_SCAN | POWERMGM_WIFI_ON_REQUEST );
|
||||
}
|
||||
else if ( powermgm_get_event( POWERMGM_WIFI_OFF_REQUEST ) ) {
|
||||
statusbar_wifi_set_state( false, "" );
|
||||
WiFi.mode( WIFI_OFF );
|
||||
esp_wifi_stop();
|
||||
powermgm_clear_event( POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_SCAN | POWERMGM_WIFI_ON_REQUEST );
|
||||
}
|
||||
vTaskSuspend( _wifictl_Task );
|
||||
if ( powermgm_get_event( POWERMGM_WIFI_ON_REQUEST ) ) {
|
||||
statusbar_wifi_set_state( true, "activate" );
|
||||
WiFi.mode( WIFI_STA );
|
||||
powermgm_clear_event( POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_SCAN | POWERMGM_WIFI_ON_REQUEST );
|
||||
}
|
||||
else if ( powermgm_get_event( POWERMGM_WIFI_OFF_REQUEST ) ) {
|
||||
statusbar_wifi_set_state( false, "" );
|
||||
WiFi.mode( WIFI_OFF );
|
||||
esp_wifi_stop();
|
||||
powermgm_clear_event( POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_SCAN | POWERMGM_WIFI_ON_REQUEST );
|
||||
}
|
||||
vTaskDelete( NULL );
|
||||
}
|
||||
Reference in New Issue
Block a user