improved task synchronization

This commit is contained in:
sharandac
2020-07-27 09:15:04 +02:00
parent 8ca3f25292
commit 72739a569e
13 changed files with 107 additions and 65 deletions

View File

@@ -62,7 +62,7 @@ void powermgm_loop( TTGOClass *ttgo ) {
// if we are in standby, wake up
if ( powermgm_get_event( POWERMGM_STANDBY ) ) {
powermgm_clear_event( POWERMGM_STANDBY );
ttgo->power->setDCDC3Voltage( 3000 );
ttgo->power->setDCDC3Voltage( 3300 );
ttgo->openBL();
ttgo->displayWakeup();
ttgo->bl->adjust( 0 );
@@ -81,12 +81,12 @@ void powermgm_loop( TTGOClass *ttgo ) {
ttgo->displaySleep();
ttgo->closeBL();
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 ) ) {}
while( powermgm_get_event( POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ON_REQUEST | POWERMGM_WIFI_SCAN ) ) { yield(); }
ttgo->stopLvglTick();
if ( bma_get_config( BMA_STEPCOUNTER ) )
ttgo->bma->enableStepCountInterrupt( false );
powermgm_set_event( POWERMGM_STANDBY );
ttgo->power->setDCDC3Voltage( 2600 );
ttgo->power->setDCDC3Voltage( 3000 );
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);

View File

@@ -25,14 +25,16 @@
#include "TTGO.h"
#define POWERMGM_STANDBY _BV(0)
#define POWERMGM_PMU_BUTTON _BV(1)
#define POWERMGM_PMU_BATTERY _BV(2)
#define POWERMGM_BMA_WAKEUP _BV(3)
#define POWERMGM_WIFI_ON_REQUEST _BV(5)
#define POWERMGM_WIFI_OFF_REQUEST _BV(6)
#define POWERMGM_WIFI_ACTIVE _BV(7)
#define POWERMGM_WIFI_SCAN _BV(8)
#define POWERMGM_WIFI_CONNECTED _BV(9)
#define POWERMGM_SILENCE_WAKEUP _BV(1)
#define POWERMGM_PMU_BUTTON _BV(2)
#define POWERMGM_PMU_BATTERY _BV(3)
#define POWERMGM_PMU_ALARM _BV(4)
#define POWERMGM_BMA_WAKEUP _BV(5)
#define POWERMGM_WIFI_ON_REQUEST _BV(6)
#define POWERMGM_WIFI_OFF_REQUEST _BV(7)
#define POWERMGM_WIFI_ACTIVE _BV(8)
#define POWERMGM_WIFI_SCAN _BV(9)
#define POWERMGM_WIFI_CONNECTED _BV(10)
/*
* @brief setp power managment, coordinate managment beween CPU, wifictl, pmu, bma, display, backlight and lvgl

View File

@@ -35,8 +35,13 @@ void timesync_setup( TTGOClass *ttgo ) {
WiFi.onEvent( [](WiFiEvent_t event, WiFiEventInfo_t info) {
if ( timesync_config.timesync ) {
xEventGroupSetBits( time_event_handle, TIME_SYNC_REQUEST );
vTaskResume( _timesync_Task );
if ( xEventGroupGetBits( time_event_handle ) & TIME_SYNC_REQUEST ) {
return;
}
else {
xEventGroupSetBits( time_event_handle, TIME_SYNC_REQUEST );
vTaskResume( _timesync_Task );
}
}
}, WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP );

View File

@@ -118,14 +118,12 @@ void wifictl_setup( void ) {
}, WiFiEvent_t::SYSTEM_EVENT_STA_STOP );
// start Wifo controll task
xTaskCreatePinnedToCore(
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. */
1 ); /* Core where the task should run */
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. */
}
/*
@@ -225,8 +223,13 @@ bool wifictl_insert_network( const char *ssid, const char *password ) {
void wifictl_on( void ) {
if ( wifi_init == false )
return;
vTaskResume( _wifictl_Task );
powermgm_set_event( POWERMGM_WIFI_ON_REQUEST );
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 );
}
}
/*
@@ -235,8 +238,13 @@ void wifictl_on( void ) {
void wifictl_off( void ) {
if ( wifi_init == false )
return;
vTaskResume( _wifictl_Task );
powermgm_set_event( POWERMGM_WIFI_OFF_REQUEST );
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 );
}
}
/*