Skip to content

Commit

Permalink
Fix #393, find standard psp module by name
Browse files Browse the repository at this point in the history
Fix #393, update cfe_psp_module_findbyname and ...getAPIEntry to search
internal module list.
  • Loading branch information
Van committed Aug 12, 2023
1 parent 47d2c1e commit 5d93e17
Showing 1 changed file with 39 additions and 6 deletions.
45 changes: 39 additions & 6 deletions fsw/shared/src/cfe_psp_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
#define CFE_PSP_INTERNAL_MODULE_BASE ((CFE_PSP_MODULE_BASE | CFE_PSP_MODULE_INDEX_MASK) & ~0xFF)

static uint32 CFE_PSP_ConfigPspModuleListLength = 0;
static uint32 CFE_PSP_StandardPspModuleListLength = 0;

/***************************************************
*
Expand Down Expand Up @@ -96,10 +97,9 @@ uint32_t CFE_PSP_ModuleInitList(uint32 BaseId, CFE_StaticModuleLoadEntry_t *List
void CFE_PSP_ModuleInit(void)
{
/* First initialize the fixed set of modules for this PSP */
CFE_PSP_ModuleInitList(CFE_PSP_INTERNAL_MODULE_BASE, CFE_PSP_BASE_MODULE_LIST);
CFE_PSP_StandardPspModuleListLength = CFE_PSP_ModuleInitList(CFE_PSP_INTERNAL_MODULE_BASE, CFE_PSP_BASE_MODULE_LIST);

/* Then initialize any user-selected extension modules */
/* Only these modules can be used with CFE_PSP_Module_GetAPIEntry or CFE_PSP_Module_FindByName */
CFE_PSP_ConfigPspModuleListLength = CFE_PSP_ModuleInitList(CFE_PSP_MODULE_BASE, GLOBAL_CONFIGDATA.PspModuleList);
}

Expand All @@ -115,11 +115,24 @@ int32 CFE_PSP_Module_GetAPIEntry(uint32 PspModuleId, CFE_PSP_ModuleApi_t **API)
Result = CFE_PSP_INVALID_MODULE_ID;
if ((PspModuleId & ~CFE_PSP_MODULE_INDEX_MASK) == CFE_PSP_MODULE_BASE)
{
LocalId = PspModuleId & CFE_PSP_MODULE_INDEX_MASK;
if (LocalId < CFE_PSP_ConfigPspModuleListLength)
/* Last 256 enteries are for internal modules */
if((PspModuleId & CFE_PSP_MODULE_INDEX_MASK) >= 0xFF00 )
{
*API = (CFE_PSP_ModuleApi_t *)GLOBAL_CONFIGDATA.PspModuleList[LocalId].Api;
Result = CFE_PSP_SUCCESS;
LocalId = PspModuleId & 0xFF;
if (LocalId < CFE_PSP_StandardPspModuleListLength)
{
*API = (CFE_PSP_ModuleApi_t *)CFE_PSP_BASE_MODULE_LIST[LocalId].Api;
Result = CFE_PSP_SUCCESS;
}
}
else
{
LocalId = PspModuleId & CFE_PSP_MODULE_INDEX_MASK;
if (LocalId < CFE_PSP_ConfigPspModuleListLength)
{
*API = (CFE_PSP_ModuleApi_t *)GLOBAL_CONFIGDATA.PspModuleList[LocalId].Api;
Result = CFE_PSP_SUCCESS;
}
}
}

Expand All @@ -139,6 +152,8 @@ int32 CFE_PSP_Module_FindByName(const char *ModuleName, uint32 *PspModuleId)
Entry = GLOBAL_CONFIGDATA.PspModuleList;
Result = CFE_PSP_INVALID_MODULE_NAME;
i = 0;

/* Check global list */
while (i < CFE_PSP_ConfigPspModuleListLength)
{
if (strcmp(Entry->Name, ModuleName) == 0)
Expand All @@ -151,5 +166,23 @@ int32 CFE_PSP_Module_FindByName(const char *ModuleName, uint32 *PspModuleId)
++i;
}

/* Check internal list */
if (Result != CFE_PSP_SUCCESS)
{
Entry = CFE_PSP_BASE_MODULE_LIST;
i = 0;
while (i < CFE_PSP_StandardPspModuleListLength)
{
if (strcmp(Entry->Name, ModuleName) == 0)
{
*PspModuleId = CFE_PSP_INTERNAL_MODULE_BASE | (i & CFE_PSP_MODULE_INDEX_MASK);
Result = CFE_PSP_SUCCESS;
break;
}
++Entry;
++i;
}
}

return Result;
}

0 comments on commit 5d93e17

Please sign in to comment.