From 3bdfd02668b8a5142d9db1b0f34fd5fc5a9b2f72 Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Wed, 15 Jul 2026 14:22:20 -0400 Subject: [PATCH 1/8] Fix #98, standardize the SBN application data global --- fsw/src/sbn_app.c | 221 ++++++++---------- fsw/src/sbn_app.h | 4 +- fsw/src/sbn_cmds.c | 70 +++--- fsw/src/sbn_subs.c | 77 +++--- modules/protocol/tcp/fsw/src/sbn_tcp_if.c | 11 +- .../coveragetest/coveragetest_sbn_udp_if.c | 19 +- unit-test/coveragetest/coveragetest_sbn_app.c | 57 ++--- .../coveragetest/coveragetest_sbn_cmds.c | 2 +- .../coveragetest/coveragetest_sbn_subs.c | 63 ++--- .../coveragetest/sbn_coveragetest_common.c | 9 +- 10 files changed, 261 insertions(+), 272 deletions(-) diff --git a/fsw/src/sbn_app.c b/fsw/src/sbn_app.c index 93d7f58..67b24ef 100644 --- a/fsw/src/sbn_app.c +++ b/fsw/src/sbn_app.c @@ -29,9 +29,10 @@ #include "cfe_platform_cfg.h" #include "cfe_msgids.h" #include "cfe_version.h" +#include "sbn_error.h" /** \brief SBN global application data, indexed by AppID. */ -SBN_App_t SBN; +SBN_AppData_t SBN_AppData; static SBN_Status_t UnloadNets(void); @@ -41,12 +42,12 @@ static SBN_Status_t UnloadModules(void) for (i = 0; i < SBN_MAX_MOD_CNT; i++) { - if (!OS_ObjectIdDefined(SBN.ProtocolModules[i])) + if (!OS_ObjectIdDefined(SBN_AppData.ProtocolModules[i])) { continue; /* this module may have been loaded by ES, so continue in case there are any I loaded. */ } /* end if */ - if (OS_ModuleUnload(SBN.ProtocolModules[i]) != OS_SUCCESS) + if (OS_ModuleUnload(SBN_AppData.ProtocolModules[i]) != OS_SUCCESS) { EVSSendCrit(SBN_TBL_EID, "unable to unload protocol module ID %d", i); return SBN_ERROR; @@ -55,12 +56,12 @@ static SBN_Status_t UnloadModules(void) for (i = 0; i < SBN_MAX_MOD_CNT; i++) { - if (!OS_ObjectIdDefined(SBN.FilterModules[i])) + if (!OS_ObjectIdDefined(SBN_AppData.FilterModules[i])) { continue; /* this module may have been loaded by ES, so continue in case there are any I loaded. */ } /* end if */ - if (OS_ModuleUnload(SBN.FilterModules[i]) != OS_SUCCESS) + if (OS_ModuleUnload(SBN_AppData.FilterModules[i]) != OS_SUCCESS) { EVSSendCrit(SBN_TBL_EID, "unable to unload filter module ID %d", i); return SBN_ERROR; @@ -128,8 +129,7 @@ bool SBN_UnpackMsg(void *SBNBuf, CFE_SpacecraftID_t *SpacecraftIDPtr, void *Msg) { - *MsgSzPtr = 0; - uint8 t = 0; + uint8 t = 0; Pack_t Pack; Pack_Init(&Pack, SBNBuf, SBN_MAX_PACKED_MSG_SZ, false); Unpack_UInt32(&Pack, MsgSzPtr); @@ -293,9 +293,9 @@ void SBN_RecvPeerTask(void) CFE_ES_GetTaskID(&D.RecvTaskID); - for (D.NetIdx = 0; D.NetIdx < SBN.NetCnt; D.NetIdx++) + for (D.NetIdx = 0; D.NetIdx < SBN_AppData.NetCnt; D.NetIdx++) { - D.Net = &SBN.Nets[D.NetIdx]; + D.Net = &SBN_AppData.Nets[D.NetIdx]; if (!D.Net->Configured) { continue; @@ -316,7 +316,7 @@ void SBN_RecvPeerTask(void) } /* end if */ } /* end for */ - if (D.NetIdx == SBN.NetCnt) + if (D.NetIdx == SBN_AppData.NetCnt) { EVSSendErr(SBN_PEERTASK_EID, "unable to connect task to peer struct"); return; @@ -381,16 +381,16 @@ void SBN_RecvNetTask(void) CFE_ES_GetTaskID(&D.RecvTaskID); - for (D.NetIdx = 0; D.NetIdx < SBN.NetCnt; D.NetIdx++) + for (D.NetIdx = 0; D.NetIdx < SBN_AppData.NetCnt; D.NetIdx++) { - D.Net = &SBN.Nets[D.NetIdx]; + D.Net = &SBN_AppData.Nets[D.NetIdx]; if (CFE_RESOURCEID_TEST_EQUAL(D.Net->RecvTaskID, D.RecvTaskID)) { break; } /* end if */ } /* end for */ - if (D.NetIdx == SBN.NetCnt) + if (D.NetIdx == SBN_AppData.NetCnt) { EVSSendErr(SBN_PEERTASK_EID, "%s unable to connect task to net struct", FAIL_PREFIX_STARTUP); return; @@ -448,9 +448,9 @@ SBN_Status_t SBN_RecvNetMsgs(void) SBN_Status_t SBN_Status = 0; SBN_NetIdx_t NetIdx = 0; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; SBN_MsgType_t MsgType; SBN_MsgSz_t MsgSz; CFE_ProcessorID_t ProcessorID; @@ -467,9 +467,9 @@ SBN_Status_t SBN_RecvNetMsgs(void) // TODO: make configurable for (MsgCnt = 0; MsgCnt < 100; MsgCnt++) /* read at most 100 messages from the net */ { - /*memset(SBN.MsgBuffer, 0, sizeof(SBN.MsgBuffer));*/ + /*memset(SBN_AppData.MsgBuffer, 0, sizeof(SBN_AppData.MsgBuffer));*/ - SBN_Status = Net->IfOps->RecvFromNet(Net, &MsgType, &MsgSz, &ProcessorID, &SpacecraftID, SBN.MsgBuffer); + SBN_Status = Net->IfOps->RecvFromNet(Net, &MsgType, &MsgSz, &ProcessorID, &SpacecraftID, SBN_AppData.MsgBuffer); if (SBN_Status == SBN_IF_EMPTY) { @@ -489,7 +489,7 @@ SBN_Status_t SBN_RecvNetMsgs(void) } /* end if */ OS_GetLocalTime(&Peer->LastRecv); - SBN_ProcessNetMsg(Net, MsgType, ProcessorID, SpacecraftID, MsgSz, SBN.MsgBuffer); /* ignore errors */ + SBN_ProcessNetMsg(Net, MsgType, ProcessorID, SpacecraftID, MsgSz, SBN_AppData.MsgBuffer); /* ignore errors */ } /* end for */ } else if (Net->IfOps->RecvFromPeer) @@ -503,20 +503,11 @@ SBN_Status_t SBN_RecvNetMsgs(void) // TODO: make configurable for (MsgCnt = 0; MsgCnt < 100; MsgCnt++) /* read at most 100 messages from peer */ { - CFE_ProcessorID_t PeerProcessorID = 0; - CFE_SpacecraftID_t PeerSpacecraftID = 0; - SBN_MsgType_t PeerMsgType = 0; - SBN_MsgSz_t PeerMsgSz = 0; + memset(SBN_AppData.MsgBuffer, 0, sizeof(SBN_AppData.MsgBuffer)); - memset(SBN.MsgBuffer, 0, sizeof(SBN.MsgBuffer)); - - SBN_Status = Net->IfOps->RecvFromPeer(Net, - Peer, - &PeerMsgType, - &PeerMsgSz, - &PeerProcessorID, - &PeerSpacecraftID, - SBN.MsgBuffer); + SBN_Status = + Net->IfOps + ->RecvFromPeer(Net, Peer, &MsgType, &MsgSz, &ProcessorID, &SpacecraftID, SBN_AppData.MsgBuffer); if (SBN_Status == SBN_IF_EMPTY) { @@ -525,12 +516,7 @@ SBN_Status_t SBN_RecvNetMsgs(void) OS_GetLocalTime(&Peer->LastRecv); - SBN_Status = SBN_ProcessNetMsg(Net, - PeerMsgType, - PeerProcessorID, - PeerSpacecraftID, - PeerMsgSz, - SBN.MsgBuffer); + SBN_Status = SBN_ProcessNetMsg(Net, MsgType, ProcessorID, SpacecraftID, MsgSz, SBN_AppData.MsgBuffer); if (SBN_Status != SBN_SUCCESS) { @@ -567,7 +553,7 @@ SBN_Status_t SBN_SendNetMsg(SBN_MsgType_t MsgType, SBN_MsgSz_t MsgSz, void *Msg, if (CFE_RESOURCEID_TEST_DEFINED(Peer->SendTaskID)) { - if (OS_MutSemTake(SBN.SendMutex) != OS_SUCCESS) + if (OS_MutSemTake(SBN_AppData.SendMutex) != OS_SUCCESS) { EVSSendErr(SBN_PEER_EID, "unable to take send mutex"); return SBN_ERROR; @@ -590,7 +576,7 @@ SBN_Status_t SBN_SendNetMsg(SBN_MsgType_t MsgType, SBN_MsgSz_t MsgSz, void *Msg, if (CFE_RESOURCEID_TEST_DEFINED(Peer->SendTaskID)) { - if (OS_MutSemGive(SBN.SendMutex) != OS_SUCCESS) + if (OS_MutSemGive(SBN_AppData.SendMutex) != OS_SUCCESS) { EVSSendErr(SBN_PEER_EID, "unable to give send mutex"); return SBN_ERROR; @@ -630,9 +616,9 @@ void SBN_SendTask(void) CFE_ES_GetTaskID(&D.SendTaskID); - for (D.NetIdx = 0; D.NetIdx < SBN.NetCnt; D.NetIdx++) + for (D.NetIdx = 0; D.NetIdx < SBN_AppData.NetCnt; D.NetIdx++) { - D.Net = &SBN.Nets[D.NetIdx]; + D.Net = &SBN_AppData.Nets[D.NetIdx]; for (D.PeerIdx = 0; D.PeerIdx < D.Net->PeerCnt; D.PeerIdx++) { D.Peer = &D.Net->Peers[D.PeerIdx]; @@ -648,7 +634,7 @@ void SBN_SendTask(void) } /* end if */ } /* end for */ - if (D.NetIdx == SBN.NetCnt) + if (D.NetIdx == SBN_AppData.NetCnt) { EVSSendErr(SBN_PEER_EID, "error connecting send task"); return; @@ -724,7 +710,7 @@ static SBN_Status_t CheckPeerPipes(void) { CFE_Status_t CFE_Status; int ReceivedFlag; - int iter = 0; + int iter; CFE_MSG_Message_t *MsgPtr = NULL; CFE_MSG_Size_t MsgSz = 0; SBN_MsgSz_t SBN_MsgSz = 0; @@ -743,9 +729,9 @@ static SBN_Status_t CheckPeerPipes(void) ReceivedFlag = 0; SBN_NetIdx_t NetIdx = 0; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; SBN_PeerIdx_t PeerIdx = 0; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) @@ -868,9 +854,9 @@ static SBN_Status_t PeerPoll(void) { CFE_Status_t CFE_Status; SBN_NetIdx_t NetIdx = 0; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; if (Net->IfOps->RecvFromNet && Net->TaskFlags & SBN_TASK_RECV) { @@ -946,7 +932,7 @@ static SBN_Status_t PeerPoll(void) */ static SBN_Status_t InitInterfaces(void) { - if (SBN.NetCnt < 1) + if (SBN_AppData.NetCnt < 1) { EVSSendErr(SBN_PEER_EID, "no networks configured"); @@ -954,10 +940,10 @@ static SBN_Status_t InitInterfaces(void) } /* end if */ SBN_NetIdx_t NetIdx = 0; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { EVSSendInfo(SBN_PEER_EID, "initializing net: %d", (int)NetIdx); - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; if (!Net->Configured) { @@ -985,11 +971,11 @@ static SBN_Status_t InitInterfaces(void) } /* end for */ } /* end for */ - EVSSendInfo(SBN_INIT_EID, "configured, %d nets", SBN.NetCnt); + EVSSendInfo(SBN_INIT_EID, "configured, %d nets", SBN_AppData.NetCnt); - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - EVSSendInfo(SBN_INIT_EID, "net %d has %d peers", NetIdx, SBN.Nets[NetIdx].PeerCnt); + EVSSendInfo(SBN_INIT_EID, "net %d has %d peers", NetIdx, SBN_AppData.Nets[NetIdx].PeerCnt); } /* end for */ return SBN_SUCCESS; @@ -1009,7 +995,7 @@ static SBN_Status_t WaitForWakeup(int32 iTimeOut) CFE_MSG_Message_t *MsgPtr = 0; /* Wait for WakeUp messages from scheduler */ - CFE_Status = CFE_SB_ReceiveBuffer((CFE_SB_Buffer_t **)&MsgPtr, SBN.CmdPipe, iTimeOut); + CFE_Status = CFE_SB_ReceiveBuffer((CFE_SB_Buffer_t **)&MsgPtr, SBN_AppData.CmdPipe, iTimeOut); switch (CFE_Status) { @@ -1060,7 +1046,7 @@ static SBN_Status_t WaitForWakeup(int32 iTimeOut) */ static cpuaddr LoadConf_Module(SBN_Module_Entry_t *e, CFE_ES_ModuleID_t *ModuleIDPtr) { - cpuaddr StructAddr = 0; + cpuaddr StructAddr; EVSSendInfo(SBN_TBL_EID, "checking if module (%s) already loaded", e->Name); if (OS_SymbolLookup(&StructAddr, e->LibSymbol) != OS_SUCCESS) /* try loading it if it's not already loaded */ @@ -1141,7 +1127,6 @@ static SBN_ModuleIdx_t LoadConf_Filters(SBN_Module_Entry_t *FilterModu static SBN_Status_t LoadConf(void) { - SBN_ConfTbl_t *TblPtr = NULL; SBN_ModuleIdx_t ModuleIdx = 0; SBN_PeerIdx_t PeerIdx = 0; SBN_FilterInterface_t *Filters[SBN_MAX_MOD_CNT]; @@ -1154,20 +1139,20 @@ static SBN_Status_t LoadConf(void) memset(Filters, 0, sizeof(Filters)); - if (CFE_TBL_GetAddress((void **)&TblPtr, SBN.ConfTblHandle) != CFE_TBL_INFO_UPDATED) + if (CFE_TBL_GetAddress((void **)&SBN_AppData.ConfTbl, SBN_AppData.ConfTblHandle) != CFE_TBL_INFO_UPDATED) { EVSSendErr(SBN_TBL_EID, "unable to get conf table address"); - CFE_TBL_Unregister(SBN.ConfTblHandle); + CFE_TBL_Unregister(SBN_AppData.ConfTblHandle); return SBN_ERROR; } /* end if */ /* load protocol modules */ EVSSendDbg(SBN_TBL_EID, "Loading protocol modules..."); - for (ModuleIdx = 0; ModuleIdx < TblPtr->ProtocolCnt; ModuleIdx++) + for (ModuleIdx = 0; ModuleIdx < SBN_AppData.ConfTbl->ProtocolCnt; ModuleIdx++) { CFE_ES_ModuleID_t ModuleID = OS_OBJECT_ID_UNDEFINED; - SBN_IfOps_t *Ops = (SBN_IfOps_t *)LoadConf_Module(&TblPtr->ProtocolModules[ModuleIdx], &ModuleID); + SBN_IfOps_t *Ops = (SBN_IfOps_t *)LoadConf_Module(&SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx], &ModuleID); if (Ops == NULL) { @@ -1176,24 +1161,24 @@ static SBN_Status_t LoadConf(void) } /* end if */ EVSSendInfo(SBN_TBL_EID, "initializing protocol module"); - if (Ops->InitModule(SBN_PROTOCOL_VERSION, TblPtr->ProtocolModules[ModuleIdx].BaseEID, &Outlet) != CFE_SUCCESS) + if (Ops->InitModule(SBN_PROTOCOL_VERSION, SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx].BaseEID, &Outlet) != SBN_SUCCESS) { EVSSendErr(SBN_TBL_EID, "error in protocol init"); return SBN_ERROR; } /* end if */ EVSSendInfo(SBN_TBL_EID, "protocol module initialized"); - SBN.IfOps[ModuleIdx] = Ops; - SBN.ProtocolModules[ModuleIdx] = ModuleID; + SBN_AppData.IfOps[ModuleIdx] = Ops; + SBN_AppData.ProtocolModules[ModuleIdx] = ModuleID; } /* end for */ /* load filter modules */ EVSSendDbg(SBN_TBL_EID, "Loading filter modules..."); - for (ModuleIdx = 0; ModuleIdx < TblPtr->FilterCnt; ModuleIdx++) + for (ModuleIdx = 0; ModuleIdx < SBN_AppData.ConfTbl->FilterCnt; ModuleIdx++) { CFE_ES_ModuleID_t ModuleID = OS_OBJECT_ID_UNDEFINED; - Filters[ModuleIdx] = (SBN_FilterInterface_t *)LoadConf_Module(&TblPtr->FilterModules[ModuleIdx], &ModuleID); + Filters[ModuleIdx] = (SBN_FilterInterface_t *)LoadConf_Module(&SBN_AppData.ConfTbl->FilterModules[ModuleIdx], &ModuleID); if (Filters[ModuleIdx] == NULL) { @@ -1202,34 +1187,34 @@ static SBN_Status_t LoadConf(void) } /* end if */ EVSSendInfo(SBN_TBL_EID, "initializing filter module"); - if (Filters[ModuleIdx]->InitModule(SBN_FILTER_VERSION, TblPtr->FilterModules[ModuleIdx].BaseEID) != CFE_SUCCESS) + if (Filters[ModuleIdx]->InitModule(SBN_FILTER_VERSION, SBN_AppData.ConfTbl->FilterModules[ModuleIdx].BaseEID) != SBN_SUCCESS) { EVSSendErr(SBN_TBL_EID, "error in filter init"); return SBN_ERROR; } /* end if */ EVSSendInfo(SBN_TBL_EID, "filter module initialized"); - SBN.FilterModules[ModuleIdx] = ModuleID; + SBN_AppData.FilterModules[ModuleIdx] = ModuleID; } /* end for */ /* load nets and peers */ - for (PeerIdx = 0; PeerIdx < TblPtr->PeerCnt; PeerIdx++) + for (PeerIdx = 0; PeerIdx < SBN_AppData.ConfTbl->PeerCnt; PeerIdx++) { - SBN_Peer_Entry_t *e = &TblPtr->Peers[PeerIdx]; + SBN_Peer_Entry_t *e = &SBN_AppData.ConfTbl->Peers[PeerIdx]; EVSSendInfo(SBN_TBL_EID, "configuring peer (SC=%d, CPU=%d)...", e->SpacecraftID, e->ProcessorID); - for (ModuleIdx = 0; ModuleIdx < TblPtr->ProtocolCnt; ModuleIdx++) + for (ModuleIdx = 0; ModuleIdx < SBN_AppData.ConfTbl->ProtocolCnt; ModuleIdx++) { - if (strcmp(TblPtr->ProtocolModules[ModuleIdx].Name, e->ProtocolName) == 0) + if (strcmp(SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx].Name, e->ProtocolName) == 0) { break; } } - if (ModuleIdx == TblPtr->ProtocolCnt) + if (ModuleIdx == SBN_AppData.ConfTbl->ProtocolCnt) { - EVSSendCrit(SBN_TBL_EID, "invalid module name %s", e->ProtocolName); + EVSSendCrit(SBN_TBL_EID, "invalid module type %s", e->ProtocolName); return SBN_ERROR; } /* end if */ @@ -1240,26 +1225,26 @@ static SBN_Status_t LoadConf(void) } /* end if */ /* Net initialization */ - if (e->NetNum + 1 > SBN.NetCnt) + if (e->NetNum + 1 > SBN_AppData.NetCnt) { EVSSendInfo(SBN_TBL_EID, "found new highest net id: %d", e->NetNum); - SBN.NetCnt = e->NetNum + 1; - SBN.Nets[e->NetNum].PeerCnt = 0; - EVSSendInfo(SBN_TBL_EID, "increasing net count to %d", SBN.NetCnt); + SBN_AppData.NetCnt = e->NetNum + 1; + SBN_AppData.Nets[e->NetNum].PeerCnt = 0; + EVSSendInfo(SBN_TBL_EID, "increasing net count to %d", SBN_AppData.NetCnt); } /* end if */ - SBN_NetInterface_t *Net = &SBN.Nets[e->NetNum]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[e->NetNum]; /* Reset peer count since we're initializing the net */ if (e->ProcessorID == CFE_PSP_GetProcessorId() && e->SpacecraftID == CFE_PSP_GetSpacecraftId()) { EVSSendInfo(SBN_TBL_EID, "peer is this processor: loading net %d", e->NetNum); Net->Configured = true; Net->ProtocolIdx = ModuleIdx; - Net->IfOps = SBN.IfOps[ModuleIdx]; + Net->IfOps = SBN_AppData.IfOps[ModuleIdx]; Net->IfOps->LoadNet(Net, (const char *)e->Address); Net->FilterCnt = - LoadConf_Filters(TblPtr->FilterModules, TblPtr->FilterCnt, Filters, e->Filters, Net->Filters); + LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, SBN_AppData.ConfTbl->FilterCnt, Filters, e->Filters, Net->Filters); Net->TaskFlags = e->TaskFlags; } @@ -1273,16 +1258,16 @@ static SBN_Status_t LoadConf(void) Peer->SpacecraftID = e->SpacecraftID; Peer->FilterCnt = - LoadConf_Filters(TblPtr->FilterModules, TblPtr->FilterCnt, Filters, e->Filters, Peer->Filters); + LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, SBN_AppData.ConfTbl->FilterCnt, Filters, e->Filters, Peer->Filters); - SBN.IfOps[ModuleIdx]->LoadPeer(Peer, (const char *)e->Address); + SBN_AppData.IfOps[ModuleIdx]->LoadPeer(Peer, (const char *)e->Address); Peer->TaskFlags = e->TaskFlags; } /* end if */ } /* end for */ /* address only needed at load time, release */ - if (CFE_TBL_ReleaseAddress(SBN.ConfTblHandle) != CFE_SUCCESS) + if (CFE_TBL_ReleaseAddress(SBN_AppData.ConfTblHandle) != CFE_SUCCESS) { EVSSendCrit(SBN_TBL_EID, "unable to release address of conf tbl"); return SBN_ERROR; @@ -1364,9 +1349,9 @@ static SBN_Status_t UnloadNets(void) uint32 Status; int NetIdx = 0; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; Net->Configured = false; if (CFE_RESOURCEID_TEST_DEFINED(Net->RecvTaskID)) @@ -1402,7 +1387,7 @@ static SBN_Status_t UnloadNets(void) Net->PeerCnt = 0; } /* end for */ - SBN.NetCnt = 0; + SBN_AppData.NetCnt = 0; return SBN_SUCCESS; } @@ -1411,32 +1396,32 @@ static uint32 LoadConfTbl(void) { int32 Status = CFE_SUCCESS; - if ((Status = CFE_TBL_Register(&SBN.ConfTblHandle, "SBN_ConfTbl", sizeof(SBN_ConfTbl_t), CFE_TBL_OPT_DEFAULT, NULL)) + if ((Status = CFE_TBL_Register(&SBN_AppData.ConfTblHandle, "SBN_ConfTbl", sizeof(SBN_ConfTbl_t), CFE_TBL_OPT_DEFAULT, NULL)) != CFE_SUCCESS) { EVSSendErr(SBN_TBL_EID, "unable to register conf tbl handle"); return Status; } /* end if */ - if ((Status = CFE_TBL_Load(SBN.ConfTblHandle, CFE_TBL_SRC_FILE, SBN_CONF_TBL_FILENAME)) != CFE_SUCCESS) + if ((Status = CFE_TBL_Load(SBN_AppData.ConfTblHandle, CFE_TBL_SRC_FILE, SBN_CONF_TBL_FILENAME)) != CFE_SUCCESS) { EVSSendErr(SBN_TBL_EID, "unable to load conf tbl %s", SBN_CONF_TBL_FILENAME); - CFE_TBL_Unregister(SBN.ConfTblHandle); + CFE_TBL_Unregister(SBN_AppData.ConfTblHandle); return Status; } /* end if */ - if ((Status = CFE_TBL_Manage(SBN.ConfTblHandle)) != CFE_SUCCESS) + if ((Status = CFE_TBL_Manage(SBN_AppData.ConfTblHandle)) != CFE_SUCCESS) { EVSSendErr(SBN_TBL_EID, "unable to manage conf tbl"); - CFE_TBL_Unregister(SBN.ConfTblHandle); + CFE_TBL_Unregister(SBN_AppData.ConfTblHandle); return Status; } /* end if */ - if ((Status = CFE_TBL_NotifyByMessage(SBN.ConfTblHandle, CFE_SB_ValueToMsgId(SBN_CMD_MID), SBN_TBL_CC, 0)) + if ((Status = CFE_TBL_NotifyByMessage(SBN_AppData.ConfTblHandle, CFE_SB_ValueToMsgId(SBN_CMD_MID), SBN_TBL_CC, 0)) != CFE_SUCCESS) { EVSSendErr(SBN_TBL_EID, "unable to set notifybymessage for conf tbl"); - CFE_TBL_Unregister(SBN.ConfTblHandle); + CFE_TBL_Unregister(SBN_AppData.ConfTblHandle); return Status; } /* end if */ @@ -1448,7 +1433,7 @@ static SBN_Status_t TeardownSubPipe(void) CFE_Status_t Status; /* Delete pipe for subscribes and unsubscribes from SB */ - Status = CFE_SB_DeletePipe(SBN.SubPipe); + Status = CFE_SB_DeletePipe(SBN_AppData.SubPipe); if (Status != CFE_SUCCESS) { EVSSendErr(SBN_INIT_EID, "failed to delete subscription pipe (Status=%d)", (int)Status); @@ -1463,7 +1448,7 @@ static SBN_Status_t SetupSubPipe(void) CFE_Status_t Status; /* Create pipe for subscribes and unsubscribes from SB */ - Status = CFE_SB_CreatePipe(&SBN.SubPipe, SBN_SUB_PIPE_DEPTH, "SBNSubPipe"); + Status = CFE_SB_CreatePipe(&SBN_AppData.SubPipe, SBN_SUB_PIPE_DEPTH, "SBNSubPipe"); if (Status != CFE_SUCCESS) { EVSSendErr(SBN_INIT_EID, "failed to create subscription pipe (Status=%d)", (int)Status); @@ -1471,7 +1456,7 @@ static SBN_Status_t SetupSubPipe(void) } /* end if */ Status = - CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ALLSUBS_TLM_MID), SBN.SubPipe, SBN_MAX_ALLSUBS_PKTS_ON_PIPE); + CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ALLSUBS_TLM_MID), SBN_AppData.SubPipe, SBN_MAX_ALLSUBS_PKTS_ON_PIPE); if (Status != CFE_SUCCESS) { EVSSendErr(SBN_INIT_EID, "failed to subscribe to allsubs (Status=%d)", (int)Status); @@ -1479,7 +1464,7 @@ static SBN_Status_t SetupSubPipe(void) } /* end if */ Status = - CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ONESUB_TLM_MID), SBN.SubPipe, SBN_MAX_ONESUB_PKTS_ON_PIPE); + CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ONESUB_TLM_MID), SBN_AppData.SubPipe, SBN_MAX_ONESUB_PKTS_ON_PIPE); if (Status != CFE_SUCCESS) { EVSSendErr(SBN_INIT_EID, "failed to subscribe to sub (Status=%d)", (int)Status); @@ -1520,11 +1505,11 @@ static SBN_Status_t Init(void) EVSSendInfo(SBN_INIT_EID, "initialized (ProcessorID=%d SpacecraftId=%d %s " - "SBN.AppID=%d...", + "SBN_AppData.AppID=%d...", (int)CFE_PSP_GetProcessorId(), (int)CFE_PSP_GetSpacecraftId(), bit_order, - (int)CFE_RESOURCEID_TO_ULONG(SBN.AppID)); + (int)CFE_RESOURCEID_TO_ULONG(SBN_AppData.AppID)); EVSSendInfo(SBN_INIT_EID, "...SBN_IDENT=%s CMD_MID=0x%04X)", SBN_IDENT, SBN_CMD_MID); @@ -1563,11 +1548,11 @@ static SBN_Status_t Cleanup(void) } /* end if */ // cleanup subs - memset(SBN.Subs, 0, sizeof(SBN.Subs)); + memset(SBN_AppData.Subs, 0, sizeof(SBN_AppData.Subs)); - SBN.SubCnt = 0; + SBN_AppData.SubCnt = 0; - if (CFE_TBL_Update(SBN.ConfTblHandle) != CFE_SUCCESS) + if (CFE_TBL_Update(SBN_AppData.ConfTblHandle) != CFE_SUCCESS) { EVSSendErr(SBN_PEER_EID, "unable to update table"); return SBN_ERROR; @@ -1580,10 +1565,10 @@ static SBN_Status_t Cleanup(void) void SBN_AppMain(void) { static const char FAIL_PREFIX[] = "ERROR: could not start SBN:"; - CFE_ES_TaskInfo_t TaskInfo = { 0 }; - uint32 Status = CFE_SUCCESS; - uint32 RunStatus = CFE_ES_RunStatus_APP_RUN; - CFE_ES_AppId_t AppID = CFE_ES_APPID_UNDEFINED; + CFE_ES_TaskInfo_t TaskInfo; + uint32 Status = CFE_SUCCESS; + uint32 RunStatus = CFE_ES_RunStatus_APP_RUN; + CFE_ES_AppId_t AppID = CFE_ES_APPID_UNDEFINED; if (CFE_EVS_Register(NULL, 0, CFE_EVS_NO_FILTER) != CFE_SUCCESS) return; @@ -1594,10 +1579,10 @@ void SBN_AppMain(void) return; } - SBN.AppID = AppID; + SBN_AppData.AppID = AppID; /* load my TaskName so I can ignore messages I send out to SB */ - CFE_ES_TaskId_t TskId = CFE_ES_TASKID_UNDEFINED; + CFE_ES_TaskId_t TskId; CFE_ES_GetTaskID(&TskId); if ((Status = CFE_ES_GetTaskInfo(&TaskInfo, TskId)) != CFE_SUCCESS) { @@ -1605,11 +1590,11 @@ void SBN_AppMain(void) return; } /* end if */ - strncpy(SBN.App_FullName, (const char *)TaskInfo.TaskName, OS_MAX_API_NAME - 1); - SBN.App_FullName[OS_MAX_API_NAME - 1] = '\0'; + strncpy(SBN_AppData.App_FullName, (const char *)TaskInfo.TaskName, OS_MAX_API_NAME - 1); + SBN_AppData.App_FullName[OS_MAX_API_NAME - 1] = '\0'; /** Create mutex for send tasks */ - Status = OS_MutSemCreate(&(SBN.SendMutex), "sbn_send_mutex", 0); + Status = OS_MutSemCreate(&(SBN_AppData.SendMutex), "sbn_send_mutex", 0); if (Status != OS_SUCCESS) { @@ -1618,7 +1603,7 @@ void SBN_AppMain(void) } /** Create mutex for coordinating live reconfiguration **/ - Status = OS_MutSemCreate(&(SBN.ConfMutex), "sbn_conf_mutex", 0); + Status = OS_MutSemCreate(&(SBN_AppData.ConfMutex), "sbn_conf_mutex", 0); if (Status != OS_SUCCESS) { EVSSendErr(SBN_INIT_EID, "%s error creating mutex for configuiration", FAIL_PREFIX); @@ -1627,14 +1612,14 @@ void SBN_AppMain(void) /* Create pipe for HK requests and gnd commands */ /* TODO: make configurable depth */ - Status = CFE_SB_CreatePipe(&SBN.CmdPipe, 20, "SBNCmdPipe"); + Status = CFE_SB_CreatePipe(&SBN_AppData.CmdPipe, 20, "SBNCmdPipe"); if (Status != CFE_SUCCESS) { EVSSendErr(SBN_INIT_EID, "%s failed to create command pipe (%d)", FAIL_PREFIX, (int)Status); return; } /* end if */ - Status = CFE_SB_Subscribe(CFE_SB_ValueToMsgId(SBN_CMD_MID), SBN.CmdPipe); + Status = CFE_SB_Subscribe(CFE_SB_ValueToMsgId(SBN_CMD_MID), SBN_AppData.CmdPipe); if (Status == CFE_SUCCESS) { EVSSendInfo(SBN_INIT_EID, "SBN subscribed to command pipe SBN_CMD_MID 0x%04X", SBN_CMD_MID); @@ -1663,7 +1648,7 @@ void SBN_AppMain(void) /* Loop Forever */ while (CFE_ES_RunLoop(&RunStatus)) { - if (OS_MutSemTake(SBN.ConfMutex) != OS_SUCCESS) + if (OS_MutSemTake(SBN_AppData.ConfMutex) != OS_SUCCESS) { EVSSendErr(SBN_PEER_EID, "ERROR: SBN run loop unable to take configuration mutex"); break; @@ -1671,7 +1656,7 @@ void SBN_AppMain(void) WaitForWakeup(SBN_MAIN_LOOP_DELAY); - if (OS_MutSemGive(SBN.ConfMutex) != OS_SUCCESS) + if (OS_MutSemGive(SBN_AppData.ConfMutex) != OS_SUCCESS) { EVSSendErr(SBN_PEER_EID, "ERROR: SBN run loop unable to give configuration mutex"); break; @@ -1837,7 +1822,7 @@ SBN_Status_t SBN_ReloadConfTbl(void) EVSSendInfo(SBN_TBL_EID, "re-initializing SBN with new configuration..."); - if (OS_MutSemTake(SBN.ConfMutex) != OS_SUCCESS) + if (OS_MutSemTake(SBN_AppData.ConfMutex) != OS_SUCCESS) { EVSSendErr(SBN_PEER_EID, "%s could not take configuration mutex", FAIL_PREFIX); return SBN_ERROR; @@ -1856,7 +1841,7 @@ SBN_Status_t SBN_ReloadConfTbl(void) EVSSendInfo(SBN_TBL_EID, "SBN re-initialized."); } - if (OS_MutSemGive(SBN.ConfMutex) != OS_SUCCESS) + if (OS_MutSemGive(SBN_AppData.ConfMutex) != OS_SUCCESS) { EVSSendErr(SBN_PEER_EID, "%s could not give configuration mutex", FAIL_PREFIX); return SBN_ERROR; diff --git a/fsw/src/sbn_app.h b/fsw/src/sbn_app.h index 94edcd6..f38454b 100644 --- a/fsw/src/sbn_app.h +++ b/fsw/src/sbn_app.h @@ -115,12 +115,12 @@ typedef struct /* Buffer for receiving messages, allocated here to avoid stack smashing */ uint8 MsgBuffer[CFE_MISSION_SB_MAX_SB_MSG_SIZE]; -} SBN_App_t; +} SBN_AppData_t; /** * \brief SBN glocal data structure references, indexed by AppId. */ -extern SBN_App_t SBN; +extern SBN_AppData_t SBN_AppData; /* ** Prototypes diff --git a/fsw/src/sbn_cmds.c b/fsw/src/sbn_cmds.c index b5a9f9d..4732b04 100644 --- a/fsw/src/sbn_cmds.c +++ b/fsw/src/sbn_cmds.c @@ -44,13 +44,13 @@ static void InitializePeerCounters(SBN_PeerInterface_t *Peer) */ void SBN_InitializeCounters(void) { - SBN.CmdCnt = 0; - SBN.CmdErrCnt = 0; + SBN_AppData.CmdCnt = 0; + SBN_AppData.CmdErrCnt = 0; int NetIdx = 0; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; int PeerIdx = 0; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { @@ -130,7 +130,7 @@ static bool VerifyMsgLen(CFE_MSG_Message_t *MsgPtr, uint16 ExpectedLen, const ch (int)ActualLen, (int)ExpectedLen); - SBN.CmdErrCnt++; + SBN_AppData.CmdErrCnt++; } /* end if */ return false; @@ -164,7 +164,7 @@ static void NoopCmd(CFE_MSG_Message_t *MsgPtr) EVSSendInfo(SBN_CMD_EID, "no-op command"); - SBN.CmdCnt++; + SBN_AppData.CmdCnt++; } /* end NoopCmd */ /************************************************************************/ @@ -230,13 +230,13 @@ static void HKResetPeerCmd(CFE_MSG_Message_t *MsgPtr) uint8 NetIdx = *Ptr++; uint8 PeerIdx = *Ptr; - if (NetIdx < 0 || NetIdx >= SBN.NetCnt) + if (NetIdx < 0 || NetIdx >= SBN_AppData.NetCnt) { - EVSSendErr(SBN_CMD_EID, "invalid net idx %d (max=%d)", NetIdx, SBN.NetCnt); + EVSSendErr(SBN_CMD_EID, "invalid net idx %d (max=%d)", NetIdx, SBN_AppData.NetCnt); return; } /* end if */ - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; if (PeerIdx < 0 || PeerIdx >= Net->PeerCnt) { @@ -247,7 +247,7 @@ static void HKResetPeerCmd(CFE_MSG_Message_t *MsgPtr) SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; EVSSendInfo(SBN_CMD_EID, "hk reset peer command (NetIdx=%d, PeerIdx=%d)", NetIdx, PeerIdx); - SBN.CmdCnt++; + SBN_AppData.CmdCnt++; InitializePeerCounters(Peer); } /* end HKResetPeerCmd */ @@ -289,10 +289,10 @@ static void HKCmd(CFE_MSG_Message_t *MsgPtr) Pack_Init(&Pack, HKBuf + sizeof(CFE_MSG_TelemetryHeader_t), SBN_HK_LEN - sizeof(CFE_MSG_TelemetryHeader_t), 1); Pack_UInt8(&Pack, SBN_HK_CC); - Pack_UInt16(&Pack, SBN.CmdCnt); - Pack_UInt16(&Pack, SBN.CmdErrCnt); - Pack_UInt16(&Pack, SBN.SubCnt); - Pack_UInt16(&Pack, SBN.NetCnt); + Pack_UInt16(&Pack, SBN_AppData.CmdCnt); + Pack_UInt16(&Pack, SBN_AppData.CmdErrCnt); + Pack_UInt16(&Pack, SBN_AppData.SubCnt); + Pack_UInt16(&Pack, SBN_AppData.NetCnt); /* ** Timestamp and send packet @@ -322,9 +322,9 @@ static void HKNetCmd(CFE_MSG_Message_t *MsgPtr) uint8 *Ptr = (uint8 *)MsgPtr + sizeof(CFE_MSG_CommandHeader_t); uint8 NetIdx = *Ptr; - if (NetIdx > SBN.NetCnt) + if (NetIdx > SBN_AppData.NetCnt) { - EVSSendErr(SBN_CMD_EID, "Invalid NetIdx (%d, max is %d)", NetIdx, SBN.NetCnt - 1); + EVSSendErr(SBN_CMD_EID, "Invalid NetIdx (%d, max is %d)", NetIdx, SBN_AppData.NetCnt - 1); return; } /* end if */ @@ -346,8 +346,8 @@ static void HKNetCmd(CFE_MSG_Message_t *MsgPtr) Pack_Init(&Pack, HKBuf + sizeof(CFE_MSG_TelemetryHeader_t), SBN_HKNET_LEN - sizeof(CFE_MSG_TelemetryHeader_t), 1); Pack_UInt8(&Pack, SBN_HK_NET_CC); - Pack_UInt8(&Pack, SBN.Nets[NetIdx].ProtocolIdx); - Pack_UInt16(&Pack, SBN.Nets[NetIdx].PeerCnt); + Pack_UInt8(&Pack, SBN_AppData.Nets[NetIdx].ProtocolIdx); + Pack_UInt16(&Pack, SBN_AppData.Nets[NetIdx].PeerCnt); /* ** Timestamp and send packet @@ -378,23 +378,23 @@ static void HKPeerCmd(CFE_MSG_Message_t *MsgPtr) uint8 NetIdx = *Ptr++; uint8 PeerIdx = *Ptr; - if (NetIdx > SBN.NetCnt) + if (NetIdx > SBN_AppData.NetCnt) { - EVSSendErr(SBN_CMD_EID, "Invalid NetIdx (%d, max is %d)", NetIdx, SBN.NetCnt - 1); + EVSSendErr(SBN_CMD_EID, "Invalid NetIdx (%d, max is %d)", NetIdx, SBN_AppData.NetCnt - 1); return; } /* end if */ - if (PeerIdx > SBN.Nets[NetIdx].PeerCnt) + if (PeerIdx > SBN_AppData.Nets[NetIdx].PeerCnt) { EVSSendErr(SBN_CMD_EID, "Invalid PeerIdx (NetIdx=%d PeerIdx=%d, max is %d)", NetIdx, PeerIdx, - SBN.Nets[NetIdx].PeerCnt - 1); + SBN_AppData.Nets[NetIdx].PeerCnt - 1); return; } /* end if */ - SBN_PeerInterface_t *Peer = &SBN.Nets[NetIdx].Peers[PeerIdx]; + SBN_PeerInterface_t *Peer = &SBN_AppData.Nets[NetIdx].Peers[PeerIdx]; EVSSendInfo(SBN_CMD_EID, "hk command, net=%d, peer=%d", NetIdx, PeerIdx); @@ -468,11 +468,11 @@ static void MySubsCmd(CFE_MSG_Message_t *MsgPtr) 1); Pack_UInt8(&Pack, SBN_HK_MYSUBS_CC); - Pack_UInt16(&Pack, SBN.SubCnt); + Pack_UInt16(&Pack, SBN_AppData.SubCnt); int i; - for (i = 0; i < SBN.SubCnt; i++) + for (i = 0; i < SBN_AppData.SubCnt; i++) { - Pack_MsgID(&Pack, SBN.Subs[i].MsgID); + Pack_MsgID(&Pack, SBN_AppData.Subs[i].MsgID); } /* @@ -528,25 +528,25 @@ static void PeerSubsCmd(CFE_MSG_Message_t *MsgPtr) uint8 NetIdx = *Ptr++; uint8 PeerIdx = *Ptr; - if (NetIdx >= SBN.NetCnt) + if (NetIdx >= SBN_AppData.NetCnt) { - EVSSendErr(SBN_CMD_EID, "Invalid NetIdx (%d, max is %d)", NetIdx, SBN.NetCnt - 1); + EVSSendErr(SBN_CMD_EID, "Invalid NetIdx (%d, max is %d)", NetIdx, SBN_AppData.NetCnt - 1); return; } /* end if */ - if (PeerIdx >= SBN.Nets[NetIdx].PeerCnt) + if (PeerIdx >= SBN_AppData.Nets[NetIdx].PeerCnt) { EVSSendErr(SBN_CMD_EID, "Invalid PeerIdx (NetIdx=%d PeerIdx=%d, max is %d)", NetIdx, PeerIdx, - SBN.Nets[NetIdx].PeerCnt - 1); + SBN_AppData.Nets[NetIdx].PeerCnt - 1); return; } /* end if */ EVSSendInfo(SBN_CMD_EID, "hk subs command, net=%d peer=%d", NetIdx, PeerIdx); - SBN_PeerInterface_t *Peer = &SBN.Nets[NetIdx].Peers[PeerIdx]; + SBN_PeerInterface_t *Peer = &SBN_AppData.Nets[NetIdx].Peers[PeerIdx]; uint8 HKBuf[SBN_HKPEERSUBS_LEN]; CFE_MSG_Message_t *HKMsg = (CFE_MSG_Message_t *)HKBuf; @@ -603,21 +603,21 @@ void SBN_HandleCommand(CFE_MSG_Message_t *MsgPtr) if (CFE_MSG_GetMsgId(MsgPtr, &MsgId) != CFE_SUCCESS) { - SBN.CmdErrCnt++; + SBN_AppData.CmdErrCnt++; EVSSendErr(SBN_CMD_EID, "invalid FcnCode"); return; } if (!CFE_SB_MsgId_Equal(MsgId, CMD_MID)) { - SBN.CmdErrCnt++; + SBN_AppData.CmdErrCnt++; EVSSendErr(SBN_CMD_EID, "invalid command pipe MsgId"); return; } /* end if */ if (CFE_MSG_GetFcnCode(MsgPtr, &FcnCode) != CFE_SUCCESS) { - SBN.CmdErrCnt++; + SBN_AppData.CmdErrCnt++; EVSSendErr(SBN_CMD_EID, "invalid FcnCode (FcnCode=0x%04X)", FcnCode); return; } @@ -657,7 +657,7 @@ void SBN_HandleCommand(CFE_MSG_Message_t *MsgPtr) ReloadTblCmd(MsgPtr); break; default: - SBN.CmdErrCnt++; + SBN_AppData.CmdErrCnt++; EVSSendErr(SBN_CMD_EID, "invalid command code (ID=0x%04X, CC=%d)", FcnCode, FcnCode); break; } /* end switch */ diff --git a/fsw/src/sbn_subs.c b/fsw/src/sbn_subs.c index 7a575fa..dfa8f41 100644 --- a/fsw/src/sbn_subs.c +++ b/fsw/src/sbn_subs.c @@ -21,6 +21,7 @@ #include #include "cfe_msgids.h" #include "sbn_pack.h" +#include "sbn_error.h" // TODO: instead of using void * for the buffer for SBN messages, use // a struct that has the SBN header in packed bytes. @@ -96,14 +97,14 @@ SBN_Status_t SBN_SendLocalSubsToPeer(SBN_PeerInterface_t *Peer) Pack_t Pack; Pack_Init(&Pack, &Buf, SBN_PACKED_SUB_SZ, 0); Pack_Data(&Pack, (void *)SBN_IDENT, SBN_IDENT_LEN); - Pack_UInt16(&Pack, SBN.SubCnt); + Pack_UInt16(&Pack, SBN_AppData.SubCnt); int i = 0; - for (i = 0; i < SBN.SubCnt; i++) + for (i = 0; i < SBN_AppData.SubCnt; i++) { - Pack_MsgID(&Pack, SBN.Subs[i].MsgID); + Pack_MsgID(&Pack, SBN_AppData.Subs[i].MsgID); /* 2 uint8's */ - Pack_Data(&Pack, &SBN.Subs[i].QoS, sizeof(SBN.Subs[i].QoS)); + Pack_Data(&Pack, &SBN_AppData.Subs[i].QoS, sizeof(SBN_AppData.Subs[i].QoS)); } /* end for */ EVSSendDbg(SBN_PEER_EID, "send local subs to peer %d:%d", Peer->SpacecraftID, Peer->ProcessorID); @@ -111,7 +112,7 @@ SBN_Status_t SBN_SendLocalSubsToPeer(SBN_PeerInterface_t *Peer) } /* end SBN_SendLocalSubsToPeer */ /** - * Utility to find the subscription index (SBN.Subs) + * Utility to find the subscription index (SBN_AppData.Subs) * that is subscribed to the CCSDS message ID. * * @param[out] IdxPtr The subscription index found. @@ -122,9 +123,9 @@ static int IsMsgIDSub(int *IdxPtr, CFE_SB_MsgId_t MsgID) { int i = 0; - for (i = 0; i < SBN.SubCnt; i++) + for (i = 0; i < SBN_AppData.SubCnt; i++) { - if (CFE_SB_MsgId_Equal(SBN.Subs[i].MsgID, MsgID)) + if (CFE_SB_MsgId_Equal(SBN_AppData.Subs[i].MsgID, MsgID)) { if (IdxPtr) { @@ -210,13 +211,13 @@ static SBN_Status_t ProcessLocalSub(CFE_SB_MsgId_t MsgID, CFE_SB_Qos_t QoS) /* if there is already an entry for this msg id,just incr InUseCtr */ if (IsMsgIDSub(&SubIdx, MsgID)) { - SBN.Subs[SubIdx].InUseCtr++; - EVSSendDbg(SBN_SUB_EID, "local sub already exists: in use: %d", SBN.Subs[SubIdx].InUseCtr); + SBN_AppData.Subs[SubIdx].InUseCtr++; + EVSSendDbg(SBN_SUB_EID, "local sub already exists: in use: %d", SBN_AppData.Subs[SubIdx].InUseCtr); /* does not send to peers, as they already know */ return SBN_SUCCESS; } /* end if */ - if (SBN.SubCnt >= SBN_MAX_SUBS_PER_PEER) + if (SBN_AppData.SubCnt >= SBN_MAX_SUBS_PER_PEER) { EVSSendErr(SBN_SUB_EID, "local subscription ignored for MsgID 0x%04X, max (%d) met", @@ -226,16 +227,15 @@ static SBN_Status_t ProcessLocalSub(CFE_SB_MsgId_t MsgID, CFE_SB_Qos_t QoS) } /* end if */ /* log new entry into Subs array */ - SBN.Subs[SBN.SubCnt].InUseCtr = 1; - SBN.Subs[SBN.SubCnt].MsgID = MsgID; - SBN.Subs[SBN.SubCnt].QoS = QoS; - SBN.SubCnt++; - - int NetIdx; - int PeerIdx; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + SBN_AppData.Subs[SBN_AppData.SubCnt].InUseCtr = 1; + SBN_AppData.Subs[SBN_AppData.SubCnt].MsgID = MsgID; + SBN_AppData.Subs[SBN_AppData.SubCnt].QoS = QoS; + SBN_AppData.SubCnt++; + + int NetIdx = 0, PeerIdx = 0; + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; @@ -274,12 +274,12 @@ static SBN_Status_t ProcessLocalUnsub(CFE_SB_MsgId_t MsgID) return SBN_SUCCESS; /* or should this be error? */ } /* end if */ - SBN.Subs[SubIdx].InUseCtr--; + SBN_AppData.Subs[SubIdx].InUseCtr--; /* do not modify the array and tell peers ** until the # of local subscriptions = 0 */ - if (SBN.Subs[SubIdx].InUseCtr > 0) + if (SBN_AppData.Subs[SubIdx].InUseCtr > 0) { return SBN_SUCCESS; } /* end if */ @@ -289,26 +289,25 @@ static SBN_Status_t ProcessLocalUnsub(CFE_SB_MsgId_t MsgID) ** note that the Subs[] array has one extra element to allow for an ** unsub from a full table. */ - for (; SubIdx < SBN.SubCnt; SubIdx++) + for (; SubIdx < SBN_AppData.SubCnt; SubIdx++) { - memcpy(&SBN.Subs[SubIdx], &SBN.Subs[SubIdx + 1], sizeof(SBN_Subs_t)); + memcpy(&SBN_AppData.Subs[SubIdx], &SBN_AppData.Subs[SubIdx + 1], sizeof(SBN_Subs_t)); } /* end for */ - SBN.SubCnt--; + SBN_AppData.SubCnt--; /* send unsubscription to all peers if peer state is heartbeating and */ /* only if no more local subs (InUseCtr = 0) */ - int NetIdx; - int PeerIdx; - for (NetIdx = 0; NetIdx < SBN.NetCnt; NetIdx++) + int NetIdx = 0, PeerIdx = 0; + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN.Nets[NetIdx]; + SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; EVSSendInfo(SBN_PEER_EID, "process local unsub %d:%d", Peer->SpacecraftID, Peer->ProcessorID); - SBN_Status = SendLocalSubToPeer(SBN_UNSUB_MSG, SBN.Subs[PeerIdx].MsgID, SBN.Subs[PeerIdx].QoS, Peer); + SBN_Status = SendLocalSubToPeer(SBN_UNSUB_MSG, SBN_AppData.Subs[PeerIdx].MsgID, SBN_AppData.Subs[PeerIdx].QoS, Peer); if (SBN_Status != SBN_SUCCESS) { @@ -330,9 +329,9 @@ SBN_Status_t SBN_CheckSubscriptionPipe(void) { CFE_Status_t CFE_Status = CFE_SUCCESS; - CFE_SB_AllSubscriptionsTlm_t *MsgPtr = NULL; /* largest message format */ - CFE_SB_SingleSubscriptionTlm_t *SingleMsgPtr = NULL; /* utility "cast" */ - CFE_SB_MsgId_t MsgId = CFE_SB_INVALID_MSG_ID; + CFE_SB_AllSubscriptionsTlm_t *MsgPtr = NULL; /* largest message format */ + CFE_SB_SingleSubscriptionTlm_t *SingleMsgPtr = NULL; /* utility "cast" */ + CFE_SB_MsgId_t MsgId; static CFE_SB_MsgId_t SB_ONESUB_TLM_MID = CFE_SB_MSGID_RESERVED; static CFE_SB_MsgId_t SB_ALLSUBS_TLM_MID = CFE_SB_MSGID_RESERVED; @@ -343,7 +342,7 @@ SBN_Status_t SBN_CheckSubscriptionPipe(void) SB_ALLSUBS_TLM_MID = CFE_SB_ValueToMsgId(CFE_SB_ALLSUBS_TLM_MID); } - CFE_Status = CFE_SB_ReceiveBuffer((CFE_SB_Buffer_t **)&MsgPtr, SBN.SubPipe, CFE_SB_POLL); + CFE_Status = CFE_SB_ReceiveBuffer((CFE_SB_Buffer_t **)&MsgPtr, SBN_AppData.SubPipe, CFE_SB_POLL); switch (CFE_Status) { case CFE_SUCCESS: @@ -376,7 +375,7 @@ SBN_Status_t SBN_CheckSubscriptionPipe(void) } else { - EVSSendErr(SBN_MSG_EID, "unexpected message id (0x%04X) on SBN.SubPipe", CFE_SB_MsgIdToValue(MsgId)); + EVSSendErr(SBN_MSG_EID, "unexpected message id (0x%04X) on SBN_AppData.SubPipe", CFE_SB_MsgIdToValue(MsgId)); return SBN_ERROR; } /* end switch */ @@ -500,15 +499,15 @@ SBN_Status_t SBN_ProcessSubsFromPeer(SBN_PeerInterface_t *Peer, void *Msg) return SBN_ERROR; } - uint16 SubCnt = 0; + uint16 SubCnt; Unpack_UInt16(&Pack, &SubCnt); int SubIdx = 0; for (SubIdx = 0; SubIdx < SubCnt; SubIdx++) { - CFE_SB_MsgId_t MsgID = CFE_SB_INVALID_MSG_ID; + CFE_SB_MsgId_t MsgID; Unpack_MsgID(&Pack, &MsgID); - CFE_SB_Qos_t QoS = { 0 }; + CFE_SB_Qos_t QoS; Unpack_Data(&Pack, &QoS, sizeof(QoS)); SBN_Status = ProcessSubFromPeer(Peer, MsgID, QoS); @@ -615,13 +614,13 @@ SBN_Status_t SBN_ProcessUnsubsFromPeer(SBN_PeerInterface_t *Peer, void *Msg) EVSSendInfo(SBN_PROTO_EID, "version number mismatch with peer CpuID %d", Peer->ProcessorID); } - uint16 SubCnt = 0; + uint16 SubCnt; Unpack_UInt16(&Pack, &SubCnt); int SubIdx = 0; for (SubIdx = 0; SubIdx < SubCnt; SubIdx++) { - CFE_SB_MsgId_t MsgID = CFE_SB_INVALID_MSG_ID; + CFE_SB_MsgId_t MsgID; Unpack_MsgID(&Pack, &MsgID); CFE_SB_Qos_t QoS; Unpack_Data(&Pack, &QoS, sizeof(QoS)); diff --git a/modules/protocol/tcp/fsw/src/sbn_tcp_if.c b/modules/protocol/tcp/fsw/src/sbn_tcp_if.c index ce24535..fb62d38 100644 --- a/modules/protocol/tcp/fsw/src/sbn_tcp_if.c +++ b/modules/protocol/tcp/fsw/src/sbn_tcp_if.c @@ -21,6 +21,7 @@ #include "cfe.h" #include "cfe_endian.h" #include "sbn_tcp_events.h" +#include "sbn_error.h" #include #include @@ -183,7 +184,7 @@ static void Disconnected(SBN_PeerInterface_t *Peer) PeerData->Conn = NULL; } /* end if */ - SBN.Disconnected(Peer); + SBN_AppData.Disconnected(Peer); } /* end Disconnected() */ static SBN_Status_t LoadNet(SBN_NetInterface_t *Net, const char *Address) @@ -344,7 +345,7 @@ static void CheckNet(SBN_NetInterface_t *Net) Conn->PeerInterface = Peer; PeerData->Conn = Conn; - SBN.Connected(Peer); + SBN_AppData.Connected(Peer); } /* end if */ } /* end if */ } /* end if */ @@ -363,7 +364,7 @@ static SBN_Status_t Send(SBN_PeerInterface_t *Peer, SBN_MsgType_t MsgType, SBN_M return 0; } /* end if */ - SBN.PackMsg(&SendBufs[NetData->BufNum], MsgSz, MsgType, CFE_PSP_GetProcessorId(), CFE_PSP_GetSpacecraftId(), Msg); + SBN_AppData.PackMsg(&SendBufs[NetData->BufNum], MsgSz, MsgType, CFE_PSP_GetProcessorId(), CFE_PSP_GetSpacecraftId(), Msg); int32 sent_size = OS_write(PeerData->Conn->Socket, &SendBufs[NetData->BufNum], MsgSz + SBN_PACKED_HDR_SZ); if ((sent_size < 0) || (sent_size < MsgSz + SBN_PACKED_HDR_SZ)) { @@ -512,7 +513,7 @@ static SBN_Status_t Recv(SBN_NetInterface_t *Net, } /* end if */ /* we have the complete body, decode! */ - if (SBN.UnpackMsg(&RecvBufs[Conn->BufNum], MsgSzPtr, MsgTypePtr, ProcessorIDPtr, SpacecraftIDPtr, MsgBuf) + if (SBN_AppData.UnpackMsg(&RecvBufs[Conn->BufNum], MsgSzPtr, MsgTypePtr, ProcessorIDPtr, SpacecraftIDPtr, MsgBuf) == false) { return SBN_ERROR; @@ -535,7 +536,7 @@ static SBN_Status_t Recv(SBN_NetInterface_t *Net, Conn->PeerInterface = PeerInterface; - SBN.Connected(PeerInterface); + SBN_AppData.Connected(PeerInterface); break; } /* end if */ diff --git a/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c b/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c index 2043b4e..3abdead 100644 --- a/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c +++ b/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c @@ -36,10 +36,11 @@ #include "sbn_udp_if_coveragetest_common.h" #include "sbn_udp_if.h" #include "sbn_app.h" +#include "sbn_error.h" #define SBN_PROTOCOL_VERSION 6 -SBN_App_t SBN; +SBN_AppData_t SBN_AppData; SBN_NetInterface_t *NetPtr; SBN_PeerInterface_t *PeerPtr; @@ -85,9 +86,9 @@ static void START_fn(const char *fn, int ln) { UT_ResetState(0); printf("Start item %s (%d)\n", fn, ln); - memset(&SBN, 0, sizeof(SBN)); - SBN.NetCnt = 1; - NetPtr = &SBN.Nets[0]; + memset(&SBN_AppData, 0, sizeof(SBN_AppData)); + SBN_AppData.NetCnt = 1; + NetPtr = &SBN_AppData.Nets[0]; PeerPtr = &NetPtr->Peers[0]; NetPtr->PeerCnt = 1; PeerPtr->Net = NetPtr; @@ -181,7 +182,7 @@ static void Init_Nominal(void) SBN_ProtocolOutlet_t Outlet; START(); - UT_TEST_FUNCTION_RC(SBN_UDP_Ops.InitModule(SBN_PROTOCOL_VERSION, 0, &Outlet), CFE_SUCCESS); + UT_TEST_FUNCTION_RC(SBN_UDP_Ops.InitModule(SBN_PROTOCOL_VERSION, 0, &Outlet), SBN_SUCCESS); } /* end Init_Nominal() */ void Test_SBN_UDP_Init(void) @@ -343,8 +344,8 @@ void Test_SBN_UDP_LoadPeer(void) static void PollPeer_ConnTimeout(void) { START(); - memset(&SBN, 0, sizeof(SBN)); - SBN.NetCnt = 1; + memset(&SBN_AppData, 0, sizeof(SBN_AppData)); + SBN_AppData.NetCnt = 1; SBN_ProtocolOutlet_t Outlet; Outlet.Disconnected = DisconnectCallback; Outlet.SendNetMsg = SendNetMsgCallback; @@ -915,7 +916,7 @@ static void UnloadPeer_Nominal(void) { START(); - UT_TEST_FUNCTION_RC(SBN_UDP_Ops.UnloadPeer(PeerPtr), CFE_SUCCESS); + UT_TEST_FUNCTION_RC(SBN_UDP_Ops.UnloadPeer(PeerPtr), SBN_SUCCESS); UtAssert_True(PeerPtr->Connected == false, "Peer connected (%s)", __func__); } /* end UnloadPeer_Nominal() */ @@ -936,7 +937,7 @@ static void UnloadNet_Nominal(void) OS_OpenCreate(&(NetData->Socket), NULL, 0, 0); - UT_TEST_FUNCTION_RC(SBN_UDP_Ops.UnloadNet(NetPtr), CFE_SUCCESS); + UT_TEST_FUNCTION_RC(SBN_UDP_Ops.UnloadNet(NetPtr), SBN_SUCCESS); /* TODO: check what was called? */ UtAssert_True(PeerPtr->Connected == false, "Peer still connected (%s)", __func__); diff --git a/unit-test/coveragetest/coveragetest_sbn_app.c b/unit-test/coveragetest/coveragetest_sbn_app.c index dfa6624..35acb6f 100644 --- a/unit-test/coveragetest/coveragetest_sbn_app.c +++ b/unit-test/coveragetest/coveragetest_sbn_app.c @@ -22,6 +22,7 @@ #include "cfe_sb_eventids.h" #include "cfe_evs_msg.h" #include "sbn_pack.h" +#include "sbn_error.h" /* #define STUB_TASKID 1073807361 */ /* TODO: should be replaced with a call to a stub util fn */ CFE_SB_MsgId_t MsgID = { .Value = 0x1818 }; @@ -299,7 +300,7 @@ static void LoadConf_GetAddrErr(void) static SBN_Status_t ProtoInitErr_InitModule(int ProtocolVersion, CFE_EVS_EventID_t BaseEID, SBN_ProtocolOutlet_t *Outlet) { - return 1; + return SBN_ERROR; } /* end ProtoInitErr_InitModule */ static void OS_SymbolLookup_Hook(void *UserObj, UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) @@ -350,7 +351,7 @@ static void LoadConf_ProtoInitErr(void) static SBN_Status_t FilterInitErr_InitModule(int FilterVersion, CFE_EVS_EventID_t BaseEID) { - return 1; + return SBN_ERROR; } /* end FilterInitErr_InitModule */ static void OS_FilterSymbolLookup_Hook(void *UserObj, UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) @@ -595,7 +596,7 @@ static void LoadConf_NetCntInc(void) START(); UT_ResetState(0); - SBN.NetCnt = 0; + SBN_AppData.NetCnt = 0; UT_CheckEvent_Setup(SBN_TBL_EID, "increasing net count to"); UT_SetDeferredRetcode(UT_KEY(CFE_TBL_GetAddress), 1, CFE_TBL_INFO_UPDATED); @@ -653,7 +654,7 @@ static void AppMain_MutSemCrErr(void) static int32 NoNetsHook(void *UserObj, int32 StubRetcode, uint32 CallCount, const UT_StubContext_t *Context) { - SBN.NetCnt = 0; + SBN_AppData.NetCnt = 0; return CFE_SUCCESS; } /* end NoNetsHook() */ @@ -664,7 +665,7 @@ static void InitInt_NoNets(void) * - FilterCnt: 0 - No filter modules needed for this network validation test * - PeerCnt: 0 - No peers configured to ensure NetCnt remains 0, triggering the expected error * - * Additionally, SBN.NetCnt is explicitly set to 0 and maintained that way using NoNetsHook + * Additionally, SBN_AppData.NetCnt is explicitly set to 0 and maintained that way using NoNetsHook * to test the "no networks configured" error path in InitInterfaces */ memset(&TestConfTbl, 0, sizeof(TestConfTbl)); TestConfTbl.ProtocolCnt = 0; @@ -674,7 +675,7 @@ static void InitInt_NoNets(void) START(); UT_ResetState(0); - SBN.NetCnt = 0; + SBN_AppData.NetCnt = 0; UT_CheckEvent_Setup(SBN_PEER_EID, "no networks configured"); UT_SetDeferredRetcode(UT_KEY(CFE_TBL_GetAddress), 1, CFE_TBL_INFO_UPDATED); @@ -722,11 +723,11 @@ static SBN_IfOps_t MockIfOps = { .InitModule = NULL, static int32 SetupNetConfErr_Hook(void *UserObj, int32 StubRetcode, uint32 CallCount, const UT_StubContext_t *Context) { /* At this point LoadConf has completed, modify SBN to have an unconfigured network */ - SBN.NetCnt = 1; - memset(&SBN.Nets[0], 0, sizeof(SBN.Nets[0])); - SBN.Nets[0].Configured = false; /* This will trigger the error in InitInterfaces */ - SBN.Nets[0].IfOps = &MockIfOps; /* Prevent segfault in UnloadNets */ - SBN.Nets[0].PeerCnt = 0; /* No peers */ + SBN_AppData.NetCnt = 1; + memset(&SBN_AppData.Nets[0], 0, sizeof(SBN_AppData.Nets[0])); + SBN_AppData.Nets[0].Configured = false; /* This will trigger the error in InitInterfaces */ + SBN_AppData.Nets[0].IfOps = &MockIfOps; /* Prevent segfault in UnloadNets */ + SBN_AppData.Nets[0].PeerCnt = 0; /* No peers */ return StubRetcode; } @@ -1066,7 +1067,7 @@ static void W4W_NoMsg(void) static int32 PeerConnHook(void *UserObj, int32 StubRetcode, uint32 CallCount, const UT_StubContext_t *Context) { - SBN.Nets[0].Peers[1].Connected = true; + SBN_AppData.Nets[0].Peers[1].Connected = true; return ProcessorID; } /* end PeerConnHook() */ @@ -1474,12 +1475,12 @@ static void PeerPoll_RecvNetTask_Nominal(void) /* Configuration Setup Rationale: * Runtime Configuration: - * - SBN.NetCnt: 0 - Reset to ensure clean state for network counting - * - SBN.Nets[0].PeerCnt: 0 - Reset to ensure clean state for peer counting + * - SBN_AppData.NetCnt: 0 - Reset to ensure clean state for network counting + * - SBN_AppData.Nets[0].PeerCnt: 0 - Reset to ensure clean state for peer counting * - PeerPtr->Connected: 1 - Peer must be connected for task creation to be considered * - NominalTblPtr->Peers[0].TaskFlags: SBN_TASK_RECV - Enable network receive task creation */ - SBN.NetCnt = 0; - SBN.Nets[0].PeerCnt = 0; + SBN_AppData.NetCnt = 0; + SBN_AppData.Nets[0].PeerCnt = 0; PeerPtr->Connected = 1; NominalTblPtr->Peers[0].TaskFlags = SBN_TASK_RECV; @@ -1647,14 +1648,14 @@ static void PeerPoll_RecvPeerTask_Nominal(void) /* Configuration Setup Rationale: * Runtime Configuration: - * - SBN.NetCnt: 0 - Reset to ensure clean state for network counting - * - SBN.Nets[0].PeerCnt: 0 - Reset to ensure clean state for peer counting + * - SBN_AppData.NetCnt: 0 - Reset to ensure clean state for network counting + * - SBN_AppData.Nets[0].PeerCnt: 0 - Reset to ensure clean state for peer counting * - PeerPtr->Connected: 1 - Peer must be connected for task creation to be considered * - NominalTblPtr->Peers[1].TaskFlags: SBN_TASK_RECV - Enable peer-level receive task creation * - IfOpsPtr->RecvFromPeer: RecvFromPeer_Nominal - Must be set to trigger peer task creation * - IfOpsPtr->RecvFromNet: NULL - Disables network-level receive task creation */ - SBN.NetCnt = 0; - SBN.Nets[0].PeerCnt = 0; + SBN_AppData.NetCnt = 0; + SBN_AppData.Nets[0].PeerCnt = 0; PeerPtr->Connected = 1; NominalTblPtr->Peers[1].TaskFlags = SBN_TASK_RECV; @@ -2103,7 +2104,7 @@ static void Disconnected_ConnErr(void) * Peer Setup: * - PeerPtr->Connected: 0 (default) - Peer starts disconnected to trigger the error condition * - PeerPtr->ProcessorID: ProcessorID - Set for error message identification */ - SBN_PeerInterface_t *PeerPtr = &SBN.Nets[0].Peers[0]; + SBN_PeerInterface_t *PeerPtr = &SBN_AppData.Nets[0].Peers[0]; PeerPtr->ProcessorID = ProcessorID; @@ -2122,7 +2123,7 @@ static void Disconnected_Nominal(void) * Peer Setup: * - PeerPtr->ProcessorID: ProcessorID - Set for event message identification * - PeerPtr->Connected: 1 - Pre-set peer as connected to allow valid disconnection */ - SBN_PeerInterface_t *PeerPtr = &SBN.Nets[0].Peers[0]; + SBN_PeerInterface_t *PeerPtr = &SBN_AppData.Nets[0].Peers[0]; PeerPtr->ProcessorID = ProcessorID; PeerPtr->Connected = 1; @@ -2176,14 +2177,14 @@ static void ReloadConfTbl_ProtoUnloadErr(void) /* Configuration Setup Rationale: * Module Setup: - * - SBN.ProtocolModules[0]: OS_ObjectIdFromInteger(1) - Set to valid module ID to trigger unload attempt + * - SBN_AppData.ProtocolModules[0]: OS_ObjectIdFromInteger(1) - Set to valid module ID to trigger unload attempt * - OS_ModuleUnload: Set to fail (-1) - Simulates protocol module unload failure * * Peer Setup: * - PeerPtr->Connected: 1 - Pre-set peer as connected to ensure cleanup phase is reached */ PeerPtr->Connected = 1; - SBN.ProtocolModules[0] = OS_ObjectIdFromInteger(1); + SBN_AppData.ProtocolModules[0] = OS_ObjectIdFromInteger(1); UT_SetDeferredRetcode(UT_KEY(OS_ModuleUnload), 1, -1); @@ -2202,9 +2203,9 @@ static void ReloadConfTbl_FiltUnloadErr(void) /* * Configuration Setup Rationale: * Module Setup: - * - SBN.FilterModules[0]: OS_ObjectIdFromInteger(1) - Set to valid module ID to trigger unload attempt + * - SBN_AppData.FilterModules[0]: OS_ObjectIdFromInteger(1) - Set to valid module ID to trigger unload attempt * - OS_ModuleUnload: Set to fail (-1) - Simulates filter module unload failure */ - SBN.FilterModules[0] = OS_ObjectIdFromInteger(1); + SBN_AppData.FilterModules[0] = OS_ObjectIdFromInteger(1); UT_SetDeferredRetcode(UT_KEY(OS_ModuleUnload), 1, -1); @@ -2296,7 +2297,7 @@ static void ReloadConfTbl_Nominal(void) /* Set up mutex operations */ UT_SetDeferredRetcode(UT_KEY(OS_MutSemTake), 1, OS_SUCCESS); UT_SetDeferredRetcode(UT_KEY(OS_MutSemGive), 1, OS_SUCCESS); - SBN.ConfMutex = OS_ObjectIdFromInteger(1); /* Valid non-zero value */ + SBN_AppData.ConfMutex = 1; /* Valid non-zero value */ /* Set up for Cleanup */ UT_SetDeferredRetcode(UT_KEY(CFE_SB_DeletePipe), 1, CFE_SUCCESS); @@ -2759,7 +2760,7 @@ static int32 TaskDelayConn(void *UserObj, int32 StubRetcode, uint32 CallCount, c if (c++ > 0) { - SBN.Nets[0].Peers[0].Connected = true; + SBN_AppData.Nets[0].Peers[0].Connected = true; } /* end if */ return CFE_SUCCESS; diff --git a/unit-test/coveragetest/coveragetest_sbn_cmds.c b/unit-test/coveragetest/coveragetest_sbn_cmds.c index 84473ea..881773b 100644 --- a/unit-test/coveragetest/coveragetest_sbn_cmds.c +++ b/unit-test/coveragetest/coveragetest_sbn_cmds.c @@ -316,7 +316,7 @@ static void HKMySubs_Nominal(void) memset(Buffer, 0, sizeof(Buffer)); - SBN.SubCnt = 1; + SBN_AppData.SubCnt = 1; MsgSz = sizeof(CFE_MSG_CommandHeader_t); FcnCode = SBN_HK_MYSUBS_CC; diff --git a/unit-test/coveragetest/coveragetest_sbn_subs.c b/unit-test/coveragetest/coveragetest_sbn_subs.c index 1c6e894..1b02747 100644 --- a/unit-test/coveragetest/coveragetest_sbn_subs.c +++ b/unit-test/coveragetest/coveragetest_sbn_subs.c @@ -19,6 +19,7 @@ #include "sbn_coveragetest_common.h" #include "cfe_msgids.h" #include "sbn_pack.h" +#include "sbn_error.h" CFE_SB_MsgId_t MsgID = { .Value = 0xDEAD }; @@ -56,14 +57,14 @@ static void SLS2P_SendNetMsgErr(void) { START(); - SBN.SubCnt = 1; - SBN.Subs[0].MsgID = MsgID; + SBN_AppData.SubCnt = 1; + SBN_AppData.Subs[0].MsgID = MsgID; - SBN.Nets[0].Peers[1].Net = NetPtr; + SBN_AppData.Nets[0].Peers[1].Net = NetPtr; IfOpsPtr->Send = Send_Err; - UtAssert_INT32_EQ(SBN_SendLocalSubsToPeer(&SBN.Nets[0].Peers[1]), SBN_ERROR); + UtAssert_INT32_EQ(SBN_SendLocalSubsToPeer(&SBN_AppData.Nets[0].Peers[1]), SBN_ERROR); IfOpsPtr->Send = Send_Nominal; } /* end SLS2P_SendNetMsgErr() */ @@ -79,7 +80,7 @@ static void CSP_PLS_MaxSubsErr(void) UT_CheckEvent_Setup(SBN_SUB_EID, "local subscription ignored for MsgID 0x"); - SBN.SubCnt = SBN_MAX_SUBS_PER_PEER; + SBN_AppData.SubCnt = SBN_MAX_SUBS_PER_PEER; CFE_SB_SingleSubscriptionTlm_t Msg, *MsgPtr; MsgPtr = &Msg; @@ -100,9 +101,9 @@ static void CSP_PLS_AddlSubs(void) { START(); - SBN.SubCnt = 1; - SBN.Subs[0].InUseCtr = 1; - SBN.Subs[0].MsgID = MsgID; + SBN_AppData.SubCnt = 1; + SBN_AppData.Subs[0].InUseCtr = 1; + SBN_AppData.Subs[0].MsgID = MsgID; CFE_SB_SingleSubscriptionTlm_t Msg, *MsgPtr; MsgPtr = &Msg; @@ -116,7 +117,7 @@ static void CSP_PLS_AddlSubs(void) UtAssert_INT32_EQ(SBN_CheckSubscriptionPipe(), SBN_SUCCESS); - UtAssert_INT32_EQ(SBN.Subs[0].InUseCtr, 2); + UtAssert_INT32_EQ(SBN_AppData.Subs[0].InUseCtr, 2); } /* end CSP_PLS_AddlSubs() */ static void CSP_PLS_SendErr(void) @@ -144,7 +145,7 @@ static void CSP_PLS_EvtMsg(void) { START(); - UT_SetDefaultReturnValue(UT_KEY(CFE_SB_ReceiveBuffer), SBN_SUCCESS); + UT_SetDefaultReturnValue(UT_KEY(CFE_SB_ReceiveBuffer), CFE_SUCCESS); IfOpsPtr->Send = Send_Err; @@ -167,7 +168,7 @@ static void CSP_PLS_SbnMsg(void) { START(); - UT_SetDefaultReturnValue(UT_KEY(CFE_SB_ReceiveBuffer), SBN_SUCCESS); + UT_SetDefaultReturnValue(UT_KEY(CFE_SB_ReceiveBuffer), CFE_SUCCESS); IfOpsPtr->Send = Send_Err; @@ -207,9 +208,9 @@ static void CSP_PLU_OtherSub(void) { START(); - SBN.SubCnt = 1; - SBN.Subs[0].InUseCtr = 2; - SBN.Subs[0].MsgID = MsgID; + SBN_AppData.SubCnt = 1; + SBN_AppData.Subs[0].InUseCtr = 2; + SBN_AppData.Subs[0].MsgID = MsgID; CFE_SB_SingleSubscriptionTlm_t Msg, *MsgPtr; MsgPtr = &Msg; @@ -223,17 +224,17 @@ static void CSP_PLU_OtherSub(void) UtAssert_INT32_EQ(SBN_CheckSubscriptionPipe(), SBN_SUCCESS); - UtAssert_INT32_EQ(SBN.Subs[0].InUseCtr, 1); - UtAssert_INT32_EQ(SBN.SubCnt, 1); + UtAssert_INT32_EQ(SBN_AppData.Subs[0].InUseCtr, 1); + UtAssert_INT32_EQ(SBN_AppData.SubCnt, 1); } /* end CSP_PLU_OtherSub() */ static void CSP_PLU_SLS2PErr(void) { START(); - SBN.SubCnt = 1; - SBN.Subs[0].InUseCtr = 1; - SBN.Subs[0].MsgID = MsgID; + SBN_AppData.SubCnt = 1; + SBN_AppData.Subs[0].InUseCtr = 1; + SBN_AppData.Subs[0].MsgID = MsgID; CFE_SB_SingleSubscriptionTlm_t Msg, *MsgPtr; MsgPtr = &Msg; @@ -256,9 +257,9 @@ static void CSP_PLU_Nominal(void) { START(); - SBN.SubCnt = 1; - SBN.Subs[0].InUseCtr = 1; - SBN.Subs[0].MsgID = MsgID; + SBN_AppData.SubCnt = 1; + SBN_AppData.Subs[0].InUseCtr = 1; + SBN_AppData.Subs[0].MsgID = MsgID; CFE_SB_SingleSubscriptionTlm_t Msg, *MsgPtr; MsgPtr = &Msg; @@ -272,8 +273,8 @@ static void CSP_PLU_Nominal(void) UtAssert_INT32_EQ(SBN_CheckSubscriptionPipe(), SBN_SUCCESS); - UtAssert_INT32_EQ(SBN.Subs[0].InUseCtr, 0); - UtAssert_INT32_EQ(SBN.SubCnt, 0); + UtAssert_INT32_EQ(SBN_AppData.Subs[0].InUseCtr, 0); + UtAssert_INT32_EQ(SBN_AppData.SubCnt, 0); } /* end CSP_PLU_Nominal() */ static void CSP_SubTypeErr(void) @@ -294,8 +295,8 @@ static void CSP_SubTypeErr(void) UtAssert_INT32_EQ(SBN_CheckSubscriptionPipe(), SBN_ERROR); - UtAssert_INT32_EQ(SBN.Subs[0].InUseCtr, 0); - UtAssert_INT32_EQ(SBN.SubCnt, 0); + UtAssert_INT32_EQ(SBN_AppData.Subs[0].InUseCtr, 0); + UtAssert_INT32_EQ(SBN_AppData.SubCnt, 0); EVENT_CNT(1); } /* end CSP_SubTypeErr() */ @@ -317,8 +318,8 @@ static void CSP_AllSubs_EntryCntErr(void) UtAssert_INT32_EQ(SBN_CheckSubscriptionPipe(), SBN_ERROR); - UtAssert_INT32_EQ(SBN.Subs[0].InUseCtr, 0); - UtAssert_INT32_EQ(SBN.SubCnt, 0); + UtAssert_INT32_EQ(SBN_AppData.Subs[0].InUseCtr, 0); + UtAssert_INT32_EQ(SBN_AppData.SubCnt, 0); EVENT_CNT(1); } /* end CSP_AllSubs_EntryCntErr() */ @@ -330,7 +331,7 @@ static void CSP_AllSubs_PLSErr(void) /* err generated by ProcessLocalSub() */ UT_CheckEvent_Setup(SBN_SUB_EID, "local subscription ignored for MsgID 0x"); - SBN.SubCnt = SBN_MAX_SUBS_PER_PEER; + SBN_AppData.SubCnt = SBN_MAX_SUBS_PER_PEER; CFE_SB_AllSubscriptionsTlm_t Msg, *MsgPtr; MsgPtr = &Msg; @@ -363,8 +364,8 @@ static void CSP_AllSubs_Nominal(void) UtAssert_INT32_EQ(SBN_CheckSubscriptionPipe(), SBN_SUCCESS); - UtAssert_INT32_EQ(SBN.Subs[0].InUseCtr, 1); - UtAssert_INT32_EQ(SBN.SubCnt, 1); + UtAssert_INT32_EQ(SBN_AppData.Subs[0].InUseCtr, 1); + UtAssert_INT32_EQ(SBN_AppData.SubCnt, 1); } /* end CSP_AllSubs_Nominal() */ static void CSP_NoMsg(void) diff --git a/unit-test/coveragetest/sbn_coveragetest_common.c b/unit-test/coveragetest/sbn_coveragetest_common.c index 36044fc..34e5dfc 100644 --- a/unit-test/coveragetest/sbn_coveragetest_common.c +++ b/unit-test/coveragetest/sbn_coveragetest_common.c @@ -17,6 +17,7 @@ ************************************************************************/ #include "sbn_coveragetest_common.h" +#include "sbn_error.h" int32 UT_CheckEvent_Hook(void *UserObj, int32 StubRetcode, @@ -83,7 +84,7 @@ void UT_CheckEvent_Setup(uint16 ExpectedEvent, const char *ExpectedText) SBN_Status_t ProtoInitModule_Nominal(int ProtoVersion, CFE_EVS_EventID_t BaseEID, SBN_ProtocolOutlet_t *Outlet) { - return CFE_SUCCESS; + return SBN_SUCCESS; } /* end ProtoInitModule_Nominal() */ SBN_Status_t InitNet_Nominal(SBN_NetInterface_t *Net) @@ -252,10 +253,10 @@ void START_fn(const char *func, int line) { UT_ResetState(0); printf("Start item %s (%d)\n", func, line); - memset(&SBN, 0, sizeof(SBN)); + memset(&SBN_AppData, 0, sizeof(SBN_AppData)); - NetPtr = &SBN.Nets[0]; - SBN.NetCnt = 1; + NetPtr = &SBN_AppData.Nets[0]; + SBN_AppData.NetCnt = 1; NetPtr->PeerCnt = 1; NetPtr->Configured = 1; PeerPtr = &NetPtr->Peers[0]; From c952a5ee1152dc903131245fa2ccd759824fbbce Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Wed, 15 Jul 2026 14:23:20 -0400 Subject: [PATCH 2/8] Fix #98, make status type an integer and use macros --- fsw/platform_inc/sbn_error.h | 13 +++++++++++++ fsw/platform_inc/sbn_types.h | 10 ++-------- modules/filter/remap/fsw/src/sbn_f_remap.c | 1 + modules/protocol/udp/fsw/src/sbn_udp_if.c | 1 + 4 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 fsw/platform_inc/sbn_error.h diff --git a/fsw/platform_inc/sbn_error.h b/fsw/platform_inc/sbn_error.h new file mode 100644 index 0000000..79ff3ff --- /dev/null +++ b/fsw/platform_inc/sbn_error.h @@ -0,0 +1,13 @@ +#ifndef SBN_ERROR_H +#define SBN_ERROR_H + +/* General status codes */ +#define SBN_SUCCESS (1u) +#define SBN_ERROR -1 +#define SBN_IF_EMPTY -2 +#define SBN_NOT_IMPLEMENTED -3 +#define SBN_NO_PEER -4 +#define SBN_INVALID_VERSION -5 +#define SBN_NULL_OUTLET -6 + +#endif /* SBN_ERROR_H */ \ No newline at end of file diff --git a/fsw/platform_inc/sbn_types.h b/fsw/platform_inc/sbn_types.h index 3b339a5..0653995 100644 --- a/fsw/platform_inc/sbn_types.h +++ b/fsw/platform_inc/sbn_types.h @@ -28,13 +28,7 @@ * sbn_platform_cfg.h instead. */ -typedef enum -{ - SBN_SUCCESS = 0, - SBN_ERROR, - SBN_IF_EMPTY, - SBN_NOT_IMPLEMENTED -} SBN_Status_t; +typedef int32 SBN_Status_t; typedef enum { @@ -95,7 +89,7 @@ typedef struct /* most/all scalars should be typedef'd for readability and type checking */ typedef uint32 SBN_MsgSz_t; -typedef uint8 SBN_MsgType_t; +typedef SBN_MsgTypeEnum_t SBN_MsgType_t; typedef uint8 SBN_ModuleIdx_t; typedef uint8 SBN_NetIdx_t; typedef uint16 SBN_PeerIdx_t; diff --git a/modules/filter/remap/fsw/src/sbn_f_remap.c b/modules/filter/remap/fsw/src/sbn_f_remap.c index 6545b4f..2360cbe 100644 --- a/modules/filter/remap/fsw/src/sbn_f_remap.c +++ b/modules/filter/remap/fsw/src/sbn_f_remap.c @@ -25,6 +25,7 @@ #include /* qsort */ #include "sbn_f_remap_events.h" +#include "sbn_error.h" const char SBN_F_REMAP_TABLE_NAME[] = "SBN_RemapTbl"; diff --git a/modules/protocol/udp/fsw/src/sbn_udp_if.c b/modules/protocol/udp/fsw/src/sbn_udp_if.c index f21a67b..d467ccc 100644 --- a/modules/protocol/udp/fsw/src/sbn_udp_if.c +++ b/modules/protocol/udp/fsw/src/sbn_udp_if.c @@ -19,6 +19,7 @@ #include "sbn_udp_events.h" #include "sbn_udp_if.h" #include "sbn_platform_cfg.h" +#include "sbn_error.h" #include #include From a875b715a6201adf5c55ad6bd70c2de640dda890 Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Wed, 15 Jul 2026 14:38:44 -0400 Subject: [PATCH 3/8] Fix #98, modify protocol outlet names for clarity --- modules/protocol/tcp/fsw/src/sbn_tcp_if.c | 16 ++++++++------- modules/protocol/udp/fsw/src/sbn_udp_if.c | 24 +++++++++++------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/modules/protocol/tcp/fsw/src/sbn_tcp_if.c b/modules/protocol/tcp/fsw/src/sbn_tcp_if.c index fb62d38..64e0b26 100644 --- a/modules/protocol/tcp/fsw/src/sbn_tcp_if.c +++ b/modules/protocol/tcp/fsw/src/sbn_tcp_if.c @@ -74,7 +74,7 @@ CFE_EVS_EventID_t SBN_TCP_FIRST_EID = 0; #define EXP_VERSION 6 -static SBN_ProtocolOutlet_t SBN; +static SBN_ProtocolOutlet_t TCP_ProtocolOutlet; static SBN_Status_t Init(int Version, CFE_EVS_EventID_t EID, SBN_ProtocolOutlet_t *Outlet) { @@ -91,7 +91,7 @@ static SBN_Status_t Init(int Version, CFE_EVS_EventID_t EID, SBN_ProtocolOutlet_ return SBN_ERROR; } /* end if */ - memcpy(&SBN, Outlet, sizeof(SBN)); + memcpy(&TCP_ProtocolOutlet, Outlet, sizeof(TCP_ProtocolOutlet)); OS_printf("SBN_TCP Lib Initialized.\n"); return SBN_SUCCESS; @@ -184,7 +184,7 @@ static void Disconnected(SBN_PeerInterface_t *Peer) PeerData->Conn = NULL; } /* end if */ - SBN_AppData.Disconnected(Peer); + TCP_ProtocolOutlet.Disconnected(Peer); } /* end Disconnected() */ static SBN_Status_t LoadNet(SBN_NetInterface_t *Net, const char *Address) @@ -345,7 +345,7 @@ static void CheckNet(SBN_NetInterface_t *Net) Conn->PeerInterface = Peer; PeerData->Conn = Conn; - SBN_AppData.Connected(Peer); + TCP_ProtocolOutlet.Connected(Peer); } /* end if */ } /* end if */ } /* end if */ @@ -364,7 +364,8 @@ static SBN_Status_t Send(SBN_PeerInterface_t *Peer, SBN_MsgType_t MsgType, SBN_M return 0; } /* end if */ - SBN_AppData.PackMsg(&SendBufs[NetData->BufNum], MsgSz, MsgType, CFE_PSP_GetProcessorId(), CFE_PSP_GetSpacecraftId(), Msg); + TCP_ProtocolOutlet + .PackMsg(&SendBufs[NetData->BufNum], MsgSz, MsgType, CFE_PSP_GetProcessorId(), CFE_PSP_GetSpacecraftId(), Msg); int32 sent_size = OS_write(PeerData->Conn->Socket, &SendBufs[NetData->BufNum], MsgSz + SBN_PACKED_HDR_SZ); if ((sent_size < 0) || (sent_size < MsgSz + SBN_PACKED_HDR_SZ)) { @@ -513,7 +514,8 @@ static SBN_Status_t Recv(SBN_NetInterface_t *Net, } /* end if */ /* we have the complete body, decode! */ - if (SBN_AppData.UnpackMsg(&RecvBufs[Conn->BufNum], MsgSzPtr, MsgTypePtr, ProcessorIDPtr, SpacecraftIDPtr, MsgBuf) + if (TCP_ProtocolOutlet + .UnpackMsg(&RecvBufs[Conn->BufNum], MsgSzPtr, MsgTypePtr, ProcessorIDPtr, SpacecraftIDPtr, MsgBuf) == false) { return SBN_ERROR; @@ -536,7 +538,7 @@ static SBN_Status_t Recv(SBN_NetInterface_t *Net, Conn->PeerInterface = PeerInterface; - SBN_AppData.Connected(PeerInterface); + TCP_ProtocolOutlet.Connected(PeerInterface); break; } /* end if */ diff --git a/modules/protocol/udp/fsw/src/sbn_udp_if.c b/modules/protocol/udp/fsw/src/sbn_udp_if.c index d467ccc..505a2d0 100644 --- a/modules/protocol/udp/fsw/src/sbn_udp_if.c +++ b/modules/protocol/udp/fsw/src/sbn_udp_if.c @@ -30,7 +30,7 @@ CFE_EVS_EventID_t SBN_UDP_FIRST_EID; #define EXP_VERSION 6 -static SBN_ProtocolOutlet_t SBN; +static SBN_ProtocolOutlet_t UDP_ProtocolOutlet; static SBN_Status_t Init(int Version, CFE_EVS_EventID_t BaseEID, SBN_ProtocolOutlet_t *Outlet) { @@ -49,7 +49,7 @@ static SBN_Status_t Init(int Version, CFE_EVS_EventID_t BaseEID, SBN_ProtocolOut } /* end if */ /* copy outlet pointers to a local buffer for later use */ - memcpy(&SBN, Outlet, sizeof(SBN)); + memcpy(&UDP_ProtocolOutlet, Outlet, sizeof(UDP_ProtocolOutlet)); OS_printf("SBN_UDP Lib Initialized.\n"); return SBN_SUCCESS; @@ -206,7 +206,7 @@ static SBN_Status_t PollPeer(SBN_PeerInterface_t *Peer) { EVSSendInfo(SBN_UDP_DEBUG_EID, "disconnected peer %d:%d", Peer->SpacecraftID, Peer->ProcessorID); - SBN.Disconnected(Peer); + UDP_ProtocolOutlet.Disconnected(Peer); return SBN_SUCCESS; } /* end if */ @@ -214,7 +214,7 @@ static SBN_Status_t PollPeer(SBN_PeerInterface_t *Peer) { OS_GetLocalTime(&Peer->LastSend); EVSSendDbg(SBN_UDP_DEBUG_EID, "sending heartbeat to peer %d:%d", Peer->SpacecraftID, Peer->ProcessorID); - return SBN.SendNetMsg(SBN_UDP_HEARTBEAT_MSG, 0, NULL, Peer); + return UDP_ProtocolOutlet.SendNetMsg(SBN_UDP_HEARTBEAT_MSG, 0, NULL, Peer); } /* end if */ } else @@ -224,7 +224,7 @@ static SBN_Status_t PollPeer(SBN_PeerInterface_t *Peer) { OS_GetLocalTime(&Peer->LastSend); EVSSendInfo(SBN_UDP_DEBUG_EID, "announce to peer %d:%d", Peer->SpacecraftID, Peer->ProcessorID); - return SBN.SendNetMsg(SBN_UDP_ANNOUNCE_MSG, 0, NULL, Peer); + return UDP_ProtocolOutlet.SendNetMsg(SBN_UDP_ANNOUNCE_MSG, 0, NULL, Peer); } /* end if */ } /* end if */ @@ -241,7 +241,7 @@ static SBN_Status_t Send(SBN_PeerInterface_t *Peer, SBN_MsgType_t MsgType, SBN_M SBN_NetInterface_t *Net = Peer->Net; SBN_UDP_Net_t *NetData = (SBN_UDP_Net_t *)Net->ModulePvt; - SBN.PackMsg(Buf, MsgSz, MsgType, CFE_PSP_GetProcessorId(), CFE_PSP_GetSpacecraftId(), Payload); + UDP_ProtocolOutlet.PackMsg(Buf, MsgSz, MsgType, CFE_PSP_GetProcessorId(), CFE_PSP_GetSpacecraftId(), Payload); OS_SockAddr_t Addr; if (OS_SocketAddrInit(&Addr, OS_SocketDomain_INET) != OS_SUCCESS) @@ -303,13 +303,13 @@ static SBN_Status_t Recv(SBN_NetInterface_t *Net, /* each UDP packet is a full SBN message */ - if (SBN.UnpackMsg(&RecvBuf, MsgSzPtr, MsgTypePtr, ProcessorIDPtr, SpacecraftIDPtr, Payload) == false) + if (UDP_ProtocolOutlet.UnpackMsg(&RecvBuf, MsgSzPtr, MsgTypePtr, ProcessorIDPtr, SpacecraftIDPtr, Payload) == false) { EVSSendErr(SBN_UDP_DEBUG_EID, "ERROR: could not unpack message"); return SBN_ERROR; } /* end if */ - SBN_PeerInterface_t *Peer = SBN.GetPeer(Net, *ProcessorIDPtr, *SpacecraftIDPtr); + SBN_PeerInterface_t *Peer = UDP_ProtocolOutlet.GetPeer(Net, *ProcessorIDPtr, *SpacecraftIDPtr); if (Peer == NULL) { EVSSendErr(SBN_UDP_DEBUG_EID, "ERROR: unknown peer %d:%d", *SpacecraftIDPtr, *ProcessorIDPtr); @@ -319,7 +319,7 @@ static SBN_Status_t Recv(SBN_NetInterface_t *Net, if (!Peer->Connected) { EVSSendInfo(SBN_UDP_DEBUG_EID, "connecting to peer %d:%d", *SpacecraftIDPtr, *ProcessorIDPtr); - SBN.Connected(Peer); + UDP_ProtocolOutlet.Connected(Peer); } else { @@ -328,7 +328,7 @@ static SBN_Status_t Recv(SBN_NetInterface_t *Net, if (*MsgTypePtr == SBN_UDP_DISCONN_MSG) { - SBN.Disconnected(Peer); + UDP_ProtocolOutlet.Disconnected(Peer); } return SBN_SUCCESS; @@ -339,8 +339,8 @@ static SBN_Status_t UnloadPeer(SBN_PeerInterface_t *Peer) if (Peer->Connected) { EVSSendInfo(SBN_UDP_DEBUG_EID, "peer %d:%d - sending disconnect", Peer->SpacecraftID, Peer->ProcessorID); - SBN.SendNetMsg(SBN_UDP_DISCONN_MSG, 0, NULL, Peer); - SBN.Disconnected(Peer); + UDP_ProtocolOutlet.SendNetMsg(SBN_UDP_DISCONN_MSG, 0, NULL, Peer); + UDP_ProtocolOutlet.Disconnected(Peer); } /* end if */ return SBN_SUCCESS; From ee59c6a151a262048b83631f9e8567f5ac888953 Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Wed, 15 Jul 2026 14:39:14 -0400 Subject: [PATCH 4/8] Fix #98, undo remnant of uncommited change to protocol types/names --- fsw/src/sbn_app.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsw/src/sbn_app.c b/fsw/src/sbn_app.c index 67b24ef..d51c2b4 100644 --- a/fsw/src/sbn_app.c +++ b/fsw/src/sbn_app.c @@ -1214,7 +1214,7 @@ static SBN_Status_t LoadConf(void) if (ModuleIdx == SBN_AppData.ConfTbl->ProtocolCnt) { - EVSSendCrit(SBN_TBL_EID, "invalid module type %s", e->ProtocolName); + EVSSendCrit(SBN_TBL_EID, "invalid module name %s", e->ProtocolName); return SBN_ERROR; } /* end if */ From f082a3a3e268ca36056c9fc6e5a98502326d7393 Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Wed, 15 Jul 2026 14:42:07 -0400 Subject: [PATCH 5/8] Fix #98, clang format --- fsw/src/sbn_app.c | 62 +++++++++---- fsw/src/sbn_subs.c | 7 +- fsw/tables/sbn_conf_tbl.c | 90 ++++++++++--------- .../coveragetest/coveragetest_sbn_udp_if.c | 2 +- .../coveragetest/sbn_coveragetest_common.c | 2 +- 5 files changed, 101 insertions(+), 62 deletions(-) diff --git a/fsw/src/sbn_app.c b/fsw/src/sbn_app.c index d51c2b4..13c2705 100644 --- a/fsw/src/sbn_app.c +++ b/fsw/src/sbn_app.c @@ -469,7 +469,8 @@ SBN_Status_t SBN_RecvNetMsgs(void) { /*memset(SBN_AppData.MsgBuffer, 0, sizeof(SBN_AppData.MsgBuffer));*/ - SBN_Status = Net->IfOps->RecvFromNet(Net, &MsgType, &MsgSz, &ProcessorID, &SpacecraftID, SBN_AppData.MsgBuffer); + SBN_Status = + Net->IfOps->RecvFromNet(Net, &MsgType, &MsgSz, &ProcessorID, &SpacecraftID, SBN_AppData.MsgBuffer); if (SBN_Status == SBN_IF_EMPTY) { @@ -489,7 +490,12 @@ SBN_Status_t SBN_RecvNetMsgs(void) } /* end if */ OS_GetLocalTime(&Peer->LastRecv); - SBN_ProcessNetMsg(Net, MsgType, ProcessorID, SpacecraftID, MsgSz, SBN_AppData.MsgBuffer); /* ignore errors */ + SBN_ProcessNetMsg(Net, + MsgType, + ProcessorID, + SpacecraftID, + MsgSz, + SBN_AppData.MsgBuffer); /* ignore errors */ } /* end for */ } else if (Net->IfOps->RecvFromPeer) @@ -505,9 +511,13 @@ SBN_Status_t SBN_RecvNetMsgs(void) { memset(SBN_AppData.MsgBuffer, 0, sizeof(SBN_AppData.MsgBuffer)); - SBN_Status = - Net->IfOps - ->RecvFromPeer(Net, Peer, &MsgType, &MsgSz, &ProcessorID, &SpacecraftID, SBN_AppData.MsgBuffer); + SBN_Status = Net->IfOps->RecvFromPeer(Net, + Peer, + &MsgType, + &MsgSz, + &ProcessorID, + &SpacecraftID, + SBN_AppData.MsgBuffer); if (SBN_Status == SBN_IF_EMPTY) { @@ -516,7 +526,8 @@ SBN_Status_t SBN_RecvNetMsgs(void) OS_GetLocalTime(&Peer->LastRecv); - SBN_Status = SBN_ProcessNetMsg(Net, MsgType, ProcessorID, SpacecraftID, MsgSz, SBN_AppData.MsgBuffer); + SBN_Status = + SBN_ProcessNetMsg(Net, MsgType, ProcessorID, SpacecraftID, MsgSz, SBN_AppData.MsgBuffer); if (SBN_Status != SBN_SUCCESS) { @@ -1161,7 +1172,8 @@ static SBN_Status_t LoadConf(void) } /* end if */ EVSSendInfo(SBN_TBL_EID, "initializing protocol module"); - if (Ops->InitModule(SBN_PROTOCOL_VERSION, SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx].BaseEID, &Outlet) != SBN_SUCCESS) + if (Ops->InitModule(SBN_PROTOCOL_VERSION, SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx].BaseEID, &Outlet) + != SBN_SUCCESS) { EVSSendErr(SBN_TBL_EID, "error in protocol init"); return SBN_ERROR; @@ -1178,7 +1190,8 @@ static SBN_Status_t LoadConf(void) { CFE_ES_ModuleID_t ModuleID = OS_OBJECT_ID_UNDEFINED; - Filters[ModuleIdx] = (SBN_FilterInterface_t *)LoadConf_Module(&SBN_AppData.ConfTbl->FilterModules[ModuleIdx], &ModuleID); + Filters[ModuleIdx] = + (SBN_FilterInterface_t *)LoadConf_Module(&SBN_AppData.ConfTbl->FilterModules[ModuleIdx], &ModuleID); if (Filters[ModuleIdx] == NULL) { @@ -1187,7 +1200,8 @@ static SBN_Status_t LoadConf(void) } /* end if */ EVSSendInfo(SBN_TBL_EID, "initializing filter module"); - if (Filters[ModuleIdx]->InitModule(SBN_FILTER_VERSION, SBN_AppData.ConfTbl->FilterModules[ModuleIdx].BaseEID) != SBN_SUCCESS) + if (Filters[ModuleIdx]->InitModule(SBN_FILTER_VERSION, SBN_AppData.ConfTbl->FilterModules[ModuleIdx].BaseEID) + != SBN_SUCCESS) { EVSSendErr(SBN_TBL_EID, "error in filter init"); return SBN_ERROR; @@ -1243,8 +1257,11 @@ static SBN_Status_t LoadConf(void) Net->IfOps = SBN_AppData.IfOps[ModuleIdx]; Net->IfOps->LoadNet(Net, (const char *)e->Address); - Net->FilterCnt = - LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, SBN_AppData.ConfTbl->FilterCnt, Filters, e->Filters, Net->Filters); + Net->FilterCnt = LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, + SBN_AppData.ConfTbl->FilterCnt, + Filters, + e->Filters, + Net->Filters); Net->TaskFlags = e->TaskFlags; } @@ -1257,8 +1274,11 @@ static SBN_Status_t LoadConf(void) Peer->ProcessorID = e->ProcessorID; Peer->SpacecraftID = e->SpacecraftID; - Peer->FilterCnt = - LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, SBN_AppData.ConfTbl->FilterCnt, Filters, e->Filters, Peer->Filters); + Peer->FilterCnt = LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, + SBN_AppData.ConfTbl->FilterCnt, + Filters, + e->Filters, + Peer->Filters); SBN_AppData.IfOps[ModuleIdx]->LoadPeer(Peer, (const char *)e->Address); @@ -1396,7 +1416,11 @@ static uint32 LoadConfTbl(void) { int32 Status = CFE_SUCCESS; - if ((Status = CFE_TBL_Register(&SBN_AppData.ConfTblHandle, "SBN_ConfTbl", sizeof(SBN_ConfTbl_t), CFE_TBL_OPT_DEFAULT, NULL)) + if ((Status = CFE_TBL_Register(&SBN_AppData.ConfTblHandle, + "SBN_ConfTbl", + sizeof(SBN_ConfTbl_t), + CFE_TBL_OPT_DEFAULT, + NULL)) != CFE_SUCCESS) { EVSSendErr(SBN_TBL_EID, "unable to register conf tbl handle"); @@ -1455,16 +1479,18 @@ static SBN_Status_t SetupSubPipe(void) return SBN_ERROR; } /* end if */ - Status = - CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ALLSUBS_TLM_MID), SBN_AppData.SubPipe, SBN_MAX_ALLSUBS_PKTS_ON_PIPE); + Status = CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ALLSUBS_TLM_MID), + SBN_AppData.SubPipe, + SBN_MAX_ALLSUBS_PKTS_ON_PIPE); if (Status != CFE_SUCCESS) { EVSSendErr(SBN_INIT_EID, "failed to subscribe to allsubs (Status=%d)", (int)Status); return SBN_ERROR; } /* end if */ - Status = - CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ONESUB_TLM_MID), SBN_AppData.SubPipe, SBN_MAX_ONESUB_PKTS_ON_PIPE); + Status = CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CFE_SB_ONESUB_TLM_MID), + SBN_AppData.SubPipe, + SBN_MAX_ONESUB_PKTS_ON_PIPE); if (Status != CFE_SUCCESS) { EVSSendErr(SBN_INIT_EID, "failed to subscribe to sub (Status=%d)", (int)Status); diff --git a/fsw/src/sbn_subs.c b/fsw/src/sbn_subs.c index dfa8f41..a949930 100644 --- a/fsw/src/sbn_subs.c +++ b/fsw/src/sbn_subs.c @@ -307,7 +307,8 @@ static SBN_Status_t ProcessLocalUnsub(CFE_SB_MsgId_t MsgID) SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; EVSSendInfo(SBN_PEER_EID, "process local unsub %d:%d", Peer->SpacecraftID, Peer->ProcessorID); - SBN_Status = SendLocalSubToPeer(SBN_UNSUB_MSG, SBN_AppData.Subs[PeerIdx].MsgID, SBN_AppData.Subs[PeerIdx].QoS, Peer); + SBN_Status = + SendLocalSubToPeer(SBN_UNSUB_MSG, SBN_AppData.Subs[PeerIdx].MsgID, SBN_AppData.Subs[PeerIdx].QoS, Peer); if (SBN_Status != SBN_SUCCESS) { @@ -375,7 +376,9 @@ SBN_Status_t SBN_CheckSubscriptionPipe(void) } else { - EVSSendErr(SBN_MSG_EID, "unexpected message id (0x%04X) on SBN_AppData.SubPipe", CFE_SB_MsgIdToValue(MsgId)); + EVSSendErr(SBN_MSG_EID, + "unexpected message id (0x%04X) on SBN_AppData.SubPipe", + CFE_SB_MsgIdToValue(MsgId)); return SBN_ERROR; } /* end switch */ diff --git a/fsw/tables/sbn_conf_tbl.c b/fsw/tables/sbn_conf_tbl.c index bc158c0..cbc928a 100644 --- a/fsw/tables/sbn_conf_tbl.c +++ b/fsw/tables/sbn_conf_tbl.c @@ -19,45 +19,55 @@ #include "sbn_tbl.h" #include "cfe_tbl_filedef.h" -SBN_ConfTbl_t SBN_ConfTbl = {.ProtocolModules = {{/* [0] */ - .Name = "UDP", - .LibFileName = "/cf/sbn_udp.so", - .LibSymbol = "SBN_UDP_Ops", - .BaseEID = 0x0100}}, - .ProtocolCnt = 1, - .FilterModules = {{/* [0] */ - .Name = "Remap", - .LibFileName = "/cf/sbn_f_remap.so", - .LibSymbol = "SBN_F_Remap", - .BaseEID = 0x1000}}, - .FilterCnt = 1, - .Peers = - { - {/* [0] */ - .ProcessorID = 1, - .SpacecraftID = 0x42, - .NetNum = 0, - .ProtocolName = "UDP", - .Filters = {"Remap"}, - .Address = "127.0.0.1:3234", - .TaskFlags = SBN_TASK_POLL}, - {/* [1] */ - .ProcessorID = 2, - .SpacecraftID = 0x42, - .NetNum = 0, - .ProtocolName = "UDP", - .Filters = {"Remap"}, - .Address = "127.0.0.1:3235", - .TaskFlags = SBN_TASK_POLL}, - {/* [2] */ - .ProcessorID = 3, - .SpacecraftID = 0x42, - .NetNum = 0, - .ProtocolName = "UDP", - .Filters = {"Remap"}, - .Address = "127.0.0.1:3236", - .TaskFlags = SBN_TASK_POLL}, - }, - .PeerCnt = 3}; +SBN_ConfTbl_t SBN_ConfTbl = { + .ProtocolModules = { + { /* [0] */ + .Name = "UDP", + .LibFileName = "/cf/sbn_udp.so", + .LibSymbol = "SBN_UDP_Ops", + .BaseEID = 0x0100 + } + }, + .ProtocolCnt = 1, + .FilterModules = { + { /* [0] */ + .Name = "Remap", + .LibFileName = "/cf/sbn_f_remap.so", + .LibSymbol = "SBN_F_Remap", + .BaseEID = 0x1000 + } + }, + .FilterCnt = 1, + .Peers = { + { /* [0] */ + .ProcessorID = 1, + .SpacecraftID = 0x42, + .NetNum = 0, + .ProtocolName = "UDP", + .Filters = {"Remap"}, + .Address = "127.0.0.1:3234", + .TaskFlags = SBN_TASK_POLL + }, + { /* [1] */ + .ProcessorID = 2, + .SpacecraftID = 0x42, + .NetNum = 0, + .ProtocolName = "UDP", + .Filters = {"Remap"}, + .Address = "127.0.0.1:3235", + .TaskFlags = SBN_TASK_POLL + }, + { /* [2] */ + .ProcessorID = 3, + .SpacecraftID = 0x42, + .NetNum = 0, + .ProtocolName = "UDP", + .Filters = {"Remap"}, + .Address = "127.0.0.1:3236", + .TaskFlags = SBN_TASK_POLL + }, + }, + .PeerCnt = 3 +}; CFE_TBL_FILEDEF(SBN_ConfTbl, SBN.SBN_ConfTbl, SBN Configuration Table, sbn_conf_tbl.tbl) diff --git a/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c b/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c index 3abdead..091253b 100644 --- a/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c +++ b/modules/protocol/udp/unit-test/coveragetest/coveragetest_sbn_udp_if.c @@ -87,7 +87,7 @@ static void START_fn(const char *fn, int ln) UT_ResetState(0); printf("Start item %s (%d)\n", fn, ln); memset(&SBN_AppData, 0, sizeof(SBN_AppData)); - SBN_AppData.NetCnt = 1; + SBN_AppData.NetCnt = 1; NetPtr = &SBN_AppData.Nets[0]; PeerPtr = &NetPtr->Peers[0]; NetPtr->PeerCnt = 1; diff --git a/unit-test/coveragetest/sbn_coveragetest_common.c b/unit-test/coveragetest/sbn_coveragetest_common.c index 34e5dfc..bc640e5 100644 --- a/unit-test/coveragetest/sbn_coveragetest_common.c +++ b/unit-test/coveragetest/sbn_coveragetest_common.c @@ -256,7 +256,7 @@ void START_fn(const char *func, int line) memset(&SBN_AppData, 0, sizeof(SBN_AppData)); NetPtr = &SBN_AppData.Nets[0]; - SBN_AppData.NetCnt = 1; + SBN_AppData.NetCnt = 1; NetPtr->PeerCnt = 1; NetPtr->Configured = 1; PeerPtr = &NetPtr->Peers[0]; From 9192c78c0726aae383e9ac655d265d1ecd5fb914 Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Thu, 16 Jul 2026 16:22:47 -0400 Subject: [PATCH 6/8] Fix #98, clean up SBN_RecvNetMsgs --- fsw/src/sbn_app.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/fsw/src/sbn_app.c b/fsw/src/sbn_app.c index 13c2705..9536904 100644 --- a/fsw/src/sbn_app.c +++ b/fsw/src/sbn_app.c @@ -129,7 +129,8 @@ bool SBN_UnpackMsg(void *SBNBuf, CFE_SpacecraftID_t *SpacecraftIDPtr, void *Msg) { - uint8 t = 0; + *MsgSzPtr = 0; + uint8 t = 0; Pack_t Pack; Pack_Init(&Pack, SBNBuf, SBN_MAX_PACKED_MSG_SZ, false); Unpack_UInt32(&Pack, MsgSzPtr); @@ -445,17 +446,22 @@ void SBN_RecvNetTask(void) */ SBN_Status_t SBN_RecvNetMsgs(void) { - SBN_Status_t SBN_Status = 0; + SBN_Status_t SBN_Status; + SBN_PeerInterface_t *Peer; + uint8 MsgCnt; + SBN_NetIdx_t NetIdx; + SBN_NetInterface_t *Net; + SBN_MsgType_t MsgType; + SBN_MsgSz_t MsgSz; + CFE_ProcessorID_t ProcessorID; + CFE_SpacecraftID_t SpacecraftID; + SBN_PeerIdx_t PeerIdx; + + SBN_Status = SBN_ERROR; - SBN_NetIdx_t NetIdx = 0; for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; - SBN_MsgType_t MsgType; - SBN_MsgSz_t MsgSz; - CFE_ProcessorID_t ProcessorID; - CFE_SpacecraftID_t SpacecraftID; - + Net = &SBN_AppData.Nets[NetIdx]; if (Net->TaskFlags & SBN_TASK_RECV) { continue; /* separate task handles receiving from a net */ @@ -463,7 +469,7 @@ SBN_Status_t SBN_RecvNetMsgs(void) if (Net->IfOps->RecvFromNet) { - int MsgCnt = 0; + MsgCnt = 0; // TODO: make configurable for (MsgCnt = 0; MsgCnt < 100; MsgCnt++) /* read at most 100 messages from the net */ { @@ -480,7 +486,7 @@ SBN_Status_t SBN_RecvNetMsgs(void) /* for UDP, the message received may not be from the peer * expected. */ - SBN_PeerInterface_t *Peer = SBN_GetPeer(Net, ProcessorID, SpacecraftID); + Peer = SBN_GetPeer(Net, ProcessorID, SpacecraftID); if (!Peer) { @@ -500,12 +506,12 @@ SBN_Status_t SBN_RecvNetMsgs(void) } else if (Net->IfOps->RecvFromPeer) { - SBN_PeerIdx_t PeerIdx = 0; + PeerIdx = 0; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { - SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; + Peer = &Net->Peers[PeerIdx]; + MsgCnt = 0; - int MsgCnt = 0; // TODO: make configurable for (MsgCnt = 0; MsgCnt < 100; MsgCnt++) /* read at most 100 messages from peer */ { From 88003a2f1cea43458040b5f916204b63c5e6f405 Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Thu, 16 Jul 2026 16:32:08 -0400 Subject: [PATCH 7/8] Fix #98, add back codesonar fixes --- fsw/src/sbn_app.c | 6 +++--- fsw/src/sbn_subs.c | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fsw/src/sbn_app.c b/fsw/src/sbn_app.c index 9536904..781efef 100644 --- a/fsw/src/sbn_app.c +++ b/fsw/src/sbn_app.c @@ -727,7 +727,7 @@ static SBN_Status_t CheckPeerPipes(void) { CFE_Status_t CFE_Status; int ReceivedFlag; - int iter; + int iter = 0; CFE_MSG_Message_t *MsgPtr = NULL; CFE_MSG_Size_t MsgSz = 0; SBN_MsgSz_t SBN_MsgSz = 0; @@ -1063,7 +1063,7 @@ static SBN_Status_t WaitForWakeup(int32 iTimeOut) */ static cpuaddr LoadConf_Module(SBN_Module_Entry_t *e, CFE_ES_ModuleID_t *ModuleIDPtr) { - cpuaddr StructAddr; + cpuaddr StructAddr = 0; EVSSendInfo(SBN_TBL_EID, "checking if module (%s) already loaded", e->Name); if (OS_SymbolLookup(&StructAddr, e->LibSymbol) != OS_SUCCESS) /* try loading it if it's not already loaded */ @@ -1597,7 +1597,7 @@ static SBN_Status_t Cleanup(void) void SBN_AppMain(void) { static const char FAIL_PREFIX[] = "ERROR: could not start SBN:"; - CFE_ES_TaskInfo_t TaskInfo; + CFE_ES_TaskInfo_t TaskInfo = { 0 }; uint32 Status = CFE_SUCCESS; uint32 RunStatus = CFE_ES_RunStatus_APP_RUN; CFE_ES_AppId_t AppID = CFE_ES_APPID_UNDEFINED; diff --git a/fsw/src/sbn_subs.c b/fsw/src/sbn_subs.c index a949930..de325fd 100644 --- a/fsw/src/sbn_subs.c +++ b/fsw/src/sbn_subs.c @@ -332,7 +332,7 @@ SBN_Status_t SBN_CheckSubscriptionPipe(void) CFE_SB_AllSubscriptionsTlm_t *MsgPtr = NULL; /* largest message format */ CFE_SB_SingleSubscriptionTlm_t *SingleMsgPtr = NULL; /* utility "cast" */ - CFE_SB_MsgId_t MsgId; + CFE_SB_MsgId_t MsgId = CFE_SB_INVALID_MSG_ID; static CFE_SB_MsgId_t SB_ONESUB_TLM_MID = CFE_SB_MSGID_RESERVED; static CFE_SB_MsgId_t SB_ALLSUBS_TLM_MID = CFE_SB_MSGID_RESERVED; @@ -502,15 +502,15 @@ SBN_Status_t SBN_ProcessSubsFromPeer(SBN_PeerInterface_t *Peer, void *Msg) return SBN_ERROR; } - uint16 SubCnt; + uint16 SubCnt = 0; Unpack_UInt16(&Pack, &SubCnt); int SubIdx = 0; for (SubIdx = 0; SubIdx < SubCnt; SubIdx++) { - CFE_SB_MsgId_t MsgID; + CFE_SB_MsgId_t MsgID = CFE_SB_INVALID_MSG_ID; Unpack_MsgID(&Pack, &MsgID); - CFE_SB_Qos_t QoS; + CFE_SB_Qos_t QoS = { 0 }; Unpack_Data(&Pack, &QoS, sizeof(QoS)); SBN_Status = ProcessSubFromPeer(Peer, MsgID, QoS); @@ -617,15 +617,15 @@ SBN_Status_t SBN_ProcessUnsubsFromPeer(SBN_PeerInterface_t *Peer, void *Msg) EVSSendInfo(SBN_PROTO_EID, "version number mismatch with peer CpuID %d", Peer->ProcessorID); } - uint16 SubCnt; + uint16 SubCnt = 0; Unpack_UInt16(&Pack, &SubCnt); int SubIdx = 0; for (SubIdx = 0; SubIdx < SubCnt; SubIdx++) { - CFE_SB_MsgId_t MsgID; + CFE_SB_MsgId_t MsgID = CFE_SB_INVALID_MSG_ID; Unpack_MsgID(&Pack, &MsgID); - CFE_SB_Qos_t QoS; + CFE_SB_Qos_t QoS = { 0 }; Unpack_Data(&Pack, &QoS, sizeof(QoS)); ProcessUnsubFromPeer(Peer, MsgID); /* ignore return value, I want to unsub as much as I can */ From f8a06f3dc0abdeffb8f581f81297647d07ee5a1d Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Thu, 16 Jul 2026 16:59:47 -0400 Subject: [PATCH 8/8] Fix #98, put variable declarations in their correct places --- fsw/src/sbn_app.c | 310 +++++++++++++++++++++++----------------------- fsw/src/sbn_app.h | 45 +++++++ 2 files changed, 200 insertions(+), 155 deletions(-) diff --git a/fsw/src/sbn_app.c b/fsw/src/sbn_app.c index 781efef..61e4681 100644 --- a/fsw/src/sbn_app.c +++ b/fsw/src/sbn_app.c @@ -129,13 +129,18 @@ bool SBN_UnpackMsg(void *SBNBuf, CFE_SpacecraftID_t *SpacecraftIDPtr, void *Msg) { - *MsgSzPtr = 0; - uint8 t = 0; + uint8 t; Pack_t Pack; + Pack_Init(&Pack, SBNBuf, SBN_MAX_PACKED_MSG_SZ, false); + + *MsgSzPtr = 0; Unpack_UInt32(&Pack, MsgSzPtr); + + t = 0; Unpack_UInt8(&Pack, &t); *MsgTypePtr = t; + Unpack_UInt32(&Pack, ProcessorIDPtr); Unpack_UInt32(&Pack, SpacecraftIDPtr); @@ -163,8 +168,13 @@ bool SBN_UnpackMsg(void *SBNBuf, SBN_Status_t SBN_Connected(SBN_PeerInterface_t *Peer) { static const char FAIL_PREFIX[] = "ERROR: could not disconnect peer:"; - SBN_Status_t SBN_Status = SBN_SUCCESS; + SBN_Status_t SBN_Status; CFE_Status_t CFE_Status; + char PipeName[OS_MAX_API_NAME]; + uint8 ProtocolVer; + + SBN_Status = SBN_SUCCESS; + CFE_Status = CFE_SUCCESS; if (Peer->Connected != 0) { @@ -176,8 +186,6 @@ SBN_Status_t SBN_Connected(SBN_PeerInterface_t *Peer) return SBN_ERROR; } /* end if */ - char PipeName[OS_MAX_API_NAME]; - /* create a pipe name string similar to SBN_0_Pipe */ snprintf(PipeName, OS_MAX_API_NAME, "SBN_%d_%d_Pipe", (int)(Peer->ProcessorID), (int)(Peer->SpacecraftID)); CFE_Status = CFE_SB_CreatePipe(&(Peer->Pipe), SBN_PEER_PIPE_DEPTH, PipeName); @@ -201,8 +209,8 @@ SBN_Status_t SBN_Connected(SBN_PeerInterface_t *Peer) EVSSendInfo(SBN_PEER_EID, "Peer %d:%d connected.", Peer->SpacecraftID, (int)(Peer->ProcessorID)); - uint8 ProtocolVer = SBN_PROTO_VER; - SBN_Status = SBN_SendNetMsg(SBN_PROTO_MSG, sizeof(ProtocolVer), &ProtocolVer, Peer); + ProtocolVer = SBN_PROTO_VER; + SBN_Status = SBN_SendNetMsg(SBN_PROTO_MSG, sizeof(ProtocolVer), &ProtocolVer, Peer); if (SBN_Status != SBN_SUCCESS) { return SBN_Status; @@ -227,7 +235,7 @@ SBN_Status_t SBN_Connected(SBN_PeerInterface_t *Peer) SBN_Status_t SBN_Disconnected(SBN_PeerInterface_t *Peer) { static const char FAIL_PREFIX[] = "ERROR: could not disconnect peer:"; - CFE_Status_t Status; + CFE_Status_t CFE_Status; if (Peer->Connected == 0) { @@ -241,14 +249,14 @@ SBN_Status_t SBN_Disconnected(SBN_PeerInterface_t *Peer) Peer->Connected = 0; /**< mark as disconnected before deleting pipe */ - if ((Status = CFE_SB_DeletePipe(Peer->Pipe)) != CFE_SUCCESS) + if ((CFE_Status = CFE_SB_DeletePipe(Peer->Pipe)) != CFE_SUCCESS) { EVSSendErr(SBN_PEER_EID, "%s could not delete pipe when disconnecting peer %d:%d: 0x%08x", FAIL_PREFIX, Peer->SpacecraftID, Peer->ProcessorID, - Status); + CFE_Status); } Peer->Pipe = CFE_SB_INVALID_PIPE; @@ -264,25 +272,6 @@ SBN_Status_t SBN_Disconnected(SBN_PeerInterface_t *Peer) return SBN_SUCCESS; } /* end SBN_Disconnected() */ -/* Use a struct for all local variables in the task so we can specify exactly - * how large of a stack we need for the task. - */ - -typedef struct -{ - SBN_Status_t Status; - CFE_ES_TaskId_t RecvTaskID; - SBN_PeerIdx_t PeerIdx; - SBN_NetIdx_t NetIdx; - SBN_PeerInterface_t *Peer; - SBN_NetInterface_t *Net; - CFE_ProcessorID_t ProcessorID; - CFE_SpacecraftID_t SpacecraftID; - SBN_MsgType_t MsgType; - SBN_MsgSz_t MsgSz; - uint8 Msg[CFE_MISSION_SB_MAX_SB_MSG_SIZE]; -} RecvPeerTaskData_t; - /** * \brief Receive task created for each direct peer-based connection. * Spanwed from PeerPoll() @@ -355,20 +344,6 @@ void SBN_RecvPeerTask(void) } /* end while */ } /* end SBN_RecvPeerTask() */ -typedef struct RecvNetTaskData_s -{ - SBN_NetIdx_t NetIdx; - SBN_NetInterface_t *Net; - SBN_PeerInterface_t *Peer; - SBN_Status_t Status; - CFE_ES_TaskId_t RecvTaskID; - CFE_ProcessorID_t ProcessorID; - CFE_SpacecraftID_t SpacecraftID; - SBN_MsgType_t MsgType; - SBN_MsgSz_t MsgSz; - uint8 Msg[CFE_MISSION_SB_MAX_SB_MSG_SIZE]; -} RecvNetTaskData_t; - /** * \brief Receive task created for each net-based connection. * Spanwed from PeerPoll() @@ -469,7 +444,6 @@ SBN_Status_t SBN_RecvNetMsgs(void) if (Net->IfOps->RecvFromNet) { - MsgCnt = 0; // TODO: make configurable for (MsgCnt = 0; MsgCnt < 100; MsgCnt++) /* read at most 100 messages from the net */ { @@ -506,11 +480,9 @@ SBN_Status_t SBN_RecvNetMsgs(void) } else if (Net->IfOps->RecvFromPeer) { - PeerIdx = 0; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { Peer = &Net->Peers[PeerIdx]; - MsgCnt = 0; // TODO: make configurable for (MsgCnt = 0; MsgCnt < 100; MsgCnt++) /* read at most 100 messages from peer */ @@ -565,8 +537,11 @@ SBN_Status_t SBN_RecvNetMsgs(void) */ SBN_Status_t SBN_SendNetMsg(SBN_MsgType_t MsgType, SBN_MsgSz_t MsgSz, void *Msg, SBN_PeerInterface_t *Peer) { - SBN_NetInterface_t *Net = Peer->Net; - SBN_Status_t SBN_Status = SBN_SUCCESS; + SBN_NetInterface_t *Net; + SBN_Status_t SBN_Status; + + Net = Peer->Net; + SBN_Status = SBN_SUCCESS; if (CFE_RESOURCEID_TEST_DEFINED(Peer->SendTaskID)) { @@ -603,18 +578,6 @@ SBN_Status_t SBN_SendNetMsg(SBN_MsgType_t MsgType, SBN_MsgSz_t MsgSz, void *Msg, return SBN_Status; } /* end SBN_SendNetMsg */ -typedef struct -{ - SBN_Status_t Status; - SBN_NetIdx_t NetIdx; - SBN_PeerIdx_t PeerIdx; - CFE_ES_TaskId_t SendTaskID; - CFE_MSG_Message_t *MsgPtr; - CFE_SB_MsgId_t MsgID; - SBN_NetInterface_t *Net; - SBN_PeerInterface_t *Peer; -} SendTaskData_t; - /** * \brief When a peer is connected, a task is created to listen to the relevant * pipe for messages to send to that peer. @@ -623,9 +586,12 @@ void SBN_SendTask(void) { SendTaskData_t D; SBN_Filter_Ctx_t Filter_Context; - CFE_MSG_Size_t MsgSz = 0; - SBN_MsgSz_t SBN_MsgSz = 0; + CFE_MSG_Size_t MsgSz; + SBN_MsgSz_t SBN_MsgSz; + SBN_ModuleIdx_t FilterIdx; + MsgSz = 0; + SBN_MsgSz = 0; Filter_Context.MyProcessorID = CFE_PSP_GetProcessorId(); Filter_Context.MySpacecraftID = CFE_PSP_GetSpacecraftId(); @@ -659,8 +625,6 @@ void SBN_SendTask(void) while (1) { - SBN_ModuleIdx_t FilterIdx = 0; - if (!D.Peer->Connected) { OS_TaskDelay(SBN_MAIN_LOOP_DELAY); @@ -725,14 +689,25 @@ void SBN_SendTask(void) */ static SBN_Status_t CheckPeerPipes(void) { + SBN_Status_t SBN_Status; CFE_Status_t CFE_Status; int ReceivedFlag; - int iter = 0; - CFE_MSG_Message_t *MsgPtr = NULL; - CFE_MSG_Size_t MsgSz = 0; - SBN_MsgSz_t SBN_MsgSz = 0; + int iter; + CFE_MSG_Message_t *MsgPtr; + CFE_MSG_Size_t MsgSz; + SBN_MsgSz_t SBN_MsgSz; SBN_Filter_Ctx_t Filter_Context; + SBN_NetIdx_t NetIdx; + SBN_NetInterface_t *Net; + SBN_PeerIdx_t PeerIdx; + SBN_ModuleIdx_t FilterIdx; + SBN_PeerInterface_t *Peer; + char SendTaskName[32]; + iter = 0; + MsgPtr = NULL; + MsgSz = 0; + SBN_MsgSz = 0; Filter_Context.MyProcessorID = CFE_PSP_GetProcessorId(); Filter_Context.MySpacecraftID = CFE_PSP_GetSpacecraftId(); @@ -745,16 +720,15 @@ static SBN_Status_t CheckPeerPipes(void) { ReceivedFlag = 0; - SBN_NetIdx_t NetIdx = 0; + NetIdx = 0; for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; + Net = &SBN_AppData.Nets[NetIdx]; - SBN_PeerIdx_t PeerIdx = 0; + PeerIdx = 0; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { - SBN_ModuleIdx_t FilterIdx = 0; - SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; + Peer = &Net->Peers[PeerIdx]; // Poll peer here to detect disconnections and to reconnect if (Net->IfOps->PollPeer(Peer) != SBN_SUCCESS) @@ -775,14 +749,13 @@ static SBN_Status_t CheckPeerPipes(void) if (!CFE_RESOURCEID_TEST_DEFINED(Peer->SendTaskID)) { /* TODO: logic/controls to prevent hammering? */ - char SendTaskName[32]; - snprintf(SendTaskName, 32, "sendT_%d_%d_%d", (int)NetIdx, (int)(Peer->ProcessorID), (int)(Peer->SpacecraftID)); + CFE_Status = CFE_ES_CreateChildTask(&(Peer->SendTaskID), SendTaskName, @@ -798,6 +771,7 @@ static SBN_Status_t CheckPeerPipes(void) "error creating send task for peer %d:%d", Peer->SpacecraftID, Peer->ProcessorID); + return SBN_ERROR; } /* end if */ } /* end if */ @@ -818,8 +792,6 @@ static SBN_Status_t CheckPeerPipes(void) for (FilterIdx = 0; FilterIdx < Peer->FilterCnt; FilterIdx++) { - SBN_Status_t SBN_Status; - if (Peer->Filters[FilterIdx]->FilterSend == NULL) { continue; @@ -870,10 +842,15 @@ static SBN_Status_t CheckPeerPipes(void) static SBN_Status_t PeerPoll(void) { CFE_Status_t CFE_Status; - SBN_NetIdx_t NetIdx = 0; + SBN_NetIdx_t NetIdx; + SBN_NetInterface_t *Net; + char RecvTaskName[32]; + SBN_PeerIdx_t PeerIdx; + SBN_PeerInterface_t *Peer; + for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; + Net = &SBN_AppData.Nets[NetIdx]; if (Net->IfOps->RecvFromNet && Net->TaskFlags & SBN_TASK_RECV) { @@ -882,7 +859,6 @@ static SBN_Status_t PeerPoll(void) EVSSendInfo(SBN_PEER_EID, "Creating recv task for net %d", (int)NetIdx); /* TODO: add logic/controls to prevent hammering */ - char RecvTaskName[32]; snprintf(RecvTaskName, OS_MAX_API_NAME, "sbn_rs_%d", (int)NetIdx); CFE_Status = CFE_ES_CreateChildTask(&(Net->RecvTaskID), RecvTaskName, @@ -901,17 +877,15 @@ static SBN_Status_t PeerPoll(void) } else { - SBN_PeerIdx_t PeerIdx = 0; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { - SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; + Peer = &Net->Peers[PeerIdx]; if (Net->IfOps->RecvFromPeer && Peer->TaskFlags & SBN_TASK_RECV) { if (!CFE_RESOURCEID_TEST_DEFINED(Peer->RecvTaskID)) { /* TODO: add logic/controls to prevent hammering */ - char RecvTaskName[32]; snprintf(RecvTaskName, OS_MAX_API_NAME, "sbn_recv_%d", (int)PeerIdx); CFE_Status = CFE_ES_CreateChildTask(&(Peer->RecvTaskID), @@ -949,6 +923,11 @@ static SBN_Status_t PeerPoll(void) */ static SBN_Status_t InitInterfaces(void) { + SBN_NetIdx_t NetIdx; + SBN_NetInterface_t *Net; + SBN_PeerIdx_t PeerIdx; + SBN_PeerInterface_t *Peer; + if (SBN_AppData.NetCnt < 1) { EVSSendErr(SBN_PEER_EID, "no networks configured"); @@ -956,11 +935,10 @@ static SBN_Status_t InitInterfaces(void) return SBN_ERROR; } /* end if */ - SBN_NetIdx_t NetIdx = 0; for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { EVSSendInfo(SBN_PEER_EID, "initializing net: %d", (int)NetIdx); - SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; + Net = &SBN_AppData.Nets[NetIdx]; if (!Net->Configured) { @@ -971,11 +949,10 @@ static SBN_Status_t InitInterfaces(void) Net->IfOps->InitNet(Net); - SBN_PeerIdx_t PeerIdx = 0; EVSSendInfo(SBN_PEER_EID, "Net %d has %d peers", NetIdx, Net->PeerCnt); for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { - SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; + Peer = &Net->Peers[PeerIdx]; EVSSendInfo(SBN_PEER_EID, "initializing net: %d peer: %d: sc: %d cpu: %d", @@ -1007,9 +984,13 @@ static SBN_Status_t InitInterfaces(void) */ static SBN_Status_t WaitForWakeup(int32 iTimeOut) { - CFE_Status_t CFE_Status = CFE_SUCCESS; - SBN_Status_t SBN_Status = SBN_SUCCESS; - CFE_MSG_Message_t *MsgPtr = 0; + CFE_Status_t CFE_Status; + SBN_Status_t SBN_Status; + CFE_MSG_Message_t *MsgPtr; + + CFE_Status = CFE_SUCCESS; + SBN_Status = SBN_SUCCESS; + MsgPtr = 0; /* Wait for WakeUp messages from scheduler */ CFE_Status = CFE_SB_ReceiveBuffer((CFE_SB_Buffer_t **)&MsgPtr, SBN_AppData.CmdPipe, iTimeOut); @@ -1061,37 +1042,39 @@ static SBN_Status_t WaitForWakeup(int32 iTimeOut) * * Cleaned up by UnloadModules() */ -static cpuaddr LoadConf_Module(SBN_Module_Entry_t *e, CFE_ES_ModuleID_t *ModuleIDPtr) +static cpuaddr LoadConf_Module(SBN_Module_Entry_t *PeerEntry, CFE_ES_ModuleID_t *ModuleIDPtr) { - cpuaddr StructAddr = 0; + cpuaddr StructAddr; - EVSSendInfo(SBN_TBL_EID, "checking if module (%s) already loaded", e->Name); - if (OS_SymbolLookup(&StructAddr, e->LibSymbol) != OS_SUCCESS) /* try loading it if it's not already loaded */ + StructAddr = 0; + + EVSSendInfo(SBN_TBL_EID, "checking if module (%s) already loaded", PeerEntry->Name); + if (OS_SymbolLookup(&StructAddr, PeerEntry->LibSymbol) != OS_SUCCESS) /* try loading it if it's not already loaded */ { - EVSSendInfo(SBN_TBL_EID, "symbol not yet loaded (%s)", e->LibSymbol); - if (e->LibFileName[0] == '\0') + EVSSendInfo(SBN_TBL_EID, "symbol not yet loaded (%s)", PeerEntry->LibSymbol); + if (PeerEntry->LibFileName[0] == '\0') { - EVSSendErr(SBN_TBL_EID, "invalid module (Name=%s)", e->Name); + EVSSendErr(SBN_TBL_EID, "invalid module (Name=%s)", PeerEntry->Name); return 0; } - EVSSendInfo(SBN_TBL_EID, "loading module (Name=%s, File=%s)", e->Name, e->LibFileName); - if (OS_ModuleLoad(ModuleIDPtr, e->Name, e->LibFileName, OS_MODULE_FLAG_GLOBAL_SYMBOLS) != OS_SUCCESS) + EVSSendInfo(SBN_TBL_EID, "loading module (Name=%s, File=%s)", PeerEntry->Name, PeerEntry->LibFileName); + if (OS_ModuleLoad(ModuleIDPtr, PeerEntry->Name, PeerEntry->LibFileName, OS_MODULE_FLAG_GLOBAL_SYMBOLS) != OS_SUCCESS) { - EVSSendErr(SBN_TBL_EID, "invalid module file (Name=%s LibFileName=%s)", e->Name, e->LibFileName); + EVSSendErr(SBN_TBL_EID, "invalid module file (Name=%s LibFileName=%s)", PeerEntry->Name, PeerEntry->LibFileName); return 0; } /* end if */ - EVSSendInfo(SBN_TBL_EID, "validating symbol load (%s)", e->LibSymbol); - if (OS_SymbolLookup(&StructAddr, e->LibSymbol) != OS_SUCCESS) + EVSSendInfo(SBN_TBL_EID, "validating symbol load (%s)", PeerEntry->LibSymbol); + if (OS_SymbolLookup(&StructAddr, PeerEntry->LibSymbol) != OS_SUCCESS) { - EVSSendErr(SBN_TBL_EID, "invalid symbol (Name=%s LibSymbol=%s)", e->Name, e->LibSymbol); + EVSSendErr(SBN_TBL_EID, "invalid symbol (Name=%s LibSymbol=%s)", PeerEntry->Name, PeerEntry->LibSymbol); return 0; } } else { - EVSSendInfo(SBN_TBL_EID, "symbol already loaded (%s)", e->LibSymbol); + EVSSendInfo(SBN_TBL_EID, "symbol already loaded (%s)", PeerEntry->LibSymbol); } /* end if */ return StructAddr; @@ -1114,14 +1097,16 @@ static SBN_ModuleIdx_t LoadConf_Filters(SBN_Module_Entry_t *FilterModu char ModuleNames[SBN_MAX_FILTERS_PER_PEER][SBN_MAX_MOD_NAME_LEN], SBN_FilterInterface_t **Filters) { - int i = 0; - SBN_ModuleIdx_t FilterCnt = 0; + int i; + SBN_ModuleIdx_t FilterCnt; + SBN_ModuleIdx_t FilterIdx; + + FilterCnt = 0; memset(FilterModules, 0, sizeof(*FilterModules) * FilterCnt); for (i = 0; i < SBN_MAX_FILTERS_PER_PEER && *ModuleNames[i]; i++) { - SBN_ModuleIdx_t FilterIdx = 0; for (FilterIdx = 0; FilterIdx < FilterModuleCnt; FilterIdx++) { if (strcmp(ModuleNames[i], FilterModules[FilterIdx].Name) == 0) @@ -1144,9 +1129,14 @@ static SBN_ModuleIdx_t LoadConf_Filters(SBN_Module_Entry_t *FilterModu static SBN_Status_t LoadConf(void) { - SBN_ModuleIdx_t ModuleIdx = 0; - SBN_PeerIdx_t PeerIdx = 0; + SBN_ModuleIdx_t ModuleIdx; + SBN_PeerIdx_t PeerIdx; SBN_FilterInterface_t *Filters[SBN_MAX_MOD_CNT]; + CFE_ES_ModuleID_t ModuleID; + SBN_IfOps_t *Ops; + SBN_Peer_Entry_t *PeerEntry; + SBN_NetInterface_t *Net; + SBN_PeerInterface_t *Peer; SBN_ProtocolOutlet_t Outlet = { .PackMsg = SBN_PackMsg, .UnpackMsg = SBN_UnpackMsg, .Connected = SBN_Connected, @@ -1167,9 +1157,8 @@ static SBN_Status_t LoadConf(void) EVSSendDbg(SBN_TBL_EID, "Loading protocol modules..."); for (ModuleIdx = 0; ModuleIdx < SBN_AppData.ConfTbl->ProtocolCnt; ModuleIdx++) { - CFE_ES_ModuleID_t ModuleID = OS_OBJECT_ID_UNDEFINED; - - SBN_IfOps_t *Ops = (SBN_IfOps_t *)LoadConf_Module(&SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx], &ModuleID); + ModuleID = OS_OBJECT_ID_UNDEFINED; + Ops = (SBN_IfOps_t *)LoadConf_Module(&SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx], &ModuleID); if (Ops == NULL) { @@ -1194,7 +1183,7 @@ static SBN_Status_t LoadConf(void) EVSSendDbg(SBN_TBL_EID, "Loading filter modules..."); for (ModuleIdx = 0; ModuleIdx < SBN_AppData.ConfTbl->FilterCnt; ModuleIdx++) { - CFE_ES_ModuleID_t ModuleID = OS_OBJECT_ID_UNDEFINED; + ModuleID = OS_OBJECT_ID_UNDEFINED; Filters[ModuleIdx] = (SBN_FilterInterface_t *)LoadConf_Module(&SBN_AppData.ConfTbl->FilterModules[ModuleIdx], &ModuleID); @@ -1220,13 +1209,13 @@ static SBN_Status_t LoadConf(void) /* load nets and peers */ for (PeerIdx = 0; PeerIdx < SBN_AppData.ConfTbl->PeerCnt; PeerIdx++) { - SBN_Peer_Entry_t *e = &SBN_AppData.ConfTbl->Peers[PeerIdx]; + PeerEntry = &SBN_AppData.ConfTbl->Peers[PeerIdx]; - EVSSendInfo(SBN_TBL_EID, "configuring peer (SC=%d, CPU=%d)...", e->SpacecraftID, e->ProcessorID); + EVSSendInfo(SBN_TBL_EID, "configuring peer (SC=%d, CPU=%d)...", PeerEntry->SpacecraftID, PeerEntry->ProcessorID); for (ModuleIdx = 0; ModuleIdx < SBN_AppData.ConfTbl->ProtocolCnt; ModuleIdx++) { - if (strcmp(SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx].Name, e->ProtocolName) == 0) + if (strcmp(SBN_AppData.ConfTbl->ProtocolModules[ModuleIdx].Name, PeerEntry->ProtocolName) == 0) { break; } @@ -1234,61 +1223,61 @@ static SBN_Status_t LoadConf(void) if (ModuleIdx == SBN_AppData.ConfTbl->ProtocolCnt) { - EVSSendCrit(SBN_TBL_EID, "invalid module name %s", e->ProtocolName); + EVSSendCrit(SBN_TBL_EID, "invalid module name %s", PeerEntry->ProtocolName); return SBN_ERROR; } /* end if */ - if (e->NetNum < 0 || e->NetNum >= SBN_MAX_NETS) + if (PeerEntry->NetNum < 0 || PeerEntry->NetNum >= SBN_MAX_NETS) { - EVSSendCrit(SBN_TBL_EID, "network index too large (%d>%d)", e->NetNum, SBN_MAX_NETS); + EVSSendCrit(SBN_TBL_EID, "network index too large (%d>%d)", PeerEntry->NetNum, SBN_MAX_NETS); return SBN_ERROR; } /* end if */ /* Net initialization */ - if (e->NetNum + 1 > SBN_AppData.NetCnt) + if (PeerEntry->NetNum + 1 > SBN_AppData.NetCnt) { - EVSSendInfo(SBN_TBL_EID, "found new highest net id: %d", e->NetNum); - SBN_AppData.NetCnt = e->NetNum + 1; - SBN_AppData.Nets[e->NetNum].PeerCnt = 0; + EVSSendInfo(SBN_TBL_EID, "found new highest net id: %d", PeerEntry->NetNum); + SBN_AppData.NetCnt = PeerEntry->NetNum + 1; + SBN_AppData.Nets[PeerEntry->NetNum].PeerCnt = 0; EVSSendInfo(SBN_TBL_EID, "increasing net count to %d", SBN_AppData.NetCnt); } /* end if */ - SBN_NetInterface_t *Net = &SBN_AppData.Nets[e->NetNum]; + Net = &SBN_AppData.Nets[PeerEntry->NetNum]; /* Reset peer count since we're initializing the net */ - if (e->ProcessorID == CFE_PSP_GetProcessorId() && e->SpacecraftID == CFE_PSP_GetSpacecraftId()) + if (PeerEntry->ProcessorID == CFE_PSP_GetProcessorId() && PeerEntry->SpacecraftID == CFE_PSP_GetSpacecraftId()) { - EVSSendInfo(SBN_TBL_EID, "peer is this processor: loading net %d", e->NetNum); + EVSSendInfo(SBN_TBL_EID, "peer is this processor: loading net %d", PeerEntry->NetNum); Net->Configured = true; Net->ProtocolIdx = ModuleIdx; Net->IfOps = SBN_AppData.IfOps[ModuleIdx]; - Net->IfOps->LoadNet(Net, (const char *)e->Address); + Net->IfOps->LoadNet(Net, (const char *)PeerEntry->Address); Net->FilterCnt = LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, SBN_AppData.ConfTbl->FilterCnt, Filters, - e->Filters, + PeerEntry->Filters, Net->Filters); - Net->TaskFlags = e->TaskFlags; + Net->TaskFlags = PeerEntry->TaskFlags; } else { - EVSSendInfo(SBN_TBL_EID, "peer is other processor: loading peer onto net %d", e->NetNum); - SBN_PeerInterface_t *Peer = &Net->Peers[Net->PeerCnt++]; + EVSSendInfo(SBN_TBL_EID, "peer is other processor: loading peer onto net %d", PeerEntry->NetNum); + Peer = &Net->Peers[Net->PeerCnt++]; memset(Peer, 0, sizeof(*Peer)); Peer->Net = Net; - Peer->ProcessorID = e->ProcessorID; - Peer->SpacecraftID = e->SpacecraftID; + Peer->ProcessorID = PeerEntry->ProcessorID; + Peer->SpacecraftID = PeerEntry->SpacecraftID; Peer->FilterCnt = LoadConf_Filters(SBN_AppData.ConfTbl->FilterModules, SBN_AppData.ConfTbl->FilterCnt, Filters, - e->Filters, + PeerEntry->Filters, Peer->Filters); - SBN_AppData.IfOps[ModuleIdx]->LoadPeer(Peer, (const char *)e->Address); + SBN_AppData.IfOps[ModuleIdx]->LoadPeer(Peer, (const char *)PeerEntry->Address); - Peer->TaskFlags = e->TaskFlags; + Peer->TaskFlags = PeerEntry->TaskFlags; } /* end if */ } /* end for */ @@ -1373,11 +1362,14 @@ static SBN_Status_t UnloadPeer(SBN_PeerInterface_t *Peer) static SBN_Status_t UnloadNets(void) { uint32 Status; + int NetIdx; + SBN_NetInterface_t *Net; + SBN_PeerIdx_t PeerIdx; + SBN_PeerInterface_t *Peer; - int NetIdx = 0; for (NetIdx = 0; NetIdx < SBN_AppData.NetCnt; NetIdx++) { - SBN_NetInterface_t *Net = &SBN_AppData.Nets[NetIdx]; + Net = &SBN_AppData.Nets[NetIdx]; Net->Configured = false; if (CFE_RESOURCEID_TEST_DEFINED(Net->RecvTaskID)) @@ -1401,11 +1393,9 @@ static SBN_Status_t UnloadNets(void) EVSSendInfo(SBN_TBL_EID, "Terminated net: %d", NetIdx); } - SBN_PeerIdx_t PeerIdx = 0; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { - SBN_PeerInterface_t *Peer = &Net->Peers[PeerIdx]; - + Peer = &Net->Peers[PeerIdx]; UnloadPeer(Peer); } @@ -1420,7 +1410,9 @@ static SBN_Status_t UnloadNets(void) static uint32 LoadConfTbl(void) { - int32 Status = CFE_SUCCESS; + int32 Status; + + Status = CFE_SUCCESS; if ((Status = CFE_TBL_Register(&SBN_AppData.ConfTblHandle, "SBN_ConfTbl", @@ -1597,10 +1589,15 @@ static SBN_Status_t Cleanup(void) void SBN_AppMain(void) { static const char FAIL_PREFIX[] = "ERROR: could not start SBN:"; - CFE_ES_TaskInfo_t TaskInfo = { 0 }; - uint32 Status = CFE_SUCCESS; - uint32 RunStatus = CFE_ES_RunStatus_APP_RUN; - CFE_ES_AppId_t AppID = CFE_ES_APPID_UNDEFINED; + CFE_ES_TaskInfo_t TaskInfo = { 0 }; + uint32 Status; + uint32 RunStatus; + CFE_ES_AppId_t AppID; + CFE_ES_TaskId_t TskId; + + Status = CFE_SUCCESS; + RunStatus = CFE_ES_RunStatus_APP_RUN; + AppID = CFE_ES_APPID_UNDEFINED; if (CFE_EVS_Register(NULL, 0, CFE_EVS_NO_FILTER) != CFE_SUCCESS) return; @@ -1614,7 +1611,6 @@ void SBN_AppMain(void) SBN_AppData.AppID = AppID; /* load my TaskName so I can ignore messages I send out to SB */ - CFE_ES_TaskId_t TskId; CFE_ES_GetTaskID(&TskId); if ((Status = CFE_ES_GetTaskInfo(&TaskInfo, TskId)) != CFE_SUCCESS) { @@ -1722,9 +1718,16 @@ SBN_Status_t SBN_ProcessNetMsg(SBN_NetInterface_t *Net, void *Msg) { static const char FAIL_PREFIX[] = "ERROR: could not process peer message:"; - SBN_Status_t SBN_Status = SBN_SUCCESS; - CFE_Status_t CFE_Status = CFE_SUCCESS; - SBN_PeerInterface_t *Peer = SBN_GetPeer(Net, ProcessorID, SpacecraftID); + SBN_Status_t SBN_Status; + CFE_Status_t CFE_Status; + SBN_PeerInterface_t *Peer; + uint8 Ver; + SBN_ModuleIdx_t FilterIdx; + SBN_Filter_Ctx_t Filter_Context; + + SBN_Status = SBN_SUCCESS; + CFE_Status = CFE_SUCCESS; + Peer = SBN_GetPeer(Net, ProcessorID, SpacecraftID); if (!Peer) { @@ -1743,7 +1746,7 @@ SBN_Status_t SBN_ProcessNetMsg(SBN_NetInterface_t *Net, { case SBN_PROTO_MSG: { - uint8 Ver = ((uint8 *)Msg)[0]; + Ver = ((uint8 *)Msg)[0]; if (Ver != SBN_PROTO_VER) { EVSSendErr(SBN_SB_EID, @@ -1766,9 +1769,6 @@ SBN_Status_t SBN_ProcessNetMsg(SBN_NetInterface_t *Net, } /* end case */ case SBN_APP_MSG: { - SBN_ModuleIdx_t FilterIdx = 0; - SBN_Filter_Ctx_t Filter_Context; - Filter_Context.MyProcessorID = CFE_PSP_GetProcessorId(); Filter_Context.MySpacecraftID = CFE_PSP_GetSpacecraftId(); Filter_Context.PeerProcessorID = Peer->ProcessorID; @@ -1830,7 +1830,7 @@ SBN_Status_t SBN_ProcessNetMsg(SBN_NetInterface_t *Net, SBN_PeerInterface_t * SBN_GetPeer(SBN_NetInterface_t *Net, CFE_ProcessorID_t ProcessorID, CFE_SpacecraftID_t SpacecraftID) { - SBN_PeerIdx_t PeerIdx = 0; + SBN_PeerIdx_t PeerIdx; for (PeerIdx = 0; PeerIdx < Net->PeerCnt; PeerIdx++) { diff --git a/fsw/src/sbn_app.h b/fsw/src/sbn_app.h index f38454b..2767b74 100644 --- a/fsw/src/sbn_app.h +++ b/fsw/src/sbn_app.h @@ -122,6 +122,51 @@ typedef struct */ extern SBN_AppData_t SBN_AppData; +/* Use a struct for all local variables in the task so we can specify exactly + * how large of a stack we need for the task. + */ + +typedef struct +{ + SBN_Status_t Status; + CFE_ES_TaskId_t RecvTaskID; + SBN_PeerIdx_t PeerIdx; + SBN_NetIdx_t NetIdx; + SBN_PeerInterface_t *Peer; + SBN_NetInterface_t *Net; + CFE_ProcessorID_t ProcessorID; + CFE_SpacecraftID_t SpacecraftID; + SBN_MsgType_t MsgType; + SBN_MsgSz_t MsgSz; + uint8 Msg[CFE_MISSION_SB_MAX_SB_MSG_SIZE]; +} RecvPeerTaskData_t; + +typedef struct RecvNetTaskData_s +{ + SBN_NetIdx_t NetIdx; + SBN_NetInterface_t *Net; + SBN_PeerInterface_t *Peer; + SBN_Status_t Status; + CFE_ES_TaskId_t RecvTaskID; + CFE_ProcessorID_t ProcessorID; + CFE_SpacecraftID_t SpacecraftID; + SBN_MsgType_t MsgType; + SBN_MsgSz_t MsgSz; + uint8 Msg[CFE_MISSION_SB_MAX_SB_MSG_SIZE]; +} RecvNetTaskData_t; + +typedef struct +{ + SBN_Status_t Status; + SBN_NetIdx_t NetIdx; + SBN_PeerIdx_t PeerIdx; + CFE_ES_TaskId_t SendTaskID; + CFE_MSG_Message_t *MsgPtr; + CFE_SB_MsgId_t MsgID; + SBN_NetInterface_t *Net; + SBN_PeerInterface_t *Peer; +} SendTaskData_t; + /* ** Prototypes */