⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssp_event.c

📁 abstract rtos
💻 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 + -