summaryrefslogtreecommitdiffstats
path: root/c/src/exec/itron/src/ref_tsk.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/exec/itron/src/ref_tsk.c')
-rw-r--r--c/src/exec/itron/src/ref_tsk.c94
1 files changed, 53 insertions, 41 deletions
diff --git a/c/src/exec/itron/src/ref_tsk.c b/c/src/exec/itron/src/ref_tsk.c
index eee348412b..da30497904 100644
--- a/c/src/exec/itron/src/ref_tsk.c
+++ b/c/src/exec/itron/src/ref_tsk.c
@@ -34,49 +34,61 @@ ER ref_tsk(
return E_PAR;
the_thread = _ITRON_Task_Get( tskid, &location );
- if ( location != OBJECTS_LOCAL)
- _ITRON_return_errorno( _ITRON_Task_Clarify_get_id_error( tskid ) );
-
- /*
- * The following are extended functions [level X ].
- * XXX - tskwait, wid, wupcnt, and tskatr are presently not implemented.
- */
-
- pk_rtsk->tskwait = 0;
- pk_rtsk->wid = 0;
- pk_rtsk->wupcnt = 0;
- pk_rtsk->suscnt = the_thread->suspend_count;
- pk_rtsk->tskatr = 0;
- pk_rtsk->task = the_thread->Start.entry_point;
- core_priority = the_thread->Start.initial_priority;
- pk_rtsk->itskpri = _ITRON_Task_Core_to_Priority( core_priority );
- pk_rtsk->stksz = the_thread->Start.Initial_stack.size;
-
- /*
- * The following are required.
- */
-
- pk_rtsk->exinf = NULL; /* extended information */
- pk_rtsk->tskpri = _ITRON_Task_Core_to_Priority(the_thread->current_priority);
- pk_rtsk->tskstat = 0;
-
- /*
- * Mask in the tskstat information
- * Convert the task state XXX double check this
- */
-
- if ( the_thread == _Thread_Executing )
- pk_rtsk->tskstat |= TTS_RUN;
- if ((the_thread->current_state & STATES_READY) != 0)
- pk_rtsk->tskstat = TTS_RDY;
- if (_States_Is_dormant( the_thread->current_state ))
- pk_rtsk->tskstat = TTS_DMT;
- if ((the_thread->current_state & STATES_SUSPENDED) != 0)
- pk_rtsk->tskstat = TTS_SUS;
- if ((the_thread->current_state & STATES_BLOCKED) != 0)
- pk_rtsk->tskstat = TTS_WAI;
+ switch ( location ) {
+ case OBJECTS_REMOTE:
+ case OBJECTS_ERROR:
+ return _ITRON_Task_Clarify_get_id_error( tskid );
+
+ case OBJECTS_LOCAL:
+
+ if ( location != OBJECTS_LOCAL )
+ return _ITRON_Task_Clarify_get_id_error( tskid );
+
+ /*
+ * The following are extended functions [level X ].
+ * XXX - tskwait, wid, wupcnt, and tskatr are presently not implemented.
+ */
+
+ pk_rtsk->tskwait = 0;
+ pk_rtsk->wid = 0;
+ pk_rtsk->wupcnt = 0;
+ pk_rtsk->suscnt = the_thread->suspend_count;
+ pk_rtsk->tskatr = 0; /* XXX - Not correctly implemented */
+ pk_rtsk->task = (FP) the_thread->Start.entry_point;
+ core_priority = the_thread->Start.initial_priority;
+ pk_rtsk->itskpri = _ITRON_Task_Core_to_Priority( core_priority );
+ pk_rtsk->stksz = the_thread->Start.Initial_stack.size;
+
+ /*
+ * The following are required.
+ */
+
+ pk_rtsk->exinf = NULL; /* extended information */
+ pk_rtsk->tskpri =
+ _ITRON_Task_Core_to_Priority(the_thread->current_priority);
+
+ /*
+ * Mask in the tskstat information
+ * Convert the task state XXX double check this
+ */
+
+ pk_rtsk->tskstat = 0;
+ if ( the_thread == _Thread_Executing )
+ pk_rtsk->tskstat |= TTS_RUN;
+ if ( _States_Is_ready(the_thread->current_state) )
+ pk_rtsk->tskstat |= TTS_RDY;
+ if ( _States_Is_dormant( the_thread->current_state) )
+ pk_rtsk->tskstat |= TTS_DMT;
+ if ( _States_Is_suspended(the_thread->current_state) )
+ pk_rtsk->tskstat |= TTS_SUS;
+ if ( _States_Is_blocked(the_thread->current_state) )
+ pk_rtsk->tskstat |= TTS_WAI;
+
+ break;
+ }
_ITRON_return_errorno( E_OK );
+
}