KT24-1110_65E-HA-651B/apps/common/charge_box/chgbox_ui.c

454 lines
14 KiB
C
Raw Normal View History

2024-11-10 10:44:17 +00:00
#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