@@ -1001,15 +1001,15 @@ int32 CFE_ES_GetAppInfo(CFE_ES_AppInfo_t *AppInfo, CFE_ES_AppId_t AppId)
10011001 AppInfo -> ResourceId = CFE_RESOURCEID_UNWRAP (AppId ); /* make into a generic resource ID */
10021002 AppInfo -> Type = AppRecPtr -> Type ;
10031003
1004+ strncpy (AppInfo -> Name , CFE_ES_AppRecordGetName (AppRecPtr ), sizeof (AppInfo -> Name )- 1 );
1005+
10041006 CFE_ES_CopyModuleBasicInfo (& AppRecPtr -> StartParams .BasicInfo , AppInfo );
1005- CFE_ES_CopyModuleStatusInfo (& AppRecPtr -> ModuleInfo , AppInfo );
1007+ CFE_ES_CopyModuleStatusInfo (& AppRecPtr -> LoadStatus , AppInfo );
10061008
1007- AppInfo -> StackSize = AppRecPtr -> StartParams .StackSize ;
10081009 AppInfo -> ExceptionAction = AppRecPtr -> StartParams .ExceptionAction ;
1009- AppInfo -> Priority = AppRecPtr -> StartParams .Priority ;
10101010 AppInfo -> MainTaskId = AppRecPtr -> MainTaskId ;
10111011
1012- ModuleId = AppRecPtr -> ModuleInfo .ModuleId ;
1012+ ModuleId = AppRecPtr -> LoadStatus .ModuleId ;
10131013
10141014 /*
10151015 ** Calculate the number of child tasks
@@ -1028,6 +1028,10 @@ int32 CFE_ES_GetAppInfo(CFE_ES_AppInfo_t *AppInfo, CFE_ES_AppId_t AppId)
10281028 strncpy (AppInfo -> MainTaskName , TaskRecPtr -> TaskName ,
10291029 sizeof (AppInfo -> MainTaskName ) - 1 );
10301030 AppInfo -> MainTaskName [sizeof (AppInfo -> MainTaskName ) - 1 ] = '\0' ;
1031+
1032+ AppInfo -> StackSize = TaskRecPtr -> StartParams .StackSize ;
1033+ AppInfo -> Priority = TaskRecPtr -> StartParams .Priority ;
1034+
10311035 }
10321036 else
10331037 {
@@ -1091,10 +1095,12 @@ int32 CFE_ES_GetLibInfo(CFE_ES_AppInfo_t *LibInfo, CFE_ES_LibId_t LibId)
10911095 LibInfo -> ResourceId = CFE_RESOURCEID_UNWRAP (LibId ); /* make into generic ID */
10921096 LibInfo -> Type = CFE_ES_AppType_LIBRARY ;
10931097
1094- CFE_ES_CopyModuleBasicInfo (& LibRecPtr -> BasicInfo , LibInfo );
1095- CFE_ES_CopyModuleStatusInfo (& LibRecPtr -> ModuleInfo , LibInfo );
1098+ strncpy (LibInfo -> Name , CFE_ES_LibRecordGetName (LibRecPtr ), sizeof (LibInfo -> Name )- 1 );
10961099
1097- ModuleId = LibRecPtr -> ModuleInfo .ModuleId ;
1100+ CFE_ES_CopyModuleBasicInfo (& LibRecPtr -> LoadParams , LibInfo );
1101+ CFE_ES_CopyModuleStatusInfo (& LibRecPtr -> LoadStatus , LibInfo );
1102+
1103+ ModuleId = LibRecPtr -> LoadStatus .ModuleId ;
10981104
10991105 Status = CFE_SUCCESS ;
11001106 }
@@ -1229,108 +1235,90 @@ int32 CFE_ES_CreateChildTask(CFE_ES_TaskId_t *TaskIdPtr,
12291235 CFE_ES_TaskPriority_Atom_t Priority ,
12301236 uint32 Flags )
12311237{
1238+ int32 ReturnCode ;
1239+ CFE_ES_AppRecord_t * AppRecPtr ;
1240+ CFE_ES_AppId_t ParentAppId ;
1241+ CFE_ES_TaskId_t SelfTaskId ;
1242+ CFE_ES_TaskStartParams_t Params ;
12321243
1233- int32 Result ;
1234- CFE_ES_AppRecord_t * AppRecPtr ;
1235- CFE_ES_TaskRecord_t * TaskRecPtr ;
1236- int32 ReturnCode ;
1237- CFE_ES_TaskId_t SelfTaskId ;
1238- CFE_ES_TaskId_t LocalChildTaskId ;
1239- osal_id_t OsalId ;
1244+ ParentAppId = CFE_ES_APPID_UNDEFINED ;
12401245
1241- /*
1242- ** Validate some of the arguments
1243- */
1244- if ( TaskIdPtr == NULL )
1245- {
1246- if (TaskName == NULL )
1247- {
1248- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id and Name Pointer Parameters are NULL.\n" );
1249- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1250- }
1251- else
1252- {
1253- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id Pointer Parameter is NULL for Task '%s'.\n" ,TaskName );
1254- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1255- }
1256- }
1257- else if ( TaskName == NULL )
1258- {
1259- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: TaskName Parameter is NULL\n" );
1260- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1261- }
1262- else if ( FunctionPtr == NULL )
1263- {
1264- CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Function Pointer Parameter is NULL for Task '%s'\n" ,TaskName );
1265- ReturnCode = CFE_ES_BAD_ARGUMENT ;
1266- }
1267- else
1268- {
1269-
1270- CFE_ES_LockSharedData (__func__ ,__LINE__ );
1246+ memset (& Params , 0 , sizeof (Params ));
1247+ Params .Priority = Priority ;
1248+ Params .StackSize = StackSize ;
12711249
1272- /*
1273- ** Get the App Record of the calling Application
1274- */
1275- AppRecPtr = CFE_ES_GetAppRecordByContext ();
1276- if (AppRecPtr == NULL )
1277- {
1278- CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Invalid calling context when creating Task '%s'\n" ,TaskName );
1279- ReturnCode = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1280- }
1281- else /* else AppId is valid */
1282- {
1283- /*
1284- ** First, Make sure the Calling Task is a cFE Main task.
1285- ** TaskID must be the same as the Parent Task ID.
1286- */
1287- OsalId = OS_TaskGetId ();
1288- SelfTaskId = CFE_ES_TaskId_FromOSAL (OsalId );
1289- if ( CFE_RESOURCEID_TEST_EQUAL (SelfTaskId , AppRecPtr -> MainTaskId ) )
1290- {
1291- /*
1292- ** Step 2: Create the new task using the OS API call
1293- */
1294- Result = OS_TaskCreate (& OsalId , TaskName , FunctionPtr , StackPtr ,
1295- StackSize , Priority , OS_FP_ENABLED );
1296-
1297- /*
1298- ** Step 3: Record the task information in the task table
1299- */
1300- if ( Result == OS_SUCCESS )
1301- {
1302- LocalChildTaskId = CFE_ES_TaskId_FromOSAL (OsalId );
1303- TaskRecPtr = CFE_ES_LocateTaskRecordByID (LocalChildTaskId );
1250+ /*
1251+ ** Validate some of the arguments
1252+ */
1253+ if (TaskIdPtr == NULL )
1254+ {
1255+ if (TaskName == NULL )
1256+ {
1257+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id and Name Pointer Parameters are NULL.\n" );
1258+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1259+ }
1260+ else
1261+ {
1262+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Task Id Pointer Parameter is NULL for Task '%s'.\n" ,
1263+ TaskName );
1264+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1265+ }
1266+ }
1267+ else if (TaskName == NULL )
1268+ {
1269+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: TaskName Parameter is NULL\n" );
1270+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1271+ }
1272+ else if (FunctionPtr == NULL )
1273+ {
1274+ CFE_ES_WriteToSysLog ("CFE_ES_CreateChildTask: Function Pointer Parameter is NULL for Task '%s'\n" , TaskName );
1275+ ReturnCode = CFE_ES_BAD_ARGUMENT ;
1276+ }
1277+ else
1278+ {
1279+ /*
1280+ ** First, Make sure the Calling Task is a cFE Main task.
1281+ ** TaskID must be the same as the Parent Task ID.
1282+ */
1283+ SelfTaskId = CFE_ES_TaskId_FromOSAL (OS_TaskGetId ());
13041284
1305- CFE_ES_TaskRecordSetUsed (TaskRecPtr , CFE_RESOURCEID_UNWRAP (LocalChildTaskId ));
1306- TaskRecPtr -> AppId = CFE_ES_AppRecordGetID (AppRecPtr );
1307- strncpy (TaskRecPtr -> TaskName ,TaskName ,sizeof (TaskRecPtr -> TaskName ) - 1 );
1308- TaskRecPtr -> TaskName [sizeof (TaskRecPtr -> TaskName ) - 1 ] = '\0' ;
1309- CFE_ES_Global .RegisteredTasks ++ ;
1285+ CFE_ES_LockSharedData (__func__ , __LINE__ );
13101286
1311- * TaskIdPtr = CFE_ES_TaskRecordGetID (TaskRecPtr );
1312- ReturnCode = CFE_SUCCESS ;
1313- }
1314- else
1315- {
1316- CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Error calling OS_TaskCreate for Task '%s' RC = 0x%08X\n" ,TaskName ,(unsigned int )Result );
1317- ReturnCode = CFE_ES_ERR_CHILD_TASK_CREATE ;
1318- }
1319- }
1320- else
1321- {
1322- CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Error: Cannot call from a Child Task (for Task '%s').\n" ,TaskName );
1287+ /*
1288+ ** Get the App Record of the calling Application
1289+ */
1290+ AppRecPtr = CFE_ES_GetAppRecordByContext ();
1291+ if (AppRecPtr == NULL )
1292+ {
1293+ CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Invalid calling context when creating Task '%s'\n" ,
1294+ TaskName );
1295+ ReturnCode = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1296+ }
1297+ else if (!CFE_RESOURCEID_TEST_EQUAL (SelfTaskId , AppRecPtr -> MainTaskId ))
1298+ {
1299+ CFE_ES_SysLogWrite_Unsync ("CFE_ES_CreateChildTask: Error: Cannot call from a Child Task (for Task '%s').\n" ,
1300+ TaskName );
13231301 ReturnCode = CFE_ES_ERR_CHILD_TASK_CREATE ;
1302+ }
1303+ else
1304+ {
1305+ ParentAppId = CFE_ES_AppRecordGetID (AppRecPtr );
1306+ ReturnCode = CFE_SUCCESS ;
1307+ } /* end If AppID is valid */
13241308
1325- } /* end if Calling task is a main task */
1326-
1327- }/* end If AppID is valid */
1309+ CFE_ES_UnlockSharedData (__func__ , __LINE__ );
13281310
1329- CFE_ES_UnlockSharedData ( __func__ , __LINE__ );
1311+ } /* end if parameter checking */
13301312
1331- } /* end if parameter checking */
1313+ /*
1314+ ** Step 2: Create the new task if the parameter validation succeeded
1315+ */
1316+ if (ReturnCode == CFE_SUCCESS )
1317+ {
1318+ ReturnCode = CFE_ES_StartAppTask (TaskIdPtr , TaskName , FunctionPtr , & Params , ParentAppId );
1319+ }
13321320
1333- return (ReturnCode );
1321+ return (ReturnCode );
13341322
13351323} /* End of CFE_ES_CreateChildTask() */
13361324
0 commit comments