return false;\r
}\r
\r
-static charger_plug_event_callback_func_t g_charger_callbackevent = NULL;\r
+static charger_vbus_isr_notify_func_t g_charger_isr_notify = NULL;\r
static bool charger_plugged = false;\r
errcode_t uapi_register_charger_event_callback(charger_plug_event_callback_func_t callback)\r
{\r
- g_charger_callbackevent = callback;\r
+ unused(callback);\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+errcode_t uapi_register_charger_vbus_isr_notify(charger_vbus_isr_notify_func_t notify)\r
+{\r
+ g_charger_isr_notify = notify;\r
return ERRCODE_SUCC;\r
}\r
\r
{\r
if (reg32_getbit(ULP_WKUP_INT_STS, VBUS_INSERT_INTERRUPT_POS) == 1) {\r
charger_plugged = true;\r
- if (g_charger_callbackevent != NULL)\r
- {\r
- g_charger_callbackevent(1);\r
+ if (g_charger_isr_notify != NULL) {\r
+ g_charger_isr_notify(1);\r
}\r
return;\r
}\r
\r
if (reg32_getbit(ULP_WKUP_INT_STS, VBUS_UNPLUG_INNTERRUPT_POS) == 1) {\r
charger_plugged = false;\r
- if (g_charger_callbackevent != NULL)\r
- {\r
- g_charger_callbackevent(0);\r
+ if (g_charger_isr_notify != NULL) {\r
+ g_charger_isr_notify(0);\r
}\r
return;\r
}\r
} startup_reason_t;\r
\r
typedef errcode_t (*charger_plug_event_callback_func_t)(uint8_t plug_event);\r
+typedef void (*charger_vbus_isr_notify_func_t)(uint8_t plugged);\r
button_peripheral_api *button_port_get_api(void);\r
errcode_t uapi_power_set_mode(power_mode_t pdmode);\r
errcode_t uapi_power_time_mode(power_time_t time_mode);\r
uint64_t uapi_ulp_systick_get_count(void);\r
uint64_t uapi_ulp_systick_get_ms(void);\r
errcode_t uapi_register_charger_event_callback(charger_plug_event_callback_func_t callback);\r
+errcode_t uapi_register_charger_vbus_isr_notify(charger_vbus_isr_notify_func_t notify);\r
bool uapi_get_charger_plug_status(void);\r
\r
/**\r
#define BATTERY_CMD_CHARGE_PLUG 0x13
#define BATTERY_CMD_CHARGE_UNPLUG 0x14
#define BATTERY_CMD_FIRST_CHECK 0x15
+#define BATTERY_CMD_VBUS_ISR 0x1A
#define BATTERY_CMD_CHARGE_RECONFIG 0x19
#define BATTERY_LOWPOWER_ALARM_POWERLEVEL 10
static void battery_check_timer_callback(void* data);
errcode_t charger_plug_event_notify(uint8_t plugged);
errcode_t charger_plug_event_ui_sendmsg_toUI(uint8_t plugged);
+errcode_t battery_charger_plug_event_callback(uint8_t plugged);
static BATTERY_DATA_T *bat_t;
}
}
+
+void battery_notify_vbus_from_isr(uint8_t plugged)
+{
+ if (g_app_queue == 0xFFFFFFFF) {
+ return;
+ }
+
+ common_notify_mail_t mail = {0};
+ mail.comm.app = APP_BUTTON;
+ mail.comm.event = BATTERY_CMD_VBUS_ISR;
+ mail.data[0] = plugged;
+ if (osal_msg_queue_write_copy(g_app_queue, (void *)&mail,
+ sizeof(common_notify_mail_t), 0) != OSAL_SUCCESS) {
+ PRINT("[battery][service] VBUS ISR notify failed plugged=%u\r\n", plugged);
+ }
+}
/**
* return 0 not charged, 1 charging
*/
charger_plug_event_ui_sendmsg_toUI(0);
// 记录一次充电线拔出时刻的电池数据,用于后续统计充电时间
battery_save_data();
+ }else if (mail.comm.event == BATTERY_CMD_VBUS_ISR) {
+ battery_charger_plug_event_callback((uint8_t)mail.data[0]);
}else if(mail.comm.event == BATTERY_CMD_FIRST_CHECK)
{
battery_check_chargement();
g_battery_timer = osTimerNew((osTimerFunc_t)battery_check_timer_callback, osTimerPeriodic, NULL, NULL);
/**下面初始化电池基本数据,充电线基本状态*/
- uapi_register_charger_event_callback(battery_charger_plug_event_callback);
+ uapi_register_charger_vbus_isr_notify(battery_notify_vbus_from_isr);
//开始timer