bt call and pairing dialog. powermgm refactoring
This commit is contained in:
@@ -42,12 +42,16 @@ portMUX_TYPE blectlMux = portMUX_INITIALIZER_UNLOCKED;
|
||||
|
||||
blectl_config_t blectl_config;
|
||||
|
||||
blectl_event_t *blectl_event_cb_table = NULL;
|
||||
uint32_t blectl_event_cb_entrys = 0;
|
||||
void blectl_send_event_cb( EventBits_t event, char *msg );
|
||||
|
||||
BLEServer *pServer = NULL;
|
||||
BLECharacteristic *pTxCharacteristic;
|
||||
uint8_t txValue = 0;
|
||||
|
||||
#define MAX_MESSAGE_SIZE 512
|
||||
String message;
|
||||
char *gadgetbridge_msg = NULL;
|
||||
uint32_t gadgetbridge_msg_size = 0;
|
||||
|
||||
/*
|
||||
*
|
||||
@@ -55,13 +59,15 @@ String message;
|
||||
class BleCtlServerCallbacks: public BLEServerCallbacks {
|
||||
void onConnect(BLEServer* pServer) {
|
||||
blectl_set_event( BLECTL_CONNECT );
|
||||
statusbar_style_icon( STATUSBAR_BLUETOOTH, STATUSBAR_STYLE_WHITE );
|
||||
blectl_clear_event( BLECTL_DISCONNECT );
|
||||
blectl_send_event_cb( BLECTL_CONNECT, (char*)"connected" );
|
||||
log_i("BLE connected");
|
||||
};
|
||||
|
||||
void onDisconnect(BLEServer* pServer) {
|
||||
blectl_set_event( BLECTL_DISCONNECT );
|
||||
blectl_clear_event( BLECTL_CONNECT );
|
||||
statusbar_style_icon( STATUSBAR_BLUETOOTH, STATUSBAR_STYLE_GRAY );
|
||||
blectl_send_event_cb( BLECTL_DISCONNECT, (char*)"disconnected" );
|
||||
log_i("BLE disconnected");
|
||||
delay(500);
|
||||
if ( blectl_get_advertising() ) {
|
||||
@@ -77,24 +83,19 @@ class BleCtlServerCallbacks: public BLEServerCallbacks {
|
||||
class BtlCtlSecurity : public BLESecurityCallbacks {
|
||||
|
||||
uint32_t onPassKeyRequest(){
|
||||
log_i("BLE: PassKeyRequest");
|
||||
// TODO: when is this used?
|
||||
return 123456;
|
||||
}
|
||||
void onPassKeyNotify(uint32_t pass_key){
|
||||
blectl_set_event( BLECTL_PAIRING );
|
||||
log_i("Bluetooth Pairing Request\r\nPIN: %06d", pass_key);
|
||||
char pin[16]="";
|
||||
snprintf( pin, sizeof( pin ), "%06d", pass_key );
|
||||
blectl_set_event( BLECTL_PIN_AUTH );
|
||||
blectl_send_event_cb( BLECTL_PIN_AUTH, pin );
|
||||
log_i("Bluetooth Pairing Request\r\nPIN: %s", pin );
|
||||
}
|
||||
bool onConfirmPIN(uint32_t pass_key){
|
||||
log_i("BLE: The passkey YES/NO number :%06d", pass_key);
|
||||
// vTaskDelay(5000);
|
||||
// return true;
|
||||
// TODO: when is this used?
|
||||
return false;
|
||||
}
|
||||
bool onSecurityRequest(){
|
||||
log_i("BLE: SecurityRequest");
|
||||
// TODO: when is this used?
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -102,52 +103,103 @@ class BtlCtlSecurity : public BLESecurityCallbacks {
|
||||
log_i("Bluetooth pairing %s", cmpl.success ? "successful" : "unsuccessful");
|
||||
|
||||
if( cmpl.success ){
|
||||
uint16_t length;
|
||||
esp_ble_gap_get_whitelist_size( &length );
|
||||
log_i("size: %d", length );
|
||||
} else {
|
||||
// Restart advertising
|
||||
if ( blectl_get_event( BLECTL_PIN_AUTH ) ) {
|
||||
blectl_send_event_cb( BLECTL_PAIRING_SUCCESS, (char*)"success" );
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( blectl_get_event( BLECTL_PIN_AUTH ) ) {
|
||||
blectl_send_event_cb( BLECTL_PAIRING_ABORT, (char*)"abort" );
|
||||
}
|
||||
pServer->startAdvertising();
|
||||
}
|
||||
|
||||
if ( blectl_get_event( BLECTL_PAIRING )) {
|
||||
blectl_clear_event( BLECTL_PAIRING );
|
||||
if ( blectl_get_event( BLECTL_PIN_AUTH ) ) {
|
||||
blectl_clear_event( BLECTL_PIN_AUTH );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void blectl_add_char_to_gadgetbridge_msg( char msg_char ) {
|
||||
gadgetbridge_msg_size++;
|
||||
|
||||
if ( gadgetbridge_msg == NULL ) {
|
||||
gadgetbridge_msg = (char *)ps_calloc( gadgetbridge_msg_size + 1, 1 );
|
||||
if ( gadgetbridge_msg == NULL ) {
|
||||
log_e("gadgetbridge_msg alloc fail");
|
||||
while(true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
char *new_gadgetbridge_msg = NULL;
|
||||
new_gadgetbridge_msg = (char *)ps_realloc( gadgetbridge_msg, gadgetbridge_msg_size + 1 );
|
||||
if ( new_gadgetbridge_msg == NULL ) {
|
||||
log_e("gadgetbridge_msg realloc fail");
|
||||
while(true);
|
||||
}
|
||||
gadgetbridge_msg = new_gadgetbridge_msg;
|
||||
}
|
||||
gadgetbridge_msg[ gadgetbridge_msg_size - 1 ] = msg_char;
|
||||
gadgetbridge_msg[ gadgetbridge_msg_size ] = '\0';
|
||||
}
|
||||
|
||||
void blectl_delete_gadgetbridge_msg ( void ) {
|
||||
gadgetbridge_msg_size = 0;
|
||||
|
||||
if ( gadgetbridge_msg == NULL ) {
|
||||
gadgetbridge_msg = (char *)ps_calloc( gadgetbridge_msg_size + 1, 1 );
|
||||
if ( gadgetbridge_msg == NULL ) {
|
||||
log_e("gadgetbridge_msg alloc fail");
|
||||
while(true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
char *new_gadgetbridge_msg = NULL;
|
||||
new_gadgetbridge_msg = (char *)ps_realloc( gadgetbridge_msg, gadgetbridge_msg_size + 1 );
|
||||
if ( new_gadgetbridge_msg == NULL ) {
|
||||
log_e("gadgetbridge_msg realloc fail");
|
||||
while(true);
|
||||
}
|
||||
gadgetbridge_msg = new_gadgetbridge_msg;
|
||||
}
|
||||
gadgetbridge_msg[ gadgetbridge_msg_size ] = '\0';
|
||||
}
|
||||
|
||||
class BleCtlCallbacks : public BLECharacteristicCallbacks
|
||||
{
|
||||
void onWrite(BLECharacteristic *pCharacteristic)
|
||||
{
|
||||
std::string rxValue = pCharacteristic->getValue();
|
||||
|
||||
if (rxValue.length() > 0)
|
||||
{
|
||||
for (int i = 0; i < rxValue.length(); i++) {
|
||||
if (rxValue[i] == 0x10) {
|
||||
if ( message.length() ) {
|
||||
log_i("BLE: Discarding %d bytes", message.length());
|
||||
}
|
||||
message.clear();
|
||||
} else if (rxValue[i] == '\n') {
|
||||
if (message.length()+1 > MAX_MESSAGE_SIZE) {
|
||||
message.clear();
|
||||
log_e("BLE Error: Message too long");
|
||||
return;
|
||||
}
|
||||
message[message.length()] = 0;
|
||||
Serial.println("BLE message: " + message );
|
||||
message.clear();
|
||||
} else {
|
||||
message += rxValue[i];
|
||||
if (message.length() > MAX_MESSAGE_SIZE) {
|
||||
message.clear();
|
||||
log_e("BLE Error: Message too long");
|
||||
return;
|
||||
}
|
||||
char *msg = (char *)ps_calloc( pCharacteristic->getValue().length() + 1, 1 );
|
||||
if ( msg == NULL ) {
|
||||
Serial.printf("ps_calloc fail\r\n");
|
||||
return;
|
||||
}
|
||||
else {
|
||||
strlcpy( msg, pCharacteristic->getValue().c_str(), pCharacteristic->getValue().length() + 1 );
|
||||
for ( int i = 0 ; i < pCharacteristic->getValue().length(); i++ ) {
|
||||
switch( msg[ i ] ) {
|
||||
case EndofText: blectl_delete_gadgetbridge_msg();
|
||||
log_i("attention, new link establish");
|
||||
break;
|
||||
case DataLinkEscape: blectl_delete_gadgetbridge_msg();
|
||||
log_i("attention, new message");
|
||||
break;
|
||||
case LineFeed: log_i("message complete, fire BLTCTL_MSG callback");
|
||||
if( gadgetbridge_msg[ 0 ] == 'G' && gadgetbridge_msg[ 1 ] == 'B' ) {
|
||||
log_i("gadgetbridge message identified, cut down to json");
|
||||
gadgetbridge_msg[ gadgetbridge_msg_size - 1 ] = '\0';
|
||||
log_i("msg: %s", &gadgetbridge_msg[ 3 ] );
|
||||
blectl_send_event_cb( BLECTL_MSG, &gadgetbridge_msg[ 3 ] );
|
||||
}
|
||||
else {
|
||||
log_i("msg: %s", gadgetbridge_msg );
|
||||
blectl_send_event_cb( BLECTL_MSG, gadgetbridge_msg );
|
||||
}
|
||||
break;
|
||||
default: blectl_add_char_to_gadgetbridge_msg( msg[ i ] );
|
||||
}
|
||||
}
|
||||
free(msg);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -158,7 +210,6 @@ class BleCtlCallbacks : public BLECharacteristicCallbacks
|
||||
void blectl_setup( void ) {
|
||||
|
||||
blectl_status = xEventGroupCreate();
|
||||
blectl_set_event( BLECTL_CONNECT | BLECTL_OFF_REQUEST | BLECTL_ON_REQUEST | BLECTL_PAIRING | BLECTL_STANDBY_REQUEST | BLECTL_ACTIVE | BLECTL_SCAN );
|
||||
|
||||
esp_bt_controller_enable( ESP_BT_MODE_BLE );
|
||||
esp_bt_controller_mem_release( ESP_BT_MODE_CLASSIC_BT );
|
||||
@@ -239,19 +290,61 @@ void blectl_clear_event( EventBits_t bits ) {
|
||||
/*
|
||||
*
|
||||
*/
|
||||
EventBits_t blectl_get_event( EventBits_t bits ) {
|
||||
bool blectl_get_event( EventBits_t bits ) {
|
||||
portENTER_CRITICAL(&blectlMux);
|
||||
EventBits_t temp = xEventGroupGetBits( blectl_status ) & bits;
|
||||
portEXIT_CRITICAL(&blectlMux);
|
||||
return( temp );
|
||||
if ( temp )
|
||||
return( true );
|
||||
|
||||
return( false );
|
||||
}
|
||||
|
||||
void blectl_register_cb( EventBits_t event, BLECTL_CALLBACK_FUNC blectl_event_cb ) {
|
||||
blectl_event_cb_entrys++;
|
||||
|
||||
if ( blectl_event_cb_table == NULL ) {
|
||||
blectl_event_cb_table = ( blectl_event_t * )ps_malloc( sizeof( blectl_event_t ) * blectl_event_cb_entrys );
|
||||
if ( blectl_event_cb_table == NULL ) {
|
||||
log_e("blectl_event_cb_table malloc faild");
|
||||
while(true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
blectl_event_t *new_blectl_event_cb_table = NULL;
|
||||
|
||||
new_blectl_event_cb_table = ( blectl_event_t * )ps_realloc( blectl_event_cb_table, sizeof( blectl_event_t ) * blectl_event_cb_entrys );
|
||||
if ( new_blectl_event_cb_table == NULL ) {
|
||||
log_e("blectl_event_cb_table realloc faild");
|
||||
while(true);
|
||||
}
|
||||
blectl_event_cb_table = new_blectl_event_cb_table;
|
||||
}
|
||||
|
||||
blectl_event_cb_table[ blectl_event_cb_entrys - 1 ].event = event;
|
||||
blectl_event_cb_table[ blectl_event_cb_entrys - 1 ].event_cb = blectl_event_cb;
|
||||
log_i("register event_cb success");
|
||||
}
|
||||
/*
|
||||
*
|
||||
*/
|
||||
void blectl_send_event_cb( EventBits_t event, char *msg ) {
|
||||
for ( int entry = 0 ; entry < blectl_event_cb_entrys ; entry++ ){
|
||||
if ( event & blectl_event_cb_table[ entry ].event ) {
|
||||
log_i("call event_cb");
|
||||
blectl_event_cb_table[ entry ].event_cb( event, msg );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void blectl_standby( void ) {
|
||||
statusbar_style_icon( STATUSBAR_BLUETOOTH, STATUSBAR_STYLE_GRAY );
|
||||
/*
|
||||
*/
|
||||
}
|
||||
|
||||
void blectl_wakeup( void ) {
|
||||
statusbar_style_icon( STATUSBAR_BLUETOOTH, STATUSBAR_STYLE_GRAY );
|
||||
/*
|
||||
*/
|
||||
}
|
||||
|
||||
void blectl_set_enable_on_standby( bool enable_on_standby ) {
|
||||
|
||||
@@ -32,18 +32,33 @@
|
||||
|
||||
#define BLECTL_JSON_COFIG_FILE "/blectl.json"
|
||||
|
||||
#define EndofText 0x03
|
||||
#define LineFeed 0x0a
|
||||
#define DataLinkEscape 0x10
|
||||
|
||||
typedef struct {
|
||||
bool advertising = true;
|
||||
bool enable_on_standby = false;
|
||||
} blectl_config_t;
|
||||
|
||||
typedef void ( * BLECTL_CALLBACK_FUNC ) ( EventBits_t event, char *msg );
|
||||
|
||||
typedef struct {
|
||||
EventBits_t event;
|
||||
BLECTL_CALLBACK_FUNC event_cb;
|
||||
} blectl_event_t;
|
||||
|
||||
#define BLECTL_CONNECT _BV(0)
|
||||
#define BLECTL_STANDBY_REQUEST _BV(1)
|
||||
#define BLECTL_ON_REQUEST _BV(2)
|
||||
#define BLECTL_OFF_REQUEST _BV(3)
|
||||
#define BLECTL_ACTIVE _BV(4)
|
||||
#define BLECTL_SCAN _BV(5)
|
||||
#define BLECTL_PAIRING _BV(6)
|
||||
#define BLECTL_DISCONNECT _BV(1)
|
||||
#define BLECTL_STANDBY _BV(2)
|
||||
#define BLECTL_ON _BV(3)
|
||||
#define BLECTL_OFF _BV(4)
|
||||
#define BLECTL_ACTIVE _BV(5)
|
||||
#define BLECTL_MSG _BV(6)
|
||||
#define BLECTL_PIN_AUTH _BV(7)
|
||||
#define BLECTL_PAIRING _BV(8)
|
||||
#define BLECTL_PAIRING_SUCCESS _BV(9)
|
||||
#define BLECTL_PAIRING_ABORT _BV(10)
|
||||
|
||||
void blectl_setup( void );
|
||||
|
||||
@@ -64,7 +79,9 @@
|
||||
*
|
||||
* @param bits event state, example: POWERMGM_STANDBY to evaluate if the system in standby
|
||||
*/
|
||||
EventBits_t blectl_get_event( EventBits_t bits );
|
||||
bool blectl_get_event( EventBits_t bits );
|
||||
|
||||
void blectl_register_cb( EventBits_t event, BLECTL_CALLBACK_FUNC blectl_event_cb );
|
||||
void blectl_standby( void );
|
||||
void blectl_wakeup( void );
|
||||
void blectl_set_enable_on_standby( bool enable_on_standby );
|
||||
|
||||
@@ -127,7 +127,7 @@ void bma_loop( TTGOClass *ttgo ) {
|
||||
if ( xEventGroupGetBitsFromISR( bma_event_handle ) & BMA_EVENT_INT ) {
|
||||
while( !ttgo->bma->readInterrupt() );
|
||||
if ( ttgo->bma->isDoubleClick() ) {
|
||||
powermgm_set_event( POWERMGM_BMA_WAKEUP );
|
||||
powermgm_set_event( POWERMGM_BMA_DOUBLECLICK );
|
||||
xEventGroupClearBitsFromISR( bma_event_handle, BMA_EVENT_INT );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -79,11 +79,20 @@ void display_standby( void ) {
|
||||
dest_brightness = 0;
|
||||
}
|
||||
|
||||
void display_wakeup( void ) {
|
||||
void display_wakeup( bool silence ) {
|
||||
TTGOClass *ttgo = TTGOClass::getWatch();
|
||||
|
||||
// normal wake up from standby
|
||||
if ( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP ) ) {
|
||||
// wakeup without display
|
||||
if ( silence ) {
|
||||
log_i("go silence wakeup");
|
||||
ttgo->openBL();
|
||||
ttgo->displayWakeup();
|
||||
ttgo->bl->adjust( 0 );
|
||||
brightness = 0;
|
||||
dest_brightness = 0;
|
||||
}
|
||||
// wakeup with display
|
||||
else {
|
||||
log_i("go wakeup");
|
||||
ttgo->openBL();
|
||||
ttgo->displayWakeup();
|
||||
@@ -92,16 +101,6 @@ void display_wakeup( void ) {
|
||||
dest_brightness = display_get_brightness();
|
||||
motor_vibe( 1 );
|
||||
}
|
||||
// silence wakeup request from standby
|
||||
else if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP_REQUEST ) ) {
|
||||
log_i("go silence wakeup");
|
||||
ttgo->openBL();
|
||||
ttgo->displayWakeup();
|
||||
ttgo->bl->adjust( 0 );
|
||||
brightness = 0;
|
||||
dest_brightness = 0;
|
||||
powermgm_set_event( POWERMGM_SILENCE_WAKEUP );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
/*
|
||||
* @brief set display into normal mode or leave it in standby if a silence wakeup occur
|
||||
*/
|
||||
void display_wakeup( void );
|
||||
void display_wakeup( bool silence );
|
||||
|
||||
|
||||
#endif // _DISPLAY_H
|
||||
@@ -224,26 +224,20 @@ void pmu_loop( TTGOClass *ttgo ) {
|
||||
/*
|
||||
* handle IRQ event
|
||||
*/
|
||||
if ( xEventGroupGetBitsFromISR( pmu_event_handle ) & PMU_EVENT_AXP_INT ) {
|
||||
if ( powermgm_get_event( POWERMGM_PMU_BATTERY | POWERMGM_PMU_BUTTON | POWERMGM_STANDBY_REQUEST ) ) {
|
||||
ttgo->power->clearIRQ();
|
||||
xEventGroupClearBits( pmu_event_handle, PMU_EVENT_AXP_INT );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( xEventGroupGetBitsFromISR( pmu_event_handle ) & PMU_EVENT_AXP_INT ) {
|
||||
ttgo->power->readIRQ();
|
||||
if (ttgo->power->isVbusPlugInIRQ()) {
|
||||
powermgm_set_event( POWERMGM_PMU_BATTERY );
|
||||
powermgm_set_event( POWERMGM_WAKEUP_REQUEST );
|
||||
motor_vibe( 1 );
|
||||
updatetrigger = true;
|
||||
}
|
||||
if (ttgo->power->isVbusRemoveIRQ()) {
|
||||
powermgm_set_event( POWERMGM_PMU_BATTERY );
|
||||
powermgm_set_event( POWERMGM_WAKEUP_REQUEST );
|
||||
motor_vibe( 1 );
|
||||
updatetrigger = true;
|
||||
}
|
||||
if (ttgo->power->isChargingDoneIRQ()) {
|
||||
powermgm_set_event( POWERMGM_PMU_BATTERY );
|
||||
powermgm_set_event( POWERMGM_WAKEUP_REQUEST );
|
||||
motor_vibe( 1 );
|
||||
updatetrigger = true;
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@ portMUX_TYPE powermgmMux = portMUX_INITIALIZER_UNLOCKED;
|
||||
void powermgm_setup( TTGOClass *ttgo ) {
|
||||
|
||||
powermgm_status = xEventGroupCreate();
|
||||
xEventGroupClearBits( powermgm_status, POWERMGM_STANDBY | POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_SILENCE_WAKEUP | POWERMGM_SILENCE_WAKEUP_REQUEST );
|
||||
|
||||
pmu_setup( ttgo );
|
||||
bma_setup( ttgo );
|
||||
@@ -65,86 +64,92 @@ void powermgm_setup( TTGOClass *ttgo ) {
|
||||
*/
|
||||
void powermgm_loop( TTGOClass *ttgo ) {
|
||||
|
||||
// event-tripper pmu-button or pmu-battery state change
|
||||
if ( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP | POWERMGM_SILENCE_WAKEUP_REQUEST | POWERMGM_STANDBY_REQUEST ) ) {
|
||||
|
||||
// if we have an request when we are in silence mode, emulate an wakeup from standby
|
||||
if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP ) && powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP ) ) {
|
||||
powermgm_set_event( POWERMGM_STANDBY );
|
||||
powermgm_clear_event( POWERMGM_SILENCE_WAKEUP );
|
||||
// check if a button or doubleclick was release
|
||||
if( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_BMA_DOUBLECLICK ) ) {
|
||||
if ( powermgm_get_event( POWERMGM_STANDBY ) || powermgm_get_event( POWERMGM_SILENCE_WAKEUP ) ) {
|
||||
powermgm_set_event( POWERMGM_WAKEUP_REQUEST );
|
||||
}
|
||||
|
||||
if ( powermgm_get_event( POWERMGM_STANDBY ) ) {
|
||||
powermgm_clear_event( POWERMGM_STANDBY );
|
||||
|
||||
log_i("go wakeup");
|
||||
|
||||
setCpuFrequencyMhz(240);
|
||||
|
||||
pmu_wakeup();
|
||||
bma_wakeup();
|
||||
display_wakeup();
|
||||
|
||||
timesyncToSystem();
|
||||
|
||||
wifictl_wakeup();
|
||||
blectl_wakeup();
|
||||
|
||||
Serial.printf("Total heap: %d\r\n", ESP.getHeapSize());
|
||||
Serial.printf("Free heap: %d\r\n", ESP.getFreeHeap());
|
||||
Serial.printf("Total PSRAM: %d\r\n", ESP.getPsramSize());
|
||||
Serial.printf("Free PSRAM: %d\r\n", ESP.getFreePsram());
|
||||
|
||||
ttgo->startLvglTick();
|
||||
lv_disp_trig_activity(NULL);
|
||||
|
||||
if ( !display_get_block_return_maintile() ) {
|
||||
mainbar_jump_to_maintile( LV_ANIM_OFF );
|
||||
}
|
||||
}
|
||||
else {
|
||||
ttgo->stopLvglTick();
|
||||
|
||||
Serial.printf("Total heap: %d\r\n", ESP.getHeapSize());
|
||||
Serial.printf("Free heap: %d\r\n", ESP.getFreeHeap());
|
||||
Serial.printf("Total PSRAM: %d\r\n", ESP.getPsramSize());
|
||||
Serial.printf("Free PSRAM: %d\r\n", ESP.getFreePsram());
|
||||
display_standby();
|
||||
|
||||
timesyncToRTC();
|
||||
|
||||
bma_standby();
|
||||
pmu_standby();
|
||||
wifictl_standby();
|
||||
blectl_standby();
|
||||
|
||||
powermgm_set_event( POWERMGM_STANDBY );
|
||||
powermgm_clear_event( POWERMGM_SILENCE_WAKEUP );
|
||||
|
||||
adc_power_off();
|
||||
|
||||
if ( !blectl_get_enable_on_standby() ) {
|
||||
motor_vibe(3);
|
||||
delay(50);
|
||||
log_i("go standby");
|
||||
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 );
|
||||
esp_sleep_enable_gpio_wakeup ();
|
||||
esp_light_sleep_start();
|
||||
// from here, the consumption is round about 2.5mA
|
||||
// total standby time is 152h (6days) without use?
|
||||
}
|
||||
else {
|
||||
log_i("standby block by bluetooth");
|
||||
setCpuFrequencyMhz( 80 );
|
||||
// from here, the consumption is round about 23mA
|
||||
// total standby time is 19h without use?
|
||||
}
|
||||
powermgm_set_event( POWERMGM_STANDBY_REQUEST );
|
||||
}
|
||||
// clear event
|
||||
powermgm_clear_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP | POWERMGM_STANDBY_REQUEST | POWERMGM_SILENCE_WAKEUP_REQUEST );
|
||||
powermgm_clear_event( POWERMGM_PMU_BUTTON | POWERMGM_BMA_DOUBLECLICK );
|
||||
}
|
||||
|
||||
// drive into
|
||||
if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP_REQUEST | POWERMGM_WAKEUP_REQUEST ) ) {
|
||||
powermgm_clear_event( POWERMGM_STANDBY | POWERMGM_SILENCE_WAKEUP );
|
||||
|
||||
log_i("go wakeup");
|
||||
|
||||
setCpuFrequencyMhz(240);
|
||||
|
||||
pmu_wakeup();
|
||||
bma_wakeup();
|
||||
display_wakeup( powermgm_get_event( POWERMGM_SILENCE_WAKEUP_REQUEST )?true:false );
|
||||
|
||||
timesyncToSystem();
|
||||
|
||||
wifictl_wakeup();
|
||||
blectl_wakeup();
|
||||
|
||||
Serial.printf("Total heap: %d\r\n", ESP.getHeapSize());
|
||||
Serial.printf("Free heap: %d\r\n", ESP.getFreeHeap());
|
||||
Serial.printf("Total PSRAM: %d\r\n", ESP.getPsramSize());
|
||||
Serial.printf("Free PSRAM: %d\r\n", ESP.getFreePsram());
|
||||
|
||||
ttgo->startLvglTick();
|
||||
lv_disp_trig_activity(NULL);
|
||||
|
||||
if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP_REQUEST ) ) {
|
||||
powermgm_set_event( POWERMGM_SILENCE_WAKEUP );
|
||||
}
|
||||
}
|
||||
else if( powermgm_get_event( POWERMGM_STANDBY_REQUEST ) ) {
|
||||
powermgm_set_event( POWERMGM_STANDBY );
|
||||
powermgm_clear_event( POWERMGM_SILENCE_WAKEUP );
|
||||
|
||||
if ( !display_get_block_return_maintile() ) {
|
||||
mainbar_jump_to_maintile( LV_ANIM_OFF );
|
||||
}
|
||||
|
||||
ttgo->stopLvglTick();
|
||||
|
||||
Serial.printf("Total heap: %d\r\n", ESP.getHeapSize());
|
||||
Serial.printf("Free heap: %d\r\n", ESP.getFreeHeap());
|
||||
Serial.printf("Total PSRAM: %d\r\n", ESP.getPsramSize());
|
||||
Serial.printf("Free PSRAM: %d\r\n", ESP.getFreePsram());
|
||||
display_standby();
|
||||
|
||||
timesyncToRTC();
|
||||
|
||||
bma_standby();
|
||||
pmu_standby();
|
||||
wifictl_standby();
|
||||
blectl_standby();
|
||||
|
||||
adc_power_off();
|
||||
|
||||
if ( !blectl_get_enable_on_standby() ) {
|
||||
motor_vibe(3);
|
||||
delay(50);
|
||||
log_i("go standby");
|
||||
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 );
|
||||
esp_sleep_enable_gpio_wakeup ();
|
||||
esp_light_sleep_start();
|
||||
// from here, the consumption is round about 2.5mA
|
||||
// total standby time is 152h (6days) without use?
|
||||
}
|
||||
else {
|
||||
log_i("standby block by bluetooth");
|
||||
setCpuFrequencyMhz( 80 );
|
||||
// from here, the consumption is round about 23mA
|
||||
// total standby time is 19h without use?
|
||||
}
|
||||
}
|
||||
powermgm_clear_event( POWERMGM_SILENCE_WAKEUP_REQUEST | POWERMGM_WAKEUP_REQUEST | POWERMGM_STANDBY_REQUEST );
|
||||
|
||||
pmu_loop( ttgo );
|
||||
bma_loop( ttgo );
|
||||
display_loop( ttgo );
|
||||
|
||||
@@ -28,16 +28,16 @@
|
||||
#define POWERMGM_STANDBY_REQUEST _BV(1)
|
||||
#define POWERMGM_SILENCE_WAKEUP _BV(2)
|
||||
#define POWERMGM_SILENCE_WAKEUP_REQUEST _BV(3)
|
||||
#define POWERMGM_PMU_BUTTON _BV(4)
|
||||
#define POWERMGM_PMU_BATTERY _BV(5)
|
||||
#define POWERMGM_PMU_ALARM _BV(6)
|
||||
#define POWERMGM_BMA_WAKEUP _BV(7)
|
||||
#define POWERMGM_WIFI_ON_REQUEST _BV(8)
|
||||
#define POWERMGM_WIFI_OFF_REQUEST _BV(9)
|
||||
#define POWERMGM_WIFI_WPS_REQUEST _BV(10)
|
||||
#define POWERMGM_WIFI_ACTIVE _BV(11)
|
||||
#define POWERMGM_WIFI_SCAN _BV(12)
|
||||
#define POWERMGM_WIFI_CONNECTED _BV(13)
|
||||
#define POWERMGM_WAKEUP _BV(4)
|
||||
#define POWERMGM_WAKEUP_REQUEST _BV(5)
|
||||
#define POWERMGM_PMU_BUTTON _BV(6)
|
||||
#define POWERMGM_BMA_DOUBLECLICK _BV(9)
|
||||
#define POWERMGM_WIFI_ON_REQUEST _BV(10)
|
||||
#define POWERMGM_WIFI_OFF_REQUEST _BV(11)
|
||||
#define POWERMGM_WIFI_WPS_REQUEST _BV(12)
|
||||
#define POWERMGM_WIFI_ACTIVE _BV(13)
|
||||
#define POWERMGM_WIFI_SCAN _BV(14)
|
||||
#define POWERMGM_WIFI_CONNECTED _BV(15)
|
||||
|
||||
/*
|
||||
* @brief setp power managment, coordinate managment beween CPU, wifictl, pmu, bma, display, backlight and lvgl
|
||||
|
||||
Reference in New Issue
Block a user