cleanup powermgm and add haptic feedback

This commit is contained in:
sharandac
2020-08-03 09:04:33 +02:00
parent 69b9a54408
commit ae45eac491
24 changed files with 168 additions and 125 deletions

View File

@@ -65,6 +65,20 @@ void bma_setup( TTGOClass *ttgo ) {
bma_reload_settings();
}
void bma_standby( void ) {
TTGOClass *ttgo = TTGOClass::getWatch();
if ( bma_get_config( BMA_STEPCOUNTER ) )
ttgo->bma->enableStepCountInterrupt( false );
}
void bma_wakeup( void ) {
TTGOClass *ttgo = TTGOClass::getWatch();
if ( bma_get_config( BMA_STEPCOUNTER ) )
ttgo->bma->enableStepCountInterrupt( true );
}
/*
*
*/

View File

@@ -38,7 +38,8 @@
void bma_setup( TTGOClass *ttgo );
void bma_loop( TTGOClass *ttgo );
void bma_standby( void );
void bma_wakeup( void );
void bma_reload_settings( void );
void bma_save_config( void );
void bma_read_config( void );

View File

@@ -24,6 +24,7 @@
#include "display.h"
#include "powermgm.h"
#include "motor.h"
display_config_t display_config;
@@ -66,29 +67,41 @@ void display_loop( TTGOClass *ttgo ) {
}
}
void display_go_wakeup( TTGOClass *ttgo ) {
ttgo->openBL();
ttgo->displayWakeup();
ttgo->bl->adjust( 0 );
brightness = 0;
dest_brightness = display_get_brightness();
}
void display_standby( void ) {
TTGOClass *ttgo = TTGOClass::getWatch();
void display_go_silence_wakeup( TTGOClass *ttgo ) {
ttgo->openBL();
ttgo->displayWakeup();
ttgo->bl->adjust( 0 );
brightness = 0;
dest_brightness = 0;
}
void display_go_sleep( TTGOClass *ttgo ) {
ttgo->bl->adjust( 0 );
ttgo->displaySleep();
ttgo->closeBL();
brightness = 0;
dest_brightness = 0;
}
void display_wakeup( void ) {
TTGOClass *ttgo = TTGOClass::getWatch();
// normal wake up from standby
if ( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP ) ) {
log_i("wakeup");
ttgo->openBL();
ttgo->displayWakeup();
ttgo->bl->adjust( 0 );
brightness = 0;
dest_brightness = display_get_brightness();
motor_vibe( 1 );
}
// silence wakeup request from standby
else if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP_REQUEST ) ) {
log_i("silence wakeup");
ttgo->openBL();
ttgo->displayWakeup();
ttgo->bl->adjust( 0 );
brightness = 0;
dest_brightness = 0;
powermgm_set_event( POWERMGM_SILENCE_WAKEUP );
}
}
/*
*
*/

View File

@@ -95,8 +95,14 @@
* @param rotation from 0-270 in 90 degree steps
*/
void display_set_rotation( uint32_t rotation );
void display_go_silence_wakeup( TTGOClass *ttgo );
void display_go_wakeup( TTGOClass *ttgo );
void display_go_sleep( TTGOClass *ttgo );
/*
* @brief set display into standby
*/
void display_standby( void );
/*
* @brief set display into normal mode or leave it in standby if a silence wakeup occur
*/
void display_wakeup( void );
#endif // _DISPLAY_H

View File

@@ -2,6 +2,7 @@
#include <TTGO.h>
#include <soc/rtc.h>
#include "display.h"
#include "pmu.h"
#include "powermgm.h"
#include "motor.h"
@@ -66,6 +67,37 @@ void IRAM_ATTR pmu_irq( void ) {
setCpuFrequencyMhz(240);
}
void pmu_standby( void ) {
TTGOClass *ttgo = TTGOClass::getWatch();
ttgo->power->clearTimerStatus();
ttgo->power->setTimer( 60 );
if ( pmu_get_experimental_power_save() ) {
ttgo->power->setDCDC3Voltage( 2700 );
log_i("enable 2.7V standby voltage");
}
else {
ttgo->power->setDCDC3Voltage( 3000 );
log_i("enable 3.0V standby voltage");
}
}
void pmu_wakeup( void ) {
TTGOClass *ttgo = TTGOClass::getWatch();
if ( pmu_get_experimental_power_save() ) {
ttgo->power->setDCDC3Voltage( 3000 );
log_i("enable 3.0V voltage");
}
else {
ttgo->power->setDCDC3Voltage( 3300 );
log_i("enable 3.3V voltage");
}
ttgo->power->clearTimerStatus();
ttgo->power->offTimer();
}
/*
*
*/
@@ -185,5 +217,4 @@ int32_t pmu_get_battery_percent( TTGOClass *ttgo ) {
else {
return( ttgo->power->getBattPercentage() );
}
// discharg coulumb higher then charge coulumb, battery state unknow and set to zero
}

View File

@@ -54,6 +54,8 @@
* @return charge in percent or -1 if unknown
*/
int32_t pmu_get_battery_percent( TTGOClass *ttgo );
void pmu_standby( void );
void pmu_wakeup( void );
void pmu_save_config( void );
void pmu_read_config( void );
bool pmu_get_calculated_percent( void );

View File

@@ -70,64 +70,36 @@ void powermgm_loop( TTGOClass *ttgo ) {
if ( powermgm_get_event( POWERMGM_STANDBY ) ) {
powermgm_clear_event( POWERMGM_STANDBY );
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");
display_go_wakeup( ttgo );
motor_vibe( 1 );
}
// silence wakeup request from standby
else if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP_REQUEST ) ) {
log_i("silence wakeup");
display_go_silence_wakeup( ttgo );
powermgm_set_event( POWERMGM_SILENCE_WAKEUP );
}
pmu_wakeup();
bma_wakeup();
display_wakeup();
timesyncToSystem();
ttgo->startLvglTick();
mainbar_jump_to_maintile( LV_ANIM_OFF );
lv_disp_trig_activity(NULL);
if ( bma_get_config( BMA_STEPCOUNTER ) )
ttgo->bma->enableStepCountInterrupt( true );
if ( ttgo->power->getBattVoltage() > 3300 ) {
wifictl_on();
}
ttgo->power->clearTimerStatus();
ttgo->power->offTimer();
wifictl_wakeup();
log_i("go wakeup");
}
else {
log_i("go to standby");
display_go_sleep( ttgo );
timesyncToRTC();
if ( powermgm_get_event( POWERMGM_WIFI_ACTIVE ) ) wifictl_off();
while( powermgm_get_event( POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ON_REQUEST | POWERMGM_WIFI_SCAN ) ) { yield(); }
log_i("go standby");
display_standby();
mainbar_jump_to_maintile( LV_ANIM_OFF );
ttgo->stopLvglTick();
if ( bma_get_config( BMA_STEPCOUNTER ) )
ttgo->bma->enableStepCountInterrupt( false );
timesyncToRTC();
bma_standby();
pmu_standby();
wifictl_standby();
powermgm_set_event( POWERMGM_STANDBY );
powermgm_clear_event( POWERMGM_SILENCE_WAKEUP );
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);
gpio_wakeup_enable ( (gpio_num_t)AXP202_INT, GPIO_INTR_LOW_LEVEL );
gpio_wakeup_enable ( (gpio_num_t)BMA423_INT1, GPIO_INTR_HIGH_LEVEL );
esp_sleep_enable_gpio_wakeup ();
esp_light_sleep_start();
}

View File

@@ -22,6 +22,7 @@
#include "config.h"
#include "touch.h"
#include "powermgm.h"
#include "motor.h"
lv_indev_t *touch_indev = NULL;
@@ -37,6 +38,7 @@ void touch_setup( TTGOClass *ttgo ) {
static bool touch_getXY( int16_t &x, int16_t &y ) {
TTGOClass *ttgo = TTGOClass::getWatch();
TP_Point p;
static bool touch_press = false;
// disable touch when we are in standby or silence wakeup
if ( powermgm_get_event( POWERMGM_STANDBY | POWERMGM_SILENCE_WAKEUP ) ) {
@@ -44,9 +46,15 @@ static bool touch_getXY( int16_t &x, int16_t &y ) {
}
if ( !ttgo->touch->touched() ) {
touch_press = false;
return( false );
}
if ( !touch_press ) {
touch_press = true;
motor_vibe( 2 );
}
p = ttgo->touch->getPoint();
uint8_t rotation = ttgo->tft->getRotation();

View File

@@ -31,7 +31,6 @@
#include "webserver/webserver.h"
bool wifi_init = false;
TaskHandle_t _WIFICTL_Task;
void wifictl_StartTask( void );
void wifictl_Task( void * pvParameters );
@@ -128,7 +127,8 @@ void wifictl_setup( void ) {
5000, /* Stack size in words */
NULL, /* Task input parameter */
1, /* Priority of the task */
&_wifictl_Task ); /* Task handle. */
&_wifictl_Task ); /* Task handle. */
vTaskSuspend( _wifictl_Task );
}
/*
@@ -263,6 +263,14 @@ void wifictl_off( void ) {
}
}
void wifictl_standby( void ) {
if ( powermgm_get_event( POWERMGM_WIFI_ACTIVE ) ) wifictl_off();
while( powermgm_get_event( POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ON_REQUEST | POWERMGM_WIFI_SCAN ) ) { yield(); }
}
void wifictl_wakeup( void ) {
wifictl_on();
}
/*
*
*/
@@ -271,7 +279,7 @@ void wifictl_Task( void * pvParameters ) {
return;
while ( true ) {
vTaskDelay( 100 );
vTaskDelay( 500 );
if ( powermgm_get_event( POWERMGM_WIFI_ON_REQUEST ) ) {
statusbar_wifi_set_state( true, "activate" );
WiFi.mode( WIFI_STA );

View File

@@ -66,5 +66,7 @@
* @brief switch off wifi
*/
void wifictl_off( void );
void wifictl_standby( void );
void wifictl_wakeup( void );
#endif // _WIFICTL_H