osTimerId_t g_battery_timer = NULL;
-static bool g_bat_timer_is_running = false;
+// static bool g_bat_timer_is_running = false;
+#define CHARGE_CHECK_TIMER_CYCLE_MS 1000
#define DISABLE_CHARGE_CHECK_MS 1000
#define ENABLE_CHARGE_TIMEOUT_MS 10000
bool last_battery_charge_enable_status=true; // true上次刚设置在充电状态,false 上次设置不在充电状态。注意这个是充电IC的充电开关设置,并非真正处于充电状态的标识。
#define BATTERY_CMD_CHECK_VOLTAGE 0x11
#define BATTERY_CMD_DISABLE_CHARGE 0x12
+static uint8_t g_check_count = 0;
static void battery_check_timer_callback(void* data);
static void battery_timer_start_check_released(uint32_t rtc_ms)
{
- if (g_bat_timer_is_running) osTimerStop(g_battery_timer);
+ if (osTimerIsRunning(g_battery_timer)) osTimerStop(g_battery_timer);
osTimerStart(g_battery_timer, rtc_ms);
- g_bat_timer_is_running = true;
}
void do_battery_check_msg(int cmd);
static void battery_check_and_enable_charge(void);
static void battery_check_timer_callback(void * data)
{
unused(data);
-
- g_bat_timer_is_running = false;
- if(last_battery_charge_enable_status == true){
- do_battery_check_msg(BATTERY_CMD_DISABLE_CHARGE);
- // disable_charge();
- // uapi_tcxo_delay_ms(20);
- battery_timer_start_check_released(DISABLE_CHARGE_CHECK_MS);
- last_battery_charge_enable_status = false;
- }else{
-
- do_battery_check_msg(BATTERY_CMD_CHECK_VOLTAGE);
- // battery_check_and_enable_charge();
- // uapi_tcxo_delay_ms(20);
- battery_timer_start_check_released(ENABLE_CHARGE_TIMEOUT_MS);
- last_battery_charge_enable_status = true;
- }
+ do_battery_check_msg(BATTERY_CMD_CHECK_VOLTAGE);
}
void uapi_battery_deinit(void)
/* Stop the time and clear the pin map */
osTimerStop(g_battery_timer);
osTimerDelete(g_battery_timer);
- g_bat_timer_is_running = false;
g_battery_timer = NULL;
}
int32_t ret;
common_notify_mail_t mail;
uint32_t msgsize = (uint32_t)sizeof(common_notify_mail_t);
+ //开始timer
+ battery_timer_start_check_released(CHARGE_CHECK_TIMER_CYCLE_MS);
while (1) {
ret = osal_msg_queue_read_copy(g_app_queue, (void *)&mail, &msgsize,
continue;
#endif
// get_charge_stat();
+
if (mail.comm.app == BATTERY_CMD_CHECK_VOLTAGE) {
-
- battery_check_and_enable_charge();
- uapi_tcxo_delay_ms(20);
- }else if (mail.comm.app == BATTERY_CMD_DISABLE_CHARGE) {
- disable_charge();
- uapi_tcxo_delay_ms(20);
+
+
+ g_check_count++;
+
+ if(last_battery_charge_enable_status == true){
+
+ if (g_check_count*CHARGE_CHECK_TIMER_CYCLE_MS >= ENABLE_CHARGE_TIMEOUT_MS)
+ {
+ g_check_count = 0 ;
+ //超时交换状态
+ disable_charge();
+ last_battery_charge_enable_status = false;
+ }
+
+
+
+ }else if (last_battery_charge_enable_status == false) {
+ if (g_check_count*CHARGE_CHECK_TIMER_CYCLE_MS >= DISABLE_CHARGE_CHECK_MS)
+ {
+ g_check_count = 0 ;
+ //超时交换状态
+ battery_check_and_enable_charge();
+ last_battery_charge_enable_status = false;
+ }
+
+ }
}
}
}
return ERRCODE_FAIL;
}
- // osal_kthread_set_priority(task_handle, APP_BOARD_TASK_PRIO);
- osal_kthread_set_priority(task_handle, 10);
+ osal_kthread_set_priority(task_handle, APP_BOARD_TASK_PRIO);
+ // osal_kthread_set_priority(task_handle, 10);
g_battery_timer = osTimerNew((osTimerFunc_t)battery_check_timer_callback, osTimerPeriodic, NULL, NULL);
- //开始timer
- battery_timer_start_check_released(DISABLE_CHARGE_CHECK_MS);
+
return ERRCODE_SUCC;
}
/* init i2c */\r
if ( g_mmc_installed == 1 )\r
return ;\r
-\r
+ \r
+ result = i2c_master_init_check(MMC5603_I2C_BUS, 400000, I2C_SPEED_MODE_FS);\r
+ if (result == ERRCODE_I2C_ALREADY_INIT) {\r
+ \r
+ MMC_WARNING("mmc5603 already installed skip :i2c_id = %d i2c_speed = %d \r\n",\r
+ MMC5603_I2C_BUS, 400000);\r
+ g_mmc_installed = 1;\r
+ return ;\r
+ }\r
+ \r
result = uapi_i2c_master_init(MMC5603_I2C_BUS, 400000, I2C_SPEED_MODE_FS); /* 400000: 400KHz */\r
if (result != ERRCODE_SUCC) {\r
MMC_ERROR("mmc5603 i2c init fail! ret=0x%x", result);\r
\r
MMC_WARNING("mmc5603:i2c_id = %d i2c_speed = %d \r\n",\r
MMC5603_I2C_BUS, 400000);\r
-\r
g_mmc_installed = 1;\r
-\r
return ;\r
}\r
\r
g_bat_timer_is_running = false;
if(mag_service_running_stat == true){
- mmc5603_check(); //此处只能直接加到timer callback中,采用queue的话,新能跟不上,系统资源会挂掉。
+ // mmc5603_check(); //此处只能直接加到timer callback中,采用queue的话,新能跟不上,系统资源会挂掉。
+ do_mag_service_check_msg(MAG_SERVICE_CMD_TIMER_CHECK);
// mag_service_timer_start_check(MAG_CHECK_MS);
}
- // do_mag_service_check_msg(MAG_SERVICE_CMD_TIMER_CHECK);
// uapi_tcxo_delay_ms(20);
if (mail.comm.app == MAG_SERVICE_CMD_TIMER_CHECK) {
// mag_service_check_and_enable_charge();
- // mmc5603_check();
- MMC_LOG("MAG_SERVICE_CMD_TIMER_CHECK\r\n");
+ // MMC_LOG("MAG_SERVICE_CMD_TIMER_CHECK\r\n");
+ mmc5603_check();
}else if (mail.comm.app == MAG_SERVICE_CMD_START_CHECK){
mmc5603_start();
uapi_tcxo_delay_ms(20);
osal_task *task_handle = osal_kthread_create((osal_kthread_handler)mag_service_check_task, NULL,
- "mag_service_service", APP_BOARD_TASK_SIZE);
+ "mag_service_service", APP_BOARD_TASK_SIZE*2);
if (task_handle == NULL) {
osal_msg_queue_is_full(g_app_queue);
MMC_ERROR("create mag service thread fail!\r\n");