[FL-1625] Overcurrent monitoring. Cli command for external 3.3v dcdc control. (#615)
* Apps: power observer for overcurrent monitoring * Power: cli command for enable\disable externat 3.3v dcdc Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									35c441f031
								
							
						
					
					
						commit
						95f44f4d33
					
				| @ -39,6 +39,7 @@ int32_t lfrfid_debug_app(void* p); | |||||||
| int32_t storage_app(void* p); | int32_t storage_app(void* p); | ||||||
| int32_t storage_app_test(void* p); | int32_t storage_app_test(void* p); | ||||||
| int32_t dialogs_app(void* p); | int32_t dialogs_app(void* p); | ||||||
|  | int32_t power_observer(void* p); | ||||||
| 
 | 
 | ||||||
| // On system start hooks declaration
 | // On system start hooks declaration
 | ||||||
| void irda_cli_init(); | void irda_cli_init(); | ||||||
| @ -91,6 +92,10 @@ const FlipperApplication FLIPPER_SERVICES[] = { | |||||||
|     {.app = power_task, .name = "power_task", .stack_size = 1024, .icon = &A_Plugins_14}, |     {.app = power_task, .name = "power_task", .stack_size = 1024, .icon = &A_Plugins_14}, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #ifdef SRV_POWER_OBSERVER | ||||||
|  |     {.app = power_observer, .name = "power_observer", .stack_size = 1024, .icon = &A_Plugins_14}, | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #ifdef SRV_BT | #ifdef SRV_BT | ||||||
|     {.app = bt_task, .name = "bt_task", .stack_size = 1024, .icon = &A_Plugins_14}, |     {.app = bt_task, .name = "bt_task", .stack_size = 1024, .icon = &A_Plugins_14}, | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ SRV_DOLPHIN = 1 | |||||||
| SRV_NOTIFICATION = 1 | SRV_NOTIFICATION = 1 | ||||||
| SRV_STORAGE = 1 | SRV_STORAGE = 1 | ||||||
| SRV_DIALOGS = 1 | SRV_DIALOGS = 1 | ||||||
|  | SRV_POWER_OBSERVER = 1 | ||||||
| 
 | 
 | ||||||
| # Main Apps
 | # Main Apps
 | ||||||
| APP_IRDA  = 1 | APP_IRDA  = 1 | ||||||
| @ -59,6 +60,12 @@ SRV_CLI		= 1 | |||||||
| CFLAGS		+= -DSRV_POWER | CFLAGS		+= -DSRV_POWER | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | SRV_POWER_OBSERVER ?= 0 | ||||||
|  | ifeq ($(SRV_POWER_OBSERVER), 1) | ||||||
|  | SRV_POWER	= 1 | ||||||
|  | CFLAGS		+= -DSRV_POWER_OBSERVER | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| SRV_BT ?= 0 | SRV_BT ?= 0 | ||||||
| ifeq ($(SRV_BT), 1) | ifeq ($(SRV_BT), 1) | ||||||
| SRV_CLI		= 1 | SRV_CLI		= 1 | ||||||
|  | |||||||
							
								
								
									
										33
									
								
								applications/power-observer/power-observer.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								applications/power-observer/power-observer.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | #include <furi.h> | ||||||
|  | #include <api-hal.h> | ||||||
|  | #include <notification/notification-messages.h> | ||||||
|  | 
 | ||||||
|  | const NotificationMessage message_green_110 = { | ||||||
|  |     .type = NotificationMessageTypeLedGreen, | ||||||
|  |     .data.led.value = 110, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static const NotificationSequence sequence_overconsumption = { | ||||||
|  |     &message_green_110, | ||||||
|  |     &message_red_255, | ||||||
|  |     &message_delay_100, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | int32_t power_observer(void* p) { | ||||||
|  |     NotificationApp* notifications = furi_record_open("notification"); | ||||||
|  | 
 | ||||||
|  |     const float overconsumption_limit = 0.03f; | ||||||
|  | 
 | ||||||
|  |     while(true) { | ||||||
|  |         float current = -api_hal_power_get_battery_current(ApiHalPowerICFuelGauge); | ||||||
|  | 
 | ||||||
|  |         if(current >= overconsumption_limit) { | ||||||
|  |             notification_message_block(notifications, &sequence_overconsumption); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         delay(1000); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
| @ -43,6 +43,16 @@ void power_cli_otg(Cli* cli, string_t args, void* context) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void power_cli_ext(Cli* cli, string_t args, void* context) { | ||||||
|  |     if(!string_cmp(args, "0")) { | ||||||
|  |         api_hal_power_disable_external_3_3v(); | ||||||
|  |     } else if(!string_cmp(args, "1")) { | ||||||
|  |         api_hal_power_enable_external_3_3v(); | ||||||
|  |     } else { | ||||||
|  |         cli_print_usage("power_ext", "<1|0>", string_get_cstr(args)); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void power_cli_init(Cli* cli, Power* power) { | void power_cli_init(Cli* cli, Power* power) { | ||||||
|     cli_add_command(cli, "poweroff", CliCommandFlagParallelSafe, power_cli_poweroff, power); |     cli_add_command(cli, "poweroff", CliCommandFlagParallelSafe, power_cli_poweroff, power); | ||||||
|     cli_add_command(cli, "reboot", CliCommandFlagParallelSafe, power_cli_reboot, power); |     cli_add_command(cli, "reboot", CliCommandFlagParallelSafe, power_cli_reboot, power); | ||||||
| @ -51,4 +61,5 @@ void power_cli_init(Cli* cli, Power* power) { | |||||||
|     cli_add_command(cli, "dfu", CliCommandFlagParallelSafe, power_cli_dfu, power); |     cli_add_command(cli, "dfu", CliCommandFlagParallelSafe, power_cli_dfu, power); | ||||||
|     cli_add_command(cli, "power_info", CliCommandFlagParallelSafe, power_cli_info, power); |     cli_add_command(cli, "power_info", CliCommandFlagParallelSafe, power_cli_info, power); | ||||||
|     cli_add_command(cli, "power_otg", CliCommandFlagParallelSafe, power_cli_otg, power); |     cli_add_command(cli, "power_otg", CliCommandFlagParallelSafe, power_cli_otg, power); | ||||||
|  |     cli_add_command(cli, "power_ext", CliCommandFlagParallelSafe, power_cli_ext, power); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 SG
						SG