@@ -1015,15 +1015,15 @@ int32 CFE_ES_GetAppInfo(CFE_ES_AppInfo_t *AppInfo, CFE_ES_AppId_t AppId)
10151015 AppInfo -> ResourceId = CFE_RESOURCEID_UNWRAP (AppId ); /* make into a generic resource ID */
10161016 AppInfo -> Type = AppRecPtr -> Type ;
10171017
1018+ strncpy (AppInfo -> Name , CFE_ES_AppRecordGetName (AppRecPtr ), sizeof (AppInfo -> Name )- 1 );
1019+
10181020 CFE_ES_CopyModuleBasicInfo (& AppRecPtr -> StartParams .BasicInfo , AppInfo );
1019- CFE_ES_CopyModuleStatusInfo (& AppRecPtr -> ModuleInfo , AppInfo );
1021+ CFE_ES_CopyModuleStatusInfo (& AppRecPtr -> LoadStatus , AppInfo );
10201022
1021- AppInfo -> StackSize = AppRecPtr -> StartParams .StackSize ;
10221023 AppInfo -> ExceptionAction = AppRecPtr -> StartParams .ExceptionAction ;
1023- AppInfo -> Priority = AppRecPtr -> StartParams .Priority ;
10241024 AppInfo -> MainTaskId = AppRecPtr -> MainTaskId ;
10251025
1026- ModuleId = AppRecPtr -> ModuleInfo .ModuleId ;
1026+ ModuleId = AppRecPtr -> LoadStatus .ModuleId ;
10271027
10281028 /*
10291029 ** Calculate the number of child tasks
@@ -1042,6 +1042,10 @@ int32 CFE_ES_GetAppInfo(CFE_ES_AppInfo_t *AppInfo, CFE_ES_AppId_t AppId)
10421042 strncpy (AppInfo -> MainTaskName , TaskRecPtr -> TaskName ,
10431043 sizeof (AppInfo -> MainTaskName ) - 1 );
10441044 AppInfo -> MainTaskName [sizeof (AppInfo -> MainTaskName ) - 1 ] = '\0' ;
1045+
1046+ AppInfo -> StackSize = TaskRecPtr -> StartParams .StackSize ;
1047+ AppInfo -> Priority = TaskRecPtr -> StartParams .Priority ;
1048+
10451049 }
10461050 else
10471051 {
@@ -1105,10 +1109,12 @@ int32 CFE_ES_GetLibInfo(CFE_ES_AppInfo_t *LibInfo, CFE_ES_LibId_t LibId)
11051109 LibInfo -> ResourceId = CFE_RESOURCEID_UNWRAP (LibId ); /* make into generic ID */
11061110 LibInfo -> Type = CFE_ES_AppType_LIBRARY ;
11071111
1108- CFE_ES_CopyModuleBasicInfo (& LibRecPtr -> BasicInfo , LibInfo );
1109- CFE_ES_CopyModuleStatusInfo (& LibRecPtr -> ModuleInfo , LibInfo );
1112+ strncpy (LibInfo -> Name , CFE_ES_LibRecordGetName (LibRecPtr ), sizeof (LibInfo -> Name )- 1 );
11101113
1111- ModuleId = LibRecPtr -> ModuleInfo .ModuleId ;
1114+ CFE_ES_CopyModuleBasicInfo (& LibRecPtr -> LoadParams , LibInfo );
1115+ CFE_ES_CopyModuleStatusInfo (& LibRecPtr -> LoadStatus , LibInfo );
1116+
1117+ ModuleId = LibRecPtr -> LoadStatus .ModuleId ;
11121118
11131119 Status = CFE_SUCCESS ;
11141120 }
@@ -1243,108 +1249,90 @@ int32 CFE_ES_CreateChildTask(CFE_ES_TaskId_t *TaskIdPtr,
12431249 CFE_ES_TaskPriority_Atom_t Priority ,
12441250 uint32 Flags )
12451251{
1252+ int32 ReturnCode ;
1253+ CFE_ES_AppRecord_t * AppRecPtr ;
1254+ CFE_ES_AppId_t ParentAppId ;
1255+ CFE_ES_TaskId_t SelfTaskId ;
1256+ CFE_ES_TaskStartParams_t Params ;
12461257
1247- int32 Result ;
1248- CFE_ES_AppRecord_t * AppRecPtr ;
1249- CFE_ES_TaskRecord_t * TaskRecPtr ;
1250- int32 ReturnCode ;
1251- CFE_ES_TaskId_t SelfTaskId ;
1252- CFE_ES_TaskId_t LocalChildTaskId ;
1253- osal_id_t OsalId ;
1258+ ParentAppId = CFE_ES_APPID_UNDEFINED ;
12541259
1255- /*
1256- ** Validate some of the arguments
1257- */
1258- if ( TaskIdPtr == NULL )
1259- {
1260- if (TaskName == NULL )
1261- {
1262- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id and Name Pointer Parameters are NULL.\n" );
1263- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1264- }
1265- else
1266- {
1267- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id Pointer Parameter is NULL for Task '%s'.\n" ,TaskName );
1268- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1269- }
1270- }
1271- else if ( TaskName == NULL )
1272- {
1273- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: TaskName Parameter is NULL\n" );
1274- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1275- }
1276- else if ( FunctionPtr == NULL )
1277- {
1278- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Function Pointer Parameter is NULL for Task '%s'\n" ,TaskName );
1279- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1280- }
1281- else
1282- {
1283-
1284- CFE_ES_LockSharedData (__func__ ,__LINE__ );
1260+ memset (& Params , 0 , sizeof (Params ));
1261+ Params .Priority = Priority ;
1262+ Params .StackSize = StackSize ;
12851263
1286- /*
1287- ** Get the App Record of the calling Application
1288- */
1289- AppRecPtr = CFE_ES_GetAppRecordByContext ();
1290- if (AppRecPtr == NULL )
1291- {
1292- CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Invalid calling context when creating Task '%s'\n" ,TaskName );
1293- ReturnCode = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1294- }
1295- else /* else AppId is valid */
1296- {
1297- /*
1298- ** First, Make sure the Calling Task is a cFE Main task.
1299- ** TaskID must be the same as the Parent Task ID.
1300- */
1301- OsalId = OS_TaskGetId ();
1302- SelfTaskId = CFE_ES_TaskId_FromOSAL (OsalId );
1303- if ( CFE_RESOURCEID_TEST_EQUAL (SelfTaskId , AppRecPtr -> MainTaskId ) )
1304- {
1305- /*
1306- ** Step 2: Create the new task using the OS API call
1307- */
1308- Result = OS_TaskCreate (& OsalId , TaskName , FunctionPtr , StackPtr ,
1309- StackSize , Priority , OS_FP_ENABLED );
1310-
1311- /*
1312- ** Step 3: Record the task information in the task table
1313- */
1314- if ( Result == OS_SUCCESS )
1315- {
1316- LocalChildTaskId = CFE_ES_TaskId_FromOSAL (OsalId );
1317- TaskRecPtr = CFE_ES_LocateTaskRecordByID (LocalChildTaskId );
1264+ /*
1265+ ** Validate some of the arguments
1266+ */
1267+ if (TaskIdPtr == NULL )
1268+ {
1269+ if (TaskName == NULL )
1270+ {
1271+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id and Name Pointer Parameters are NULL.\n" );
1272+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1273+ }
1274+ else
1275+ {
1276+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id Pointer Parameter is NULL for Task '%s'.\n" ,
1277+ TaskName );
1278+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1279+ }
1280+ }
1281+ else if (TaskName == NULL )
1282+ {
1283+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: TaskName Parameter is NULL\n" );
1284+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1285+ }
1286+ else if (FunctionPtr == NULL )
1287+ {
1288+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Function Pointer Parameter is NULL for Task '%s'\n" , TaskName );
1289+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1290+ }
1291+ else
1292+ {
1293+ /*
1294+ ** First, Make sure the Calling Task is a cFE Main task.
1295+ ** TaskID must be the same as the Parent Task ID.
1296+ */
1297+ SelfTaskId = CFE_ES_TaskId_FromOSAL (OS_TaskGetId ());
13181298
1319- CFE_ES_TaskRecordSetUsed (TaskRecPtr , CFE_RESOURCEID_UNWRAP (LocalChildTaskId ));
1320- TaskRecPtr -> AppId = CFE_ES_AppRecordGetID (AppRecPtr );
1321- strncpy (TaskRecPtr -> TaskName ,TaskName ,sizeof (TaskRecPtr -> TaskName ) - 1 );
1322- TaskRecPtr -> TaskName [sizeof (TaskRecPtr -> TaskName ) - 1 ] = '\0' ;
1323- CFE_ES_Global .RegisteredTasks ++ ;
1299+ CFE_ES_LockSharedData (__func__ , __LINE__ );
13241300
1325- * TaskIdPtr = CFE_ES_TaskRecordGetID (TaskRecPtr );
1326- ReturnCode = CFE_SUCCESS ;
1327- }
1328- else
1329- {
1330- CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Error calling OS_TaskCreate for Task '%s' RC = 0x%08X\n" ,TaskName ,(unsigned int )Result );
1331- ReturnCode = CFE_ES_ERR_CHILD_TASK_CREATE ;
1332- }
1333- }
1334- else
1335- {
1336- CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Error: Cannot call from a Child Task (for Task '%s').\n" ,TaskName );
1301+ /*
1302+ ** Get the App Record of the calling Application
1303+ */
1304+ AppRecPtr = CFE_ES_GetAppRecordByContext ();
1305+ if (AppRecPtr == NULL )
1306+ {
1307+ CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Invalid calling context when creating Task '%s'\n" ,
1308+ TaskName );
1309+ ReturnCode = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1310+ }
1311+ else if (!CFE_RESOURCEID_TEST_EQUAL (SelfTaskId , AppRecPtr -> MainTaskId ))
1312+ {
1313+ CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Error: Cannot call from a Child Task (for Task '%s').\n" ,
1314+ TaskName );
13371315 ReturnCode = CFE_ES_ERR_CHILD_TASK_CREATE ;
1316+ }
1317+ else
1318+ {
1319+ ParentAppId = CFE_ES_AppRecordGetID (AppRecPtr );
1320+ ReturnCode = CFE_SUCCESS ;
1321+ } /* end If AppID is valid */
13381322
1339- } /* end if Calling task is a main task */
1340-
1341- }/* end If AppID is valid */
1323+ CFE_ES_UnlockSharedData (__func__ , __LINE__ );
13421324
1343- CFE_ES_UnlockSharedData ( __func__ , __LINE__ );
1325+ } /* end if parameter checking */
13441326
1345- } /* end if parameter checking */
1327+ /*
1328+ ** Step 2: Create the new task if the parameter validation succeeded
1329+ */
1330+ if (ReturnCode == CFE_SUCCESS )
1331+ {
1332+ ReturnCode = CFE_ES_StartAppTask (TaskIdPtr , TaskName , FunctionPtr , & Params , ParentAppId );
1333+ }
13461334
1347- return (ReturnCode );
1335+ return (ReturnCode );
13481336
13491337} /* End of CFE_ES_CreateChildTask() */
13501338
0 commit comments