📄 ssp_event.c
字号:
#ifdef __cplusplusextern "C"{#endif #include "syscfg.h"#include "sys/sys_pub.h"#include "aos.h"#include "ssp_event.h"#include "ssp_task.h"U32 aos_event_wait( U32 ulMask, U32 ulFlags, U32 ulTimeout, U32*pulEvents ){ U32 spl,tSelf, result; SYS_EVT_T *pEvt; if( NULL == pulEvents ) { return EVENT_WAIT_FAIL; } if((ulFlags != AOS_WAIT_ALL) && (ulFlags != AOS_WAIT_ANY)) { return EVENT_WAIT_FAIL; } tSelf = aos_task_self(); if( U32_BUTT == tSelf ) { return EVENT_TASK_INVALID; } pEvt = &g_pstTask[tSelf].sys_event; spl = aos_int_lock(); *pulEvents = pEvt->evt_pending&ulMask; pEvt->evt_pending &= ~ulMask; if( AOS_WAIT_ANY & ulFlags ) { if( *pulEvents ) { aos_int_unlock( spl ); return AOS_SUCC; } } else { if( ulMask == *pulEvents ) { aos_int_unlock( spl ); return AOS_SUCC; } } pEvt->evt_mask = ulMask; pEvt->evt_recv = *pulEvents; pEvt->evt_wait_flg= ulFlags|EVENT_WAIT_FLAG; aos_int_unlock( spl ); result = sys_sem_wait( &pEvt->sys_sem, ulTimeout ); spl = aos_int_lock(); pEvt->evt_wait_flg &= ~EVENT_WAIT_FLAG; *pulEvents = pEvt->evt_recv; pEvt->evt_recv = 0; pEvt->evt_mask= 0; aos_int_unlock( spl ); if( AOS_SUCC != result ) { return EVENT_WAIT_TIMEOUT; } return AOS_SUCC;}U32 aos_event_trywait( U32 ulMask, U32 ulFlags, U32*pulEvents ){ U32 spl, tSelf; SYS_EVT_T *pEvt; if( NULL == pulEvents ) { return EVENT_WAIT_FAIL; } if((ulFlags != AOS_WAIT_ALL) && (ulFlags != AOS_WAIT_ANY)) { return EVENT_WAIT_FAIL; } tSelf = aos_task_self(); if( U32_BUTT == tSelf ) { return EVENT_TASK_INVALID; } pEvt = &g_pstTask[tSelf].sys_event; spl = aos_int_lock(); *pulEvents = pEvt->evt_pending&ulMask; pEvt->evt_pending &= ~ulMask; pEvt->evt_mask = 0; pEvt->evt_recv= 0; pEvt->evt_wait_flg= 0; aos_int_unlock( spl ); if( AOS_WAIT_ANY & ulFlags ) { if( *pulEvents ) { return AOS_SUCC; } } else { if( ulMask == *pulEvents ) { return AOS_SUCC; } } return EVENT_WAIT_FAIL;}U32 aos_event_post( U32 ulTaskId, U32 ulEvents ){ U32 spl; SYS_EVT_T *pEvt; if( 0 == ulTaskId ) { ulTaskId = aos_task_self(); } if( AOS_SUCC != aos_task_verify(ulTaskId) ) { return EVENT_TASK_INVALID; } pEvt = &g_pstTask[ulTaskId].sys_event; spl = aos_int_lock(); if( !(EVENT_WAIT_FLAG & pEvt->evt_wait_flg) ) { pEvt->evt_pending |= ulEvents; aos_int_unlock( spl ); return AOS_SUCC; } pEvt->evt_recv |= (ulEvents&pEvt->evt_mask); pEvt->evt_pending |= (ulEvents&~pEvt->evt_mask); if( AOS_WAIT_ANY & pEvt->evt_wait_flg ) { if( !pEvt->evt_recv ) { aos_int_unlock( spl ); return AOS_SUCC; } } else { if( pEvt->evt_mask != pEvt->evt_recv ) { aos_int_unlock( spl ); return AOS_SUCC; } } pEvt->evt_wait_flg = 0; aos_int_unlock( spl ); sys_sem_post( &pEvt->sys_sem ); return AOS_SUCC;}#ifdef __cplusplus}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -