@@ -965,8 +965,10 @@ int32 CFE_ES_GetTaskName(char *TaskName, CFE_ES_ResourceID_t TaskId, uint32 Buff
965
965
*/
966
966
int32 CFE_ES_GetAppInfo (CFE_ES_AppInfo_t * AppInfo , CFE_ES_ResourceID_t AppId )
967
967
{
968
- int32 ReturnCode = CFE_SUCCESS ;
969
968
CFE_ES_AppRecord_t * AppRecPtr ;
969
+ CFE_ES_TaskRecord_t * TaskRecPtr ;
970
+ int32 Status ;
971
+ uint32 i ;
970
972
971
973
if ( AppInfo == NULL )
972
974
{
@@ -976,73 +978,233 @@ int32 CFE_ES_GetAppInfo(CFE_ES_AppInfo_t *AppInfo, CFE_ES_ResourceID_t AppId)
976
978
977
979
memset (AppInfo , 0 , sizeof (* AppInfo ));
978
980
979
- /*
980
- ** Get App Record
981
- */
982
981
AppRecPtr = CFE_ES_LocateAppRecordByID (AppId );
983
- if ( AppRecPtr == NULL )
982
+
983
+ CFE_ES_LockSharedData (__func__ ,__LINE__ );
984
+
985
+ if ( !CFE_ES_AppRecordIsMatch (AppRecPtr , AppId ) )
984
986
{
985
- CFE_ES_WriteToSysLog ("CFE_ES_GetAppInfo: App ID Invalid: %lu\n" ,
987
+ /*
988
+ * Log a message if called with an invalid ID.
989
+ */
990
+ CFE_ES_WriteToSysLog ("CFE_ES_GetAppInfo: App ID not active: %lu\n" ,
986
991
CFE_ES_ResourceID_ToInteger (AppId ));
987
- return CFE_ES_ERR_RESOURCEID_NOT_VALID ;
988
- }
992
+
993
+ Status = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
994
+ }
995
+ else
996
+ {
997
+ AppInfo -> AppId = AppId ;
998
+ AppInfo -> Type = AppRecPtr -> Type ;
999
+
1000
+ CFE_ES_CopyModuleBasicInfo (& AppRecPtr -> StartParams .BasicInfo , AppInfo );
1001
+ CFE_ES_CopyModuleStatusInfo (& AppRecPtr -> ModuleInfo , AppInfo );
1002
+
1003
+ AppInfo -> StackSize = AppRecPtr -> StartParams .StackSize ;
1004
+ AppInfo -> ExceptionAction = AppRecPtr -> StartParams .ExceptionAction ;
1005
+ AppInfo -> Priority = AppRecPtr -> StartParams .Priority ;
1006
+ AppInfo -> MainTaskId = AppRecPtr -> MainTaskId ;
1007
+
1008
+ /*
1009
+ ** Calculate the number of child tasks
1010
+ */
1011
+ AppInfo -> NumOfChildTasks = 0 ;
1012
+ TaskRecPtr = CFE_ES_Global .TaskTable ;
1013
+ for (i = 0 ; i < OS_MAX_TASKS ; i ++ )
1014
+ {
1015
+ if ( CFE_ES_TaskRecordIsUsed (TaskRecPtr ) &&
1016
+ CFE_ES_ResourceID_Equal (TaskRecPtr -> AppId , AppId ))
1017
+ {
1018
+ if (CFE_ES_ResourceID_Equal (CFE_ES_TaskRecordGetID (TaskRecPtr ), AppInfo -> MainTaskId ))
1019
+ {
1020
+ /* This is the main task - capture its name and execution count */
1021
+ AppInfo -> ExecutionCounter = TaskRecPtr -> ExecutionCounter ;
1022
+ strncpy (AppInfo -> MainTaskName , TaskRecPtr -> TaskName ,
1023
+ sizeof (AppInfo -> MainTaskName ) - 1 );
1024
+ AppInfo -> MainTaskName [sizeof (AppInfo -> MainTaskName ) - 1 ] = '\0' ;
1025
+ }
1026
+ else
1027
+ {
1028
+ /* This is a child task, no extra info, just increment count */
1029
+ ++ AppInfo -> NumOfChildTasks ;
1030
+ }
1031
+ }
1032
+ ++ TaskRecPtr ;
1033
+ }
1034
+
1035
+ Status = CFE_SUCCESS ;
1036
+ }
1037
+
1038
+ CFE_ES_UnlockSharedData (__func__ ,__LINE__ );
989
1039
990
1040
/*
991
- * Note - cannot check if the AppID is active here,
992
- * as the table is not locked. The internal function
993
- * should lock and check.
994
- */
995
- ReturnCode = CFE_ES_GetAppInfoInternal (AppRecPtr , AppInfo );
996
- if (ReturnCode != CFE_SUCCESS )
1041
+ ** Get the address information from the OSAL
1042
+ */
1043
+ if (Status == CFE_SUCCESS )
997
1044
{
998
- CFE_ES_WriteToSysLog ("CFE_ES_GetAppInfo: App ID Not Active: %lu\n" ,
999
- CFE_ES_ResourceID_ToInteger (AppId ));
1045
+ CFE_ES_CopyModuleAddressInfo (AppInfo -> ModuleId , AppInfo );
1000
1046
}
1001
1047
1002
- return (ReturnCode );
1048
+ return Status ;
1049
+ }
1050
+
1051
+ /*
1052
+ ** Function: CFE_ES_GetLibInfo - See API and header file for details
1053
+ */
1054
+ int32 CFE_ES_GetLibInfo (CFE_ES_AppInfo_t * LibInfo , CFE_ES_ResourceID_t LibId )
1055
+ {
1056
+ int32 Status ;
1057
+ CFE_ES_LibRecord_t * LibRecPtr ;
1058
+
1059
+ if ( LibInfo == NULL )
1060
+ {
1061
+ CFE_ES_WriteToSysLog ("CFE_ES_GetLibInfo: Invalid Parameter ( Null Pointer )\n" );
1062
+ return CFE_ES_ERR_BUFFER ;
1063
+ }
1064
+
1065
+ LibRecPtr = CFE_ES_LocateLibRecordByID (LibId );
1066
+
1067
+ CFE_ES_LockSharedData (__func__ ,__LINE__ );
1068
+
1069
+ if ( !CFE_ES_LibRecordIsMatch (LibRecPtr , LibId ) )
1070
+ {
1071
+ /*
1072
+ * Log a message if called with an invalid ID.
1073
+ */
1074
+ CFE_ES_SysLogWrite_Unsync ("CFE_ES_GetLibInfo: Lib ID not active: %lu\n" ,
1075
+ CFE_ES_ResourceID_ToInteger (LibId ));
1076
+
1077
+ Status = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1078
+ }
1079
+ else
1080
+ {
1081
+ LibInfo -> AppId = CFE_ES_LibRecordGetID (LibRecPtr );;
1082
+ LibInfo -> Type = CFE_ES_AppType_LIBRARY ;
1083
+
1084
+ CFE_ES_CopyModuleBasicInfo (& LibRecPtr -> BasicInfo , LibInfo );
1085
+ CFE_ES_CopyModuleStatusInfo (& LibRecPtr -> ModuleInfo , LibInfo );
1086
+
1087
+ Status = CFE_SUCCESS ;
1088
+ }
1089
+
1090
+ CFE_ES_UnlockSharedData (__func__ ,__LINE__ );
1091
+
1092
+ /*
1093
+ ** Get the address information from the OSAL
1094
+ */
1095
+ if (Status == CFE_SUCCESS )
1096
+ {
1097
+ CFE_ES_CopyModuleAddressInfo (LibInfo -> ModuleId , LibInfo );
1098
+ }
1099
+
1100
+ return Status ;
1101
+ }
1102
+
1103
+ /*
1104
+ ** Function: CFE_ES_GetModuleInfo - See API and header file for details
1105
+ */
1106
+ int32 CFE_ES_GetModuleInfo (CFE_ES_AppInfo_t * ModuleInfo , CFE_ES_ResourceID_t ResourceId )
1107
+ {
1108
+ uint32 ResourceType ;
1109
+ int32 Status ;
1110
+
1111
+ ResourceType = CFE_ES_ResourceID_ToInteger (ResourceId );
1112
+ ResourceType -= ResourceType & CFE_ES_RESOURCEID_MAX ;
1113
+ switch (ResourceType )
1114
+ {
1115
+ case CFE_ES_APPID_BASE :
1116
+ Status = CFE_ES_GetAppInfo (ModuleInfo , ResourceId );
1117
+ break ;
1118
+ case CFE_ES_LIBID_BASE :
1119
+ Status = CFE_ES_GetLibInfo (ModuleInfo , ResourceId );
1120
+ break ;
1121
+ default :
1122
+ /*
1123
+ * Log a message if called with an invalid ID.
1124
+ */
1125
+ CFE_ES_WriteToSysLog ("CFE_ES_GetModuleInfo: Resource ID not valid: %lu\n" ,
1126
+ CFE_ES_ResourceID_ToInteger (ResourceId ));
1127
+ Status = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1128
+ break ;
1129
+
1130
+ }
1131
+
1132
+ return (Status );
1003
1133
1004
- } /* End of CFE_ES_GetAppInfo () */
1134
+ } /* End of CFE_ES_GetModuleInfo () */
1005
1135
1006
1136
/*
1007
1137
** Function: CFE_ES_GetTaskInfo - See API and header file for details
1008
1138
*/
1009
1139
int32 CFE_ES_GetTaskInfo (CFE_ES_TaskInfo_t * TaskInfo , CFE_ES_ResourceID_t TaskId )
1010
1140
{
1011
- CFE_ES_TaskRecord_t * TaskRecPtr ;
1012
- int32 ReturnCode ;
1141
+ CFE_ES_TaskRecord_t * TaskRecPtr ;
1142
+ CFE_ES_AppRecord_t * AppRecPtr ;
1143
+ int32 Status ;
1013
1144
1014
- if ( TaskInfo == NULL )
1015
- {
1016
- CFE_ES_WriteToSysLog ("CFE_ES_GetTaskInfo: Invalid Parameter ( Null Pointer )\n" );
1017
- return CFE_ES_ERR_BUFFER ;
1018
- }
1145
+ if ( TaskInfo == NULL )
1146
+ {
1147
+ CFE_ES_WriteToSysLog ("CFE_ES_GetTaskInfo: Invalid Parameter ( Null Pointer )\n" );
1148
+ return CFE_ES_ERR_BUFFER ;
1149
+ }
1019
1150
1020
- memset (TaskInfo , 0 , sizeof (* TaskInfo ));
1151
+ memset (TaskInfo , 0 , sizeof (* TaskInfo ));
1021
1152
1022
- /*
1023
- ** Get Task Record
1024
- */
1025
- TaskRecPtr = CFE_ES_LocateTaskRecordByID (TaskId );
1026
- if ( TaskRecPtr == NULL )
1027
- {
1028
- CFE_ES_WriteToSysLog ("CFE_ES_GetTaskInfo: Task ID Not Valid: %lu\n" ,
1029
- CFE_ES_ResourceID_ToInteger (TaskId ));
1030
- return CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1031
- }
1153
+ TaskRecPtr = CFE_ES_LocateTaskRecordByID (TaskId );
1032
1154
1033
- /*
1034
- * Note - cannot check if the TaskID is active here,
1035
- * as the table is not locked. The internal function
1036
- * should lock and check.
1037
- */
1038
- ReturnCode = CFE_ES_GetTaskInfoInternal (TaskRecPtr , TaskInfo );
1039
- if (ReturnCode != CFE_SUCCESS )
1040
- {
1041
- CFE_ES_WriteToSysLog ("CFE_ES_GetTaskInfo: Task ID Not Active: %lu\n" ,
1042
- CFE_ES_ResourceID_ToInteger (TaskId ));
1043
- }
1155
+ CFE_ES_LockSharedData (__func__ ,__LINE__ );
1044
1156
1045
- return (ReturnCode );
1157
+ if ( !CFE_ES_TaskRecordIsMatch (TaskRecPtr , TaskId ) )
1158
+ {
1159
+ /* task ID is bad */
1160
+ Status = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1161
+ CFE_ES_SysLogWrite_Unsync ("CFE_ES_GetTaskInfo: Task ID Not Active: %lu\n" ,
1162
+ CFE_ES_ResourceID_ToInteger (TaskId ));
1163
+ }
1164
+ else
1165
+ {
1166
+
1167
+ /*
1168
+ ** Get the Application ID and Task Name
1169
+ */
1170
+ TaskInfo -> AppId = TaskRecPtr -> AppId ;
1171
+ strncpy (TaskInfo -> TaskName ,
1172
+ CFE_ES_TaskRecordGetName (TaskRecPtr ),
1173
+ sizeof (TaskInfo -> TaskName )- 1 );
1174
+ TaskInfo -> TaskName [sizeof (TaskInfo -> TaskName )- 1 ] = '\0' ;
1175
+
1176
+ /*
1177
+ ** Store away the Task ID ( for the QueryAllTasks Cmd )
1178
+ */
1179
+ TaskInfo -> TaskId = CFE_ES_TaskRecordGetID (TaskRecPtr );
1180
+
1181
+ /*
1182
+ ** Get the Execution counter for the task
1183
+ */
1184
+ TaskInfo -> ExecutionCounter = TaskRecPtr -> ExecutionCounter ;
1185
+
1186
+ /*
1187
+ ** Get the Application Details
1188
+ */
1189
+ AppRecPtr = CFE_ES_LocateAppRecordByID (TaskRecPtr -> AppId );
1190
+ if (CFE_ES_AppRecordIsMatch (AppRecPtr , TaskRecPtr -> AppId ))
1191
+ {
1192
+ strncpy (TaskInfo -> AppName ,
1193
+ CFE_ES_AppRecordGetName (AppRecPtr ),
1194
+ sizeof (TaskInfo -> AppName )- 1 );
1195
+ TaskInfo -> AppName [sizeof (TaskInfo -> AppName )- 1 ] = '\0' ;
1196
+ Status = CFE_SUCCESS ;
1197
+ }
1198
+ else
1199
+ {
1200
+ /* task ID was OK but parent app ID is bad */
1201
+ Status = CFE_ES_ERR_RESOURCEID_NOT_VALID ;
1202
+ }
1203
+ }
1204
+
1205
+ CFE_ES_UnlockSharedData (__func__ ,__LINE__ );
1206
+
1207
+ return (Status );
1046
1208
1047
1209
} /* End of CFE_ES_GetTaskInfo() */
1048
1210
0 commit comments