int bsp_om_start_timer(u32 timer_len,void *func,u32 para,struct softtimer_list *timer) { s32 ret = BSP_OK; timer->func = func; timer->para = para; timer->timeout = timer_len*1000; timer->wake_type = SOFTTIMER_NOWAKE; if(timer->init_flags != TIMER_INIT_FLAG) { ret = bsp_softtimer_create(timer); bsp_softtimer_add(timer); } else { ret =bsp_softtimer_modify(timer,timer_len*1000); bsp_softtimer_add(timer); } return ret; }
/*测试非唤醒源软timer申请和加入链表,在回调函数外删除软timer 超时时间较长*/ s32 st_softtimer_test_case13(void) { s32 ret= 0; my_softtimer.func = for_softtimer_test_1; my_softtimer.para = 123; my_softtimer.timeout = 100; my_softtimer.wake_type=SOFTTIMER_NOWAKE; osl_sem_init(0,&sem1); if (bsp_softtimer_create(&my_softtimer)) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"create error \n"); } bsp_softtimer_add(&my_softtimer); ret = bsp_softtimer_delete(&my_softtimer); if (ret ==OK) { ret = bsp_softtimer_free(&my_softtimer); if (ret !=OK) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"softtimer_test_6 free error\n"); return ERROR; } } else if(NOT_ACTIVE == ret) { osl_sem_down(&sem1); osl_sema_delete(&sem1); } return ret; }
/*测试非唤醒源软timer申请和加入链表,LOOP模式,执行一段时间后在回调函数外delete*/ s32 st_softtimer_test_case14(void) { s32 ret=0; my_softtimer.func = for_softtimer_test_8; my_softtimer.para = 123; my_softtimer.timeout = 1; my_softtimer.wake_type=SOFTTIMER_NOWAKE; if (bsp_softtimer_create(&my_softtimer)) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"create error\n"); return ERROR; } bsp_softtimer_add(&my_softtimer); delay(200); ret = bsp_softtimer_delete_sync(&my_softtimer); if(OK!=ret) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"bsp_softtimer_delete_sync failed\n"); return ERROR; } ret = bsp_softtimer_free(&my_softtimer); if (ret !=OK) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"st_softtimer_test_case16 free error\n"); return ERROR; } return OK; }
void for_softtimer_test_3(u32 para) { s32 ret = 0; num[1]++; if (num[1]<10) { ret = bsp_softtimer_modify(&my_softtimer,num[1]*100); if (ret !=OK) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"for_softtimer_test_3 11modify error\n"); return; } bsp_softtimer_add(&my_softtimer); } if (num[1]==10) { num[1] = 0; ret = bsp_softtimer_free(&my_softtimer); if (ret !=OK) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"for_softtimer_test_3 free error\n"); return; } osl_sem_up(&sem3); } return; }
void edma2_timer_event(u32 param) { if(NULL != g_edma2_busstress_info.edma_send_sem) { /*up(g_edma2_busstress_info.edma_send_sem);*/ semGive(g_edma2_busstress_info.edma_send_sem); } bsp_softtimer_add( &g_edma2_busstress_info.edma_softtimer_list ); }
u32 bsp_cpu_swt_set(u32 set_swt,u32 period) { u32 ret = BSP_OK; if(BSP_SYSVIEW_SWT_ON == set_swt) { if(cpu_info_stru.loop_timer.init_flags == TIMER_INIT_FLAG ) { bsp_om_stop_timer(&cpu_info_stru.loop_timer); bsp_softtimer_modify(&cpu_info_stru.loop_timer,period*1000); bsp_softtimer_add(&cpu_info_stru.loop_timer); /* 初始化计数信息*/ get_task_time(0); ret = BSP_OK; } else { ret = (u32)bsp_om_start_timer(period,cpu_timeout_done , 0, &(cpu_info_stru.loop_timer)); if(ret == BSP_OK) { /* 初始化计数信息*/ get_task_time(0); ret = BSP_OK; } else { ret = (u32)BSP_ERROR; } } } else { if(cpu_info_stru.loop_timer.init_flags == TIMER_INIT_FLAG ) { ret = (u32)bsp_om_stop_timer(&cpu_info_stru.loop_timer); } else { ret = BSP_OK; } /*去 初始化计数信息*/ get_task_time(1); } if(BSP_OK != ret) { return ret; } cpu_info_stru.report_swt = set_swt; cpu_info_stru.report_timer_len = period; return BSP_OK; }
/*测试非唤醒源软timer申请和加入链表*/ s32 st_softtimer_test_case11(void) { my_softtimer.func = for_softtimer_test_1; my_softtimer.wake_type=SOFTTIMER_NOWAKE; my_softtimer.para = 1; my_softtimer.timeout = 100; osl_sem_init(0,&sem1); osl_sem_init(0,&sem5); osl_sem_init(0,&sem6); if (bsp_softtimer_create(&my_softtimer)) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"create error \n"); return ERROR; } bsp_softtimer_add(&my_softtimer); my_sec_softtimer.func = for_softtimer_test_5; my_sec_softtimer.para = 2; my_sec_softtimer.timeout = 200; if (bsp_softtimer_create(&my_sec_softtimer)) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"create error \n"); return ERROR; } bsp_softtimer_add(&my_sec_softtimer); my_thir_softtimer.func = for_softtimer_test_6; my_thir_softtimer.para = 3; my_thir_softtimer.timeout = 300; if (bsp_softtimer_create(&my_thir_softtimer)) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"create error \n"); return ERROR; } bsp_softtimer_add(&my_thir_softtimer); osl_sem_down(&sem1); osl_sem_down(&sem5); osl_sem_down(&sem6); osl_sema_delete(&sem1); osl_sema_delete(&sem5); osl_sema_delete(&sem6); return OK; }
void for_softtimer_test_4(u32 para) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"para = %d \n",para); num[2]++; if (num[2]<50) { bsp_softtimer_add(&myown_timer[para]); } num[2] = 0; return; }
/****************************************************************************** * Function: drv_shut_down * Description: start the power off process. * Input: * eReason : shutdown reason. * Output: * None * Return: * None * Note : 底层调用关机接口,启用定时器,上报事件给应用。 * 超时时间内应用不关机,由底层强制关机。 ********************************************************************************/ void drv_shut_down( DRV_SHUTDOWN_REASON_ENUM enReason ) { #ifndef HI_ONOFF_PHONE power_off_ctrl.off_timer.func = (softtimer_func)power_off_timeout_isr; if( DRV_SHUTDOWN_CHARGE_REMOVE == enReason ) { if( DRV_START_MODE_NORMAL == bsp_start_mode_get() ) { /* In normal mode, don't handle the charge remove message */ return ; } } if( DRV_SHUTDOWN_BUTT == enReason ) { return ; /* the shutdown been handled, ignore this call */ } /* save the reason and drv_power_off need it */ power_off_ctrl.reason = enReason; power_off_ctrl.off_timer.para = (u32)0; power_off_ctrl.off_timer.timeout = POWER_OFF_MONOTER_TIMEROUT; power_off_ctrl.off_timer.wake_type = SOFTTIMER_WAKE; if (bsp_softtimer_create(&power_off_ctrl.off_timer)) { pr_dbg("create softtimer failed \n"); } bsp_softtimer_add(&power_off_ctrl.off_timer); /* 针对由底层上报关机事件,由应用执行关机的场景 */ /* TO DO */ power_off_log_save(); #else if (DRV_SHUTDOWN_RESET == enReason) { pr_dbg("drv_shut_down is called, modem reset..."); bsp_modem_reset(); } #endif /* Notify the monitor task */ }
void cpu_timeout_done(void) { get_task_time(1); if(cpu_info_stru.report_swt == BSP_SYSVIEW_SWT_ON) { if( TRUE == bsp_om_get_hso_conn_flag()) { report_cpu_trace(); } get_task_time(0); bsp_softtimer_add(&cpu_info_stru.loop_timer); } }
void st_softtimer_test_case16(void) { u32 i=0; for(i=0;i<40;i++)/*lint !e52 */ { myown_timer[i].func = for_softtimer_test_7; myown_timer[i].wake_type=SOFTTIMER_WAKE; myown_timer[i].para = i; myown_timer[i].timeout = 1000+i*1000; if (bsp_softtimer_create(&myown_timer[i])) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"create error i =%d\n",i); return ; } bsp_softtimer_add(&myown_timer[i]); } }
/*测试唤醒源软timer申请和加入链表重复10次,每次都在回调函数修改超时时间*/ s32 st_softtimer_test_case03(void) { my_softtimer.func = for_softtimer_test_3; my_softtimer.para = 2; my_softtimer.timeout = 10; my_softtimer.wake_type=SOFTTIMER_WAKE; osl_sem_init(0,&sem3); if (bsp_softtimer_create(&my_softtimer)) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"create error\n"); return ERROR; } bsp_softtimer_add(&my_softtimer); osl_sem_down(&sem3); osl_sema_delete(&sem3); return OK; }
/***************************************************************************** 函 数 名 : power_on_timer_init 功能描述 : 创建开机timer,用于开机后一段时间检测系统是否正常工作 输入参数 : 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : *****************************************************************************/ void power_on_timer_init( void ) { s32 ret = 0; power_item_info.on_timer.func = (softtimer_func)power_on_timeout_isr; power_item_info.on_timer.para = (u32)0; power_item_info.on_timer.timeout = POWER_ON_MONITOR_TIMEROUT; power_item_info.on_timer.wake_type = SOFTTIMER_WAKE; ret = bsp_softtimer_create(&power_item_info.on_timer); if (ret) { pr_dbg("create softtimer failed \n"); } bsp_softtimer_add(&power_item_info.on_timer); }
/******************************************************************************* * FUNC NAME: * led_softtimer_create() * Function : 创建软timer * Arguments * input : @timer - timer的定时时间 * @wake_type - timer对CPU的唤醒类型 * output : null * * Return : LED_OK - 成功;else - 失败 * Decription : null ************************************************************************/ int led_softtimer_create(unsigned int time, enum wakeup wake_type) { led_softtimer.func = (softtimer_func)led_state_check_callback; led_softtimer.para = 0; led_softtimer.timeout = time; /* 定时长度,单位ms */ led_softtimer.wake_type = wake_type; if (bsp_softtimer_create(&led_softtimer)) { LED_TRACE(LED_DEBUG_LEVEL(ERROR),"[%s]ERROR: softtimer create failed\n", __FUNCTION__); return LED_ERROR; } bsp_softtimer_add(&led_softtimer); LED_TRACE(LED_DEBUG_LEVEL(INFO), "LED create softtimer OK\n"); return LED_OK; }
void for_softtimer_test_2(u32 para) { s32 ret = 0; num[0]++; if (num[0]<10) { bsp_softtimer_add(&my_softtimer); } else if (num[0]==10) { num[0] = 0; ret = bsp_softtimer_free(&my_softtimer); if (ret !=OK) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"for_softtimer_test_2 free error\n"); return; } osl_sem_up(&sem2); } return; }
/******************************************************************************* * FUNC NAME: * led_state_check_callback() - C核软timer回调函数 * Function : * Arguments * input : null * output : null * * Return : null * Decription : ************************************************************************/ void led_state_check_callback(void) { int ret = LED_ERROR; /* 获取上层状态 */ if (NULL != p_func_tled_state_get) { g_new_work_state = (unsigned char)((*p_func_tled_state_get)()); } else { return; } LED_TRACE(LED_DEBUG_LEVEL(INFO), "[%s]LED get new state success, new state %d\n", __FUNCTION__, g_new_work_state); /* 与当前状态进行比较,若不同,则更新当前状态并通知A核闪灯 */ if(g_cur_work_state != g_new_work_state) { ret = bsp_icc_send(ICC_CPU_APP, LED_ICC_CHN_ID, (unsigned char*)&g_new_work_state, sizeof(unsigned char)); if(ret != (int)sizeof(unsigned char)) { LED_TRACE(LED_DEBUG_LEVEL(ERROR), "[%s]icc send failed, new state %d, length %d\n", __FUNCTION__, g_new_work_state, ret); return; } LED_TRACE(LED_DEBUG_LEVEL(INFO), "[%s]icc send success, new state %d\n", __FUNCTION__, g_new_work_state); g_cur_work_state = g_new_work_state; } LED_TRACE(LED_DEBUG_LEVEL(INFO), "[%s]LED same state, skip\n", __FUNCTION__); bsp_softtimer_add(&led_softtimer); return; }
/***************************************************************************** 函 数 名 : modem_wakeup_delay_overhandler 功能描述 : 300ms超时后投睡眠票 输入参数 : BSP_U32 uart_port_addr 输出参数 : 无 返 回 值 : void *****************************************************************************/ void dual_modem_restart_timer(struct softtimer_list * softtimer) { g_dual_modem_ctrl.stop_timer_flag = CPCP_FLASE; bsp_softtimer_delete(softtimer); bsp_softtimer_add(softtimer); }
s32 edma2_stress_test_start(s32 task_priority,s32 test_rate) { s32 ret = 0; u32 index = 0; s32 chann_id = 0;/*bsp_edma_channel_init(EDMA_MEMORY, 0, 0, 0);*/ for (index=0;index<EDMA_HANDLE_NUM;index++) { g_edma2_busstress_info.stDMATaskHandle[index].ulChIdx = chann_id; } logMsg("edma2_stress: use axi 0x%x \n", MEM_FOR_EDMAC2_BUSSTRESS,0,0,0,0,0); /* g_edma2_busstress_info.stDMATaskHandle[0] = {0, 0, EDMA_TEST_LEN, chann_id}; g_edma2_busstress_info.stDMATaskHandle[1] = {0, EDMA2_HANDLE_1_AXI_MEM_64_DST, EDMA_TEST_LEN, chann_id}; g_edma2_busstress_info.stDMATaskHandle[2] = {EDMA2_HANDLE_2_AXI_MEM_64_SRC, EDMA2_HANDLE_2_AXI_MEM_64_DST, EDMA_TEST_LEN, chann_id}; g_edma2_busstress_info.stDMATaskHandle[3] = {EDMA2_HANDLE_3_AXI_MEM_64_SRC, 0, EDMA_TEST_LEN, chann_id}; */ set_test_switch_stat(EDMAC, TEST_RUN); /*创建控制发送速率的信号量*/ /*sema_init(&(g_edma2_busstress_info.edma_send_sem) , SEM_EMPTY);*/ g_edma2_busstress_info.edma_send_sem = semBCreate(SEM_Q_FIFO, SEM_EMPTY); if (g_edma2_busstress_info.edma_send_sem == NULL) { printf("semBCreate gmac_send_sem fail.\n"); return ERROR; } g_edma2_busstress_info.edma_softtimer_list.func = ( softtimer_func )edma2_timer_event; g_edma2_busstress_info.edma_softtimer_list.para = 0; g_edma2_busstress_info.edma_softtimer_list.timeout = test_rate; g_edma2_busstress_info.edma_softtimer_list.wake_type =SOFTTIMER_NOWAKE; /*创建控制发送速率 的软timer*/ if( bsp_softtimer_create(&g_edma2_busstress_info.edma_softtimer_list)) { printf("SOFTTIMER_CREATE_TIMER fail.\n"); /*sema_delete(g_edma2_busstress_info.edma_send_sem);*/ semDelete(g_edma2_busstress_info.edma_send_sem); return ERROR; } g_edma2_busstress_info.stDMATaskHandle[0].u32SrcAddr = (u32)cacheDmaMalloc(EDMA_TEST_LEN); g_edma2_busstress_info.stDMATaskHandle[0].u32DstAddr = (u32)cacheDmaMalloc(EDMA_TEST_LEN); g_edma2_busstress_info.stDMATaskHandle[1].u32SrcAddr = (u32)cacheDmaMalloc(EDMA_TEST_LEN); g_edma2_busstress_info.stDMATaskHandle[3].u32DstAddr = (u32)cacheDmaMalloc(EDMA_TEST_LEN); /*创建发包测试任务,收包驱动会自行做处理*/ g_edma2_busstress_info.edma_stress_test_task_id \ = taskSpawn ("edmaBusTask", task_priority, 0, 20000, (FUNCPTR)edma2_stress_test_routine, 0, 0, 0, 0,0, 0, 0, 0, 0, 0); if(g_edma2_busstress_info.edma_stress_test_task_id == ERROR) { printf("taskSpawn edma2BusTask fail.\n"); /*sema_delete(g_edma2_busstress_info.edma_send_sem);*/ semDelete(g_edma2_busstress_info.edma_send_sem); ret = bsp_softtimer_free(&g_edma2_busstress_info.edma_softtimer_list); } else { bsp_softtimer_add( &g_edma2_busstress_info.edma_softtimer_list ); } return g_edma2_busstress_info.edma_stress_test_task_id; }
void for_softtimer_test_9(u32 para) { bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"para = %d \n",para); bsp_softtimer_add(&my_sec_softtimer); return ; }
void for_softtimer_test_8(u32 para) { bsp_softtimer_add(&my_softtimer); return ; }
void for_softtimer_test_7(u32 para) { //bsp_trace(BSP_LOG_LEVEL_ERROR,BSP_MODU_SOFTTIMER,"para = %d\n",para); bsp_softtimer_add(&myown_timer[para]); return ; }