os_event.c File Reference

#include "includes.h"

Go to the source code of this file.

Functions

void OsEventInit (void)
OS_BOOL OsEventAdd (OS_EVENT *pEvent, U8 *pEventName, U32 EventType)
OS_BOOL OsEventDelete (OS_EVENT *pEvent)
OS_BOOL OsEventTaskPut (OS_EVENT *pEvent, OS_TASKENTRY *pTask)
OS_TASKENTRYOsEventTaskGet (OS_EVENT *pEvent)
OS_BOOL OsEventWait (OS_EVENT *pEvent, U16 TimeTick)
void OsEventUp (OS_EVENT *pEvent)
OS_BOOL OsEventTaskFind (U8 *pTaskName)
OS_BOOL OsEventTaskDelete (U8 *pTaskName)

Variables

OS_EVENT_CONTROL OsEventCtrl


Function Documentation

OS_BOOL OsEventAdd ( OS_EVENT pEvent,
U8 pEventName,
U32  EventType 
)

Definition at line 19 of file os_event.c.

00019                                                                  {
00020     OS_EVENT *pOsEvent;
00021     U8 i;
00022     #if(OS_CRITICAL_METHOD==3)
00023         U32 CpuEflags;
00024     #endif
00025     
00026     if(pEvent==(OS_EVENT *)OS_NULL) return OS_FALSE;
00027     OsEnterCritical();
00028     for(i=0;i<OS_NAME_STRING_MAX;i++) pEvent->Name[i]=0;
00029     if(pEventName==(U8 *)OS_NULL) OsLibStringCopy(&pEvent->Name,OsUnkown);
00030     else OsLibStringCopy(&pEvent->Name,pEventName);
00031     pEvent->Type=EventType;
00032     pEvent->ListHead=(U32 *)OS_NULL;
00033     pEvent->ListTail=(U32 *)OS_NULL;
00034     pEvent->EntryNumber=0;
00035     pEvent->Prev=(OS_EVENT *)OS_NULL;
00036     pEvent->Next=(OS_EVENT *)OS_NULL;
00037     if(OsEventCtrl.EventList==(OS_EVENT *)OS_NULL){
00038         OsEventCtrl.EventList=pEvent;
00039     }
00040     else{
00041         pOsEvent=OsEventCtrl.EventList;
00042         pOsEvent->Prev=pEvent;
00043         pEvent->Next=pOsEvent;
00044         OsEventCtrl.EventList=pEvent;
00045     }
00046     OsExitCritical();
00047     return OS_TRUE;
00048 }

OS_BOOL OsEventDelete ( OS_EVENT pEvent  ) 

Definition at line 50 of file os_event.c.

00050                                        {
00051     OS_EVENT *pOsEvent;
00052     #if(OS_CRITICAL_METHOD==3)
00053         U32 CpuEflags;
00054     #endif
00055 
00056     if(pEvent==(OS_EVENT *)OS_NULL) return OS_FALSE; 
00057     if(OsEventCtrl.EventList==(OS_EVENT *)OS_NULL) return OS_FALSE; 
00058     OsEnterCritical();
00059     pOsEvent=OsEventCtrl.EventList;
00060     while(pOsEvent!=(OS_EVENT *)OS_NULL){
00061         if(pOsEvent==pEvent){ //event found
00062             if(pOsEvent==OsEventCtrl.EventList){
00063                 if(OsEventCtrl.EventList->Next!=(OS_EVENT *)OS_NULL){
00064                     OsEventCtrl.EventList->Next->Prev=(OS_EVENT *)OS_NULL;
00065                 }
00066                 OsEventCtrl.EventList=OsEventCtrl.EventList->Next;
00067             }
00068             else{
00069                 pOsEvent->Prev->Next=pOsEvent->Next;
00070                 pOsEvent->Next->Prev=pOsEvent->Prev;
00071                 pOsEvent->Prev=(OS_EVENT *)OS_NULL;
00072                 pOsEvent->Next=(OS_EVENT *)OS_NULL;
00073             }
00074             return OS_TRUE;
00075         }
00076         else pOsEvent=pOsEvent->Next;
00077     }
00078     OsExitCritical();
00079     return OS_FALSE;
00080 }

