add silence wakeup and touch feedback

This commit is contained in:
sharandac
2020-07-27 16:40:10 +02:00
parent 5bbc6f920d
commit 9458e11983
23 changed files with 178 additions and 69 deletions

Binary file not shown.

View File

@@ -31,6 +31,6 @@
/* /*
* firmeware version string * firmeware version string
*/ */
#define __FIRMWARE__ "2020072704" #define __FIRMWARE__ "2020072706"
#endif // _CONFIG_H #endif // _CONFIG_H

View File

@@ -64,27 +64,23 @@ void gui_setup(void)
/* /*
* *
*/ */
void gui_loop( TTGOClass *ttgo ){ void gui_loop( TTGOClass *ttgo ) {
// if we run in silence mode
// do task handler if still an useraction or go to standby after timeout if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP ) ) {
if ( !powermgm_get_event( POWERMGM_STANDBY ) ) { if ( lv_disp_get_inactive_time(NULL) < display_get_timeout() * 1000 ) {
if ( display_get_timeout() == DISPLAY_MAX_TIMEOUT ) {
lv_task_handler(); lv_task_handler();
ttgo->bl->adjust( display_get_brightness() );
} }
else { else {
if ( lv_disp_get_inactive_time(NULL) < display_get_timeout() * 1000 ) { powermgm_set_event( POWERMGM_STANDBY_REQUEST );
lv_task_handler(); }
if ( lv_disp_get_inactive_time(NULL) > ( ( display_get_timeout() * 1000 ) - display_get_brightness() * 8 ) ) { }
ttgo->bl->adjust( ( ( display_get_timeout() * 1000 ) - lv_disp_get_inactive_time(NULL) ) / 8 ); // if we run on normal mode
} else if ( !powermgm_get_event( POWERMGM_STANDBY ) ) {
else { if ( lv_disp_get_inactive_time(NULL) < display_get_timeout() * 1000 || display_get_timeout() == DISPLAY_MAX_TIMEOUT ) {
ttgo->bl->adjust( display_get_brightness() ); lv_task_handler();
} }
} else {
else { powermgm_set_event( POWERMGM_STANDBY_REQUEST );
powermgm_set_event( POWERMGM_PMU_BUTTON );
}
} }
} }
} }

View File

@@ -52,6 +52,7 @@ lv_tile_entry_t tile_entry[ TILE_NUM ] {
{ NULL, TILE_TYPE_SETUP, MOVE_SETTINGS_TILE, move_settings_tile_setup, { 2,3 } }, { NULL, TILE_TYPE_SETUP, MOVE_SETTINGS_TILE, move_settings_tile_setup, { 2,3 } },
{ NULL, TILE_TYPE_SETUP, DISPLAY_SETTINGS_TILE, display_settings_tile_setup, { 4,3 } }, { NULL, TILE_TYPE_SETUP, DISPLAY_SETTINGS_TILE, display_settings_tile_setup, { 4,3 } },
{ NULL, TILE_TYPE_SETUP, BATTERY_SETTINGS_TILE, battery_settings_tile_setup, { 6,3 } }, { NULL, TILE_TYPE_SETUP, BATTERY_SETTINGS_TILE, battery_settings_tile_setup, { 6,3 } },
{ NULL, TILE_TYPE_SETUP, BATTERY_OVERVIEW_TILE, NULL, { 6,4 } },
{ NULL, TILE_TYPE_SETUP, TIME_SETTINGS_TILE, time_settings_tile_setup, { 8,3 } }, { NULL, TILE_TYPE_SETUP, TIME_SETTINGS_TILE, time_settings_tile_setup, { 8,3 } },
{ NULL, TILE_TYPE_SETUP, UPDATE_SETTINGS_TILE, update_tile_setup, { 10,3 } }, { NULL, TILE_TYPE_SETUP, UPDATE_SETTINGS_TILE, update_tile_setup, { 10,3 } },
{ NULL, TILE_TYPE_WIDGET_TILE, WIDGET1_1_TILE, NULL, { 12,3 } }, { NULL, TILE_TYPE_WIDGET_TILE, WIDGET1_1_TILE, NULL, { 12,3 } },

View File

@@ -49,6 +49,7 @@
WLAN_PASSWORD_TILE, WLAN_PASSWORD_TILE,
MOVE_SETTINGS_TILE, MOVE_SETTINGS_TILE,
DISPLAY_SETTINGS_TILE, DISPLAY_SETTINGS_TILE,
BATTERY_OVERVIEW_TILE,
BATTERY_SETTINGS_TILE, BATTERY_SETTINGS_TILE,
TIME_SETTINGS_TILE, TIME_SETTINGS_TILE,
UPDATE_SETTINGS_TILE, UPDATE_SETTINGS_TILE,

View File

@@ -26,6 +26,7 @@
#include "gui/mainbar/mainbar.h" #include "gui/mainbar/mainbar.h"
#include "gui/statusbar.h" #include "gui/statusbar.h"
#include "hardware/pmu.h" #include "hardware/pmu.h"
#include "hardware/motor.h"
lv_obj_t *battery_settings_tile=NULL; lv_obj_t *battery_settings_tile=NULL;
lv_style_t battery_settings_style; lv_style_t battery_settings_style;
@@ -155,7 +156,8 @@ void battery_settings_tile_setup( lv_obj_t *tile, lv_style_t *style, lv_coord_t
static void exit_battery_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void exit_battery_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF );
break; break;
} }
} }

