# HG changeset patch # User Michael Spacefalcon # Date 1399488350 0 # Node ID 460ed6748e4c52f93fa7e593e0687471a86e0713 # Parent c51d6b3748c337629542f927804f7fe5be6c498a OSL: os_pro_ir.c done diff -r c51d6b3748c3 -r 460ed6748e4c gsm-fw/gpf/osl/os_pro_ir.c --- a/gsm-fw/gpf/osl/os_pro_ir.c Sat May 03 19:20:05 2014 +0000 +++ b/gsm-fw/gpf/osl/os_pro_ir.c Wed May 07 18:45:50 2014 +0000 @@ -20,6 +20,8 @@ extern T_OS_TASK_TABLE_ENTRY TaskTable[]; extern unsigned os_time_to_tick_multiplier; +#define OS_NU_TASK_MAGIC 0xdeafbeef + VOID os_TaskEntry(UNSIGNED TaskHandle, VOID *argv) { @@ -37,3 +39,69 @@ NU_Sleep(SuspendTicks); return (OS_OK); } + +GLOBAL LONG +os_ResumeTask(OS_HANDLE task_handle) +{ + if (NU_Resume_Task(&TaskTable[task_handle].TaskCB.TCB) == NU_SUCCESS) + return(OS_OK); + else + return(OS_ERROR); +} + +GLOBAL LONG +os_Relinquish(void) +{ + NU_Relinquish(); + return(OS_OK); +} + +GLOBAL OS_HANDLE +os_MyHandle(void) +{ + OS_NU_TASK *os_nu_task = (OS_NU_TASK *) TCD_Current_Thread; + + if (os_nu_task && os_nu_task->magic_nr == OS_NU_TASK_MAGIC) + return(os_nu_task->handle); + else + return(OS_NOTASK); +} + +GLOBAL LONG +os_GetTaskName(OS_HANDLE Caller, OS_HANDLE TaskHandle, char *Name) +{ + if (TaskHandle) { + if (TaskHandle > MaxTasks || !TaskTable[TaskHandle].Name[0]) + return(OS_ERROR); + strcpy(Name, TaskTable[TaskHandle].Name); + } else if (TCD_Current_Thread) { + NU_TASK *curtask = TCD_Current_Thread; + strcpy(Name, curtask->tc_name); + } else + strcpy(Name, "ROOT"); + return(OS_OK); +} + +GLOBAL LONG +os_DeferTask(OS_HANDLE task_handle, OS_TIME time) +{ + if (NU_Suspend_Task(&TaskTable[task_handle].TaskCB.TCB) == NU_SUCCESS) + return(OS_OK); + else + return(OS_ERROR); +} + +GLOBAL LONG +os_CheckTaskStack(OS_HANDLE Handle) +{ + register void *sp asm("sp"); + + if (*TaskTable[Handle].Stack != GUARD_PATTERN) + return(OS_ERROR); + if (TCD_Current_Thread) { + NU_TASK *curtask = TCD_Current_Thread; + if (sp < curtask->tc_stack_start) + return(OS_ERROR); + } + return(OS_OK); +}