void OsEventInit ( void   ) 

Definition at line 14 of file os_event.c.

00014                       {
00015     OsEventCtrl.EventNumber=0;
00016     OsEventCtrl.EventList=(OS_EVENT *)OS_NULL;  
00017 }

OS_BOOL OsEventTaskDelete ( U8 pTaskName  ) 

Definition at line 189 of file os_event.c.

00189                                         {
00190     OS_EVENT *pOsEvent;
00191     OS_TASKENTRY *pOsTask;
00192     
00193     pOsEvent=OsEventCtrl.EventList;
00194     while(pOsEvent!=(OS_EVENT *)OS_NULL){
00195         pOsTask=(OS_TASKENTRY *)pOsEvent->ListHead;
00196         while(pOsTask!=(OS_TASKENTRY *)OS_NULL){
00197             if(OsLibStringCompare((U8 *)pOsTask->Name,pTaskName)==OS_TRUE){
00198                 if(pOsTask==(OS_TASKENTRY *)pOsEvent->ListHead){
00199                     if(pOsTask==(OS_TASKENTRY *)pOsEvent->ListTail){
00200                         pOsEvent->ListHead=(U32 *)OS_NULL;
00201                         pOsEvent->ListTail=(U32 *)OS_NULL;
00202                         OsTaskFreeTaskPut(pOsTask);
00203                     }
00204                     else{
00205                         pOsTask->Next->Prev=(OS_TASKENTRY *)OS_NULL;
00206                         pOsEvent->ListHead=(U32 *)pOsTask->Next;
00207                         OsTaskFreeTaskPut(pOsTask);
00208                     }
00209                 }
00210                 else if(pOsTask==(OS_TASKENTRY *)pOsEvent->ListTail){
00211                         pOsTask->Prev->Next=(OS_TASKENTRY *)OS_NULL;
00212                         pOsEvent->ListTail=(U32 *)pOsTask->Prev;
00213                         OsTaskFreeTaskPut(pOsTask);
00214                 }
00215                 else{
00216                     pOsTask->Prev->Next=pOsTask->Next;
00217                     pOsTask->Next->Prev=pOsTask->Prev;
00218                     OsTaskFreeTaskPut(pOsTask);
00219                 }
00220                 return OS_TRUE; 
00221             }
00222             else pOsTask=pOsTask->Next;
00223         }
00224         pOsEvent=pOsEvent->Next;
00225     } 
00226     return OS_FALSE;
00227 }

OS_BOOL OsEventTaskFind ( U8 pTaskName  ) 

Definition at line 170 of file os_event.c.

00170                                       {
00171     OS_EVENT *pOsEvent;
00172     OS_TASKENTRY *pOsTask;
00173     
00174     pOsEvent=OsEventCtrl.EventList;
00175     while(pOsEvent!=(OS_EVENT *)OS_NULL){
00176         pOsTask=(OS_TASKENTRY *)pOsEvent->ListHead;
00177         while(pOsTask!=(OS_TASKENTRY *)OS_NULL){
00178             if(OsLibStringCompare((U8 *)pOsTask->Name,pTaskName)==OS_TRUE){
00179                 return OS_TRUE; 
00180             }
00181             else pOsTask=pOsTask->Next;
00182         }
00183         pOsEvent=pOsEvent->Next;
00184     } 
00185     return OS_FALSE;
00186 }

OS_TASKENTRY* OsEventTaskGet ( OS_EVENT pEvent  ) 

Definition at line 109 of file os_event.c.