View File

@@ -25,6 +25,7 @@
#include "gui/mainbar/mainbar.h" #include "gui/mainbar/mainbar.h"
#include "gui/statusbar.h" #include "gui/statusbar.h"
#include "hardware/display.h" #include "hardware/display.h"
#include "hardware/motor.h"
lv_obj_t *display_settings_tile1 = NULL; lv_obj_t *display_settings_tile1 = NULL;
lv_obj_t *display_brightness_slider = NULL; lv_obj_t *display_brightness_slider = NULL;
@@ -131,7 +132,8 @@ void display_settings_tile_setup( lv_obj_t *tile, lv_style_t *style, lv_coord_t
static void exit_display_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void exit_display_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF );
display_save_config(); display_save_config();
break; break;
} }
@@ -163,6 +165,7 @@ static void display_timeout_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
static void display_rotation_event_handler( lv_obj_t * obj, lv_event_t event ) static void display_rotation_event_handler( lv_obj_t * obj, lv_event_t event )
{ {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
motor_vibe( 1 );
display_set_rotation( lv_dropdown_get_selected( obj ) * 90 ); display_set_rotation( lv_dropdown_get_selected( obj ) * 90 );
} }
} }

View File

@@ -25,6 +25,7 @@
#include "gui/mainbar/mainbar.h" #include "gui/mainbar/mainbar.h"
#include "gui/statusbar.h" #include "gui/statusbar.h"
#include "hardware/bma.h" #include "hardware/bma.h"
#include "hardware/motor.h"
lv_obj_t *move_settings_tile1=NULL; lv_obj_t *move_settings_tile1=NULL;
lv_obj_t *stepcounter_onoff=NULL; lv_obj_t *stepcounter_onoff=NULL;
@@ -106,13 +107,15 @@ void move_settings_tile_setup( lv_obj_t *tile, lv_style_t *style, lv_coord_t hre
static void exit_move_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void exit_move_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void stepcounter_onoff_event_handler(lv_obj_t * obj, lv_event_t event) { static void stepcounter_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
motor_vibe( 1 );
if( lv_switch_get_state( obj ) ) { if( lv_switch_get_state( obj ) ) {
bma_set_config( BMA_STEPCOUNTER, true ); bma_set_config( BMA_STEPCOUNTER, true );
} }
@@ -124,6 +127,7 @@ static void stepcounter_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
static void doubleclick_onoff_event_handler(lv_obj_t * obj, lv_event_t event) { static void doubleclick_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
motor_vibe( 1 );
if( lv_switch_get_state( obj ) ) { if( lv_switch_get_state( obj ) ) {
bma_set_config( BMA_DOUBLECLICK, true ); bma_set_config( BMA_DOUBLECLICK, true );
} }

View File

@@ -23,6 +23,7 @@
#include "setup.h" #include "setup.h"
#include "gui/mainbar/mainbar.h" #include "gui/mainbar/mainbar.h"
#include "hardware/motor.h"
static void wifi_setup_event_cb( lv_obj_t * obj, lv_event_t event ); static void wifi_setup_event_cb( lv_obj_t * obj, lv_event_t event );
static void battery_setup_event_cb( lv_obj_t * obj, lv_event_t event ); static void battery_setup_event_cb( lv_obj_t * obj, lv_event_t event );
@@ -97,42 +98,48 @@ void setup_tile_setup( lv_obj_t *tile, lv_style_t *style, lv_coord_t hres, lv_co
static void wifi_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void wifi_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void battery_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void battery_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( BATTERY_SETTINGS_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( BATTERY_SETTINGS_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void move_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void move_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( MOVE_SETTINGS_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( MOVE_SETTINGS_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void display_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void display_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( DISPLAY_SETTINGS_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( DISPLAY_SETTINGS_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void time_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void time_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( TIME_SETTINGS_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( TIME_SETTINGS_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void update_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void update_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( UPDATE_SETTINGS_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( UPDATE_SETTINGS_TILE, LV_ANIM_OFF );
break; break;
} }
} }

View File

@@ -26,6 +26,7 @@
#include "gui/mainbar/mainbar.h" #include "gui/mainbar/mainbar.h"
#include "gui/statusbar.h" #include "gui/statusbar.h"
#include "hardware/timesync.h" #include "hardware/timesync.h"
#include "hardware/motor.h"
lv_obj_t *time_settings_tile=NULL; lv_obj_t *time_settings_tile=NULL;
lv_style_t time_settings_style; lv_style_t time_settings_style;
@@ -124,13 +125,15 @@ void time_settings_tile_setup( lv_obj_t *tile, lv_style_t *style, lv_coord_t hre
static void exit_time_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void exit_time_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void wifisync_onoff_event_handler(lv_obj_t * obj, lv_event_t event) { static void wifisync_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
motor_vibe( 1 );
if( lv_switch_get_state( obj ) ) { if( lv_switch_get_state( obj ) ) {
timesync_set_timesync( true ); timesync_set_timesync( true );
} }
@@ -142,6 +145,7 @@ static void wifisync_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
static void daylight_onoff_event_handler(lv_obj_t * obj, lv_event_t event) { static void daylight_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
motor_vibe( 1 );
if( lv_switch_get_state( obj ) ) { if( lv_switch_get_state( obj ) ) {
timesync_set_daylightsave( true ); timesync_set_daylightsave( true );
} }
@@ -154,6 +158,7 @@ static void daylight_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
static void utczone_event_handler(lv_obj_t * obj, lv_event_t event) static void utczone_event_handler(lv_obj_t * obj, lv_event_t event)
{ {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
timesync_set_timezone( lv_dropdown_get_selected( obj ) - 12 ); motor_vibe( 1 );
timesync_set_timezone( lv_dropdown_get_selected( obj ) - 12 );
} }
} }

View File

@@ -29,6 +29,7 @@
#include "gui/mainbar/mainbar.h" #include "gui/mainbar/mainbar.h"
#include "gui/statusbar.h" #include "gui/statusbar.h"
#include "hardware/display.h" #include "hardware/display.h"
#include "hardware/motor.h"
EventGroupHandle_t update_event_handle = NULL; EventGroupHandle_t update_event_handle = NULL;
TaskHandle_t _update_Task; TaskHandle_t _update_Task;
@@ -111,13 +112,15 @@ void update_tile_setup( lv_obj_t *tile, lv_style_t *style, lv_coord_t hres, lv_c
static void exit_update_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void exit_update_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF );
break; break;
} }
} }
static void update_event_handler(lv_obj_t * obj, lv_event_t event) { static void update_event_handler(lv_obj_t * obj, lv_event_t event) {
if(event == LV_EVENT_CLICKED) { if(event == LV_EVENT_CLICKED) {
motor_vibe( 1 );
if ( xEventGroupGetBits( update_event_handle) & UPDATE_REQUEST ) { if ( xEventGroupGetBits( update_event_handle) & UPDATE_REQUEST ) {
return; return;
} }

View File

@@ -27,6 +27,7 @@
#include "gui/keyboard.h" #include "gui/keyboard.h"
#include "hardware/wifictl.h" #include "hardware/wifictl.h"
#include "hardware/motor.h"
#include <WiFi.h> #include <WiFi.h>
@@ -172,6 +173,7 @@ void wlan_password_tile_setup( lv_obj_t *tile, lv_style_t *style, lv_coord_t hre
static void apply_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) { static void apply_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) {
if(event == LV_EVENT_CLICKED) { if(event == LV_EVENT_CLICKED) {
motor_vibe( 1 );
wifictl_insert_network( lv_label_get_text( wlan_password_name_label ), lv_textarea_get_text( wlan_password_pass_textfield ) ); wifictl_insert_network( lv_label_get_text( wlan_password_name_label ), lv_textarea_get_text( wlan_password_pass_textfield ) );
keyboard_hide(); keyboard_hide();
mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_ON ); mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_ON );
@@ -182,6 +184,7 @@ static void apply_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) {
static void delete_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) { static void delete_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) {
if(event == LV_EVENT_CLICKED) { if(event == LV_EVENT_CLICKED) {
motor_vibe( 1 );
wifictl_delete_network( lv_label_get_text( wlan_password_name_label ) ); wifictl_delete_network( lv_label_get_text( wlan_password_name_label ) );
keyboard_hide(); keyboard_hide();
mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_ON ); mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_ON );
@@ -192,13 +195,15 @@ static void delete_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) {
static void wlan_password_event_cb( lv_obj_t * obj, lv_event_t event ) static void wlan_password_event_cb( lv_obj_t * obj, lv_event_t event )
{ {
if( event == LV_EVENT_CLICKED ) { if( event == LV_EVENT_CLICKED ) {
motor_vibe( 1 );
keyboard_set_textarea( obj ); keyboard_set_textarea( obj );
} }
} }
static void exit_wifi_setup_event_cb( lv_obj_t * obj, lv_event_t event ) { static void exit_wifi_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF ); case( LV_EVENT_CLICKED ): motor_vibe( 1 );
mainbar_jump_to_tilenumber( SETUP_TILE, LV_ANIM_OFF );
break; break;
} }
} }
@@ -206,6 +211,7 @@ static void exit_wifi_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
static void exit_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) { static void exit_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) {
switch( event ) { switch( event ) {
case( LV_EVENT_CLICKED ): keyboard_hide(); case( LV_EVENT_CLICKED ): keyboard_hide();
motor_vibe( 1 );
mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_ON ); mainbar_jump_to_tilenumber( WLAN_SETTINGS_TILE, LV_ANIM_ON );
break; break;
} }
@@ -213,6 +219,7 @@ static void exit_wifi_password_event_cb( lv_obj_t * obj, lv_event_t event ) {
static void wifi_onoff_event_handler(lv_obj_t * obj, lv_event_t event) { static void wifi_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
motor_vibe( 1 );
if( lv_switch_get_state( obj ) ) { if( lv_switch_get_state( obj ) ) {
wifictl_on(); wifictl_on();
} }
@@ -224,6 +231,7 @@ static void wifi_onoff_event_handler(lv_obj_t * obj, lv_event_t event) {
void wifi_settings_enter_pass_event_cb( lv_obj_t * obj, lv_event_t event ) { void wifi_settings_enter_pass_event_cb( lv_obj_t * obj, lv_event_t event ) {
if(event == LV_EVENT_CLICKED) { if(event == LV_EVENT_CLICKED) {
motor_vibe( 1 );
lv_label_set_text( wlan_password_name_label, lv_list_get_btn_text(obj) ); lv_label_set_text( wlan_password_name_label, lv_list_get_btn_text(obj) );
lv_textarea_set_text( wlan_password_pass_textfield, ""); lv_textarea_set_text( wlan_password_pass_textfield, "");
mainbar_jump_to_tilenumber( WLAN_PASSWORD_TILE, LV_ANIM_ON ); mainbar_jump_to_tilenumber( WLAN_PASSWORD_TILE, LV_ANIM_ON );

View File

@@ -127,8 +127,6 @@ weather_config_t *weather_get_config( void ) {
} }
void weather_widget_sync_Task( void * pvParameters ) { void weather_widget_sync_Task( void * pvParameters ) {
uint32_t retval = -1;
while( true ) { while( true ) {
vTaskDelay( 500 ); vTaskDelay( 500 );
if ( xEventGroupGetBits( weather_widget_event_handle ) & WEATHER_WIDGET_SYNC_REQUEST ) { if ( xEventGroupGetBits( weather_widget_event_handle ) & WEATHER_WIDGET_SYNC_REQUEST ) {
@@ -141,7 +139,6 @@ void weather_widget_sync_Task( void * pvParameters ) {
lv_imgbtn_set_src( weather_widget_condition_img, LV_BTN_STATE_CHECKED_RELEASED, resolve_owm_icon( weather_today.icon ) ); lv_imgbtn_set_src( weather_widget_condition_img, LV_BTN_STATE_CHECKED_RELEASED, resolve_owm_icon( weather_today.icon ) );
lv_imgbtn_set_src( weather_widget_condition_img, LV_BTN_STATE_CHECKED_PRESSED, resolve_owm_icon( weather_today.icon ) ); lv_imgbtn_set_src( weather_widget_condition_img, LV_BTN_STATE_CHECKED_PRESSED, resolve_owm_icon( weather_today.icon ) );
lv_obj_align( weather_widget_temperature_label, weather_widget_cont, LV_ALIGN_IN_BOTTOM_MID, 0, 0); lv_obj_align( weather_widget_temperature_label, weather_widget_cont, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
motor_vibe( 1 );
} }
} }
xEventGroupClearBits( weather_widget_event_handle, WEATHER_WIDGET_SYNC_REQUEST ); xEventGroupClearBits( weather_widget_event_handle, WEATHER_WIDGET_SYNC_REQUEST );

View File

@@ -194,7 +194,6 @@ void weather_forecast_sync_Task( void * pvParameters ) {
strftime( buf, sizeof(buf), "updated: %d.%b %H:%M", &info ); strftime( buf, sizeof(buf), "updated: %d.%b %H:%M", &info );
lv_label_set_text( weather_forecast_update_label, buf ); lv_label_set_text( weather_forecast_update_label, buf );
} }
motor_vibe( 1 );
} }
else { else {
char buf[64]; char buf[64];

View File

@@ -23,9 +23,12 @@
#include <TTGO.h> #include <TTGO.h>
#include "display.h" #include "display.h"
#include "powermgm.h"
display_config_t display_config; display_config_t display_config;
static uint8_t dest_brightness = 0;
static uint8_t brightness = 0;
/* /*
* *
*/ */
@@ -41,8 +44,49 @@ void display_setup( TTGOClass *ttgo ) {
* loop routine for handling IRQ in main loop * loop routine for handling IRQ in main loop
*/ */
void display_loop( TTGOClass *ttgo ) { void display_loop( TTGOClass *ttgo ) {
if ( !powermgm_get_event( POWERMGM_STANDBY ) && !powermgm_get_event( POWERMGM_SILENCE_WAKEUP )) {
if ( dest_brightness != brightness ) {
if ( brightness < dest_brightness ) {
brightness++;
ttgo->bl->adjust( brightness );
}
else {
brightness--;
ttgo->bl->adjust( brightness );
}
}
if ( lv_disp_get_inactive_time(NULL) > ( ( display_get_timeout() * 1000 ) - display_get_brightness() * 8 ) ) {
dest_brightness = ( ( display_get_timeout() * 1000 ) - lv_disp_get_inactive_time( NULL ) ) / 8 ;
}
else {
dest_brightness = display_get_brightness();
}
}
} }
void display_go_wakeup( TTGOClass *ttgo ) {
ttgo->openBL();
ttgo->displayWakeup();
ttgo->bl->adjust( 0 );
brightness = 0;
dest_brightness = display_get_brightness();
}
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;
}
/* /*
* *
*/ */
@@ -92,10 +136,8 @@ uint32_t display_get_brightness( void ) {
} }
void display_set_brightness( uint32_t brightness ) { void display_set_brightness( uint32_t brightness ) {
TTGOClass *ttgo = TTGOClass::getWatch();
display_config.brightness = brightness; display_config.brightness = brightness;
ttgo->bl->adjust( brightness ); dest_brightness = brightness;
} }
uint32_t display_get_rotation( void ) { uint32_t display_get_rotation( void ) {

View File

@@ -95,5 +95,8 @@
* @param rotation from 0-270 in 90 degree steps * @param rotation from 0-270 in 90 degree steps
*/ */
void display_set_rotation( uint32_t rotation ); 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 );
#endif // _DISPLAY_H #endif // _DISPLAY_H

View File

@@ -20,7 +20,7 @@ void pmu_setup( TTGOClass *ttgo ) {
// Turn on the IRQ used // 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->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_ON ); ttgo->power->enableIRQ( AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_CHARGING_FINISHED_IRQ | AXP202_TIMER_TIMEOUT_IRQ, AXP202_ON );
ttgo->power->clearIRQ(); ttgo->power->clearIRQ();
// enable coulumb counter // enable coulumb counter
@@ -95,6 +95,14 @@ void pmu_loop( TTGOClass *ttgo ) {
ttgo->power->clearIRQ(); ttgo->power->clearIRQ();
return; return;
} }
if ( ttgo->power->isTimerTimeoutIRQ() ) {
updatetrigger = true;
powermgm_set_event( POWERMGM_SILENCE_WAKEUP_REQUEST );
ttgo->power->clearTimerStatus();
ttgo->power->offTimer();
ttgo->power->clearIRQ();
return;
}
ttgo->power->clearIRQ(); ttgo->power->clearIRQ();
xEventGroupClearBits( pmu_event_handle, PMU_EVENT_AXP_INT ); xEventGroupClearBits( pmu_event_handle, PMU_EVENT_AXP_INT );
} }

View File

@@ -32,6 +32,7 @@
#include "timesync.h" #include "timesync.h"
#include "motor.h" #include "motor.h"
#include "touch.h" #include "touch.h"
#include "display.h"
#include "gui/mainbar/mainbar.h" #include "gui/mainbar/mainbar.h"
@@ -43,7 +44,7 @@ EventGroupHandle_t powermgm_status = NULL;
void powermgm_setup( TTGOClass *ttgo ) { void powermgm_setup( TTGOClass *ttgo ) {
powermgm_status = xEventGroupCreate(); powermgm_status = xEventGroupCreate();
xEventGroupClearBits( powermgm_status, POWERMGM_STANDBY | POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY ); xEventGroupClearBits( powermgm_status, POWERMGM_STANDBY | POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_SILENCE_WAKEUP | POWERMGM_SILENCE_WAKEUP_REQUEST );
pmu_setup( ttgo ); pmu_setup( ttgo );
bma_setup( ttgo ); bma_setup( ttgo );
@@ -58,28 +59,42 @@ void powermgm_setup( TTGOClass *ttgo ) {
void powermgm_loop( TTGOClass *ttgo ) { void powermgm_loop( TTGOClass *ttgo ) {
// event-tripper pmu-button or pmu-battery state change // event-tripper pmu-button or pmu-battery state change
if ( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP ) ) { if ( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP | POWERMGM_SILENCE_WAKEUP_REQUEST | POWERMGM_STANDBY_REQUEST ) ) {
// if we are in standby, wake up
// 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 );
}
if ( powermgm_get_event( POWERMGM_STANDBY ) ) { if ( powermgm_get_event( POWERMGM_STANDBY ) ) {
powermgm_clear_event( POWERMGM_STANDBY ); powermgm_clear_event( POWERMGM_STANDBY );
ttgo->power->setDCDC3Voltage( 3300 ); ttgo->power->setDCDC3Voltage( 3300 );
ttgo->openBL(); // normal wake up from standby
ttgo->displayWakeup(); if ( powermgm_get_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP ) ) {
ttgo->bl->adjust( 0 ); Serial.printf("wakeup\r\n");
display_go_wakeup( ttgo );
motor_vibe( 1 );
}
// silence wakeup request from standby
else if ( powermgm_get_event( POWERMGM_SILENCE_WAKEUP_REQUEST ) ) {
Serial.printf("silence wakeup\r\n");
display_go_silence_wakeup( ttgo );
powermgm_set_event( POWERMGM_SILENCE_WAKEUP );
}
ttgo->rtc->syncToSystem(); ttgo->rtc->syncToSystem();
ttgo->startLvglTick(); ttgo->startLvglTick();
mainbar_jump_to_maintile( LV_ANIM_OFF ); mainbar_jump_to_maintile( LV_ANIM_OFF );
lv_disp_trig_activity(NULL); lv_disp_trig_activity(NULL);
if ( bma_get_config( BMA_STEPCOUNTER ) ) if ( bma_get_config( BMA_STEPCOUNTER ) )
ttgo->bma->enableStepCountInterrupt( true ); ttgo->bma->enableStepCountInterrupt( true );
motor_vibe( 1 ); wifictl_on();
wifictl_on(); ttgo->power->clearTimerStatus();
} ttgo->power->offTimer();
// if we are nor in stand by, go sleep }
else { else {
ttgo->bl->adjust( 0 ); Serial.printf("go to standby\r\n");
ttgo->displaySleep(); display_go_sleep( ttgo );
ttgo->closeBL();
ttgo->rtc->syncToRtc(); ttgo->rtc->syncToRtc();
if ( powermgm_get_event( POWERMGM_WIFI_ACTIVE ) ) wifictl_off(); 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(); } while( powermgm_get_event( POWERMGM_WIFI_ACTIVE | POWERMGM_WIFI_CONNECTED | POWERMGM_WIFI_OFF_REQUEST | POWERMGM_WIFI_ON_REQUEST | POWERMGM_WIFI_SCAN ) ) { yield(); }
@@ -87,7 +102,10 @@ void powermgm_loop( TTGOClass *ttgo ) {
if ( bma_get_config( BMA_STEPCOUNTER ) ) if ( bma_get_config( BMA_STEPCOUNTER ) )
ttgo->bma->enableStepCountInterrupt( false ); ttgo->bma->enableStepCountInterrupt( false );
powermgm_set_event( POWERMGM_STANDBY ); powermgm_set_event( POWERMGM_STANDBY );
powermgm_clear_event( POWERMGM_SILENCE_WAKEUP );
ttgo->power->setDCDC3Voltage( 3000 ); ttgo->power->setDCDC3Voltage( 3000 );
ttgo->power->clearTimerStatus();
ttgo->power->setTimer( 30 );
setCpuFrequencyMhz( 10 ); setCpuFrequencyMhz( 10 );
gpio_wakeup_enable ((gpio_num_t)AXP202_INT, GPIO_INTR_LOW_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); gpio_wakeup_enable ((gpio_num_t)BMA423_INT1, GPIO_INTR_HIGH_LEVEL);
@@ -95,10 +113,11 @@ void powermgm_loop( TTGOClass *ttgo ) {
esp_light_sleep_start(); esp_light_sleep_start();
} }
// clear event // clear event
powermgm_clear_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP ); powermgm_clear_event( POWERMGM_PMU_BUTTON | POWERMGM_PMU_BATTERY | POWERMGM_BMA_WAKEUP | POWERMGM_STANDBY_REQUEST | POWERMGM_SILENCE_WAKEUP_REQUEST );
} }
pmu_loop( ttgo ); pmu_loop( ttgo );
bma_loop( ttgo ); bma_loop( ttgo );
display_loop( ttgo );
} }
/* /*

View File

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

View File

@@ -21,6 +21,7 @@
*/ */
#include "config.h" #include "config.h"
#include "touch.h" #include "touch.h"
#include "powermgm.h"
lv_indev_t *touch_indev = NULL; lv_indev_t *touch_indev = NULL;
@@ -37,8 +38,13 @@ static bool touch_getXY( int16_t &x, int16_t &y ) {
TTGOClass *ttgo = TTGOClass::getWatch(); TTGOClass *ttgo = TTGOClass::getWatch();
TP_Point p; TP_Point p;
// disable touch when we are in standby or silence wakeup
if ( powermgm_get_event( POWERMGM_STANDBY | POWERMGM_SILENCE_WAKEUP ) ) {
return( false );
}
if ( !ttgo->touch->touched() ) { if ( !ttgo->touch->touched() ) {
return false; return( false );
} }
p = ttgo->touch->getPoint(); p = ttgo->touch->getPoint();
@@ -62,10 +68,10 @@ static bool touch_getXY( int16_t &x, int16_t &y ) {
x = p.x; x = p.x;
y = p.y; y = p.y;
} }
return true; return( true );
} }
static bool touch_read(lv_indev_drv_t * drv, lv_indev_data_t*data) { static bool touch_read(lv_indev_drv_t * drv, lv_indev_data_t*data) {
data->state = touch_getXY(data->point.x, data->point.y) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; data->state = touch_getXY(data->point.x, data->point.y) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
return false; return( false );
} }

View File

@@ -31,6 +31,7 @@
#include "hardware/display.h" #include "hardware/display.h"
#include "hardware/powermgm.h" #include "hardware/powermgm.h"
#include "hardware/motor.h" #include "hardware/motor.h"
#include "hardware/wifictl.h"
TTGOClass *ttgo = TTGOClass::getWatch(); TTGOClass *ttgo = TTGOClass::getWatch();
@@ -70,6 +71,8 @@ void setup()
ttgo->bl->adjust( bl ); ttgo->bl->adjust( bl );
delay(5); delay(5);
} }
wifictl_on();
Serial.printf("Total heap: %d\r\n", ESP.getHeapSize()); Serial.printf("Total heap: %d\r\n", ESP.getHeapSize());
Serial.printf("Free heap: %d\r\n", ESP.getFreeHeap()); Serial.printf("Free heap: %d\r\n", ESP.getFreeHeap());
Serial.printf("Total PSRAM: %d\r\n", ESP.getPsramSize()); Serial.printf("Total PSRAM: %d\r\n", ESP.getPsramSize());

Binary file not shown.

View File

@@ -1 +1 @@
2020072704 2020072706