KT24-1110_65E-HA-651B/apps/common/charge_box/chgbox_ui.c
2024-11-10 18:44:17 +08:00

454 lines
14 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "typedef.h"
#include "asm/pwm_led.h"
#include "system/includes.h"
#include "chgbox_ctrl.h"
#include "chargeIc_manage.h"
#include "chgbox_ui.h"
#include "app_config.h"
#if (TCFG_CHARGE_BOX_ENABLE)
#define LOG_TAG_CONST APP_CHGBOX
#define LOG_TAG "[CHGBOXUI]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
#define LOG_DUMP_ENABLE
#define LOG_CLI_ENABLE
#include "debug.h"
#if (TCFG_CHARGE_BOX_UI_ENABLE)
//关于仓ui的说明分为三个部分
//1.ui状态层
//2.ui中间层
//3.ui驱动层
//状态层主要就是外部把仓的状态传进来,中间层是一个过渡,如不想用本驱动,可以自己更换中间层
//或者只使用本驱动层作其他使用
/////////////////////////////////////////////////////////////////////////////////////////////
//ui状态层
typedef struct _chgbox_ui_var_ {
int ui_timer;
u8 ui_power_on; //上电标志
} _chgbox_ui_var;
static _chgbox_ui_var chgbox_ui_var;
#define __this (&chgbox_ui_var)
/*------------------------------------------------------------------------------------*/
/**@brief UI超时函数
@param priv:ui状态
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_update_timeout(void *priv)
{
u8 ledmode = (u8)priv;
__this->ui_timer = 0;
chgbox_led_set_mode(ledmode);
}
/*------------------------------------------------------------------------------------*/
/**@brief UI超时设置
@param priv:传到func的参数
func:超时后的回调函数
msec:N毫秒后调用func
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
u16 chgbox_ui_timeout_add(int priv, void (*func)(void *priv), u32 msec)
{
if (__this->ui_timer) {
sys_timer_del(__this->ui_timer);
__this->ui_timer = 0;
}
if (func != NULL) {
__this->ui_timer = sys_timeout_add((void *)priv, func, msec);
}
return __this->ui_timer;
}
/*------------------------------------------------------------------------------------*/
/**@brief 设置ui上电标志位
@param 无
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_set_power_on(u8 flag)
{
__this->ui_power_on = flag;
}
/*------------------------------------------------------------------------------------*/
/**@brief 获取ui上电标志位
@param 无
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
u8 chgbox_get_ui_power_on(void)
{
return __this->ui_power_on;
}
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓电量态ui更新
@param 无
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_update_local_power(void)
{
//配对状态,不显示舱电量UI
if (sys_info.pair_status) {
return;
}
if (sys_info.status[USB_DET] == STATUS_ONLINE) {
chgbox_ui_timeout_add(0, NULL, 0);
if (sys_info.localfull) {
chgbox_led_set_mode(CHGBOX_LED_GREEN_ON);//充满后绿灯常亮
} else {
chgbox_led_set_mode(CHGBOX_LED_RED_SLOW_BRE);//充电中灯慢闪
}
} else {
if (sys_info.lowpower_flag) {
chgbox_led_set_mode(CHGBOX_LED_RED_FAST_BRE); //快闪4秒
chgbox_ui_timeout_add(CHGBOX_LED_RED_OFF, chgbox_ui_update_timeout, 4000);
} else {
chgbox_led_set_mode(CHGBOX_LED_GREEN_ON);
chgbox_ui_timeout_add(CHGBOX_LED_GREEN_OFF, chgbox_ui_update_timeout, 8000);
}
}
}
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓公共态ui更新
@param status:UI状态
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_updata_default_status(u8 status)
{
switch (status) {
case CHGBOX_UI_ALL_OFF:
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_ALL_OFF);
break;
case CHGBOX_UI_ALL_ON:
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_ALL_ON);
break;
case CHGBOX_UI_POWER:
chgbox_ui_update_local_power();
break;
}
}
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓合盖充电ui更新
@param status:UI状态
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_updata_charge_status(u8 status)
{
switch (status) {
case CHGBOX_UI_USB_IN:
case CHGBOX_UI_KEY_CLICK:
case CHGBOX_UI_LOCAL_FULL:
chgbox_ui_update_local_power();
break;
case CHGBOX_UI_USB_OUT:
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_ALL_OFF);
break;
case CHGBOX_UI_CLOSE_LID:
if (sys_info.status[USB_DET] == STATUS_ONLINE) {
chgbox_ui_update_local_power();
} else {
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_GREEN_OFF);
}
break;
case CHGBOX_UI_EAR_FULL:
break;
case CHGBOX_UI_OVER_CURRENT:
if (sys_info.status[USB_DET] == STATUS_ONLINE) {
chgbox_ui_update_local_power();
} else {
chgbox_led_set_mode(CHGBOX_LED_RED_FAST_BRE); //快闪4秒
chgbox_ui_timeout_add(CHGBOX_LED_RED_OFF, chgbox_ui_update_timeout, 4000);
}
break;
default:
chgbox_ui_updata_default_status(status);
break;
}
}
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓开盖通信ui更新
@param status:UI状态
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_updata_comm_status(u8 status)
{
switch (status) {
case CHGBOX_UI_USB_IN:
case CHGBOX_UI_LOCAL_FULL:
case CHGBOX_UI_KEY_CLICK:
case CHGBOX_UI_OPEN_LID:
chgbox_ui_update_local_power();
break;
case CHGBOX_UI_USB_OUT:
if (!sys_info.pair_status) {
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_RED_OFF);
}
break;
case CHGBOX_UI_EAR_L_IN:
case CHGBOX_UI_EAR_R_IN:
case CHGBOX_UI_EAR_L_OUT:
case CHGBOX_UI_EAR_R_OUT:
if (!sys_info.pair_status) {
if (sys_info.status[USB_DET] == STATUS_ONLINE) {
if (sys_info.localfull) {
chgbox_led_set_mode(CHGBOX_LED_RED_OFF);
chgbox_ui_timeout_add(CHGBOX_LED_RED_ON, chgbox_ui_update_timeout, 500);
}
} else {
chgbox_led_set_mode(CHGBOX_LED_GREEN_ON);
chgbox_ui_timeout_add(CHGBOX_LED_GREEN_OFF, chgbox_ui_update_timeout, 500);
}
}
break;
case CHGBOX_UI_KEY_LONG:
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_BLUE_ON);
break;
case CHGBOX_UI_PAIR_START:
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_BLUE_FAST_FLASH);
break;
case CHGBOX_UI_PAIR_SUCC:
if (sys_info.status[USB_DET] == STATUS_OFFLINE) {
chgbox_ui_timeout_add(CHGBOX_LED_BLUE_OFF, chgbox_ui_update_timeout, 500);
} else {
if (!sys_info.localfull) {
chgbox_ui_timeout_add(CHGBOX_LED_RED_SLOW_FLASH, chgbox_ui_update_timeout, 500);
} else {
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_BLUE_ON);
}
}
break;
case CHGBOX_UI_PAIR_STOP:
if (sys_info.status[USB_DET] == STATUS_ONLINE) {
chgbox_ui_update_local_power();
} else {
chgbox_ui_timeout_add(0, NULL, 0);
chgbox_led_set_mode(CHGBOX_LED_BLUE_OFF);
}
break;
default:
chgbox_ui_updata_default_status(status);
break;
}
}
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓低电量ui更新
@param status:UI状态
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_updata_lowpower_status(u8 status)
{
switch (status) {
case CHGBOX_UI_LOCAL_FULL:
case CHGBOX_UI_LOWPOWER:
case CHGBOX_UI_KEY_CLICK:
case CHGBOX_UI_OPEN_LID:
case CHGBOX_UI_CLOSE_LID:
case CHGBOX_UI_USB_OUT:
case CHGBOX_UI_USB_IN:
chgbox_ui_update_local_power();
break;
default:
chgbox_ui_updata_default_status(status);
break;
}
}
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓UI更新仓状态
@param mode: 充电仓当前的UI模式与充电仓的三个模式对应
status:充电仓当前状态
@return
@note 各个模式根据状态控制ui变化
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_update_status(u8 mode, u8 status)
{
switch (mode) {
case UI_MODE_CHARGE:
chgbox_ui_updata_charge_status(status);
break;
case UI_MODE_COMM:
chgbox_ui_updata_comm_status(status);
break;
case UI_MODE_LOWPOWER:
chgbox_ui_updata_lowpower_status(status);
break;
}
chgbox_ui_set_power_on(0);
}
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓UI初始化
@param 无
@return 无
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_ui_manage_init(void)
{
chgbox_led_init();
}
/////////////////////////////////////////////////////////////////////////////////////////////
//ui中间层
/*------------------------------------------------------------------------------------*/
/**@brief 充电仓设置呼吸灯模式
@param mode: 灯模式
@return 无
@note 设置充电仓灯的状态,不同的亮暗或闪烁可以调配
*/
/*------------------------------------------------------------------------------------*/
void chgbox_led_set_mode(u8 mode)
{
u8 i;
log_info("CHG_LED_mode:%d\n", mode);
switch (mode) {
case CHGBOX_LED_RED_OFF://红灯
chgbox_set_led_stu(CHG_LED_RED, 0, 0, 1);
break;
case CHGBOX_LED_RED_FAST_OFF:
chgbox_set_led_stu(CHG_LED_RED, 0, 0, 0);
break;
case CHGBOX_LED_RED_ON://红灯
chgbox_set_led_stu(CHG_LED_RED, 1, 0, 1);
break;
case CHGBOX_LED_RED_FAST_ON:
chgbox_set_led_stu(CHG_LED_RED, 1, 0, 0);
break;
case CHGBOX_LED_RED_SLOW_FLASH:
chgbox_set_led_bre(CHG_LED_RED, LED_FLASH_SLOW, 0, 0xffff);
break;
case CHGBOX_LED_RED_FLAST_FLASH:
chgbox_set_led_bre(CHG_LED_RED, LED_FLASH_FAST, 0, 0xffff);
break;
case CHGBOX_LED_RED_SLOW_BRE:
chgbox_set_led_bre(CHG_LED_RED, LED_FLASH_SLOW, 1, 0xffff);
break;
case CHGBOX_LED_RED_FAST_BRE:
chgbox_set_led_bre(CHG_LED_RED, LED_FLASH_FAST, 1, 0xffff);
break;
case CHGBOX_LED_GREEN_OFF:
chgbox_set_led_stu(CHG_LED_GREEN, 0, 1, 1);
break;
case CHGBOX_LED_GREEN_FAST_OFF:
chgbox_set_led_stu(CHG_LED_GREEN, 0, 0, 0);
break;
case CHGBOX_LED_GREEN_ON:
chgbox_set_led_stu(CHG_LED_GREEN, 1, 1, 1);
break;
case CHGBOX_LED_GREEN_FAST_ON:
chgbox_set_led_stu(CHG_LED_GREEN, 1, 0, 0);
break;
case CHGBOX_LED_GREEN_SLOW_FLASH:
chgbox_set_led_bre(CHG_LED_GREEN, LED_FLASH_SLOW, 0, 0xffff);
break;
case CHGBOX_LED_GREEN_FAST_FLASH:
chgbox_set_led_bre(CHG_LED_GREEN, LED_FLASH_FAST, 0, 0xffff);
break;
case CHGBOX_LED_GREEN_SLOW_BRE:
chgbox_set_led_bre(CHG_LED_GREEN, LED_FLASH_SLOW, 1, 0xffff);
break;
case CHGBOX_LED_GREEN_FAST_BRE:
chgbox_set_led_bre(CHG_LED_GREEN, LED_FLASH_FAST, 1, 0xffff);
break;
case CHGBOX_LED_BLUE_OFF:
chgbox_set_led_stu(CHG_LED_BLUE, 0, 0, 1);
break;
case CHGBOX_LED_BLUE_FAST_OFF:
chgbox_set_led_stu(CHG_LED_BLUE, 0, 0, 0);
break;
case CHGBOX_LED_BLUE_ON:
chgbox_set_led_stu(CHG_LED_BLUE, 1, 0, 1);
break;
case CHGBOX_LED_BLUE_FAST_ON:
chgbox_set_led_stu(CHG_LED_BLUE, 1, 0, 0);
break;
case CHGBOX_LED_BLUE_SLOW_FLASH:
chgbox_set_led_bre(CHG_LED_BLUE, LED_FLASH_SLOW, 0, 0xffff);
break;
case CHGBOX_LED_BLUE_FAST_FLASH:
chgbox_set_led_bre(CHG_LED_BLUE, LED_FLASH_FAST, 0, 0xffff);
break;
case CHGBOX_LED_BLUE_SLOW_BRE:
chgbox_set_led_bre(CHG_LED_BLUE, LED_FLASH_SLOW, 1, 0xffff);
break;
case CHGBOX_LED_BLUE_FAST_BRE:
chgbox_set_led_bre(CHG_LED_BLUE, LED_FLASH_FAST, 1, 0xffff);
break;
case CHGBOX_LED_ALL_OFF:
chgbox_set_led_all_off(1);
break;
case CHGBOX_LED_ALL_FAST_OFF:
chgbox_set_led_all_off(0);
break;
case CHGBOX_LED_ALL_ON:
chgbox_set_led_all_on(1);
break;
case CHGBOX_LED_ALL_FAST_ON:
chgbox_set_led_all_on(0);
break;
}
}
#else
void chgbox_ui_set_power_on(u8 flag)
{
}
u8 chgbox_get_ui_power_on(void)
{
return 0;
}
void chgbox_ui_update_status(u8 mode, u8 status)
{
}
void chgbox_ui_manage_init(void)
{
}
#endif
#endif