00109                                               {
00110     OS_TASKENTRY **pListHead;
00111     OS_TASKENTRY **pListTail;
00112     OS_TASKENTRY *pHeadTask;
00113     OS_TASKENTRY *pTailTask;
00114     OS_TASKENTRY *pOsTask;
00115 
00116     if(pEvent==(OS_EVENT *)OS_NULL) return (OS_TASKENTRY *)OS_NULL;
00117     if(pEvent->ListHead==(U32 *)OS_NULL) return (OS_TASKENTRY *)OS_NULL;
00118     pListHead=(OS_TASKENTRY **)(&pEvent->ListHead);
00119     pListTail=(OS_TASKENTRY **)(&pEvent->ListTail);
00120     pHeadTask=(OS_TASKENTRY *)pEvent->ListHead;
00121     pTailTask=(OS_TASKENTRY *)pEvent->ListTail;
00122     if(pHeadTask==pTailTask){
00123         pOsTask=pHeadTask;
00124         *pListHead=(OS_TASKENTRY *)OS_NULL;
00125         *pListTail=(OS_TASKENTRY *)OS_NULL;
00126     }
00127     else{
00128         pOsTask=pHeadTask;
00129         pHeadTask=pHeadTask->Next;
00130         pHeadTask->Prev=(OS_TASKENTRY *)OS_NULL;
00131         *pListHead=pHeadTask;
00132     }    
00133     pOsTask->Next=(OS_TASKENTRY *)OS_NULL;        
00134     pOsTask->Prev=(OS_TASKENTRY *)OS_NULL;
00135     return pOsTask;
00136 }

OS_BOOL OsEventTaskPut ( OS_EVENT pEvent,
OS_TASKENTRY pTask 
)

Definition at line 82 of file os_event.c.

00082                                                             {
00083     OS_TASKENTRY **pListHead;
00084     OS_TASKENTRY **pListTail;
00085     OS_TASKENTRY *pHeadTask;
00086     OS_TASKENTRY *pTailTask;
00087     OS_EVENT *pOsEvent;
00088     
00089     if(pEvent==(OS_EVENT *)OS_NULL) return OS_FALSE;
00090     if(pTask==(OS_TASKENTRY *)OS_NULL) return OS_FALSE;
00091     pTask->Next=(OS_TASKENTRY *)OS_NULL;
00092     pTask->Prev=(OS_TASKENTRY *)OS_NULL;
00093     pListHead=(OS_TASKENTRY **)(&pEvent->ListHead);
00094     pListTail=(OS_TASKENTRY **)(&pEvent->ListTail);
00095     pHeadTask=(OS_TASKENTRY *)pEvent->ListHead;
00096     pTailTask=(OS_TASKENTRY *)pEvent->ListTail;
00097     if(pHeadTask==(OS_TASKENTRY *)OS_NULL){
00098         *pListHead=pTask;
00099         *pListTail=pTask;
00100     }
00101     else{
00102         pTask->Prev=pTailTask;
00103         pTailTask->Next=pTask;
00104         *pListTail=pTask;
00105     }
00106     return OS_TRUE;
00107 }

void OsEventUp ( OS_EVENT pEvent  ) 

Definition at line 156 of file os_event.c.

00156                                 {
00157     OS_TASKENTRY *pOsTask;
00158     #if(OS_CRITICAL_METHOD==3)
00159         U32 CpuEflags;
00160     #endif
00161 
00162     if(pEvent->ListHead==(U32 *)OS_NULL) return;
00163     OsEnterCritical();
00164     while((pOsTask=OsEventTaskGet(pEvent))!=(OS_TASKENTRY *)OS_NULL){
00165         OsTaskReadyTaskPut(pOsTask);
00166     }
00167     OsExitCritical();
00168 }

OS_BOOL OsEventWait ( OS_EVENT pEvent,
U16  TimeTick 
)

Definition at line 138 of file os_event.c.

00138                                                   {
00139     OS_TASKENTRY *pOsTask;
00140     #if(OS_CRITICAL_METHOD==3)
00141         U32 CpuEflags;
00142     #endif
00143     
00144     if(pEvent==(OS_EVENT *)OS_NULL) return OS_FALSE;
00145     OsEnterCritical();
00146     pOsTask=(OS_TASKENTRY *)OsTaskCurrent;
00147     pOsTask->Status=OS_TASK_PENDING;
00148     pOsTask->PendingType=OS_PENDING_EVENT;
00149     pOsTask->TimeDelay=TimeTick;     
00150     OsEventTaskPut(pEvent,pOsTask);
00151     OsTaskSwitchOut();
00152     OsExitCritical();
00153     return OS_TRUE;
00154 }


Variable Documentation

Definition at line 12 of file os_event.c.


Generated on Sat Apr 10 23:28:07 2010 for 80X86 MULTI-TASKING OPERATION SYSTEM by  doxygen 1.5.9