From 5530c02c2f58863c8cd86947593345b3129d5b94 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Mon, 2 Feb 2026 12:22:19 -0500 Subject: [PATCH 01/15] Whitespace and formatting changes (applied via clang-format) --- cfecfs/eds2cfetbl/eds2cfetbl.c | 309 ++-- .../eds2cfetbl/scripts/eds_tbltool_filedef.h | 8 +- cfecfs/edsmsg/fsw/inc/edsmsg_dispatcher.h | 6 +- cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h | 6 +- cfecfs/edsmsg/fsw/src/edsmsg_dispatcher.c | 27 +- .../fsw/ut-stubs/edsmsg_dispatcher_stubs.c | 6 +- .../missionlib/fsw/inc/cfe_missionlib_api.h | 11 +- .../fsw/inc/cfe_missionlib_runtime.h | 12 +- .../missionlib/fsw/src/cfe_missionlib_api.c | 13 +- .../fsw/src/cfe_missionlib_runtime_default.c | 78 +- .../ut-stubs/cfe_missionlib_api_handlers.c | 33 +- .../fsw/ut-stubs/cfe_missionlib_api_stubs.c | 16 +- .../cfe_missionlib_runtime_handlers.c | 47 +- .../ut-stubs/cfe_missionlib_runtime_stubs.c | 33 +- .../ut-stubs/cfe_missionlib_stub_helpers.c | 10 +- .../ut-stubs/cfe_missionlib_stub_helpers.h | 6 +- .../lua/inc/cfe_missionlib_lua_softwarebus.h | 25 +- .../lua/src/cfe_missionlib_lua_softwarebus.c | 223 +-- .../python/inc/cfe_missionlib_python.h | 9 +- .../src/cfe_missionlib_python_database.c | 346 ++-- .../src/cfe_missionlib_python_interface.c | 246 +-- .../src/cfe_missionlib_python_internal.h | 55 +- .../python/src/cfe_missionlib_python_module.c | 2 - .../python/src/cfe_missionlib_python_setup.c | 33 +- .../python/src/cfe_missionlib_python_topic.c | 345 ++-- cfecfs/scriptengine/fsw/src/scriptengine.c | 68 +- .../fsw/src/scriptengine_internal.h | 1 - cfecfs/testexecutive/inc/testexec.h | 5 +- .../modules/ci_to_lab_interface.c | 153 +- .../testexecutive/modules/remote_interface.c | 236 ++- cfecfs/testexecutive/src/test_interface.c | 97 +- cfecfs/testexecutive/src/testctrl.c | 211 ++- cfecfs/testexecutive/src/testexec.c | 138 +- cfecfs/util/cmdUtil.c | 500 +++--- cfecfs/util/tlm_decode.c | 309 ++-- edslib/configtest/edslib_longdouble.c | 39 +- edslib/fsw/inc/edslib_api_types.h | 89 +- edslib/fsw/inc/edslib_binding_objects.h | 200 ++- edslib/fsw/inc/edslib_database_types.h | 185 +-- edslib/fsw/inc/edslib_datatypedb.h | 1435 +++++++++-------- edslib/fsw/inc/edslib_displaydb.h | 621 +++---- edslib/fsw/inc/edslib_global.h | 6 +- edslib/fsw/inc/edslib_id.h | 97 +- edslib/fsw/inc/edslib_init.h | 4 +- edslib/fsw/inc/edslib_intfdb.h | 62 +- edslib/fsw/src/edslib_binding_objects.c | 135 +- edslib/fsw/src/edslib_database_ops.c | 4 +- edslib/fsw/src/edslib_datatypedb_api.c | 563 ++++--- .../fsw/src/edslib_datatypedb_constraints.c | 131 +- .../fsw/src/edslib_datatypedb_errorcontrol.c | 154 +- edslib/fsw/src/edslib_datatypedb_iterator.c | 299 ++-- edslib/fsw/src/edslib_datatypedb_load_store.c | 293 ++-- edslib/fsw/src/edslib_datatypedb_lookup.c | 79 +- .../fsw/src/edslib_datatypedb_pack_unpack.c | 1324 +++++++-------- edslib/fsw/src/edslib_displaydb_api.c | 475 +++--- edslib/fsw/src/edslib_displaydb_base64.c | 81 +- edslib/fsw/src/edslib_displaydb_iterator.c | 320 ++-- edslib/fsw/src/edslib_displaydb_locate.c | 157 +- edslib/fsw/src/edslib_displaydb_lookup.c | 72 +- edslib/fsw/src/edslib_displaydb_stringconv.c | 511 +++--- edslib/fsw/src/edslib_global_api.c | 6 +- edslib/fsw/src/edslib_init.c | 2 - edslib/fsw/src/edslib_internal.h | 531 +++--- edslib/fsw/src/edslib_intfdb_api.c | 83 +- edslib/fsw/src/edslib_intfdb_lookup.c | 57 +- edslib/fsw/unit-test/edslib_datatypedb_test.c | 84 +- edslib/fsw/unit-test/edslib_displaydb_test.c | 10 +- edslib/fsw/unit-test/edslib_intfdb_test.c | 16 +- edslib/fsw/unit-test/edslib_pack_test.c | 252 ++- edslib/fsw/unit-test/edslib_unpack_test.c | 356 ++-- .../ut-stubs/edslib_binding_objects_stubs.c | 18 +- edslib/fsw/ut-stubs/edslib_datatypedb_stubs.c | 154 +- edslib/fsw/ut-stubs/edslib_displaydb_stubs.c | 60 +- edslib/fsw/ut-stubs/edslib_global_stubs.c | 6 +- edslib/fsw/ut-stubs/edslib_init_stubs.c | 1 - edslib/fsw/ut-stubs/edslib_intfdb_stubs.c | 63 +- edslib/json/inc/edslib_json_objects.h | 25 +- edslib/json/src/edslib_json_objects.c | 238 +-- edslib/lua/inc/edslib_lua_objects.h | 15 +- edslib/lua/src/edslib_lua_objects.c | 420 ++--- edslib/python/inc/edslib_python.h | 25 +- edslib/python/src/edslib_python_accessor.c | 109 +- edslib/python/src/edslib_python_array.c | 173 +- edslib/python/src/edslib_python_base.c | 228 ++- edslib/python/src/edslib_python_buffer.c | 115 +- edslib/python/src/edslib_python_container.c | 197 ++- edslib/python/src/edslib_python_conversions.c | 266 ++- edslib/python/src/edslib_python_database.c | 141 +- .../python/src/edslib_python_databaseentry.c | 599 ++++--- .../python/src/edslib_python_dynamicarray.c | 128 +- edslib/python/src/edslib_python_internal.h | 123 +- edslib/python/src/edslib_python_module.c | 27 +- edslib/python/src/edslib_python_number.c | 77 +- .../python/src/edslib_python_packedobject.c | 89 +- edslib/python/src/edslib_python_scalar.c | 30 +- edslib/python/src/edslib_python_setup.c | 59 +- tool/src/seds_checksum.c | 20 +- tool/src/seds_checksum.h | 13 +- tool/src/seds_generic_props.c | 8 +- tool/src/seds_generic_props.h | 8 +- tool/src/seds_global.h | 24 +- tool/src/seds_instance_node.c | 14 +- tool/src/seds_instance_node.h | 6 +- tool/src/seds_memreq.c | 127 +- tool/src/seds_memreq.h | 22 +- tool/src/seds_outputfile.c | 244 +-- tool/src/seds_outputfile.h | 4 +- tool/src/seds_plugin.c | 103 +- tool/src/seds_plugin.h | 8 +- tool/src/seds_preprocess.c | 45 +- tool/src/seds_preprocess.h | 6 +- tool/src/seds_range.c | 37 +- tool/src/seds_tool_main.c | 98 +- tool/src/seds_tree_node.c | 373 +++-- tool/src/seds_tree_node.h | 450 +++--- tool/src/seds_user_message.c | 61 +- tool/src/seds_user_message.h | 41 +- tool/src/seds_xmlparser.c | 663 ++++---- tool/src/seds_xmlparser.h | 5 +- 119 files changed, 9472 insertions(+), 8650 deletions(-) diff --git a/cfecfs/eds2cfetbl/eds2cfetbl.c b/cfecfs/eds2cfetbl/eds2cfetbl.c index 9e53f4c..985aefc 100644 --- a/cfecfs/eds2cfetbl/eds2cfetbl.c +++ b/cfecfs/eds2cfetbl/eds2cfetbl.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file eds2cfetbl.c * \ingroup cfecfs @@ -105,7 +104,6 @@ typedef struct EdsTableTool_CObj } EdsTableTool_CObj_t; - typedef struct EdsTableTool_Global { /* The Instance number of the current target (in cases where it is instance specific) */ @@ -132,7 +130,9 @@ const EdsLib_Id_t EDS_TABLE_LOAD_CMD_ID = EDSLIB_INTF_ID(EDS_INDEX(CFE_TBL), Eds *-----------------------------------------------------------------*/ EdsDataType_CFE_SB_MsgIdValue_t CFE_SB_CmdTopicIdToMsgId(uint16_t TopicId, uint16_t InstanceNum) { - const EdsComponent_CFE_SB_Listener_t Params = {{ .InstanceNumber = InstanceNum, .TopicId = TopicId }}; + const EdsComponent_CFE_SB_Listener_t Params = { + { .InstanceNumber = InstanceNum, .TopicId = TopicId } + }; EdsInterface_CFE_SB_SoftwareBus_PubSub_t Output; CFE_MissionLib_MapListenerComponent(&Output, &Params); @@ -148,7 +148,9 @@ EdsDataType_CFE_SB_MsgIdValue_t CFE_SB_CmdTopicIdToMsgId(uint16_t TopicId, uint1 *-----------------------------------------------------------------*/ EdsDataType_CFE_SB_MsgIdValue_t CFE_SB_TlmTopicIdToMsgId(uint16_t TopicId, uint16_t InstanceNum) { - const EdsComponent_CFE_SB_Publisher_t Params = {{ .InstanceNumber = InstanceNum, .TopicId = TopicId }}; + const EdsComponent_CFE_SB_Publisher_t Params = { + { .InstanceNumber = InstanceNum, .TopicId = TopicId } + }; EdsInterface_CFE_SB_SoftwareBus_PubSub_t Output; CFE_MissionLib_MapPublisherComponent(&Output, &Params); @@ -177,7 +179,11 @@ uint16_t EdsTableTool_GetProcessorId(void) * in the caller context. * *-----------------------------------------------------------------*/ -void EdsTableTool_DoExport(const void *filedefptr, const void *objptr, size_t objsize, const char *typename, size_t typesize) +void EdsTableTool_DoExport(const void *filedefptr, + const void *objptr, + size_t objsize, + const char *typename, + size_t typesize) { EdsTableTool_CObj_t *CObj = &EdsTableTool_Global.CObj; @@ -194,8 +200,10 @@ void EdsTableTool_DoExport(const void *filedefptr, const void *objptr, size_t ob */ if (CObj->FileDefInfo.ObjectSize != objsize) { - fprintf(stderr, EDSTABLETOOL_WARNING "Size from FileDef (%lu) differs from actual object (%lu)\n", - (unsigned long)CObj->FileDefInfo.ObjectSize, (unsigned long)objsize); + fprintf(stderr, + EDSTABLETOOL_WARNING "Size from FileDef (%lu) differs from actual object (%lu)\n", + (unsigned long)CObj->FileDefInfo.ObjectSize, + (unsigned long)objsize); } CObj->ObjPtr = malloc(objsize); @@ -207,10 +215,10 @@ void EdsTableTool_DoExport(const void *filedefptr, const void *objptr, size_t ob memcpy(CObj->ObjPtr, objptr, objsize); - strncpy(CObj->CTypeName, typename, sizeof(CObj->CTypeName)-1); + strncpy(CObj->CTypeName, typename, sizeof(CObj->CTypeName) - 1); CObj->TotalObjectSize = objsize; - CObj->ElementSize = typesize; + CObj->ElementSize = typesize; } /*---------------------------------------------------------------- @@ -225,8 +233,8 @@ void EdsTableTool_DoExport(const void *filedefptr, const void *objptr, size_t ob *-----------------------------------------------------------------*/ void EdsTableTool_LoadCTemplateFile(const char *Filename) { - void *dlhandle; - void *fptr; + void *dlhandle; + void *fptr; const char *tmpstr; void (*DynamicGeneratorFuncPtr)(void); char ModuleTempName[64]; @@ -235,7 +243,7 @@ void EdsTableTool_LoadCTemplateFile(const char *Filename) dlerror(); dlhandle = dlopen(Filename, RTLD_LAZY | RTLD_LOCAL); - tmpstr = dlerror(); + tmpstr = dlerror(); if (tmpstr != NULL || dlhandle == NULL) { if (tmpstr == NULL) @@ -247,7 +255,7 @@ void EdsTableTool_LoadCTemplateFile(const char *Filename) } /* The generated wrapper always has the same function name */ - fptr = dlsym(dlhandle, "EdsTableTool_GENERATOR"); + fptr = dlsym(dlhandle, "EdsTableTool_GENERATOR"); tmpstr = dlerror(); if (fptr == NULL || tmpstr != NULL) { @@ -270,9 +278,9 @@ void EdsTableTool_LoadCTemplateFile(const char *Filename) DynamicGeneratorFuncPtr(); printf(EDSTABLETOOL_INFO "Got object from C domain, shape=%lux%lu, total size=%lu\n", - (unsigned long)EdsTableTool_Global.CObj.TotalObjectSize / EdsTableTool_Global.CObj.ElementSize, - (unsigned long)EdsTableTool_Global.CObj.ElementSize, - (unsigned long)EdsTableTool_Global.CObj.TotalObjectSize); + (unsigned long)EdsTableTool_Global.CObj.TotalObjectSize / EdsTableTool_Global.CObj.ElementSize, + (unsigned long)EdsTableTool_Global.CObj.ElementSize, + (unsigned long)EdsTableTool_Global.CObj.TotalObjectSize); } dlclose(dlhandle); @@ -292,10 +300,10 @@ void EdsTableTool_LoadCTemplateFile(const char *Filename) *-----------------------------------------------------------------*/ EdsLib_Id_t EdsTableTool_FindCommonType(EdsLib_Id_t Type1, EdsLib_Id_t Type2) { - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; EdsLib_DataTypeDB_EntityInfo_t MemberInfo; - EdsLib_Id_t ResultEdsId; - int32_t EdsStatus; + EdsLib_Id_t ResultEdsId; + int32_t EdsStatus; /* Find some common point between the two types */ ResultEdsId = Type1; @@ -319,7 +327,7 @@ EdsLib_Id_t EdsTableTool_FindCommonType(EdsLib_Id_t Type1, EdsLib_Id_t Type2) /* another possibility is that the table intf type contains/wraps the C data type */ /* Check the first member type - if its a container, this is the base type, - * or if it is an array, this is the array data type */ + * or if it is an array, this is the array data type */ EdsStatus = EdsLib_DataTypeDB_GetMemberByIndex(&EDS_DATABASE, ResultEdsId, 0, &MemberInfo); if (EdsStatus != EDSLIB_SUCCESS) { @@ -347,14 +355,14 @@ EdsLib_Id_t EdsTableTool_FindCommonType(EdsLib_Id_t Type1, EdsLib_Id_t Type2) void EdsTableTool_IdentifyCObj(void) { EdsTableTool_CObj_t *CObj = &EdsTableTool_Global.CObj; - const char *tmpstr; - char *TempPtr; - size_t tmplen; - char TypeNameBuff[64]; - EdsLib_Id_t TblIntfEdsId; - EdsLib_Id_t AppComponentEdsId; - uint8_t PkgIdx; - int32_t EdsStatus; + const char *tmpstr; + char *TempPtr; + size_t tmplen; + char TypeNameBuff[64]; + EdsLib_Id_t TblIntfEdsId; + EdsLib_Id_t AppComponentEdsId; + uint8_t PkgIdx; + int32_t EdsStatus; /* * The TableName in the FileDef object is supposed to be of the form "AppName.TableName" - @@ -389,7 +397,9 @@ void EdsTableTool_IdentifyCObj(void) CObj->TableName[sizeof(CObj->TableName) - 1] = 0; printf(EDSTABLETOOL_INFO "Identifying C Object: AppName=\'%s\', TableName=\'%s\', CType=\'%s\'\n", - CObj->RuntimeAppName, CObj->TableName, CObj->CTypeName); + CObj->RuntimeAppName, + CObj->TableName, + CObj->CTypeName); /* Try to determine the EdsId of the C data type. This should exist, but in some cases * the user has defined a custom type only for the table definition (such as a union). This @@ -403,7 +413,7 @@ void EdsTableTool_IdentifyCObj(void) /* The C typedef should have a "_t" suffix - trim this off for EDS type names */ tmplen = strlen(TypeNameBuff); - if (tmplen > 2 && strcmp(&TypeNameBuff[tmplen-2], "_t") == 0) + if (tmplen > 2 && strcmp(&TypeNameBuff[tmplen - 2], "_t") == 0) { TypeNameBuff[tmplen - 2] = 0; } @@ -411,12 +421,14 @@ void EdsTableTool_IdentifyCObj(void) CObj->CTypeEdsId = EdsLib_DisplayDB_LookupTypeName(&EDS_DATABASE, TypeNameBuff); if (EdsLib_Is_Valid(CObj->CTypeEdsId)) { - printf(EDSTABLETOOL_INFO "Found EDS type definition \'%s\' for C datatype \'%s\'\n", TypeNameBuff, CObj->CTypeName); + printf(EDSTABLETOOL_INFO "Found EDS type definition \'%s\' for C datatype \'%s\'\n", + TypeNameBuff, + CObj->CTypeName); } /* Now find an EDS interface definition and data type that matches */ AppComponentEdsId = EDSLIB_ID_INVALID; - TblIntfEdsId = EDSLIB_ID_INVALID; + TblIntfEdsId = EDSLIB_ID_INVALID; /* Note that tables will not be loadable by TBL services unless there is an exact match. This * previously made extra assumptions about the possibility of an _APP suffix and other differences, @@ -429,15 +441,18 @@ void EdsTableTool_IdentifyCObj(void) EdsStatus = EdsLib_IntfDB_FindComponentByLocalName(&EDS_DATABASE, PkgIdx, "Application", &AppComponentEdsId); if (EdsStatus == EDSLIB_SUCCESS) { - EdsStatus = EdsLib_IntfDB_FindComponentInterfaceByLocalName(&EDS_DATABASE, AppComponentEdsId, CObj->TableName, &TblIntfEdsId); + EdsStatus = EdsLib_IntfDB_FindComponentInterfaceByLocalName(&EDS_DATABASE, + AppComponentEdsId, + CObj->TableName, + &TblIntfEdsId); } /* Fallback - if no exact match, check for a numeric suffix. Some apps (such as MD) - * have multiple instances of the same table and they attach a numeric suffix to the name */ + * have multiple instances of the same table and they attach a numeric suffix to the name */ if (EdsStatus != EDSLIB_SUCCESS) { TempPtr = CObj->TableName + strlen(CObj->TableName); - while(TempPtr > CObj->TableName) + while (TempPtr > CObj->TableName) { --TempPtr; if (!isdigit((int)(*TempPtr))) @@ -447,24 +462,31 @@ void EdsTableTool_IdentifyCObj(void) *TempPtr = 0; } - EdsStatus = EdsLib_IntfDB_FindComponentInterfaceByLocalName(&EDS_DATABASE, AppComponentEdsId, CObj->TableName, &TblIntfEdsId); + EdsStatus = EdsLib_IntfDB_FindComponentInterfaceByLocalName(&EDS_DATABASE, + AppComponentEdsId, + CObj->TableName, + &TblIntfEdsId); } if (EdsStatus == EDSLIB_SUCCESS) { /* Determine the argument data type for "load" command */ - EdsStatus = EdsLib_IntfDB_FindAllArgumentTypes(&EDS_DATABASE, EDS_TABLE_LOAD_CMD_ID, TblIntfEdsId, &CObj->IntfDataTypeEdsId, 1); + EdsStatus = EdsLib_IntfDB_FindAllArgumentTypes(&EDS_DATABASE, + EDS_TABLE_LOAD_CMD_ID, + TblIntfEdsId, + &CObj->IntfDataTypeEdsId, + 1); } /* - * If we only got one of the two types (C Datatype or Intf Datatype) then use that. - * (the table may not load correctly but that is a problem elsewhere) - * - * If we got both, and they are equal, then there is also no problem. - * However if we get both an they are different, we have to correlate them somehow. - * The most likely situation is that the C table is an array, and there is possibly - * a separate container around that array. - */ + * If we only got one of the two types (C Datatype or Intf Datatype) then use that. + * (the table may not load correctly but that is a problem elsewhere) + * + * If we got both, and they are equal, then there is also no problem. + * However if we get both an they are different, we have to correlate them somehow. + * The most likely situation is that the C table is an array, and there is possibly + * a separate container around that array. + */ if (!EdsLib_Is_Valid(CObj->IntfDataTypeEdsId)) { /* Intf type not known - just use the C type */ @@ -497,7 +519,9 @@ void EdsTableTool_IdentifyCObj(void) /* sanity check that the type name is valid - it might have returned undefined string */ if (EdsLib_Is_Valid(EdsLib_DisplayDB_LookupTypeName(&EDS_DATABASE, TypeNameBuff))) { - printf(EDSTABLETOOL_INFO "Selected EDS type definition \'%s\' for table \'%s\'\n", TypeNameBuff, CObj->FileDefInfo.TableName); + printf(EDSTABLETOOL_INFO "Selected EDS type definition \'%s\' for table \'%s\'\n", + TypeNameBuff, + CObj->FileDefInfo.TableName); strncpy(CObj->EdsTypeName, TypeNameBuff, sizeof(CObj->EdsTypeName) - 1); CObj->EdsTypeName[sizeof(CObj->EdsTypeName) - 1] = 0; @@ -509,7 +533,9 @@ void EdsTableTool_IdentifyCObj(void) } else { - fprintf(stderr, EDSTABLETOOL_ERROR "Could not map table \'%s\' to an EDS-defined data type\n", CObj->FileDefInfo.TableName); + fprintf(stderr, + EDSTABLETOOL_ERROR "Could not map table \'%s\' to an EDS-defined data type\n", + CObj->FileDefInfo.TableName); exit(EXIT_FAILURE); } } @@ -526,15 +552,15 @@ void EdsTableTool_IdentifyCObj(void) *-----------------------------------------------------------------*/ void EdsTableTool_AppendObjsFromCObj(lua_State *lua, EdsTableTool_CObj_t *CObj) { - EdsLib_Binding_DescriptorObject_t *ObjectUserData; + EdsLib_Binding_DescriptorObject_t *ObjectUserData; EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - int32_t EdsStatus; - const uint8_t *sptr; - void *tptr; - size_t tsz; - int tbl_pos; - size_t bytes_remain; - size_t bytes_per_elem; + int32_t EdsStatus; + const uint8_t *sptr; + void *tptr; + size_t tsz; + int tbl_pos; + size_t bytes_remain; + size_t bytes_per_elem; /* There should be a table at the top of the initial stack */ tbl_pos = lua_gettop(lua); @@ -548,13 +574,13 @@ void EdsTableTool_AppendObjsFromCObj(lua_State *lua, EdsTableTool_CObj_t *CObj) lua_rawseti(lua, tbl_pos, 1); bytes_per_elem = 0; - bytes_remain = 0; - sptr = NULL; + bytes_remain = 0; + sptr = NULL; } else { bytes_remain = CObj->TotalObjectSize; - sptr = CObj->ObjPtr; + sptr = CObj->ObjPtr; if (CObj->ElementSize < CObj->TotalObjectSize && DerivInfo.MaxSize.Bytes <= CObj->ElementSize) { @@ -590,13 +616,16 @@ void EdsTableTool_AppendObjsFromCObj(lua_State *lua, EdsTableTool_CObj_t *CObj) /* this should not happen because the size was checked earlier */ if (tsz < bytes_per_elem) { - fprintf(stderr, EDSTABLETOOL_ERROR "Object of %lu bytes cannot be copied into buffer of %lu bytes (datatype=%s)\n", - (unsigned long)bytes_per_elem, (unsigned long)tsz, CObj->EdsTypeName); + fprintf(stderr, + EDSTABLETOOL_ERROR "Object of %lu bytes cannot be copied into buffer of %lu bytes (datatype=%s)\n", + (unsigned long)bytes_per_elem, + (unsigned long)tsz, + CObj->EdsTypeName); exit(EXIT_FAILURE); } memcpy(tptr, sptr, bytes_per_elem); - sptr += bytes_per_elem; + sptr += bytes_per_elem; bytes_remain -= bytes_per_elem; /* Append to the table at the top of the initial stack */ @@ -618,7 +647,7 @@ void EdsTableTool_AppendObjsFromCObj(lua_State *lua, EdsTableTool_CObj_t *CObj) void EdsTableTool_CreateLuaObjFromCObj(lua_State *lua) { EdsTableTool_CObj_t *CObj = &EdsTableTool_Global.CObj; - int obj_idx; + int obj_idx; lua_getglobal(lua, CObj->RuntimeAppName); if (lua_type(lua, -1) != LUA_TTABLE) @@ -633,13 +662,13 @@ void EdsTableTool_CreateLuaObjFromCObj(lua_State *lua) obj_idx = lua_gettop(lua); lua_pushstring(lua, CObj->FileDefInfo.TableName); - lua_setfield(lua, obj_idx, "TableName"); /* Set "TableName" in Table object */ + lua_setfield(lua, obj_idx, "TableName"); /* Set "TableName" in Table object */ lua_pushstring(lua, CObj->FileDefInfo.Description); - lua_setfield(lua, obj_idx, "Description"); /* Set "Description" in Table object */ + lua_setfield(lua, obj_idx, "Description"); /* Set "Description" in Table object */ lua_pushstring(lua, CObj->FileDefInfo.TgtFilename); - lua_setfield(lua, obj_idx, "TgtFilename"); /* Set "TgtFilename" in Table object */ + lua_setfield(lua, obj_idx, "TgtFilename"); /* Set "TgtFilename" in Table object */ /* * If a C object is loaded, make EDS objects out of it @@ -662,7 +691,7 @@ void EdsTableTool_CreateLuaObjFromCObj(lua_State *lua) { lua_rawgeti(lua, -1, 1); } - lua_setfield(lua, obj_idx, "Content"); /* Set "Content" in Table object */ + lua_setfield(lua, obj_idx, "Content"); /* Set "Content" in Table object */ lua_settop(lua, obj_idx); } @@ -672,7 +701,7 @@ void EdsTableTool_CreateLuaObjFromCObj(lua_State *lua) lua_rawseti(lua, -2, 1 + lua_rawlen(lua, -2)); lua_settop(lua, obj_idx); - lua_setfield(lua, -2, CObj->TableName); /* Set entry in App table */ + lua_setfield(lua, -2, CObj->TableName); /* Set entry in App table */ lua_pop(lua, 1); printf(EDSTABLETOOL_INFO "Stored in global context as %s.%s \n", CObj->RuntimeAppName, CObj->TableName); @@ -724,7 +753,7 @@ void EdsTableTool_PushEncodedSingleObject(lua_State *lua) { lua_getglobal(lua, "EdsDB"); lua_getfield(lua, -1, "Encode"); - lua_remove(lua, -2); /* remove the EdsDB global */ + lua_remove(lua, -2); /* remove the EdsDB global */ lua_pushvalue(lua, -2); lua_call(lua, 1, 1); } @@ -750,7 +779,7 @@ void EdsTableTool_PushEncodedMultiObject(lua_State *lua) { size_t num_tbl; size_t num_enc; - int obj_idx; + int obj_idx; obj_idx = lua_gettop(lua); @@ -759,12 +788,12 @@ void EdsTableTool_PushEncodedMultiObject(lua_State *lua) num_tbl = lua_rawlen(lua, obj_idx); num_enc = 0; - while(num_enc < num_tbl) + while (num_enc < num_tbl) { ++num_enc; lua_rawgeti(lua, obj_idx, num_enc); /* Get the EdsLib_Object table entry */ EdsTableTool_PushEncodedSingleObject(lua); - lua_remove(lua, -2); /* remove the EdsLib_Object table entry from stack */ + lua_remove(lua, -2); /* remove the EdsLib_Object table entry from stack */ } lua_concat(lua, num_enc); @@ -790,10 +819,10 @@ void EdsTableTool_PushEncodedMultiObject(lua_State *lua) *-----------------------------------------------------------------*/ FILE *EdsTableTool_OpenOutputFile(lua_State *lua, int filename_pos) { - FILE *OutputFile = NULL; - int start_top = lua_gettop(lua); + FILE *OutputFile = NULL; + int start_top = lua_gettop(lua); const char *OutputName = luaL_checkstring(lua, filename_pos); - char OutputFullNameBuffer[256]; + char OutputFullNameBuffer[256]; const char *OutputPath; if (OutputName != NULL) @@ -866,19 +895,19 @@ int EdsTableTool_WriteCfeTableFile(lua_State *lua) { union { - EdsDataType_CFE_FS_Header_t FileHeader; + EdsDataType_CFE_FS_Header_t FileHeader; EdsDataType_CFE_TBL_File_Hdr_t TblHeader; } Buffer; - EdsPackedBuffer_CFE_FS_Header_t PackedFileHeader; + EdsPackedBuffer_CFE_FS_Header_t PackedFileHeader; EdsPackedBuffer_CFE_TBL_File_Hdr_t PackedTblHeader; - uint32_t TblHeaderBlockSize; - uint32_t FileHeaderBlockSize; - EdsLib_Id_t PackedEdsId; - FILE *OutputFile; - const char *OutputName; - EdsLib_DataTypeDB_TypeInfo_t BlockInfo; - const void *content_ptr; - size_t content_sz; + uint32_t TblHeaderBlockSize; + uint32_t FileHeaderBlockSize; + EdsLib_Id_t PackedEdsId; + FILE *OutputFile; + const char *OutputName; + EdsLib_DataTypeDB_TypeInfo_t BlockInfo; + const void *content_ptr; + size_t content_sz; OutputFile = NULL; OutputName = luaL_checkstring(lua, 1); @@ -902,20 +931,28 @@ int EdsTableTool_WriteCfeTableFile(lua_State *lua) strncpy(Buffer.TblHeader.TableName, luaL_checkstring(lua, 3), sizeof(Buffer.TblHeader.TableName)); PackedEdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_TBL), EdsContainer_CFE_TBL_File_Hdr_DATADICTIONARY); - EdsLib_DataTypeDB_PackCompleteObject(&EDS_DATABASE, &PackedEdsId, - PackedTblHeader, &Buffer.TblHeader, sizeof(PackedTblHeader) * 8, sizeof(Buffer.TblHeader)); + EdsLib_DataTypeDB_PackCompleteObject(&EDS_DATABASE, + &PackedEdsId, + PackedTblHeader, + &Buffer.TblHeader, + sizeof(PackedTblHeader) * 8, + sizeof(Buffer.TblHeader)); EdsLib_DataTypeDB_GetTypeInfo(&EDS_DATABASE, PackedEdsId, &BlockInfo); TblHeaderBlockSize = (BlockInfo.Size.Bits + 7) / 8; memset(&Buffer, 0, sizeof(Buffer)); Buffer.FileHeader.ContentType = CFE_FS_FILE_CONTENT_ID; - Buffer.FileHeader.SubType = luaL_checkinteger(lua, lua_upvalueindex(1)); - Buffer.FileHeader.Length = TblHeaderBlockSize + lua_rawlen(lua, -1); + Buffer.FileHeader.SubType = luaL_checkinteger(lua, lua_upvalueindex(1)); + Buffer.FileHeader.Length = TblHeaderBlockSize + lua_rawlen(lua, -1); snprintf(Buffer.FileHeader.Description, sizeof(Buffer.FileHeader.Description), "%s", luaL_checkstring(lua, 2)); PackedEdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_FS), EdsContainer_CFE_FS_Header_DATADICTIONARY); - EdsLib_DataTypeDB_PackCompleteObject(&EDS_DATABASE, &PackedEdsId, - PackedFileHeader, &Buffer, sizeof(PackedFileHeader) * 8, sizeof(Buffer)); + EdsLib_DataTypeDB_PackCompleteObject(&EDS_DATABASE, + &PackedEdsId, + PackedFileHeader, + &Buffer, + sizeof(PackedFileHeader) * 8, + sizeof(Buffer)); EdsLib_DataTypeDB_GetTypeInfo(&EDS_DATABASE, PackedEdsId, &BlockInfo); FileHeaderBlockSize = (BlockInfo.Size.Bits + 7) / 8; @@ -928,7 +965,7 @@ int EdsTableTool_WriteCfeTableFile(lua_State *lua) fwrite(PackedFileHeader, FileHeaderBlockSize, 1, OutputFile); fwrite(PackedTblHeader, TblHeaderBlockSize, 1, OutputFile); content_ptr = lua_tostring(lua, -1); - content_sz = lua_rawlen(lua, -1); + content_sz = lua_rawlen(lua, -1); if (content_ptr != NULL && content_sz > 0) { fwrite(content_ptr, content_sz, 1, OutputFile); @@ -1014,8 +1051,8 @@ static int EdsTableTool_ErrorHandler(lua_State *lua) *-----------------------------------------------------------------*/ int main(int argc, char *argv[]) { - int arg; - size_t slen; + int arg; + size_t slen; lua_State *lua; EdsLib_Initialize(); @@ -1032,48 +1069,50 @@ int main(int argc, char *argv[]) lua_newtable(lua); lua_rawsetp(lua, LUA_REGISTRYINDEX, &LUA_APPLIST_KEY); - while ((arg = getopt (argc, argv, "e:p")) != -1) + while ((arg = getopt(argc, argv, "e:p")) != -1) { - switch (arg) - { - case 'p': - EdsTableTool_Global.AllowPassthrough = true; - break; - - case 'e': - if (luaL_loadstring(lua, optarg) != LUA_OK) - { - fprintf(stderr, EDSTABLETOOL_ERROR "Invalid command line expression: %s\n", - luaL_tolstring(lua,-1, NULL)); - lua_pop(lua, 2); - return EXIT_FAILURE; - } - - if (lua_pcall(lua, 0, 0, 1) != LUA_OK) - { - fprintf(stderr, EDSTABLETOOL_ERROR "Cannot evaluate command line expression: %s\n", - luaL_tolstring(lua,-1, NULL)); - lua_pop(lua, 2); - return EXIT_FAILURE; - } - break; - - case '?': - if (isprint (optopt)) - { - fprintf(stderr, EDSTABLETOOL_ERROR "Unknown option `-%c'.\n", optopt); - } - else - { - fprintf(stderr, EDSTABLETOOL_ERROR "Unknown option character `\\x%x'.\n", optopt); - } - return EXIT_FAILURE; - break; - - default: - return EXIT_FAILURE; - break; - } + switch (arg) + { + case 'p': + EdsTableTool_Global.AllowPassthrough = true; + break; + + case 'e': + if (luaL_loadstring(lua, optarg) != LUA_OK) + { + fprintf(stderr, + EDSTABLETOOL_ERROR "Invalid command line expression: %s\n", + luaL_tolstring(lua, -1, NULL)); + lua_pop(lua, 2); + return EXIT_FAILURE; + } + + if (lua_pcall(lua, 0, 0, 1) != LUA_OK) + { + fprintf(stderr, + EDSTABLETOOL_ERROR "Cannot evaluate command line expression: %s\n", + luaL_tolstring(lua, -1, NULL)); + lua_pop(lua, 2); + return EXIT_FAILURE; + } + break; + + case '?': + if (isprint(optopt)) + { + fprintf(stderr, EDSTABLETOOL_ERROR "Unknown option `-%c'.\n", optopt); + } + else + { + fprintf(stderr, EDSTABLETOOL_ERROR "Unknown option character `\\x%x'.\n", optopt); + } + return EXIT_FAILURE; + break; + + default: + return EXIT_FAILURE; + break; + } } /* All additional args are input files. If none, this should be considered an error */ @@ -1152,7 +1191,7 @@ int main(int argc, char *argv[]) } else { - fprintf(stderr, EDSTABLETOOL_ERROR "Unable to handle file argument: %s\n",argv[arg]); + fprintf(stderr, EDSTABLETOOL_ERROR "Unable to handle file argument: %s\n", argv[arg]); return EXIT_FAILURE; } } diff --git a/cfecfs/eds2cfetbl/scripts/eds_tbltool_filedef.h b/cfecfs/eds2cfetbl/scripts/eds_tbltool_filedef.h index 9f39f90..d7ecc9b 100644 --- a/cfecfs/eds2cfetbl/scripts/eds_tbltool_filedef.h +++ b/cfecfs/eds2cfetbl/scripts/eds_tbltool_filedef.h @@ -10,8 +10,11 @@ EdsDataType_CFE_SB_MsgIdValue_t CFE_SB_CmdTopicIdToMsgId(uint16_t TopicId, uint1 EdsDataType_CFE_SB_MsgIdValue_t CFE_SB_TlmTopicIdToMsgId(uint16_t TopicId, uint16_t InstanceNum); uint16_t EdsTableTool_GetProcessorId(void); -void EdsTableTool_DoExport(const void *filedefptr, const void *objptr, size_t objsize, const char *typename, size_t typesize); - +void EdsTableTool_DoExport(const void *filedefptr, + const void *objptr, + size_t objsize, + const char *typename, + size_t typesize); static inline EdsDataType_CFE_SB_MsgIdValue_t CFE_SB_GlobalCmdTopicIdToMsgId(uint16_t TopicId) { @@ -37,5 +40,4 @@ static inline EdsDataType_CFE_SB_MsgIdValue_t CFE_SB_LocalTlmTopicIdToMsgId(uint return CFE_SB_TlmTopicIdToMsgId(TopicId, EdsTableTool_GetProcessorId()); } - #endif diff --git a/cfecfs/edsmsg/fsw/inc/edsmsg_dispatcher.h b/cfecfs/edsmsg/fsw/inc/edsmsg_dispatcher.h index ee81450..c7c0303 100644 --- a/cfecfs/edsmsg/fsw/inc/edsmsg_dispatcher.h +++ b/cfecfs/edsmsg/fsw/inc/edsmsg_dispatcher.h @@ -74,7 +74,9 @@ * \param DispatchTable Pointer to the dispatch table * \returns If successfully dispatched, returns code from handler function, otherwise an error code. */ -CFE_Status_t CFE_EDSMSG_Dispatch(EdsLib_Id_t DeclIntfId, EdsLib_Id_t ComponentId, const CFE_SB_Buffer_t *Buffer, - const void *DispatchTable); +CFE_Status_t CFE_EDSMSG_Dispatch(EdsLib_Id_t DeclIntfId, + EdsLib_Id_t ComponentId, + const CFE_SB_Buffer_t *Buffer, + const void *DispatchTable); #endif /* edsmsg_dispatcher_H */ diff --git a/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h b/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h index 84a47d4..c1a4f52 100644 --- a/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h +++ b/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h @@ -65,8 +65,8 @@ /** * \brief Macro to initialize a command header, useful in tables that define commands */ -#define CFE_MSG_CMD_HDR_INIT(mid, size, fc, cksum) \ - { \ +#define CFE_MSG_CMD_HDR_INIT(mid, size, fc, cksum) \ + { \ .CommandHeader = { \ .Message.CCSDS.CommonHdr = \ { \ @@ -76,7 +76,7 @@ .Length = (size), \ }, \ .Sec = {.FunctionCode = (fc), .Checksum = (cksum)} \ - } \ + } \ } /* diff --git a/cfecfs/edsmsg/fsw/src/edsmsg_dispatcher.c b/cfecfs/edsmsg/fsw/src/edsmsg_dispatcher.c index a0586ab..9d8bbc7 100644 --- a/cfecfs/edsmsg/fsw/src/edsmsg_dispatcher.c +++ b/cfecfs/edsmsg/fsw/src/edsmsg_dispatcher.c @@ -161,8 +161,8 @@ bool CFE_EDSMSG_Dispatch_CheckComponentMatch(EdsLib_Id_t ComponentId, CFE_Missio * This just finds the base type using the information in the EDS DB only * *-----------------------------------------------------------------*/ -CFE_Status_t CFE_EDSMSG_Dispatch_FindArgBaseType(EdsLib_Id_t DeclIntfId, EdsLib_Id_t CompIntfId, - EdsLib_Id_t *ArgTypeBuf) +CFE_Status_t +CFE_EDSMSG_Dispatch_FindArgBaseType(EdsLib_Id_t DeclIntfId, EdsLib_Id_t CompIntfId, EdsLib_Id_t *ArgTypeBuf) { const EdsLib_DatabaseObject_t *GD; EdsLib_Id_t CommandEdsId; @@ -199,8 +199,9 @@ CFE_Status_t CFE_EDSMSG_Dispatch_FindArgBaseType(EdsLib_Id_t DeclIntfId, EdsLib_ * expected/defined size in EDS * *-----------------------------------------------------------------*/ -CFE_Status_t CFE_EDSMSG_Dispatch_CheckActualBufferType(const CFE_SB_Buffer_t *Buffer, EdsLib_Id_t *EdsId, - uint32_t *DispatchTblPosition) +CFE_Status_t CFE_EDSMSG_Dispatch_CheckActualBufferType(const CFE_SB_Buffer_t *Buffer, + EdsLib_Id_t *EdsId, + uint32_t *DispatchTblPosition) { const EdsLib_DatabaseObject_t *GD; EdsLib_DataTypeDB_TypeInfo_t TypeInfo; @@ -254,8 +255,10 @@ CFE_Status_t CFE_EDSMSG_Dispatch_CheckActualBufferType(const CFE_SB_Buffer_t *Bu * Completely look up the data type from the supplied interface IDs * *-----------------------------------------------------------------*/ -CFE_Status_t CFE_EDSMSG_Dispatch_FindArgType(EdsLib_Id_t DeclIntfId, EdsLib_Id_t ParentIntfId, - const CFE_SB_Buffer_t *Buffer, uint32_t *DispatchPosition) +CFE_Status_t CFE_EDSMSG_Dispatch_FindArgType(EdsLib_Id_t DeclIntfId, + EdsLib_Id_t ParentIntfId, + const CFE_SB_Buffer_t *Buffer, + uint32_t *DispatchPosition) { CFE_Status_t ReturnCode; EdsLib_Id_t ArgType; @@ -281,15 +284,15 @@ CFE_Status_t CFE_EDSMSG_Dispatch_FindArgType(EdsLib_Id_t DeclIntfId, EdsLib_Id_t * Finds the matching handler function from the dispatch table * *-----------------------------------------------------------------*/ -CFE_EDSMSG_DispatchFunc_t CFE_EDSMSG_Dispatch_LookupHandler(const void *DispatchTable, size_t DispatchStartOffset, - uint32_t DispatchPosition) +CFE_EDSMSG_DispatchFunc_t +CFE_EDSMSG_Dispatch_LookupHandler(const void *DispatchTable, size_t DispatchStartOffset, uint32_t DispatchPosition) { const uint8 *MemAddr; const CFE_EDSMSG_DispatchFunc_t *DispatchTbl; /* calculate the address of the first handler routine for this intf * Note the START offsets are in bytes, so this must be done in uint8* logic */ - MemAddr = (const uint8 *)DispatchTable; + MemAddr = (const uint8 *)DispatchTable; MemAddr += DispatchStartOffset; /* now shift to the correct type (function pointer) and apply the position offset */ @@ -304,8 +307,10 @@ CFE_EDSMSG_DispatchFunc_t CFE_EDSMSG_Dispatch_LookupHandler(const void *Dispatch * Dispatch the message based on the IDs and dispatch table * *-----------------------------------------------------------------*/ -CFE_Status_t CFE_EDSMSG_Dispatch(EdsLib_Id_t DeclIntfId, EdsLib_Id_t ComponentId, const CFE_SB_Buffer_t *Buffer, - const void *DispatchTable) +CFE_Status_t CFE_EDSMSG_Dispatch(EdsLib_Id_t DeclIntfId, + EdsLib_Id_t ComponentId, + const CFE_SB_Buffer_t *Buffer, + const void *DispatchTable) { CFE_Status_t ReturnCode; CFE_MissionLib_TopicInfo_t TopicInfo; diff --git a/cfecfs/edsmsg/fsw/ut-stubs/edsmsg_dispatcher_stubs.c b/cfecfs/edsmsg/fsw/ut-stubs/edsmsg_dispatcher_stubs.c index 7d33a5a..6fcc838 100644 --- a/cfecfs/edsmsg/fsw/ut-stubs/edsmsg_dispatcher_stubs.c +++ b/cfecfs/edsmsg/fsw/ut-stubs/edsmsg_dispatcher_stubs.c @@ -32,8 +32,10 @@ * Generated stub function for CFE_EDSMSG_Dispatch() * ---------------------------------------------------- */ -CFE_Status_t CFE_EDSMSG_Dispatch(EdsLib_Id_t DeclIntfId, EdsLib_Id_t ComponentId, const CFE_SB_Buffer_t *Buffer, - const void *DispatchTable) +CFE_Status_t CFE_EDSMSG_Dispatch(EdsLib_Id_t DeclIntfId, + EdsLib_Id_t ComponentId, + const CFE_SB_Buffer_t *Buffer, + const void *DispatchTable) { UT_GenStub_SetupReturnBuffer(CFE_EDSMSG_Dispatch, CFE_Status_t); diff --git a/cfecfs/missionlib/fsw/inc/cfe_missionlib_api.h b/cfecfs/missionlib/fsw/inc/cfe_missionlib_api.h index 85f0939..85bee6f 100644 --- a/cfecfs/missionlib/fsw/inc/cfe_missionlib_api.h +++ b/cfecfs/missionlib/fsw/inc/cfe_missionlib_api.h @@ -139,8 +139,9 @@ extern "C" * @param[out] TopicInfo output buffer for detail information, if successful * @return CFE_MISSIONLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t CFE_MissionLib_GetTopicInfo(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, uint16_t TopicId, - CFE_MissionLib_TopicInfo_t *TopicInfo); + int32_t CFE_MissionLib_GetTopicInfo(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, + uint16_t TopicId, + CFE_MissionLib_TopicInfo_t *TopicInfo); /** * Get the instance name corresponding to an instance number @@ -196,7 +197,8 @@ extern "C" * @param[inout] OpaqueArg an argument that is passed to the callback, may be NULL if not needed */ void CFE_MissionLib_EnumerateTopics(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, - CFE_MissionLib_TopicInfo_Callback_t Callback, void *OpaqueArg); + CFE_MissionLib_TopicInfo_Callback_t Callback, + void *OpaqueArg); /** * Finds a topic ID matching the given interface ID @@ -210,7 +212,8 @@ extern "C" * @return CFE_MISSIONLIB_SUCCESS if successful, error code if unsuccessful */ int32_t CFE_MissionLib_FindTopicIdFromIntfId(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, - EdsLib_Id_t IntfEdsId, uint16_t *TopicIdBuffer); + EdsLib_Id_t IntfEdsId, + uint16_t *TopicIdBuffer); #ifdef __cplusplus } /* extern "C" */ diff --git a/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h b/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h index 5a6d231..b4aaf97 100644 --- a/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h +++ b/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h @@ -70,20 +70,20 @@ extern "C" #endif void CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, - const EdsComponent_CFE_SB_Listener_t * Input); - void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t * Output, + const EdsComponent_CFE_SB_Listener_t *Input); + void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input); void CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, - const EdsComponent_CFE_SB_Publisher_t * Input); - void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t * Output, + const EdsComponent_CFE_SB_Publisher_t *Input); + void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input); bool CFE_MissionLib_PubSub_IsListenerComponent(const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params); bool CFE_MissionLib_PubSub_IsPublisherComponent(const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params); void CFE_MissionLib_Get_PubSub_Parameters(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params, - const EdsDataType_CFE_HDR_Message_t * Packet); - void CFE_MissionLib_Set_PubSub_Parameters(EdsDataType_CFE_HDR_Message_t * Packet, + const EdsDataType_CFE_HDR_Message_t *Packet); + void CFE_MissionLib_Set_PubSub_Parameters(EdsDataType_CFE_HDR_Message_t *Packet, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params); #ifdef __cplusplus diff --git a/cfecfs/missionlib/fsw/src/cfe_missionlib_api.c b/cfecfs/missionlib/fsw/src/cfe_missionlib_api.c index 7be4a5e..e97313f 100644 --- a/cfecfs/missionlib/fsw/src/cfe_missionlib_api.c +++ b/cfecfs/missionlib/fsw/src/cfe_missionlib_api.c @@ -101,8 +101,9 @@ uint16_t CFE_MissionLib_GetNumInstances(const CFE_MissionLib_SoftwareBus_Interfa * Public API function * *-----------------------------------------------------------------*/ -int32_t CFE_MissionLib_GetTopicInfo(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, uint16_t TopicId, - CFE_MissionLib_TopicInfo_t *TopicInfo) +int32_t CFE_MissionLib_GetTopicInfo(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, + uint16_t TopicId, + CFE_MissionLib_TopicInfo_t *TopicInfo) { const CFE_MissionLib_TopicId_Entry_t *TopicPtr; int32_t Status; @@ -200,7 +201,8 @@ uint16_t CFE_MissionLib_GetInstanceNumber(const CFE_MissionLib_SoftwareBus_Inter * *-----------------------------------------------------------------*/ void CFE_MissionLib_EnumerateTopics(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, - CFE_MissionLib_TopicInfo_Callback_t Callback, void *OpaqueArg) + CFE_MissionLib_TopicInfo_Callback_t Callback, + void *OpaqueArg) { const CFE_MissionLib_TopicId_Entry_t *TopicPtr; uint16_t TopicId; @@ -218,8 +220,9 @@ void CFE_MissionLib_EnumerateTopics(const CFE_MissionLib_SoftwareBus_Interface_t * Public API function * *-----------------------------------------------------------------*/ -int32_t CFE_MissionLib_FindTopicIdFromIntfId(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, EdsLib_Id_t IntfEdsId, - uint16_t *TopicIdBuffer) +int32_t CFE_MissionLib_FindTopicIdFromIntfId(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, + EdsLib_Id_t IntfEdsId, + uint16_t *TopicIdBuffer) { const CFE_MissionLib_TopicId_Entry_t *TopicPtr; uint16_t TopicId; diff --git a/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c b/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c index 20f4afe..6a707c7 100644 --- a/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c +++ b/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c @@ -130,7 +130,8 @@ static const CFE_MissionLib_TopicId_Limits_t CFE_MISSIONLIB_GLOBAL_TLM_LIMITS = .TopicBase = EdsParam_CFE_MISSION_GLOBAL_TLM_BASE_TOPICID, .TopicMax = EdsParam_CFE_MISSION_GLOBAL_TLM_MAX_TOPICID, .InstanceBase = 0, - .InstanceMax = 1}; + .InstanceMax = 1 +}; static const CFE_MissionLib_TopicId_Limits_t CFE_MISSIONLIB_LOCAL_TLM_LIMITS = { .CheckBitsMask = (CFE_MISSIONLIB_MSGID_TYPE_MASK << CFE_MISSIONLIB_MSGID_TYPE_SHIFT), @@ -138,7 +139,8 @@ static const CFE_MissionLib_TopicId_Limits_t CFE_MISSIONLIB_LOCAL_TLM_LIMITS = { .TopicBase = EdsParam_CFE_MISSION_TELEMETRY_BASE_TOPICID, .TopicMax = EdsParam_CFE_MISSION_TELEMETRY_MAX_TOPICID, .InstanceBase = 1, - .InstanceMax = 1 + CFE_MISSIONLIB_MSGID_SUBSYS_MASK}; + .InstanceMax = 1 + CFE_MISSIONLIB_MSGID_SUBSYS_MASK +}; static const CFE_MissionLib_TopicId_Limits_t CFE_MISSIONLIB_GLOBAL_CMD_LIMITS = { .CheckBitsMask = @@ -148,7 +150,8 @@ static const CFE_MissionLib_TopicId_Limits_t CFE_MISSIONLIB_GLOBAL_CMD_LIMITS = .TopicBase = EdsParam_CFE_MISSION_GLOBAL_CMD_BASE_TOPICID, .TopicMax = EdsParam_CFE_MISSION_GLOBAL_CMD_MAX_TOPICID, .InstanceBase = 0, - .InstanceMax = 1}; + .InstanceMax = 1 +}; static const CFE_MissionLib_TopicId_Limits_t CFE_MISSIONLIB_LOCAL_CMD_LIMITS = { .CheckBitsMask = (CFE_MISSIONLIB_MSGID_TYPE_MASK << CFE_MISSIONLIB_MSGID_TYPE_SHIFT), @@ -156,7 +159,8 @@ static const CFE_MissionLib_TopicId_Limits_t CFE_MISSIONLIB_LOCAL_CMD_LIMITS = { .TopicBase = EdsParam_CFE_MISSION_TELECOMMAND_BASE_TOPICID, .TopicMax = EdsParam_CFE_MISSION_TELECOMMAND_MAX_TOPICID, .InstanceBase = 1, - .InstanceMax = 1 + CFE_MISSIONLIB_MSGID_SUBSYS_MASK}; + .InstanceMax = 1 + CFE_MISSIONLIB_MSGID_SUBSYS_MASK +}; static inline uint32_t CFE_MissionLib_GetMsgIdApid(const EdsDataType_CFE_SB_MsgId_t *MsgId) { @@ -206,7 +210,7 @@ static inline void CFE_MissionLib_SetMsgIdInterfaceType(EdsDataType_CFE_SB_MsgId * is not required to pack the bits this way, but the shifts/masks used above * will produce a MsgId bit pattern comparable to existing versions of CFE. */ -static inline void CFE_MissionLib_SpacePacketBasic_BitsToMsgId(EdsDataType_CFE_SB_MsgId_t * MsgId, +static inline void CFE_MissionLib_SpacePacketBasic_BitsToMsgId(EdsDataType_CFE_SB_MsgId_t *MsgId, const EdsDataType_CCSDS_SpacePacketBasic_t *Packet) { EdsDataType_CFE_SB_MsgId_t ApidPart; @@ -218,7 +222,7 @@ static inline void CFE_MissionLib_SpacePacketBasic_BitsToMsgId(EdsDataType_CFE_S } static inline void CFE_MissionLib_SpacePacketBasic_BitsFromMsgId(EdsDataType_CCSDS_SpacePacketBasic_t *Packet, - const EdsDataType_CFE_SB_MsgId_t * MsgId) + const EdsDataType_CFE_SB_MsgId_t *MsgId) { EdsDataType_CFE_SB_MsgId_t ApidPart; @@ -232,7 +236,7 @@ static inline void CFE_MissionLib_SpacePacketBasic_BitsFromMsgId(EdsDataType_CCS } /* The following translations apply only for V2 (ApidQ) headers */ -static inline void CFE_MissionLib_SpacePacketApidQ_BitsToMsgId(EdsDataType_CFE_SB_MsgId_t * MsgId, +static inline void CFE_MissionLib_SpacePacketApidQ_BitsToMsgId(EdsDataType_CFE_SB_MsgId_t *MsgId, const EdsDataType_CCSDS_SpacePacketApidQ_t *Packet) { CFE_MissionLib_SetMsgIdApid(MsgId, Packet->CommonHdr.AppId); @@ -242,7 +246,7 @@ static inline void CFE_MissionLib_SpacePacketApidQ_BitsToMsgId(EdsDataType_CFE_S } static inline void CFE_MissionLib_SpacePacketApidQ_BitsFromMsgId(EdsDataType_CCSDS_SpacePacketApidQ_t *Packet, - const EdsDataType_CFE_SB_MsgId_t * MsgId) + const EdsDataType_CFE_SB_MsgId_t *MsgId) { Packet->CommonHdr.VersionId = 1; Packet->CommonHdr.AppId = CFE_MissionLib_GetMsgIdApid(MsgId); @@ -252,11 +256,12 @@ static inline void CFE_MissionLib_SpacePacketApidQ_BitsFromMsgId(EdsDataType_CCS } static bool CFE_MissionLib_TryMapping(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, - const CFE_MissionLib_TopicId_Limits_t *Limits, uint16_t InstanceIdx, - uint16_t TopicIdx) + const CFE_MissionLib_TopicId_Limits_t *Limits, + uint16_t InstanceIdx, + uint16_t TopicIdx) { InstanceIdx -= Limits->InstanceBase; - TopicIdx -= Limits->TopicBase; + TopicIdx -= Limits->TopicBase; if (InstanceIdx >= Limits->InstanceMax || TopicIdx >= Limits->TopicMax) { @@ -272,8 +277,9 @@ static bool CFE_MissionLib_TryMapping(EdsInterface_CFE_SB_SoftwareBus_PubSub_t * return true; } -static bool CFE_MissionLib_TryUnmapping(uint16_t *InstanceIdOut, uint16_t *TopicIdOut, - const CFE_MissionLib_TopicId_Limits_t * Limits, +static bool CFE_MissionLib_TryUnmapping(uint16_t *InstanceIdOut, + uint16_t *TopicIdOut, + const CFE_MissionLib_TopicId_Limits_t *Limits, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { EdsDataType_CFE_SB_MsgId_t TempMsgId; @@ -284,7 +290,7 @@ static bool CFE_MissionLib_TryUnmapping(uint16_t *InstanceIdOut, uint16_t *Topic return false; } - TempMsgId = Input->MsgId; + TempMsgId = Input->MsgId; TempMsgId.Value ^= Limits->CheckBitsValue; *InstanceIdOut = CFE_MissionLib_GetMsgIdSubsystem(&TempMsgId) + Limits->InstanceBase; @@ -294,27 +300,33 @@ static bool CFE_MissionLib_TryUnmapping(uint16_t *InstanceIdOut, uint16_t *Topic } void CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, - const EdsComponent_CFE_SB_Listener_t * Input) + const EdsComponent_CFE_SB_Listener_t *Input) { memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, Input->Telecommand.InstanceNumber, + if (!CFE_MissionLib_TryMapping(Output, + &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, + Input->Telecommand.InstanceNumber, Input->Telecommand.TopicId)) { CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_GLOBAL_CMD_LIMITS, 0, Input->Telecommand.TopicId); } } -void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t * Output, +void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, &Output->Telecommand.TopicId, - &CFE_MISSIONLIB_GLOBAL_CMD_LIMITS, Input)) + if (!CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, + &Output->Telecommand.TopicId, + &CFE_MISSIONLIB_GLOBAL_CMD_LIMITS, + Input)) { - CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, &Output->Telecommand.TopicId, - &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, Input); + CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, + &Output->Telecommand.TopicId, + &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, + Input); } } @@ -324,27 +336,33 @@ bool CFE_MissionLib_PubSub_IsListenerComponent(const EdsInterface_CFE_SB_Softwar } void CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, - const EdsComponent_CFE_SB_Publisher_t * Input) + const EdsComponent_CFE_SB_Publisher_t *Input) { memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, Input->Telemetry.InstanceNumber, + if (!CFE_MissionLib_TryMapping(Output, + &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, + Input->Telemetry.InstanceNumber, Input->Telemetry.TopicId)) { CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_GLOBAL_TLM_LIMITS, 0, Input->Telemetry.TopicId); } } -void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t * Output, +void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, &Output->Telemetry.TopicId, - &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, Input)) + if (!CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, + &Output->Telemetry.TopicId, + &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, + Input)) { - CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, &Output->Telemetry.TopicId, - &CFE_MISSIONLIB_GLOBAL_TLM_LIMITS, Input); + CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, + &Output->Telemetry.TopicId, + &CFE_MISSIONLIB_GLOBAL_TLM_LIMITS, + Input); } } @@ -354,13 +372,13 @@ bool CFE_MissionLib_PubSub_IsPublisherComponent(const EdsInterface_CFE_SB_Softwa } void CFE_MissionLib_Get_PubSub_Parameters(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params, - const EdsDataType_CFE_HDR_Message_t * Packet) + const EdsDataType_CFE_HDR_Message_t *Packet) { memset(Params, 0, sizeof(*Params)); CFE_MISSIONLIB_GET_MSGID_BITS(EdsParam_CFE_MISSION_MSG_HEADER_TYPE, &Params->MsgId, &Packet->CCSDS); } -void CFE_MissionLib_Set_PubSub_Parameters(EdsDataType_CFE_HDR_Message_t * Packet, +void CFE_MissionLib_Set_PubSub_Parameters(EdsDataType_CFE_HDR_Message_t *Packet, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params) { CFE_MISSIONLIB_SET_MSGID_BITS(EdsParam_CFE_MISSION_MSG_HEADER_TYPE, &Packet->CCSDS, &Params->MsgId); diff --git a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_handlers.c b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_handlers.c index 8136b58..759aa6c 100644 --- a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_handlers.c +++ b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_handlers.c @@ -33,11 +33,14 @@ * Handler function for CFE_MissionLib_FindTopicByName() * ---------------------------------------------------- */ -void UT_DefaultHandler_CFE_MissionLib_FindTopicByName(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_FindTopicByName(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { - CFE_MissionLib_Stub_DefaultZeroOutput( - FuncKey, Context, UT_Hook_GetArgValueByName(Context, "TopicIdBuffer", uint16_t *), sizeof(uint16_t)); + CFE_MissionLib_Stub_DefaultZeroOutput(FuncKey, + Context, + UT_Hook_GetArgValueByName(Context, "TopicIdBuffer", uint16_t *), + sizeof(uint16_t)); } /* @@ -45,10 +48,12 @@ void UT_DefaultHandler_CFE_MissionLib_FindTopicByName(void *UserObj, UT_EntryKey * Handler function for CFE_MissionLib_GetTopicInfo() * ---------------------------------------------------- */ -void UT_DefaultHandler_CFE_MissionLib_GetTopicInfo(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_GetTopicInfo(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { - CFE_MissionLib_Stub_DefaultZeroOutput(FuncKey, Context, + CFE_MissionLib_Stub_DefaultZeroOutput(FuncKey, + Context, UT_Hook_GetArgValueByName(Context, "TopicInfo", CFE_MissionLib_TopicInfo_t *), sizeof(CFE_MissionLib_TopicInfo_t)); } @@ -58,11 +63,14 @@ void UT_DefaultHandler_CFE_MissionLib_GetTopicInfo(void *UserObj, UT_EntryKey_t * Handler function for CFE_MissionLib_FindTopicIdFromIntfId() * ---------------------------------------------------- */ -void UT_DefaultHandler_CFE_MissionLib_FindTopicIdFromIntfId(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_FindTopicIdFromIntfId(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { - CFE_MissionLib_Stub_DefaultZeroOutput( - FuncKey, Context, UT_Hook_GetArgValueByName(Context, "TopicIdBuffer", uint16_t *), sizeof(uint16_t)); + CFE_MissionLib_Stub_DefaultZeroOutput(FuncKey, + Context, + UT_Hook_GetArgValueByName(Context, "TopicIdBuffer", uint16_t *), + sizeof(uint16_t)); } /* @@ -70,7 +78,8 @@ void UT_DefaultHandler_CFE_MissionLib_FindTopicIdFromIntfId(void *UserObj, UT_En * Handler function for CFE_MissionLib_GetInstanceName() * ---------------------------------------------------- */ -void UT_DefaultHandler_CFE_MissionLib_GetInstanceName(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_GetInstanceName(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { CFE_MissionLib_Stub_DefaultStringOutput(FuncKey, Context); @@ -81,7 +90,8 @@ void UT_DefaultHandler_CFE_MissionLib_GetInstanceName(void *UserObj, UT_EntryKey * Handler function for CFE_MissionLib_GetInstanceNumber() * ---------------------------------------------------- */ -void UT_DefaultHandler_CFE_MissionLib_GetInstanceNumber(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_GetInstanceNumber(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { int32_t Status; @@ -97,7 +107,8 @@ void UT_DefaultHandler_CFE_MissionLib_GetInstanceNumber(void *UserObj, UT_EntryK * Handler function for CFE_MissionLib_GetTopicName() * ---------------------------------------------------- */ -void UT_DefaultHandler_CFE_MissionLib_GetTopicName(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_GetTopicName(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { CFE_MissionLib_Stub_DefaultStringOutput(FuncKey, Context); diff --git a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_stubs.c b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_stubs.c index 8d7d5e1..9fda64f 100644 --- a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_stubs.c +++ b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_api_stubs.c @@ -37,7 +37,8 @@ void UT_DefaultHandler_CFE_MissionLib_GetTopicInfo(void *, UT_EntryKey_t, const * ---------------------------------------------------- */ void CFE_MissionLib_EnumerateTopics(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, - CFE_MissionLib_TopicInfo_Callback_t Callback, void *OpaqueArg) + CFE_MissionLib_TopicInfo_Callback_t Callback, + void *OpaqueArg) { UT_GenStub_AddParam(CFE_MissionLib_EnumerateTopics, const CFE_MissionLib_SoftwareBus_Interface_t *, SBDB); UT_GenStub_AddParam(CFE_MissionLib_EnumerateTopics, CFE_MissionLib_TopicInfo_Callback_t, Callback); @@ -51,8 +52,9 @@ void CFE_MissionLib_EnumerateTopics(const CFE_MissionLib_SoftwareBus_Interface_t * Generated stub function for CFE_MissionLib_FindTopicIdFromIntfId() * ---------------------------------------------------- */ -int32_t CFE_MissionLib_FindTopicIdFromIntfId(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, EdsLib_Id_t IntfEdsId, - uint16_t *TopicIdBuffer) +int32_t CFE_MissionLib_FindTopicIdFromIntfId(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, + EdsLib_Id_t IntfEdsId, + uint16_t *TopicIdBuffer) { UT_GenStub_SetupReturnBuffer(CFE_MissionLib_FindTopicIdFromIntfId, int32_t); @@ -60,7 +62,8 @@ int32_t CFE_MissionLib_FindTopicIdFromIntfId(const CFE_MissionLib_SoftwareBus_In UT_GenStub_AddParam(CFE_MissionLib_FindTopicIdFromIntfId, EdsLib_Id_t, IntfEdsId); UT_GenStub_AddParam(CFE_MissionLib_FindTopicIdFromIntfId, uint16_t *, TopicIdBuffer); - UT_GenStub_Execute(CFE_MissionLib_FindTopicIdFromIntfId, Basic, + UT_GenStub_Execute(CFE_MissionLib_FindTopicIdFromIntfId, + Basic, UT_DefaultHandler_CFE_MissionLib_FindTopicIdFromIntfId); return UT_GenStub_GetReturnValue(CFE_MissionLib_FindTopicIdFromIntfId, int32_t); @@ -172,8 +175,9 @@ const EdsLib_DatabaseObject_t *CFE_MissionLib_GetParent(const CFE_MissionLib_Sof * Generated stub function for CFE_MissionLib_GetTopicInfo() * ---------------------------------------------------- */ -int32_t CFE_MissionLib_GetTopicInfo(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, uint16_t TopicId, - CFE_MissionLib_TopicInfo_t *TopicInfo) +int32_t CFE_MissionLib_GetTopicInfo(const CFE_MissionLib_SoftwareBus_Interface_t *SBDB, + uint16_t TopicId, + CFE_MissionLib_TopicInfo_t *TopicInfo) { UT_GenStub_SetupReturnBuffer(CFE_MissionLib_GetTopicInfo, int32_t); diff --git a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_handlers.c b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_handlers.c index fcfc707..861e82a 100644 --- a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_handlers.c +++ b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_handlers.c @@ -33,7 +33,8 @@ * Default handler for CFE_MissionLib_PubSub_IsListenerComponent coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_PubSub_IsListenerComponent(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_PubSub_IsListenerComponent(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { int32 status; @@ -50,7 +51,8 @@ void UT_DefaultHandler_CFE_MissionLib_PubSub_IsListenerComponent(void *UserObj, * Default handler for CFE_MissionLib_PubSub_IsPublisherComponent coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_PubSub_IsPublisherComponent(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_PubSub_IsPublisherComponent(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { int32 status; @@ -67,11 +69,14 @@ void UT_DefaultHandler_CFE_MissionLib_PubSub_IsPublisherComponent(void *UserObj, * Default handler for CFE_MissionLib_MapListenerComponent coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_MapListenerComponent(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_MapListenerComponent(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { CFE_MissionLib_Stub_DefaultZeroOutput( - FuncKey, Context, UT_Hook_GetArgValueByName(Context, "Output", EdsInterface_CFE_SB_SoftwareBus_PubSub_t *), + FuncKey, + Context, + UT_Hook_GetArgValueByName(Context, "Output", EdsInterface_CFE_SB_SoftwareBus_PubSub_t *), sizeof(EdsInterface_CFE_SB_SoftwareBus_PubSub_t)); } @@ -80,11 +85,14 @@ void UT_DefaultHandler_CFE_MissionLib_MapListenerComponent(void *UserObj, UT_Ent * Default handler for CFE_MissionLib_UnmapListenerComponent coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_UnmapListenerComponent(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_UnmapListenerComponent(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { CFE_MissionLib_Stub_DefaultZeroOutput( - FuncKey, Context, UT_Hook_GetArgValueByName(Context, "Output", EdsComponent_CFE_SB_Listener_t *), + FuncKey, + Context, + UT_Hook_GetArgValueByName(Context, "Output", EdsComponent_CFE_SB_Listener_t *), sizeof(EdsComponent_CFE_SB_Listener_t)); } @@ -93,11 +101,14 @@ void UT_DefaultHandler_CFE_MissionLib_UnmapListenerComponent(void *UserObj, UT_E * Default handler for CFE_MissionLib_MapPublisherComponent coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_MapPublisherComponent(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_MapPublisherComponent(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { CFE_MissionLib_Stub_DefaultZeroOutput( - FuncKey, Context, UT_Hook_GetArgValueByName(Context, "Output", EdsInterface_CFE_SB_SoftwareBus_PubSub_t *), + FuncKey, + Context, + UT_Hook_GetArgValueByName(Context, "Output", EdsInterface_CFE_SB_SoftwareBus_PubSub_t *), sizeof(EdsInterface_CFE_SB_SoftwareBus_PubSub_t)); } @@ -106,11 +117,14 @@ void UT_DefaultHandler_CFE_MissionLib_MapPublisherComponent(void *UserObj, UT_En * Default handler for CFE_MissionLib_UnmapPublisherComponent coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_UnmapPublisherComponent(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_UnmapPublisherComponent(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { CFE_MissionLib_Stub_DefaultZeroOutput( - FuncKey, Context, UT_Hook_GetArgValueByName(Context, "Output", EdsComponent_CFE_SB_Publisher_t *), + FuncKey, + Context, + UT_Hook_GetArgValueByName(Context, "Output", EdsComponent_CFE_SB_Publisher_t *), sizeof(EdsComponent_CFE_SB_Publisher_t)); } @@ -119,11 +133,14 @@ void UT_DefaultHandler_CFE_MissionLib_UnmapPublisherComponent(void *UserObj, UT_ * Default handler for CFE_MissionLib_Get_PubSub_Parameters coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_Get_PubSub_Parameters(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_Get_PubSub_Parameters(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { CFE_MissionLib_Stub_DefaultZeroOutput( - FuncKey, Context, UT_Hook_GetArgValueByName(Context, "Params", EdsInterface_CFE_SB_SoftwareBus_PubSub_t *), + FuncKey, + Context, + UT_Hook_GetArgValueByName(Context, "Params", EdsInterface_CFE_SB_SoftwareBus_PubSub_t *), sizeof(EdsInterface_CFE_SB_SoftwareBus_PubSub_t)); } @@ -132,10 +149,12 @@ void UT_DefaultHandler_CFE_MissionLib_Get_PubSub_Parameters(void *UserObj, UT_En * Default handler for CFE_MissionLib_Set_PubSub_Parameters coverage stub function * *------------------------------------------------------------*/ -void UT_DefaultHandler_CFE_MissionLib_Set_PubSub_Parameters(void *UserObj, UT_EntryKey_t FuncKey, +void UT_DefaultHandler_CFE_MissionLib_Set_PubSub_Parameters(void *UserObj, + UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { - CFE_MissionLib_Stub_DefaultZeroOutput(FuncKey, Context, + CFE_MissionLib_Stub_DefaultZeroOutput(FuncKey, + Context, UT_Hook_GetArgValueByName(Context, "Packet", EdsDataType_CFE_HDR_Message_t *), sizeof(EdsDataType_CFE_HDR_Message_t)); } diff --git a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c index 6e3255d..732f375 100644 --- a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c +++ b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c @@ -47,7 +47,8 @@ void CFE_MissionLib_Get_PubSub_Parameters(EdsInterface_CFE_SB_SoftwareBus_PubSub UT_GenStub_AddParam(CFE_MissionLib_Get_PubSub_Parameters, EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Params); UT_GenStub_AddParam(CFE_MissionLib_Get_PubSub_Parameters, const EdsDataType_CFE_HDR_Message_t *, Packet); - UT_GenStub_Execute(CFE_MissionLib_Get_PubSub_Parameters, Basic, + UT_GenStub_Execute(CFE_MissionLib_Get_PubSub_Parameters, + Basic, UT_DefaultHandler_CFE_MissionLib_Get_PubSub_Parameters); } @@ -62,7 +63,8 @@ void CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_ UT_GenStub_AddParam(CFE_MissionLib_MapListenerComponent, EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Output); UT_GenStub_AddParam(CFE_MissionLib_MapListenerComponent, const EdsComponent_CFE_SB_Listener_t *, Input); - UT_GenStub_Execute(CFE_MissionLib_MapListenerComponent, Basic, + UT_GenStub_Execute(CFE_MissionLib_MapListenerComponent, + Basic, UT_DefaultHandler_CFE_MissionLib_MapListenerComponent); } @@ -77,7 +79,8 @@ void CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub UT_GenStub_AddParam(CFE_MissionLib_MapPublisherComponent, EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Output); UT_GenStub_AddParam(CFE_MissionLib_MapPublisherComponent, const EdsComponent_CFE_SB_Publisher_t *, Input); - UT_GenStub_Execute(CFE_MissionLib_MapPublisherComponent, Basic, + UT_GenStub_Execute(CFE_MissionLib_MapPublisherComponent, + Basic, UT_DefaultHandler_CFE_MissionLib_MapPublisherComponent); } @@ -90,10 +93,12 @@ bool CFE_MissionLib_PubSub_IsListenerComponent(const EdsInterface_CFE_SB_Softwar { UT_GenStub_SetupReturnBuffer(CFE_MissionLib_PubSub_IsListenerComponent, bool); - UT_GenStub_AddParam(CFE_MissionLib_PubSub_IsListenerComponent, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, + UT_GenStub_AddParam(CFE_MissionLib_PubSub_IsListenerComponent, + const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Params); - UT_GenStub_Execute(CFE_MissionLib_PubSub_IsListenerComponent, Basic, + UT_GenStub_Execute(CFE_MissionLib_PubSub_IsListenerComponent, + Basic, UT_DefaultHandler_CFE_MissionLib_PubSub_IsListenerComponent); return UT_GenStub_GetReturnValue(CFE_MissionLib_PubSub_IsListenerComponent, bool); @@ -108,10 +113,12 @@ bool CFE_MissionLib_PubSub_IsPublisherComponent(const EdsInterface_CFE_SB_Softwa { UT_GenStub_SetupReturnBuffer(CFE_MissionLib_PubSub_IsPublisherComponent, bool); - UT_GenStub_AddParam(CFE_MissionLib_PubSub_IsPublisherComponent, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, + UT_GenStub_AddParam(CFE_MissionLib_PubSub_IsPublisherComponent, + const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Params); - UT_GenStub_Execute(CFE_MissionLib_PubSub_IsPublisherComponent, Basic, + UT_GenStub_Execute(CFE_MissionLib_PubSub_IsPublisherComponent, + Basic, UT_DefaultHandler_CFE_MissionLib_PubSub_IsPublisherComponent); return UT_GenStub_GetReturnValue(CFE_MissionLib_PubSub_IsPublisherComponent, bool); @@ -128,7 +135,8 @@ void CFE_MissionLib_Set_PubSub_Parameters(EdsDataType_CFE_HDR_Message_t UT_GenStub_AddParam(CFE_MissionLib_Set_PubSub_Parameters, EdsDataType_CFE_HDR_Message_t *, Packet); UT_GenStub_AddParam(CFE_MissionLib_Set_PubSub_Parameters, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Params); - UT_GenStub_Execute(CFE_MissionLib_Set_PubSub_Parameters, Basic, + UT_GenStub_Execute(CFE_MissionLib_Set_PubSub_Parameters, + Basic, UT_DefaultHandler_CFE_MissionLib_Set_PubSub_Parameters); } @@ -143,7 +151,8 @@ void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t UT_GenStub_AddParam(CFE_MissionLib_UnmapListenerComponent, EdsComponent_CFE_SB_Listener_t *, Output); UT_GenStub_AddParam(CFE_MissionLib_UnmapListenerComponent, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Input); - UT_GenStub_Execute(CFE_MissionLib_UnmapListenerComponent, Basic, + UT_GenStub_Execute(CFE_MissionLib_UnmapListenerComponent, + Basic, UT_DefaultHandler_CFE_MissionLib_UnmapListenerComponent); } @@ -156,9 +165,11 @@ void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { UT_GenStub_AddParam(CFE_MissionLib_UnmapPublisherComponent, EdsComponent_CFE_SB_Publisher_t *, Output); - UT_GenStub_AddParam(CFE_MissionLib_UnmapPublisherComponent, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, + UT_GenStub_AddParam(CFE_MissionLib_UnmapPublisherComponent, + const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Input); - UT_GenStub_Execute(CFE_MissionLib_UnmapPublisherComponent, Basic, + UT_GenStub_Execute(CFE_MissionLib_UnmapPublisherComponent, + Basic, UT_DefaultHandler_CFE_MissionLib_UnmapPublisherComponent); } diff --git a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.c b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.c index 96f461c..0c96955 100644 --- a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.c +++ b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.c @@ -27,8 +27,10 @@ #include "utstubs.h" #include "utassert.h" -void CFE_MissionLib_Stub_DefaultZeroOutput(UT_EntryKey_t FuncKey, const UT_StubContext_t *Context, void *OutputBuffer, - size_t OutputSize) +void CFE_MissionLib_Stub_DefaultZeroOutput(UT_EntryKey_t FuncKey, + const UT_StubContext_t *Context, + void *OutputBuffer, + size_t OutputSize) { int32_t Status; @@ -46,8 +48,8 @@ void CFE_MissionLib_Stub_DefaultZeroOutput(UT_EntryKey_t FuncKey, const UT_StubC void CFE_MissionLib_Stub_DefaultStringOutput(UT_EntryKey_t FuncKey, const UT_StubContext_t *Context) { int32_t Status; - void * DataBuffer; - const char * Result; + void *DataBuffer; + const char *Result; static const char DEFAULT_OUTPUT[] = "UT"; UT_Stub_GetInt32StatusCode(Context, &Status); diff --git a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.h b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.h index cf80734..5305d3e 100644 --- a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.h +++ b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_stub_helpers.h @@ -29,8 +29,10 @@ #include "utstubs.h" #include "utassert.h" -void CFE_MissionLib_Stub_DefaultZeroOutput(UT_EntryKey_t FuncKey, const UT_StubContext_t *Context, void *OutputBuffer, - size_t OutputSize); +void CFE_MissionLib_Stub_DefaultZeroOutput(UT_EntryKey_t FuncKey, + const UT_StubContext_t *Context, + void *OutputBuffer, + size_t OutputSize); void CFE_MissionLib_Stub_DefaultStringOutput(UT_EntryKey_t FuncKey, const UT_StubContext_t *Context); #endif /* CFE_MISSIONLIB_STUB_HELPERS_H */ diff --git a/cfecfs/missionlib/lua/inc/cfe_missionlib_lua_softwarebus.h b/cfecfs/missionlib/lua/inc/cfe_missionlib_lua_softwarebus.h index 3edded8..66d1091 100644 --- a/cfecfs/missionlib/lua/inc/cfe_missionlib_lua_softwarebus.h +++ b/cfecfs/missionlib/lua/inc/cfe_missionlib_lua_softwarebus.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file cfe_missionlib_lua_softwarebus.h * \ingroup lua @@ -29,7 +28,6 @@ #ifndef _CFE_MISSIONLIB_LUA_SOFTWAREBUS_H_ #define _CFE_MISSIONLIB_LUA_SOFTWAREBUS_H_ - #include #include "cfe_missionlib_api.h" #include "cfe_sb_eds_datatypes.h" @@ -37,19 +35,20 @@ typedef struct { const CFE_MissionLib_SoftwareBus_Interface_t *IntfDB; - bool IsTelecommand; - bool IsTelemetry; - uint16_t InstanceNumber; - uint16_t TopicId; - EdsLib_Id_t IntfEdsId; - EdsLib_Id_t IndicationEdsId; - EdsLib_Id_t IndicationBaseArg; + bool IsTelecommand; + bool IsTelemetry; + uint16_t InstanceNumber; + uint16_t TopicId; + EdsLib_Id_t IntfEdsId; + EdsLib_Id_t IndicationEdsId; + EdsLib_Id_t IndicationBaseArg; } CFE_MissionLib_Lua_Interface_Userdata_t; - void CFE_MissionLib_Lua_SoftwareBus_Attach(lua_State *lua, const CFE_MissionLib_SoftwareBus_Interface_t *IntfDB); -void CFE_MissionLib_Lua_MapPubSubParams(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub, const CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj); -void CFE_MissionLib_Lua_UnmapPubSubParams(CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub); +void CFE_MissionLib_Lua_MapPubSubParams(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub, + const CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj); +void CFE_MissionLib_Lua_UnmapPubSubParams(CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj, + const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub); -#endif /* _CFE_MISSIONLIB_LUA_SOFTWAREBUS_H_ */ +#endif /* _CFE_MISSIONLIB_LUA_SOFTWAREBUS_H_ */ diff --git a/cfecfs/missionlib/lua/src/cfe_missionlib_lua_softwarebus.c b/cfecfs/missionlib/lua/src/cfe_missionlib_lua_softwarebus.c index 68fb136..35f3169 100644 --- a/cfecfs/missionlib/lua/src/cfe_missionlib_lua_softwarebus.c +++ b/cfecfs/missionlib/lua/src/cfe_missionlib_lua_softwarebus.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file cfe_missionlib_lua_softwarebus.c * \ingroup lua @@ -52,23 +51,26 @@ static const char CFE_MISSIONLIB_INTFDB_KEY; -static const EdsLib_Id_t CFE_SB_TELECOMMAND_INTF_ID = EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsInterface_CFE_SB_Telecommand_DECLARATION); -static const EdsLib_Id_t CFE_SB_TELEMETRY_INTF_ID = EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsInterface_CFE_SB_Telemetry_DECLARATION); +static const EdsLib_Id_t CFE_SB_TELECOMMAND_INTF_ID = + EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsInterface_CFE_SB_Telecommand_DECLARATION); +static const EdsLib_Id_t CFE_SB_TELEMETRY_INTF_ID = + EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsInterface_CFE_SB_Telemetry_DECLARATION); -void CFE_MissionLib_Lua_MapPubSubParams(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub, const CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj) +void CFE_MissionLib_Lua_MapPubSubParams(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub, + const CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj) { if (IntfObj->IsTelecommand) { EdsComponent_CFE_SB_Listener_t Params; Params.Telecommand.InstanceNumber = IntfObj->InstanceNumber; - Params.Telecommand.TopicId = IntfObj->TopicId; + Params.Telecommand.TopicId = IntfObj->TopicId; CFE_MissionLib_MapListenerComponent(PubSub, &Params); } else if (IntfObj->IsTelemetry) { EdsComponent_CFE_SB_Publisher_t Params; Params.Telemetry.InstanceNumber = IntfObj->InstanceNumber; - Params.Telemetry.TopicId = IntfObj->TopicId; + Params.Telemetry.TopicId = IntfObj->TopicId; CFE_MissionLib_MapPublisherComponent(PubSub, &Params); } else @@ -77,25 +79,26 @@ void CFE_MissionLib_Lua_MapPubSubParams(EdsInterface_CFE_SB_SoftwareBus_PubSub_t } } -void CFE_MissionLib_Lua_UnmapPubSubParams(CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub) +void CFE_MissionLib_Lua_UnmapPubSubParams(CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj, + const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *PubSub) { if (IntfObj->IsTelecommand) { EdsComponent_CFE_SB_Listener_t Result; CFE_MissionLib_UnmapListenerComponent(&Result, PubSub); - IntfObj->TopicId = Result.Telecommand.TopicId; + IntfObj->TopicId = Result.Telecommand.TopicId; IntfObj->InstanceNumber = Result.Telecommand.InstanceNumber; } else if (IntfObj->IsTelemetry) { EdsComponent_CFE_SB_Publisher_t Result; CFE_MissionLib_UnmapPublisherComponent(&Result, PubSub); - IntfObj->TopicId = Result.Telemetry.TopicId; + IntfObj->TopicId = Result.Telemetry.TopicId; IntfObj->InstanceNumber = Result.Telemetry.InstanceNumber; } else { - IntfObj->TopicId = 0; + IntfObj->TopicId = 0; IntfObj->InstanceNumber = 0; } } @@ -105,7 +108,7 @@ CFE_MissionLib_Lua_Interface_Userdata_t *CFE_MissionLib_Lua_NewInterfaceObject(l CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj; IntfObj = lua_newuserdata(lua, sizeof(*IntfObj)); - memset(IntfObj,0,sizeof(*IntfObj)); + memset(IntfObj, 0, sizeof(*IntfObj)); /* * Set metatable for the new object @@ -123,12 +126,12 @@ CFE_MissionLib_Lua_Interface_Userdata_t *CFE_MissionLib_Lua_NewInterfaceObject(l static int CFE_MissionLib_Lua_GetInterface(lua_State *lua) { - const char *DestName = luaL_checkstring(lua, 1); - const char *IndicationName = luaL_optstring(lua, 3, "indication"); + const char *DestName = luaL_checkstring(lua, 1); + const char *IndicationName = luaL_optstring(lua, 3, "indication"); CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj; - const EdsLib_DatabaseObject_t *GD; - EdsLib_IntfDB_InterfaceInfo_t IntfInfo; - int32_t Status; + const EdsLib_DatabaseObject_t *GD; + EdsLib_IntfDB_InterfaceInfo_t IntfInfo; + int32_t Status; lua_settop(lua, 3); @@ -147,7 +150,7 @@ static int CFE_MissionLib_Lua_GetInterface(lua_State *lua) IntfObj->InstanceNumber = 1; } - GD = CFE_MissionLib_GetParent(IntfObj->IntfDB); + GD = CFE_MissionLib_GetParent(IntfObj->IntfDB); Status = EdsLib_IntfDB_FindComponentInterfaceByFullName(GD, DestName, &IntfObj->IntfEdsId); if (Status != EDSLIB_SUCCESS) { @@ -168,16 +171,21 @@ static int CFE_MissionLib_Lua_GetInterface(lua_State *lua) } IntfObj->IsTelecommand = EdsLib_Is_Similar(IntfInfo.IntfTypeEdsId, CFE_SB_TELECOMMAND_INTF_ID); - IntfObj->IsTelemetry = EdsLib_Is_Similar(IntfInfo.IntfTypeEdsId, CFE_SB_TELEMETRY_INTF_ID); + IntfObj->IsTelemetry = EdsLib_Is_Similar(IntfInfo.IntfTypeEdsId, CFE_SB_TELEMETRY_INTF_ID); - Status = EdsLib_IntfDB_FindCommandByLocalName(GD, IntfInfo.IntfTypeEdsId, IndicationName, &IntfObj->IndicationEdsId); + Status = + EdsLib_IntfDB_FindCommandByLocalName(GD, IntfInfo.IntfTypeEdsId, IndicationName, &IntfObj->IndicationEdsId); if (Status != EDSLIB_SUCCESS) { return 0; } /* Now we can finally determine the argument type */ - Status = EdsLib_IntfDB_FindAllArgumentTypes(GD, IntfObj->IndicationEdsId, IntfObj->IntfEdsId, &IntfObj->IndicationBaseArg, 1); + Status = EdsLib_IntfDB_FindAllArgumentTypes(GD, + IntfObj->IndicationEdsId, + IntfObj->IntfEdsId, + &IntfObj->IndicationBaseArg, + 1); if (Status != EDSLIB_SUCCESS) { return 0; @@ -188,13 +196,12 @@ static int CFE_MissionLib_Lua_GetInterface(lua_State *lua) static int CFE_MissionLib_Lua_InterfaceObjectGetProperty(lua_State *lua) { - CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj = - luaL_checkudata(lua, 1, "CFE_MissionLib_Lua_Interface"); - EdsLib_IntfDB_InterfaceInfo_t IntfInfo; - int32_t Status; - const char *Str; - char StringBuffer[256]; - int retval = 0; + CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj = luaL_checkudata(lua, 1, "CFE_MissionLib_Lua_Interface"); + EdsLib_IntfDB_InterfaceInfo_t IntfInfo; + int32_t Status; + const char *Str; + char StringBuffer[256]; + int retval = 0; if (lua_type(lua, 2) == LUA_TSTRING) { @@ -223,10 +230,15 @@ static int CFE_MissionLib_Lua_InterfaceObjectGetProperty(lua_State *lua) else if (strcmp(PropName, "IntfName") == 0) { /* This is really the interface type name */ - Status = EdsLib_IntfDB_GetComponentInterfaceInfo(CFE_MissionLib_GetParent(IntfObj->IntfDB), IntfObj->IntfEdsId, &IntfInfo); + Status = EdsLib_IntfDB_GetComponentInterfaceInfo(CFE_MissionLib_GetParent(IntfObj->IntfDB), + IntfObj->IntfEdsId, + &IntfInfo); if (Status == EDSLIB_SUCCESS) { - Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), IntfInfo.IntfTypeEdsId, StringBuffer, sizeof(StringBuffer)); + Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), + IntfInfo.IntfTypeEdsId, + StringBuffer, + sizeof(StringBuffer)); } if (Status == EDSLIB_SUCCESS) @@ -237,7 +249,10 @@ static int CFE_MissionLib_Lua_InterfaceObjectGetProperty(lua_State *lua) } else if (strcmp(PropName, "TopicName") == 0) { - Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), IntfObj->IntfEdsId, StringBuffer, sizeof(StringBuffer)); + Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), + IntfObj->IntfEdsId, + StringBuffer, + sizeof(StringBuffer)); if (Status == EDSLIB_SUCCESS) { lua_pushstring(lua, StringBuffer); @@ -246,7 +261,10 @@ static int CFE_MissionLib_Lua_InterfaceObjectGetProperty(lua_State *lua) } else if (strcmp(PropName, "IndicationName") == 0) { - Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), IntfObj->IndicationEdsId, StringBuffer, sizeof(StringBuffer)); + Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), + IntfObj->IndicationEdsId, + StringBuffer, + sizeof(StringBuffer)); if (Status == EDSLIB_SUCCESS) { lua_pushstring(lua, StringBuffer); @@ -276,20 +294,16 @@ static int CFE_MissionLib_Lua_InterfaceObjectGetProperty(lua_State *lua) static int CFE_MissionLib_Lua_InterfaceObjectEqual(lua_State *lua) { - CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj1 = - luaL_testudata(lua, 1, "CFE_MissionLib_Lua_Interface"); - CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj2 = - luaL_testudata(lua, 2, "CFE_MissionLib_Lua_Interface"); + CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj1 = luaL_testudata(lua, 1, "CFE_MissionLib_Lua_Interface"); + CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj2 = luaL_testudata(lua, 2, "CFE_MissionLib_Lua_Interface"); if (IntfObj1 == NULL || IntfObj2 == NULL) { lua_pushboolean(lua, 0); } - else if (IntfObj1->IntfDB != IntfObj2->IntfDB || - EdsLib_Is_Match(IntfObj1->IntfEdsId, IntfObj2->IntfEdsId) || - EdsLib_Is_Match(IntfObj1->IndicationEdsId, IntfObj2->IndicationEdsId) || - IntfObj1->TopicId != IntfObj2->TopicId || - IntfObj1->InstanceNumber != IntfObj2->InstanceNumber) + else if (IntfObj1->IntfDB != IntfObj2->IntfDB || EdsLib_Is_Match(IntfObj1->IntfEdsId, IntfObj2->IntfEdsId) + || EdsLib_Is_Match(IntfObj1->IndicationEdsId, IntfObj2->IndicationEdsId) + || IntfObj1->TopicId != IntfObj2->TopicId || IntfObj1->InstanceNumber != IntfObj2->InstanceNumber) { lua_pushboolean(lua, 0); } @@ -303,11 +317,10 @@ static int CFE_MissionLib_Lua_InterfaceObjectEqual(lua_State *lua) static int CFE_MissionLib_Lua_InterfaceObjectToString(lua_State *lua) { - char StringBuffer[128]; - const char *Str; - int32_t Status; - CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj = - luaL_checkudata(lua, 1, "CFE_MissionLib_Lua_Interface"); + char StringBuffer[128]; + const char *Str; + int32_t Status; + CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj = luaL_checkudata(lua, 1, "CFE_MissionLib_Lua_Interface"); int top_start = lua_gettop(lua); int top_end; @@ -325,7 +338,10 @@ static int CFE_MissionLib_Lua_InterfaceObjectToString(lua_State *lua) lua_pushstring(lua, ":"); } - Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), IntfObj->IntfEdsId, StringBuffer, sizeof(StringBuffer)); + Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->IntfDB), + IntfObj->IntfEdsId, + StringBuffer, + sizeof(StringBuffer)); if (Status == EDSLIB_SUCCESS) { lua_pushstring(lua, StringBuffer); @@ -351,18 +367,17 @@ static int CFE_MissionLib_Lua_InterfaceObjectToString(lua_State *lua) return 1; } - static int CFE_MissionLib_Lua_NewMessage(lua_State *lua) { - const EdsLib_Lua_Database_Userdata_t *DbObj = lua_touserdata(lua, lua_upvalueindex(1)); + const EdsLib_Lua_Database_Userdata_t *DbObj = lua_touserdata(lua, lua_upvalueindex(1)); const CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj = luaL_checkudata(lua, 1, "CFE_MissionLib_Lua_Interface"); - const char *CommandName = luaL_optstring(lua, 2, NULL); - EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - EdsLib_LuaBinding_DescriptorObject_t *ObjectUserData; - EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; - EdsLib_Id_t PossibleId; - uint16_t DerivIdx; - int32_t Status; + const char *CommandName = luaL_optstring(lua, 2, NULL); + EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; + EdsLib_LuaBinding_DescriptorObject_t *ObjectUserData; + EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; + EdsLib_Id_t PossibleId; + uint16_t DerivIdx; + int32_t Status; Status = EdsLib_DataTypeDB_GetDerivedInfo(DbObj->GD, IntfObj->IndicationBaseArg, &DerivInfo); if (Status != EDSLIB_SUCCESS) @@ -371,8 +386,8 @@ static int CFE_MissionLib_Lua_NewMessage(lua_State *lua) return 0; } - ObjectUserData = EdsLib_LuaBinding_CreateEmptyObject(lua, DerivInfo.MaxSize.Bytes); - ObjectUserData->GD = DbObj->GD; + ObjectUserData = EdsLib_LuaBinding_CreateEmptyObject(lua, DerivInfo.MaxSize.Bytes); + ObjectUserData->GD = DbObj->GD; ObjectUserData->EdsId = IntfObj->IndicationBaseArg; /* @@ -390,8 +405,9 @@ static int CFE_MissionLib_Lua_NewMessage(lua_State *lua) break; } - if (EdsLib_DataTypeDB_GetDerivedTypeById(DbObj->GD, IntfObj->IndicationBaseArg, DerivIdx, &PossibleId) == EDSLIB_SUCCESS && - strcmp(EdsLib_DisplayDB_GetBaseName(DbObj->GD, PossibleId), CommandName) == 0) + if (EdsLib_DataTypeDB_GetDerivedTypeById(DbObj->GD, IntfObj->IndicationBaseArg, DerivIdx, &PossibleId) + == EDSLIB_SUCCESS + && strcmp(EdsLib_DisplayDB_GetBaseName(DbObj->GD, PossibleId), CommandName) == 0) { ObjectUserData->EdsId = PossibleId; break; @@ -412,23 +428,23 @@ static int CFE_MissionLib_Lua_NewMessage(lua_State *lua) static int CFE_MissionLib_Lua_IdentifyMessage(lua_State *lua) { - const EdsLib_Lua_Database_Userdata_t *DbObj = lua_touserdata(lua, lua_upvalueindex(1)); - const uint8_t *SourceBuffer = (const uint8_t*)luaL_checkstring(lua, 1); - uint32_t SourceBufferSize = lua_rawlen(lua, 1); - const char *IndicationName = luaL_optstring(lua, 2, "indication"); - EdsLib_Binding_DescriptorObject_t *ObjectUserData; + const EdsLib_Lua_Database_Userdata_t *DbObj = lua_touserdata(lua, lua_upvalueindex(1)); + const uint8_t *SourceBuffer = (const uint8_t *)luaL_checkstring(lua, 1); + uint32_t SourceBufferSize = lua_rawlen(lua, 1); + const char *IndicationName = luaL_optstring(lua, 2, "indication"); + EdsLib_Binding_DescriptorObject_t *ObjectUserData; CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj; EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; - EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - EdsLib_IntfDB_InterfaceInfo_t IntfInfo; - EdsLib_SizeInfo_t MaxSize; - EdsLib_SizeInfo_t DecodeSize; - CFE_MissionLib_TopicInfo_t TopicInfo; - const EdsLib_DatabaseObject_t *GD; - EdsLib_Id_t EdsId; - int32_t Status; - - EdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_Message_DATADICTIONARY); + EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; + EdsLib_IntfDB_InterfaceInfo_t IntfInfo; + EdsLib_SizeInfo_t MaxSize; + EdsLib_SizeInfo_t DecodeSize; + CFE_MissionLib_TopicInfo_t TopicInfo; + const EdsLib_DatabaseObject_t *GD; + EdsLib_Id_t EdsId; + int32_t Status; + + EdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_Message_DATADICTIONARY); Status = EdsLib_DataTypeDB_GetDerivedInfo(DbObj->GD, EdsId, &DerivInfo); if (Status != EDSLIB_SUCCESS) { @@ -437,15 +453,19 @@ static int CFE_MissionLib_Lua_IdentifyMessage(lua_State *lua) memset(&DecodeSize, 0, sizeof(DecodeSize)); - ObjectUserData = EdsLib_LuaBinding_CreateEmptyObject(lua, DerivInfo.MaxSize.Bytes); - ObjectUserData->GD = DbObj->GD; + ObjectUserData = EdsLib_LuaBinding_CreateEmptyObject(lua, DerivInfo.MaxSize.Bytes); + ObjectUserData->GD = DbObj->GD; ObjectUserData->EdsId = EdsId; MaxSize.Bytes = DerivInfo.MaxSize.Bytes; - MaxSize.Bits = EdsLib_OCTETS_TO_BITS(SourceBufferSize); - - Status = EdsLib_DataTypeDB_UnpackPartialObjectVarSize(DbObj->GD, &EdsId, EdsLib_Binding_GetNativeObject(ObjectUserData), - SourceBuffer, &MaxSize, &DecodeSize); + MaxSize.Bits = EdsLib_OCTETS_TO_BITS(SourceBufferSize); + + Status = EdsLib_DataTypeDB_UnpackPartialObjectVarSize(DbObj->GD, + &EdsId, + EdsLib_Binding_GetNativeObject(ObjectUserData), + SourceBuffer, + &MaxSize, + &DecodeSize); if (Status != EDSLIB_SUCCESS) { return 0; @@ -455,24 +475,24 @@ static int CFE_MissionLib_Lua_IdentifyMessage(lua_State *lua) CFE_MissionLib_Get_PubSub_Parameters(&PubSub, EdsLib_Binding_GetNativeObject(ObjectUserData)); IntfObj = CFE_MissionLib_Lua_NewInterfaceObject(lua, lua_upvalueindex(1)); - GD = CFE_MissionLib_GetParent(IntfObj->IntfDB); + GD = CFE_MissionLib_GetParent(IntfObj->IntfDB); /* It is not clear if this is a TLM or CMD, so need to try both, only one will work */ if (IntfObj->TopicId == 0) { EdsComponent_CFE_SB_Listener_t Result; CFE_MissionLib_UnmapListenerComponent(&Result, &PubSub); - IntfObj->TopicId = Result.Telecommand.TopicId; + IntfObj->TopicId = Result.Telecommand.TopicId; IntfObj->InstanceNumber = Result.Telecommand.InstanceNumber; - IntfObj->IsTelecommand = true; + IntfObj->IsTelecommand = true; } if (IntfObj->TopicId == 0) { EdsComponent_CFE_SB_Publisher_t Result; CFE_MissionLib_UnmapPublisherComponent(&Result, &PubSub); - IntfObj->TopicId = Result.Telemetry.TopicId; + IntfObj->TopicId = Result.Telemetry.TopicId; IntfObj->InstanceNumber = Result.Telemetry.InstanceNumber; - IntfObj->IsTelemetry = true; + IntfObj->IsTelemetry = true; } Status = CFE_MissionLib_GetTopicInfo(IntfObj->IntfDB, IntfObj->TopicId, &TopicInfo); @@ -490,30 +510,43 @@ static int CFE_MissionLib_Lua_IdentifyMessage(lua_State *lua) return 0; } - Status = EdsLib_IntfDB_FindCommandByLocalName(GD, IntfInfo.IntfTypeEdsId, IndicationName, &IntfObj->IndicationEdsId); + Status = + EdsLib_IntfDB_FindCommandByLocalName(GD, IntfInfo.IntfTypeEdsId, IndicationName, &IntfObj->IndicationEdsId); if (Status != EDSLIB_SUCCESS) { return 0; } /* Now we can finally determine the argument type */ - Status = EdsLib_IntfDB_FindAllArgumentTypes(GD, IntfObj->IndicationEdsId, IntfObj->IntfEdsId, &IntfObj->IndicationBaseArg, 1); + Status = EdsLib_IntfDB_FindAllArgumentTypes(GD, + IntfObj->IndicationEdsId, + IntfObj->IntfEdsId, + &IntfObj->IndicationBaseArg, + 1); if (Status != EDSLIB_SUCCESS) { return 0; } /* Beyond this, the IntfObj is considered OK so return 1 */ - EdsId = IntfObj->IndicationBaseArg; - Status = EdsLib_DataTypeDB_UnpackPartialObjectVarSize(DbObj->GD, &EdsId, EdsLib_Binding_GetNativeObject(ObjectUserData), - SourceBuffer, &MaxSize, &DecodeSize); + EdsId = IntfObj->IndicationBaseArg; + Status = EdsLib_DataTypeDB_UnpackPartialObjectVarSize(DbObj->GD, + &EdsId, + EdsLib_Binding_GetNativeObject(ObjectUserData), + SourceBuffer, + &MaxSize, + &DecodeSize); if (Status != EDSLIB_SUCCESS) { return 1; } - Status = EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(DbObj->GD, EdsId, EdsLib_Binding_GetNativeObject(ObjectUserData), - SourceBuffer, EDSLIB_DATATYPEDB_RECOMPUTE_NONE, &DecodeSize); + Status = EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(DbObj->GD, + EdsId, + EdsLib_Binding_GetNativeObject(ObjectUserData), + SourceBuffer, + EDSLIB_DATATYPEDB_RECOMPUTE_NONE, + &DecodeSize); if (Status == EDSLIB_SUCCESS) { return 1; @@ -527,7 +560,7 @@ static int CFE_MissionLib_Lua_IdentifyMessage(lua_State *lua) void CFE_MissionLib_Lua_SoftwareBus_Attach(lua_State *lua, const CFE_MissionLib_SoftwareBus_Interface_t *IntfDB) { - int Obj = lua_gettop(lua); + int Obj = lua_gettop(lua); EdsLib_Lua_Database_Userdata_t *DbObj = luaL_checkudata(lua, Obj, "EdsDb"); if (DbObj->GD == NULL) { @@ -537,7 +570,7 @@ void CFE_MissionLib_Lua_SoftwareBus_Attach(lua_State *lua, const CFE_MissionLib_ lua_getuservalue(lua, -1); - lua_pushlightuserdata(lua, (void*)IntfDB); + lua_pushlightuserdata(lua, (void *)IntfDB); lua_rawsetp(lua, -2, &CFE_MISSIONLIB_INTFDB_KEY); lua_pushvalue(lua, Obj); @@ -552,7 +585,6 @@ void CFE_MissionLib_Lua_SoftwareBus_Attach(lua_State *lua, const CFE_MissionLib_ lua_pushcclosure(lua, CFE_MissionLib_Lua_IdentifyMessage, 1); lua_setfield(lua, -2, "IdentifyMessage"); - /* * Create a metatable for EDS objects (userdata blobs) * This also has the hook to call our routine when old objects are collected @@ -572,5 +604,4 @@ void CFE_MissionLib_Lua_SoftwareBus_Attach(lua_State *lua, const CFE_MissionLib_ /* Reset the stack top to where it was initially */ lua_settop(lua, Obj); - } diff --git a/cfecfs/missionlib/python/inc/cfe_missionlib_python.h b/cfecfs/missionlib/python/inc/cfe_missionlib_python.h index c5c45ed..218c91d 100644 --- a/cfecfs/missionlib/python/inc/cfe_missionlib_python.h +++ b/cfecfs/missionlib/python/inc/cfe_missionlib_python.h @@ -40,7 +40,7 @@ * * This is provided for applications that supply their own custom init routine. */ -#define CFE_MISSIONLIB_PYTHON_DOC "Module which provides an interface to the CFE_MissionLib Runtime Library." +#define CFE_MISSIONLIB_PYTHON_DOC "Module which provides an interface to the CFE_MissionLib Runtime Library." /** * Base Name of the Python module @@ -50,7 +50,7 @@ * as the base name, which carries through to the respective "repr()" * implementation and other user-visible items. */ -#define CFE_MISSIONLIB_PYTHON_MODULE_NAME "CFE_MissionLib" +#define CFE_MISSIONLIB_PYTHON_MODULE_NAME "CFE_MissionLib" /** * Get the name of a Python entity @@ -59,8 +59,7 @@ * by adding a prefix of CFE_MISSIONLIB_PYTHON_MODULE_NAME. It is used * by all types to keep the naming consistent. */ -#define CFE_MISSIONLIB_PYTHON_ENTITY_NAME(x) CFE_MISSIONLIB_PYTHON_MODULE_NAME "." x - +#define CFE_MISSIONLIB_PYTHON_ENTITY_NAME(x) CFE_MISSIONLIB_PYTHON_MODULE_NAME "." x /** * Main Initializer function that sets up a newly-minted module object @@ -75,7 +74,7 @@ * different naming and calling conventions). So it is expected that * an additional wrapper around this will be added to accommodate this. */ -PyObject* CFE_MissionLib_Python_CreateModule(void); +PyObject *CFE_MissionLib_Python_CreateModule(void); /** * Gets the C EDS Database object from a Python MissionLib Database Object diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c index 1f16999..d0e4c72 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /****************************************************************************** ** File: cfe_missionlib_python_database.c ** @@ -44,73 +43,68 @@ #include "cfe_sb_eds_datatypes.h" #include "edslib_binding_objects.h" -static const EdsLib_Id_t CFE_SB_TELECOMMAND_ID = EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telecommand_indication_DECLARATION); -static const EdsLib_Id_t CFE_SB_TELEMETRY_ID = EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telemetry_indication_DECLARATION); +static const EdsLib_Id_t CFE_SB_TELECOMMAND_ID = + EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telecommand_indication_DECLARATION); +static const EdsLib_Id_t CFE_SB_TELEMETRY_ID = + EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telemetry_indication_DECLARATION); PyObject *CFE_MissionLib_Python_DatabaseCache = NULL; -static void CFE_MissionLib_Python_Database_dealloc(PyObject * obj); -static PyObject * CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); -static PyObject * CFE_MissionLib_Python_Database_repr(PyObject *obj); -static int CFE_MissionLib_Python_Database_traverse(PyObject *obj, visitproc visit, void *arg); -static int CFE_MissionLib_Python_Database_clear(PyObject *obj); - -static PyObject * CFE_MissionLib_Python_Database_GetInterface(PyObject *obj, PyObject *key); -static PyObject * CFE_MissionLib_Python_DecodeEdsId(PyObject *obj, PyObject *args); -static PyObject * CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args); - -static PyObject * CFE_MissionLib_Python_Instance_iter(PyObject *obj); -static void CFE_MissionLib_Python_InstanceIterator_dealloc(PyObject * obj); -static int CFE_MissionLib_Python_InstanceIterator_traverse(PyObject *obj, visitproc visit, void *arg); -static int CFE_MissionLib_Python_InstanceIterator_clear(PyObject *obj); -static PyObject * CFE_MissionLib_Python_InstanceIterator_iternext(PyObject *obj); - -static PyMethodDef CFE_MissionLib_Python_Database_methods[] = -{ - {"Interface", CFE_MissionLib_Python_Database_GetInterface, METH_O, "Lookup an Interface type from DB."}, - {"DecodeEdsId", CFE_MissionLib_Python_DecodeEdsId, METH_VARARGS, "Decode the EdsID from a packed cFE message"}, - {"SetPubSub", CFE_MissionLib_Python_Set_PubSub, METH_VARARGS, "Set the PubSub parameters for a command message"}, - {NULL} /* Sentinel */ +static void CFE_MissionLib_Python_Database_dealloc(PyObject *obj); +static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); +static PyObject *CFE_MissionLib_Python_Database_repr(PyObject *obj); +static int CFE_MissionLib_Python_Database_traverse(PyObject *obj, visitproc visit, void *arg); +static int CFE_MissionLib_Python_Database_clear(PyObject *obj); + +static PyObject *CFE_MissionLib_Python_Database_GetInterface(PyObject *obj, PyObject *key); +static PyObject *CFE_MissionLib_Python_DecodeEdsId(PyObject *obj, PyObject *args); +static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args); + +static PyObject *CFE_MissionLib_Python_Instance_iter(PyObject *obj); +static void CFE_MissionLib_Python_InstanceIterator_dealloc(PyObject *obj); +static int CFE_MissionLib_Python_InstanceIterator_traverse(PyObject *obj, visitproc visit, void *arg); +static int CFE_MissionLib_Python_InstanceIterator_clear(PyObject *obj); +static PyObject *CFE_MissionLib_Python_InstanceIterator_iternext(PyObject *obj); + +static PyMethodDef CFE_MissionLib_Python_Database_methods[] = { + { "Interface", CFE_MissionLib_Python_Database_GetInterface, METH_O, "Lookup an Interface type from DB." }, + { "DecodeEdsId", CFE_MissionLib_Python_DecodeEdsId, METH_VARARGS, "Decode the EdsID from a packed cFE message" }, + { "SetPubSub", CFE_MissionLib_Python_Set_PubSub, METH_VARARGS, "Set the PubSub parameters for a command message" }, + { NULL } /* Sentinel */ }; -static struct PyMemberDef CFE_MissionLib_Python_Database_members[] = -{ - {"Name", T_OBJECT_EX, offsetof(CFE_MissionLib_Python_Database_t, DbName), READONLY, "Database Name" }, - {NULL} /* Sentinel */ +static struct PyMemberDef CFE_MissionLib_Python_Database_members[] = { + { "Name", T_OBJECT_EX, offsetof(CFE_MissionLib_Python_Database_t, DbName), READONLY, "Database Name" }, + { NULL } /* Sentinel */ }; - -PyTypeObject CFE_MissionLib_Python_DatabaseType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("Database"), - .tp_basicsize = sizeof(CFE_MissionLib_Python_Database_t), - .tp_dealloc = CFE_MissionLib_Python_Database_dealloc, - .tp_new = CFE_MissionLib_Python_Database_new, - .tp_methods = CFE_MissionLib_Python_Database_methods, - .tp_members = CFE_MissionLib_Python_Database_members, - .tp_repr = CFE_MissionLib_Python_Database_repr, - .tp_traverse = CFE_MissionLib_Python_Database_traverse, - .tp_clear = CFE_MissionLib_Python_Database_clear, - .tp_iter = CFE_MissionLib_Python_Instance_iter, - .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC, - .tp_weaklistoffset = offsetof(CFE_MissionLib_Python_Database_t, WeakRefList), - .tp_doc = PyDoc_STR("Interface database") -}; - -PyTypeObject CFE_MissionLib_Python_InstanceIteratorType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("InstanceIterator"), - .tp_basicsize = sizeof(CFE_MissionLib_Python_InstanceIterator_t), - .tp_dealloc = CFE_MissionLib_Python_InstanceIterator_dealloc, - .tp_getattro = PyObject_GenericGetAttr, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, - .tp_traverse = CFE_MissionLib_Python_InstanceIterator_traverse, - .tp_clear = CFE_MissionLib_Python_InstanceIterator_clear, - .tp_iter = PyObject_SelfIter, - .tp_iternext = CFE_MissionLib_Python_InstanceIterator_iternext, - .tp_doc = PyDoc_STR("CFE MissionLib InstanceIteratorType") +PyTypeObject CFE_MissionLib_Python_DatabaseType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + CFE_MISSIONLIB_PYTHON_ENTITY_NAME("Database"), + .tp_basicsize = sizeof(CFE_MissionLib_Python_Database_t), + .tp_dealloc = CFE_MissionLib_Python_Database_dealloc, + .tp_new = CFE_MissionLib_Python_Database_new, + .tp_methods = CFE_MissionLib_Python_Database_methods, + .tp_members = CFE_MissionLib_Python_Database_members, + .tp_repr = CFE_MissionLib_Python_Database_repr, + .tp_traverse = CFE_MissionLib_Python_Database_traverse, + .tp_clear = CFE_MissionLib_Python_Database_clear, + .tp_iter = CFE_MissionLib_Python_Instance_iter, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_weaklistoffset = + offsetof(CFE_MissionLib_Python_Database_t, WeakRefList), + .tp_doc = PyDoc_STR("Interface database") }; + +PyTypeObject CFE_MissionLib_Python_InstanceIteratorType = { + PyVarObject_HEAD_INIT(NULL, 0).tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("InstanceIterator"), + .tp_basicsize = sizeof(CFE_MissionLib_Python_InstanceIterator_t), + .tp_dealloc = CFE_MissionLib_Python_InstanceIterator_dealloc, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = CFE_MissionLib_Python_InstanceIterator_traverse, + .tp_clear = CFE_MissionLib_Python_InstanceIterator_clear, + .tp_iter = PyObject_SelfIter, + .tp_iternext = CFE_MissionLib_Python_InstanceIterator_iternext, + .tp_doc = PyDoc_STR("CFE MissionLib InstanceIteratorType") }; static int CFE_MissionLib_Python_Database_traverse(PyObject *obj, visitproc visit, void *arg) @@ -129,7 +123,7 @@ static int CFE_MissionLib_Python_Database_clear(PyObject *obj) return 0; } -static void CFE_MissionLib_Python_Database_dealloc(PyObject * obj) +static void CFE_MissionLib_Python_Database_dealloc(PyObject *obj) { CFE_MissionLib_Python_Database_t *self = (CFE_MissionLib_Python_Database_t *)obj; @@ -220,38 +214,40 @@ const CFE_MissionLib_SoftwareBus_Interface_t *CFE_MissionLib_Python_Database_Get } if (!PyObject_TypeCheck(obj, &CFE_MissionLib_Python_DatabaseType)) { - PyErr_SetObject(PyExc_TypeError, obj); + PyErr_SetObject(PyExc_TypeError, obj); return NULL; } - return ((CFE_MissionLib_Python_Database_t*)obj)->IntfDb; + return ((CFE_MissionLib_Python_Database_t *)obj)->IntfDb; } static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject *args, PyObject *kwds) { - PyObject *arg1; - PyObject *arg2; - PyObject *dbname; - const char *dbstr; - char *p; - char tempstring[512]; - void *handle; - void *symbol; - const char *errstr; - bool IsSuccess; + PyObject *arg1; + PyObject *arg2; + PyObject *dbname; + const char *dbstr; + char *p; + char tempstring[512]; + void *handle; + void *symbol; + const char *errstr; + bool IsSuccess; CFE_MissionLib_Python_Database_t *self; if (!PyArg_UnpackTuple(args, "Database_new", 1, 2, &arg1, &arg2)) { - PyErr_Format(PyExc_RuntimeError, "Database arguments: Interface Database Identifier and EdsDb Python Object (If Database associated with Identifier has not been created"); - return NULL; + PyErr_Format(PyExc_RuntimeError, + "Database arguments: Interface Database Identifier and EdsDb Python Object (If Database " + "associated with Identifier has not been created"); + return NULL; } - dbname = NULL; - handle = NULL; - symbol = NULL; - errstr = NULL; - self = NULL; + dbname = NULL; + handle = NULL; + symbol = NULL; + errstr = NULL; + self = NULL; IsSuccess = false; do @@ -271,11 +267,14 @@ static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject } /* - * To avoid wasting resources, do not create the same database multiple times. - * First check if the db cache object already contains an instance for this name - * note: PyDict_GetItem returns borrowed reference - */ - self = (CFE_MissionLib_Python_Database_t *)CFE_MissionLib_Python_GetFromCache(CFE_MissionLib_Python_DatabaseCache, dbname, &CFE_MissionLib_Python_DatabaseType); + * To avoid wasting resources, do not create the same database multiple times. + * First check if the db cache object already contains an instance for this name + * note: PyDict_GetItem returns borrowed reference + */ + self = + (CFE_MissionLib_Python_Database_t *)CFE_MissionLib_Python_GetFromCache(CFE_MissionLib_Python_DatabaseCache, + dbname, + &CFE_MissionLib_Python_DatabaseType); if (self != NULL) { IsSuccess = true; @@ -288,11 +287,11 @@ static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject break; } - snprintf(tempstring,sizeof(tempstring),"%s_eds_sb_dispatchdb.so", dbstr); + snprintf(tempstring, sizeof(tempstring), "%s_eds_sb_dispatchdb.so", dbstr); /* Clear any pending dlerror value */ dlerror(); - handle = dlopen(tempstring, RTLD_LOCAL|RTLD_NOW); + handle = dlopen(tempstring, RTLD_LOCAL | RTLD_NOW); errstr = dlerror(); if (handle == NULL && errstr == NULL) @@ -306,7 +305,7 @@ static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject break; } - snprintf(tempstring,sizeof(tempstring),"%s_SOFTWAREBUS_INTERFACE", dbstr); + snprintf(tempstring, sizeof(tempstring), "%s_SOFTWAREBUS_INTERFACE", dbstr); p = tempstring; while (*p != 0) { @@ -321,7 +320,7 @@ static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject break; } - self = (CFE_MissionLib_Python_Database_t*)obj->tp_alloc(obj, 0); + self = (CFE_MissionLib_Python_Database_t *)obj->tp_alloc(obj, 0); if (self == NULL) { break; @@ -339,8 +338,8 @@ static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject } /* Create a weak reference to store in the local cache in case this - * database is constructed again. */ - if (CFE_MissionLib_Python_SaveToCache(CFE_MissionLib_Python_DatabaseCache, dbname, (PyObject*)self) < 0) + * database is constructed again. */ + if (CFE_MissionLib_Python_SaveToCache(CFE_MissionLib_Python_DatabaseCache, dbname, (PyObject *)self) < 0) { /* if something went wrong this raises an error and must return NULL */ break; @@ -349,8 +348,7 @@ static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject self->dl = handle; IsSuccess = true; - } - while (false); + } while (false); Py_XDECREF(dbname); if (!IsSuccess) @@ -369,7 +367,7 @@ static PyObject *CFE_MissionLib_Python_Database_new(PyTypeObject *obj, PyObject } } - return (PyObject*)self; + return (PyObject *)self; } PyObject *CFE_MissionLib_Python_Database_repr(PyObject *obj) @@ -381,14 +379,14 @@ PyObject *CFE_MissionLib_Python_Database_repr(PyObject *obj) static PyObject *CFE_MissionLib_Python_Database_GetInterface(PyObject *obj, PyObject *arg) { PyObject *tempargs = NULL; - PyObject *result = NULL; + PyObject *result = NULL; tempargs = PyTuple_Pack(2, obj, arg); if (tempargs == NULL) { return NULL; } - result = PyObject_Call((PyObject*)&CFE_MissionLib_Python_InterfaceType, tempargs, NULL); + result = PyObject_Call((PyObject *)&CFE_MissionLib_Python_InterfaceType, tempargs, NULL); Py_DECREF(tempargs); return result; @@ -397,24 +395,24 @@ static PyObject *CFE_MissionLib_Python_Database_GetInterface(PyObject *obj, PyOb static PyObject *CFE_MissionLib_Python_DecodeEdsId(PyObject *obj, PyObject *args) { CFE_MissionLib_Python_Database_t *IntfDb = (CFE_MissionLib_Python_Database_t *)obj; - PyObject *arg1; + PyObject *arg1; Py_ssize_t BytesSize; - char *NetworkBuffer; + char *NetworkBuffer; EdsNativeBuffer_CFE_HDR_Message_t LocalBuffer; EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSubParams; - EdsComponent_CFE_SB_Publisher_t PublisherParams; - EdsComponent_CFE_SB_Listener_t ListenerParams; - - EdsLib_Id_t EdsId; - EdsLib_Id_t CmdEdsId; - uint16_t TopicId; - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - CFE_MissionLib_TopicInfo_t TopicInfo; + EdsComponent_CFE_SB_Publisher_t PublisherParams; + EdsComponent_CFE_SB_Listener_t ListenerParams; + + EdsLib_Id_t EdsId; + EdsLib_Id_t CmdEdsId; + uint16_t TopicId; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + CFE_MissionLib_TopicInfo_t TopicInfo; const EdsDataType_CFE_HDR_Message_t *MsgPtr; - int32_t Status; + int32_t Status; PyObject *result = NULL; @@ -428,28 +426,35 @@ static PyObject *CFE_MissionLib_Python_DecodeEdsId(PyObject *obj, PyObject *args do { - if (!PyBytes_Check(arg1)) - { - PyErr_Format(PyExc_RuntimeError, "DecodeEdsId argument not of bytes string type"); - break; - } - BytesSize = PyBytes_Size(arg1); + if (!PyBytes_Check(arg1)) + { + PyErr_Format(PyExc_RuntimeError, "DecodeEdsId argument not of bytes string type"); + break; + } + BytesSize = PyBytes_Size(arg1); PyBytes_AsStringAndSize(arg1, &NetworkBuffer, &BytesSize); - EdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_TelemetryHeader_DATADICTIONARY); + EdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_TelemetryHeader_DATADICTIONARY); Status = EdsLib_DataTypeDB_GetTypeInfo(CFE_MissionLib_GetParent(IntfDb->IntfDb), EdsId, &TypeInfo); if (Status != CFE_MISSIONLIB_SUCCESS) { - PyErr_Format(PyExc_RuntimeError, "Unable to get type info for CCSDS_SPACEPACKET: return status = %d", Status); - break; + PyErr_Format(PyExc_RuntimeError, + "Unable to get type info for CCSDS_SPACEPACKET: return status = %d", + Status); + break; } - Status = EdsLib_DataTypeDB_UnpackPartialObject(CFE_MissionLib_GetParent(IntfDb->IntfDb), &EdsId, - LocalBuffer.Byte, NetworkBuffer, sizeof(LocalBuffer), 8*TypeInfo.Size.Bytes, 0); + Status = EdsLib_DataTypeDB_UnpackPartialObject(CFE_MissionLib_GetParent(IntfDb->IntfDb), + &EdsId, + LocalBuffer.Byte, + NetworkBuffer, + sizeof(LocalBuffer), + 8 * TypeInfo.Size.Bytes, + 0); if (Status != CFE_MISSIONLIB_SUCCESS) { - PyErr_Format(PyExc_RuntimeError, "Unable to unpack partial object: return status = %d", Status); - break; + PyErr_Format(PyExc_RuntimeError, "Unable to unpack partial object: return status = %d", Status); + break; } MsgPtr = (const EdsDataType_CFE_HDR_Message_t *)&LocalBuffer; @@ -459,48 +464,52 @@ static PyObject *CFE_MissionLib_Python_DecodeEdsId(PyObject *obj, PyObject *args if (CFE_MissionLib_PubSub_IsPublisherComponent(&PubSubParams)) { CFE_MissionLib_UnmapPublisherComponent(&PublisherParams, &PubSubParams); - TopicId = PublisherParams.Telemetry.TopicId; + TopicId = PublisherParams.Telemetry.TopicId; CmdEdsId = CFE_SB_TELEMETRY_ID; } else if (CFE_MissionLib_PubSub_IsListenerComponent(&PubSubParams)) { CFE_MissionLib_UnmapListenerComponent(&ListenerParams, &PubSubParams); - TopicId = ListenerParams.Telecommand.TopicId; + TopicId = ListenerParams.Telecommand.TopicId; CmdEdsId = CFE_SB_TELECOMMAND_ID; } else { - PyErr_Format(PyExc_RuntimeError, "Unable to identify component for MsgId=0x%x", (unsigned int)PubSubParams.MsgId.Value); - break; + PyErr_Format(PyExc_RuntimeError, + "Unable to identify component for MsgId=0x%x", + (unsigned int)PubSubParams.MsgId.Value); + break; } Status = CFE_MissionLib_GetTopicInfo(IntfDb->IntfDb, TopicId, &TopicInfo); if (Status != CFE_MISSIONLIB_SUCCESS) { - PyErr_Format(PyExc_RuntimeError, "CFE_MissionLib_GetTopicInfo(%d) rc=%d", (int)TopicId, (int)Status); - break; + PyErr_Format(PyExc_RuntimeError, "CFE_MissionLib_GetTopicInfo(%d) rc=%d", (int)TopicId, (int)Status); + break; } - Status = EdsLib_IntfDB_FindAllArgumentTypes(CFE_MissionLib_GetParent(IntfDb->IntfDb), CmdEdsId, - TopicInfo.ParentIntfId, &EdsId, 1); + Status = EdsLib_IntfDB_FindAllArgumentTypes(CFE_MissionLib_GetParent(IntfDb->IntfDb), + CmdEdsId, + TopicInfo.ParentIntfId, + &EdsId, + 1); if (Status != EDSLIB_SUCCESS) { - PyErr_Format(PyExc_RuntimeError, "Unable to get argument type: return status = %d", Status); - break; + PyErr_Format(PyExc_RuntimeError, "Unable to get argument type: return status = %d", Status); + break; } result = PyTuple_New(2); - PyTuple_SetItem(result, 0, PyLong_FromLong((long int) EdsId)); - PyTuple_SetItem(result, 1, PyLong_FromLong((long int) TopicId)); - } - while(0); + PyTuple_SetItem(result, 0, PyLong_FromLong((long int)EdsId)); + PyTuple_SetItem(result, 1, PyLong_FromLong((long int)TopicId)); + } while (0); Py_XDECREF(arg1); return result; } -static PyObject * CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) +static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) { PyObject *arg1; PyObject *arg2; @@ -508,18 +517,18 @@ static PyObject * CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *arg PyObject *tempargs; PyObject *result = NULL; - EdsLib_Python_ObjectBase_t *Python_Packet; - EdsLib_Python_Buffer_t *StorageBuffer; + EdsLib_Python_ObjectBase_t *Python_Packet; + EdsLib_Python_Buffer_t *StorageBuffer; EdsLib_Binding_Buffer_Content_t edsbuf; - EdsDataType_CFE_HDR_Message_t *Packet; + EdsDataType_CFE_HDR_Message_t *Packet; - EdsComponent_CFE_SB_Listener_t Params; + EdsComponent_CFE_SB_Listener_t Params; EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; if (!PyArg_UnpackTuple(args, "DecodeEdsId", 3, 3, &arg1, &arg2, &arg3)) { PyErr_Format(PyExc_RuntimeError, "Arguments expected: InstanceNumber, TopicId, and SpacePacket Message"); - return Py_False; + return Py_False; } Py_INCREF(arg1); @@ -528,18 +537,18 @@ static PyObject * CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *arg do { - if (PyNumber_Check(arg1)) - { + if (PyNumber_Check(arg1)) + { tempargs = PyNumber_Long(arg1); Params.Telecommand.InstanceNumber = PyLong_AsUnsignedLong(tempargs); Py_DECREF(tempargs); - } - else - { + } + else + { PyErr_Format(PyExc_RuntimeError, "InstanceNumber needs to be an integer"); break; - } + } if (PyNumber_Check(arg2)) { @@ -549,23 +558,23 @@ static PyObject * CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *arg Py_DECREF(tempargs); } else - { + { PyErr_Format(PyExc_RuntimeError, "TopicId needs to be an integer"); break; - } + } - // Dive through an EdsLib python base object to get to the actual EDS data - Python_Packet = (EdsLib_Python_ObjectBase_t *) arg3; + // Dive through an EdsLib python base object to get to the actual EDS data + Python_Packet = (EdsLib_Python_ObjectBase_t *)arg3; StorageBuffer = Python_Packet->StorageBuf; - edsbuf = StorageBuffer->edsbuf; - Packet = (EdsDataType_CFE_HDR_Message_t *) edsbuf.Data; + edsbuf = StorageBuffer->edsbuf; + Packet = (EdsDataType_CFE_HDR_Message_t *)edsbuf.Data; CFE_MissionLib_MapListenerComponent(&PubSub, &Params); CFE_MissionLib_Set_PubSub_Parameters(Packet, &PubSub); Py_INCREF(Py_True); result = Py_True; - } while(0); + } while (0); Py_XDECREF(arg1); Py_XDECREF(arg2); @@ -574,10 +583,10 @@ static PyObject * CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *arg return result; } -static PyObject * CFE_MissionLib_Python_Instance_iter(PyObject *obj) +static PyObject *CFE_MissionLib_Python_Instance_iter(PyObject *obj) { - CFE_MissionLib_Python_InstanceIterator_t *InstIter; - PyObject *result = NULL; + CFE_MissionLib_Python_InstanceIterator_t *InstIter; + PyObject *result = NULL; InstIter = PyObject_GC_New(CFE_MissionLib_Python_InstanceIterator_t, &CFE_MissionLib_Python_InstanceIteratorType); @@ -588,7 +597,7 @@ static PyObject * CFE_MissionLib_Python_Instance_iter(PyObject *obj) Py_INCREF(obj); InstIter->refobj = obj; - InstIter->Index = 1; + InstIter->Index = 1; result = (PyObject *)InstIter; PyObject_GC_Track(result); @@ -596,9 +605,9 @@ static PyObject * CFE_MissionLib_Python_Instance_iter(PyObject *obj) return result; } -static void CFE_MissionLib_Python_InstanceIterator_dealloc(PyObject * obj) +static void CFE_MissionLib_Python_InstanceIterator_dealloc(PyObject *obj) { - CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t*)obj; + CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t *)obj; PyObject_GC_UnTrack(self); Py_XDECREF(self->refobj); PyObject_GC_Del(self); @@ -606,27 +615,27 @@ static void CFE_MissionLib_Python_InstanceIterator_dealloc(PyObject * obj) static int CFE_MissionLib_Python_InstanceIterator_traverse(PyObject *obj, visitproc visit, void *arg) { - CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t*)obj; + CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t *)obj; Py_VISIT(self->refobj); return 0; } static int CFE_MissionLib_Python_InstanceIterator_clear(PyObject *obj) { - CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t*)obj; + CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t *)obj; Py_CLEAR(self->refobj); return 0; } static PyObject *CFE_MissionLib_Python_InstanceIterator_iternext(PyObject *obj) { - CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t*)obj; - CFE_MissionLib_Python_Database_t *dbobj = NULL; - const char * Label = NULL; + CFE_MissionLib_Python_InstanceIterator_t *self = (CFE_MissionLib_Python_InstanceIterator_t *)obj; + CFE_MissionLib_Python_Database_t *dbobj = NULL; + const char *Label = NULL; - PyObject *key = NULL; + PyObject *key = NULL; PyObject *instanceid = NULL; - PyObject *result = NULL; + PyObject *result = NULL; if (self->refobj == NULL) { @@ -652,8 +661,7 @@ static PyObject *CFE_MissionLib_Python_InstanceIterator_iternext(PyObject *obj) ++self->Index; result = PyTuple_Pack(2, key, instanceid); - } - while(0); + } while (0); Py_XDECREF(key); Py_XDECREF(instanceid); diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c index 5fd1cd1..f031d9f 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c @@ -37,68 +37,63 @@ #include "cfe_mission_eds_designparameters.h" #include "cfe_mission_eds_interface_parameters.h" - -static void CFE_MissionLib_Python_Interface_dealloc(PyObject * obj); -static PyObject * CFE_MissionLib_Python_Interface_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); -static PyObject * CFE_MissionLib_Python_Interface_gettopic(PyObject *obj, PyObject *arg); -static PyObject * CFE_MissionLib_Python_Interface_repr(PyObject *obj); -static int CFE_MissionLib_Python_Interface_traverse(PyObject *obj, visitproc visit, void *arg); -static int CFE_MissionLib_Python_Interface_clear(PyObject *obj); -static PyObject * CFE_MissionLib_Python_Interface_GetCmdMessage(PyObject *obj, PyObject *args); - -static PyObject * CFE_MissionLib_Python_Interface_iter(PyObject *obj); -static void CFE_MissionLib_Python_InterfaceIterator_dealloc(PyObject * obj); -static int CFE_MissionLib_Python_InterfaceIterator_traverse(PyObject *obj, visitproc visit, void *arg); -static int CFE_MissionLib_Python_InterfaceIterator_clear(PyObject *obj); -static PyObject * CFE_MissionLib_Python_InterfaceIterator_iternext(PyObject *obj); - -static CFE_MissionLib_Python_Interface_t *CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(PyTypeObject *obj, PyObject *dbobj, EdsLib_Id_t DeclEdsId); - -static PyMethodDef CFE_MissionLib_Python_Interface_methods[] = -{ - {"Topic", CFE_MissionLib_Python_Interface_gettopic, METH_O, "Lookup a Topic from an Interface."}, - {"GetCmdMessage", CFE_MissionLib_Python_Interface_GetCmdMessage, METH_VARARGS, "Get a CFE command message EDS Object from a Topic"}, - {NULL} /* Sentinel */ -}; - -static struct PyMemberDef CFE_MissionLib_Python_Interface_members[] = -{ - {"Name", T_OBJECT_EX, offsetof(CFE_MissionLib_Python_Interface_t, IntfName), READONLY, "Interface Name" }, - {NULL} /* Sentinel */ +static void CFE_MissionLib_Python_Interface_dealloc(PyObject *obj); +static PyObject *CFE_MissionLib_Python_Interface_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); +static PyObject *CFE_MissionLib_Python_Interface_gettopic(PyObject *obj, PyObject *arg); +static PyObject *CFE_MissionLib_Python_Interface_repr(PyObject *obj); +static int CFE_MissionLib_Python_Interface_traverse(PyObject *obj, visitproc visit, void *arg); +static int CFE_MissionLib_Python_Interface_clear(PyObject *obj); +static PyObject *CFE_MissionLib_Python_Interface_GetCmdMessage(PyObject *obj, PyObject *args); + +static PyObject *CFE_MissionLib_Python_Interface_iter(PyObject *obj); +static void CFE_MissionLib_Python_InterfaceIterator_dealloc(PyObject *obj); +static int CFE_MissionLib_Python_InterfaceIterator_traverse(PyObject *obj, visitproc visit, void *arg); +static int CFE_MissionLib_Python_InterfaceIterator_clear(PyObject *obj); +static PyObject *CFE_MissionLib_Python_InterfaceIterator_iternext(PyObject *obj); + +static CFE_MissionLib_Python_Interface_t * +CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(PyTypeObject *obj, PyObject *dbobj, EdsLib_Id_t DeclEdsId); + +static PyMethodDef CFE_MissionLib_Python_Interface_methods[] = { + { "Topic", CFE_MissionLib_Python_Interface_gettopic, METH_O, "Lookup a Topic from an Interface." }, + { "GetCmdMessage", + CFE_MissionLib_Python_Interface_GetCmdMessage, METH_VARARGS, + "Get a CFE command message EDS Object from a Topic" }, + { NULL } /* Sentinel */ }; - -PyTypeObject CFE_MissionLib_Python_InterfaceType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("Interface"), - .tp_basicsize = sizeof(CFE_MissionLib_Python_Interface_t), - .tp_dealloc = CFE_MissionLib_Python_Interface_dealloc, - .tp_new = CFE_MissionLib_Python_Interface_new, - .tp_methods = CFE_MissionLib_Python_Interface_methods, - .tp_members = CFE_MissionLib_Python_Interface_members, - .tp_repr = CFE_MissionLib_Python_Interface_repr, - .tp_traverse = CFE_MissionLib_Python_Interface_traverse, - .tp_clear = CFE_MissionLib_Python_Interface_clear, - .tp_iter = CFE_MissionLib_Python_Interface_iter, - .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC, - .tp_weaklistoffset = offsetof(CFE_MissionLib_Python_Interface_t, WeakRefList), - .tp_doc = PyDoc_STR("Interface database entry") +static struct PyMemberDef CFE_MissionLib_Python_Interface_members[] = { + { "Name", T_OBJECT_EX, offsetof(CFE_MissionLib_Python_Interface_t, IntfName), READONLY, "Interface Name" }, + { NULL } /* Sentinel */ }; -PyTypeObject CFE_MissionLib_Python_InterfaceIteratorType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("InterfaceIterator"), - .tp_basicsize = sizeof(CFE_MissionLib_Python_InterfaceIterator_t), - .tp_dealloc = CFE_MissionLib_Python_InterfaceIterator_dealloc, - .tp_getattro = PyObject_GenericGetAttr, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, - .tp_traverse = CFE_MissionLib_Python_InterfaceIterator_traverse, - .tp_clear = CFE_MissionLib_Python_InterfaceIterator_clear, - .tp_iter = PyObject_SelfIter, - .tp_iternext = CFE_MissionLib_Python_InterfaceIterator_iternext, - .tp_doc = PyDoc_STR("CFE MissionLib InterfaceIteratorType") +PyTypeObject CFE_MissionLib_Python_InterfaceType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + CFE_MISSIONLIB_PYTHON_ENTITY_NAME("Interface"), + .tp_basicsize = sizeof(CFE_MissionLib_Python_Interface_t), + .tp_dealloc = CFE_MissionLib_Python_Interface_dealloc, + .tp_new = CFE_MissionLib_Python_Interface_new, + .tp_methods = CFE_MissionLib_Python_Interface_methods, + .tp_members = CFE_MissionLib_Python_Interface_members, + .tp_repr = CFE_MissionLib_Python_Interface_repr, + .tp_traverse = CFE_MissionLib_Python_Interface_traverse, + .tp_clear = CFE_MissionLib_Python_Interface_clear, + .tp_iter = CFE_MissionLib_Python_Interface_iter, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_weaklistoffset = + offsetof(CFE_MissionLib_Python_Interface_t, WeakRefList), + .tp_doc = PyDoc_STR("Interface database entry") }; + +PyTypeObject CFE_MissionLib_Python_InterfaceIteratorType = { + PyVarObject_HEAD_INIT(NULL, 0).tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("InterfaceIterator"), + .tp_basicsize = sizeof(CFE_MissionLib_Python_InterfaceIterator_t), + .tp_dealloc = CFE_MissionLib_Python_InterfaceIterator_dealloc, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = CFE_MissionLib_Python_InterfaceIterator_traverse, + .tp_clear = CFE_MissionLib_Python_InterfaceIterator_clear, + .tp_iter = PyObject_SelfIter, + .tp_iternext = CFE_MissionLib_Python_InterfaceIterator_iternext, + .tp_doc = PyDoc_STR("CFE MissionLib InterfaceIteratorType") }; static int CFE_MissionLib_Python_Interface_traverse(PyObject *obj, visitproc visit, void *arg) @@ -119,7 +114,7 @@ static int CFE_MissionLib_Python_Interface_clear(PyObject *obj) return 0; } -static void CFE_MissionLib_Python_Interface_dealloc(PyObject * obj) +static void CFE_MissionLib_Python_Interface_dealloc(PyObject *obj) { CFE_MissionLib_Python_Interface_t *self = (CFE_MissionLib_Python_Interface_t *)obj; Py_CLEAR(self->DbObj); @@ -135,14 +130,15 @@ static void CFE_MissionLib_Python_Interface_dealloc(PyObject * obj) CFE_MissionLib_Python_InterfaceType.tp_base->tp_dealloc(obj); } -static CFE_MissionLib_Python_Interface_t *CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(PyTypeObject *obj, PyObject *dbobj, EdsLib_Id_t DeclEdsId) +static CFE_MissionLib_Python_Interface_t * +CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(PyTypeObject *obj, PyObject *dbobj, EdsLib_Id_t DeclEdsId) { - CFE_MissionLib_Python_Database_t *DbObj = (CFE_MissionLib_Python_Database_t *)dbobj; - CFE_MissionLib_Python_Interface_t *self = NULL; - char Buffer[128]; - int32_t Status; - PyObject *DeclEdsIdVal; - bool IsSuccess; + CFE_MissionLib_Python_Database_t *DbObj = (CFE_MissionLib_Python_Database_t *)dbobj; + CFE_MissionLib_Python_Interface_t *self = NULL; + char Buffer[128]; + int32_t Status; + PyObject *DeclEdsIdVal; + bool IsSuccess; IsSuccess = false; do @@ -153,7 +149,8 @@ static CFE_MissionLib_Python_Interface_t *CFE_MissionLib_Python_Interface_GetFro break; } - self = (CFE_MissionLib_Python_Interface_t *)CFE_MissionLib_Python_GetFromCache(DbObj->IntfCache, DeclEdsIdVal, &CFE_MissionLib_Python_InterfaceType); + self = (CFE_MissionLib_Python_Interface_t *) + CFE_MissionLib_Python_GetFromCache(DbObj->IntfCache, DeclEdsIdVal, &CFE_MissionLib_Python_InterfaceType); if (self != NULL) { if (EdsLib_Is_Match(DeclEdsId, self->DeclEdsId)) @@ -167,14 +164,14 @@ static CFE_MissionLib_Python_Interface_t *CFE_MissionLib_Python_Interface_GetFro self = NULL; } - self = (CFE_MissionLib_Python_Interface_t*)obj->tp_alloc(obj, 0); + self = (CFE_MissionLib_Python_Interface_t *)obj->tp_alloc(obj, 0); if (self == NULL) { break; } Py_INCREF(DbObj); - self->DbObj = DbObj; + self->DbObj = DbObj; self->DeclEdsId = DeclEdsId; self->TopicCache = PyDict_New(); @@ -206,15 +203,14 @@ static CFE_MissionLib_Python_Interface_t *CFE_MissionLib_Python_Interface_GetFro /* Create a weak reference to store in the local cache in case this * database is constructed again. */ - if (CFE_MissionLib_Python_SaveToCache(DbObj->IntfCache, DeclEdsIdVal, (PyObject*)self) < 0) + if (CFE_MissionLib_Python_SaveToCache(DbObj->IntfCache, DeclEdsIdVal, (PyObject *)self) < 0) { /* if something went wrong this raises an error and must return NULL */ break; } IsSuccess = true; - } - while(0); + } while (0); Py_XDECREF(DeclEdsIdVal); if (!IsSuccess && self != NULL) @@ -230,15 +226,15 @@ static CFE_MissionLib_Python_Interface_t *CFE_MissionLib_Python_Interface_GetFro static PyObject *CFE_MissionLib_Python_Interface_new(PyTypeObject *obj, PyObject *args, PyObject *kwds) { - PyObject *arg1; - PyObject *arg2; - PyObject *arg3 = NULL; + PyObject *arg1; + PyObject *arg2; + PyObject *arg3 = NULL; CFE_MissionLib_Python_Database_t *DbObj = NULL; EdsLib_Id_t DeclEdsId = EDSLIB_ID_INVALID; PyObject *tempargs = NULL; - PyObject *result = NULL; + PyObject *result = NULL; /* * Interface entries are constructed from two values: @@ -254,16 +250,18 @@ static PyObject *CFE_MissionLib_Python_Interface_new(PyTypeObject *obj, PyObject */ if (!PyArg_UnpackTuple(args, "Interface_new", 2, 3, &arg1, &arg2, &arg3)) { - PyErr_Format(PyExc_RuntimeError, "Interface arguments expected: Interface Database, Interface Identifier, and EdsDb Python Object (optional)"); - return NULL; + PyErr_Format(PyExc_RuntimeError, + "Interface arguments expected: Interface Database, Interface Identifier, and EdsDb Python Object " + "(optional)"); + return NULL; } do { - // Set up the Interface Database Python Object + // Set up the Interface Database Python Object if (Py_TYPE(arg1) == &CFE_MissionLib_Python_DatabaseType) { - DbObj = (CFE_MissionLib_Python_Database_t*)arg1; + DbObj = (CFE_MissionLib_Python_Database_t *)arg1; Py_INCREF(DbObj); } else @@ -281,7 +279,9 @@ static PyObject *CFE_MissionLib_Python_Interface_new(PyTypeObject *obj, PyObject { break; } - DbObj = (CFE_MissionLib_Python_Database_t*)PyObject_Call((PyObject*)&CFE_MissionLib_Python_DatabaseType, tempargs, NULL); + DbObj = (CFE_MissionLib_Python_Database_t *)PyObject_Call((PyObject *)&CFE_MissionLib_Python_DatabaseType, + tempargs, + NULL); Py_DECREF(tempargs); tempargs = NULL; } @@ -292,15 +292,19 @@ static PyObject *CFE_MissionLib_Python_Interface_new(PyTypeObject *obj, PyObject } // Set up the Interface Python Object from an Interface Id or Interface Name - DeclEdsId = CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_IntfDB_FindDeclaredInterfaceByFullName, CFE_MissionLib_GetParent(DbObj->IntfDb), arg2); + DeclEdsId = CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_IntfDB_FindDeclaredInterfaceByFullName, + CFE_MissionLib_GetParent(DbObj->IntfDb), + arg2); /* if the lookup failed it should have already set an exception */ if (EdsLib_Is_Valid(DeclEdsId)) { - result = (PyObject*)CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(&CFE_MissionLib_Python_InterfaceType, (PyObject *)DbObj, DeclEdsId); + result = + (PyObject *)CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(&CFE_MissionLib_Python_InterfaceType, + (PyObject *)DbObj, + DeclEdsId); } - } - while(0); + } while (0); /* decrement refcount for all temporary objects created */ Py_XDECREF(DbObj); @@ -317,41 +321,45 @@ PyObject *CFE_MissionLib_Python_Interface_repr(PyObject *obj) static PyObject *CFE_MissionLib_Python_Interface_gettopic(PyObject *obj, PyObject *arg) { - CFE_MissionLib_Python_Interface_t *IntfObj = (CFE_MissionLib_Python_Interface_t *)obj; - PyObject *tempargs = NULL; - PyObject *result = NULL; + CFE_MissionLib_Python_Interface_t *IntfObj = (CFE_MissionLib_Python_Interface_t *)obj; + PyObject *tempargs = NULL; + PyObject *result = NULL; tempargs = PyTuple_Pack(3, IntfObj->DbObj, IntfObj, arg); if (tempargs == NULL) { return NULL; } - result = PyObject_Call((PyObject*)&CFE_MissionLib_Python_TopicType, tempargs, NULL); + result = PyObject_Call((PyObject *)&CFE_MissionLib_Python_TopicType, tempargs, NULL); Py_DECREF(tempargs); return result; } -PyObject *CFE_MissionLib_Python_Interface_GetFromIntfName(CFE_MissionLib_Python_Database_t *obj, PyObject *InterfaceName) +PyObject *CFE_MissionLib_Python_Interface_GetFromIntfName(CFE_MissionLib_Python_Database_t *obj, + PyObject *InterfaceName) { - int32_t status; + int32_t status; EdsLib_Id_t DeclEdsId; status = EdsLib_IntfDB_FindDeclaredInterfaceByFullName(CFE_MissionLib_GetParent(obj->IntfDb), - PyBytes_AsString(InterfaceName), &DeclEdsId); + PyBytes_AsString(InterfaceName), + &DeclEdsId); if (status != EDSLIB_SUCCESS) { PyErr_Format(PyExc_RuntimeError, "Interface %s undefined", PyBytes_AsString(InterfaceName)); return NULL; } - return (PyObject*)CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(&CFE_MissionLib_Python_InterfaceType, (PyObject *)obj, DeclEdsId); + return (PyObject *)CFE_MissionLib_Python_Interface_GetFromDeclEdsId_Impl(&CFE_MissionLib_Python_InterfaceType, + (PyObject *)obj, + DeclEdsId); } -static PyObject * CFE_MissionLib_Python_Interface_iter(PyObject *obj) +static PyObject *CFE_MissionLib_Python_Interface_iter(PyObject *obj) { CFE_MissionLib_Python_InterfaceIterator_t *IntfIter; - PyObject *result = NULL; + PyObject *result = NULL; IntfIter = PyObject_GC_New(CFE_MissionLib_Python_InterfaceIterator_t, &CFE_MissionLib_Python_InterfaceIteratorType); @@ -371,9 +379,9 @@ static PyObject * CFE_MissionLib_Python_Interface_iter(PyObject *obj) return result; } -static void CFE_MissionLib_Python_InterfaceIterator_dealloc(PyObject * obj) +static void CFE_MissionLib_Python_InterfaceIterator_dealloc(PyObject *obj) { - CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t*)obj; + CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t *)obj; PyObject_GC_UnTrack(self); Py_XDECREF(self->refobj); PyObject_GC_Del(self); @@ -381,28 +389,28 @@ static void CFE_MissionLib_Python_InterfaceIterator_dealloc(PyObject * obj) static int CFE_MissionLib_Python_InterfaceIterator_traverse(PyObject *obj, visitproc visit, void *arg) { - CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t*)obj; + CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t *)obj; Py_VISIT(self->refobj); return 0; } static int CFE_MissionLib_Python_InterfaceIterator_clear(PyObject *obj) { - CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t*)obj; + CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t *)obj; Py_CLEAR(self->refobj); return 0; } static PyObject *CFE_MissionLib_Python_InterfaceIterator_iternext(PyObject *obj) { - CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t*)obj; - CFE_MissionLib_Python_Interface_t *intf = NULL; - char Buffer[128]; - CFE_MissionLib_TopicInfo_t TopicInfo; - int32_t Status; - PyObject *key = NULL; - PyObject *topicid = NULL; - PyObject *result = NULL; + CFE_MissionLib_Python_InterfaceIterator_t *self = (CFE_MissionLib_Python_InterfaceIterator_t *)obj; + CFE_MissionLib_Python_Interface_t *intf = NULL; + char Buffer[128]; + CFE_MissionLib_TopicInfo_t TopicInfo; + int32_t Status; + PyObject *key = NULL; + PyObject *topicid = NULL; + PyObject *result = NULL; if (self->refobj == NULL) { @@ -425,9 +433,11 @@ static PyObject *CFE_MissionLib_Python_InterfaceIterator_iternext(PyObject *obj) } /* This fails quickly if passed an invalid identifier - it will not assemble the string */ - Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(intf->DbObj->IntfDb), TopicInfo.ParentIntfId, Buffer, sizeof(Buffer)); - } - while(Status != EDSLIB_SUCCESS); + Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(intf->DbObj->IntfDb), + TopicInfo.ParentIntfId, + Buffer, + sizeof(Buffer)); + } while (Status != EDSLIB_SUCCESS); if (Status == EDSLIB_SUCCESS) { @@ -441,7 +451,7 @@ static PyObject *CFE_MissionLib_Python_InterfaceIterator_iternext(PyObject *obj) else { topicid = PyLong_FromLong(self->TopicId); - result = PyTuple_Pack(2, key, topicid); + result = PyTuple_Pack(2, key, topicid); } } @@ -456,14 +466,15 @@ static PyObject *CFE_MissionLib_Python_Interface_GetCmdMessage(PyObject *obj, Py return PyUnicode_FromFormat("Interface_GetCmdMessage still needs to be implemented"); } -EdsLib_Id_t CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_NameLookupFunc_t Func, const EdsLib_DatabaseObject_t *GD, PyObject* arg) +EdsLib_Id_t +CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_NameLookupFunc_t Func, const EdsLib_DatabaseObject_t *GD, PyObject *arg) { EdsLib_Id_t Result; - int32_t Status; - PyObject *temp_id; + int32_t Status; + PyObject *temp_id; temp_id = NULL; - Result = EDSLIB_ID_INVALID; + Result = EDSLIB_ID_INVALID; /* * The identifier might come from the python interpreter as a string or number. @@ -500,7 +511,10 @@ EdsLib_Id_t CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_NameLookupFunc_t Func Status = Func(GD, PyBytes_AsString(temp_id), &Result); if (Status != EDSLIB_SUCCESS) { - PyErr_Format(PyExc_ValueError, "Name lookup on \'%s\' failed with code=%d", PyBytes_AsString(temp_id), (int)Status); + PyErr_Format(PyExc_ValueError, + "Name lookup on \'%s\' failed with code=%d", + PyBytes_AsString(temp_id), + (int)Status); Result = EDSLIB_ID_INVALID; } } diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_internal.h b/cfecfs/missionlib/python/src/cfe_missionlib_python_internal.h index 184548e..fc697aa 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_internal.h +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_internal.h @@ -29,7 +29,6 @@ ** ******************************************************************************/ - #ifndef CFE_MISSIONLIB_PYTHON_INTERNAL_H #define CFE_MISSIONLIB_PYTHON_INTERNAL_H @@ -49,69 +48,65 @@ typedef struct { - PyObject_HEAD - void *dl; + PyObject_HEAD void *dl; const CFE_MissionLib_SoftwareBus_Interface_t *IntfDb; - PyObject *DbName; - PyObject *IntfCache; - PyObject *WeakRefList; + PyObject *DbName; + PyObject *IntfCache; + PyObject *WeakRefList; } CFE_MissionLib_Python_Database_t; /* An "Interface" here is analogous to a declared intf in EDS. In the software bus realm there * are two - Telecommand and Telemetry, differing only in the direction of data flow */ typedef struct { - PyObject_HEAD - CFE_MissionLib_Python_Database_t *DbObj; - PyObject *IntfName; - EdsLib_Id_t DeclEdsId; - EdsLib_Id_t CmdEdsId; - PyObject *TopicCache; - PyObject *WeakRefList; + PyObject_HEAD CFE_MissionLib_Python_Database_t *DbObj; + PyObject *IntfName; + EdsLib_Id_t DeclEdsId; + EdsLib_Id_t CmdEdsId; + PyObject *TopicCache; + PyObject *WeakRefList; } CFE_MissionLib_Python_Interface_t; typedef struct { - PyObject_HEAD - CFE_MissionLib_Python_Interface_t *IntfObj; - PyObject *TopicName; - uint16_t TopicId; + PyObject_HEAD CFE_MissionLib_Python_Interface_t *IntfObj; + PyObject *TopicName; + uint16_t TopicId; CFE_MissionLib_TopicInfo_t TopicInfo; EdsLib_Id_t DataEdsId; /* The actual data type for messages on this topic */ - PyObject *WeakRefList; + PyObject *WeakRefList; } CFE_MissionLib_Python_Topic_t; typedef struct { - PyObject_HEAD - uint16_t Index; - PyObject* refobj; + PyObject_HEAD uint16_t Index; + PyObject *refobj; } CFE_MissionLib_Python_InstanceIterator_t; typedef struct { - PyObject_HEAD - uint16_t TopicId; - PyObject* refobj; + PyObject_HEAD uint16_t TopicId; + PyObject *refobj; } CFE_MissionLib_Python_InterfaceIterator_t; typedef struct { - PyObject_HEAD - EdsLib_Id_t Index; - PyObject* refobj; + PyObject_HEAD EdsLib_Id_t Index; + PyObject *refobj; } CFE_MissionLib_Python_TopicIterator_t; typedef int32_t (*EdsLib_NameLookupFunc_t)(const EdsLib_DatabaseObject_t *, const char *, EdsLib_Id_t *); -EdsLib_Id_t CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_NameLookupFunc_t Func, const EdsLib_DatabaseObject_t *GD, PyObject* arg); +EdsLib_Id_t +CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_NameLookupFunc_t Func, const EdsLib_DatabaseObject_t *GD, PyObject *arg); PyObject *CFE_MissionLib_Python_GetFromCache(PyObject *cachedict, PyObject *idxval, PyTypeObject *reqtype); -int CFE_MissionLib_Python_SaveToCache(PyObject *cachedict, PyObject *idxval, PyObject *obj); +int CFE_MissionLib_Python_SaveToCache(PyObject *cachedict, PyObject *idxval, PyObject *obj); -PyObject *CFE_MissionLib_Python_Interface_GetFromIntfName(CFE_MissionLib_Python_Database_t *obj, PyObject *InterfaceName); +PyObject *CFE_MissionLib_Python_Interface_GetFromIntfName(CFE_MissionLib_Python_Database_t *obj, + PyObject *InterfaceName); PyObject *CFE_MissionLib_Python_Topic_GetFromTopicName(CFE_MissionLib_Python_Interface_t *obj, PyObject *TopicName); extern PyObject *CFE_MissionLib_Python_DatabaseCache; diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_module.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_module.c index 5540911..5f69aa6 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_module.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_module.c @@ -86,7 +86,6 @@ PyMODINIT_FUNC PyInit_CFE_MissionLib(void) #define PyMODINIT_FUNC void #endif - PyMODINIT_FUNC initCFE_MissionLib(void) { /* python2 does not want module object */ @@ -94,4 +93,3 @@ PyMODINIT_FUNC initCFE_MissionLib(void) } #endif - diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_setup.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_setup.c index 5c08f5a..c563204 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_setup.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_setup.c @@ -40,15 +40,12 @@ */ #if (PY_MAJOR_VERSION >= 3) -static PyModuleDef CFE_MissionLib_Python_ModuleDef = -{ - PyModuleDef_HEAD_INIT, - CFE_MISSIONLIB_PYTHON_MODULE_NAME, - PyDoc_STR(CFE_MISSIONLIB_PYTHON_DOC), - -1 -}; +static PyModuleDef CFE_MissionLib_Python_ModuleDef = { PyModuleDef_HEAD_INIT, + CFE_MISSIONLIB_PYTHON_MODULE_NAME, + PyDoc_STR(CFE_MISSIONLIB_PYTHON_DOC), + -1 }; -static inline PyObject* CFE_MissionLib_Python_InstantiateModule(void) +static inline PyObject *CFE_MissionLib_Python_InstantiateModule(void) { /* python3 uses PyModule_Create() API */ return PyModule_Create(&CFE_MissionLib_Python_ModuleDef); @@ -56,7 +53,7 @@ static inline PyObject* CFE_MissionLib_Python_InstantiateModule(void) #else -static inline PyObject* CFE_MissionLib_Python_InstantiateModule(void) +static inline PyObject *CFE_MissionLib_Python_InstantiateModule(void) { /* python2 uses Py_InitModule3() API */ return Py_InitModule3(CFE_MISSIONLIB_PYTHON_MODULE_NAME, NULL, CFE_MISSIONLIB_PYTHON_DOC); @@ -64,8 +61,7 @@ static inline PyObject* CFE_MissionLib_Python_InstantiateModule(void) #endif - -PyObject* CFE_MissionLib_Python_CreateModule(void) +PyObject *CFE_MissionLib_Python_CreateModule(void) { PyObject *m = NULL; @@ -74,9 +70,9 @@ PyObject* CFE_MissionLib_Python_CreateModule(void) /* * Prepare all of the types defined here */ - if (PyType_Ready(&CFE_MissionLib_Python_DatabaseType) != 0 || - PyType_Ready(&CFE_MissionLib_Python_InterfaceType) != 0 || - PyType_Ready(&CFE_MissionLib_Python_TopicType) != 0) + if (PyType_Ready(&CFE_MissionLib_Python_DatabaseType) != 0 + || PyType_Ready(&CFE_MissionLib_Python_InterfaceType) != 0 + || PyType_Ready(&CFE_MissionLib_Python_TopicType) != 0) { break; } @@ -99,11 +95,10 @@ PyObject* CFE_MissionLib_Python_CreateModule(void) /* * Add appropriate types so object instances can be constructed */ - PyModule_AddObject(m, "Database", (PyObject*)&CFE_MissionLib_Python_DatabaseType); - PyModule_AddObject(m, "Interface", (PyObject*)&CFE_MissionLib_Python_InterfaceType); - PyModule_AddObject(m, "Topic", (PyObject*)&CFE_MissionLib_Python_TopicType); - } - while(0); + PyModule_AddObject(m, "Database", (PyObject *)&CFE_MissionLib_Python_DatabaseType); + PyModule_AddObject(m, "Interface", (PyObject *)&CFE_MissionLib_Python_InterfaceType); + PyModule_AddObject(m, "Topic", (PyObject *)&CFE_MissionLib_Python_TopicType); + } while (0); return m; } diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_topic.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_topic.c index 36f0537..fa186ce 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_topic.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_topic.c @@ -39,80 +39,77 @@ #include #include "edslib_id.h" -static void CFE_MissionLib_Python_Topic_dealloc(PyObject * obj); -static PyObject * CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); -static PyObject * CFE_MissionLib_Python_Topic_repr(PyObject *obj); -static int CFE_MissionLib_Python_Topic_traverse(PyObject *obj, visitproc visit, void *arg); -static int CFE_MissionLib_Python_Topic_clear(PyObject *obj); -static PyObject * CFE_MissionLib_Python_Topic_GetCmdEdsIdFromCode(PyObject *obj, PyObject *args); - -static CFE_MissionLib_Python_Topic_t *CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(PyTypeObject *obj, PyObject *intfobj, uint16_t TopicId); - -static PyObject * CFE_MissionLib_Python_Topic_iter(PyObject *obj); -static void CFE_MissionLib_Python_TopicIterator_dealloc(PyObject * obj); -static int CFE_MissionLib_Python_TopicIterator_traverse(PyObject *obj, visitproc visit, void *arg); -static int CFE_MissionLib_Python_TopicIterator_clear(PyObject *obj); -static PyObject * CFE_MissionLib_Python_TopicIterator_iternext(PyObject *obj); +static void CFE_MissionLib_Python_Topic_dealloc(PyObject *obj); +static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); +static PyObject *CFE_MissionLib_Python_Topic_repr(PyObject *obj); +static int CFE_MissionLib_Python_Topic_traverse(PyObject *obj, visitproc visit, void *arg); +static int CFE_MissionLib_Python_Topic_clear(PyObject *obj); +static PyObject *CFE_MissionLib_Python_Topic_GetCmdEdsIdFromCode(PyObject *obj, PyObject *args); + +static CFE_MissionLib_Python_Topic_t * +CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(PyTypeObject *obj, PyObject *intfobj, uint16_t TopicId); + +static PyObject *CFE_MissionLib_Python_Topic_iter(PyObject *obj); +static void CFE_MissionLib_Python_TopicIterator_dealloc(PyObject *obj); +static int CFE_MissionLib_Python_TopicIterator_traverse(PyObject *obj, visitproc visit, void *arg); +static int CFE_MissionLib_Python_TopicIterator_clear(PyObject *obj); +static PyObject *CFE_MissionLib_Python_TopicIterator_iternext(PyObject *obj); struct CbArg { - uint8_t CommandCode; + uint8_t CommandCode; EdsLib_Id_t PossibleId; EdsLib_Id_t EdsId; }; typedef struct CbArg CbArg_t; -void SubcommandCallback(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, - EdsLib_GenericValueBuffer_t *ConstraintValue, void *Arg); +void SubcommandCallback(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, + EdsLib_GenericValueBuffer_t *ConstraintValue, + void *Arg); -static PyMethodDef CFE_MissionLib_Python_Topic_methods[] = -{ - {"GetCmdEdsId", CFE_MissionLib_Python_Topic_GetCmdEdsIdFromCode, METH_VARARGS, "Get a CFE command message EDS Object from a Topic"}, - {NULL} /* Sentinel */ +static PyMethodDef CFE_MissionLib_Python_Topic_methods[] = { + { "GetCmdEdsId", + CFE_MissionLib_Python_Topic_GetCmdEdsIdFromCode, METH_VARARGS, + "Get a CFE command message EDS Object from a Topic" }, + { NULL } /* Sentinel */ }; -static struct PyMemberDef CFE_MissionLib_Python_Topic_members[] = -{ - {"Name", T_OBJECT_EX, offsetof(CFE_MissionLib_Python_Topic_t, TopicName), READONLY, "Topic Name" }, - {"TopicId", T_SHORT, offsetof(CFE_MissionLib_Python_Topic_t, TopicId), READONLY, "Topic ID" }, - {"EdsId", T_INT, offsetof(CFE_MissionLib_Python_Topic_t, DataEdsId), READONLY, "EDS ID" }, - {NULL} /* Sentinel */ +static struct PyMemberDef CFE_MissionLib_Python_Topic_members[] = { + { "Name", T_OBJECT_EX, offsetof(CFE_MissionLib_Python_Topic_t, TopicName), READONLY, "Topic Name" }, + { "TopicId", T_SHORT, offsetof(CFE_MissionLib_Python_Topic_t, TopicId), READONLY, "Topic ID" }, + { "EdsId", T_INT, offsetof(CFE_MissionLib_Python_Topic_t, DataEdsId), READONLY, "EDS ID" }, + { NULL } /* Sentinel */ }; - -PyTypeObject CFE_MissionLib_Python_TopicType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("Topic"), - .tp_basicsize = sizeof(CFE_MissionLib_Python_Topic_t), - .tp_dealloc = CFE_MissionLib_Python_Topic_dealloc, - .tp_new = CFE_MissionLib_Python_Topic_new, - .tp_methods = CFE_MissionLib_Python_Topic_methods, - .tp_members = CFE_MissionLib_Python_Topic_members, - .tp_repr = CFE_MissionLib_Python_Topic_repr, - .tp_traverse = CFE_MissionLib_Python_Topic_traverse, - .tp_clear = CFE_MissionLib_Python_Topic_clear, - .tp_iter = CFE_MissionLib_Python_Topic_iter, - .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC, - .tp_weaklistoffset = offsetof(CFE_MissionLib_Python_Topic_t, WeakRefList), - .tp_doc = PyDoc_STR("Topic entry") -}; - -PyTypeObject CFE_MissionLib_Python_TopicIteratorType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = CFE_MISSIONLIB_PYTHON_ENTITY_NAME("TopicIterator"), - .tp_basicsize = sizeof(CFE_MissionLib_Python_TopicIterator_t), - .tp_dealloc = CFE_MissionLib_Python_TopicIterator_dealloc, - .tp_getattro = PyObject_GenericGetAttr, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, - .tp_traverse = CFE_MissionLib_Python_TopicIterator_traverse, - .tp_clear = CFE_MissionLib_Python_TopicIterator_clear, - .tp_iter = PyObject_SelfIter, - .tp_iternext = CFE_MissionLib_Python_TopicIterator_iternext, - .tp_doc = PyDoc_STR("CFE MissionLib TopicIteratorType") -}; +PyTypeObject CFE_MissionLib_Python_TopicType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + CFE_MISSIONLIB_PYTHON_ENTITY_NAME("Topic"), + .tp_basicsize = sizeof(CFE_MissionLib_Python_Topic_t), + .tp_dealloc = CFE_MissionLib_Python_Topic_dealloc, + .tp_new = CFE_MissionLib_Python_Topic_new, + .tp_methods = CFE_MissionLib_Python_Topic_methods, + .tp_members = CFE_MissionLib_Python_Topic_members, + .tp_repr = CFE_MissionLib_Python_Topic_repr, + .tp_traverse = CFE_MissionLib_Python_Topic_traverse, + .tp_clear = CFE_MissionLib_Python_Topic_clear, + .tp_iter = CFE_MissionLib_Python_Topic_iter, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_weaklistoffset = + offsetof(CFE_MissionLib_Python_Topic_t, WeakRefList), + .tp_doc = PyDoc_STR("Topic entry") }; + +PyTypeObject CFE_MissionLib_Python_TopicIteratorType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + CFE_MISSIONLIB_PYTHON_ENTITY_NAME("TopicIterator"), + .tp_basicsize = sizeof(CFE_MissionLib_Python_TopicIterator_t), + .tp_dealloc = CFE_MissionLib_Python_TopicIterator_dealloc, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = CFE_MissionLib_Python_TopicIterator_traverse, + .tp_clear = CFE_MissionLib_Python_TopicIterator_clear, + .tp_iter = PyObject_SelfIter, + .tp_iternext = CFE_MissionLib_Python_TopicIterator_iternext, + .tp_doc = PyDoc_STR("CFE MissionLib TopicIteratorType") }; static int CFE_MissionLib_Python_Topic_traverse(PyObject *obj, visitproc visit, void *arg) { @@ -130,7 +127,7 @@ static int CFE_MissionLib_Python_Topic_clear(PyObject *obj) return 0; } -static void CFE_MissionLib_Python_Topic_dealloc(PyObject * obj) +static void CFE_MissionLib_Python_Topic_dealloc(PyObject *obj) { CFE_MissionLib_Python_Topic_t *self = (CFE_MissionLib_Python_Topic_t *)obj; Py_CLEAR(self->IntfObj); @@ -145,13 +142,14 @@ static void CFE_MissionLib_Python_Topic_dealloc(PyObject * obj) CFE_MissionLib_Python_TopicType.tp_base->tp_dealloc(obj); } -static CFE_MissionLib_Python_Topic_t *CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(PyTypeObject *obj, PyObject *intfobj, uint16_t TopicId) +static CFE_MissionLib_Python_Topic_t * +CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(PyTypeObject *obj, PyObject *intfobj, uint16_t TopicId) { CFE_MissionLib_Python_Interface_t *IntfObj = (CFE_MissionLib_Python_Interface_t *)intfobj; - CFE_MissionLib_Python_Topic_t *self = NULL; - char Buffer[128]; - int32_t Status; - PyObject *TopicIdVal; + CFE_MissionLib_Python_Topic_t *self = NULL; + char Buffer[128]; + int32_t Status; + PyObject *TopicIdVal; do { @@ -161,7 +159,9 @@ static CFE_MissionLib_Python_Topic_t *CFE_MissionLib_Python_Topic_GetFromTopicId break; } - self = (CFE_MissionLib_Python_Topic_t *)CFE_MissionLib_Python_GetFromCache(IntfObj->TopicCache, TopicIdVal, &CFE_MissionLib_Python_TopicType); + self = (CFE_MissionLib_Python_Topic_t *)CFE_MissionLib_Python_GetFromCache(IntfObj->TopicCache, + TopicIdVal, + &CFE_MissionLib_Python_TopicType); if (self != NULL) { if (TopicId == self->TopicId) @@ -175,7 +175,7 @@ static CFE_MissionLib_Python_Topic_t *CFE_MissionLib_Python_Topic_GetFromTopicId self = NULL; } - self = (CFE_MissionLib_Python_Topic_t*)obj->tp_alloc(obj, 0); + self = (CFE_MissionLib_Python_Topic_t *)obj->tp_alloc(obj, 0); if (self == NULL) { break; @@ -187,12 +187,18 @@ static CFE_MissionLib_Python_Topic_t *CFE_MissionLib_Python_Topic_GetFromTopicId Status = CFE_MissionLib_GetTopicInfo(IntfObj->DbObj->IntfDb, TopicId, &self->TopicInfo); if (Status != CFE_MISSIONLIB_SUCCESS) { - PyErr_Format(PyExc_RuntimeError, "Failure in CFE_MissionLib_GetTopicInfo(%d) rc=%d", (int)TopicId, (int)Status); + PyErr_Format(PyExc_RuntimeError, + "Failure in CFE_MissionLib_GetTopicInfo(%d) rc=%d", + (int)TopicId, + (int)Status); Py_CLEAR(self); break; } - Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->DbObj->IntfDb), self->TopicInfo.ParentIntfId, Buffer, sizeof(Buffer)); + Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(IntfObj->DbObj->IntfDb), + self->TopicInfo.ParentIntfId, + Buffer, + sizeof(Buffer)); if (Status != EDSLIB_SUCCESS) { /* Intf ID does not appear to be valid, this is not a valid topic ID */ @@ -202,29 +208,34 @@ static CFE_MissionLib_Python_Topic_t *CFE_MissionLib_Python_Topic_GetFromTopicId } self->TopicName = PyUnicode_FromFormat("%s", Buffer); - self->TopicId = TopicId; + self->TopicId = TopicId; /* All SB topics should map to an interface type with a single command on it */ - Status = EdsLib_IntfDB_FindAllArgumentTypes(CFE_MissionLib_GetParent(IntfObj->DbObj->IntfDb), IntfObj->CmdEdsId, - self->TopicInfo.ParentIntfId, &self->DataEdsId, 1); + Status = EdsLib_IntfDB_FindAllArgumentTypes(CFE_MissionLib_GetParent(IntfObj->DbObj->IntfDb), + IntfObj->CmdEdsId, + self->TopicInfo.ParentIntfId, + &self->DataEdsId, + 1); if (Status != EDSLIB_SUCCESS) { /* Unable to determine data type on this topic */ - PyErr_Format(PyExc_RuntimeError, "EdsLib_IntfDB_FindAllArgumentTypes(%x) rc=%d", (unsigned int)IntfObj->CmdEdsId, (int)Status); + PyErr_Format(PyExc_RuntimeError, + "EdsLib_IntfDB_FindAllArgumentTypes(%x) rc=%d", + (unsigned int)IntfObj->CmdEdsId, + (int)Status); Py_CLEAR(self); break; } /* Create a weak reference to store in the local cache in case this * database is constructed again. */ - if (CFE_MissionLib_Python_SaveToCache(IntfObj->TopicCache, TopicIdVal, (PyObject*)self) < 0) + if (CFE_MissionLib_Python_SaveToCache(IntfObj->TopicCache, TopicIdVal, (PyObject *)self) < 0) { /* if something went wrong this raises an error and must return NULL */ Py_DECREF(self); self = NULL; } - } - while(0); + } while (0); Py_XDECREF(TopicIdVal); return self; @@ -232,24 +243,25 @@ static CFE_MissionLib_Python_Topic_t *CFE_MissionLib_Python_Topic_GetFromTopicId static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *args, PyObject *kwds) { - PyObject *arg1; - PyObject *arg2; - PyObject *arg3; - PyObject *arg4 = NULL; - CFE_MissionLib_Python_Database_t *DbObj; + PyObject *arg1; + PyObject *arg2; + PyObject *arg3; + PyObject *arg4 = NULL; + CFE_MissionLib_Python_Database_t *DbObj; CFE_MissionLib_Python_Interface_t *IntfObj; - uint16_t TopicId = 0; // 0 is an invalid TopicId - EdsLib_Id_t CompIntfId; - uint16_t status; - PyObject *tempargs = NULL; - PyObject *result = NULL; + uint16_t TopicId = 0; // 0 is an invalid TopicId + EdsLib_Id_t CompIntfId; + uint16_t status; + PyObject *tempargs = NULL; + PyObject *result = NULL; /* * Topic entries are constructed from three values: * - An Interface Database * - An Interface Identifier * - A Topic Identifier - * - An EdsDb Python Object (only needed if Database associated with the Interface Database Identifier has not been set up) + * - An EdsDb Python Object (only needed if Database associated with the Interface Database Identifier has not + * been set up) * * Databases are natively of the CFE_MissionLib_Python_Database_t type * Interface Identifiers are indices which are natively unsigned integers (EdsLib_Id_t specifically) @@ -260,33 +272,37 @@ static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *ar */ if (!PyArg_UnpackTuple(args, "Topic_new", 3, 4, &arg1, &arg2, &arg3, &arg4)) { - PyErr_Format(PyExc_RuntimeError, "Topic arguments expected: Interface Database, Interface Identifier, Topic Identifier, and EdsDb Python Object (optional)"); - return NULL; + PyErr_Format(PyExc_RuntimeError, + "Topic arguments expected: Interface Database, Interface Identifier, Topic Identifier, and EdsDb " + "Python Object (optional)"); + return NULL; } do { - // Set up the Interface Database + // Set up the Interface Database if (Py_TYPE(arg1) == &CFE_MissionLib_Python_DatabaseType) { - DbObj = (CFE_MissionLib_Python_Database_t*)arg1; + DbObj = (CFE_MissionLib_Python_Database_t *)arg1; Py_INCREF(DbObj); } else { if (arg4 != NULL) { - tempargs = PyTuple_Pack(2, arg1, arg4); + tempargs = PyTuple_Pack(2, arg1, arg4); } else { - tempargs = PyTuple_Pack(2, arg1, Py_None); + tempargs = PyTuple_Pack(2, arg1, Py_None); } if (tempargs == NULL) { break; } - DbObj = (CFE_MissionLib_Python_Database_t*)PyObject_Call((PyObject*)&CFE_MissionLib_Python_DatabaseType, tempargs, NULL); + DbObj = (CFE_MissionLib_Python_Database_t *)PyObject_Call((PyObject *)&CFE_MissionLib_Python_DatabaseType, + tempargs, + NULL); Py_DECREF(tempargs); tempargs = NULL; } @@ -299,7 +315,7 @@ static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *ar // Set up the interface if (Py_TYPE(arg2) == &CFE_MissionLib_Python_InterfaceType) { - IntfObj = (CFE_MissionLib_Python_Interface_t*)arg2; + IntfObj = (CFE_MissionLib_Python_Interface_t *)arg2; Py_INCREF(IntfObj); } else @@ -309,7 +325,10 @@ static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *ar { break; } - IntfObj = (CFE_MissionLib_Python_Interface_t*)PyObject_Call((PyObject*)&CFE_MissionLib_Python_InterfaceType, tempargs, NULL); + IntfObj = + (CFE_MissionLib_Python_Interface_t *)PyObject_Call((PyObject *)&CFE_MissionLib_Python_InterfaceType, + tempargs, + NULL); Py_DECREF(tempargs); tempargs = NULL; } @@ -333,7 +352,9 @@ static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *ar else { // Set up the topic with either a TopicId or Topic Name - CompIntfId = CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_IntfDB_FindComponentInterfaceByFullName, CFE_MissionLib_GetParent(DbObj->IntfDb), arg3); + CompIntfId = CFE_MissionLib_Python_ConvertArgToEdsId(EdsLib_IntfDB_FindComponentInterfaceByFullName, + CFE_MissionLib_GetParent(DbObj->IntfDb), + arg3); /* if the lookup failed it should have already set an exception */ if (!EdsLib_Is_Valid(CompIntfId)) @@ -347,12 +368,12 @@ static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *ar PyErr_Format(PyExc_RuntimeError, "No TopicID maps to %s", PyBytes_AsString(tempargs)); break; } - } - result = (PyObject*)CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(&CFE_MissionLib_Python_TopicType, (PyObject *)IntfObj, TopicId); - } - while(0); + result = (PyObject *)CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(&CFE_MissionLib_Python_TopicType, + (PyObject *)IntfObj, + TopicId); + } while (0); /* decrement refcount for all temporary objects created */ Py_XDECREF(tempargs); @@ -363,18 +384,24 @@ static PyObject *CFE_MissionLib_Python_Topic_new(PyTypeObject *obj, PyObject *ar PyObject *CFE_MissionLib_Python_Topic_repr(PyObject *obj) { CFE_MissionLib_Python_Topic_t *self = (CFE_MissionLib_Python_Topic_t *)obj; - return PyUnicode_FromFormat("%s(%R,%R,%R)", obj->ob_type->tp_name, self->IntfObj->DbObj->DbName, self->IntfObj->IntfName, self->TopicName); + return PyUnicode_FromFormat("%s(%R,%R,%R)", + obj->ob_type->tp_name, + self->IntfObj->DbObj->DbName, + self->IntfObj->IntfName, + self->TopicName); } PyObject *CFE_MissionLib_Python_Topic_GetFromTopicName(CFE_MissionLib_Python_Interface_t *obj, PyObject *TopicName) { CFE_MissionLib_Python_Topic_t *TopicEntry; - int32_t status; - uint16_t TopicId; + int32_t status; + uint16_t TopicId; EdsLib_Id_t CompIntfId; - TopicEntry = (CFE_MissionLib_Python_Topic_t *)CFE_MissionLib_Python_GetFromCache(obj->TopicCache, TopicName, &CFE_MissionLib_Python_TopicType); + TopicEntry = (CFE_MissionLib_Python_Topic_t *)CFE_MissionLib_Python_GetFromCache(obj->TopicCache, + TopicName, + &CFE_MissionLib_Python_TopicType); if (TopicEntry != NULL) { if (TopicEntry->TopicName != TopicName) @@ -383,13 +410,14 @@ PyObject *CFE_MissionLib_Python_Topic_GetFromTopicName(CFE_MissionLib_Python_Int Py_DECREF(TopicEntry); TopicEntry = NULL; } - return (PyObject*)TopicEntry; + return (PyObject *)TopicEntry; } /* this is slightly more complicated; the name is actually associated with a component interface, - * and once that is found, then we need to reverse lookup that intf back to a topic ID */ + * and once that is found, then we need to reverse lookup that intf back to a topic ID */ status = EdsLib_IntfDB_FindComponentInterfaceByFullName(CFE_MissionLib_GetParent(obj->DbObj->IntfDb), - PyBytes_AsString(TopicName), &CompIntfId); + PyBytes_AsString(TopicName), + &CompIntfId); if (status != EDSLIB_SUCCESS) { PyErr_Format(PyExc_RuntimeError, "Component Intf %s not defined", PyBytes_AsString(TopicName)); @@ -403,41 +431,43 @@ PyObject *CFE_MissionLib_Python_Topic_GetFromTopicName(CFE_MissionLib_Python_Int return NULL; } - return (PyObject*)CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(&CFE_MissionLib_Python_TopicType, (PyObject *)obj, TopicId); + return (PyObject *)CFE_MissionLib_Python_Topic_GetFromTopicId_Impl(&CFE_MissionLib_Python_TopicType, + (PyObject *)obj, + TopicId); } -static PyObject * CFE_MissionLib_Python_Topic_iter(PyObject *obj) +static PyObject *CFE_MissionLib_Python_Topic_iter(PyObject *obj) { - CFE_MissionLib_Python_Topic_t *Topic = (CFE_MissionLib_Python_Topic_t *) obj; + CFE_MissionLib_Python_Topic_t *Topic = (CFE_MissionLib_Python_Topic_t *)obj; CFE_MissionLib_Python_TopicIterator_t *TopicIter; - PyObject *result = NULL; + PyObject *result = NULL; if (Topic->TopicInfo.NumSubcommands > 0) { - TopicIter = PyObject_GC_New(CFE_MissionLib_Python_TopicIterator_t, &CFE_MissionLib_Python_TopicIteratorType); + TopicIter = PyObject_GC_New(CFE_MissionLib_Python_TopicIterator_t, &CFE_MissionLib_Python_TopicIteratorType); - if (TopicIter == NULL) - { + if (TopicIter == NULL) + { return NULL; - } + } - Py_INCREF(obj); - TopicIter->Index = 0; - TopicIter->refobj = obj; + Py_INCREF(obj); + TopicIter->Index = 0; + TopicIter->refobj = obj; - result = (PyObject *)TopicIter; - PyObject_GC_Track(result); + result = (PyObject *)TopicIter; + PyObject_GC_Track(result); } else { - PyErr_Format(PyExc_RuntimeError, "Not an iterable Topic"); + PyErr_Format(PyExc_RuntimeError, "Not an iterable Topic"); } return result; } -static void CFE_MissionLib_Python_TopicIterator_dealloc(PyObject * obj) +static void CFE_MissionLib_Python_TopicIterator_dealloc(PyObject *obj) { - CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t*)obj; + CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t *)obj; PyObject_GC_UnTrack(self); Py_XDECREF(self->refobj); PyObject_GC_Del(self); @@ -445,7 +475,7 @@ static void CFE_MissionLib_Python_TopicIterator_dealloc(PyObject * obj) static int CFE_MissionLib_Python_TopicIterator_traverse(PyObject *obj, visitproc visit, void *arg) { - CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t*)obj; + CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t *)obj; Py_VISIT(self->refobj); return 0; @@ -453,7 +483,7 @@ static int CFE_MissionLib_Python_TopicIterator_traverse(PyObject *obj, visitproc static int CFE_MissionLib_Python_TopicIterator_clear(PyObject *obj) { - CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t*)obj; + CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t *)obj; Py_CLEAR(self->refobj); return 0; @@ -461,30 +491,30 @@ static int CFE_MissionLib_Python_TopicIterator_clear(PyObject *obj) static PyObject *CFE_MissionLib_Python_TopicIterator_iternext(PyObject *obj) { - CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t*)obj; - CFE_MissionLib_Python_Topic_t *topic = NULL; - const EdsLib_DatabaseObject_t *GD; - uint16_t idx; - EdsLib_Id_t PossibleId; - - PyObject *key = NULL; - PyObject *edsid = NULL; + CFE_MissionLib_Python_TopicIterator_t *self = (CFE_MissionLib_Python_TopicIterator_t *)obj; + CFE_MissionLib_Python_Topic_t *topic = NULL; + const EdsLib_DatabaseObject_t *GD; + uint16_t idx; + EdsLib_Id_t PossibleId; + + PyObject *key = NULL; + PyObject *edsid = NULL; PyObject *result = NULL; do { - if (self->refobj == NULL) + if (self->refobj == NULL) { break; } topic = (CFE_MissionLib_Python_Topic_t *)self->refobj; - GD = CFE_MissionLib_GetParent(topic->IntfObj->DbObj->IntfDb); - idx = self->Index; + GD = CFE_MissionLib_GetParent(topic->IntfObj->DbObj->IntfDb); + idx = self->Index; if (EdsLib_DataTypeDB_GetDerivedTypeById(GD, topic->DataEdsId, idx, &PossibleId) == EDSLIB_SUCCESS) { - key = PyUnicode_FromString(EdsLib_DisplayDB_GetBaseName(GD, PossibleId)); + key = PyUnicode_FromString(EdsLib_DisplayDB_GetBaseName(GD, PossibleId)); edsid = PyLong_FromLong((long int)PossibleId); if ((key == NULL) || (edsid == NULL)) @@ -496,8 +526,7 @@ static PyObject *CFE_MissionLib_Python_TopicIterator_iternext(PyObject *obj) ++self->Index; result = PyTuple_Pack(2, key, edsid); } - } - while(0); + } while (0); Py_XDECREF(key); Py_XDECREF(edsid); @@ -505,13 +534,15 @@ static PyObject *CFE_MissionLib_Python_TopicIterator_iternext(PyObject *obj) return result; } -void SubcommandCallback(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, - EdsLib_GenericValueBuffer_t *ConstraintValue, void *Arg) +void SubcommandCallback(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, + EdsLib_GenericValueBuffer_t *ConstraintValue, + void *Arg) { - CbArg_t *Argument = (CbArg_t *) Arg; + CbArg_t *Argument = (CbArg_t *)Arg; - if (MemberInfo->Offset.Bytes == offsetof(EdsDataType_CFE_HDR_CommandHeader_t, Sec.FunctionCode) && - ConstraintValue->Value.u8 == Argument->CommandCode) + if (MemberInfo->Offset.Bytes == offsetof(EdsDataType_CFE_HDR_CommandHeader_t, Sec.FunctionCode) + && ConstraintValue->Value.u8 == Argument->CommandCode) { Argument->EdsId = Argument->PossibleId; } @@ -519,15 +550,15 @@ void SubcommandCallback(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataType static PyObject *CFE_MissionLib_Python_Topic_GetCmdEdsIdFromCode(PyObject *obj, PyObject *args) { - CFE_MissionLib_Python_Topic_t *self = (CFE_MissionLib_Python_Topic_t*) obj; + CFE_MissionLib_Python_Topic_t *self = (CFE_MissionLib_Python_Topic_t *)obj; const EdsLib_DatabaseObject_t *GD; - PyObject *arg1; - uint8_t CommandCode; - int32_t idx; - EdsLib_Id_t PossibleId; - EdsLib_ConstraintCallback_t Callback = SubcommandCallback; - CbArg_t Argument; - PyObject *result = NULL; + PyObject *arg1; + uint8_t CommandCode; + int32_t idx; + EdsLib_Id_t PossibleId; + EdsLib_ConstraintCallback_t Callback = SubcommandCallback; + CbArg_t Argument; + PyObject *result = NULL; do { @@ -550,7 +581,7 @@ static PyObject *CFE_MissionLib_Python_Topic_GetCmdEdsIdFromCode(PyObject *obj, GD = CFE_MissionLib_GetParent(self->IntfObj->DbObj->IntfDb); Argument.CommandCode = CommandCode; - Argument.EdsId = EDSLIB_ID_INVALID; + Argument.EdsId = EDSLIB_ID_INVALID; for (idx = 0; idx < self->TopicInfo.NumSubcommands && !EdsLib_Is_Valid(Argument.EdsId); idx++) { @@ -561,14 +592,14 @@ static PyObject *CFE_MissionLib_Python_Topic_GetCmdEdsIdFromCode(PyObject *obj, if (EdsLib_Is_Valid(Argument.EdsId)) { - result = PyLong_FromLong((long int) Argument.EdsId); + result = PyLong_FromLong((long int)Argument.EdsId); } else { result = Py_None; Py_INCREF(result); } - } while(0); + } while (0); return result; } diff --git a/cfecfs/scriptengine/fsw/src/scriptengine.c b/cfecfs/scriptengine/fsw/src/scriptengine.c index 943bb26..9615070 100644 --- a/cfecfs/scriptengine/fsw/src/scriptengine.c +++ b/cfecfs/scriptengine/fsw/src/scriptengine.c @@ -43,7 +43,7 @@ #include "cfe_missionlib_lua_softwarebus.h" /* HACK - this is passed direct to Lua, so it must be a native path, not an OSAL path */ -#define SCRIPTENGINE_TESTFILE "./cf/testscript.lua" +#define SCRIPTENGINE_TESTFILE "./cf/testscript.lua" #define SCRIPTENGINE_ERRHANDLER_IDX 1 SCRIPTENGINE_Global_t SCRIPTENGINE_Global; @@ -78,7 +78,8 @@ static void *SCRIPTENGINE_NewEdsObjectBase(lua_State *lua, EdsLib_Id_t EdsId, si return DescObj; } -static EdsLib_Binding_DescriptorObject_t *SCRIPTENGINE_NewEdsObjectWrapper(lua_State *lua, EdsLib_Id_t EdsId, void *DataPtr) +static EdsLib_Binding_DescriptorObject_t * +SCRIPTENGINE_NewEdsObjectWrapper(lua_State *lua, EdsLib_Id_t EdsId, void *DataPtr) { struct ContentWrapper { @@ -94,7 +95,8 @@ static EdsLib_Binding_DescriptorObject_t *SCRIPTENGINE_NewEdsObjectWrapper(lua_S return &ObjectUserData->DescObj; } -static EdsLib_Binding_DescriptorObject_t *SCRIPTENGINE_NewEdsObjectWithContent(lua_State *lua, EdsLib_Id_t EdsId, size_t MaxContentSize) +static EdsLib_Binding_DescriptorObject_t * +SCRIPTENGINE_NewEdsObjectWithContent(lua_State *lua, EdsLib_Id_t EdsId, size_t MaxContentSize) { struct ContentWrapper { @@ -103,7 +105,10 @@ static EdsLib_Binding_DescriptorObject_t *SCRIPTENGINE_NewEdsObjectWithContent(l EdsLib_GenericValueUnion_t ContentStart; } *ObjectUserData; - ObjectUserData = SCRIPTENGINE_NewEdsObjectBase(lua, EdsId, sizeof(struct ContentWrapper) + MaxContentSize - sizeof(EdsLib_GenericValueUnion_t)); + ObjectUserData = SCRIPTENGINE_NewEdsObjectBase(lua, + EdsId, + sizeof(struct ContentWrapper) + MaxContentSize + - sizeof(EdsLib_GenericValueUnion_t)); EdsLib_Binding_InitUnmanagedBuffer(&ObjectUserData->BufObj, &ObjectUserData->ContentStart, MaxContentSize); EdsLib_Binding_SetDescBuffer(&ObjectUserData->DescObj, &ObjectUserData->BufObj); @@ -113,7 +118,7 @@ static EdsLib_Binding_DescriptorObject_t *SCRIPTENGINE_NewEdsObjectWithContent(l static int SCRIPTENGINE_SendMsg(lua_State *lua) { - void *ObjPtr; + void *ObjPtr; size_t ObjSize; EdsLib_LuaBinding_GetNativeObject(lua, 1, &ObjPtr, &ObjSize); @@ -128,8 +133,8 @@ static int SCRIPTENGINE_SendMsg(lua_State *lua) static int SCRIPTENGINE_CreatePipe(lua_State *lua) { - lua_Integer Depth = luaL_checkinteger(lua, 1); - const char *PipeName = luaL_checkstring(lua, 2); + lua_Integer Depth = luaL_checkinteger(lua, 1); + const char *PipeName = luaL_checkstring(lua, 2); CFE_SB_PipeId_t *PipeObj; PipeObj = lua_newuserdata(lua, sizeof(*PipeObj)); @@ -157,22 +162,21 @@ static int SCRIPTENGINE_DeletePipe(lua_State *lua) return 0; } - static int SCRIPTENGINE_WaitFor(lua_State *lua) { CFE_MissionLib_Lua_Interface_Userdata_t *IntfObj = luaL_checkudata(lua, 1, "CFE_MissionLib_Lua_Interface"); - CFE_SB_PipeId_t *PipeObj = luaL_checkudata(lua, 2, "CFE_SB_PipeId"); - lua_Integer timeout = luaL_optinteger(lua, 3, 1000); + CFE_SB_PipeId_t *PipeObj = luaL_checkudata(lua, 2, "CFE_SB_PipeId"); + lua_Integer timeout = luaL_optinteger(lua, 3, 1000); EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; - CFE_SB_Buffer_t *BufPtr; - CFE_MSG_Size_t MsgSize; - EdsLib_Binding_DescriptorObject_t *ObjectUserData; + CFE_SB_Buffer_t *BufPtr; + CFE_MSG_Size_t MsgSize; + EdsLib_Binding_DescriptorObject_t *ObjectUserData; EdsLib_DataTypeDB_DerivativeObjectInfo_t DerivObjInfo; - int32 RcvStatus; - void *LuaObj; - int nret; + int32 RcvStatus; + void *LuaObj; + int nret; - nret = 0; + nret = 0; BufPtr = NULL; /* Map the Intf to a MsgID */ @@ -199,14 +203,15 @@ static int SCRIPTENGINE_WaitFor(lua_State *lua) if (RcvStatus == CFE_SUCCESS) { CFE_MSG_GetSize(&BufPtr->Msg, &MsgSize); - if (EdsLib_DataTypeDB_IdentifyBuffer(&EDS_DATABASE, IntfObj->IndicationBaseArg, BufPtr, &DerivObjInfo) != EDSLIB_SUCCESS) + if (EdsLib_DataTypeDB_IdentifyBuffer(&EDS_DATABASE, IntfObj->IndicationBaseArg, BufPtr, &DerivObjInfo) + != EDSLIB_SUCCESS) { /* This is OK and may mean that the object simply isn't derived; use the original type */ DerivObjInfo.EdsId = IntfObj->IndicationBaseArg; } ObjectUserData = SCRIPTENGINE_NewEdsObjectWithContent(lua, DerivObjInfo.EdsId, MsgSize); - LuaObj = EdsLib_Binding_GetNativeObject(ObjectUserData); + LuaObj = EdsLib_Binding_GetNativeObject(ObjectUserData); if (LuaObj != NULL) { @@ -216,11 +221,11 @@ static int SCRIPTENGINE_WaitFor(lua_State *lua) } /* - * Now release the reference by calling to CFE_SB_ReceiveBuffer() on the same pipe. - * Problem is, this will also return the next message if the pipe is not empty. So - * this needs to be done in a loop until it is empty. But that will likely be the - * case on the first call since nothing is supposed to be subscribed right now. - */ + * Now release the reference by calling to CFE_SB_ReceiveBuffer() on the same pipe. + * Problem is, this will also return the next message if the pipe is not empty. So + * this needs to be done in a loop until it is empty. But that will likely be the + * case on the first call since nothing is supposed to be subscribed right now. + */ while (CFE_SB_ReceiveBuffer(&BufPtr, *PipeObj, CFE_SB_POLL) == CFE_SUCCESS) { /* do nothing, just repeat */ @@ -263,8 +268,6 @@ static void SCRIPTENGINE_Setup(lua_State *lua) } lua_pop(lua, 1); - - lua_newtable(lua); lua_pushstring(lua, "SendMsg"); lua_pushcfunction(lua, SCRIPTENGINE_SendMsg); @@ -278,10 +281,8 @@ static void SCRIPTENGINE_Setup(lua_State *lua) lua_pushcfunction(lua, SCRIPTENGINE_WaitFor); lua_settable(lua, -3); - lua_setglobal(lua, "CFE"); - /* Stack index 1 will be the error handler function (used for protected calls) */ /* This can just sit there at the bottom of the stack, useful for when pcall() is used later */ lua_pushcfunction(lua, SCRIPTENGINE_ErrorHandler); @@ -321,14 +322,14 @@ static int32 SCRIPTENGINE_DoLoad(lua_State *lua, const char *Filename) static int32 SCRIPTENGINE_DoCall(lua_State *lua, const char *Function, void *ArgData, EdsLib_Id_t ArgEdsId) { - int stack_top; - int nargs; - int32 status; + int stack_top; + int nargs; + int32 status; EdsLib_Binding_DescriptorObject_t *ObjectUserData; - nargs = 0; + nargs = 0; ObjectUserData = NULL; - stack_top = lua_gettop(lua); + stack_top = lua_gettop(lua); lua_getglobal(lua, Function); @@ -358,7 +359,6 @@ static int32 SCRIPTENGINE_DoCall(lua_State *lua, const char *Function, void *Arg EdsLib_Binding_SetDescBuffer(ObjectUserData, NULL); } - /* Always return the stack to where it was */ lua_settop(lua, stack_top); diff --git a/cfecfs/scriptengine/fsw/src/scriptengine_internal.h b/cfecfs/scriptengine/fsw/src/scriptengine_internal.h index c8f412d..170a267 100644 --- a/cfecfs/scriptengine/fsw/src/scriptengine_internal.h +++ b/cfecfs/scriptengine/fsw/src/scriptengine_internal.h @@ -28,7 +28,6 @@ #include - /************************************************************************* ** Macro Definitions *************************************************************************/ diff --git a/cfecfs/testexecutive/inc/testexec.h b/cfecfs/testexecutive/inc/testexec.h index 445a246..46088c8 100644 --- a/cfecfs/testexecutive/inc/testexec.h +++ b/cfecfs/testexecutive/inc/testexec.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file testexec.h * \ingroup testexecutive @@ -30,10 +29,8 @@ #ifndef _TESTEXEC_H_ #define _TESTEXEC_H_ - int TestIntf_Udp_Create(struct lua_State *lua); int TestIntf_Remote_Create(struct lua_State *lua); int TestIntf_GetFactory(struct lua_State *lua); -#endif /* _TESTEXEC_H_ */ - +#endif /* _TESTEXEC_H_ */ diff --git a/cfecfs/testexecutive/modules/ci_to_lab_interface.c b/cfecfs/testexecutive/modules/ci_to_lab_interface.c index 26788eb..840fd26 100644 --- a/cfecfs/testexecutive/modules/ci_to_lab_interface.c +++ b/cfecfs/testexecutive/modules/ci_to_lab_interface.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file ci_to_lab_interface.c * \ingroup testexecutive @@ -53,34 +52,32 @@ #include "testexec.h" #include "to_lab_eds_datatypes.h" -#define TO_LAB_BASE_PORT 2234 -#define CI_LAB_BASE_PORT 1234 - -#define UDP_NET_BUFFER_SIZE 8192 +#define TO_LAB_BASE_PORT 2234 +#define CI_LAB_BASE_PORT 1234 +#define UDP_NET_BUFFER_SIZE 8192 typedef struct { EdsInterface_CFE_SB_SoftwareBus_PubSub_t TargetApp; - struct sockaddr_in LocalAddr; - struct sockaddr_in TargetAddr; - struct timespec InterPacketDelay; - int SocketId; - luaL_Buffer TempBuf; + struct sockaddr_in LocalAddr; + struct sockaddr_in TargetAddr; + struct timespec InterPacketDelay; + int SocketId; + luaL_Buffer TempBuf; } TestIntf_CI_TO_LAB_Connection_t; static int TestIntf_CI_TO_LAB_Send(lua_State *lua) { - TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - const char *Data = luaL_checkstring(lua, 2); - uint32_t DataLength = lua_rawlen(lua, 2); + TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); + const char *Data = luaL_checkstring(lua, 2); + uint32_t DataLength = lua_rawlen(lua, 2); - printf("%s():\n",__func__); - EdsLib_Generate_Hexdump(stdout, (const uint8_t*)Data, 0, DataLength); + printf("%s():\n", __func__); + EdsLib_Generate_Hexdump(stdout, (const uint8_t *)Data, 0, DataLength); printf("\n"); - sendto(Conn->SocketId, Data, DataLength, 0, - (struct sockaddr *)&Conn->TargetAddr, sizeof(Conn->TargetAddr)); + sendto(Conn->SocketId, Data, DataLength, 0, (struct sockaddr *)&Conn->TargetAddr, sizeof(Conn->TargetAddr)); clock_nanosleep(CLOCK_REALTIME, 0, &Conn->InterPacketDelay, NULL); @@ -89,17 +86,17 @@ static int TestIntf_CI_TO_LAB_Send(lua_State *lua) static int TestIntf_CI_TO_LAB_Wait(lua_State *lua) { - TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - int32_t Timeout = luaL_optinteger(lua, 2, -1); - fd_set rdfd; - struct timeval tv; - struct timeval *ptv; + TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); + int32_t Timeout = luaL_optinteger(lua, 2, -1); + fd_set rdfd; + struct timeval tv; + struct timeval *ptv; if (Timeout >= 0) { - tv.tv_sec = Timeout / 1000; + tv.tv_sec = Timeout / 1000; tv.tv_usec = 1000 * (Timeout % 1000); - ptv = &tv; + ptv = &tv; } else { @@ -124,14 +121,13 @@ static int TestIntf_CI_TO_LAB_Wait(lua_State *lua) static int TestIntf_CI_TO_LAB_Poll(lua_State *lua) { TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - ssize_t Length; + ssize_t Length; lua_pushstring(lua, "Message"); luaL_buffinit(lua, &Conn->TempBuf); - Length = recv(Conn->SocketId, - luaL_prepbuffsize(&Conn->TempBuf, UDP_NET_BUFFER_SIZE), - UDP_NET_BUFFER_SIZE, MSG_DONTWAIT); + Length = + recv(Conn->SocketId, luaL_prepbuffsize(&Conn->TempBuf, UDP_NET_BUFFER_SIZE), UDP_NET_BUFFER_SIZE, MSG_DONTWAIT); if (Length <= 0) { @@ -160,7 +156,6 @@ static int TestIntf_CI_TO_LAB_CheckSubscribeEvent(lua_State *lua) return 0; } - lua_getfield(lua, 3, "EventID"); lua_call(lua, 0, 1); @@ -180,22 +175,22 @@ static int TestIntf_CI_TO_LAB_DoSubscription(lua_State *lua) luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); lua_settop(lua, 3); - lua_getglobal(lua, "EdsDB"); /* top@ 4 */ - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Send); /* top@ 5 */ - lua_pushvalue(lua, 1); /* top@ 6 */ - lua_getfield(lua, 4, "Encode"); /* top@ 7 */ - lua_getfield(lua, 4, "NewMessage"); /* top@ 8 */ + lua_getglobal(lua, "EdsDB"); /* top@ 4 */ + lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Send); /* top@ 5 */ + lua_pushvalue(lua, 1); /* top@ 6 */ + lua_getfield(lua, 4, "Encode"); /* top@ 7 */ + lua_getfield(lua, 4, "NewMessage"); /* top@ 8 */ - lua_getuservalue(lua, 1); /* top@ 9 */ - lua_getfield(lua, -1, "Interface"); /* top@ 10 */ - lua_remove(lua, -2); /* uservalue, leave interface object @9 */ + lua_getuservalue(lua, 1); /* top@ 9 */ + lua_getfield(lua, -1, "Interface"); /* top@ 10 */ + lua_remove(lua, -2); /* uservalue, leave interface object @9 */ /* Push the operation type - this is either "AddPacket" (subscribe) or "RemovePacket" (unsubscribe) */ - lua_pushvalue(lua, lua_upvalueindex(1)); /* top@ 10 */ + lua_pushvalue(lua, lua_upvalueindex(1)); /* top@ 10 */ IsSubscribe = (strcmp(lua_tostring(lua, -1), "AddPacket") == 0); - lua_call(lua, 2, 1); /* Call EdsDB.NewMessage(intf, command) - result @8 */ + lua_call(lua, 2, 1); /* Call EdsDB.NewMessage(intf, command) - result @8 */ - lua_getfield(lua, -1, "Payload"); /* Payload @9 */ + lua_getfield(lua, -1, "Payload"); /* Payload @9 */ lua_pushinteger(lua, 5); lua_setfield(lua, -2, "BufLimit"); @@ -216,19 +211,19 @@ static int TestIntf_CI_TO_LAB_DoSubscription(lua_State *lua) lua_setfield(lua, 9, "MsgId"); lua_pop(lua, 1); - lua_call(lua, 1, 1); /* Call EdsDB.Encode(msg) - result@ 7 */ + lua_call(lua, 1, 1); /* Call EdsDB.Encode(msg) - result@ 7 */ /* Send the subscription/unsubscription message via the normal Send() function */ - lua_call(lua, 2, 0); /* Call TestIntf_CI_TO_LAB_Send() - top@ 4 */ + lua_call(lua, 2, 0); /* Call TestIntf_CI_TO_LAB_Send() - top@ 4 */ /* * On subscribe requests, it should delay until the subscription takes effect. * Return a wait table value that specifies to wait for CFE_EVS EVENTMSG * further specify a callback function that looks specifically for TO_LAB_APP event 15 (subscribe) */ - lua_getuservalue(lua, 1); /* top@ 5 */ - lua_newtable(lua); /* top@ 6 */ - lua_newtable(lua); /* top@ 7 */ + lua_getuservalue(lua, 1); /* top@ 5 */ + lua_newtable(lua); /* top@ 6 */ + lua_newtable(lua); /* top@ 7 */ lua_getfield(lua, 5, "EventIntf"); lua_setfield(lua, 7, "Interface"); @@ -238,7 +233,7 @@ static int TestIntf_CI_TO_LAB_DoSubscription(lua_State *lua) */ if (IsSubscribe) { - lua_pushinteger(lua, 15); /* subscribe event id */ + lua_pushinteger(lua, 15); /* subscribe event id */ } else { @@ -268,12 +263,12 @@ static int TestIntf_CI_TO_LAB_Destroy(lua_State *lua) int TestIntf_CI_TO_LAB_Create(lua_State *lua) { - uint16_t TargetNum = luaL_checkinteger(lua, 1); - uint16_t LocalPort = 0; - uint16_t TargetPort = 0; - uint32_t InterPacketDelay = 25; - const char *LocalIP = NULL; - const char *TargetIP = NULL; + uint16_t TargetNum = luaL_checkinteger(lua, 1); + uint16_t LocalPort = 0; + uint16_t TargetPort = 0; + uint32_t InterPacketDelay = 25; + const char *LocalIP = NULL; + const char *TargetIP = NULL; TestIntf_CI_TO_LAB_Connection_t *Conn; if (lua_isstring(lua, 2)) @@ -382,10 +377,10 @@ int TestIntf_CI_TO_LAB_Create(lua_State *lua) return luaL_error(lua, "Error opening socket: %s", strerror(errno)); } - Conn->InterPacketDelay.tv_sec = InterPacketDelay / 1000; + Conn->InterPacketDelay.tv_sec = InterPacketDelay / 1000; Conn->InterPacketDelay.tv_nsec = 1000000 * (InterPacketDelay % 1000); - Conn->LocalAddr.sin_family = AF_INET; - Conn->TargetAddr.sin_family = AF_INET; + Conn->LocalAddr.sin_family = AF_INET; + Conn->TargetAddr.sin_family = AF_INET; if (inet_pton(AF_INET, TargetIP, &Conn->TargetAddr.sin_addr) <= 0) { return luaL_argerror(lua, 2, "Invalid target IP address"); @@ -395,7 +390,7 @@ int TestIntf_CI_TO_LAB_Create(lua_State *lua) return luaL_argerror(lua, 2, "Invalid local IP address"); } - Conn->LocalAddr.sin_port = htons(LocalPort); + Conn->LocalAddr.sin_port = htons(LocalPort); Conn->TargetAddr.sin_port = htons(TargetPort); if (bind(Conn->SocketId, (struct sockaddr *)&Conn->LocalAddr, sizeof(Conn->LocalAddr)) < 0) @@ -403,14 +398,14 @@ int TestIntf_CI_TO_LAB_Create(lua_State *lua) return luaL_error(lua, "Failed to bind: %s", strerror(errno)); } - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Send); /* top@ 6 */ - lua_getglobal(lua, "EdsDB"); /* top@ 7 */ + lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Send); /* top@ 6 */ + lua_getglobal(lua, "EdsDB"); /* top@ 7 */ lua_getfield(lua, -1, "Encode"); lua_getfield(lua, -2, "NewMessage"); lua_getfield(lua, -3, "GetInterface"); - lua_pushvalue(lua, 5); /* Connection object - top@ 11 */ - lua_replace(lua, 7); /* Replace the EdsDB object @7 - top @10 */ + lua_pushvalue(lua, 5); /* Connection object - top@ 11 */ + lua_replace(lua, 7); /* Replace the EdsDB object @7 - top @10 */ /* * Top of Lua stack should currently be arranged as follows: @@ -426,41 +421,41 @@ int TestIntf_CI_TO_LAB_Create(lua_State *lua) * Create a table to use as the uservalue and set this as the "Interface" field in it. * The CFE_EVS "EVENT_MSG" interface is relevant to check for subscription events. */ - lua_newtable(lua); /* top @11 */ - lua_pushvalue(lua, -2); /* GetInterface function - top@ 12 */ - lua_pushstring(lua, "CFE_EVS/Application/EVENT_MSG"); /* top@ 13 */ - lua_call(lua, 1, 1); /* Call GetInterface("CFE_EVS/Application/EVENT_MSG") - result@ 12 */ + lua_newtable(lua); /* top @11 */ + lua_pushvalue(lua, -2); /* GetInterface function - top@ 12 */ + lua_pushstring(lua, "CFE_EVS/Application/EVENT_MSG"); /* top@ 13 */ + lua_call(lua, 1, 1); /* Call GetInterface("CFE_EVS/Application/EVENT_MSG") - result@ 12 */ if (lua_type(lua, -1) != LUA_TUSERDATA) { return luaL_error(lua, "Unknown interface \'CFE_EVS/Application/EVENT_MSG\'"); } - lua_setfield(lua, -2, "EventIntf"); /* Set object as the "EventIntf" field within the table - top@ 11 */ - lua_pushvalue(lua, -2); /* GetInterface function - top@ 12 */ - lua_pushstring(lua, "TO_LAB/Application/CMD"); /* top@ 13 */ - lua_call(lua, 1, 1); /* Call GetInterface("TO_LAB/Application/CMD") - result@ 12 */ + lua_setfield(lua, -2, "EventIntf"); /* Set object as the "EventIntf" field within the table - top@ 11 */ + lua_pushvalue(lua, -2); /* GetInterface function - top@ 12 */ + lua_pushstring(lua, "TO_LAB/Application/CMD"); /* top@ 13 */ + lua_call(lua, 1, 1); /* Call GetInterface("TO_LAB/Application/CMD") - result@ 12 */ if (lua_type(lua, -1) != LUA_TUSERDATA) { return luaL_error(lua, "Unknown interface \'TO_LAB/Application/CMD\'"); } - lua_pushvalue(lua, -1); /* save a copy of the intf for next call to NewMessage */ + lua_pushvalue(lua, -1); /* save a copy of the intf for next call to NewMessage */ lua_replace(lua, 10); - lua_setfield(lua, -2, "Interface"); /* Set object as the "Interface" field within the table - top@ 11 */ - lua_setuservalue(lua, 7); /* Set the table as the uservalue for the returned object - top@ 10 */ + lua_setfield(lua, -2, "Interface"); /* Set object as the "Interface" field within the table - top@ 11 */ + lua_setuservalue(lua, 7); /* Set the table as the uservalue for the returned object - top@ 10 */ /* * Create an "OutputEnable" message based on the interface */ - lua_pushstring(lua, "EnableOutput"); /* top@ 11 */ - lua_call(lua, 2, 1); /* Call NewMessage(intf, "OutputEnable") - result@ 9 */ + lua_pushstring(lua, "EnableOutput"); /* top@ 11 */ + lua_call(lua, 2, 1); /* Call NewMessage(intf, "OutputEnable") - result@ 9 */ /* Set the Payload.dest_IP member to be the value specified by LocalIP */ - lua_getfield(lua, -1, "Payload"); /* top@ 10 */ - lua_pushstring(lua, LocalIP); /* top@ 11 */ - lua_setfield(lua, -2, "dest_IP"); /* top@ 10 */ - lua_pop(lua, 1); /* top@ 9 */ + lua_getfield(lua, -1, "Payload"); /* top@ 10 */ + lua_pushstring(lua, LocalIP); /* top@ 11 */ + lua_setfield(lua, -2, "dest_IP"); /* top@ 10 */ + lua_pop(lua, 1); /* top@ 9 */ - lua_call(lua, 1, 1); /* Call Encode(msg) - result@ 8 */ - lua_call(lua, 2, 0); /* Call TestIntf_CI_TO_LAB_Send(msg) - no return value - top@ 5 */ + lua_call(lua, 1, 1); /* Call Encode(msg) - result@ 8 */ + lua_call(lua, 2, 0); /* Call TestIntf_CI_TO_LAB_Send(msg) - no return value - top@ 5 */ /* Stack top should be back at 5 (the connection object) */ diff --git a/cfecfs/testexecutive/modules/remote_interface.c b/cfecfs/testexecutive/modules/remote_interface.c index 8f41a79..c3bc4e9 100644 --- a/cfecfs/testexecutive/modules/remote_interface.c +++ b/cfecfs/testexecutive/modules/remote_interface.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file remote_interface.c * \ingroup testexecutive @@ -54,17 +53,17 @@ #include "cfe_missionlib_lua_softwarebus.h" /* Size to use for ring buffer - keep as power of 2 for masking */ -#define REMOTE_BUFFER_SIZE 0x8000 -#define REMOTE_BUFFER_MASK 0x7FFF -#define SEND_BUFFER_SIZE 0x4000 +#define REMOTE_BUFFER_SIZE 0x8000 +#define REMOTE_BUFFER_MASK 0x7FFF +#define SEND_BUFFER_SIZE 0x4000 typedef struct { - pid_t pid; - int InFd; - int OutFd; - char SendBuffer[SEND_BUFFER_SIZE]; - char RecvBuffer[REMOTE_BUFFER_SIZE]; + pid_t pid; + int InFd; + int OutFd; + char SendBuffer[SEND_BUFFER_SIZE]; + char RecvBuffer[REMOTE_BUFFER_SIZE]; size_t RecvBufWrPos; size_t RecvBufChkPos; size_t RecvBufRdPos; @@ -96,68 +95,68 @@ static void TestIntf_Poll_Subprocess(TestIntf_RemoteConnection_t *Conn) static int TestIntf_Remote_ObjToString(lua_State *lua) { - switch(lua_type(lua, 1)) - { - case LUA_TSTRING: - { - /* - * Note this string could contain embedded special chars (including nulls) - * as well as newlines and other binary data which will throw off the parser. - * To be safe all strings will be base64 encoded. It will increase the length - * by 4/3 but it will be guaranteed to get through intact. - */ - const uint8_t *Data = (const uint8_t *)lua_tostring(lua, 1); - uint32_t DataLength = 8 * lua_rawlen(lua, 1); - uint32_t EncodedLength = (DataLength + 32) / 6; - char *Block; - luaL_Buffer Buf; - - luaL_buffinit(lua, &Buf); - luaL_addstring(&Buf, "Base64("); - lua_pushinteger(lua, DataLength); - luaL_addvalue(&Buf); - luaL_addstring(&Buf, ",\""); - Block = luaL_prepbuffsize(&Buf, EncodedLength); - EdsLib_DisplayDB_Base64Encode(Block, EncodedLength, Data, DataLength); - luaL_addsize(&Buf, strlen(Block)); - luaL_addstring(&Buf, "\")"); - luaL_pushresult(&Buf); - break; - } - case LUA_TNUMBER: - case LUA_TBOOLEAN: - { - luaL_tolstring(lua, 1, NULL); - break; - } - case LUA_TTABLE: + switch (lua_type(lua, 1)) { - lua_pushstring(lua, "{"); - lua_pushnil(lua); - while(lua_next(lua, 1)) + case LUA_TSTRING: { - if (lua_checkstack(lua, 3) && lua_type(lua, -2) == LUA_TSTRING) - { - lua_pushcfunction(lua, TestIntf_Remote_ObjToString); - lua_insert(lua, -2); - lua_call(lua, 1, 1); - lua_pushstring(lua, "="); - lua_insert(lua, -2); - lua_pushstring(lua, ","); - lua_pushvalue(lua, -4); - } + /* + * Note this string could contain embedded special chars (including nulls) + * as well as newlines and other binary data which will throw off the parser. + * To be safe all strings will be base64 encoded. It will increase the length + * by 4/3 but it will be guaranteed to get through intact. + */ + const uint8_t *Data = (const uint8_t *)lua_tostring(lua, 1); + uint32_t DataLength = 8 * lua_rawlen(lua, 1); + uint32_t EncodedLength = (DataLength + 32) / 6; + char *Block; + luaL_Buffer Buf; + + luaL_buffinit(lua, &Buf); + luaL_addstring(&Buf, "Base64("); + lua_pushinteger(lua, DataLength); + luaL_addvalue(&Buf); + luaL_addstring(&Buf, ",\""); + Block = luaL_prepbuffsize(&Buf, EncodedLength); + EdsLib_DisplayDB_Base64Encode(Block, EncodedLength, Data, DataLength); + luaL_addsize(&Buf, strlen(Block)); + luaL_addstring(&Buf, "\")"); + luaL_pushresult(&Buf); + break; } - if (lua_gettop(lua) > 2) + case LUA_TNUMBER: + case LUA_TBOOLEAN: { - lua_pop(lua, 1); + luaL_tolstring(lua, 1, NULL); + break; } - lua_pushstring(lua, "}"); - lua_concat(lua, lua_gettop(lua) - 1); - break; - } - default: - lua_pushstring(lua, "nil"); - break; + case LUA_TTABLE: + { + lua_pushstring(lua, "{"); + lua_pushnil(lua); + while (lua_next(lua, 1)) + { + if (lua_checkstack(lua, 3) && lua_type(lua, -2) == LUA_TSTRING) + { + lua_pushcfunction(lua, TestIntf_Remote_ObjToString); + lua_insert(lua, -2); + lua_call(lua, 1, 1); + lua_pushstring(lua, "="); + lua_insert(lua, -2); + lua_pushstring(lua, ","); + lua_pushvalue(lua, -4); + } + } + if (lua_gettop(lua) > 2) + { + lua_pop(lua, 1); + } + lua_pushstring(lua, "}"); + lua_concat(lua, lua_gettop(lua) - 1); + break; + } + default: + lua_pushstring(lua, "nil"); + break; } return 1; @@ -166,11 +165,11 @@ static int TestIntf_Remote_ObjToString(lua_State *lua) static int TestIntf_Remote_DoAction(lua_State *lua) { TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - char *BufPtr; - size_t BufLen; - ssize_t wrsz; - int narg; - int idx; + char *BufPtr; + size_t BufLen; + ssize_t wrsz; + int narg; + int idx; TestIntf_Poll_Subprocess(Conn); if (Conn->OutFd < 0) @@ -178,8 +177,8 @@ static int TestIntf_Remote_DoAction(lua_State *lua) return luaL_error(lua, "Remote subprocess not running"); } - BufLen = snprintf(Conn->SendBuffer, sizeof(Conn->SendBuffer), "DoAction(\"%s\"", - lua_tostring(lua, lua_upvalueindex(1))); + BufLen = + snprintf(Conn->SendBuffer, sizeof(Conn->SendBuffer), "DoAction(\"%s\"", lua_tostring(lua, lua_upvalueindex(1))); if (BufLen < sizeof(Conn->SendBuffer)) { @@ -203,8 +202,8 @@ static int TestIntf_Remote_DoAction(lua_State *lua) * for subsequent args we need to replace this with a comma separator. */ *(BufPtr - 1) = ','; - BufLen = BufPtr - Conn->SendBuffer; - BufPtr = memccpy(BufPtr, lua_tostring(lua, -1), 0, sizeof(Conn->SendBuffer) - BufLen); + BufLen = BufPtr - Conn->SendBuffer; + BufPtr = memccpy(BufPtr, lua_tostring(lua, -1), 0, sizeof(Conn->SendBuffer) - BufLen); } if (BufPtr != NULL) @@ -250,25 +249,24 @@ static int TestIntf_Remote_DoAction(lua_State *lua) return lua_error(lua); } - return 0; } -const char * TestIntf_Remote_RecvBuffReader(lua_State *lua, void *Data, size_t *ChunkSize) +const char *TestIntf_Remote_RecvBuffReader(lua_State *lua, void *Data, size_t *ChunkSize) { TestIntf_RemoteConnection_t *Conn = Data; - const char *BufPtr; + const char *BufPtr; if (Conn->RecvBufRdPos == Conn->RecvBufChkPos) { - BufPtr = NULL; + BufPtr = NULL; *ChunkSize = 0; } else { size_t StartPos = Conn->RecvBufRdPos & REMOTE_BUFFER_MASK; - size_t EndPos = Conn->RecvBufChkPos & REMOTE_BUFFER_MASK; - BufPtr = &Conn->RecvBuffer[StartPos]; + size_t EndPos = Conn->RecvBufChkPos & REMOTE_BUFFER_MASK; + BufPtr = &Conn->RecvBuffer[StartPos]; if (StartPos < EndPos) { /* The whole chunk may be returned */ @@ -288,7 +286,7 @@ static int TestIntf_Remote_ExecuteAction(lua_State *lua) { int tbl = lua_upvalueindex(1); - while(lua_gettop(lua) > 0) + while (lua_gettop(lua) > 0) { printf("%s(): set %s\n", __func__, lua_typename(lua, lua_type(lua, -1))); lua_rawseti(lua, tbl, 1 + lua_rawlen(lua, tbl)); @@ -299,14 +297,13 @@ static int TestIntf_Remote_ExecuteAction(lua_State *lua) static int TestIntf_Remote_Base64(lua_State *lua) { - uint32_t DataLengthBits = luaL_checkinteger(lua, 1); - const char *EncodedStr = luaL_checkstring(lua, 2); - uint32_t DataLengthBytes = (DataLengthBits + 7) / 8; + uint32_t DataLengthBits = luaL_checkinteger(lua, 1); + const char *EncodedStr = luaL_checkstring(lua, 2); + uint32_t DataLengthBytes = (DataLengthBits + 7) / 8; luaL_Buffer Buf; luaL_buffinit(lua, &Buf); - EdsLib_DisplayDB_Base64Decode((uint8_t*)luaL_prepbuffsize(&Buf, DataLengthBytes), - DataLengthBits, EncodedStr); + EdsLib_DisplayDB_Base64Decode((uint8_t *)luaL_prepbuffsize(&Buf, DataLengthBytes), DataLengthBits, EncodedStr); luaL_addsize(&Buf, DataLengthBytes); luaL_pushresult(&Buf); return 1; @@ -314,11 +311,11 @@ static int TestIntf_Remote_Base64(lua_State *lua) static int TestIntf_Remote_Wait(lua_State *lua) { - TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - int32_t Timeout = luaL_optinteger(lua, 2, -1); - struct timeval stime; - struct timeval *stptr; - fd_set rdfd; + TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); + int32_t Timeout = luaL_optinteger(lua, 2, -1); + struct timeval stime; + struct timeval *stptr; + fd_set rdfd; printf("%s()\n", __func__); @@ -331,9 +328,9 @@ static int TestIntf_Remote_Wait(lua_State *lua) { if (Timeout >= 0) { - stime.tv_sec = Timeout / 1000; + stime.tv_sec = Timeout / 1000; stime.tv_usec = 1000 * (Timeout % 1000); - stptr = &stime; + stptr = &stime; } else { @@ -348,7 +345,7 @@ static int TestIntf_Remote_Wait(lua_State *lua) if (errno != EINTR) { /* error reading the filehandle */ - fprintf(stderr,"%s(): select: %s\n", __func__, strerror(errno)); + fprintf(stderr, "%s(): select: %s\n", __func__, strerror(errno)); } lua_pushboolean(lua, 0); } @@ -364,12 +361,12 @@ static int TestIntf_Remote_Wait(lua_State *lua) static int TestIntf_Remote_Poll(lua_State *lua) { TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - int idx; - size_t TempPos; - ssize_t rdsz; + int idx; + size_t TempPos; + ssize_t rdsz; lua_settop(lua, 1); - lua_newtable(lua); /* idx 2 - action table (initially empty) */ + lua_newtable(lua); /* idx 2 - action table (initially empty) */ /* * First poll that the subprocess is still alive. @@ -406,7 +403,9 @@ static int TestIntf_Remote_Poll(lua_State *lua) lua_pushvalue(lua, 2); lua_pushcclosure(lua, TestIntf_Remote_ExecuteAction, 1); lua_setfield(lua, -2, "DoAction"); - lua_rawseti(lua, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); /* Set as temp/protected global environment */ + lua_rawseti(lua, + LUA_REGISTRYINDEX, + LUA_RIDX_GLOBALS); /* Set as temp/protected global environment */ } if (lua_load(lua, TestIntf_Remote_RecvBuffReader, Conn, "in", "t") != LUA_OK) @@ -415,7 +414,7 @@ static int TestIntf_Remote_Poll(lua_State *lua) fprintf(stderr, "%s(): Load error: %s\n", __func__, luaL_tolstring(lua, -1, NULL)); lua_pop(lua, 2); } - else if (lua_pcall(lua, 0, 0, 0) != LUA_OK) + else if (lua_pcall(lua, 0, 0, 0) != LUA_OK) { fprintf(stderr, "%s(): %s\n", __func__, luaL_tolstring(lua, -1, NULL)); lua_pop(lua, 2); @@ -462,7 +461,7 @@ static int TestIntf_Remote_Poll(lua_State *lua) * so that there is no risk of getting stuck here. */ TempPos = Conn->RecvBufWrPos & REMOTE_BUFFER_MASK; - rdsz = sizeof(Conn->RecvBuffer) - TempPos; + rdsz = sizeof(Conn->RecvBuffer) - TempPos; if (rdsz > (sizeof(Conn->RecvBuffer) / 4)) { rdsz = (sizeof(Conn->RecvBuffer) / 4); @@ -486,7 +485,7 @@ static int TestIntf_Remote_Poll(lua_State *lua) { if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) { - fprintf(stderr,"%s(): read: %s\n", __func__, strerror(errno)); + fprintf(stderr, "%s(): read: %s\n", __func__, strerror(errno)); } break; } @@ -510,9 +509,9 @@ static int TestIntf_Remote_Poll(lua_State *lua) static int TestIntf_Remote_Close(lua_State *lua) { TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - uint32_t Timeout; - struct pollfd pfd; - nfds_t nfds; + uint32_t Timeout; + struct pollfd pfd; + nfds_t nfds; printf("%s(): START\n", __func__); /* @@ -611,8 +610,8 @@ static int TestIntf_Remote_Close(lua_State *lua) memset(&pfd, 0, sizeof(pfd)); if (Conn->InFd >= 0) { - nfds = 1; - pfd.fd = Conn->InFd; + nfds = 1; + pfd.fd = Conn->InFd; pfd.events = POLLIN; } else @@ -656,11 +655,11 @@ static int TestIntf_Remote_Close(lua_State *lua) int TestIntf_Remote_Create(lua_State *lua) { - const char *ShellCmd = luaL_checkstring(lua, 2); + const char *ShellCmd = luaL_checkstring(lua, 2); TestIntf_RemoteConnection_t *Conn; - int rdpipe[2]; - int wrpipe[2]; - int status; + int rdpipe[2]; + int wrpipe[2]; + int status; Conn = lua_newuserdata(lua, sizeof(TestIntf_RemoteConnection_t)); if (luaL_newmetatable(lua, "TestIntf_RemoteConnection")) @@ -698,9 +697,9 @@ int TestIntf_Remote_Create(lua_State *lua) lua_setmetatable(lua, -2); memset(Conn, 0, sizeof(*Conn)); - Conn->InFd = -1; + Conn->InFd = -1; Conn->OutFd = -1; - Conn->pid = -1; + Conn->pid = -1; status = pipe(rdpipe); if (status < 0) @@ -758,15 +757,14 @@ int TestIntf_Remote_Create(lua_State *lua) * This is the parent process * Set up the InStream / OutStream FILE objects from the file descriptors. */ - close(rdpipe[1]); /* write side */ - close(wrpipe[0]); /* read side */ - Conn->InFd = rdpipe[0]; + close(rdpipe[1]); /* write side */ + close(wrpipe[0]); /* read side */ + Conn->InFd = rdpipe[0]; Conn->OutFd = wrpipe[1]; - status = fcntl(Conn->InFd, F_GETFL); + status = fcntl(Conn->InFd, F_GETFL); status |= O_NONBLOCK; fcntl(Conn->InFd, F_SETFL, status); return 1; } /* end TestIntf_Remote_Create */ - diff --git a/cfecfs/testexecutive/src/test_interface.c b/cfecfs/testexecutive/src/test_interface.c index 7dcba98..3767393 100644 --- a/cfecfs/testexecutive/src/test_interface.c +++ b/cfecfs/testexecutive/src/test_interface.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file test_interface.c * \ingroup testexecutive @@ -60,19 +59,17 @@ typedef struct int (*InitFunc)(lua_State *lua); } TestExec_Intf_ModuleEntry_t; -#define TESTEXEC_MODULE(x) extern int TestIntf_ ## x ## _Create(lua_State *lua); +#define TESTEXEC_MODULE(x) extern int TestIntf_##x##_Create(lua_State *lua); #include "testexec_compiledin_modules.h" #undef TESTEXEC_MODULE -#define TESTEXEC_MODULE(x) { #x, TestIntf_ ## x ## _Create }, -static const TestExec_Intf_ModuleEntry_t TESTEXEC_INTF_TABLE[] = -{ +#define TESTEXEC_MODULE(x) { #x, TestIntf_##x##_Create }, +static const TestExec_Intf_ModuleEntry_t TESTEXEC_INTF_TABLE[] = { #include "testexec_compiledin_modules.h" - { NULL, NULL } + { NULL, NULL } }; #undef TESTEXEC_MODULE - static int TestIntf_Preprocess_Message(lua_State *lua) { printf("%s(): Start\n", __func__); @@ -94,12 +91,10 @@ static int TestIntf_Preprocess_Message(lua_State *lua) * idx@-1 - MissionLib interface object * idx@-2 - EdsLib data object */ - printf("%s(): Intf=%s\n", __func__, - luaL_tolstring(lua, -1, NULL)); + printf("%s(): Intf=%s\n", __func__, luaL_tolstring(lua, -1, NULL)); lua_pop(lua, 1); - printf("%s(): EdsObj=%s\n", __func__, - luaL_tolstring(lua, -2, NULL)); + printf("%s(): EdsObj=%s\n", __func__, luaL_tolstring(lua, -2, NULL)); lua_pop(lua, 1); lua_setfield(lua, 2, "Interface"); @@ -154,12 +149,12 @@ static int TestIntf_Filter_Message(lua_State *lua) static int TestIntf_WaitAction(lua_State *lua) { - int32_t Timeout = luaL_optinteger(lua, 2, -1); + int32_t Timeout = luaL_optinteger(lua, 2, -1); struct timespec expire; struct timespec current; - int nret; - uint32_t conditions_req; - uint32_t conditions_met; + int nret; + uint32_t conditions_req; + uint32_t conditions_met; enum { WAIT_STATE_NORMAL = 0, @@ -170,13 +165,13 @@ static int TestIntf_WaitAction(lua_State *lua) nret = 0; luaL_checktype(lua, 1, LUA_TTABLE); lua_settop(lua, 2); - lua_getfield(lua, lua_upvalueindex(1), "API"); /* @3 (userdata object = low level intf) */ + lua_getfield(lua, lua_upvalueindex(1), "API"); /* @3 (userdata object = low level intf) */ waitstate = WAIT_STATE_NORMAL; clock_gettime(CLOCK_MONOTONIC, &expire); if (Timeout >= 0) { - expire.tv_sec += Timeout / 1000; + expire.tv_sec += Timeout / 1000; expire.tv_nsec += (Timeout % 1000) * 1000000; } if (expire.tv_nsec > 1000000000) @@ -185,7 +180,7 @@ static int TestIntf_WaitAction(lua_State *lua) expire.tv_nsec -= 1000000000; } - while(1) + while (1) { lua_settop(lua, 3); @@ -200,10 +195,11 @@ static int TestIntf_WaitAction(lua_State *lua) * idx@5 = event data object * idx@6 = additional event attributes */ - printf("%s(): Stack= %s %s %s\n", __func__, - lua_typename(lua, lua_type(lua, 4)), - lua_typename(lua, lua_type(lua, 5)), - lua_typename(lua, lua_type(lua, 6))); + printf("%s(): Stack= %s %s %s\n", + __func__, + lua_typename(lua, lua_type(lua, 4)), + lua_typename(lua, lua_type(lua, 5)), + lua_typename(lua, lua_type(lua, 6))); if (!lua_isnil(lua, 4)) { /* @@ -211,14 +207,14 @@ static int TestIntf_WaitAction(lua_State *lua) */ if (!lua_isnil(lua, 5)) { - lua_getfield(lua, lua_upvalueindex(1), "RecvProcessor");/* idx@7 - preprocessor table */ - lua_pushvalue(lua, 4); /* idx@8 - event type */ - lua_gettable(lua, -2); /* idx@8 - preprocessor func */ + lua_getfield(lua, lua_upvalueindex(1), "RecvProcessor"); /* idx@7 - preprocessor table */ + lua_pushvalue(lua, 4); /* idx@8 - event type */ + lua_gettable(lua, -2); /* idx@8 - preprocessor func */ if (lua_isfunction(lua, -1)) { - lua_pushvalue(lua, 5); /* idx@9 - event data object */ - lua_call(lua, 1, 1); /* idx@8 - preprocessed event data obj */ - lua_replace(lua, 5); /* replace original event data obj */ + lua_pushvalue(lua, 5); /* idx@9 - event data object */ + lua_call(lua, 1, 1); /* idx@8 - preprocessed event data obj */ + lua_replace(lua, 5); /* replace original event data obj */ } lua_settop(lua, 6); } @@ -228,27 +224,27 @@ static int TestIntf_WaitAction(lua_State *lua) */ conditions_req = 0; conditions_met = 0; - lua_pushnil(lua); /* idx @7 - expected event table index */ - while(lua_next(lua, 1)) /* idx @8 - expected event table value */ + lua_pushnil(lua); /* idx @7 - expected event table index */ + while (lua_next(lua, 1)) /* idx @8 - expected event table value */ { ++conditions_req; if (lua_type(lua, 8) == LUA_TTABLE) { - lua_getfield(lua, 8, "Matched"); /* idx @9 - already matched? */ + lua_getfield(lua, 8, "Matched"); /* idx @9 - already matched? */ if (lua_toboolean(lua, -1)) { ++conditions_met; } else { - lua_getfield(lua, lua_upvalueindex(1), "RecvFilter"); /* idx@10 - filter table */ - lua_pushvalue(lua, 4); /* idx@11 - event type */ - lua_gettable(lua, -2); /* idx@11 - filter func */ + lua_getfield(lua, lua_upvalueindex(1), "RecvFilter"); /* idx@10 - filter table */ + lua_pushvalue(lua, 4); /* idx@11 - event type */ + lua_gettable(lua, -2); /* idx@11 - filter func */ if (lua_isfunction(lua, -1)) { - lua_pushvalue(lua, 8); /* idx@12 - filter criteria table */ - lua_pushvalue(lua, 5); /* idx@13 - preprocessed event data */ - lua_call(lua, 2, 1); /* idx@11 - object (match) or nil (no match) */ + lua_pushvalue(lua, 8); /* idx@12 - filter criteria table */ + lua_pushvalue(lua, 5); /* idx@13 - preprocessed event data */ + lua_call(lua, 2, 1); /* idx@11 - object (match) or nil (no match) */ if (lua_toboolean(lua, -1)) { /* if the user specified a callback, @@ -300,7 +296,7 @@ static int TestIntf_WaitAction(lua_State *lua) if (Timeout >= 0) { clock_gettime(CLOCK_MONOTONIC, ¤t); - current.tv_sec = expire.tv_sec - current.tv_sec; + current.tv_sec = expire.tv_sec - current.tv_sec; current.tv_nsec = expire.tv_nsec - current.tv_nsec; if (current.tv_nsec < 0) { @@ -334,7 +330,7 @@ static int TestIntf_WaitAction(lua_State *lua) } else { - current.tv_sec = 1; + current.tv_sec = 1; current.tv_nsec = 0; } @@ -385,7 +381,7 @@ static int TestIntf_WaitAction(lua_State *lua) */ if (current.tv_sec > 0 || current.tv_nsec > 250000000) { - current.tv_sec = 0; + current.tv_sec = 0; current.tv_nsec = 250000000; } clock_nanosleep(CLOCK_MONOTONIC, 0, ¤t, NULL); @@ -409,9 +405,9 @@ static int TestIntf_DoAction(lua_State *lua) */ lua_settop(lua, 2); - lua_getfield(lua, lua_upvalueindex(1), "API"); /* idx @3 - low level userdata object */ + lua_getfield(lua, lua_upvalueindex(1), "API"); /* idx @3 - low level userdata object */ lua_pushvalue(lua, lua_upvalueindex(2)); - lua_gettable(lua, -2); /* idx @4 - action function */ + lua_gettable(lua, -2); /* idx @4 - action function */ if (!lua_isfunction(lua, -1)) { return luaL_error(lua, "Action %s undefined", luaL_tolstring(lua, lua_upvalueindex(2), NULL)); @@ -458,16 +454,14 @@ static int TestIntf_DoAction(lua_State *lua) } /* Call the low level function */ - lua_call(lua, lua_gettop(lua) - 3, 2); /* idx @3,4 = return values */ + lua_call(lua, lua_gettop(lua) - 3, 2); /* idx @3,4 = return values */ if (lua_type(lua, 3) == LUA_TTABLE) { lua_pushnil(lua); - while(lua_next(lua, 3)) + while (lua_next(lua, 3)) { - printf("%s(): %s = %s\n", __func__, - luaL_tolstring(lua, 5, NULL), - luaL_tolstring(lua, 6, NULL)); + printf("%s(): %s = %s\n", __func__, luaL_tolstring(lua, 5, NULL), luaL_tolstring(lua, 6, NULL)); lua_settop(lua, 5); } lua_pushvalue(lua, lua_upvalueindex(1)); @@ -484,7 +478,7 @@ static int TestIntf_GetAction(lua_State *lua) luaL_checkudata(lua, 1, "TestIntf"); lua_settop(lua, 2); - lua_getuservalue(lua, 1); /* @3 */ + lua_getuservalue(lua, 1); /* @3 */ if (lua_type(lua, 2) == LUA_TSTRING) { @@ -501,7 +495,6 @@ static int TestIntf_GetAction(lua_State *lua) return 1; } - static int TestIntf_Destroy(lua_State *lua) { luaL_checkudata(lua, 1, "TestIntf"); @@ -541,7 +534,7 @@ static int TestIntf_Create(lua_State *lua) luaL_argcheck(lua, Conn->TargetNum != 0, 2, "Invalid target specified"); /* create a table for use as the userdata */ - lua_newtable(lua); /* index 5 */ + lua_newtable(lua); /* index 5 */ lua_pushvalue(lua, 1); lua_gettable(lua, lua_upvalueindex(1)); @@ -575,9 +568,7 @@ int TestIntf_GetFactory(lua_State *lua) lua_newtable(lua); - while (ModEnt != NULL && - ModEnt->InitFunc != NULL && - ModEnt->LuaName != NULL) + while (ModEnt != NULL && ModEnt->InitFunc != NULL && ModEnt->LuaName != NULL) { lua_pushcfunction(lua, ModEnt->InitFunc); lua_setfield(lua, -2, ModEnt->LuaName); diff --git a/cfecfs/testexecutive/src/testctrl.c b/cfecfs/testexecutive/src/testctrl.c index 34f34bb..c135ccb 100644 --- a/cfecfs/testexecutive/src/testctrl.c +++ b/cfecfs/testexecutive/src/testctrl.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file testctrl.c * \ingroup testexecutive @@ -42,112 +41,108 @@ #include "cfe_missionlib_lua_softwarebus.h" #include "ccsds_spacepacket_eds_datatypes.h" - /* ** volume table. */ -OS_VolumeInfo_t OS_VolumeTable [OS_MAX_FILE_SYSTEMS] = -{ - /* - ** The following entry is a "pre-mounted" path to a non-volatile device - ** This is intended to contain the functional test scripts - */ - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 } +OS_VolumeInfo_t OS_VolumeTable[OS_MAX_FILE_SYSTEMS] = { + /* + ** The following entry is a "pre-mounted" path to a non-volatile device + ** This is intended to contain the functional test scripts + */ + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 } }; uint32_t TargetArgCount; -char **TargetArgs; +char **TargetArgs; #ifdef JPHFIX_SERVER void TestCtrl_ConnHandler(void) { - uint32 SocketID; - int32 Status; + uint32 SocketID; + int32 Status; OS_SockAddr_t SocketAddress; - char DataBuf[128]; + char DataBuf[128]; Status = OS_SocketOpen(&SocketID, OS_SocketDomain_INET, OS_SocketType_STREAM); if (Status != OS_SUCCESS) { - fprintf(stderr,"OS_SocketOpen() failed: %d\n", (int)Status); + fprintf(stderr, "OS_SocketOpen() failed: %d\n", (int)Status); + return; + } + + OS_SocketAddrInit(&SocketAddress, OS_SocketDomain_INET); + OS_SocketAddrSetPort(&SocketAddress, 2345); + + uint32 ConnID; + OS_SockAddr_t ConnAddress; + + Status = OS_SocketBind(SocketID, &SocketAddress); + if (Status != OS_SUCCESS) + { + fprintf(stderr, "OS_SocketBind() failed: %d\n", (int)Status); return; } - OS_SocketAddrInit(&SocketAddress, OS_SocketDomain_INET); - OS_SocketAddrSetPort(&SocketAddress, 2345); - - - uint32 ConnID; - OS_SockAddr_t ConnAddress; - - Status = OS_SocketBind(SocketID, &SocketAddress); - if (Status != OS_SUCCESS) - { - fprintf(stderr,"OS_SocketBind() failed: %d\n", (int)Status); - return; - } - - while(1) - { - Status = OS_SocketAccept(SocketID, &ConnID, &ConnAddress, OS_PEND); - if (Status != OS_SUCCESS) - { - fprintf(stderr,"OS_SocketAccept() failed: %d\n", (int)Status); - break; - } - - while (1) - { - Status = OS_StreamRead(ConnID, DataBuf, sizeof(DataBuf)-1, OS_PEND); - if (Status < OS_SUCCESS) - { - fprintf(stderr,"OS_StreamRead() failed: %d\n", (int)Status); - break; - } - - if (Status == 0) - { - printf("OS_StreamRead(): disconnect\n"); - break; - } - - DataBuf[Status] = 0; - printf("OS_StreamRead(): %s\n", DataBuf); - } - - OS_SocketClose(ConnID); - } - - OS_SocketClose(SocketID); + while (1) + { + Status = OS_SocketAccept(SocketID, &ConnID, &ConnAddress, OS_PEND); + if (Status != OS_SUCCESS) + { + fprintf(stderr, "OS_SocketAccept() failed: %d\n", (int)Status); + break; + } + + while (1) + { + Status = OS_StreamRead(ConnID, DataBuf, sizeof(DataBuf) - 1, OS_PEND); + if (Status < OS_SUCCESS) + { + fprintf(stderr, "OS_StreamRead() failed: %d\n", (int)Status); + break; + } + + if (Status == 0) + { + printf("OS_StreamRead(): disconnect\n"); + break; + } + + DataBuf[Status] = 0; + printf("OS_StreamRead(): %s\n", DataBuf); + } + + OS_SocketClose(ConnID); + } + OS_SocketClose(SocketID); } #endif -#define COMMAND_MAX_ARGS 8 -#define NETBUFFER_MAX_SIZE (64 + ((sizeof(CCSDS_SpacePacket_Buffer_t) * 4) / 3)) -#define OBJBUFFER_MAX_SIZE (64 + sizeof(CCSDS_SpacePacket_Buffer_t)) +#define COMMAND_MAX_ARGS 8 +#define NETBUFFER_MAX_SIZE (64 + ((sizeof(CCSDS_SpacePacket_Buffer_t) * 4) / 3)) +#define OBJBUFFER_MAX_SIZE (64 + sizeof(CCSDS_SpacePacket_Buffer_t)) struct { - char *ArgPtr[COMMAND_MAX_ARGS]; - char NetBuffer[NETBUFFER_MAX_SIZE]; + char *ArgPtr[COMMAND_MAX_ARGS]; + char NetBuffer[NETBUFFER_MAX_SIZE]; uint8_t ObjBuffer[OBJBUFFER_MAX_SIZE]; - uint32 ArgCount; - uint32 NetDataLen; - uint32 ObjBitSize; + uint32 ArgCount; + uint32 NetDataLen; + uint32 ObjBitSize; } TestCtrl; void TestCtrl_TokenizeCommand(char *CommandData) @@ -160,15 +155,14 @@ void TestCtrl_TokenizeCommand(char *CommandData) do { ++Ptr; - } - while(isspace((int)*Ptr)); + } while (isspace((int)*Ptr)); - while(TestCtrl.ArgCount < COMMAND_MAX_ARGS && *Ptr != 0) + while (TestCtrl.ArgCount < COMMAND_MAX_ARGS && *Ptr != 0) { TestCtrl.ArgPtr[TestCtrl.ArgCount] = Ptr; ++TestCtrl.ArgCount; - while(*Ptr != 0 && !isspace((int)*Ptr)) + while (*Ptr != 0 && !isspace((int)*Ptr)) { ++Ptr; } @@ -182,14 +176,13 @@ void TestCtrl_TokenizeCommand(char *CommandData) do { ++Ptr; - } - while(isspace((int)*Ptr)); + } while (isspace((int)*Ptr)); } } void TestCtrl_ProcessDataBlock(void) { - char *EndPtr; + char *EndPtr; uint32_t BitSize; if (TestCtrl.NetDataLen < sizeof(TestCtrl.NetBuffer)) @@ -227,7 +220,7 @@ void TestCtrl_ProcessDataBlock(void) void TestCtrl_RunCommandLoop(void) { - char NetworkBuffer[256]; + char NetworkBuffer[256]; uint32 ContentLen; while (fgets(NetworkBuffer, sizeof(NetworkBuffer), stdin) != NULL) @@ -279,7 +272,7 @@ int main(int argc, char *argv[]) /* Initialize the OSAL */ if (OS_API_Init() != OS_SUCCESS) { - fprintf(stderr,"OS_API_Init() failed"); + fprintf(stderr, "OS_API_Init() failed"); return EXIT_FAILURE; } @@ -287,31 +280,31 @@ int main(int argc, char *argv[]) { switch (opt) { - case 'c': - { - CFE_MissionLib_GetInstanceNumber(&CFE_SOFTWAREBUS_INTERFACE, optarg); - break; - } - case 'i': - { - break; - } - case 'l': - { - break; - } - default: /* '?' */ - { - fprintf(stderr, "Usage: %s [-c cpu_name]\n", argv[0]); - exit(EXIT_FAILURE); - } + case 'c': + { + CFE_MissionLib_GetInstanceNumber(&CFE_SOFTWAREBUS_INTERFACE, optarg); + break; + } + case 'i': + { + break; + } + case 'l': + { + break; + } + default: /* '?' */ + { + fprintf(stderr, "Usage: %s [-c cpu_name]\n", argv[0]); + exit(EXIT_FAILURE); + } } } if (optind < argc) { TargetArgCount = argc - optind; - TargetArgs = &argv[optind]; + TargetArgs = &argv[optind]; } TestCtrl_RunCommandLoop(); diff --git a/cfecfs/testexecutive/src/testexec.c b/cfecfs/testexecutive/src/testexec.c index 57196c7..528b0cd 100644 --- a/cfecfs/testexecutive/src/testexec.c +++ b/cfecfs/testexecutive/src/testexec.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file testexec.c * \ingroup testexecutive @@ -50,47 +49,44 @@ #include "testexec.h" static lua_State *BaseState; -static int BaseStackTop; +static int BaseStackTop; typedef struct { int32 FileId; - char DataBuffer[252]; + char DataBuffer[252]; } TestExec_OsalLoadState_t; - /* ** volume table. */ -OS_VolumeInfo_t OS_VolumeTable [OS_MAX_FILE_SYSTEMS] = -{ - /* - ** The following entry is a "pre-mounted" path to a non-volatile device - ** This is intended to contain the functional test scripts - */ - { "ftest", "./ftest", FS_BASED, FALSE, FALSE, TRUE, "FT", "/ftest", 512 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 } +OS_VolumeInfo_t OS_VolumeTable[OS_MAX_FILE_SYSTEMS] = { + /* + ** The following entry is a "pre-mounted" path to a non-volatile device + ** This is intended to contain the functional test scripts + */ + { "ftest", "./ftest", FS_BASED, FALSE, FALSE, TRUE, "FT", "/ftest", 512 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, + { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 } }; - static const char *TestExec_Lua_FileReader(lua_State *lua, void *data, size_t *size) { TestExec_OsalLoadState_t *LoadState = data; - int32 Status; + int32 Status; - Status = OS_read(LoadState->FileId, LoadState->DataBuffer, sizeof (LoadState->DataBuffer)); + Status = OS_read(LoadState->FileId, LoadState->DataBuffer, sizeof(LoadState->DataBuffer)); if (Status < 0) { *size = 0; @@ -107,7 +103,7 @@ static int TestExec_Lua_DoAssert(lua_State *lua) * @1 = condition (boolean) * @2 = message (string) */ - lua_Debug ar; + lua_Debug ar; const char *filename; if (lua_getstack(lua, 1, &ar)) @@ -125,12 +121,16 @@ static int TestExec_Lua_DoAssert(lua_State *lua) } else { - filename = NULL; + filename = NULL; ar.currentline = -1; } - UtAssertEx(lua_toboolean(lua, 1), UtAssert_GetContext(), - filename, ar.currentline, "%s", luaL_tolstring(lua, 2, NULL)); + UtAssertEx(lua_toboolean(lua, 1), + UtAssert_GetContext(), + filename, + ar.currentline, + "%s", + luaL_tolstring(lua, 2, NULL)); return 0; } @@ -138,9 +138,9 @@ static int TestExec_Lua_DoAssert(lua_State *lua) static int TestExec_Lua_ErrorHandler(lua_State *lua) { /* Start stack: 1 = user string */ - lua_Debug ar; + lua_Debug ar; const char *file; - uint32 line; + uint32 line; file = NULL; line = 0; @@ -165,12 +165,11 @@ static int TestExec_Lua_ErrorHandler(lua_State *lua) return 0; } - -static void TestExec_LoadScript (void) +static void TestExec_LoadScript(void) { - const char *SegmentName = UtAssert_GetSegmentName(); + const char *SegmentName = UtAssert_GetSegmentName(); TestExec_OsalLoadState_t LoadState; - int32 Status; + int32 Status; Status = OS_open(SegmentName, OS_READ_ONLY, 0); if (Status < 0) @@ -194,10 +193,9 @@ static void TestExec_LoadScript (void) { UtAssert_True(lua_isfunction(BaseState, -1), "Load test script: %s", SegmentName); } - } -static void TestExec_RunScript (void) +static void TestExec_RunScript(void) { if (lua_type(BaseState, -1) == LUA_TFUNCTION) { @@ -205,7 +203,7 @@ static void TestExec_RunScript (void) } } -static void TestExec_ResetStack (void) +static void TestExec_ResetStack(void) { lua_settop(BaseState, BaseStackTop); } @@ -217,7 +215,7 @@ void OS_Application_Shutdown(void) void OS_Application_Startup(void) { - int32 i; + int32 i; const char *OptString; if (OS_API_Init() != OS_SUCCESS) @@ -248,12 +246,11 @@ void OS_Application_Startup(void) lua_pushcfunction(BaseState, TestExec_Lua_ErrorHandler); BaseStackTop = lua_gettop(BaseState); - for (i=0; i < UT_BSP_GetTotalOptions(); ++i) + for (i = 0; i < UT_BSP_GetTotalOptions(); ++i) { OptString = UT_BSP_GetOptionString(i); if (OptString != NULL) { - /* Check if the option has an assignment operator. * If so, pass it directly to Lua for interpretation * (it can e.g. set a global) @@ -268,38 +265,35 @@ void OS_Application_Startup(void) UtTest_Add(TestExec_RunScript, TestExec_LoadScript, TestExec_ResetStack, OptString); } } - } #ifdef JPHFIX_CLIENT - OS_SocketAddrFromString(&SocketAddress, "127.0.0.1"); - Status = OS_SocketConnect(SocketID, &SocketAddress, OS_PEND); - if (Status != OS_SUCCESS) - { - fprintf(stderr,"OS_SocketConnect() failed: %d\n", (int)Status); - return; - } - - while (1) - { - Status = OS_StreamRead(SocketID, DataBuf, sizeof(DataBuf)-1, OS_PEND); - if (Status < OS_SUCCESS) - { - fprintf(stderr,"OS_StreamRead() failed: %d\n", (int)Status); - break; - } - - if (Status == 0) - { - printf("OS_StreamRead(): disconnect\n"); - break; - } - - DataBuf[Status] = 0; - printf("OS_StreamRead(): %s\n", DataBuf); - } -#endif + OS_SocketAddrFromString(&SocketAddress, "127.0.0.1"); + Status = OS_SocketConnect(SocketID, &SocketAddress, OS_PEND); + if (Status != OS_SUCCESS) + { + fprintf(stderr, "OS_SocketConnect() failed: %d\n", (int)Status); + return; + } + while (1) + { + Status = OS_StreamRead(SocketID, DataBuf, sizeof(DataBuf) - 1, OS_PEND); + if (Status < OS_SUCCESS) + { + fprintf(stderr, "OS_StreamRead() failed: %d\n", (int)Status); + break; + } -} /* end OS_Application Startup */ + if (Status == 0) + { + printf("OS_StreamRead(): disconnect\n"); + break; + } + DataBuf[Status] = 0; + printf("OS_StreamRead(): %s\n", DataBuf); + } +#endif + +} /* end OS_Application Startup */ diff --git a/cfecfs/util/cmdUtil.c b/cfecfs/util/cmdUtil.c index 411edf5..6269b74 100644 --- a/cfecfs/util/cmdUtil.c +++ b/cfecfs/util/cmdUtil.c @@ -18,18 +18,16 @@ * limitations under the License. */ - /** * \file cmdUtil.c * \ingroup cfecfs * \author joseph.p.hickey@nasa.gov * -** cmdUtil -- A CCSDS Command utility. This program will build a CCSDS Command packet -** with variable parameters and send it on a UDP network socket. -** this program is primarily used to command a cFE flight software system. + ** cmdUtil -- A CCSDS Command utility. This program will build a CCSDS Command packet + ** with variable parameters and send it on a UDP network socket. + ** this program is primarily used to command a cFE flight software system. */ - /* ** System includes */ @@ -39,7 +37,7 @@ #include #ifdef WIN32 -#pragma warning (disable:4786) +#pragma warning(disable : 4786) #include #include #include @@ -52,7 +50,7 @@ typedef int socklen_t; #include #include #include -#define SOCKET int +#define SOCKET int #define closesocket(fd) close(fd) #endif @@ -68,25 +66,28 @@ typedef int socklen_t; const char DEFAULT_COMPONENT[] = "Application"; -static const EdsLib_Id_t CFE_SB_TELECOMMAND_CMD_ID = EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telecommand_indication_DECLARATION); +static const EdsLib_Id_t CFE_SB_TELECOMMAND_CMD_ID = + EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telecommand_indication_DECLARATION); /* ** SendUdp */ -int SendUdp(char *hostname, unsigned short port, unsigned char *packetData, int packetSize) { - SOCKET sd; - int rc; - unsigned int i; - struct sockaddr_in cliAddr; - struct sockaddr_in remoteServAddr; - struct hostent *hostID; - - #ifdef WIN32 - WSADATA wsaData; - WSAStartup(WINSOCK_VERSION, &wsaData); - #endif - - if (hostname == NULL) { +int SendUdp(char *hostname, unsigned short port, unsigned char *packetData, int packetSize) +{ + SOCKET sd; + int rc; + unsigned int i; + struct sockaddr_in cliAddr; + struct sockaddr_in remoteServAddr; + struct hostent *hostID; + +#ifdef WIN32 + WSADATA wsaData; + WSAStartup(WINSOCK_VERSION, &wsaData); +#endif + + if (hostname == NULL) + { return -1; } @@ -94,47 +95,53 @@ int SendUdp(char *hostname, unsigned short port, unsigned char *packetData, int ** get server IP address (no check if input is IP address or DNS name */ hostID = gethostbyname(hostname); - if (hostID == NULL) { + if (hostID == NULL) + { return -2; } - printf("sending data to '%s' (IP : %s); port %d\n", hostID->h_name, - inet_ntoa(*(struct in_addr *)hostID->h_addr_list[0]), port); + printf("sending data to '%s' (IP : %s); port %d\n", + hostID->h_name, + inet_ntoa(*(struct in_addr *)hostID->h_addr_list[0]), + port); /* ** Setup socket structures */ remoteServAddr.sin_family = hostID->h_addrtype; - memcpy((char *) &remoteServAddr.sin_addr.s_addr, - hostID->h_addr_list[0], hostID->h_length); + memcpy((char *)&remoteServAddr.sin_addr.s_addr, hostID->h_addr_list[0], hostID->h_length); remoteServAddr.sin_port = htons(port); /* ** Create Socket */ - sd = socket(AF_INET,SOCK_DGRAM,0); - if (sd < 0) { + sd = socket(AF_INET, SOCK_DGRAM, 0); + if (sd < 0) + { return -4; } /* ** bind any port */ - cliAddr.sin_family = AF_INET; + cliAddr.sin_family = AF_INET; cliAddr.sin_addr.s_addr = htonl(INADDR_ANY); - cliAddr.sin_port = htons(0); + cliAddr.sin_port = htons(0); - rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr)); - if (rc < 0) { + rc = bind(sd, (struct sockaddr *)&cliAddr, sizeof(cliAddr)); + if (rc < 0) + { printf("%u: cannot bind port\n", port); return -5; } printf("Data to send:\n"); i = 0; - while (i < packetSize) { + while (i < packetSize) + { printf("0x%02X ", packetData[i] & 0xFF); - if (++i % 8 == 0) { + if (++i % 8 == 0) + { puts(""); } } @@ -143,11 +150,10 @@ int SendUdp(char *hostname, unsigned short port, unsigned char *packetData, int /* ** send the event */ - rc = sendto(sd, (char*)packetData, packetSize, 0, - (struct sockaddr*)&remoteServAddr, - sizeof(remoteServAddr)); + rc = sendto(sd, (char *)packetData, packetSize, 0, (struct sockaddr *)&remoteServAddr, sizeof(remoteServAddr)); - if (rc < 0) { + if (rc < 0) + { closesocket(sd); return -6; } @@ -160,42 +166,42 @@ int SendUdp(char *hostname, unsigned short port, unsigned char *packetData, int ** Defines */ #define DEFAULT_HOSTNAME "127.0.0.1" -#define OPTARG_SIZE 128 +#define OPTARG_SIZE 128 -#define DEFAULT_PORTNUM 1234 +#define DEFAULT_PORTNUM 1234 #define CONSTRAINT_BUFSIZE 20 /* ** Parameter datatype structure */ -typedef struct { - char HostName[OPTARG_SIZE]; /* Hostname like "localhost" or "192.168.0.121" */ - char DestIntf[OPTARG_SIZE]; - char CmdName[OPTARG_SIZE]; - uint16_t PortNum; /* Portnum: Default "1234" */ +typedef struct +{ + char HostName[OPTARG_SIZE]; /* Hostname like "localhost" or "192.168.0.121" */ + char DestIntf[OPTARG_SIZE]; + char CmdName[OPTARG_SIZE]; + uint16_t PortNum; /* Portnum: Default "1234" */ - int Verbose; /* Verbose option set? */ - int GotDestInfo; - int GotUsageReq; + int Verbose; /* Verbose option set? */ + int GotDestInfo; + int GotUsageReq; EdsLib_Id_t IntfEdsId; EdsLib_Id_t CmdEdsId; - EdsLib_Id_t IntfArg; - EdsLib_Id_t ActualArg; - EdsComponent_CFE_SB_Listener_t Params; - EdsLib_IntfDB_InterfaceInfo_t IntfInfo; + EdsLib_Id_t IntfArg; + EdsLib_Id_t ActualArg; + EdsComponent_CFE_SB_Listener_t Params; + EdsLib_IntfDB_InterfaceInfo_t IntfInfo; EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; - uint16_t CommandCodeConstrIdx; - EdsLib_DataTypeDB_EntityInfo_t CommandCodeInfo; - EdsLib_DataTypeDB_TypeInfo_t EdsHeaderInfo; - EdsLib_DataTypeDB_TypeInfo_t EdsTypeInfo; - EdsLib_DataTypeDB_EntityInfo_t EdsPayloadInfo; - EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; + uint16_t CommandCodeConstrIdx; + EdsLib_DataTypeDB_EntityInfo_t CommandCodeInfo; + EdsLib_DataTypeDB_TypeInfo_t EdsHeaderInfo; + EdsLib_DataTypeDB_TypeInfo_t EdsTypeInfo; + EdsLib_DataTypeDB_EntityInfo_t EdsPayloadInfo; + EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; } CommandData_t; - -EdsNativeBuffer_CFE_HDR_CommandHeader_t CommandBuffer; +EdsNativeBuffer_CFE_HDR_CommandHeader_t CommandBuffer; static EdsPackedBuffer_CFE_HDR_CommandHeader_t PackedCommand; /* @@ -212,20 +218,20 @@ static const char *optString = "H:P:D:v?"; ** getopts_long long form argument table */ static struct option longOpts[] = { - { "host", required_argument, NULL, 'H' }, - { "port", required_argument, NULL, 'P' }, - { "dest", required_argument, NULL, 'D' }, - { "help", no_argument, NULL, '?' }, - { "verbose", no_argument, NULL, 'v' }, - { NULL, no_argument, NULL, 0 } + { "host", required_argument, NULL, 'H' }, + { "port", required_argument, NULL, 'P' }, + { "dest", required_argument, NULL, 'D' }, + { "help", no_argument, NULL, '?' }, + { "verbose", no_argument, NULL, 'v' }, + { NULL, no_argument, NULL, 0 } }; /* ** Display program usage, and exit. */ -void DisplayUsage(char *Name, CommandData_t *CommandData ) +void DisplayUsage(char *Name, CommandData_t *CommandData) { - printf("%s -- A CCSDS Command Client.\n",Name); + printf("%s -- A CCSDS Command Client.\n", Name); printf(" The parameters are:\n"); printf(" --host / -H : The hostname or IP address to send the command to ( default = localhost )\n"); printf(" --port / -P : The UDP port to send the command to ( default = 1234 )\n"); @@ -235,55 +241,62 @@ void DisplayUsage(char *Name, CommandData_t *CommandData ) printf(" \n"); printf(" An example of using this is:\n"); printf(" \n"); - printf(" %s --host=localhost --port=1234 -D 1:CFE_ES/Application/CMD.QueryAllCmd Filename=MyFile.txt\n",Name); + printf(" %s --host=localhost --port=1234 -D 1:CFE_ES/Application/CMD.QueryAllCmd Filename=MyFile.txt\n", Name); printf(" \n"); } void ProcessParameterArgument(char *optarg, CommandData_t *CommandData) { - char *value; - int32_t Result; - EdsLib_EntityDescriptor_t Desc; - - value = strchr(optarg, '='); - if (value == NULL) - { - fprintf(stderr,"Parameter Argument: '%s' rejected. Must be in the form: 'x=y' where x is the name and y is the value\n",optarg); - return; - } - - *value = 0; - ++value; - - - /* First determine the type of the given argument */ - memset(&Desc,0,sizeof(Desc)); - Desc.FullName = optarg; - Result = EdsLib_DisplayDB_LocateSubEntity(&EDS_DATABASE, CommandData->EdsPayloadInfo.EdsId, Desc.FullName, &Desc.EntityInfo); - if (Result != EDSLIB_SUCCESS) - { - fprintf(stderr,"Dest App Argument: '%s' rejected. Parameter not known.\n",optarg); - return; - } - - if (CommandData->Verbose) { - printf("Parameter \'%s\' Located at payload offset %d\n",optarg, - Desc.EntityInfo.Offset.Bytes); - } - - Result = EdsLib_Scalar_FromString(&EDS_DATABASE, Desc.EntityInfo.EdsId, - &CommandBuffer.Byte[CommandData->EdsPayloadInfo.Offset.Bytes + Desc.EntityInfo.Offset.Bytes], - value); - if (Result != 0) - { - fprintf(stderr,"Parameter Argument: Value '%s' rejected. Unable to parse.\n",value); - return; - } + char *value; + int32_t Result; + EdsLib_EntityDescriptor_t Desc; + + value = strchr(optarg, '='); + if (value == NULL) + { + fprintf( + stderr, + "Parameter Argument: '%s' rejected. Must be in the form: 'x=y' where x is the name and y is the value\n", + optarg); + return; + } + + *value = 0; + ++value; + + /* First determine the type of the given argument */ + memset(&Desc, 0, sizeof(Desc)); + Desc.FullName = optarg; + Result = EdsLib_DisplayDB_LocateSubEntity(&EDS_DATABASE, + CommandData->EdsPayloadInfo.EdsId, + Desc.FullName, + &Desc.EntityInfo); + if (Result != EDSLIB_SUCCESS) + { + fprintf(stderr, "Dest App Argument: '%s' rejected. Parameter not known.\n", optarg); + return; + } + + if (CommandData->Verbose) + { + printf("Parameter \'%s\' Located at payload offset %d\n", optarg, Desc.EntityInfo.Offset.Bytes); + } + + Result = EdsLib_Scalar_FromString( + &EDS_DATABASE, + Desc.EntityInfo.EdsId, + &CommandBuffer.Byte[CommandData->EdsPayloadInfo.Offset.Bytes + Desc.EntityInfo.Offset.Bytes], + value); + if (Result != 0) + { + fprintf(stderr, "Parameter Argument: Value '%s' rejected. Unable to parse.\n", value); + return; + } } static void Enumerate_Topics_Usage_Callback(void *Arg, uint16_t TopicId, EdsLib_Id_t IntfEdsId) { - char NameBuffer[128]; + char NameBuffer[128]; int32_t Status; /* JPHFIX - check type */ @@ -295,67 +308,68 @@ static void Enumerate_Topics_Usage_Callback(void *Arg, uint16_t TopicId, EdsLib_ } } -static void Enumerate_Constraint_Callback(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, EdsLib_GenericValueBuffer_t *ConstraintValue, void *Arg) +static void Enumerate_Constraint_Callback(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, + EdsLib_GenericValueBuffer_t *ConstraintValue, + void *Arg) { char *Buffer = Arg; - switch(ConstraintValue->ValueType) - { - case EDSLIB_BASICTYPE_SIGNED_INT: - snprintf(Buffer, CONSTRAINT_BUFSIZE, "%lld", - (long long)ConstraintValue->Value.SignedInteger); - break; - case EDSLIB_BASICTYPE_UNSIGNED_INT: - snprintf(Buffer, CONSTRAINT_BUFSIZE, "%llu", - (unsigned long long)ConstraintValue->Value.SignedInteger); - break; - case EDSLIB_BASICTYPE_BINARY: - strncpy(Buffer, ConstraintValue->Value.StringData, CONSTRAINT_BUFSIZE-1); - Buffer[CONSTRAINT_BUFSIZE-1] = 0; - break; - default: - break; + switch (ConstraintValue->ValueType) + { + case EDSLIB_BASICTYPE_SIGNED_INT: + snprintf(Buffer, CONSTRAINT_BUFSIZE, "%lld", (long long)ConstraintValue->Value.SignedInteger); + break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + snprintf(Buffer, CONSTRAINT_BUFSIZE, "%llu", (unsigned long long)ConstraintValue->Value.SignedInteger); + break; + case EDSLIB_BASICTYPE_BINARY: + strncpy(Buffer, ConstraintValue->Value.StringData, CONSTRAINT_BUFSIZE - 1); + Buffer[CONSTRAINT_BUFSIZE - 1] = 0; + break; + default: + break; } } static void Enumerate_Members_Usage_Callback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) { - const char *Type; + const char *Type; EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - EdsLib_DisplayHint_t DisplayHint; + EdsLib_DisplayHint_t DisplayHint; if (ParamDesc->FullName != NULL) { EdsLib_DataTypeDB_GetTypeInfo(&EDS_DATABASE, ParamDesc->EntityInfo.EdsId, &TypeInfo); DisplayHint = EdsLib_DisplayDB_GetDisplayHint(&EDS_DATABASE, ParamDesc->EntityInfo.EdsId); - switch(TypeInfo.ElemType) + switch (TypeInfo.ElemType) { - case EDSLIB_BASICTYPE_SIGNED_INT: - Type = "int"; - break; - case EDSLIB_BASICTYPE_UNSIGNED_INT: - Type = "uint"; - break; - case EDSLIB_BASICTYPE_FLOAT: - Type = "ieee"; - break; - case EDSLIB_BASICTYPE_BINARY: - Type = "binary"; - break; - default: - Type = "other"; - break; + case EDSLIB_BASICTYPE_SIGNED_INT: + Type = "int"; + break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + Type = "uint"; + break; + case EDSLIB_BASICTYPE_FLOAT: + Type = "ieee"; + break; + case EDSLIB_BASICTYPE_BINARY: + Type = "binary"; + break; + default: + Type = "other"; + break; } - switch(DisplayHint) + switch (DisplayHint) { - case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: - Type = "enum"; - break; - case EDSLIB_DISPLAYHINT_STRING: - Type = "string"; - break; - default: - break; + case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: + Type = "enum"; + break; + case EDSLIB_DISPLAYHINT_STRING: + Type = "string"; + break; + default: + break; } printf(" %10s/%-4u %s\n", Type, TypeInfo.Size.Bits, ParamDesc->FullName); } @@ -364,14 +378,15 @@ static void Enumerate_Members_Usage_Callback(void *Arg, const EdsLib_EntityDescr /* ** main function */ -int main(int argc, char *argv[]) { - int opt = 0; - int longIndex = 0; - int retStat; +int main(int argc, char *argv[]) +{ + int opt = 0; + int longIndex = 0; + int retStat; uint16_t Idx; - int32_t EdsRc; - char *Separator; - char ConstraintBuffer[CONSTRAINT_BUFSIZE]; + int32_t EdsRc; + char *Separator; + char ConstraintBuffer[CONSTRAINT_BUFSIZE]; EdsDataType_CFE_HDR_Message_t *MessagePtr = (EdsDataType_CFE_HDR_Message_t *)(void *)&CommandBuffer; @@ -380,46 +395,46 @@ int main(int argc, char *argv[]) { */ memset(&(CommandData), 0, sizeof(CommandData_t)); - strncpy(CommandData.HostName, DEFAULT_HOSTNAME, OPTARG_SIZE-1); - CommandData.PortNum = 0; + strncpy(CommandData.HostName, DEFAULT_HOSTNAME, OPTARG_SIZE - 1); + CommandData.PortNum = 0; CommandData.Params.Telecommand.InstanceNumber = 1; /* ** Process the arguments with getopt_long(), then ** Build the packet. */ - opt = getopt_long( argc, argv, optString, longOpts, &longIndex ); - while( opt != -1 ) + opt = getopt_long(argc, argv, optString, longOpts, &longIndex); + while (opt != -1) { - switch( opt ) + switch (opt) { - case 'H': - printf("Host: %s\n",(char *)optarg); - strncpy(CommandData.HostName, optarg, OPTARG_SIZE-1); - break; + case 'H': + printf("Host: %s\n", (char *)optarg); + strncpy(CommandData.HostName, optarg, OPTARG_SIZE - 1); + break; - case 'P': - CommandData.PortNum = atoi(optarg); - break; + case 'P': + CommandData.PortNum = atoi(optarg); + break; - case 'v': - printf("Verbose messages on.\n"); - CommandData.Verbose = 1; - break; + case 'v': + printf("Verbose messages on.\n"); + CommandData.Verbose = 1; + break; - case 'D': - strncpy(CommandData.DestIntf, optarg, OPTARG_SIZE-1); - break; + case 'D': + strncpy(CommandData.DestIntf, optarg, OPTARG_SIZE - 1); + break; - case '?': - CommandData.GotUsageReq = 1; - break; + case '?': + CommandData.GotUsageReq = 1; + break; - default: - break; + default: + break; } - opt = getopt_long( argc, argv, optString, longOpts, &longIndex ); + opt = getopt_long(argc, argv, optString, longOpts, &longIndex); } if (CommandData.GotUsageReq) @@ -427,12 +442,13 @@ int main(int argc, char *argv[]) { DisplayUsage(argv[0], &CommandData); } - EdsRc = EdsLib_DataTypeDB_GetTypeInfo(&EDS_DATABASE, - EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_CommandHeader_DATADICTIONARY), - &CommandData.EdsHeaderInfo); + EdsRc = EdsLib_DataTypeDB_GetTypeInfo( + &EDS_DATABASE, + EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_CommandHeader_DATADICTIONARY), + &CommandData.EdsHeaderInfo); if (EdsRc != EDSLIB_SUCCESS) { - fprintf(stderr,"CCSDS Primary Header lookup failed.\n"); + fprintf(stderr, "CCSDS Primary Header lookup failed.\n"); return EXIT_FAILURE; } @@ -441,10 +457,10 @@ int main(int argc, char *argv[]) { { *Separator = 0; CommandData.Params.Telecommand.InstanceNumber = - CFE_MissionLib_GetInstanceNumber(&CFE_SOFTWAREBUS_INTERFACE, CommandData.DestIntf); + CFE_MissionLib_GetInstanceNumber(&CFE_SOFTWAREBUS_INTERFACE, CommandData.DestIntf); if (CommandData.Params.Telecommand.InstanceNumber == 0) { - fprintf(stderr,"Instance specifier \'%s\' invalid.\n", CommandData.DestIntf); + fprintf(stderr, "Instance specifier \'%s\' invalid.\n", CommandData.DestIntf); return EXIT_FAILURE; } ++Separator; @@ -467,8 +483,7 @@ int main(int argc, char *argv[]) { strcpy(CommandData.CmdName, Separator + 1); } - EdsRc = EdsLib_IntfDB_FindComponentInterfaceByFullName(&EDS_DATABASE, CommandData.DestIntf, - &CommandData.IntfEdsId); + EdsRc = EdsLib_IntfDB_FindComponentInterfaceByFullName(&EDS_DATABASE, CommandData.DestIntf, &CommandData.IntfEdsId); if (EdsRc != EDSLIB_SUCCESS) { /* @@ -477,27 +492,29 @@ int main(int argc, char *argv[]) { * have named components at all, and it also reduces the amount that the user has * to type since all top-level SB components are called "Application". */ - Separator = strrchr(CommandData.DestIntf, '/'); + Separator = strrchr(CommandData.DestIntf, '/'); size_t FullLen = strlen(CommandData.DestIntf); if (Separator != NULL && (FullLen + sizeof(DEFAULT_COMPONENT)) < sizeof(CommandData.DestIntf)) { memmove(Separator + sizeof(DEFAULT_COMPONENT), Separator, 1 + FullLen - (Separator - CommandData.DestIntf)); - memcpy(Separator+1, DEFAULT_COMPONENT, sizeof(DEFAULT_COMPONENT) - 1); + memcpy(Separator + 1, DEFAULT_COMPONENT, sizeof(DEFAULT_COMPONENT) - 1); Separator[0] = '/'; - EdsRc = EdsLib_IntfDB_FindComponentInterfaceByFullName(&EDS_DATABASE, CommandData.DestIntf, - &CommandData.IntfEdsId); + EdsRc = EdsLib_IntfDB_FindComponentInterfaceByFullName(&EDS_DATABASE, + CommandData.DestIntf, + &CommandData.IntfEdsId); } } if (EdsRc == EDSLIB_SUCCESS) { - EdsRc = CFE_MissionLib_FindTopicIdFromIntfId(&CFE_SOFTWAREBUS_INTERFACE, CommandData.IntfEdsId, - &CommandData.Params.Telecommand.TopicId); + EdsRc = CFE_MissionLib_FindTopicIdFromIntfId(&CFE_SOFTWAREBUS_INTERFACE, + CommandData.IntfEdsId, + &CommandData.Params.Telecommand.TopicId); } if (EdsRc != CFE_MISSIONLIB_SUCCESS) { if (CommandData.DestIntf[0] != 0) { - fprintf(stderr,"Dest Interface Argument: '%s' rejected. Interface not known.\n", CommandData.DestIntf); + fprintf(stderr, "Dest Interface Argument: '%s' rejected. Interface not known.\n", CommandData.DestIntf); } if (CommandData.GotUsageReq) { @@ -511,7 +528,7 @@ int main(int argc, char *argv[]) { EdsRc = EdsLib_IntfDB_GetComponentInterfaceInfo(&EDS_DATABASE, CommandData.IntfEdsId, &CommandData.IntfInfo); if (EdsRc != EDSLIB_SUCCESS) { - fprintf(stderr,"Cannot lookup interface info for: '%s'\n", CommandData.DestIntf); + fprintf(stderr, "Cannot lookup interface info for: '%s'\n", CommandData.DestIntf); return EXIT_FAILURE; } @@ -519,17 +536,22 @@ int main(int argc, char *argv[]) { CFE_MissionLib_Set_PubSub_Parameters(MessagePtr, &CommandData.PubSub); - EdsRc = EdsLib_IntfDB_FindAllArgumentTypes(&EDS_DATABASE, CFE_SB_TELECOMMAND_CMD_ID, CommandData.IntfEdsId, &CommandData.IntfArg, 1); + EdsRc = EdsLib_IntfDB_FindAllArgumentTypes(&EDS_DATABASE, + CFE_SB_TELECOMMAND_CMD_ID, + CommandData.IntfEdsId, + &CommandData.IntfArg, + 1); if (EdsRc != EDSLIB_SUCCESS) { - fprintf(stderr,"Cannot lookup argument type for: '%s', rc=%d\n", CommandData.DestIntf, (int)EdsRc); + fprintf(stderr, "Cannot lookup argument type for: '%s', rc=%d\n", CommandData.DestIntf, (int)EdsRc); return EXIT_FAILURE; } if (CommandData.Verbose) { - printf("Base Indication Argument EdsId=%x / %s\n", (unsigned int)CommandData.IntfArg, - EdsLib_DisplayDB_GetBaseName(&EDS_DATABASE, CommandData.IntfArg)); + printf("Base Indication Argument EdsId=%x / %s\n", + (unsigned int)CommandData.IntfArg, + EdsLib_DisplayDB_GetBaseName(&EDS_DATABASE, CommandData.IntfArg)); } CommandData.ActualArg = CommandData.IntfArg; @@ -544,7 +566,8 @@ int main(int argc, char *argv[]) { EdsLib_Id_t PossibleId; Idx = 0; - while (EdsLib_DataTypeDB_GetDerivedTypeById(&EDS_DATABASE, CommandData.IntfArg, Idx, &PossibleId) == EDSLIB_SUCCESS) + while (EdsLib_DataTypeDB_GetDerivedTypeById(&EDS_DATABASE, CommandData.IntfArg, Idx, &PossibleId) + == EDSLIB_SUCCESS) { if (strcmp(EdsLib_DisplayDB_GetBaseName(&EDS_DATABASE, PossibleId), CommandData.CmdName) == 0) { @@ -558,22 +581,34 @@ int main(int argc, char *argv[]) { { if (CommandData.CmdName[0] == 0) { - fprintf(stderr,"Dest Interface requires a derivative specifier / command code: \'%s\'\n", CommandData.DestIntf); + fprintf(stderr, + "Dest Interface requires a derivative specifier / command code: \'%s\'\n", + CommandData.DestIntf); } else { - fprintf(stderr,"Command \'%s\' not found within interface \'%s\'\n", CommandData.CmdName, CommandData.DestIntf); + fprintf(stderr, + "Command \'%s\' not found within interface \'%s\'\n", + CommandData.CmdName, + CommandData.DestIntf); } if (CommandData.GotUsageReq) { printf("\nAvailable Command Codes:\n"); Idx = 0; - while (EdsLib_DataTypeDB_GetDerivedTypeById(&EDS_DATABASE, CommandData.IntfArg, Idx, &PossibleId) == EDSLIB_SUCCESS) + while (EdsLib_DataTypeDB_GetDerivedTypeById(&EDS_DATABASE, CommandData.IntfArg, Idx, &PossibleId) + == EDSLIB_SUCCESS) { strcpy(ConstraintBuffer, "N/A"); - EdsLib_DataTypeDB_ConstraintIterator(&EDS_DATABASE, CommandData.IntfArg, PossibleId, Enumerate_Constraint_Callback, ConstraintBuffer); - - printf(" %-40s (%s)\n", EdsLib_DisplayDB_GetBaseName(&EDS_DATABASE, PossibleId), ConstraintBuffer); + EdsLib_DataTypeDB_ConstraintIterator(&EDS_DATABASE, + CommandData.IntfArg, + PossibleId, + Enumerate_Constraint_Callback, + ConstraintBuffer); + + printf(" %-40s (%s)\n", + EdsLib_DisplayDB_GetBaseName(&EDS_DATABASE, PossibleId), + ConstraintBuffer); ++Idx; } } @@ -582,19 +617,20 @@ int main(int argc, char *argv[]) { } else if (CommandData.CmdName[0] != 0) { - fprintf(stderr,"Dest Interface does not have command codes: \'%s\'\n", CommandData.DestIntf); + fprintf(stderr, "Dest Interface does not have command codes: \'%s\'\n", CommandData.DestIntf); return EXIT_FAILURE; } if (CommandData.Verbose) { - printf("Actual Indication Argument EdsId=%x / %s\n", (unsigned int)CommandData.ActualArg, - EdsLib_DisplayDB_GetBaseName(&EDS_DATABASE, CommandData.ActualArg)); + printf("Actual Indication Argument EdsId=%x / %s\n", + (unsigned int)CommandData.ActualArg, + EdsLib_DisplayDB_GetBaseName(&EDS_DATABASE, CommandData.ActualArg)); } if (EdsLib_DataTypeDB_GetTypeInfo(&EDS_DATABASE, CommandData.ActualArg, &CommandData.EdsTypeInfo) != EDSLIB_SUCCESS) { - fprintf(stderr,"Error retrieving info for code %x\n", (unsigned int)CommandData.ActualArg); + fprintf(stderr, "Error retrieving info for code %x\n", (unsigned int)CommandData.ActualArg); return EXIT_FAILURE; } @@ -608,7 +644,10 @@ int main(int argc, char *argv[]) { if (EdsLib_Is_Valid(CommandData.EdsPayloadInfo.EdsId)) { printf("\nDefined Payload Fields (sizes in bits):\n"); - EdsLib_DisplayDB_IterateAllEntities(&EDS_DATABASE, CommandData.EdsPayloadInfo.EdsId, Enumerate_Members_Usage_Callback, NULL); + EdsLib_DisplayDB_IterateAllEntities(&EDS_DATABASE, + CommandData.EdsPayloadInfo.EdsId, + Enumerate_Members_Usage_Callback, + NULL); } else { @@ -629,8 +668,8 @@ int main(int argc, char *argv[]) { */ while (optind < argc) { - ProcessParameterArgument(argv[optind], &CommandData); - ++optind; + ProcessParameterArgument(argv[optind], &CommandData); + ++optind; } /* @@ -639,19 +678,26 @@ int main(int argc, char *argv[]) { * Hardcoding the sequence number / flags field for now. */ MessagePtr->CCSDS.CommonHdr.SeqFlag = 0x3; - EdsLib_DataTypeDB_PackCompleteObject(&EDS_DATABASE, &CommandData.ActualArg, - PackedCommand, CommandBuffer.Byte, - sizeof(PackedCommand) * 8, CommandData.EdsTypeInfo.Size.Bytes); + EdsLib_DataTypeDB_PackCompleteObject(&EDS_DATABASE, + &CommandData.ActualArg, + PackedCommand, + CommandBuffer.Byte, + sizeof(PackedCommand) * 8, + CommandData.EdsTypeInfo.Size.Bytes); /* ** Send the packet */ - retStat = SendUdp(CommandData.HostName, CommandData.PortNum, PackedCommand, (CommandData.EdsTypeInfo.Size.Bits + 7) / 8); + retStat = + SendUdp(CommandData.HostName, CommandData.PortNum, PackedCommand, (CommandData.EdsTypeInfo.Size.Bits + 7) / 8); - if (retStat < 0) { - fprintf(stderr,"Problem sending UDP packet: %d\n", retStat); - return ( retStat ); - } else if (CommandData.Verbose) { + if (retStat < 0) + { + fprintf(stderr, "Problem sending UDP packet: %d\n", retStat); + return (retStat); + } + else if (CommandData.Verbose) + { printf("Command packet sent OK.\n"); } diff --git a/cfecfs/util/tlm_decode.c b/cfecfs/util/tlm_decode.c index cc7dc94..c055bfa 100644 --- a/cfecfs/util/tlm_decode.c +++ b/cfecfs/util/tlm_decode.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file tlm_decode.c * \ingroup cfecfs @@ -48,187 +47,195 @@ #include "cfe_missionlib_runtime.h" #include "cfe_missionlib_api.h" - #define BASE_SERVER_PORT 2234 -EdsNativeBuffer_CFE_HDR_TelemetryHeader_t LocalBuffer; +EdsNativeBuffer_CFE_HDR_TelemetryHeader_t LocalBuffer; EdsPackedBuffer_CFE_HDR_TelemetryHeader_t NetworkBuffer; static const char *optString = "c:?"; -static const EdsLib_Id_t CFE_SB_TELEMETRY_CMD_ID = EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telemetry_indication_DECLARATION); +static const EdsLib_Id_t CFE_SB_TELEMETRY_CMD_ID = + EDSLIB_INTF_ID(EDS_INDEX(CFE_SB), EdsCommand_CFE_SB_Telemetry_indication_DECLARATION); /* ** getopts_long long form argument table */ static struct option longOpts[] = { - { "cpu", required_argument, NULL, 'c' }, - { "help", no_argument, NULL, '?' }, - { NULL, no_argument, NULL, 0 } + { "cpu", required_argument, NULL, 'c' }, + { "help", no_argument, NULL, '?' }, + { NULL, no_argument, NULL, 0 } }; - - void TlmUtilDisplay(void *Arg, const EdsLib_EntityDescriptor_t *Param) { - uint8_t *BasePtr; - char OutputBuffer[256]; - - BasePtr = (uint8_t *)Arg; - BasePtr += Param->EntityInfo.Offset.Bytes; - EdsLib_Scalar_ToString(&EDS_DATABASE, Param->EntityInfo.EdsId, OutputBuffer, sizeof(OutputBuffer), BasePtr); - printf("%s(): Bit=%-4d %35s = %s\n",__func__, - Param->EntityInfo.Offset.Bits, Param->FullName, OutputBuffer); + uint8_t *BasePtr; + char OutputBuffer[256]; + + BasePtr = (uint8_t *)Arg; + BasePtr += Param->EntityInfo.Offset.Bytes; + EdsLib_Scalar_ToString(&EDS_DATABASE, Param->EntityInfo.EdsId, OutputBuffer, sizeof(OutputBuffer), BasePtr); + printf("%s(): Bit=%-4d %35s = %s\n", __func__, Param->EntityInfo.Offset.Bits, Param->FullName, OutputBuffer); } int main(int argc, char *argv[]) { - int opt = 0; - int longIndex = 0; - int sd, rc, n, cliLen; - struct sockaddr_in cliAddr, servAddr; - unsigned short Port; - EdsLib_Id_t EdsId; - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSubParams; - EdsComponent_CFE_SB_Publisher_t PublisherParams; - CFE_MissionLib_TopicInfo_t TopicInfo; - char TempBuffer[64]; - int32_t Status; - - EdsDataType_CFE_HDR_Message_t *MessagePtr = (EdsDataType_CFE_HDR_Message_t *)(void *)&LocalBuffer; - - - Port = BASE_SERVER_PORT; - opt = getopt_long( argc, argv, optString, longOpts, &longIndex ); - while( opt != -1 ) - { - switch( opt ) - { - case 'c': - Port += atoi(optarg) - 1; - break; - - case '?': - break; - - default: - break; - } - - opt = getopt_long( argc, argv, optString, longOpts, &longIndex ); - } - - - /* - ** socket creation - */ - sd=socket(AF_INET, SOCK_DGRAM, 0); - if(sd < 0) - { - printf("%s: cannot open socket \n",argv[0]); - exit(1); - } - - /* - ** bind local server port - */ - servAddr.sin_family = AF_INET; - servAddr.sin_addr.s_addr = htonl(INADDR_ANY); - servAddr.sin_port = htons(Port); - rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr)); - if(rc<0) - { - printf("%s: cannot bind port number %d \n", - argv[0], Port); - exit(1); - } - - printf("%s: waiting for data on port UDP %u\n", - argv[0],Port); - - /* server infinite loop */ - while(1) - { - - /* - ** receive message - */ - cliLen = sizeof(cliAddr); - n = recvfrom(sd, NetworkBuffer, sizeof(NetworkBuffer), 0, - (struct sockaddr *) &cliAddr, (socklen_t *) &cliLen); - - if(n<0) + int opt = 0; + int longIndex = 0; + int sd, rc, n, cliLen; + struct sockaddr_in cliAddr, servAddr; + unsigned short Port; + EdsLib_Id_t EdsId; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSubParams; + EdsComponent_CFE_SB_Publisher_t PublisherParams; + CFE_MissionLib_TopicInfo_t TopicInfo; + char TempBuffer[64]; + int32_t Status; + + EdsDataType_CFE_HDR_Message_t *MessagePtr = (EdsDataType_CFE_HDR_Message_t *)(void *)&LocalBuffer; + + Port = BASE_SERVER_PORT; + opt = getopt_long(argc, argv, optString, longOpts, &longIndex); + while (opt != -1) { - printf("%s: cannot receive data \n",argv[0]); - continue; - } - - /* - ** print received message - */ + switch (opt) + { + case 'c': + Port += atoi(optarg) - 1; + break; - printf("Telemetry Packet From: %s:UDP%u, %u bits : \n", - inet_ntoa(cliAddr.sin_addr), - ntohs(cliAddr.sin_port), - 8 * n); + case '?': + break; - if (n > 0) - { - EdsLib_Generate_Hexdump(stdout, NetworkBuffer, 0, n); - } + default: + break; + } - EdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_TelemetryHeader_DATADICTIONARY); - Status = EdsLib_DataTypeDB_GetTypeInfo(&EDS_DATABASE, EdsId, &TypeInfo); - if (Status != EDSLIB_SUCCESS) - { - return Status; + opt = getopt_long(argc, argv, optString, longOpts, &longIndex); } - Status = EdsLib_DataTypeDB_UnpackPartialObject(&EDS_DATABASE, &EdsId, - LocalBuffer.Byte, NetworkBuffer, sizeof(LocalBuffer), 8 * n, 0); - if (Status != EDSLIB_SUCCESS) - { - return Status; - } - - CFE_MissionLib_Get_PubSub_Parameters(&PubSubParams, MessagePtr); - CFE_MissionLib_UnmapPublisherComponent(&PublisherParams, &PubSubParams); - - Status = CFE_MissionLib_GetTopicInfo(&CFE_SOFTWAREBUS_INTERFACE, PublisherParams.Telemetry.TopicId, &TopicInfo); - if (Status != CFE_MISSIONLIB_SUCCESS) - { - return Status; - } - - Status = EdsLib_IntfDB_FindAllArgumentTypes(&EDS_DATABASE, CFE_SB_TELEMETRY_CMD_ID, TopicInfo.ParentIntfId, &EdsId, 1); - if (Status != EDSLIB_SUCCESS) + /* + ** socket creation + */ + sd = socket(AF_INET, SOCK_DGRAM, 0); + if (sd < 0) { - return Status; + printf("%s: cannot open socket \n", argv[0]); + exit(1); } - Status = EdsLib_DataTypeDB_UnpackPartialObject(&EDS_DATABASE, &EdsId, LocalBuffer.Byte, NetworkBuffer, - sizeof(LocalBuffer), 8 * n, TypeInfo.Size.Bytes); - if (Status != EDSLIB_SUCCESS) + /* + ** bind local server port + */ + servAddr.sin_family = AF_INET; + servAddr.sin_addr.s_addr = htonl(INADDR_ANY); + servAddr.sin_port = htons(Port); + rc = bind(sd, (struct sockaddr *)&servAddr, sizeof(servAddr)); + if (rc < 0) { - return Status; + printf("%s: cannot bind port number %d \n", argv[0], Port); + exit(1); } - printf("Formatcode=%08lx / %s\n",(unsigned long)EdsId, - EdsLib_DisplayDB_GetTypeName(&EDS_DATABASE, EdsId, TempBuffer, sizeof(TempBuffer))); + printf("%s: waiting for data on port UDP %u\n", argv[0], Port); - Status = EdsLib_DataTypeDB_VerifyUnpackedObject(&EDS_DATABASE, EdsId, LocalBuffer.Byte, - NetworkBuffer, EDSLIB_DATATYPEDB_RECOMPUTE_NONE); - if (Status != EDSLIB_SUCCESS) + /* server infinite loop */ + while (1) { - printf("NOTE - EDS VERIFICATION FAILED: code=%d\n", (int)Status); - } - - EdsLib_DisplayDB_IterateAllEntities(&EDS_DATABASE, EdsId, TlmUtilDisplay, LocalBuffer.Byte); - printf("\n"); - - }/* end of server infinite loop */ - - return 0; - + /* + ** receive message + */ + cliLen = sizeof(cliAddr); + n = recvfrom(sd, NetworkBuffer, sizeof(NetworkBuffer), 0, (struct sockaddr *)&cliAddr, (socklen_t *)&cliLen); + + if (n < 0) + { + printf("%s: cannot receive data \n", argv[0]); + continue; + } + + /* + ** print received message + */ + + printf("Telemetry Packet From: %s:UDP%u, %u bits : \n", + inet_ntoa(cliAddr.sin_addr), + ntohs(cliAddr.sin_port), + 8 * n); + + if (n > 0) + { + EdsLib_Generate_Hexdump(stdout, NetworkBuffer, 0, n); + } + + EdsId = EDSLIB_MAKE_ID(EDS_INDEX(CFE_HDR), EdsContainer_CFE_HDR_TelemetryHeader_DATADICTIONARY); + Status = EdsLib_DataTypeDB_GetTypeInfo(&EDS_DATABASE, EdsId, &TypeInfo); + if (Status != EDSLIB_SUCCESS) + { + return Status; + } + + Status = EdsLib_DataTypeDB_UnpackPartialObject(&EDS_DATABASE, + &EdsId, + LocalBuffer.Byte, + NetworkBuffer, + sizeof(LocalBuffer), + 8 * n, + 0); + if (Status != EDSLIB_SUCCESS) + { + return Status; + } + + CFE_MissionLib_Get_PubSub_Parameters(&PubSubParams, MessagePtr); + CFE_MissionLib_UnmapPublisherComponent(&PublisherParams, &PubSubParams); + + Status = CFE_MissionLib_GetTopicInfo(&CFE_SOFTWAREBUS_INTERFACE, PublisherParams.Telemetry.TopicId, &TopicInfo); + if (Status != CFE_MISSIONLIB_SUCCESS) + { + return Status; + } + + Status = EdsLib_IntfDB_FindAllArgumentTypes(&EDS_DATABASE, + CFE_SB_TELEMETRY_CMD_ID, + TopicInfo.ParentIntfId, + &EdsId, + 1); + if (Status != EDSLIB_SUCCESS) + { + return Status; + } + + Status = EdsLib_DataTypeDB_UnpackPartialObject(&EDS_DATABASE, + &EdsId, + LocalBuffer.Byte, + NetworkBuffer, + sizeof(LocalBuffer), + 8 * n, + TypeInfo.Size.Bytes); + if (Status != EDSLIB_SUCCESS) + { + return Status; + } + + printf("Formatcode=%08lx / %s\n", + (unsigned long)EdsId, + EdsLib_DisplayDB_GetTypeName(&EDS_DATABASE, EdsId, TempBuffer, sizeof(TempBuffer))); + + Status = EdsLib_DataTypeDB_VerifyUnpackedObject(&EDS_DATABASE, + EdsId, + LocalBuffer.Byte, + NetworkBuffer, + EDSLIB_DATATYPEDB_RECOMPUTE_NONE); + if (Status != EDSLIB_SUCCESS) + { + printf("NOTE - EDS VERIFICATION FAILED: code=%d\n", (int)Status); + } + + EdsLib_DisplayDB_IterateAllEntities(&EDS_DATABASE, EdsId, TlmUtilDisplay, LocalBuffer.Byte); + printf("\n"); + + } /* end of server infinite loop */ + + return 0; } diff --git a/edslib/configtest/edslib_longdouble.c b/edslib/configtest/edslib_longdouble.c index 7b667a2..f31b82d 100644 --- a/edslib/configtest/edslib_longdouble.c +++ b/edslib/configtest/edslib_longdouble.c @@ -18,26 +18,25 @@ * limitations under the License. */ - /** * \file edslib_longdouble.c * \ingroup edslib * \author joseph.p.hickey@nasa.gov * -** This is a configuration test file used by the build system to determine -** the level of floating point type support of the compiler and C library. -** -** For the Pack/Unpack routines in EdsLib it is beneficial to use the maximum -** precision that is possible using the native FPU. C99 defined the "long double" -** type and other systems may even have some form of quad type. -** -** On the other end of the spectrum, embedded microcontrollers may not even -** support any sort of extended-precision type at all. -** -** At the moment this checks if we can compile a simple function that uses -** the long double type. If this succeeds then it is assumed that the system -** has a functional "long double" implementation. Otherwise a standard "double" -** can be used instead. + ** This is a configuration test file used by the build system to determine + ** the level of floating point type support of the compiler and C library. + ** + ** For the Pack/Unpack routines in EdsLib it is beneficial to use the maximum + ** precision that is possible using the native FPU. C99 defined the "long double" + ** type and other systems may even have some form of quad type. + ** + ** On the other end of the spectrum, embedded microcontrollers may not even + ** support any sort of extended-precision type at all. + ** + ** At the moment this checks if we can compile a simple function that uses + ** the long double type. If this succeeds then it is assumed that the system + ** has a functional "long double" implementation. Otherwise a standard "double" + ** can be used instead. */ #include @@ -46,9 +45,9 @@ int main(void) { - long double x1,x2; + long double x1, x2; long double y; - int e; + int e; x1 = 1234.0L; @@ -60,13 +59,13 @@ int main(void) * EdsLib uses some others beyond these two, but it is assumed if these * two will build and link than the others will too. */ - y = frexpl(x1, &e); + y = frexpl(x1, &e); x2 = ldexpl(y, e); if (x1 != x2) { - return(EXIT_FAILURE); + return (EXIT_FAILURE); } - return(EXIT_SUCCESS); + return (EXIT_SUCCESS); } diff --git a/edslib/fsw/inc/edslib_api_types.h b/edslib/fsw/inc/edslib_api_types.h index 18acd22..f414bb1 100644 --- a/edslib/fsw/inc/edslib_api_types.h +++ b/edslib/fsw/inc/edslib_api_types.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_api_types.h * \ingroup fsw @@ -43,7 +42,6 @@ #ifndef _EDSLIB_API_TYPES_H_ #define _EDSLIB_API_TYPES_H_ - /** * Abstract pointer to a basic EDS object with minimal info on the member objects * This is also referred to as the data dictionary since it has info on how to @@ -52,7 +50,7 @@ * Note that these objects are always constant; the database objects are generated * from the toolchain, compiled in and should never be modified at runtime. */ -typedef const struct EdsLib_App_DataTypeDB * EdsLib_DataTypeDB_t; +typedef const struct EdsLib_App_DataTypeDB *EdsLib_DataTypeDB_t; /** * Abstract pointer to a full EDS object with detailed info on the member objects @@ -62,7 +60,7 @@ typedef const struct EdsLib_App_DataTypeDB * EdsLib_DataTypeDB_t; * Note that these objects are always constant; the database objects are generated * from the toolchain, compiled in and should never be modified at runtime. */ -typedef const struct EdsLib_App_DisplayDB * EdsLib_DisplayDB_t; +typedef const struct EdsLib_App_DisplayDB *EdsLib_DisplayDB_t; /** * Abstract pointer to a EDS object with interface information @@ -70,7 +68,7 @@ typedef const struct EdsLib_App_DisplayDB * EdsLib_DisplayDB_t; * Note that these objects are always constant; the database objects are generated * from the toolchain, compiled in and should never be modified at runtime. */ -typedef const struct EdsLib_App_IntfDB * EdsLib_IntfDB_t; +typedef const struct EdsLib_App_IntfDB *EdsLib_IntfDB_t; /** * An EDS runtime database object @@ -85,14 +83,14 @@ typedef const struct EdsLib_App_IntfDB * EdsLib_IntfDB_t; */ struct EdsLib_DatabaseObject { - uint16_t AppTableSize; /**< Length of all the arrays (they should all match) */ - const char * const *AppName_Table; - EdsLib_DataTypeDB_t *DataTypeDB_Table; - EdsLib_DisplayDB_t *DisplayDB_Table; - EdsLib_IntfDB_t *IntfDB_Table; + uint16_t AppTableSize; /**< Length of all the arrays (they should all match) */ + const char *const *AppName_Table; + EdsLib_DataTypeDB_t *DataTypeDB_Table; + EdsLib_DisplayDB_t *DisplayDB_Table; + EdsLib_IntfDB_t *IntfDB_Table; }; -typedef struct EdsLib_DatabaseObject EdsLib_DatabaseObject_t; +typedef struct EdsLib_DatabaseObject EdsLib_DatabaseObject_t; /** * Indicates the fundamental nature of various elements within EDS basic data structures. @@ -100,52 +98,54 @@ typedef struct EdsLib_DatabaseObject EdsLib_DatabaseObject_t; */ typedef enum { - EDSLIB_BASICTYPE_NONE = 0, /**< Reserved value, any content for this element should be ignored */ - EDSLIB_BASICTYPE_SIGNED_INT, /**< Interpret as a signed integer. Byte swapping applies. */ - EDSLIB_BASICTYPE_UNSIGNED_INT, /**< Interpret as an unsigned integer. Byte swapping applies. */ - EDSLIB_BASICTYPE_FLOAT, /**< Interpret as a floating point. Byte swapping applies. */ - EDSLIB_BASICTYPE_BINARY, /**< Pass-through data blob. No byte swapping. (char strings, etc) */ - EDSLIB_BASICTYPE_CONTAINER, /**< References to multiple other data blobs of heterogeneous types */ - EDSLIB_BASICTYPE_ARRAY, /**< References to multiple other data blobs of homogeneous type */ - EDSLIB_BASICTYPE_COMPONENT, /**< References to component entities */ - EDSLIB_BASICTYPE_ALIAS, /**< References to another EDS defined type */ - EDSLIB_BASICTYPE_GENERIC, /**< A generic type in an declared interface */ - EDSLIB_BASICTYPE_MAX /**< Reserved value, should always be last */ + EDSLIB_BASICTYPE_NONE = 0, /**< Reserved value, any content for this element should be ignored */ + EDSLIB_BASICTYPE_SIGNED_INT, /**< Interpret as a signed integer. Byte swapping applies. */ + EDSLIB_BASICTYPE_UNSIGNED_INT, /**< Interpret as an unsigned integer. Byte swapping applies. */ + EDSLIB_BASICTYPE_FLOAT, /**< Interpret as a floating point. Byte swapping applies. */ + EDSLIB_BASICTYPE_BINARY, /**< Pass-through data blob. No byte swapping. (char strings, etc) */ + EDSLIB_BASICTYPE_CONTAINER, /**< References to multiple other data blobs of heterogeneous types */ + EDSLIB_BASICTYPE_ARRAY, /**< References to multiple other data blobs of homogeneous type */ + EDSLIB_BASICTYPE_COMPONENT, /**< References to component entities */ + EDSLIB_BASICTYPE_ALIAS, /**< References to another EDS defined type */ + EDSLIB_BASICTYPE_GENERIC, /**< A generic type in an declared interface */ + EDSLIB_BASICTYPE_MAX /**< Reserved value, should always be last */ } EdsLib_BasicType_t; typedef enum { - EDSLIB_DISPLAYHINT_NONE = 0, /**< No extra display hints (use default) */ - EDSLIB_DISPLAYHINT_STRING, /**< indicates that the binary blob contains character string data */ - EDSLIB_DISPLAYHINT_REFERENCE_TYPE, - EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE, /**< indicates that the binary blob contains sub elements, HintArg => Name Table */ - EDSLIB_DISPLAYHINT_ENUM_SYMTABLE, /**< indicates that the integer value has associated names for display, HintArg => Name Table */ - EDSLIB_DISPLAYHINT_ADDRESS, /**< indicates that the integer value represents a memory address */ - EDSLIB_DISPLAYHINT_BOOLEAN, /**< indicates that the field contains a true/false value */ - EDSLIB_DISPLAYHINT_BASE64, /**< indicates that the binary blob should use base64 for display */ - EDSLIB_DISPLAYHINT_MAX + EDSLIB_DISPLAYHINT_NONE = 0, /**< No extra display hints (use default) */ + EDSLIB_DISPLAYHINT_STRING, /**< indicates that the binary blob contains character string data */ + EDSLIB_DISPLAYHINT_REFERENCE_TYPE, + EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE, /**< indicates that the binary blob contains sub elements, HintArg => Name + Table */ + EDSLIB_DISPLAYHINT_ENUM_SYMTABLE, /**< indicates that the integer value has associated names for display, HintArg => + Name Table */ + EDSLIB_DISPLAYHINT_ADDRESS, /**< indicates that the integer value represents a memory address */ + EDSLIB_DISPLAYHINT_BOOLEAN, /**< indicates that the field contains a true/false value */ + EDSLIB_DISPLAYHINT_BASE64, /**< indicates that the binary blob should use base64 for display */ + EDSLIB_DISPLAYHINT_MAX } EdsLib_DisplayHint_t; /* - * Definitions of flag values that may appear in the "Flags" member of + * Definitions of flag values that may appear in the "Flags" member of * type and entity information structures. * * Note: The Packing Flags here correlate with the byte order check values * in edslib_datatypedb_pack_unpack.c */ -#define EDSLIB_DATATYPE_FLAG_NONE 0x00 +#define EDSLIB_DATATYPE_FLAG_NONE 0x00 -#define EDSLIB_DATATYPE_FLAG_PACKED_BE 0x01 /**< Matches typical "big-endian" native representation */ -#define EDSLIB_DATATYPE_FLAG_PACKED_LE 0x02 /**< Matches typical "little-endian" native representation */ -#define EDSLIB_DATATYPE_FLAG_PACKED 0x03 /**< Mask indicating optimized packing characteristics */ +#define EDSLIB_DATATYPE_FLAG_PACKED_BE 0x01 /**< Matches typical "big-endian" native representation */ +#define EDSLIB_DATATYPE_FLAG_PACKED_LE 0x02 /**< Matches typical "little-endian" native representation */ +#define EDSLIB_DATATYPE_FLAG_PACKED 0x03 /**< Mask indicating optimized packing characteristics */ -#define EDSLIB_DATATYPE_FLAG_VARIABLE_SIZE 0x10 /**< Item can vary in its packed size */ -#define EDSLIB_DATATYPE_FLAG_VARIABLE_LOCATION 0x20 /**< Item can vary in its packed location */ -#define EDSLIB_DATATYPE_FLAG_VARIABLE 0x30 /**< Mask indicating variable packing characteristics */ +#define EDSLIB_DATATYPE_FLAG_VARIABLE_SIZE 0x10 /**< Item can vary in its packed size */ +#define EDSLIB_DATATYPE_FLAG_VARIABLE_LOCATION 0x20 /**< Item can vary in its packed location */ +#define EDSLIB_DATATYPE_FLAG_VARIABLE 0x30 /**< Mask indicating variable packing characteristics */ /** * Structure for size and/or offset information - * + * * Sizes and offsets are given in both bits and bytes, where bits * indicates the position or size in a packed representation and bytes * indicates the position or size in a native representation, respectively. @@ -158,17 +158,16 @@ typedef enum * cannot be determined by database query. * * The "Bytes" value, on the other hand, is always fixed as these represent - * offsets or sizes of the C structure representation, which is fixed at + * offsets or sizes of the C structure representation, which is fixed at * compile time. However this size is platform-dependent and may not be the * same on other systems. */ struct EdsLib_SizeInfo { - uint32_t Bits; /**< Offset/Size in packed structure (nominal, may vary) */ - uint32_t Bytes; /**< Offset/Size in native structure (fixed but platform-dependent) */ + uint32_t Bits; /**< Offset/Size in packed structure (nominal, may vary) */ + uint32_t Bytes; /**< Offset/Size in native structure (fixed but platform-dependent) */ }; typedef struct EdsLib_SizeInfo EdsLib_SizeInfo_t; - -#endif /* _EDSLIB_API_TYPES_H_ */ +#endif /* _EDSLIB_API_TYPES_H_ */ diff --git a/edslib/fsw/inc/edslib_binding_objects.h b/edslib/fsw/inc/edslib_binding_objects.h index 2c12c54..e61e6d4 100644 --- a/edslib/fsw/inc/edslib_binding_objects.h +++ b/edslib/fsw/inc/edslib_binding_objects.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_binding_objects.h * \ingroup fsw @@ -29,7 +28,6 @@ #ifndef _EDSLIB_BINDING_OBJECTS_H_ #define _EDSLIB_BINDING_OBJECTS_H_ - #include #include @@ -38,121 +36,115 @@ extern "C" { #endif - -/***************************************************************************** - * TYPE DEFINITIONS - *****************************************************************************/ - -typedef enum -{ - EDSLIB_BINDING_COMPATIBILITY_NONE = 0, - EDSLIB_BINDING_COMPATIBILITY_BASETYPE, - EDSLIB_BINDING_COMPATIBILITY_EXACT -} EdsLib_Binding_Compatibility_t; - -/** - * A generic abstract buffer for holding any EDS object. - * - * This is a reference-counting buffer, so that many EDS descriptor objects can point - * to the same instance. - */ -typedef struct -{ - /* - * Note - the "Data" field is variably sized, and the MaxContentSize - * indicates the actual number of bytes available here. + /***************************************************************************** + * TYPE DEFINITIONS + *****************************************************************************/ + + typedef enum + { + EDSLIB_BINDING_COMPATIBILITY_NONE = 0, + EDSLIB_BINDING_COMPATIBILITY_BASETYPE, + EDSLIB_BINDING_COMPATIBILITY_EXACT + } EdsLib_Binding_Compatibility_t; + + /** + * A generic abstract buffer for holding any EDS object. + * + * This is a reference-counting buffer, so that many EDS descriptor objects can point + * to the same instance. */ - uint8_t *Data; - bool IsManaged; - size_t MaxContentSize; /**< The actual size of the "Data" field */ - uintmax_t ReferenceCount; /**< The number of references to this buffer */ - -} EdsLib_Binding_Buffer_Content_t; - - -/** - * A runtime descriptor of an EDS object - * - * This object describes a piece of EDS data. It may or may not also contain an actual reference to the data - * being described, depending on context. - */ -struct EdsLib_Binding_DescriptorObject -{ - const EdsLib_DatabaseObject_t *GD; /**< Handle to original database object which defines all EDS types */ - EdsLib_Id_t EdsId; /**< The EDS ID value representing the specific type of the data */ - uint32_t Offset; /**< Absolute Offset of member within the top-level parent structure */ - uint32_t Length; /**< Total allocated space for this object within parent structure */ - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; /**< Information about the component type (size, number of subcomponents, etc) */ - EdsLib_Binding_Buffer_Content_t *BufferPtr; /**< Pointer to a buffer holding the data (optional, may be NULL) */ -}; - -typedef struct EdsLib_Binding_DescriptorObject EdsLib_Binding_DescriptorObject_t; - -/***************************************************************************** - * FUNCTION PROTOTYPES - *****************************************************************************/ - -/** - * EDS Binding API Initialization function. - * - * This should be called once during startup by applications - * that wish to use the EDS Binding Object API before using - * other API calls. - */ -void EdsLib_Binding_Initialize(void); - -EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_AllocManagedBuffer(size_t MaxContentSize); -EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Binding_Buffer_Content_t *ContentPtr, void *DataPtr, size_t MaxContentSize); - -void EdsLib_Binding_SetDescBuffer(EdsLib_Binding_DescriptorObject_t *DescrObj, EdsLib_Binding_Buffer_Content_t *TargetBuffer); - -static inline bool EdsLib_Binding_IsDescBufferValid(const EdsLib_Binding_DescriptorObject_t *DescrObj) -{ - return (DescrObj->BufferPtr != NULL && - EdsLib_Is_Valid(DescrObj->EdsId) && - DescrObj->BufferPtr->MaxContentSize >= (DescrObj->Offset + DescrObj->TypeInfo.Size.Bytes)); -} + typedef struct + { + /* + * Note - the "Data" field is variably sized, and the MaxContentSize + * indicates the actual number of bytes available here. + */ + uint8_t *Data; + bool IsManaged; + size_t MaxContentSize; /**< The actual size of the "Data" field */ + uintmax_t ReferenceCount; /**< The number of references to this buffer */ + + } EdsLib_Binding_Buffer_Content_t; + + /** + * A runtime descriptor of an EDS object + * + * This object describes a piece of EDS data. It may or may not also contain an actual reference to the data + * being described, depending on context. + */ + struct EdsLib_Binding_DescriptorObject + { + const EdsLib_DatabaseObject_t *GD; /**< Handle to original database object which defines all EDS types */ + EdsLib_Id_t EdsId; /**< The EDS ID value representing the specific type of the data */ + uint32_t Offset; /**< Absolute Offset of member within the top-level parent structure */ + uint32_t Length; /**< Total allocated space for this object within parent structure */ + EdsLib_DataTypeDB_TypeInfo_t + TypeInfo; /**< Information about the component type (size, number of subcomponents, etc) */ + EdsLib_Binding_Buffer_Content_t *BufferPtr; /**< Pointer to a buffer holding the data (optional, may be NULL) */ + }; + + typedef struct EdsLib_Binding_DescriptorObject EdsLib_Binding_DescriptorObject_t; + + /***************************************************************************** + * FUNCTION PROTOTYPES + *****************************************************************************/ + + /** + * EDS Binding API Initialization function. + * + * This should be called once during startup by applications + * that wish to use the EDS Binding Object API before using + * other API calls. + */ + void EdsLib_Binding_Initialize(void); + EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_AllocManagedBuffer(size_t MaxContentSize); + EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Binding_Buffer_Content_t *ContentPtr, + void *DataPtr, + size_t MaxContentSize); + void EdsLib_Binding_SetDescBuffer(EdsLib_Binding_DescriptorObject_t *DescrObj, + EdsLib_Binding_Buffer_Content_t *TargetBuffer); -void EdsLib_Binding_InitDescriptor( - EdsLib_Binding_DescriptorObject_t *ObjectUserData, - const EdsLib_DatabaseObject_t *EdsDB, - EdsLib_Id_t EdsId); + static inline bool EdsLib_Binding_IsDescBufferValid(const EdsLib_Binding_DescriptorObject_t *DescrObj) + { + return (DescrObj->BufferPtr != NULL && EdsLib_Is_Valid(DescrObj->EdsId) + && DescrObj->BufferPtr->MaxContentSize >= (DescrObj->Offset + DescrObj->TypeInfo.Size.Bytes)); + } -void EdsLib_Binding_InitSubObject( - EdsLib_Binding_DescriptorObject_t *SubObject, - const EdsLib_Binding_DescriptorObject_t *ParentObj, - const EdsLib_DataTypeDB_EntityInfo_t *Component); + void EdsLib_Binding_InitDescriptor(EdsLib_Binding_DescriptorObject_t *ObjectUserData, + const EdsLib_DatabaseObject_t *EdsDB, + EdsLib_Id_t EdsId); -void *EdsLib_Binding_GetNativeObject(const EdsLib_Binding_DescriptorObject_t *ObjectUserData); -size_t EdsLib_Binding_GetNativeSize(const EdsLib_Binding_DescriptorObject_t *ObjectUserData); -size_t EdsLib_Binding_GetBufferMaxSize(const EdsLib_Binding_DescriptorObject_t *ObjectUserData); + void EdsLib_Binding_InitSubObject(EdsLib_Binding_DescriptorObject_t *SubObject, + const EdsLib_Binding_DescriptorObject_t *ParentObj, + const EdsLib_DataTypeDB_EntityInfo_t *Component); -EdsLib_Binding_Compatibility_t EdsLib_Binding_CheckEdsObjectsCompatible( - EdsLib_Binding_DescriptorObject_t *DestObject, - EdsLib_Binding_DescriptorObject_t *SrcObject); + void *EdsLib_Binding_GetNativeObject(const EdsLib_Binding_DescriptorObject_t *ObjectUserData); + size_t EdsLib_Binding_GetNativeSize(const EdsLib_Binding_DescriptorObject_t *ObjectUserData); + size_t EdsLib_Binding_GetBufferMaxSize(const EdsLib_Binding_DescriptorObject_t *ObjectUserData); -void EdsLib_Binding_InitStaticFields(EdsLib_Binding_DescriptorObject_t *ObjectUserData); + EdsLib_Binding_Compatibility_t + EdsLib_Binding_CheckEdsObjectsCompatible(EdsLib_Binding_DescriptorObject_t *DestObject, + EdsLib_Binding_DescriptorObject_t *SrcObject); -int32_t EdsLib_Binding_InitFromPackedBuffer( - EdsLib_Binding_DescriptorObject_t *ObjectUserData, - const void *PackedData, - size_t PackedDataSize); + void EdsLib_Binding_InitStaticFields(EdsLib_Binding_DescriptorObject_t *ObjectUserData); -int32_t EdsLib_Binding_ExportToPackedBuffer( - EdsLib_Binding_DescriptorObject_t *ObjectUserData, - void *PackedData, - size_t PackedDataSize); + int32_t EdsLib_Binding_InitFromPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, + const void *PackedData, + size_t PackedDataSize); -int32_t EdsLib_Binding_LoadValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, EdsLib_GenericValueBuffer_t *ValBuf); -int32_t EdsLib_Binding_StoreValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, EdsLib_GenericValueBuffer_t *ValBuf); + int32_t EdsLib_Binding_ExportToPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, + void *PackedData, + size_t PackedDataSize); + int32_t EdsLib_Binding_LoadValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, + EdsLib_GenericValueBuffer_t *ValBuf); + int32_t EdsLib_Binding_StoreValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, + EdsLib_GenericValueBuffer_t *ValBuf); #ifdef __cplusplus -} /* extern "C" */ +} /* extern "C" */ #endif - -#endif /* _EDSLIB_BINDING_OBJECTS_H_ */ - +#endif /* _EDSLIB_BINDING_OBJECTS_H_ */ diff --git a/edslib/fsw/inc/edslib_database_types.h b/edslib/fsw/inc/edslib_database_types.h index 65d0104..df78956 100644 --- a/edslib/fsw/inc/edslib_database_types.h +++ b/edslib/fsw/inc/edslib_database_types.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_database_types.h * \ingroup fsw @@ -39,7 +38,6 @@ #ifndef _EDSLIB_DATABASE_TYPES_H_ #define _EDSLIB_DATABASE_TYPES_H_ - #ifndef _EDSLIB_BUILD_ #error "Do not include edslib_database_types.h from application code; use the edslib API instead" #endif @@ -48,13 +46,11 @@ #error "This file is not intended to be compiled with a C++ compiler" #endif - #include #include #include #include "edslib_api_types.h" - /******************************************************* * BASIC DATA TYPE DATABASE COMPONENTS *******************************************************/ @@ -77,8 +73,8 @@ enum EdsLib_DbRef_Qualifier EdsLib_DbRef_Qualifier_USERDEF2, /**< Refers to an entry in user-defined DB #2 (placeholder) */ }; -#define EDSLIB_TYPEREF_C(app,idx) { .Qualifier = EdsLib_DbRef_Qualifier_DATATYPE, .AppIndex = app, .SubIndex = idx } -#define EDSLIB_INTFREF_C(app,idx) { .Qualifier = EdsLib_DbRef_Qualifier_INTERFACE, .AppIndex = app, .SubIndex = idx } +#define EDSLIB_TYPEREF_C(app, idx) { .Qualifier = EdsLib_DbRef_Qualifier_DATATYPE, .AppIndex = app, .SubIndex = idx } +#define EDSLIB_INTFREF_C(app, idx) { .Qualifier = EdsLib_DbRef_Qualifier_INTERFACE, .AppIndex = app, .SubIndex = idx } typedef intmax_t (*EdsLib_IntegerCalibratorFunc_t)(intmax_t x); typedef double (*EdsLib_FloatingPointCalibratorFunc_t)(double x); @@ -115,12 +111,12 @@ typedef struct EdsLib_FloatCalPair EdsLib_FloatCalPair_t; union EdsLib_HandlerArgument { EdsLib_ErrorControlType_t ErrorControl; - EdsLib_FloatCalPair_t FloatCalibrator; - EdsLib_IntegerCalPair_t IntegerCalibrator; - const char *FixedString; - double FixedFloat; - intmax_t FixedInteger; - uintmax_t FixedUnsigned; + EdsLib_FloatCalPair_t FloatCalibrator; + EdsLib_IntegerCalPair_t IntegerCalibrator; + const char *FixedString; + double FixedFloat; + intmax_t FixedInteger; + uintmax_t FixedUnsigned; }; typedef union EdsLib_HandlerArgument EdsLib_HandlerArgument_t; @@ -143,7 +139,7 @@ typedef enum struct EdsLib_DerivativeEntry { - uint16_t IdentSeqIdx; + uint16_t IdentSeqIdx; EdsLib_DatabaseRef_t RefObj; }; @@ -152,9 +148,9 @@ typedef struct EdsLib_DerivativeEntry EdsLib_DerivativeEntry_t; union EdsLib_SingleValue { const char *String; - intmax_t SignedInt; - uintmax_t UnsignedInt; - double FloatingPt; + intmax_t SignedInt; + uintmax_t UnsignedInt; + double FloatingPt; }; typedef union EdsLib_SingleValue EdsLib_SingleValue_t; @@ -167,11 +163,10 @@ struct EdsLib_ValuePair typedef struct EdsLib_ValuePair EdsLib_ValuePair_t; - union EdsLib_RefValue { EdsLib_SingleValue_t Single; - EdsLib_ValuePair_t Pair; + EdsLib_ValuePair_t Pair; }; typedef union EdsLib_RefValue EdsLib_RefValue_t; @@ -179,8 +174,8 @@ typedef union EdsLib_RefValue EdsLib_RefValue_t; typedef enum { EDSLIB_VALUE_CONSTRAINTSTYLE_NONE, - EDSLIB_VALUE_CONSTRAINTSTYLE_SINGLE_VALUE, /* Simple comparison on a single number */ - EDSLIB_VALUE_CONSTRAINTSTYLE_RANGE_VALUE /* value within range */ + EDSLIB_VALUE_CONSTRAINTSTYLE_SINGLE_VALUE, /* Simple comparison on a single number */ + EDSLIB_VALUE_CONSTRAINTSTYLE_RANGE_VALUE /* value within range */ } EdsLib_Value_ConstraintStyle_t; typedef enum @@ -201,9 +196,9 @@ typedef enum struct EdsLib_ValueEntry { - uint8_t BasicType; - uint8_t ConstraintStyle; - uint8_t InclusionStyle; + uint8_t BasicType; + uint8_t ConstraintStyle; + uint8_t InclusionStyle; EdsLib_RefValue_t RefValue; }; @@ -211,7 +206,7 @@ typedef struct EdsLib_ValueEntry EdsLib_ValueEntry_t; struct EdsLib_ConstraintEntity { - EdsLib_SizeInfo_t Offset; + EdsLib_SizeInfo_t Offset; EdsLib_DatabaseRef_t RefObj; }; @@ -238,22 +233,22 @@ typedef struct EdsLib_IdentSequenceEntry EdsLib_IdentSequenceEntry_t; struct EdsLib_IdentityCheckSequence { - uint16_t ConstraintEntityListSize; - uint16_t ValueListSize; - uint16_t SequenceEntryIdx; - const EdsLib_IdentSequenceEntry_t *SequenceList; - const EdsLib_ValueEntry_t *ValueList; - const EdsLib_ConstraintEntity_t *ConstraintEntityList; + uint16_t ConstraintEntityListSize; + uint16_t ValueListSize; + uint16_t SequenceEntryIdx; + const EdsLib_IdentSequenceEntry_t *SequenceList; + const EdsLib_ValueEntry_t *ValueList; + const EdsLib_ConstraintEntity_t *ConstraintEntityList; }; typedef struct EdsLib_IdentityCheckSequence EdsLib_IdentityCheckSequence_t; struct EdsLib_FieldDetailEntry { - uint16_t EntryType; - EdsLib_SizeInfo_t Offset; - EdsLib_DatabaseRef_t RefObj; - EdsLib_HandlerArgument_t HandlerArg; + uint16_t EntryType; + EdsLib_SizeInfo_t Offset; + EdsLib_DatabaseRef_t RefObj; + EdsLib_HandlerArgument_t HandlerArg; const EdsLib_IdentityCheckSequence_t *CheckSequence; }; @@ -261,12 +256,12 @@ typedef struct EdsLib_FieldDetailEntry EdsLib_FieldDetailEntry_t; struct EdsLib_ContainerDescriptor { - EdsLib_SizeInfo_t MaxSize; - uint16_t DerivativeListSize; + EdsLib_SizeInfo_t MaxSize; + uint16_t DerivativeListSize; const EdsLib_IdentityCheckSequence_t *CheckSequence; - const EdsLib_FieldDetailEntry_t *EntryList; - const EdsLib_FieldDetailEntry_t *TrailerEntryList; - const EdsLib_DerivativeEntry_t *DerivativeList; + const EdsLib_FieldDetailEntry_t *EntryList; + const EdsLib_FieldDetailEntry_t *TrailerEntryList; + const EdsLib_DerivativeEntry_t *DerivativeList; }; typedef struct EdsLib_ContainerDescriptor EdsLib_ContainerDescriptor_t; @@ -338,68 +333,66 @@ typedef struct EdsLib_GenericDescriptor EdsLib_GenericDescriptor_t; union EdsLib_ObjectDetailDescriptor { - const void *Ptr; + const void *Ptr; const EdsLib_ContainerDescriptor_t *Container; - const EdsLib_ArrayDescriptor_t *Array; - const EdsLib_StringDescriptor_t String; - const EdsLib_NumberDescriptor_t Number; - const EdsLib_AliasDescriptor_t Alias; - const EdsLib_GenericDescriptor_t GenericType; + const EdsLib_ArrayDescriptor_t *Array; + const EdsLib_StringDescriptor_t String; + const EdsLib_NumberDescriptor_t Number; + const EdsLib_AliasDescriptor_t Alias; + const EdsLib_GenericDescriptor_t GenericType; }; typedef union EdsLib_ObjectDetailDescriptor EdsLib_ObjectDetailDescriptor_t; struct EdsLib_DataTypeDB_Entry { - uint64_t Checksum; - uint8_t BasicType; - uint8_t Flags; - uint16_t NumSubElements; - EdsLib_SizeInfo_t SizeInfo; + uint64_t Checksum; + uint8_t BasicType; + uint8_t Flags; + uint16_t NumSubElements; + EdsLib_SizeInfo_t SizeInfo; EdsLib_ObjectDetailDescriptor_t Detail; }; typedef struct EdsLib_DataTypeDB_Entry EdsLib_DataTypeDB_Entry_t; - typedef enum { - EDSLIB_IDENT_SEQUENCE_INVALID = 0, /**< Reserved marker, processing should stop when encountered */ - EDSLIB_IDENT_SEQUENCE_ENTITY_LOCATION, /**< Load/Save entity from location */ - EDSLIB_IDENT_SEQUENCE_CHECK_CONDITION, /**< Set/Check current value using the value constraint table */ - EDSLIB_IDENT_SEQUENCE_REFOBJ_RESULT, /**< A positive identification entry that refers to an object type */ - EDSLIB_IDENT_SEQUENCE_BOOLEAN_RESULT /**< A positive identification entry that is a boolean */ + EDSLIB_IDENT_SEQUENCE_INVALID = 0, /**< Reserved marker, processing should stop when encountered */ + EDSLIB_IDENT_SEQUENCE_ENTITY_LOCATION, /**< Load/Save entity from location */ + EDSLIB_IDENT_SEQUENCE_CHECK_CONDITION, /**< Set/Check current value using the value constraint table */ + EDSLIB_IDENT_SEQUENCE_REFOBJ_RESULT, /**< A positive identification entry that refers to an object type */ + EDSLIB_IDENT_SEQUENCE_BOOLEAN_RESULT /**< A positive identification entry that is a boolean */ } EdsLib_IdentSequence_Enum_t; - /******************************************************* * DISPLAY DATABASE COMPONENTS (extends basic info above) *******************************************************/ struct EdsLib_SymbolTableEntry { - intmax_t SymValue; - const char *SymName; + intmax_t SymValue; + const char *SymName; }; typedef struct EdsLib_SymbolTableEntry EdsLib_SymbolTableEntry_t; union EdsLib_DisplayArg { - EdsLib_DatabaseRef_t RefObj; - const char * const *NameTable; + EdsLib_DatabaseRef_t RefObj; + const char *const *NameTable; const EdsLib_SymbolTableEntry_t *SymTable; - void *ArgValue; + void *ArgValue; }; typedef union EdsLib_DisplayArg EdsLib_DisplayArg_t; struct EdsLib_DisplayDB_Entry { - uint16_t DisplayHint; /**< Type of display logic to apply */ - uint16_t DisplayArgTableSize; + uint16_t DisplayHint; /**< Type of display logic to apply */ + uint16_t DisplayArgTableSize; EdsLib_DisplayArg_t DisplayArg; /**< Optional extra data - typically the name table for enums or containers */ - const char *Name; /**< Friendly name of data type or component */ + const char *Name; /**< Friendly name of data type or component */ }; typedef struct EdsLib_DisplayDB_Entry EdsLib_DisplayDB_Entry_t; @@ -408,7 +401,7 @@ typedef struct EdsLib_DisplayDB_Entry EdsLib_DisplayDB_Entry_t; * INTERFACE DATABASE COMPONENTS *******************************************************/ - typedef enum EdsLib_ArgMode +typedef enum EdsLib_ArgMode { EdsLib_ArgMode_UNDEFINED, EdsLib_ArgMode_OUT, @@ -418,59 +411,58 @@ typedef struct EdsLib_DisplayDB_Entry EdsLib_DisplayDB_Entry_t; typedef struct EdsLib_IntfDB_GenericTypeInfo { - const char *Name; + const char *Name; EdsLib_DatabaseRef_t BaseRefObj; } EdsLib_IntfDB_GenericTypeInfo_t; typedef struct EdsLib_IntfDB_ArgumentEntry { - const char *Name; - EdsLib_DatabaseRef_t RefObj; + const char *Name; + EdsLib_DatabaseRef_t RefObj; EdsLib_ArgMode_Enum_t Mode; } EdsLib_IntfDB_ArgumentEntry_t; typedef struct EdsLib_IntfDB_CommandEntry { - const char *Name; + const char *Name; const EdsLib_IntfDB_ArgumentEntry_t *ArgumentList; - uint16_t ParentIdx; - uint16_t ArgumentCount; + uint16_t ParentIdx; + uint16_t ArgumentCount; } EdsLib_IntfDB_CommandEntry_t; typedef struct EdsLib_IntfDB_DeclIntfEntry { - const char *Name; + const char *Name; const EdsLib_IntfDB_CommandEntry_t *CommandList; - uint16_t FirstIdx; - uint16_t CommandCount; + uint16_t FirstIdx; + uint16_t CommandCount; } EdsLib_IntfDB_DeclIntfEntry_t; typedef struct EdsLib_IntfDB_GenericTypeMapInfo { - EdsLib_DatabaseRef_t ActualTypeRef; - EdsLib_DatabaseRef_t GenTypeRef; + EdsLib_DatabaseRef_t ActualTypeRef; + EdsLib_DatabaseRef_t GenTypeRef; } EdsLib_IntfDB_GenericTypeMapInfo_t; typedef struct EdsLib_IntfDB_InterfaceEntry { - const char *Name; + const char *Name; const EdsLib_IntfDB_GenericTypeMapInfo_t *GenericTypeMapList; - uint16_t ParentIdx; - uint16_t GenericTypeMapCount; - EdsLib_DatabaseRef_t IntfTypeRef; + uint16_t ParentIdx; + uint16_t GenericTypeMapCount; + EdsLib_DatabaseRef_t IntfTypeRef; } EdsLib_IntfDB_InterfaceEntry_t; typedef struct EdsLib_IntfDB_ComponentEntry { - const char *Name; + const char *Name; const EdsLib_IntfDB_InterfaceEntry_t *RequiredIntfList; const EdsLib_IntfDB_InterfaceEntry_t *ProvidedIntfList; - uint16_t FirstIdx; - uint16_t RequiredIntfCount; - uint16_t ProvidedIntfCount; + uint16_t FirstIdx; + uint16_t RequiredIntfCount; + uint16_t ProvidedIntfCount; } EdsLib_IntfDB_ComponentEntry_t; - /******************************************************* * TOP LEVEL OBJECTS * @@ -481,24 +473,23 @@ typedef struct EdsLib_IntfDB_ComponentEntry struct EdsLib_App_DataTypeDB { - uint16_t MissionIdx; - uint16_t DataTypeTableSize; - const EdsLib_DataTypeDB_Entry_t *DataTypeTable; + uint16_t MissionIdx; + uint16_t DataTypeTableSize; + const EdsLib_DataTypeDB_Entry_t *DataTypeTable; }; struct EdsLib_App_DisplayDB { - const char *EdsName; - const EdsLib_DisplayDB_Entry_t *DisplayInfoTable; + const char *EdsName; + const EdsLib_DisplayDB_Entry_t *DisplayInfoTable; }; struct EdsLib_App_IntfDB { - const EdsLib_IntfDB_ComponentEntry_t *ComponentListEntries; - const EdsLib_IntfDB_DeclIntfEntry_t *DeclIntfListEntries; - uint16_t ComponentListSize; - uint16_t DeclIntfListSize; + const EdsLib_IntfDB_ComponentEntry_t *ComponentListEntries; + const EdsLib_IntfDB_DeclIntfEntry_t *DeclIntfListEntries; + uint16_t ComponentListSize; + uint16_t DeclIntfListSize; }; - -#endif /* _EDSLIB_DATABASE_TYPES_H_ */ +#endif /* _EDSLIB_DATABASE_TYPES_H_ */ diff --git a/edslib/fsw/inc/edslib_datatypedb.h b/edslib/fsw/inc/edslib_datatypedb.h index 75b1a25..4e02571 100644 --- a/edslib/fsw/inc/edslib_datatypedb.h +++ b/edslib/fsw/inc/edslib_datatypedb.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb.h * \ingroup fsw @@ -36,7 +35,6 @@ #ifndef _EDSLIB_DATATYPEDB_H_ #define _EDSLIB_DATATYPEDB_H_ - /* * The EDS library uses the fixed-width types from the C99 stdint.h header file, * rather than the OSAL types. This allows use in applications that are not @@ -63,15 +61,12 @@ * This also represents the maximum number of digits for "BCD" value encoding types * */ -#define EDSLIB_VALUEBUFFER_MAX_BINARY_SIZE 32 - - +#define EDSLIB_VALUEBUFFER_MAX_BINARY_SIZE 32 /****************************** * TYPEDEFS ******************************/ - /** * Return codes for Edslib functions, packed into an int32_t type. * @@ -90,21 +85,21 @@ */ enum { - EDSLIB_SUCCESS = 0, /**< Operation fully successful; all post-conditions are met */ - EDSLIB_FAILURE = -1, /**< Unspecified failure, operation not successful; post-conditions are not met */ - EDSLIB_NOT_IMPLEMENTED = -2, /**< Function is not implemented in this version of EdsLib */ - EDSLIB_INVALID_SIZE_OR_TYPE = -3, /**< The user has specified an invalid size or type */ - EDSLIB_NAME_NOT_FOUND = -4, /**< Element/Structure Name not found in database */ - EDSLIB_INCOMPLETE_DB_OBJECT = -5, /**< A database element required for the requested operation is missing */ - EDSLIB_BUFFER_SIZE_ERROR = -6, /**< A user-supplied buffer is insufficient for storing the requested object */ - EDSLIB_INVALID_INDEX = -7, /**< A user-supplied index value is invalid */ - EDSLIB_NO_MATCHING_VALUE = -8, /**< No matching values were found in the DB */ - EDSLIB_ERROR_CONTROL_MISMATCH = -9, /**< Error control field did not match */ - EDSLIB_FIELD_MISMATCH = -10, /**< Length or Fixed Value field did not match */ - EDSLIB_INSUFFICIENT_MEMORY = -11, /**< Internal structure sizes were insufficient for operation */ - EDSLIB_TYPE_MAP_FAILED = -12, /**< Cannot map a generic type to a real type */ - EDSLIB_INVALID_OFFSET = -13, /**< Given offset does not exist, exceeds size of object */ - EDSLIB_NOT_FIXED_SIZE = -14 /**< A variably sized object used with a fixed size API */ + EDSLIB_SUCCESS = 0, /**< Operation fully successful; all post-conditions are met */ + EDSLIB_FAILURE = -1, /**< Unspecified failure, operation not successful; post-conditions are not met */ + EDSLIB_NOT_IMPLEMENTED = -2, /**< Function is not implemented in this version of EdsLib */ + EDSLIB_INVALID_SIZE_OR_TYPE = -3, /**< The user has specified an invalid size or type */ + EDSLIB_NAME_NOT_FOUND = -4, /**< Element/Structure Name not found in database */ + EDSLIB_INCOMPLETE_DB_OBJECT = -5, /**< A database element required for the requested operation is missing */ + EDSLIB_BUFFER_SIZE_ERROR = -6, /**< A user-supplied buffer is insufficient for storing the requested object */ + EDSLIB_INVALID_INDEX = -7, /**< A user-supplied index value is invalid */ + EDSLIB_NO_MATCHING_VALUE = -8, /**< No matching values were found in the DB */ + EDSLIB_ERROR_CONTROL_MISMATCH = -9, /**< Error control field did not match */ + EDSLIB_FIELD_MISMATCH = -10, /**< Length or Fixed Value field did not match */ + EDSLIB_INSUFFICIENT_MEMORY = -11, /**< Internal structure sizes were insufficient for operation */ + EDSLIB_TYPE_MAP_FAILED = -12, /**< Cannot map a generic type to a real type */ + EDSLIB_INVALID_OFFSET = -13, /**< Given offset does not exist, exceeds size of object */ + EDSLIB_NOT_FIXED_SIZE = -14 /**< A variably sized object used with a fixed size API */ }; /* @@ -120,7 +115,7 @@ enum * This is the largest width signed integer that the platform can handle. It * may be passed to the C library printf() function using modifier %lld. */ -typedef long long int EdsLib_Generic_SignedInt_t; +typedef long long int EdsLib_Generic_SignedInt_t; /** * Type for holding generic unsigned integer values of the maximum width supported on the platform @@ -128,7 +123,7 @@ typedef long long int EdsLib_Generic_SignedInt_t; * This is the largest width unsigned integer that the platform can handle. It * may be passed to the C library printf() function using modifiers %llu or %llx. */ -typedef unsigned long long int EdsLib_Generic_UnsignedInt_t; +typedef unsigned long long int EdsLib_Generic_UnsignedInt_t; /** * Type for holding generic floating point values of the maximum precision supported on the platform @@ -136,7 +131,7 @@ typedef unsigned long long int EdsLib_Generic_UnsignedInt_t; * This is the largest / highest precision floating point type that the platform can handle. It * may be passed to the C library printf() function using modifiers %Lf or %Lg. */ -typedef long double EdsLib_Generic_FloatingPoint_t; +typedef long double EdsLib_Generic_FloatingPoint_t; /** * General purpose union for storing a numeric data element of any standard width. @@ -148,19 +143,19 @@ typedef long double EdsLib_Generic_FloatingPoint_t; typedef union { /* Fixed-width integer numbers */ - int8_t i8; - uint8_t u8; - int16_t i16; + int8_t i8; + uint8_t u8; + int16_t i16; uint16_t u16; - int32_t i32; + int32_t i32; uint32_t u32; - int64_t i64; + int64_t i64; uint64_t u64; /* Floating point numbers */ - float fpsgl; /* single precision; probably 32 bits, but not guaranteed */ - double fpdbl; /* double precision; probably 64 bits, but not guaranteed */ - long double fpmax; /* extended precision, if supported. Might alias to double. */ + float fpsgl; /* single precision; probably 32 bits, but not guaranteed */ + double fpdbl; /* double precision; probably 64 bits, but not guaranteed */ + long double fpmax; /* extended precision, if supported. Might alias to double. */ /* * Buffer to hold a full IEEE-754 quad even if the @@ -176,15 +171,14 @@ typedef union /* member to allow data access as raw bytes */ uint8_t BinaryData[EDSLIB_VALUEBUFFER_MAX_BINARY_SIZE]; - /* * Also include members representing the longest standard C99 type. * (these likely are aliases to other members already defined) * This is necessary if passing the value to a C library function, such as printf() */ - bool Boolean; - EdsLib_Generic_SignedInt_t SignedInteger; - EdsLib_Generic_UnsignedInt_t UnsignedInteger; + bool Boolean; + EdsLib_Generic_SignedInt_t SignedInteger; + EdsLib_Generic_UnsignedInt_t UnsignedInteger; EdsLib_Generic_FloatingPoint_t FloatingPoint; } EdsLib_GenericValueUnion_t; @@ -206,7 +200,7 @@ typedef struct * EDSLIB_BASICTYPE_BINARY indicates that the BinaryData and/or StringData member is valid * */ - EdsLib_BasicType_t ValueType; + EdsLib_BasicType_t ValueType; EdsLib_GenericValueUnion_t Value; } EdsLib_GenericValueBuffer_t; @@ -216,19 +210,19 @@ typedef struct */ struct EdsLib_DataTypeDB_TypeInfo { - EdsLib_BasicType_t ElemType; /**< Type of element */ - uint16_t Flags; /**< Special handling indicators */ - uint16_t NumSubElements; /**< Number of sub-elements below this (0 for atomic entities) */ - EdsLib_SizeInfo_t Size; /**< Basic Size of object (base object only - not derived types) */ + EdsLib_BasicType_t ElemType; /**< Type of element */ + uint16_t Flags; /**< Special handling indicators */ + uint16_t NumSubElements; /**< Number of sub-elements below this (0 for atomic entities) */ + EdsLib_SizeInfo_t Size; /**< Basic Size of object (base object only - not derived types) */ }; typedef struct EdsLib_DataTypeDB_TypeInfo EdsLib_DataTypeDB_TypeInfo_t; struct EdsLib_DataTypeDB_DerivedTypeInfo { - uint16_t NumDerivatives; /**< Number of defined derivative types for this type */ - uint16_t NumConstraints; /**< Number of elements in the object that have constraints */ - EdsLib_SizeInfo_t MaxSize; /**< Maximum Size of element (= size of largest derivative type) */ + uint16_t NumDerivatives; /**< Number of defined derivative types for this type */ + uint16_t NumConstraints; /**< Number of elements in the object that have constraints */ + EdsLib_SizeInfo_t MaxSize; /**< Maximum Size of element (= size of largest derivative type) */ }; typedef struct EdsLib_DataTypeDB_DerivedTypeInfo EdsLib_DataTypeDB_DerivedTypeInfo_t; @@ -236,7 +230,7 @@ typedef struct EdsLib_DataTypeDB_DerivedTypeInfo EdsLib_DataTypeDB_DerivedTypeIn struct EdsLib_DataTypeDB_DerivativeObjectInfo { EdsLib_Id_t EdsId; - uint16_t DerivativeTableIndex; /**< Index into the list of derived types */ + uint16_t DerivativeTableIndex; /**< Index into the list of derived types */ }; typedef struct EdsLib_DataTypeDB_DerivativeObjectInfo EdsLib_DataTypeDB_DerivativeObjectInfo_t; @@ -254,8 +248,8 @@ typedef struct EdsLib_DataTypeDB_DerivativeObjectInfo EdsLib_DataTypeDB_Derivati */ struct EdsLib_DataTypeDB_EntityInfo { - EdsLib_Id_t EdsId; /**< The EDS ID value representing the specific type of the data */ - uint16_t Flags; /**< Special handling indicators */ + EdsLib_Id_t EdsId; /**< The EDS ID value representing the specific type of the data */ + uint16_t Flags; /**< Special handling indicators */ EdsLib_SizeInfo_t Offset; /**< Absolute Offset of member within the top-level parent structure */ EdsLib_SizeInfo_t MaxSize; /**< Total allocated space for this object within parent structure */ }; @@ -270,12 +264,10 @@ typedef struct EdsLib_DataTypeDB_EntityInfo EdsLib_DataTypeDB_EntityInfo_t; * @param ConstraintValue the value that should be in the field * @param Arg opaque user argument */ -typedef void (*EdsLib_ConstraintCallback_t)(const EdsLib_DatabaseObject_t *GD, - const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, - EdsLib_GenericValueBuffer_t *ConstraintValue, - void *Arg); - - +typedef void (*EdsLib_ConstraintCallback_t)(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, + EdsLib_GenericValueBuffer_t *ConstraintValue, + void *Arg); /****************************** * API CALLS @@ -286,666 +278,745 @@ extern "C" { #endif -/** - * Initialize the EdsLib DataTypeDB internal state - * - * This should be called once during initialization by - * programs wishing to use the EDS DataTypeDB API calls. - * - * This function initializes all shared/global state information - * internal to EdsLib. In particular this will generate lookup - * tables that may be necessary for error control algorithms to - * work correctly (e.g. CRC). - */ -void EdsLib_DataTypeDB_Initialize(void); - -/** - * Extract the AppIdx value from a dictionary structure - * - * The "DataTypeDB_t" type is abstract, so application code can only treat it as an opaque - * object pointer and cannot directly access the fields inside. - * - * This function queries the "AppIdx" value from inside the dictionary object - * - * @param AppDict the application dictionary object - * @return The associated index - */ -uint16_t EdsLib_DataTypeDB_GetAppIdx(const EdsLib_DataTypeDB_t AppDict); - -/** - * Register an application in a dynamic runtime EdsLib runtime database. - * - * NOTE: Multiple registrations of the same application have no effect, as only a single entry - * ever exists for an individual application. - * - * @param GD the active EdsLib runtime database object - * @param AppDict the application dictionary object - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - */ -int32_t EdsLib_DataTypeDB_Register(EdsLib_DatabaseObject_t *GD, EdsLib_DataTypeDB_t AppDict); + /** + * Initialize the EdsLib DataTypeDB internal state + * + * This should be called once during initialization by + * programs wishing to use the EDS DataTypeDB API calls. + * + * This function initializes all shared/global state information + * internal to EdsLib. In particular this will generate lookup + * tables that may be necessary for error control algorithms to + * work correctly (e.g. CRC). + */ + void EdsLib_DataTypeDB_Initialize(void); -/** - * Unregister an application in a dynamic runtime EdsLib runtime database. - * - * @param GD the active EdsLib runtime database object - * @param AppIdx Application identifier as returned by EdsLib_DataTypeDB_Register() - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - */ -int32_t EdsLib_DataTypeDB_Unregister(EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); + /** + * Extract the AppIdx value from a dictionary structure + * + * The "DataTypeDB_t" type is abstract, so application code can only treat it as an opaque + * object pointer and cannot directly access the fields inside. + * + * This function queries the "AppIdx" value from inside the dictionary object + * + * @param AppDict the application dictionary object + * @return The associated index + */ + uint16_t EdsLib_DataTypeDB_GetAppIdx(const EdsLib_DataTypeDB_t AppDict); -/** - * Given any global message identifier index, retrieve the basic details of that data type - * The details are in reference to the local (native) representation not necessarily the packed representation - * - * @param GD the runtime database object - * @param EdsId the message identifier word - * @param TypeInfo Buffer for storing the member info - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_DataTypeDB_TypeInfo_t *TypeInfo); + /** + * Register an application in a dynamic runtime EdsLib runtime database. + * + * NOTE: Multiple registrations of the same application have no effect, as only a single entry + * ever exists for an individual application. + * + * @param GD the active EdsLib runtime database object + * @param AppDict the application dictionary object + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + */ + int32_t EdsLib_DataTypeDB_Register(EdsLib_DatabaseObject_t *GD, EdsLib_DataTypeDB_t AppDict); -/** - * Given a type with sub-members (container, array, interface, etc), look up the identification and offset for - * a given child index within that parent type - * - * SubMsgId will be set to an invalid identifier if the index is out of range, or the parent does not have any members - * - * @param GD the runtime database object - * @param EdsId the parent message identifier word - * @param SubIndex the sub-element number within the parent - * @param MemberInfo Buffer to store the Component information - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t SubIndex, EdsLib_DataTypeDB_EntityInfo_t *MemberInfo); + /** + * Unregister an application in a dynamic runtime EdsLib runtime database. + * + * @param GD the active EdsLib runtime database object + * @param AppIdx Application identifier as returned by EdsLib_DataTypeDB_Register() + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + */ + int32_t EdsLib_DataTypeDB_Unregister(EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); -/** - * Given a type with sub-members (container, array, interface, etc), look up the identification and offset for - * the immediate sub-member containing the item at the given offset. This only locates the _immediate_ subelement - * containing the offset, which could be another container. This function may have to be called multiple times - * to locate a single item. - * - * @param GD the runtime database object - * @param EdsId the parent message identifier word - * @param ByteOffset the sub-element number within the parent - * @param MemberInfo Buffer to store the Component information - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint32_t ByteOffset, EdsLib_DataTypeDB_EntityInfo_t *MemberInfo); + /** + * Given any global message identifier index, retrieve the basic details of that data type + * The details are in reference to the local (native) representation not necessarily the packed representation + * + * @param GD the runtime database object + * @param EdsId the message identifier word + * @param TypeInfo Buffer for storing the member info + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_DataTypeDB_TypeInfo_t *TypeInfo); -/** - * Given a type with sub-members (container, array, interface, etc), look up the identification and offset for - * the immediate sub-member containing the item at the given bit offset. This only locates the _immediate_ subelement - * containing the offset, which could be another container. This function may have to be called multiple times - * to locate a single item. - * - * @note This lookup is based on the nominal bit position, which is the position when _all_ fields are present, - * even fields that might be exclusive to eachother. In actual packed objects, the bit position will vary if - * a container has conditionally-encoded entities. - * - * @param GD the runtime database object - * @param EdsId the parent message identifier word - * @param BitOffset the sub-element bit offset within the parent - * @param MemberInfo Buffer to store the Component information - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_GetMemberByPackedOffset(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint32_t BitOffset, EdsLib_DataTypeDB_EntityInfo_t *CompInfo); + /** + * Given a type with sub-members (container, array, interface, etc), look up the identification and offset for + * a given child index within that parent type + * + * SubMsgId will be set to an invalid identifier if the index is out of range, or the parent does not have any + * members + * + * @param GD the runtime database object + * @param EdsId the parent message identifier word + * @param SubIndex the sub-element number within the parent + * @param MemberInfo Buffer to store the Component information + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t SubIndex, + EdsLib_DataTypeDB_EntityInfo_t *MemberInfo); -/** - * Look up the derived type of the message identified by EdsId, - * given a constraint entity and constraint value. - * - * @param GD the runtime database object - * @param BaseId the message identifier word - * @param ConstraintEntityIdx The entity index that the ConstraintValue refers to - * @param ConstraintValue the actual constraint value to look up - * @return The derived interface ID, or an invalid ID if an error occurs. - */ -int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t DerivId, EdsLib_Id_t *DerivedEdsId); + /** + * Given a type with sub-members (container, array, interface, etc), look up the identification and offset for + * the immediate sub-member containing the item at the given offset. This only locates the _immediate_ subelement + * containing the offset, which could be another container. This function may have to be called multiple times + * to locate a single item. + * + * @param GD the runtime database object + * @param EdsId the parent message identifier word + * @param ByteOffset the sub-element number within the parent + * @param MemberInfo Buffer to store the Component information + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint32_t ByteOffset, + EdsLib_DataTypeDB_EntityInfo_t *MemberInfo); -/** - * Look up the constraint entity corresponding to the given index - * - * @param GD the runtime database object - * @param EdsId the message identifier word - * @param ConstraintEntityIdx The constraint entity number - * @param MemberInfo Buffer to store result (output) - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t ConstraintIdx, EdsLib_DataTypeDB_EntityInfo_t *MemberInfo); + /** + * Given a type with sub-members (container, array, interface, etc), look up the identification and offset for + * the immediate sub-member containing the item at the given bit offset. This only locates the _immediate_ + * subelement containing the offset, which could be another container. This function may have to be called multiple + * times to locate a single item. + * + * @note This lookup is based on the nominal bit position, which is the position when _all_ fields are present, + * even fields that might be exclusive to eachother. In actual packed objects, the bit position will vary if + * a container has conditionally-encoded entities. + * + * @param GD the runtime database object + * @param EdsId the parent message identifier word + * @param BitOffset the sub-element bit offset within the parent + * @param MemberInfo Buffer to store the Component information + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_GetMemberByPackedOffset(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint32_t BitOffset, + EdsLib_DataTypeDB_EntityInfo_t *CompInfo); -/** - * Look up the details regarding types that are derived from the given type - * - * These details include: - * - the maximum size of the largest derivative (for e.g. allocating a buffer) - * - the number of member entities in the base type with constraints - * - * @param GD the runtime database object - * @param EdsId the interface identifier word - * @param DerivInfo buffer to hold the derivation information - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_DataTypeDB_DerivedTypeInfo_t *DerivInfo); + /** + * Look up the derived type of the message identified by EdsId, + * given a constraint entity and constraint value. + * + * @param GD the runtime database object + * @param BaseId the message identifier word + * @param ConstraintEntityIdx The entity index that the ConstraintValue refers to + * @param ConstraintValue the actual constraint value to look up + * @return The derived interface ID, or an invalid ID if an error occurs. + */ + int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t DerivId, + EdsLib_Id_t *DerivedEdsId); -/** - * Find all required constraint value(s) to produce a specified derived message - * from the given base type. - * - * As there may be an arbitrary number of constraints on fields on the base type, this - * is implemented as an iterator with a user-supplied callback. The user callback will - * be invoked for each constraint, indicating the required value and its location/offset - * within the container. - * - * @note - * If the indicated base type is not actually a base type for the indicated derived type, - * the function will return an ERROR response. However, the user callback may be invoked - * before the error is detected, so the caller is responsible for discarding any constraints - * collected prior to the error. - * - * @param GD the runtime database object - * @param BaseId the message identifier word of the base type - * @param DerivedId the message identifier word of the derived/final type - * @param Callback user-supplied function to invoke for each constraint - * @param CbArg user-supplied argument to pass to the callback - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t BaseId, EdsLib_Id_t DerivedId, EdsLib_ConstraintCallback_t Callback, void *CbArg); + /** + * Look up the constraint entity corresponding to the given index + * + * @param GD the runtime database object + * @param EdsId the message identifier word + * @param ConstraintEntityIdx The constraint entity number + * @param MemberInfo Buffer to store result (output) + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t ConstraintIdx, + EdsLib_DataTypeDB_EntityInfo_t *MemberInfo); -/** - * Determine if a base type relationship exists between the two types - * - * Returns a successful response if the passed-in base ID is a base type for - * the passed-in derived type ID. - * - * @param GD the runtime database object - * @param BaseId the message identifier word of the base type - * @param DerivedId the message identifier word of the derived/final type - * @return EDS_SUCCESS if successful - */ -int32_t EdsLib_DataTypeDB_BaseCheck(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t BaseId, EdsLib_Id_t DerivedId); + /** + * Look up the details regarding types that are derived from the given type + * + * These details include: + * - the maximum size of the largest derivative (for e.g. allocating a buffer) + * - the number of member entities in the base type with constraints + * + * @param GD the runtime database object + * @param EdsId the interface identifier word + * @param DerivInfo buffer to hold the derivation information + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_DataTypeDB_DerivedTypeInfo_t *DerivInfo); + /** + * Find all required constraint value(s) to produce a specified derived message + * from the given base type. + * + * As there may be an arbitrary number of constraints on fields on the base type, this + * is implemented as an iterator with a user-supplied callback. The user callback will + * be invoked for each constraint, indicating the required value and its location/offset + * within the container. + * + * @note + * If the indicated base type is not actually a base type for the indicated derived type, + * the function will return an ERROR response. However, the user callback may be invoked + * before the error is detected, so the caller is responsible for discarding any constraints + * collected prior to the error. + * + * @param GD the runtime database object + * @param BaseId the message identifier word of the base type + * @param DerivedId the message identifier word of the derived/final type + * @param Callback user-supplied function to invoke for each constraint + * @param CbArg user-supplied argument to pass to the callback + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t BaseId, + EdsLib_Id_t DerivedId, + EdsLib_ConstraintCallback_t Callback, + void *CbArg); -/** - * Perform conversion from a native/unpacked object to an EDS/packed bitstream - * - * This packs/encodes a single object type in one step. The object will be encoded - * according to the object type supplied via the EdsId parameter. After encoding - * the database will be checked for derived types matching the constraints, and - * if a matching derived type is found, encoding continues for the derived type. - * This process repeats until no further derivation is found. - * - * After encoding, all special fields in the object will be updated to the correct - * values. Fixed value fields will be set, and Error control fields and Length fields - * will be computed and set to the correct values per EDS specifications. - * - * @note This API relies on the packed size as indicated in the Database. - * With the addition of variably-sized objects to the EDS specification, the packed - * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, - * and will return an error code if used with a variably-sized object. - * - * @param GD the runtime database object - * @param EdsId Buffer containing identifier for the top level encapsulation. - * After encoding, this is set to the final encoded object type. - * @param DestBuffer Pointer to the destination buffer - * @param SourceBuffer Pointer to the source buffer (not modified by this call) - * @param MaxPackedBitSize Maximum size of destination buffer, in bits - * @param SourceByteSize Maximum size of source buffer, in bytes - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_PackPartialObject() - * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxPackedBitSize, uint32_t SourceByteSize); + /** + * Determine if a base type relationship exists between the two types + * + * Returns a successful response if the passed-in base ID is a base type for + * the passed-in derived type ID. + * + * @param GD the runtime database object + * @param BaseId the message identifier word of the base type + * @param DerivedId the message identifier word of the derived/final type + * @return EDS_SUCCESS if successful + */ + int32_t EdsLib_DataTypeDB_BaseCheck(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t BaseId, EdsLib_Id_t DerivedId); -/** - * Perform conversion from a native/unpacked object to an EDS/packed bitstream in stages - * - * This packs the output buffer in stages. The object will be encoded similar to the - * EdsLib_DataTypeDB_PackCompleteObject(), with respect to derived object identification - * and encoding. However, the object is not completed in that the values for special fields - * (i.e. ErrorControl, Length, Fixed values) are not computed or set in the encoded object. - * - * This function should be used by applications that need to further process the content - * or otherwise customize the procedure during the encoding process. - * - * To facilitate this, an additional parameter "StartingBit" is included, which allows - * the application to specify the starting bit position for encoding. This allows - * encoding to be resumed from a previous call. Bits prior to this starting bit will - * not be re-encoded. On the first invocation, the StartingBit should be set 0. On - * subsequent invocations, the StartingBit should be set to the end of the object - * (in bits) from the previous invocation. - * - * The EdsLib_DataTypeDB_FinalizePackedObject() API call can be used at a later time - * to compute the values for special fields within the encoded binary. - * - * @note This API relies on the packed size as indicated in the Database. - * With the addition of variably-sized objects to the EDS specification, the packed - * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, - * and will return an error code if used with a variably-sized object. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param DestBuffer Pointer to the destination buffer - * @param SourceBuffer Pointer to the source buffer (not modified by this call) - * @param MaxPackedBitSize Maximum size of destination buffer, in bits - * @param SourceByteSize Maximum size of source buffer, in bytes - * @param StartingBit Number of bits that are already encoded (i.e. from previous call) - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxPackedBitSize, uint32_t SourceByteSize, uint32_t StartingBit); + /** + * Perform conversion from a native/unpacked object to an EDS/packed bitstream + * + * This packs/encodes a single object type in one step. The object will be encoded + * according to the object type supplied via the EdsId parameter. After encoding + * the database will be checked for derived types matching the constraints, and + * if a matching derived type is found, encoding continues for the derived type. + * This process repeats until no further derivation is found. + * + * After encoding, all special fields in the object will be updated to the correct + * values. Fixed value fields will be set, and Error control fields and Length fields + * will be computed and set to the correct values per EDS specifications. + * + * @note This API relies on the packed size as indicated in the Database. + * With the addition of variably-sized objects to the EDS specification, the packed + * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, + * and will return an error code if used with a variably-sized object. + * + * @param GD the runtime database object + * @param EdsId Buffer containing identifier for the top level encapsulation. + * After encoding, this is set to the final encoded object type. + * @param DestBuffer Pointer to the destination buffer + * @param SourceBuffer Pointer to the source buffer (not modified by this call) + * @param MaxPackedBitSize Maximum size of destination buffer, in bits + * @param SourceByteSize Maximum size of source buffer, in bytes + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_PackPartialObject() + * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxPackedBitSize, + uint32_t SourceByteSize); -/** - * Perform conversion from a native/unpacked object to an EDS/packed bitstream - * - * This API is the same as EdsLib_DataTypeDB_PackCompleteObject() except the packed - * bit size is passed as an input/output value, because the encoded form may have fewer - * bits if the objects are variably sized. - * - * The PackedSize buffer should initially be set to the maximum size of the - * input and output buffers, in bytes and bits, respectively. After encoding, it - * these fields will be set to the actual size of encoded data. - * - * @param GD the runtime database object - * @param EdsId Buffer containing identifier for the top level encapsulation. - * After encoding, this is set to the final encoded object type. - * @param DestBuffer Pointer to the destination buffer - * @param SourceBuffer Pointer to the source buffer (not modified by this call) - * @param PackedSize Size of destination buffer as input, final packed size as output - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, EdsLib_SizeInfo_t *PackedSize); + /** + * Perform conversion from a native/unpacked object to an EDS/packed bitstream in stages + * + * This packs the output buffer in stages. The object will be encoded similar to the + * EdsLib_DataTypeDB_PackCompleteObject(), with respect to derived object identification + * and encoding. However, the object is not completed in that the values for special fields + * (i.e. ErrorControl, Length, Fixed values) are not computed or set in the encoded object. + * + * This function should be used by applications that need to further process the content + * or otherwise customize the procedure during the encoding process. + * + * To facilitate this, an additional parameter "StartingBit" is included, which allows + * the application to specify the starting bit position for encoding. This allows + * encoding to be resumed from a previous call. Bits prior to this starting bit will + * not be re-encoded. On the first invocation, the StartingBit should be set 0. On + * subsequent invocations, the StartingBit should be set to the end of the object + * (in bits) from the previous invocation. + * + * The EdsLib_DataTypeDB_FinalizePackedObject() API call can be used at a later time + * to compute the values for special fields within the encoded binary. + * + * @note This API relies on the packed size as indicated in the Database. + * With the addition of variably-sized objects to the EDS specification, the packed + * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, + * and will return an error code if used with a variably-sized object. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param DestBuffer Pointer to the destination buffer + * @param SourceBuffer Pointer to the source buffer (not modified by this call) + * @param MaxPackedBitSize Maximum size of destination buffer, in bits + * @param SourceByteSize Maximum size of source buffer, in bytes + * @param StartingBit Number of bits that are already encoded (i.e. from previous call) + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxPackedBitSize, + uint32_t SourceByteSize, + uint32_t StartingBit); -/** - * Perform conversion from a native/unpacked object to an EDS/packed bitstream in stages - * - * This packs the output buffer in stages. The object will be encoded similar to the - * EdsLib_DataTypeDB_PackCompleteObject(), with respect to derived object identification - * and encoding. However, the object is not completed in that the values for special fields - * (i.e. ErrorControl, Length, Fixed values) are not computed or set in the encoded object. - * - * This function should be used by applications that need to further process the content - * or otherwise customize the procedure during the encoding process. - * - * To facilitate this, an additional parameter "ProcessedSize" is included, which allows - * the application to specify the starting position for encoding. This allows - * encoding to be resumed from a previous call. Bits prior to this location will - * not be re-encoded. On the first invocation, the ProcessedSize should be set 0. On - * subsequent invocations, the ProcessedSize should be set to the end of the object - * from the previous invocation. ProcessedSize will be updated to the point - * where encoding left off in this call. - * - * The EdsLib_DataTypeDB_FinalizePackedObjectVarSize() API call can be used at a later time - * to compute the values for special fields within the encoded binary. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param DestBuffer Pointer to the destination buffer - * @param SourceBuffer Pointer to the source buffer (not modified by this call) - * @param MaxSize Maximum size of buffers, in bits (dest) and bytes (source) - * @param ProcessedSize Number of bits that are already encoded (i.e. from previous call) - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_PackCompleteObject() - * \sa EdsLib_DataTypeDB_FinalizePackedObject() - */ -int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, const EdsLib_SizeInfo_t *MaxSize, EdsLib_SizeInfo_t *ProcessedSize); + /** + * Perform conversion from a native/unpacked object to an EDS/packed bitstream + * + * This API is the same as EdsLib_DataTypeDB_PackCompleteObject() except the packed + * bit size is passed as an input/output value, because the encoded form may have fewer + * bits if the objects are variably sized. + * + * The PackedSize buffer should initially be set to the maximum size of the + * input and output buffers, in bytes and bits, respectively. After encoding, it + * these fields will be set to the actual size of encoded data. + * + * @param GD the runtime database object + * @param EdsId Buffer containing identifier for the top level encapsulation. + * After encoding, this is set to the final encoded object type. + * @param DestBuffer Pointer to the destination buffer + * @param SourceBuffer Pointer to the source buffer (not modified by this call) + * @param PackedSize Size of destination buffer as input, final packed size as output + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + EdsLib_SizeInfo_t *PackedSize); -/** - * Perform conversion from an EDS/packed bitstream to a native/unpacked object - * - * This unpacks/decodes a single object type in one step. The object will be decoded - * according to the object type supplied via the EdsId parameter. After decoding - * the database will be checked for derived types matching the constraints, and - * if a matching derived type is found, decoding continues for the derived type. - * This process repeats until no further derivation is found. - * - * After decoding completes, any special fields within the object are verified - * against the EDS specifications. Length entries, FixedValue entries, and ErrorControl - * entries are checked against locally computed according to EDS specifications and - * values within the decoded object are compared against the locally computed value. - * Any mismatch will generate an error. - * - * @param GD the runtime database object - * @param EdsId The identifier for the packed object. - * After decoding, this is set to the final decoded object type. - * @param DestBuffer Pointer to the destination buffer - * @param SourceBuffer Pointer to the source buffer (not modified by this call) - * @param MaxNativeByteSize Maximum size of destination buffer, in bytes - * @param SourceBitSize Maximum size of source buffer, in bits - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_UnpackPartialObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxNativeByteSize, uint32_t SourceBitSize); + /** + * Perform conversion from a native/unpacked object to an EDS/packed bitstream in stages + * + * This packs the output buffer in stages. The object will be encoded similar to the + * EdsLib_DataTypeDB_PackCompleteObject(), with respect to derived object identification + * and encoding. However, the object is not completed in that the values for special fields + * (i.e. ErrorControl, Length, Fixed values) are not computed or set in the encoded object. + * + * This function should be used by applications that need to further process the content + * or otherwise customize the procedure during the encoding process. + * + * To facilitate this, an additional parameter "ProcessedSize" is included, which allows + * the application to specify the starting position for encoding. This allows + * encoding to be resumed from a previous call. Bits prior to this location will + * not be re-encoded. On the first invocation, the ProcessedSize should be set 0. On + * subsequent invocations, the ProcessedSize should be set to the end of the object + * from the previous invocation. ProcessedSize will be updated to the point + * where encoding left off in this call. + * + * The EdsLib_DataTypeDB_FinalizePackedObjectVarSize() API call can be used at a later time + * to compute the values for special fields within the encoded binary. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param DestBuffer Pointer to the destination buffer + * @param SourceBuffer Pointer to the source buffer (not modified by this call) + * @param MaxSize Maximum size of buffers, in bits (dest) and bytes (source) + * @param ProcessedSize Number of bits that are already encoded (i.e. from previous call) + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_PackCompleteObject() + * \sa EdsLib_DataTypeDB_FinalizePackedObject() + */ + int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + const EdsLib_SizeInfo_t *MaxSize, + EdsLib_SizeInfo_t *ProcessedSize); -/** - * Perform conversion from an EDS/packed bitstream to a native/unpacked object in stages. - * - * This unpacks the output buffer in stages. The object will be decoded similar to the - * EdsLib_DataTypeDB_UnpackCompleteObject(), with respect to derived object identification - * and decoding. However, the object is not verified in that the values for special fields - * (i.e. ErrorControl, Length, Fixed values) are passed through and not checked. - * - * This function should be used by applications that need to further process the content - * or otherwise customize the procedure during the decoding process. - * - * To facilitate this, an additional parameter "StartingByte" is included, which allows - * the application to specify the starting byte position for decoding. This allows - * decoding to be resumed from a previous call. Bytes prior to this starting byte will - * not be re-decoded. On the first invocation, the StartingByte should be set 0. On - * subsequent invocations, the StartingByte should be set to the end of the object - * (in bytes) from the previous invocation. - * - * The EdsLib_DataTypeDB_VerifyUnpackedObject() API call can be used at a later time - * to check the values for special fields within the decoded structure. - * - * @note This API relies on the packed size as indicated in the Database. - * With the addition of variably-sized objects to the EDS specification, the packed - * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, - * and will return an error code if used with a variably-sized object. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param DestBuffer Pointer to the destination buffer - * @param SourceBuffer Pointer to the source buffer (not modified by this call) - * @param MaxNativeByteSize Maximum size of destination buffer, in bytes - * @param SourceBitSize Maximum size of source buffer, in bits - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_UnpackPartialObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxNativeByteSize, uint32_t SourceBitSize, uint32_t StartingByte); + /** + * Perform conversion from an EDS/packed bitstream to a native/unpacked object + * + * This unpacks/decodes a single object type in one step. The object will be decoded + * according to the object type supplied via the EdsId parameter. After decoding + * the database will be checked for derived types matching the constraints, and + * if a matching derived type is found, decoding continues for the derived type. + * This process repeats until no further derivation is found. + * + * After decoding completes, any special fields within the object are verified + * against the EDS specifications. Length entries, FixedValue entries, and ErrorControl + * entries are checked against locally computed according to EDS specifications and + * values within the decoded object are compared against the locally computed value. + * Any mismatch will generate an error. + * + * @param GD the runtime database object + * @param EdsId The identifier for the packed object. + * After decoding, this is set to the final decoded object type. + * @param DestBuffer Pointer to the destination buffer + * @param SourceBuffer Pointer to the source buffer (not modified by this call) + * @param MaxNativeByteSize Maximum size of destination buffer, in bytes + * @param SourceBitSize Maximum size of source buffer, in bits + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_UnpackPartialObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxNativeByteSize, + uint32_t SourceBitSize); -/** - * Perform conversion from an EDS/packed bitstream to a native/unpacked object in stages. - * - * This unpacks the output buffer in stages. The object will be decoded similar to the - * EdsLib_DataTypeDB_UnpackCompleteObject(), with respect to derived object identification - * and decoding. However, the object is not verified in that the values for special fields - * (i.e. ErrorControl, Length, Fixed values) are passed through and not checked. - * - * This function should be used by applications that need to further process the content - * or otherwise customize the procedure during the decoding process. - * - * To facilitate this, an additional parameter "ProcessedSize" is included, which allows - * the application to specify the starting byte position for decoding. This allows - * decoding to be resumed from a previous call. Bytes prior to this starting byte will - * not be re-decoded. On the first invocation, the ProcessedSize should be set 0. On - * subsequent invocations, the ProcessedSize should be set to the end of the object - * from the previous invocation. - * - * The EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() API call can be used at a later time - * to check the values for special fields within the decoded structure. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param DestBuffer Pointer to the destination buffer - * @param SourceBuffer Pointer to the source buffer (not modified by this call) - * @param MaxSize Maximum size of destination buffer (bytes) and source buffer (bits) - * @param ProcessedSize Size of processed data - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_UnpackCompleteObject() - * \sa EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, const EdsLib_SizeInfo_t *MaxSize, EdsLib_SizeInfo_t *ProcessedSize); + /** + * Perform conversion from an EDS/packed bitstream to a native/unpacked object in stages. + * + * This unpacks the output buffer in stages. The object will be decoded similar to the + * EdsLib_DataTypeDB_UnpackCompleteObject(), with respect to derived object identification + * and decoding. However, the object is not verified in that the values for special fields + * (i.e. ErrorControl, Length, Fixed values) are passed through and not checked. + * + * This function should be used by applications that need to further process the content + * or otherwise customize the procedure during the decoding process. + * + * To facilitate this, an additional parameter "StartingByte" is included, which allows + * the application to specify the starting byte position for decoding. This allows + * decoding to be resumed from a previous call. Bytes prior to this starting byte will + * not be re-decoded. On the first invocation, the StartingByte should be set 0. On + * subsequent invocations, the StartingByte should be set to the end of the object + * (in bytes) from the previous invocation. + * + * The EdsLib_DataTypeDB_VerifyUnpackedObject() API call can be used at a later time + * to check the values for special fields within the decoded structure. + * + * @note This API relies on the packed size as indicated in the Database. + * With the addition of variably-sized objects to the EDS specification, the packed + * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, + * and will return an error code if used with a variably-sized object. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param DestBuffer Pointer to the destination buffer + * @param SourceBuffer Pointer to the source buffer (not modified by this call) + * @param MaxNativeByteSize Maximum size of destination buffer, in bytes + * @param SourceBitSize Maximum size of source buffer, in bits + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_UnpackPartialObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxNativeByteSize, + uint32_t SourceBitSize, + uint32_t StartingByte); -/** - * Compute values for special fields within a packed object. - * - * Special fields such as Error Control, Length Entries, and Fixed Values need - * to be computed after encoding is complete. These cannot be computed - * on-the-fly during encoding because they require the complete object to known. - * For instance, a Length would reflect the complete length of the packet, and - * an Error Control such as CRC-16 requires the Length to be set correctly prior - * to calculation. Due to these interdependencies, the computation needs to be - * deferred until the entire content is known. - * - * Note that the EdsLib_DataTypeDB_PackCompleteObject() API invokes this - * function automatically. This only needs to be invoked by the application - * when using the EdsLib_DataTypeDB_PackPartialObjectVarSize() API. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param PackedData Pointer to the encoded/packed buffer - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_FinalizePackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const void *NativeBuffer, void *PackedBuffer, const EdsLib_SizeInfo_t *ProcessedSize); + /** + * Perform conversion from an EDS/packed bitstream to a native/unpacked object in stages. + * + * This unpacks the output buffer in stages. The object will be decoded similar to the + * EdsLib_DataTypeDB_UnpackCompleteObject(), with respect to derived object identification + * and decoding. However, the object is not verified in that the values for special fields + * (i.e. ErrorControl, Length, Fixed values) are passed through and not checked. + * + * This function should be used by applications that need to further process the content + * or otherwise customize the procedure during the decoding process. + * + * To facilitate this, an additional parameter "ProcessedSize" is included, which allows + * the application to specify the starting byte position for decoding. This allows + * decoding to be resumed from a previous call. Bytes prior to this starting byte will + * not be re-decoded. On the first invocation, the ProcessedSize should be set 0. On + * subsequent invocations, the ProcessedSize should be set to the end of the object + * from the previous invocation. + * + * The EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() API call can be used at a later time + * to check the values for special fields within the decoded structure. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param DestBuffer Pointer to the destination buffer + * @param SourceBuffer Pointer to the source buffer (not modified by this call) + * @param MaxSize Maximum size of destination buffer (bytes) and source buffer (bits) + * @param ProcessedSize Size of processed data + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_UnpackCompleteObject() + * \sa EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + const EdsLib_SizeInfo_t *MaxSize, + EdsLib_SizeInfo_t *ProcessedSize); -/** - * Compute values for special fields within a packed object. - * - * Special fields such as Error Control, Length Entries, and Fixed Values need - * to be computed after encoding is complete. These cannot be computed - * on-the-fly during encoding because they require the complete object to known. - * For instance, a Length would reflect the complete length of the packet, and - * an Error Control such as CRC-16 requires the Length to be set correctly prior - * to calculation. Due to these interdependencies, the computation needs to be - * deferred until the entire content is known. - * - * Note that the EdsLib_DataTypeDB_PackCompleteObject() API invokes this - * function automatically. This only needs to be invoked by the application - * when using the EdsLib_DataTypeDB_PackPartialObject() API. - * - * @note This API relies on the packed size as indicated in the Database. - * With the addition of variably-sized objects to the EDS specification, the packed - * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, - * and will return an error code if used with a variably-sized object. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param PackedData Pointer to the encoded/packed buffer - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_FinalizePackedObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_FinalizePackedObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *PackedData); + /** + * Compute values for special fields within a packed object. + * + * Special fields such as Error Control, Length Entries, and Fixed Values need + * to be computed after encoding is complete. These cannot be computed + * on-the-fly during encoding because they require the complete object to known. + * For instance, a Length would reflect the complete length of the packet, and + * an Error Control such as CRC-16 requires the Length to be set correctly prior + * to calculation. Due to these interdependencies, the computation needs to be + * deferred until the entire content is known. + * + * Note that the EdsLib_DataTypeDB_PackCompleteObject() API invokes this + * function automatically. This only needs to be invoked by the application + * when using the EdsLib_DataTypeDB_PackPartialObjectVarSize() API. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param PackedData Pointer to the encoded/packed buffer + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_PackPartialObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_FinalizePackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *NativeBuffer, + void *PackedBuffer, + const EdsLib_SizeInfo_t *ProcessedSize); -/** - * Constants for EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() "RecomputeFields" parameter. - * - * These are bitmasks that can be OR'ed together to indicate which aspects to recompute - * during the verification of a decoded object. - */ -enum -{ - EDSLIB_DATATYPEDB_RECOMPUTE_NONE = 0, /**< Do not recompute any fields (default) */ - EDSLIB_DATATYPEDB_RECOMPUTE_LENGTH = 0x01, /**< Recompute Length field of the native object */ - EDSLIB_DATATYPEDB_RECOMPUTE_ERRORCONTROL = 0x02, /**< Recompute Error Control field of the native object */ - EDSLIB_DATATYPEDB_RECOMPUTE_FIXEDVALUE = 0x04, /**< Recompute Fixed Value fields of the native object */ - EDSLIB_DATATYPEDB_RECOMPUTE_ALL = 0xFF /**< Recompute all relevant fields */ -}; + /** + * Compute values for special fields within a packed object. + * + * Special fields such as Error Control, Length Entries, and Fixed Values need + * to be computed after encoding is complete. These cannot be computed + * on-the-fly during encoding because they require the complete object to known. + * For instance, a Length would reflect the complete length of the packet, and + * an Error Control such as CRC-16 requires the Length to be set correctly prior + * to calculation. Due to these interdependencies, the computation needs to be + * deferred until the entire content is known. + * + * Note that the EdsLib_DataTypeDB_PackCompleteObject() API invokes this + * function automatically. This only needs to be invoked by the application + * when using the EdsLib_DataTypeDB_PackPartialObject() API. + * + * @note This API relies on the packed size as indicated in the Database. + * With the addition of variably-sized objects to the EDS specification, the packed + * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, + * and will return an error code if used with a variably-sized object. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param PackedData Pointer to the encoded/packed buffer + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_FinalizePackedObjectVarSize() + */ + int32_t + EdsLib_DataTypeDB_FinalizePackedObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *PackedData); -/** - * Verify values for special fields within an unpacked (native) object. - * - * Special fields such as Error Control, Length Entries, and Fixed Values need - * to be verified after decoding is complete. These cannot be computed - * on-the-fly during encoding because they require the complete object to known. - * For instance, a Length would reflect the complete length of the packet, and - * an Error Control such as CRC-16 requires the entire content to be known - * prior to verification. Due to these interdependencies, the computation needs - * to be deferred until the entire content is known. - * - * Note that the EdsLib_DataTypeDB_UnpackCompleteObject() API invokes this - * function automatically. This only needs to be invoked by the application - * when using the EdsLib_DataTypeDB_UnpackPartialObjectVarSize() API. - * - * Note that in order to calculate an error control field such as a CRC, this - * function needs a pointer to the raw (encoded) data in addition to the decoded - * data. If this is set NULL, then the field(s) cannot be checked. - * - * In addition to verification of the original values from the encoded object, - * this function can also update the values to match the decoded object if desired. - * For instance, some historical code might assume that an embedded LengthEntry - * field will be related to the "sizeof()" operator in C. However, the size of - * an EDS object will not necessarily match the size of the corresponding C structure - * due to native representation of values and alignment padding. To appease - * older applications, the value of the Length field can be adjusted to match - * the native structure instead of encoded object. - * - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param UnpackedObj Pointer to the decoded/unpacked buffer which is to be checked. - * @param PackedData Pointer to the encoded/packed buffer, for reference when verifying - * fields. May be set NULL to skip verification (i.e. if recomputing fields). - * @param RecomputeFields A bitmask indicating the fields to recompute. Should be - * a bitwise OR of the flags defined in the respective enumeration. - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EDSLIB_DATATYPEDB_RECOMPUTE_NONE - * \sa EdsLib_DataTypeDB_UnpackPartialObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *NativeBuffer, const void *PackedBuffer, uint32_t RecomputeFields, const EdsLib_SizeInfo_t *ProcessedSize); + /** + * Constants for EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() "RecomputeFields" parameter. + * + * These are bitmasks that can be OR'ed together to indicate which aspects to recompute + * during the verification of a decoded object. + */ + enum + { + EDSLIB_DATATYPEDB_RECOMPUTE_NONE = 0, /**< Do not recompute any fields (default) */ + EDSLIB_DATATYPEDB_RECOMPUTE_LENGTH = 0x01, /**< Recompute Length field of the native object */ + EDSLIB_DATATYPEDB_RECOMPUTE_ERRORCONTROL = 0x02, /**< Recompute Error Control field of the native object */ + EDSLIB_DATATYPEDB_RECOMPUTE_FIXEDVALUE = 0x04, /**< Recompute Fixed Value fields of the native object */ + EDSLIB_DATATYPEDB_RECOMPUTE_ALL = 0xFF /**< Recompute all relevant fields */ + }; -/** - * Verify values for special fields within an unpacked (native) object. - * - * Special fields such as Error Control, Length Entries, and Fixed Values need - * to be verified after decoding is complete. These cannot be computed - * on-the-fly during encoding because they require the complete object to known. - * For instance, a Length would reflect the complete length of the packet, and - * an Error Control such as CRC-16 requires the entire content to be known - * prior to verification. Due to these interdependencies, the computation needs - * to be deferred until the entire content is known. - * - * Note that the EdsLib_DataTypeDB_UnpackCompleteObject() API invokes this - * function automatically. This only needs to be invoked by the application - * when using the EdsLib_DataTypeDB_UnpackPartialObject() API. - * - * Note that in order to calculate an error control field such as a CRC, this - * function needs a pointer to the raw (encoded) data in addition to the decoded - * data. If this is set NULL, then the field(s) cannot be checked. - * - * In addition to verification of the original values from the encoded object, - * this function can also update the values to match the decoded object if desired. - * For instance, some historical code might assume that an embedded LengthEntry - * field will be related to the "sizeof()" operator in C. However, the size of - * an EDS object will not necessarily match the size of the corresponding C structure - * due to native representation of values and alignment padding. To appease - * older applications, the value of the Length field can be adjusted to match - * the native structure instead of encoded object. - * - * @note This API relies on the packed size as indicated in the Database. - * With the addition of variably-sized objects to the EDS specification, the packed - * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, - * and will return an error code if used with a variably-sized object. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param UnpackedObj Pointer to the decoded/unpacked buffer which is to be checked. - * @param PackedData Pointer to the encoded/packed buffer, for reference when verifying - * fields. May be set NULL to skip verification (i.e. if recomputing fields). - * @param RecomputeFields A bitmask indicating the fields to recompute. Should be - * a bitwise OR of the flags defined in the respective enumeration. - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - * - * \sa EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() - */ -int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - void *UnpackedObj, const void *PackedObj, uint32_t RecomputeFields); + /** + * Verify values for special fields within an unpacked (native) object. + * + * Special fields such as Error Control, Length Entries, and Fixed Values need + * to be verified after decoding is complete. These cannot be computed + * on-the-fly during encoding because they require the complete object to known. + * For instance, a Length would reflect the complete length of the packet, and + * an Error Control such as CRC-16 requires the entire content to be known + * prior to verification. Due to these interdependencies, the computation needs + * to be deferred until the entire content is known. + * + * Note that the EdsLib_DataTypeDB_UnpackCompleteObject() API invokes this + * function automatically. This only needs to be invoked by the application + * when using the EdsLib_DataTypeDB_UnpackPartialObjectVarSize() API. + * + * Note that in order to calculate an error control field such as a CRC, this + * function needs a pointer to the raw (encoded) data in addition to the decoded + * data. If this is set NULL, then the field(s) cannot be checked. + * + * In addition to verification of the original values from the encoded object, + * this function can also update the values to match the decoded object if desired. + * For instance, some historical code might assume that an embedded LengthEntry + * field will be related to the "sizeof()" operator in C. However, the size of + * an EDS object will not necessarily match the size of the corresponding C structure + * due to native representation of values and alignment padding. To appease + * older applications, the value of the Length field can be adjusted to match + * the native structure instead of encoded object. + * + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param UnpackedObj Pointer to the decoded/unpacked buffer which is to be checked. + * @param PackedData Pointer to the encoded/packed buffer, for reference when verifying + * fields. May be set NULL to skip verification (i.e. if recomputing fields). + * @param RecomputeFields A bitmask indicating the fields to recompute. Should be + * a bitwise OR of the flags defined in the respective enumeration. + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EDSLIB_DATATYPEDB_RECOMPUTE_NONE + * \sa EdsLib_DataTypeDB_UnpackPartialObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *NativeBuffer, + const void *PackedBuffer, + uint32_t RecomputeFields, + const EdsLib_SizeInfo_t *ProcessedSize); -/** - * Initialize fixed values within a newly-created unpacked (native) object. - * - * On derived containers, the EDS specifies Value constraints on fields within - * the base container that are subsequently used for identification. This - * function initializes those fields which are specified in the EDS for the - * given container type. - * - * This function should be called whenever a new object is instantiated in - * memory. - * - * @param GD the runtime database object - * @param EdsId The identifier for the top level encapsulation - * @param UnpackedObj Pointer to the decoded/unpacked buffer which is to be initialized. - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - */ -int32_t EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *UnpackedObj); + /** + * Verify values for special fields within an unpacked (native) object. + * + * Special fields such as Error Control, Length Entries, and Fixed Values need + * to be verified after decoding is complete. These cannot be computed + * on-the-fly during encoding because they require the complete object to known. + * For instance, a Length would reflect the complete length of the packet, and + * an Error Control such as CRC-16 requires the entire content to be known + * prior to verification. Due to these interdependencies, the computation needs + * to be deferred until the entire content is known. + * + * Note that the EdsLib_DataTypeDB_UnpackCompleteObject() API invokes this + * function automatically. This only needs to be invoked by the application + * when using the EdsLib_DataTypeDB_UnpackPartialObject() API. + * + * Note that in order to calculate an error control field such as a CRC, this + * function needs a pointer to the raw (encoded) data in addition to the decoded + * data. If this is set NULL, then the field(s) cannot be checked. + * + * In addition to verification of the original values from the encoded object, + * this function can also update the values to match the decoded object if desired. + * For instance, some historical code might assume that an embedded LengthEntry + * field will be related to the "sizeof()" operator in C. However, the size of + * an EDS object will not necessarily match the size of the corresponding C structure + * due to native representation of values and alignment padding. To appease + * older applications, the value of the Length field can be adjusted to match + * the native structure instead of encoded object. + * + * @note This API relies on the packed size as indicated in the Database. + * With the addition of variably-sized objects to the EDS specification, the packed + * size is no longer fixed. Thus thus API is only applicable to fixed-size objects, + * and will return an error code if used with a variably-sized object. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param UnpackedObj Pointer to the decoded/unpacked buffer which is to be checked. + * @param PackedData Pointer to the encoded/packed buffer, for reference when verifying + * fields. May be set NULL to skip verification (i.e. if recomputing fields). + * @param RecomputeFields A bitmask indicating the fields to recompute. Should be + * a bitwise OR of the flags defined in the respective enumeration. + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + * + * \sa EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() + */ + int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *UnpackedObj, + const void *PackedObj, + uint32_t RecomputeFields); -/** - * Given an unpacked/native buffer, extract a value using EDS-specified semantics. - * - * @param GD the runtime database object - * @param SourceBuffer The message buffer (read-only, not modified by this call) - * @param ComponentInfo The ID of the message and field (offset) within the message to extract - * @param DestBuffer Buffer to store result information. - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - */ -int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_GenericValueBuffer_t *DestBuffer, const void *SrcPtr); + /** + * Initialize fixed values within a newly-created unpacked (native) object. + * + * On derived containers, the EDS specifies Value constraints on fields within + * the base container that are subsequently used for identification. This + * function initializes those fields which are specified in the EDS for the + * given container type. + * + * This function should be called whenever a new object is instantiated in + * memory. + * + * @param GD the runtime database object + * @param EdsId The identifier for the top level encapsulation + * @param UnpackedObj Pointer to the decoded/unpacked buffer which is to be initialized. + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + */ + int32_t + EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *UnpackedObj); -/** - * Given an unpacked (native byte order) message buffer, store a value using EDS-specified semantics. - * - * @param GD the runtime database object - * @param DestBuffer The message buffer (modified by this call) - * @param ComponentInfo The ID of the message and field (offset) within the message to write - * @param SourceValue Value to store in the message. - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - */ -int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, EdsLib_GenericValueBuffer_t *SrcBuffer); + /** + * Given an unpacked/native buffer, extract a value using EDS-specified semantics. + * + * @param GD the runtime database object + * @param SourceBuffer The message buffer (read-only, not modified by this call) + * @param ComponentInfo The ID of the message and field (offset) within the message to extract + * @param DestBuffer Buffer to store result information. + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + */ + int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_GenericValueBuffer_t *DestBuffer, + const void *SrcPtr); -/** - * Given an unpacked (native byte order) container, identify the derived contents using EDS-specified constraint values - * - * Reads the necessary field(s) from the encapsulation interface to determine the derived contents - * - * This version will not read fields beyond the given size parameter. As such it can be used with partial - * objects or other buffers that may not be sized as expected. However, if the size does not - * include the field(s) containing the constraints, then identification process will fail. - * - * @param GD the runtime database object - * @param EdsId The ID of the encapsulation interface - * @param BufferPtr The message buffer (read-only, not modified by this call) - * @param BufferSize The known size of the message buffer (will not read beyond this point) - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - */ -int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const void *BufferPtr, size_t BufferSize, EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo); + /** + * Given an unpacked (native byte order) message buffer, store a value using EDS-specified semantics. + * + * @param GD the runtime database object + * @param DestBuffer The message buffer (modified by this call) + * @param ComponentInfo The ID of the message and field (offset) within the message to write + * @param SourceValue Value to store in the message. + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + */ + int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *DestPtr, + EdsLib_GenericValueBuffer_t *SrcBuffer); -/** - * Given an unpacked (native byte order) container, identify the derived contents using EDS-specified constraint values - * - * Reads the necessary field(s) from the encapsulation interface to determine the derived contents - * - * This version requires that the buffer points to a complete instance of the object, the size of the buffer is - * assumed to be equal to or greater than the EDS-defined data type size. - * - * @param GD the runtime database object - * @param EdsId The ID of the encapsulation interface - * @param MessageBuffer The message buffer (read-only, not modified by this call) - * @return EDSLIB_SUCCESS if successful, error code if unsuccessful - */ -int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const void *MessageBuffer, EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo); + /** + * Given an unpacked (native byte order) container, identify the derived contents using EDS-specified constraint + * values + * + * Reads the necessary field(s) from the encapsulation interface to determine the derived contents + * + * This version will not read fields beyond the given size parameter. As such it can be used with partial + * objects or other buffers that may not be sized as expected. However, if the size does not + * include the field(s) containing the constraints, then identification process will fail. + * + * @param GD the runtime database object + * @param EdsId The ID of the encapsulation interface + * @param BufferPtr The message buffer (read-only, not modified by this call) + * @param BufferSize The known size of the message buffer (will not read beyond this point) + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + */ + int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *BufferPtr, + size_t BufferSize, + EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo); -/** - * Convert the numeric value representation from its current type into the desired type - * - * If the current type and desired type is equal, then no change is made. Otherwise, the value may be converted - * as necessary to achieve the desired type. The value buffer is modified in place. - * - * @param ValueBuff An EdsLib value buffer object containing a numeric value - * @param DesiredType The desired type of value - */ -void EdsLib_DataTypeConvert(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_BasicType_t DesiredType); + /** + * Given an unpacked (native byte order) container, identify the derived contents using EDS-specified constraint + * values + * + * Reads the necessary field(s) from the encapsulation interface to determine the derived contents + * + * This version requires that the buffer points to a complete instance of the object, the size of the buffer is + * assumed to be equal to or greater than the EDS-defined data type size. + * + * @param GD the runtime database object + * @param EdsId The ID of the encapsulation interface + * @param MessageBuffer The message buffer (read-only, not modified by this call) + * @return EDSLIB_SUCCESS if successful, error code if unsuccessful + */ + int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *MessageBuffer, + EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo); + /** + * Convert the numeric value representation from its current type into the desired type + * + * If the current type and desired type is equal, then no change is made. Otherwise, the value may be converted + * as necessary to achieve the desired type. The value buffer is modified in place. + * + * @param ValueBuff An EdsLib value buffer object containing a numeric value + * @param DesiredType The desired type of value + */ + void EdsLib_DataTypeConvert(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_BasicType_t DesiredType); #ifdef __cplusplus -} /* extern C */ +} /* extern C */ #endif - -#endif /* _EDSLIB_DATATYPEDB_H_ */ +#endif /* _EDSLIB_DATATYPEDB_H_ */ diff --git a/edslib/fsw/inc/edslib_displaydb.h b/edslib/fsw/inc/edslib_displaydb.h index ba22b13..b839ded 100644 --- a/edslib/fsw/inc/edslib_displaydb.h +++ b/edslib/fsw/inc/edslib_displaydb.h @@ -19,7 +19,6 @@ * limitations under the License. */ - /** * \file edslib_displaydb.h * \ingroup fsw @@ -38,10 +37,8 @@ #ifndef _EDSLIB_DISPLAYDB_H_ #define _EDSLIB_DISPLAYDB_H_ - #include "edslib_datatypedb.h" - /****************************** * TYPEDEFS ******************************/ @@ -54,9 +51,10 @@ */ struct EdsLib_EntityDescriptor { - EdsLib_DataTypeDB_EntityInfo_t EntityInfo; /**< Information about the component itself (type ID, offset within parent) */ - const char *FullName; /**< Name of current element as obtained from name dictionary */ - uint16_t SeqNum; + EdsLib_DataTypeDB_EntityInfo_t + EntityInfo; /**< Information about the component itself (type ID, offset within parent) */ + const char *FullName; /**< Name of current element as obtained from name dictionary */ + uint16_t SeqNum; }; typedef struct EdsLib_EntityDescriptor EdsLib_EntityDescriptor_t; @@ -80,7 +78,6 @@ typedef void (*EdsLib_EntityCallback_t)(void *Arg, const EdsLib_EntityDescriptor */ typedef void (*EdsLib_SymbolCallback_t)(void *Arg, const char *SymbolName, int32_t SymbolValue); - /****************************** * API CALLS ******************************/ @@ -90,296 +87,328 @@ extern "C" { #endif -/** - * Initialize the DisplayDB subsystem - * - * This should be called once during initialization by - * programs wishing to use the Display API calls. - */ -void EdsLib_DisplayDB_Initialize(void); - -/** - * Gets the printable name of the EDS associated with the given Message ID. - * - * \note - * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, - * so it is safe to use in directly in printf()-style calls. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the message ID to look up - * @returns a constant character string representing the application name - */ -const char *EdsLib_DisplayDB_GetEdsName(const EdsLib_DatabaseObject_t *GD, uint16_t AppId); - -/** - * Gets the base printable message/structure name associated with the given Message ID. - * - * This does NOT include any namespace qualifier. It returns only the base name of the object. - * - * \note - * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, - * so it is safe to use in directly in printf()-style calls. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the message ID to look up - * @returns a constant character string representing the message/structure name - */ -const char *EdsLib_DisplayDB_GetBaseName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId); - - -/** - * Gets the base printable namespace name associated with the given Message ID. - * - * This is usually (by convention) the same as the EDS name but that is not required - * - * \note - * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, - * so it is safe to use in directly in printf()-style calls. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the message ID to look up - * @returns a constant character string representing the namespace name - */ -const char *EdsLib_DisplayDB_GetNamespace(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId); - -/** - * Gets the fully qualified message/structure name associated with the given Message ID. - * - * This includes a namespace qualifier i.e. NAME_SPACE/name format. This name is created by - * concatenating the two so a storage buffer must be supplied by the user. The same buffer is - * also returned by the function to ease use inside printf-style arguments. - * - * \note - * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, - * so it is safe to use in directly in printf()-style calls. However in this case the user - * buffer will be set to an empty string. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the message ID to look up - * @param Buffer memory to store result string - * @param BufferSize size of Buffer - * @returns the user buffer that was passed in. - */ -const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *Buffer, uint32_t BufferSize); - -/** - * Gets details on how to display a given data type, if available. - * - * Returns a "DisplayHint" and associated argument if present in the database. - * - For EDSLIB_DISPLAYHINT_ENUM_SYMTABLE, the argument is the symbolic name/value table - * - For EDSLIB_DISPLAYHINT_SUBNAMES, the argument is a const char array of the names - * - * Other types/usage of the pointer argument may be added. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the message ID to look up - * @return Display Hint type if successful - */ -EdsLib_DisplayHint_t EdsLib_DisplayDB_GetDisplayHint(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId); - - -/** - * Parse a string and convert into an EDS identifier value - * - * @param GD the active EdsLib runtime database object - * @param String The null-terminated string to parse as an EDS identifier - * @returns The converted EdsLib_Id_t value - * - * \sa EdsLib_EdsId_ToString() - */ -EdsLib_Id_t EdsLib_DisplayDB_LookupTypeName(const EdsLib_DatabaseObject_t *GD, const char *String); - - -/** - * Converts a named member entity into an integer index if possible - * - * Attempts to find a member identified by the Name parameter within the specified EDS object. - * If found, the index/position of that name is stored in the SubIndex output buffer, which can - * then be passed to the EdsLib_DataTypeDB_GetMemberByIndex() function to obtain further - * information about the entity. - * - * This function only works on containers and array types that have sub entities; it does not - * work on scalar types. - * - * @note This function is _not_ a substitute for a structure name lookup as done by the - * locate function. In particular this API only operates at the given direct data type level - * and it will not search inside any sub-objects to find a matching name. In particular - * this function will not find anything that is not directly named within the given data type, - * such as a base type objects which are "hidden". - * - * Other types/usage of the pointer argument may be added. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the ID of the data type to operate on - * @param Name the subentity name to find - * @param SubIndex buffer to store the index/position - * @return EDSLIB_SUCCESS if successful, or appropriate error code if unsuccessful - */ -int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *Name, uint16_t *SubIndex); - -/** - * Converts an integer index into a member name if possible - * - * Looks up the display name of a sub entity at the given index. If there is no sub member - * at the given index or it has no name associated with it in the database, then NULL is - * returned. - * - * This function only works on containers and array types that have sub entities; it does not - * work on scalar types. NULL will be returned in all those cases. - * - * In particular, this method can be used to check if an EDS index refers to a "base type" - * of a container object. These are valid container indices that have no name associated, - * and thus this function will return NULL. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the ID of the data type to operate on - * @param SubIndex the index/position to look up - * @return pointer to member name if successful, NULL if no name exists - */ -const char *EdsLib_DisplayDB_GetNameByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t SubIndex); - -/** - * Walk through the payload structure of a given message/structure ID and generate a callback for each - * element within the structure with the detailed parameter information. - * - * This "ShortNames" variant will NOT descend into sub-structures within the parent structure given. The "FullName" - * in the parameter descriptor will always be just a single (short) element name. An element that is a sub structure will have - * the "SubStructureId" value set to a nonzero value and array elements will only get a single callback for the first - * element of the array. - * - * @param GD the active EdsLib runtime database object - * @param EdsId the message ID to walk. This may be any known/valid ID (message ID or a bare structure ID). - * @param Callback the callback function to invoke for each element in the message payload - * @param Arg opaque argument that is passed directly to the callback function - * - * \sa EdsLib_Iterator_Payload_FullNames() - */ -void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_EntityCallback_t Callback, void *Arg); -void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_EntityCallback_t Callback, void *Arg); -/** - * Walk through the deep payload structure of a given message/structure ID and find an element name matching - * the name supplied as the "FullName" value within the LocateDesc parameter. If found, the rest of the parameters - * in LocateDesc will be set according to the found element. - * - * This version will descend into all sub structures and name matching is performed on the fully qualified name which should - * be in C-style syntax. For instance: - * - * Member.SubMember.SubArray[ArrayIndex].Value - * - * @param GD the active EdsLib runtime database object - * @param EdsId the message ID to walk. This may be any known/valid ID (message ID or a bare structure ID). - * @param Name The parameter to locate. - * @param CompInfo Output buffer representing member location. - * @returns EDSLIB_SUCCESS if successful, error code if element name was not found. - */ -int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *Name, EdsLib_DataTypeDB_EntityInfo_t *CompInfo); - - -/** - * Debugging utility function to write arbitrary data contents to the stdio stream as hexadecimal - * The data is treated as a binary blob. - * - * @param output any valid STDIO output stream (e.g. stdout) - * @param DataPtr pointer to the block of data - * @param DisplayOffset the offset of the first byte in the data block. This is typically zero but may be nonzero if the data - * should be viewed as a continuation of a previous display. - * @param Count The number of bytes to display. - */ -void EdsLib_Generate_Hexdump(void *output, const uint8_t *DataPtr, uint16_t DisplayOffset, uint16_t Count); - - -/* ************************************************************************************** - * EDS BINARY <-> STRING CONVERTERS - * - * These functions convert between user-friendly string representations and the numeric - * representations of EDS identifiers and EDS-defined datatypes. - * **************************************************************************************/ - - -/** - * Convert a binary/machine value into a printable string using the EdsLib_DisplayHint_t as guidelines for how to interpret the data. - * - For character strings, printable chars (as indicated by isprint()) will copied to the output buffer and null termination is ensured. - * - For integer numbers, these will be converted to symbolic constants if the "EnumNamespace" is set and a matching value is found. - * - For numbers for which a symbolic constant is not defined, conversion will fall back to an appropriate sprintf-like behavior - * - * EdsLib_Scalar_FromString() will perform the reverse operation - * - * @param GD the active EdsLib runtime database object - * @param OutputBuffer location to store the output string - * @param BufferSize maximum size of the OutputBuffer - * @param SrcPtr pointer to binary/machine data. Typically this is a pointer to a byte offset inside an "unpacked" message or structure, - * retrieved via the "MemberAbsOffset" field as returned from a locate or walk routine. - * @returns EDSLIB_SUCCESS if successful, error code if conversion failed. - * - * \sa EdsLib_Scalar_FromString() - */ -int32_t EdsLib_Scalar_ToString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *OutputBuffer, uint32_t BufferSize, const void *SrcPtr); - - -/** - * Convert string into binary/machine data using the EdsLib_DisplayHint_t as guidelines for how to interpret the data. - * - For character strings, all chars will copied to the destination up to the size limit or the terminating NULL - * - For integer numbers, these may be symbolic constants if the "EnumNamespace" is set and a matching value is found. - * - For numbers for which a symbolic constant is not defined, conversion will fall back to an appropriate strtol/ul/d/f system call - * - * EdsLib_Scalar_ToString() will perform the reverse operation - * - * @param GD the active EdsLib runtime database object - * @param DestPtr pointer to binary/machine data. Typically this is a pointer to a byte offset inside a message or structure, retrieved - * via the "MemberAbsOffset" field as returned from a locate or walk routine. - * @param SrcString The null-terminated string to convert into machine data - * @returns EDSLIB_SUCCESS if successful, error code if conversion failed. - * - * \sa EdsLib_Scalar_ToString() - */ -int32_t EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, const char *SrcString); - -const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const EdsLib_GenericValueBuffer_t *ValueBuffer); -void EdsLib_DisplayDB_GetEnumValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *String, EdsLib_GenericValueBuffer_t *ValueBuffer); -void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_SymbolCallback_t Callback, void *Arg); - -intmax_t EdsLib_DisplayDB_GetEnumValueByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t Index); -const char *EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t Index, char *Buffer, uint32_t BufferSize); - -/** - * Base64 encoding helper function - * - * Encodes the input using base64, where each character in the - * output represents 6 bits of binary data. The resulting - * string contains only normal printable characters, and can be - * passed through terminals or any other transmission media that is - * not 8-bit clean. Added whitespace, newlines, etc are not an issue. - * - * Input data will be padded with zero bits as necessary to make - * the binary data size an exact multiple of 6 bits. - * - * Output data will be truncated at the last non-zero character. - * - * The original binary data can be reconstituted using the decode function. - * - * @note The Out buffer should be sized appropriately to store - * exactly 1 char per 6 bits of input, plus 1 extra char - * for null termination of the output string. - */ -void EdsLib_DisplayDB_Base64Encode(char *Out, uint32_t OutputLenBytes, const uint8_t *In, uint32_t InputLenBits); - -/** - * Base64 decoding helper function - * - * Decodes the input using base64, where each character in the - * input represents 6 bits of binary data. This function will stop reading the - * input stream when the first null character is encountered. - * - * In all cases the output will be zero-filled with bits to as necessary fill the field - * width as specified in the OutputLenBits parameter. - */ -void EdsLib_DisplayDB_Base64Decode(uint8_t *Out, uint32_t OutputLenBits, const char *In); + /** + * Initialize the DisplayDB subsystem + * + * This should be called once during initialization by + * programs wishing to use the Display API calls. + */ + void EdsLib_DisplayDB_Initialize(void); + + /** + * Gets the printable name of the EDS associated with the given Message ID. + * + * \note + * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, + * so it is safe to use in directly in printf()-style calls. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the message ID to look up + * @returns a constant character string representing the application name + */ + const char *EdsLib_DisplayDB_GetEdsName(const EdsLib_DatabaseObject_t *GD, uint16_t AppId); + + /** + * Gets the base printable message/structure name associated with the given Message ID. + * + * This does NOT include any namespace qualifier. It returns only the base name of the object. + * + * \note + * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, + * so it is safe to use in directly in printf()-style calls. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the message ID to look up + * @returns a constant character string representing the message/structure name + */ + const char *EdsLib_DisplayDB_GetBaseName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId); + + /** + * Gets the base printable namespace name associated with the given Message ID. + * + * This is usually (by convention) the same as the EDS name but that is not required + * + * \note + * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, + * so it is safe to use in directly in printf()-style calls. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the message ID to look up + * @returns a constant character string representing the namespace name + */ + const char *EdsLib_DisplayDB_GetNamespace(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId); + + /** + * Gets the fully qualified message/structure name associated with the given Message ID. + * + * This includes a namespace qualifier i.e. NAME_SPACE/name format. This name is created by + * concatenating the two so a storage buffer must be supplied by the user. The same buffer is + * also returned by the function to ease use inside printf-style arguments. + * + * \note + * This function returns the constant string "UNDEF" instead of NULL if the lookup fails, + * so it is safe to use in directly in printf()-style calls. However in this case the user + * buffer will be set to an empty string. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the message ID to look up + * @param Buffer memory to store result string + * @param BufferSize size of Buffer + * @returns the user buffer that was passed in. + */ + const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + char *Buffer, + uint32_t BufferSize); + + /** + * Gets details on how to display a given data type, if available. + * + * Returns a "DisplayHint" and associated argument if present in the database. + * - For EDSLIB_DISPLAYHINT_ENUM_SYMTABLE, the argument is the symbolic name/value table + * - For EDSLIB_DISPLAYHINT_SUBNAMES, the argument is a const char array of the names + * + * Other types/usage of the pointer argument may be added. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the message ID to look up + * @return Display Hint type if successful + */ + EdsLib_DisplayHint_t EdsLib_DisplayDB_GetDisplayHint(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId); + + /** + * Parse a string and convert into an EDS identifier value + * + * @param GD the active EdsLib runtime database object + * @param String The null-terminated string to parse as an EDS identifier + * @returns The converted EdsLib_Id_t value + * + * \sa EdsLib_EdsId_ToString() + */ + EdsLib_Id_t EdsLib_DisplayDB_LookupTypeName(const EdsLib_DatabaseObject_t *GD, const char *String); + + /** + * Converts a named member entity into an integer index if possible + * + * Attempts to find a member identified by the Name parameter within the specified EDS object. + * If found, the index/position of that name is stored in the SubIndex output buffer, which can + * then be passed to the EdsLib_DataTypeDB_GetMemberByIndex() function to obtain further + * information about the entity. + * + * This function only works on containers and array types that have sub entities; it does not + * work on scalar types. + * + * @note This function is _not_ a substitute for a structure name lookup as done by the + * locate function. In particular this API only operates at the given direct data type level + * and it will not search inside any sub-objects to find a matching name. In particular + * this function will not find anything that is not directly named within the given data type, + * such as a base type objects which are "hidden". + * + * Other types/usage of the pointer argument may be added. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the ID of the data type to operate on + * @param Name the subentity name to find + * @param SubIndex buffer to store the index/position + * @return EDSLIB_SUCCESS if successful, or appropriate error code if unsuccessful + */ + int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *Name, + uint16_t *SubIndex); + + /** + * Converts an integer index into a member name if possible + * + * Looks up the display name of a sub entity at the given index. If there is no sub member + * at the given index or it has no name associated with it in the database, then NULL is + * returned. + * + * This function only works on containers and array types that have sub entities; it does not + * work on scalar types. NULL will be returned in all those cases. + * + * In particular, this method can be used to check if an EDS index refers to a "base type" + * of a container object. These are valid container indices that have no name associated, + * and thus this function will return NULL. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the ID of the data type to operate on + * @param SubIndex the index/position to look up + * @return pointer to member name if successful, NULL if no name exists + */ + const char * + EdsLib_DisplayDB_GetNameByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t SubIndex); + + /** + * Walk through the payload structure of a given message/structure ID and generate a callback for each + * element within the structure with the detailed parameter information. + * + * This "ShortNames" variant will NOT descend into sub-structures within the parent structure given. The "FullName" + * in the parameter descriptor will always be just a single (short) element name. An element that is a sub + * structure will have the "SubStructureId" value set to a nonzero value and array elements will only get a single + * callback for the first element of the array. + * + * @param GD the active EdsLib runtime database object + * @param EdsId the message ID to walk. This may be any known/valid ID (message ID or a bare structure ID). + * @param Callback the callback function to invoke for each element in the message payload + * @param Arg opaque argument that is passed directly to the callback function + * + * \sa EdsLib_Iterator_Payload_FullNames() + */ + void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_EntityCallback_t Callback, + void *Arg); + void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_EntityCallback_t Callback, + void *Arg); + /** + * Walk through the deep payload structure of a given message/structure ID and find an element name matching + * the name supplied as the "FullName" value within the LocateDesc parameter. If found, the rest of the parameters + * in LocateDesc will be set according to the found element. + * + * This version will descend into all sub structures and name matching is performed on the fully qualified name + * which should be in C-style syntax. For instance: + * + * Member.SubMember.SubArray[ArrayIndex].Value + * + * @param GD the active EdsLib runtime database object + * @param EdsId the message ID to walk. This may be any known/valid ID (message ID or a bare structure ID). + * @param Name The parameter to locate. + * @param CompInfo Output buffer representing member location. + * @returns EDSLIB_SUCCESS if successful, error code if element name was not found. + */ + int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *Name, + EdsLib_DataTypeDB_EntityInfo_t *CompInfo); + + /** + * Debugging utility function to write arbitrary data contents to the stdio stream as hexadecimal + * The data is treated as a binary blob. + * + * @param output any valid STDIO output stream (e.g. stdout) + * @param DataPtr pointer to the block of data + * @param DisplayOffset the offset of the first byte in the data block. This is typically zero but may be nonzero + * if the data should be viewed as a continuation of a previous display. + * @param Count The number of bytes to display. + */ + void EdsLib_Generate_Hexdump(void *output, const uint8_t *DataPtr, uint16_t DisplayOffset, uint16_t Count); + + /* ************************************************************************************** + * EDS BINARY <-> STRING CONVERTERS + * + * These functions convert between user-friendly string representations and the numeric + * representations of EDS identifiers and EDS-defined datatypes. + * **************************************************************************************/ + + /** + * Convert a binary/machine value into a printable string using the EdsLib_DisplayHint_t as guidelines for how to + * interpret the data. + * - For character strings, printable chars (as indicated by isprint()) will copied to the output buffer and null + * termination is ensured. + * - For integer numbers, these will be converted to symbolic constants if the "EnumNamespace" is set and a + * matching value is found. + * - For numbers for which a symbolic constant is not defined, conversion will fall back to an appropriate + * sprintf-like behavior + * + * EdsLib_Scalar_FromString() will perform the reverse operation + * + * @param GD the active EdsLib runtime database object + * @param OutputBuffer location to store the output string + * @param BufferSize maximum size of the OutputBuffer + * @param SrcPtr pointer to binary/machine data. Typically this is a pointer to a byte offset inside an "unpacked" + * message or structure, retrieved via the "MemberAbsOffset" field as returned from a locate or walk routine. + * @returns EDSLIB_SUCCESS if successful, error code if conversion failed. + * + * \sa EdsLib_Scalar_FromString() + */ + int32_t EdsLib_Scalar_ToString(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + char *OutputBuffer, + uint32_t BufferSize, + const void *SrcPtr); + + /** + * Convert string into binary/machine data using the EdsLib_DisplayHint_t as guidelines for how to interpret the + * data. + * - For character strings, all chars will copied to the destination up to the size limit or the terminating NULL + * - For integer numbers, these may be symbolic constants if the "EnumNamespace" is set and a matching value is + * found. + * - For numbers for which a symbolic constant is not defined, conversion will fall back to an appropriate + * strtol/ul/d/f system call + * + * EdsLib_Scalar_ToString() will perform the reverse operation + * + * @param GD the active EdsLib runtime database object + * @param DestPtr pointer to binary/machine data. Typically this is a pointer to a byte offset inside a message or + * structure, retrieved via the "MemberAbsOffset" field as returned from a locate or walk routine. + * @param SrcString The null-terminated string to convert into machine data + * @returns EDSLIB_SUCCESS if successful, error code if conversion failed. + * + * \sa EdsLib_Scalar_ToString() + */ + int32_t EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *DestPtr, + const char *SrcString); + + const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const EdsLib_GenericValueBuffer_t *ValueBuffer); + void EdsLib_DisplayDB_GetEnumValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *String, + EdsLib_GenericValueBuffer_t *ValueBuffer); + void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_SymbolCallback_t Callback, + void *Arg); + + intmax_t EdsLib_DisplayDB_GetEnumValueByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t Index); + const char *EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t Index, + char *Buffer, + uint32_t BufferSize); + + /** + * Base64 encoding helper function + * + * Encodes the input using base64, where each character in the + * output represents 6 bits of binary data. The resulting + * string contains only normal printable characters, and can be + * passed through terminals or any other transmission media that is + * not 8-bit clean. Added whitespace, newlines, etc are not an issue. + * + * Input data will be padded with zero bits as necessary to make + * the binary data size an exact multiple of 6 bits. + * + * Output data will be truncated at the last non-zero character. + * + * The original binary data can be reconstituted using the decode function. + * + * @note The Out buffer should be sized appropriately to store + * exactly 1 char per 6 bits of input, plus 1 extra char + * for null termination of the output string. + */ + void EdsLib_DisplayDB_Base64Encode(char *Out, uint32_t OutputLenBytes, const uint8_t *In, uint32_t InputLenBits); + + /** + * Base64 decoding helper function + * + * Decodes the input using base64, where each character in the + * input represents 6 bits of binary data. This function will stop reading the + * input stream when the first null character is encountered. + * + * In all cases the output will be zero-filled with bits to as necessary fill the field + * width as specified in the OutputLenBits parameter. + */ + void EdsLib_DisplayDB_Base64Decode(uint8_t *Out, uint32_t OutputLenBits, const char *In); #ifdef __cplusplus -} /* extern C */ +} /* extern C */ #endif - - -#endif /* _EDSLIB_DISPLAYDB_H_ */ - +#endif /* _EDSLIB_DISPLAYDB_H_ */ diff --git a/edslib/fsw/inc/edslib_global.h b/edslib/fsw/inc/edslib_global.h index 46cc97b..c265d59 100644 --- a/edslib/fsw/inc/edslib_global.h +++ b/edslib/fsw/inc/edslib_global.h @@ -84,8 +84,10 @@ extern "C" * @param[out] IdxOut output buffer for the Package/Application index value, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_FindPackageIdxBySubstring(const EdsLib_DatabaseObject_t *GD, const char *MatchString, - size_t MatchLen, uint8_t *IdxOut); + int32_t EdsLib_FindPackageIdxBySubstring(const EdsLib_DatabaseObject_t *GD, + const char *MatchString, + size_t MatchLen, + uint8_t *IdxOut); /** * Find an EDS package index by name diff --git a/edslib/fsw/inc/edslib_id.h b/edslib/fsw/inc/edslib_id.h index ddc0d7c..cf93f22 100644 --- a/edslib/fsw/inc/edslib_id.h +++ b/edslib/fsw/inc/edslib_id.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_id.h * \ingroup fsw @@ -45,13 +44,13 @@ * +-----------------+-----------------+-----------------+-----------------+ * | | CpuNum | AppId | | Format Identifier | * - * G = Genre Identifier (2 bit) => If (0), this refers to an EDS-defined data type and + * G = Genre Identifier (2 bit) => If (0), this refers to an EDS-defined data type and * should be used with the EdsLib_DataTypeDB API. If (1) this refers to a interface and * should be used with the EdsLib_IntfDB API. Values 2 and 3 are reserved for use in * additional user-defined database(s). * C = Cpu Number (5 bits) => Instance number in the range of 1-31. (0 = any) * This field is ignored for data types, as data types are never instance-specific. The - * field should be set 0 on all data type references. For interface/component references, 0 may be + * field should be set 0 on all data type references. For interface/component references, 0 may be * used as a placeholder value to indicate "any". Valid instance numbers are in the * range of 1-31. * A = App Number (7 bits) => EDS APP number in the range of 1-127 (0 = reserved/invalid) @@ -80,7 +79,7 @@ typedef uint32_t EdsLib_Id_t; * Because the appid of 0 is reserved, a valid EdsLib_Id_t can * never be all zero. */ -#define EDSLIB_ID_INVALID ((EdsLib_Id_t)0) +#define EDSLIB_ID_INVALID ((EdsLib_Id_t)0) /** * Some constants for interpreting the uint32_t. User applications @@ -89,23 +88,22 @@ typedef uint32_t EdsLib_Id_t; */ enum { - EDSLIB_ID_SHIFT_INDEX = 0, - EDSLIB_ID_SHIFT_APP = 16, - EDSLIB_ID_SHIFT_CPUNUM = 24, - EDSLIB_ID_SHIFT_GENRE = 29, - - EDSLIB_ID_MASK_INDEX = 0x3FF, - EDSLIB_ID_MASK_APP = 0x7F, - EDSLIB_ID_MASK_CPUNUM = 0x1F, - EDSLIB_ID_MASK_GENRE = 0x3, - - EDSLIB_ID_INDEX_BITS = EDSLIB_ID_MASK_INDEX << EDSLIB_ID_SHIFT_INDEX, - EDSLIB_ID_APP_BITS = EDSLIB_ID_MASK_APP << EDSLIB_ID_SHIFT_APP, - EDSLIB_ID_CPUNUM_BITS = EDSLIB_ID_MASK_CPUNUM << EDSLIB_ID_SHIFT_CPUNUM, - EDSLIB_ID_GENRE_BITS = EDSLIB_ID_MASK_GENRE << EDSLIB_ID_SHIFT_GENRE, + EDSLIB_ID_SHIFT_INDEX = 0, + EDSLIB_ID_SHIFT_APP = 16, + EDSLIB_ID_SHIFT_CPUNUM = 24, + EDSLIB_ID_SHIFT_GENRE = 29, + + EDSLIB_ID_MASK_INDEX = 0x3FF, + EDSLIB_ID_MASK_APP = 0x7F, + EDSLIB_ID_MASK_CPUNUM = 0x1F, + EDSLIB_ID_MASK_GENRE = 0x3, + + EDSLIB_ID_INDEX_BITS = EDSLIB_ID_MASK_INDEX << EDSLIB_ID_SHIFT_INDEX, + EDSLIB_ID_APP_BITS = EDSLIB_ID_MASK_APP << EDSLIB_ID_SHIFT_APP, + EDSLIB_ID_CPUNUM_BITS = EDSLIB_ID_MASK_CPUNUM << EDSLIB_ID_SHIFT_CPUNUM, + EDSLIB_ID_GENRE_BITS = EDSLIB_ID_MASK_GENRE << EDSLIB_ID_SHIFT_GENRE, }; - /* Note, the bits for datatype are chosen so it will be the default if no genre is set */ /* The other possible values for Genre are reserved for use in derivative products (user-defined) */ #define EDSLIB_ID_GENRE_DATATYPE_BITS 0x0 @@ -113,7 +111,6 @@ enum #define EDSLIB_ID_GENRE_USERDEF1_BITS 0x2 #define EDSLIB_ID_GENRE_USERDEF2_BITS 0x3 - /*************************************************************************************** * INITIALIZERS * @@ -123,7 +120,7 @@ enum /** * Initialize an EdsLib_Id referring to a data type. - * + * * The CPU number will be set to 0 (any) and the format type will be set * to indicate a generic data structure. * @@ -131,14 +128,14 @@ enum * @param FormatIdx A value from the app-specific data dictionary enumeration. These * are the values from the APP_eds_defines.h file. */ -#define EDSLIB_MAKE_ID(AppIdx, FormatIdx) \ - ((EDSLIB_ID_GENRE_DATATYPE_BITS << EDSLIB_ID_SHIFT_GENRE) | \ - ((uint32_t)((AppIdx) & EDSLIB_ID_MASK_APP) << EDSLIB_ID_SHIFT_APP) | \ - ((uint32_t)((FormatIdx) & EDSLIB_ID_MASK_INDEX) << EDSLIB_ID_SHIFT_INDEX)) +#define EDSLIB_MAKE_ID(AppIdx, FormatIdx) \ + ((EDSLIB_ID_GENRE_DATATYPE_BITS << EDSLIB_ID_SHIFT_GENRE) \ + | ((uint32_t)((AppIdx) & EDSLIB_ID_MASK_APP) << EDSLIB_ID_SHIFT_APP) \ + | ((uint32_t)((FormatIdx) & EDSLIB_ID_MASK_INDEX) << EDSLIB_ID_SHIFT_INDEX)) /** * Initialize an EdsLib_Id referring to an interface. - * + * * The CPU number will be set to 0 (any) and the format type will be set * to the specified interface * @@ -146,12 +143,10 @@ enum * @param IntfIdx A value from the app-specific interface enumeration. These * are the values from the APP_eds_defines.h file. */ -#define EDSLIB_INTF_ID(AppIdx, IntfIdx) \ - ((EDSLIB_ID_GENRE_INTF_BITS << EDSLIB_ID_SHIFT_GENRE) | \ - ((uint32_t)((AppIdx) & EDSLIB_ID_MASK_APP) << EDSLIB_ID_SHIFT_APP) | \ - ((uint32_t)((IntfIdx) & EDSLIB_ID_MASK_INDEX) << EDSLIB_ID_SHIFT_INDEX)) - - +#define EDSLIB_INTF_ID(AppIdx, IntfIdx) \ + ((EDSLIB_ID_GENRE_INTF_BITS << EDSLIB_ID_SHIFT_GENRE) \ + | ((uint32_t)((AppIdx) & EDSLIB_ID_MASK_APP) << EDSLIB_ID_SHIFT_APP) \ + | ((uint32_t)((IntfIdx) & EDSLIB_ID_MASK_INDEX) << EDSLIB_ID_SHIFT_INDEX)) /*************************************************************************************** * BASIC ACCESSORS @@ -165,7 +160,7 @@ enum */ static inline uint8_t EdsLib_Get_Genre(EdsLib_Id_t EdsId) { - return (EdsId >> EDSLIB_ID_SHIFT_GENRE) & EDSLIB_ID_MASK_GENRE; + return (EdsId >> EDSLIB_ID_SHIFT_GENRE) & EDSLIB_ID_MASK_GENRE; } /** @@ -173,8 +168,8 @@ static inline uint8_t EdsLib_Get_Genre(EdsLib_Id_t EdsId) */ static inline void EdsLib_Set_Genre(EdsLib_Id_t *EdsId, uint8_t Genre) { - *EdsId &= ~EDSLIB_ID_GENRE_BITS; - *EdsId |= (Genre & EDSLIB_ID_MASK_GENRE) << EDSLIB_ID_SHIFT_GENRE; + *EdsId &= ~EDSLIB_ID_GENRE_BITS; + *EdsId |= (Genre & EDSLIB_ID_MASK_GENRE) << EDSLIB_ID_SHIFT_GENRE; } /** @@ -182,7 +177,7 @@ static inline void EdsLib_Set_Genre(EdsLib_Id_t *EdsId, uint8_t Genre) */ static inline bool EdsLib_Is_DataType(EdsLib_Id_t EdsId) { - return EdsLib_Get_Genre(EdsId) == EDSLIB_ID_GENRE_DATATYPE_BITS; + return EdsLib_Get_Genre(EdsId) == EDSLIB_ID_GENRE_DATATYPE_BITS; } /** @@ -190,7 +185,7 @@ static inline bool EdsLib_Is_DataType(EdsLib_Id_t EdsId) */ static inline bool EdsLib_Is_Interface(EdsLib_Id_t EdsId) { - return EdsLib_Get_Genre(EdsId) == EDSLIB_ID_GENRE_INTF_BITS; + return EdsLib_Get_Genre(EdsId) == EDSLIB_ID_GENRE_INTF_BITS; } /** @@ -198,7 +193,7 @@ static inline bool EdsLib_Is_Interface(EdsLib_Id_t EdsId) */ static inline uint16_t EdsLib_Get_CpuNumber(EdsLib_Id_t EdsId) { - return (EdsId >> EDSLIB_ID_SHIFT_CPUNUM) & EDSLIB_ID_MASK_CPUNUM; + return (EdsId >> EDSLIB_ID_SHIFT_CPUNUM) & EDSLIB_ID_MASK_CPUNUM; } /** @@ -206,8 +201,8 @@ static inline uint16_t EdsLib_Get_CpuNumber(EdsLib_Id_t EdsId) */ static inline void EdsLib_Set_CpuNumber(EdsLib_Id_t *EdsId, uint16_t CpuNum) { - *EdsId &= ~EDSLIB_ID_CPUNUM_BITS; - *EdsId |= (CpuNum & EDSLIB_ID_MASK_CPUNUM) << EDSLIB_ID_SHIFT_CPUNUM; + *EdsId &= ~EDSLIB_ID_CPUNUM_BITS; + *EdsId |= (CpuNum & EDSLIB_ID_MASK_CPUNUM) << EDSLIB_ID_SHIFT_CPUNUM; } /** @@ -215,7 +210,7 @@ static inline void EdsLib_Set_CpuNumber(EdsLib_Id_t *EdsId, uint16_t CpuNum) */ static inline uint16_t EdsLib_Get_AppIdx(EdsLib_Id_t EdsId) { - return (EdsId >> EDSLIB_ID_SHIFT_APP) & EDSLIB_ID_MASK_APP; + return (EdsId >> EDSLIB_ID_SHIFT_APP) & EDSLIB_ID_MASK_APP; } /** @@ -223,8 +218,8 @@ static inline uint16_t EdsLib_Get_AppIdx(EdsLib_Id_t EdsId) */ static inline void EdsLib_Set_AppIdx(EdsLib_Id_t *EdsId, uint16_t AppIdx) { - *EdsId &= ~EDSLIB_ID_APP_BITS; - *EdsId |= (AppIdx & EDSLIB_ID_MASK_APP) << EDSLIB_ID_SHIFT_APP; + *EdsId &= ~EDSLIB_ID_APP_BITS; + *EdsId |= (AppIdx & EDSLIB_ID_MASK_APP) << EDSLIB_ID_SHIFT_APP; } /** @@ -232,7 +227,7 @@ static inline void EdsLib_Set_AppIdx(EdsLib_Id_t *EdsId, uint16_t AppIdx) */ static inline uint16_t EdsLib_Get_FormatIdx(EdsLib_Id_t EdsId) { - return ((EdsId >> EDSLIB_ID_SHIFT_INDEX) & EDSLIB_ID_MASK_INDEX); + return ((EdsId >> EDSLIB_ID_SHIFT_INDEX) & EDSLIB_ID_MASK_INDEX); } /** @@ -240,8 +235,8 @@ static inline uint16_t EdsLib_Get_FormatIdx(EdsLib_Id_t EdsId) */ static inline void EdsLib_Set_FormatIdx(EdsLib_Id_t *EdsId, uint16_t FormatIdx) { - *EdsId &= ~EDSLIB_ID_INDEX_BITS; - *EdsId |= ((FormatIdx & EDSLIB_ID_MASK_INDEX) << EDSLIB_ID_SHIFT_INDEX); + *EdsId &= ~EDSLIB_ID_INDEX_BITS; + *EdsId |= ((FormatIdx & EDSLIB_ID_MASK_INDEX) << EDSLIB_ID_SHIFT_INDEX); } /** @@ -254,7 +249,7 @@ static inline void EdsLib_Set_FormatIdx(EdsLib_Id_t *EdsId, uint16_t FormatIdx) */ static inline bool EdsLib_Is_Valid(EdsLib_Id_t EdsId) { - return ((EdsId & (EDSLIB_ID_INDEX_BITS | EDSLIB_ID_APP_BITS)) != 0); + return ((EdsId & (EDSLIB_ID_INDEX_BITS | EDSLIB_ID_APP_BITS)) != 0); } /** @@ -266,7 +261,7 @@ static inline bool EdsLib_Is_Valid(EdsLib_Id_t EdsId) */ static inline bool EdsLib_Is_Similar(EdsLib_Id_t EdsId1, EdsLib_Id_t EdsId2) { - return (((EdsId1 ^ EdsId2) & (EDSLIB_ID_GENRE_BITS | EDSLIB_ID_INDEX_BITS | EDSLIB_ID_APP_BITS)) == 0); + return (((EdsId1 ^ EdsId2) & (EDSLIB_ID_GENRE_BITS | EDSLIB_ID_INDEX_BITS | EDSLIB_ID_APP_BITS)) == 0); } /** @@ -278,9 +273,7 @@ static inline bool EdsLib_Is_Similar(EdsLib_Id_t EdsId1, EdsLib_Id_t EdsId2) */ static inline bool EdsLib_Is_Match(EdsLib_Id_t EdsId1, EdsLib_Id_t EdsId2) { - return (EdsId1 == EdsId2); + return (EdsId1 == EdsId2); } - -#endif /* _EDSLIB_ID_H_ */ - +#endif /* _EDSLIB_ID_H_ */ diff --git a/edslib/fsw/inc/edslib_init.h b/edslib/fsw/inc/edslib_init.h index 1a931e3..c6ca8f0 100644 --- a/edslib/fsw/inc/edslib_init.h +++ b/edslib/fsw/inc/edslib_init.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_init.h * \ingroup fsw @@ -38,5 +37,4 @@ */ void EdsLib_Initialize(void); -#endif /* _EDSLIB_INIT_H_ */ - +#endif /* _EDSLIB_INIT_H_ */ diff --git a/edslib/fsw/inc/edslib_intfdb.h b/edslib/fsw/inc/edslib_intfdb.h index 8f3f75b..873ad07 100644 --- a/edslib/fsw/inc/edslib_intfdb.h +++ b/edslib/fsw/inc/edslib_intfdb.h @@ -106,8 +106,10 @@ extern "C" * @param[out] IdBuffer output buffer for the Eds ID, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx, - const char *CompName, EdsLib_Id_t *IdBuffer); + int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD, + uint16_t AppIdx, + const char *CompName, + EdsLib_Id_t *IdBuffer); /** * Find an EDS declared interface by name @@ -120,8 +122,10 @@ extern "C" * @param[out] IdBuffer output buffer for the Eds ID, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx, - const char *IntfName, EdsLib_Id_t *IdBuffer); + int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, + uint16_t AppIdx, + const char *IntfName, + EdsLib_Id_t *IdBuffer); /** * Find an EDS declared interface by name @@ -133,8 +137,9 @@ extern "C" * @param[out] IdBuffer output buffer for the Eds ID, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, - EdsLib_Id_t *IdBuffer); + int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + EdsLib_Id_t *IdBuffer); /** * Find an EDS component (utilized) interface by its localized name @@ -151,8 +156,10 @@ extern "C" * @param[out] IdBuffer output buffer for the Eds ID, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t ComponentId, - const char *IntfName, EdsLib_Id_t *IdBuffer); + int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t ComponentId, + const char *IntfName, + EdsLib_Id_t *IdBuffer); /** * Find an EDS component (utilized) interface by fully qualified name @@ -167,8 +174,9 @@ extern "C" * @param[out] IdBuffer output buffer for the Eds ID, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, - EdsLib_Id_t *IdBuffer); + int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + EdsLib_Id_t *IdBuffer); /** * Find an EDS command by name @@ -185,8 +193,10 @@ extern "C" * @param[out] IdBuffer output buffer for the Eds ID, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, - const char *CmdName, EdsLib_Id_t *IdBuffer); + int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, + const char *CmdName, + EdsLib_Id_t *IdBuffer); /** * Gets the EdsId for all EDS-defined commands within an interface @@ -203,8 +213,10 @@ extern "C" * @param[in] NumIdBufs the number of buffers in the IdBuffer array * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, EdsLib_Id_t *IdBuffer, - size_t NumIdBufs); + int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, + EdsLib_Id_t *IdBuffer, + size_t NumIdBufs); /** * Map all command arguments to their actual data type @@ -229,8 +241,11 @@ extern "C" * @param[in] NumIdBufs the number of buffers in the IdBuffer array * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t CmdEdsId, - EdsLib_Id_t CompIntfEdsId, EdsLib_Id_t *IdBuffer, size_t NumIdBufs); + int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t CmdEdsId, + EdsLib_Id_t CompIntfEdsId, + EdsLib_Id_t *IdBuffer, + size_t NumIdBufs); /** * Get details on an EDS declared interface @@ -240,7 +255,8 @@ extern "C" * @param[out] IntfInfoBuffer output buffer for the information, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, + int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, EdsLib_IntfDB_InterfaceInfo_t *IntfInfoBuffer); /** @@ -251,7 +267,8 @@ extern "C" * @param[out] CompInfoBuffer output buffer for the component information, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t ComponentId, + int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t ComponentId, EdsLib_IntfDB_ComponentInfo_t *CompInfoBuffer); /** @@ -266,8 +283,8 @@ extern "C" * @param[in] BufferLen length of the output buffer * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *BufferPtr, - size_t BufferLen); + int32_t + EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *BufferPtr, size_t BufferLen); /** * Get details on an EDS command @@ -277,8 +294,9 @@ extern "C" * @param[out] CommandInfoBuffer output buffer for the component information, if successful * @return EDSLIB_SUCCESS if successful, error code if unsuccessful */ - int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t CommandId, - EdsLib_IntfDB_CommandInfo_t *CommandInfoBuffer); + int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t CommandId, + EdsLib_IntfDB_CommandInfo_t *CommandInfoBuffer); #ifdef __cplusplus } /* extern "C" */ diff --git a/edslib/fsw/src/edslib_binding_objects.c b/edslib/fsw/src/edslib_binding_objects.c index ebe7dae..7e43408 100644 --- a/edslib/fsw/src/edslib_binding_objects.c +++ b/edslib/fsw/src/edslib_binding_objects.c @@ -18,15 +18,14 @@ * limitations under the License. */ - /** * \file edslib_binding_objects.c * \ingroup fsw * \author joseph.p.hickey@nasa.gov * -** Generic high-level EDS "binding" objects. -** This defines a descriptor type which wraps together all EDS metadata along -** with an object pointer to get an all-inclusive, self contained "smart object". + ** Generic high-level EDS "binding" objects. + ** This defines a descriptor type which wraps together all EDS metadata along + ** with an object pointer to get an all-inclusive, self contained "smart object". */ #include @@ -51,7 +50,7 @@ union EdsLib_Binding_AllocBuf { EdsLib_Binding_Buffer_Content_t Content; - uint8_t RawData[4]; + uint8_t RawData[4]; /* * The next fields are not intended to be used directly, @@ -60,15 +59,13 @@ union EdsLib_Binding_AllocBuf * if deemed necessary. This should reflect the largest native machine * types. */ - void *Ptr; - intmax_t AlignInt; + void *Ptr; + intmax_t AlignInt; long double AlignFloat; - }; typedef union EdsLib_Binding_AllocBuf EdsLib_Binding_AllocBuf_t; - /* * Initialization routine placeholder. * @@ -89,7 +86,8 @@ void EdsLib_Binding_Initialize(void) * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_Binding_SetDescBuffer(EdsLib_Binding_DescriptorObject_t *DescrObj, EdsLib_Binding_Buffer_Content_t *TargetBuffer) +void EdsLib_Binding_SetDescBuffer(EdsLib_Binding_DescriptorObject_t *DescrObj, + EdsLib_Binding_Buffer_Content_t *TargetBuffer) { EdsLib_Binding_Buffer_Content_t *PrevContentPtr = DescrObj->BufferPtr; @@ -128,20 +126,20 @@ void EdsLib_Binding_SetDescBuffer(EdsLib_Binding_DescriptorObject_t *DescrObj, E *-----------------------------------------------------------------*/ EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_AllocManagedBuffer(size_t MaxContentSize) { - EdsLib_Binding_AllocBuf_t *BufPtr; + EdsLib_Binding_AllocBuf_t *BufPtr; EdsLib_Binding_Buffer_Content_t *ContentPtr; - size_t ActualSize; + size_t ActualSize; ActualSize = sizeof(EdsLib_Binding_AllocBuf_t) + MaxContentSize; - BufPtr = malloc(ActualSize); + BufPtr = malloc(ActualSize); if (BufPtr != NULL) { memset(BufPtr, 0, ActualSize); - BufPtr->Content.Data = BufPtr[1].RawData; + BufPtr->Content.Data = BufPtr[1].RawData; BufPtr->Content.MaxContentSize = MaxContentSize; - BufPtr->Content.IsManaged = true; /* mark it as "managed", this means it will be auto deleted */ - ContentPtr = &BufPtr->Content; + BufPtr->Content.IsManaged = true; /* mark it as "managed", this means it will be auto deleted */ + ContentPtr = &BufPtr->Content; } else { @@ -157,11 +155,12 @@ EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_AllocManagedBuffer(size_t MaxCon * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Binding_Buffer_Content_t *ContentPtr, void *DataPtr, size_t MaxContentSize) +EdsLib_Binding_Buffer_Content_t * +EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Binding_Buffer_Content_t *ContentPtr, void *DataPtr, size_t MaxContentSize) { - ContentPtr->Data = DataPtr; + ContentPtr->Data = DataPtr; ContentPtr->MaxContentSize = MaxContentSize; - ContentPtr->IsManaged = false; /* mark it as "not managed", so it will NOT be auto-deleted */ + ContentPtr->IsManaged = false; /* mark it as "not managed", so it will NOT be auto-deleted */ ContentPtr->ReferenceCount = 0; return ContentPtr; @@ -174,13 +173,13 @@ EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Bindi * *-----------------------------------------------------------------*/ void EdsLib_Binding_InitDescriptor(EdsLib_Binding_DescriptorObject_t *ObjectUserData, - const EdsLib_DatabaseObject_t *EdsDB, - EdsLib_Id_t EdsId) + const EdsLib_DatabaseObject_t *EdsDB, + EdsLib_Id_t EdsId) { EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - memset(ObjectUserData,0,sizeof(*ObjectUserData)); - ObjectUserData->GD = EdsDB; + memset(ObjectUserData, 0, sizeof(*ObjectUserData)); + ObjectUserData->GD = EdsDB; ObjectUserData->EdsId = EdsId; EdsLib_DataTypeDB_GetDerivedInfo(EdsDB, EdsId, &DerivInfo); ObjectUserData->Length = DerivInfo.MaxSize.Bytes; @@ -193,12 +192,14 @@ void EdsLib_Binding_InitDescriptor(EdsLib_Binding_DescriptorObject_t *ObjectUser * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_Binding_InitSubObject(EdsLib_Binding_DescriptorObject_t *SubObject, const EdsLib_Binding_DescriptorObject_t *ParentObj, const EdsLib_DataTypeDB_EntityInfo_t *Component) +void EdsLib_Binding_InitSubObject(EdsLib_Binding_DescriptorObject_t *SubObject, + const EdsLib_Binding_DescriptorObject_t *ParentObj, + const EdsLib_DataTypeDB_EntityInfo_t *Component) { - memset(SubObject,0,sizeof(*SubObject)); + memset(SubObject, 0, sizeof(*SubObject)); EdsLib_Binding_SetDescBuffer(SubObject, ParentObj->BufferPtr); - SubObject->GD = ParentObj->GD; - SubObject->EdsId = Component->EdsId; + SubObject->GD = ParentObj->GD; + SubObject->EdsId = Component->EdsId; SubObject->Offset = Component->Offset.Bytes + ParentObj->Offset; SubObject->Length = Component->MaxSize.Bytes; EdsLib_DataTypeDB_GetTypeInfo(SubObject->GD, SubObject->EdsId, &SubObject->TypeInfo); @@ -210,23 +211,20 @@ void EdsLib_Binding_InitSubObject(EdsLib_Binding_DescriptorObject_t *SubObject, * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -EdsLib_Binding_Compatibility_t EdsLib_Binding_CheckEdsObjectsCompatible( - EdsLib_Binding_DescriptorObject_t *DestObject, - EdsLib_Binding_DescriptorObject_t *SrcObject) +EdsLib_Binding_Compatibility_t EdsLib_Binding_CheckEdsObjectsCompatible(EdsLib_Binding_DescriptorObject_t *DestObject, + EdsLib_Binding_DescriptorObject_t *SrcObject) { - EdsLib_Binding_Compatibility_t result = - EDSLIB_BINDING_COMPATIBILITY_NONE; + EdsLib_Binding_Compatibility_t result = EDSLIB_BINDING_COMPATIBILITY_NONE; /* * Determine assignment compatibility... * It is preferable to directly copy data from src to dest but * this is only possible when the native objects are compatible. */ - if (DestObject->TypeInfo.NumSubElements == 0 && - SrcObject->TypeInfo.NumSubElements == 0) + if (DestObject->TypeInfo.NumSubElements == 0 && SrcObject->TypeInfo.NumSubElements == 0) { - if (SrcObject->TypeInfo.ElemType == DestObject->TypeInfo.ElemType && - SrcObject->TypeInfo.Size.Bytes == DestObject->TypeInfo.Size.Bytes) + if (SrcObject->TypeInfo.ElemType == DestObject->TypeInfo.ElemType + && SrcObject->TypeInfo.Size.Bytes == DestObject->TypeInfo.Size.Bytes) { /* Objects are both scalars of the same native type & size -- direct copy is possible * note these could be from different databases -- should not matter */ @@ -243,8 +241,7 @@ EdsLib_Binding_Compatibility_t EdsLib_Binding_CheckEdsObjectsCompatible( */ result = EDSLIB_BINDING_COMPATIBILITY_EXACT; } - else if (EdsLib_DataTypeDB_BaseCheck(DestObject->GD, DestObject->EdsId, - SrcObject->EdsId) == EDSLIB_SUCCESS) + else if (EdsLib_DataTypeDB_BaseCheck(DestObject->GD, DestObject->EdsId, SrcObject->EdsId) == EDSLIB_SUCCESS) { /* * Source object is a derivative of the destination object. @@ -337,8 +334,7 @@ void EdsLib_Binding_InitStaticFields(EdsLib_Binding_DescriptorObject_t *ObjectUs if (ObjData != NULL) { - EdsLib_DataTypeDB_InitializeNativeObject(ObjectUserData->GD, - ObjectUserData->EdsId, ObjData); + EdsLib_DataTypeDB_InitializeNativeObject(ObjectUserData->GD, ObjectUserData->EdsId, ObjData); } } @@ -348,18 +344,18 @@ void EdsLib_Binding_InitStaticFields(EdsLib_Binding_DescriptorObject_t *ObjectUs * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_Binding_InitFromPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, const void *PackedData, size_t PackedDataSize) +int32_t EdsLib_Binding_InitFromPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, + const void *PackedData, + size_t PackedDataSize) { - int32_t Status = EdsLib_DataTypeDB_UnpackCompleteObject( - ObjectUserData->GD, - &ObjectUserData->EdsId, - EdsLib_Binding_GetNativeObject(ObjectUserData), - PackedData, - EdsLib_Binding_GetNativeSize(ObjectUserData), - 8 * PackedDataSize); + int32_t Status = EdsLib_DataTypeDB_UnpackCompleteObject(ObjectUserData->GD, + &ObjectUserData->EdsId, + EdsLib_Binding_GetNativeObject(ObjectUserData), + PackedData, + EdsLib_Binding_GetNativeSize(ObjectUserData), + 8 * PackedDataSize); - EdsLib_DataTypeDB_GetTypeInfo(ObjectUserData->GD, ObjectUserData->EdsId, - &ObjectUserData->TypeInfo); + EdsLib_DataTypeDB_GetTypeInfo(ObjectUserData->GD, ObjectUserData->EdsId, &ObjectUserData->TypeInfo); return Status; } @@ -370,33 +366,35 @@ int32_t EdsLib_Binding_InitFromPackedBuffer(EdsLib_Binding_DescriptorObject_t *O * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_Binding_ExportToPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, void *PackedData, size_t PackedDataSize) +int32_t EdsLib_Binding_ExportToPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, + void *PackedData, + size_t PackedDataSize) { - int32_t Status = EdsLib_DataTypeDB_PackCompleteObject( - ObjectUserData->GD, - &ObjectUserData->EdsId, - PackedData, - EdsLib_Binding_GetNativeObject(ObjectUserData), - 8 * PackedDataSize, - EdsLib_Binding_GetNativeSize(ObjectUserData)); + int32_t Status = EdsLib_DataTypeDB_PackCompleteObject(ObjectUserData->GD, + &ObjectUserData->EdsId, + PackedData, + EdsLib_Binding_GetNativeObject(ObjectUserData), + 8 * PackedDataSize, + EdsLib_Binding_GetNativeSize(ObjectUserData)); - EdsLib_DataTypeDB_GetTypeInfo(ObjectUserData->GD, ObjectUserData->EdsId, - &ObjectUserData->TypeInfo); + EdsLib_DataTypeDB_GetTypeInfo(ObjectUserData->GD, ObjectUserData->EdsId, &ObjectUserData->TypeInfo); return Status; } - /*---------------------------------------------------------------- * * EdsLib internal function * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_Binding_LoadValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, EdsLib_GenericValueBuffer_t *ValBuf) +int32_t EdsLib_Binding_LoadValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, + EdsLib_GenericValueBuffer_t *ValBuf) { - return EdsLib_DataTypeDB_LoadValue(ObjectUserData->GD, ObjectUserData->EdsId, - ValBuf, EdsLib_Binding_GetNativeObject(ObjectUserData)); + return EdsLib_DataTypeDB_LoadValue(ObjectUserData->GD, + ObjectUserData->EdsId, + ValBuf, + EdsLib_Binding_GetNativeObject(ObjectUserData)); } /*---------------------------------------------------------------- @@ -405,8 +403,11 @@ int32_t EdsLib_Binding_LoadValue(const EdsLib_Binding_DescriptorObject_t *Object * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_Binding_StoreValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, EdsLib_GenericValueBuffer_t *ValBuf) +int32_t EdsLib_Binding_StoreValue(const EdsLib_Binding_DescriptorObject_t *ObjectUserData, + EdsLib_GenericValueBuffer_t *ValBuf) { - return EdsLib_DataTypeDB_StoreValue(ObjectUserData->GD, ObjectUserData->EdsId, - EdsLib_Binding_GetNativeObject(ObjectUserData), ValBuf); + return EdsLib_DataTypeDB_StoreValue(ObjectUserData->GD, + ObjectUserData->EdsId, + EdsLib_Binding_GetNativeObject(ObjectUserData), + ValBuf); } diff --git a/edslib/fsw/src/edslib_database_ops.c b/edslib/fsw/src/edslib_database_ops.c index 64b5599..a3f056d 100644 --- a/edslib/fsw/src/edslib_database_ops.c +++ b/edslib/fsw/src/edslib_database_ops.c @@ -127,6 +127,6 @@ EdsLib_Id_t EdsLib_Encode_StructId(const EdsLib_DatabaseRef_t *RefObj) *-----------------------------------------------------------------*/ bool EdsLib_DatabaseRef_IsEqual(const EdsLib_DatabaseRef_t *RefObj1, const EdsLib_DatabaseRef_t *RefObj2) { - return (RefObj1->Qualifier == RefObj2->Qualifier && RefObj1->AppIndex == RefObj2->AppIndex && - RefObj1->SubIndex == RefObj2->SubIndex); + return (RefObj1->Qualifier == RefObj2->Qualifier && RefObj1->AppIndex == RefObj2->AppIndex + && RefObj1->SubIndex == RefObj2->SubIndex); } diff --git a/edslib/fsw/src/edslib_datatypedb_api.c b/edslib/fsw/src/edslib_datatypedb_api.c index f0cdc73..794e58b 100644 --- a/edslib/fsw/src/edslib_datatypedb_api.c +++ b/edslib/fsw/src/edslib_datatypedb_api.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb_api.c * \ingroup fsw @@ -80,10 +79,8 @@ uint16_t EdsLib_DataTypeDB_GetAppIdx(const EdsLib_DataTypeDB_t AppDict) *-----------------------------------------------------------------*/ int32_t EdsLib_DataTypeDB_Register(EdsLib_DatabaseObject_t *GD, EdsLib_DataTypeDB_t AppDict) { - if (GD == NULL || - GD->DataTypeDB_Table == NULL || - AppDict->MissionIdx >= GD->AppTableSize || - GD->DataTypeDB_Table[AppDict->MissionIdx] != NULL) + if (GD == NULL || GD->DataTypeDB_Table == NULL || AppDict->MissionIdx >= GD->AppTableSize + || GD->DataTypeDB_Table[AppDict->MissionIdx] != NULL) { return EDSLIB_FAILURE; } @@ -100,10 +97,8 @@ int32_t EdsLib_DataTypeDB_Register(EdsLib_DatabaseObject_t *GD, EdsLib_DataTypeD *-----------------------------------------------------------------*/ int32_t EdsLib_DataTypeDB_Unregister(EdsLib_DatabaseObject_t *GD, uint16_t AppIdx) { - if (GD == NULL || - GD->DataTypeDB_Table == NULL || - AppIdx >= GD->AppTableSize || - GD->DataTypeDB_Table[AppIdx] == NULL) + if (GD == NULL || GD->DataTypeDB_Table == NULL || AppIdx >= GD->AppTableSize + || GD->DataTypeDB_Table[AppIdx] == NULL) { return EDSLIB_FAILURE; } @@ -112,7 +107,6 @@ int32_t EdsLib_DataTypeDB_Unregister(EdsLib_DatabaseObject_t *GD, uint16_t AppId return EDSLIB_SUCCESS; } - /* * ************************************************************************************* * Datatype DB object lookup API calls @@ -125,11 +119,13 @@ int32_t EdsLib_DataTypeDB_Unregister(EdsLib_DatabaseObject_t *GD, uint16_t AppId * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_DataTypeDB_TypeInfo_t *TypeInfo) +int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_DataTypeDB_TypeInfo_t *TypeInfo) { - EdsLib_DatabaseRef_t TempRef; + EdsLib_DatabaseRef_t TempRef; const EdsLib_DataTypeDB_Entry_t *DataDictEntry; - int32_t Status; + int32_t Status; EdsLib_Decode_StructId(&TempRef, EdsId); DataDictEntry = EdsLib_DataTypeDB_GetEntry(GD, &TempRef); @@ -160,15 +156,18 @@ int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t SubIndex, EdsLib_DataTypeDB_EntityInfo_t *CompInfo) +int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t SubIndex, + EdsLib_DataTypeDB_EntityInfo_t *CompInfo) { const EdsLib_DataTypeDB_Entry_t *DataDict; const EdsLib_FieldDetailEntry_t *MemberDetail; const EdsLib_DataTypeDB_Entry_t *MemberDict; - const EdsLib_DatabaseRef_t *RefObj; - EdsLib_DatabaseRef_t TempRef; - uint16_t Idx; - int32_t Result; + const EdsLib_DatabaseRef_t *RefObj; + EdsLib_DatabaseRef_t TempRef; + uint16_t Idx; + int32_t Result; RefObj = NULL; @@ -182,74 +181,73 @@ int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, Ed if (DataDict != NULL && SubIndex < DataDict->NumSubElements) { - switch(DataDict->BasicType) + switch (DataDict->BasicType) { - case EDSLIB_BASICTYPE_CONTAINER: - case EDSLIB_BASICTYPE_COMPONENT: - { - RefObj = &DataDict->Detail.Container->EntryList[SubIndex].RefObj; - - if (CompInfo != NULL) + case EDSLIB_BASICTYPE_CONTAINER: + case EDSLIB_BASICTYPE_COMPONENT: { - const EdsLib_SizeInfo_t *EndOffset; + RefObj = &DataDict->Detail.Container->EntryList[SubIndex].RefObj; - /* check if the item could be at a variable location */ - if ((DataDict->Flags & EDSLIB_DATATYPE_FLAG_VARIABLE_SIZE) != 0) + if (CompInfo != NULL) { - for (Idx=0; Idx < SubIndex; ++Idx) + const EdsLib_SizeInfo_t *EndOffset; + + /* check if the item could be at a variable location */ + if ((DataDict->Flags & EDSLIB_DATATYPE_FLAG_VARIABLE_SIZE) != 0) { - MemberDetail = &DataDict->Detail.Container->EntryList[Idx]; - MemberDict = EdsLib_DataTypeDB_GetEntry(GD, &MemberDetail->RefObj); - if (MemberDict != NULL && (MemberDict->Flags & EDSLIB_DATATYPE_FLAG_VARIABLE_SIZE) != 0) + for (Idx = 0; Idx < SubIndex; ++Idx) { - CompInfo->Flags |= EDSLIB_DATATYPE_FLAG_VARIABLE_LOCATION; + MemberDetail = &DataDict->Detail.Container->EntryList[Idx]; + MemberDict = EdsLib_DataTypeDB_GetEntry(GD, &MemberDetail->RefObj); + if (MemberDict != NULL && (MemberDict->Flags & EDSLIB_DATATYPE_FLAG_VARIABLE_SIZE) != 0) + { + CompInfo->Flags |= EDSLIB_DATATYPE_FLAG_VARIABLE_LOCATION; + } } } - } - MemberDetail = &DataDict->Detail.Container->EntryList[SubIndex]; + MemberDetail = &DataDict->Detail.Container->EntryList[SubIndex]; - if (SubIndex < (DataDict->NumSubElements - 1)) - { - /* not the last entry in the container - peek to the next */ - EndOffset = &MemberDetail[1].Offset; - } - else - { - /* last element -- use the parent size */ - EndOffset = &DataDict->SizeInfo; - } + if (SubIndex < (DataDict->NumSubElements - 1)) + { + /* not the last entry in the container - peek to the next */ + EndOffset = &MemberDetail[1].Offset; + } + else + { + /* last element -- use the parent size */ + EndOffset = &DataDict->SizeInfo; + } - CompInfo->Offset = MemberDetail->Offset; - CompInfo->MaxSize.Bytes = (EndOffset->Bytes - CompInfo->Offset.Bytes); - CompInfo->MaxSize.Bits = (EndOffset->Bits - CompInfo->Offset.Bits); + CompInfo->Offset = MemberDetail->Offset; + CompInfo->MaxSize.Bytes = (EndOffset->Bytes - CompInfo->Offset.Bytes); + CompInfo->MaxSize.Bits = (EndOffset->Bits - CompInfo->Offset.Bits); + } + break; } - break; - } - case EDSLIB_BASICTYPE_ARRAY: - { - RefObj = &DataDict->Detail.Array->ElementRefObj; - - if (CompInfo != NULL) + case EDSLIB_BASICTYPE_ARRAY: { - /* - * Calculating the start offset this way, although it involves division, - * does not require that we actually _have_ the definition of the array - * element type loaded. The total byte size of the entire array _must_ - * be an integer multiple of the array length, by definition. - */ - - CompInfo->MaxSize.Bytes = (DataDict->SizeInfo.Bytes / DataDict->NumSubElements); - CompInfo->MaxSize.Bits = (DataDict->SizeInfo.Bits / DataDict->NumSubElements); - CompInfo->Offset.Bytes = CompInfo->MaxSize.Bytes * SubIndex; - CompInfo->Offset.Bits = CompInfo->MaxSize.Bits * SubIndex; + RefObj = &DataDict->Detail.Array->ElementRefObj; + + if (CompInfo != NULL) + { + /* + * Calculating the start offset this way, although it involves division, + * does not require that we actually _have_ the definition of the array + * element type loaded. The total byte size of the entire array _must_ + * be an integer multiple of the array length, by definition. + */ + + CompInfo->MaxSize.Bytes = (DataDict->SizeInfo.Bytes / DataDict->NumSubElements); + CompInfo->MaxSize.Bits = (DataDict->SizeInfo.Bits / DataDict->NumSubElements); + CompInfo->Offset.Bytes = CompInfo->MaxSize.Bytes * SubIndex; + CompInfo->Offset.Bits = CompInfo->MaxSize.Bits * SubIndex; + } + break; } - break; - } - default: - break; + default: + break; } - } if (RefObj != NULL) @@ -274,11 +272,14 @@ int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, Ed * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint32_t ByteOffset, EdsLib_DataTypeDB_EntityInfo_t *CompInfo) +int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint32_t ByteOffset, + EdsLib_DataTypeDB_EntityInfo_t *CompInfo) { const EdsLib_DataTypeDB_Entry_t *DataDict; - EdsLib_DatabaseRef_t TempRef; - int32_t Result; + EdsLib_DatabaseRef_t TempRef; + int32_t Result; memset(CompInfo, 0, sizeof(*CompInfo)); EdsLib_Decode_StructId(&TempRef, EdsId); @@ -299,23 +300,32 @@ int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t } Result = EDSLIB_SUCCESS; } - else switch(DataDict->BasicType) - { - case EDSLIB_BASICTYPE_CONTAINER: - case EDSLIB_BASICTYPE_COMPONENT: - { - Result = EdsLib_DataTypeDB_FindContainerMember_Impl(GD, DataDict, &ByteOffset, EdsLib_OffsetCompareBytes, CompInfo); - break; - } - case EDSLIB_BASICTYPE_ARRAY: - { - Result = EdsLib_DataTypeDB_FindArrayMember_Impl(GD, DataDict, &ByteOffset, EdsLib_GetArrayIdxFromBytes, CompInfo); - break; - } - default: - Result = EDSLIB_INVALID_SIZE_OR_TYPE; - break; - } + else + switch (DataDict->BasicType) + { + case EDSLIB_BASICTYPE_CONTAINER: + case EDSLIB_BASICTYPE_COMPONENT: + { + Result = EdsLib_DataTypeDB_FindContainerMember_Impl(GD, + DataDict, + &ByteOffset, + EdsLib_OffsetCompareBytes, + CompInfo); + break; + } + case EDSLIB_BASICTYPE_ARRAY: + { + Result = EdsLib_DataTypeDB_FindArrayMember_Impl(GD, + DataDict, + &ByteOffset, + EdsLib_GetArrayIdxFromBytes, + CompInfo); + break; + } + default: + Result = EDSLIB_INVALID_SIZE_OR_TYPE; + break; + } return Result; } @@ -326,11 +336,14 @@ int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_GetMemberByPackedOffset(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint32_t BitOffset, EdsLib_DataTypeDB_EntityInfo_t *CompInfo) +int32_t EdsLib_DataTypeDB_GetMemberByPackedOffset(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint32_t BitOffset, + EdsLib_DataTypeDB_EntityInfo_t *CompInfo) { const EdsLib_DataTypeDB_Entry_t *DataDict; - EdsLib_DatabaseRef_t TempRef; - int32_t Result; + EdsLib_DatabaseRef_t TempRef; + int32_t Result; memset(CompInfo, 0, sizeof(*CompInfo)); EdsLib_Decode_StructId(&TempRef, EdsId); @@ -351,23 +364,32 @@ int32_t EdsLib_DataTypeDB_GetMemberByPackedOffset(const EdsLib_DatabaseObject_t } Result = EDSLIB_SUCCESS; } - else switch(DataDict->BasicType) - { - case EDSLIB_BASICTYPE_CONTAINER: - case EDSLIB_BASICTYPE_COMPONENT: - { - Result = EdsLib_DataTypeDB_FindContainerMember_Impl(GD, DataDict, &BitOffset, EdsLib_OffsetCompareBits, CompInfo); - break; - } - case EDSLIB_BASICTYPE_ARRAY: - { - Result = EdsLib_DataTypeDB_FindArrayMember_Impl(GD, DataDict, &BitOffset, EdsLib_GetArrayIdxFromBits, CompInfo); - break; - } - default: - Result = EDSLIB_INVALID_SIZE_OR_TYPE; - break; - } + else + switch (DataDict->BasicType) + { + case EDSLIB_BASICTYPE_CONTAINER: + case EDSLIB_BASICTYPE_COMPONENT: + { + Result = EdsLib_DataTypeDB_FindContainerMember_Impl(GD, + DataDict, + &BitOffset, + EdsLib_OffsetCompareBits, + CompInfo); + break; + } + case EDSLIB_BASICTYPE_ARRAY: + { + Result = EdsLib_DataTypeDB_FindArrayMember_Impl(GD, + DataDict, + &BitOffset, + EdsLib_GetArrayIdxFromBits, + CompInfo); + break; + } + default: + Result = EDSLIB_INVALID_SIZE_OR_TYPE; + break; + } return Result; } @@ -378,10 +400,13 @@ int32_t EdsLib_DataTypeDB_GetMemberByPackedOffset(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t DerivId, EdsLib_Id_t *DerivedEdsId) +int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t DerivId, + EdsLib_Id_t *DerivedEdsId) { const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - EdsLib_DatabaseRef_t TempRef; + EdsLib_DatabaseRef_t TempRef; EdsLib_Decode_StructId(&TempRef, EdsId); DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &TempRef); @@ -407,19 +432,21 @@ int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t ConstraintIdx, EdsLib_DataTypeDB_EntityInfo_t *MemberInfo) +int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t ConstraintIdx, + EdsLib_DataTypeDB_EntityInfo_t *MemberInfo) { - EdsLib_DatabaseRef_t ParentObjRef; - const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - const EdsLib_ConstraintEntity_t *ConstraintEntityPtr; + EdsLib_DatabaseRef_t ParentObjRef; + const EdsLib_DataTypeDB_Entry_t *DataDictPtr; + const EdsLib_ConstraintEntity_t *ConstraintEntityPtr; const EdsLib_IdentityCheckSequence_t *DerivativeCheck; memset(MemberInfo, 0, sizeof(*MemberInfo)); EdsLib_Decode_StructId(&ParentObjRef, EdsId); DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &ParentObjRef); - if (DataDictPtr == NULL || - DataDictPtr->BasicType != EDSLIB_BASICTYPE_CONTAINER || - DataDictPtr->Detail.Container == NULL) + if (DataDictPtr == NULL || DataDictPtr->BasicType != EDSLIB_BASICTYPE_CONTAINER + || DataDictPtr->Detail.Container == NULL) { return EDSLIB_FAILURE; } @@ -432,14 +459,14 @@ int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, } ConstraintEntityPtr = &DerivativeCheck->ConstraintEntityList[ConstraintIdx]; - DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &ConstraintEntityPtr->RefObj); + DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &ConstraintEntityPtr->RefObj); if (DataDictPtr == NULL) { return EDSLIB_FAILURE; } - MemberInfo->EdsId = EdsLib_Encode_StructId(&ConstraintEntityPtr->RefObj); - MemberInfo->Offset = ConstraintEntityPtr->Offset; + MemberInfo->EdsId = EdsLib_Encode_StructId(&ConstraintEntityPtr->RefObj); + MemberInfo->Offset = ConstraintEntityPtr->Offset; MemberInfo->MaxSize = DataDictPtr->SizeInfo; return EDSLIB_SUCCESS; @@ -451,13 +478,15 @@ int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_DataTypeDB_DerivedTypeInfo_t *DerivInfo) +int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_DataTypeDB_DerivedTypeInfo_t *DerivInfo) { - const EdsLib_DataTypeDB_Entry_t *DataDictPtr; + const EdsLib_DataTypeDB_Entry_t *DataDictPtr; const EdsLib_IdentityCheckSequence_t *DerivativeCheck; - EdsLib_DatabaseRef_t TempRef; + EdsLib_DatabaseRef_t TempRef; - memset(DerivInfo,0,sizeof(*DerivInfo)); + memset(DerivInfo, 0, sizeof(*DerivInfo)); EdsLib_Decode_StructId(&TempRef, EdsId); DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &TempRef); @@ -466,8 +495,7 @@ int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, EdsL return EDSLIB_FAILURE; } - if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_CONTAINER && - DataDictPtr->Detail.Container != NULL) + if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_CONTAINER && DataDictPtr->Detail.Container != NULL) { DerivInfo->NumDerivatives = DataDictPtr->Detail.Container->DerivativeListSize; if (DataDictPtr->Detail.Container->DerivativeListSize > 0) @@ -499,22 +527,25 @@ int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, EdsL * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t BaseId, - EdsLib_Id_t DerivedId, EdsLib_ConstraintCallback_t Callback, void *CbArg) +int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t BaseId, + EdsLib_Id_t DerivedId, + EdsLib_ConstraintCallback_t Callback, + void *CbArg) { - EdsLib_DataTypeDB_EntityInfo_t BaseInfo; + EdsLib_DataTypeDB_EntityInfo_t BaseInfo; EdsLib_ConstraintIterator_ControlBlock_t CtlBlock; - EdsLib_DatabaseRef_t BaseRef; - uint32_t NumDerivs = 0; - int32_t Status = EDSLIB_FAILURE; + EdsLib_DatabaseRef_t BaseRef; + uint32_t NumDerivs = 0; + int32_t Status = EDSLIB_FAILURE; memset(&CtlBlock, 0, sizeof(CtlBlock)); CtlBlock.UserCallback = Callback; - CtlBlock.CbArg = CbArg; + CtlBlock.CbArg = CbArg; memset(&BaseInfo, 0, sizeof(BaseInfo)); BaseInfo.EdsId = DerivedId; - while(BaseInfo.EdsId != BaseId) + while (BaseInfo.EdsId != BaseId) { EdsLib_Decode_StructId(&CtlBlock.TargetRef, BaseInfo.EdsId); @@ -594,17 +625,21 @@ int32_t EdsLib_DataTypeDB_BaseCheck(const EdsLib_DatabaseObject_t *GD, EdsLib_Id * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, const EdsLib_SizeInfo_t *MaxSize, EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + const EdsLib_SizeInfo_t *MaxSize, + EdsLib_SizeInfo_t *ProcessedSize) { EdsLib_DataTypePack_State_t PackState; - int32_t Status; + int32_t Status; memset(&PackState, 0, sizeof(PackState)); - PackState.Common.HandleMember = EdsLib_DataTypePack_HandleMember; + PackState.Common.HandleMember = EdsLib_DataTypePack_HandleMember; PackState.Common.NativeBufferPtr = SourceBuffer; - PackState.Common.MaxSize = *MaxSize; + PackState.Common.MaxSize = *MaxSize; EdsLib_Decode_StructId(&PackState.Common.RefObj, *EdsId); PackState.PackedDstPtr = DestBuffer; PackState.NativeSrcPtr = SourceBuffer; @@ -624,7 +659,7 @@ int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t if (ProcessedSize != NULL) { - ProcessedSize->Bits = PackState.Common.LastActualTailBitPos; + ProcessedSize->Bits = PackState.Common.LastActualTailBitPos; ProcessedSize->Bytes = PackState.Common.LastNominalTail.Bytes; } @@ -637,15 +672,20 @@ int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxPackedBitSize, uint32_t SourceByteSize, uint32_t StartingBit) +int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxPackedBitSize, + uint32_t SourceByteSize, + uint32_t StartingBit) { - EdsLib_SizeInfo_t MaxSize; - EdsLib_SizeInfo_t ProcessedSize; + EdsLib_SizeInfo_t MaxSize; + EdsLib_SizeInfo_t ProcessedSize; EdsLib_DataTypeDB_EntityInfo_t EntityInfo; - int32_t Status; + int32_t Status; - MaxSize.Bits = MaxPackedBitSize; + MaxSize.Bits = MaxPackedBitSize; MaxSize.Bytes = SourceByteSize; memset(&ProcessedSize, 0, sizeof(ProcessedSize)); @@ -675,8 +715,8 @@ int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, E if (Status == EDSLIB_SUCCESS) { - Status = EdsLib_DataTypeDB_PackPartialObjectVarSize(GD, EdsId, - DestBuffer, SourceBuffer, &MaxSize, &ProcessedSize); + Status = + EdsLib_DataTypeDB_PackPartialObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, &MaxSize, &ProcessedSize); } return Status; @@ -688,16 +728,20 @@ int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, E * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_FinalizePackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const void *NativeBuffer, void *PackedBuffer, const EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_FinalizePackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *NativeBuffer, + void *PackedBuffer, + const EdsLib_SizeInfo_t *ProcessedSize) { EdsLib_PackedPostProc_ControlBlock_t CtlBlock; memset(&CtlBlock, 0, sizeof(CtlBlock)); - CtlBlock.Pack.Common.HandleMember = EdsLib_PackedObject_PostProc_Callback; + CtlBlock.Pack.Common.HandleMember = EdsLib_PackedObject_PostProc_Callback; CtlBlock.Pack.Common.NativeBufferPtr = NativeBuffer; - CtlBlock.Pack.Common.MaxSize = *ProcessedSize; - CtlBlock.Pack.Common.MaxPasses = 1; + CtlBlock.Pack.Common.MaxSize = *ProcessedSize; + CtlBlock.Pack.Common.MaxPasses = 1; EdsLib_Decode_StructId(&CtlBlock.Pack.Common.RefObj, EdsId); CtlBlock.Pack.NativeSrcPtr = NativeBuffer; @@ -721,7 +765,7 @@ int32_t EdsLib_DataTypeDB_FinalizePackedObjectVarSize(const EdsLib_DatabaseObjec int32_t EdsLib_DataTypeDB_FinalizePackedObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *PackedData) { EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - int32_t Status; + int32_t Status; /* * This API gets the size from the DB, it is not passed via arguments. Thus @@ -747,15 +791,19 @@ int32_t EdsLib_DataTypeDB_FinalizePackedObject(const EdsLib_DatabaseObject_t *GD * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, EdsLib_SizeInfo_t *PackedSize) +int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + EdsLib_SizeInfo_t *PackedSize) { - int32_t Status; + int32_t Status; EdsLib_SizeInfo_t ProcessedSize; memset(&ProcessedSize, 0, sizeof(ProcessedSize)); - Status = EdsLib_DataTypeDB_PackPartialObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, PackedSize, &ProcessedSize); + Status = + EdsLib_DataTypeDB_PackPartialObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, PackedSize, &ProcessedSize); if (Status == EDSLIB_SUCCESS) { Status = EdsLib_DataTypeDB_FinalizePackedObjectVarSize(GD, *EdsId, SourceBuffer, DestBuffer, &ProcessedSize); @@ -774,14 +822,18 @@ int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxPackedBitSize, uint32_t SourceByteSize) +int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxPackedBitSize, + uint32_t SourceByteSize) { - int32_t Status; - EdsLib_SizeInfo_t TotalPackedSize; + int32_t Status; + EdsLib_SizeInfo_t TotalPackedSize; EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - TotalPackedSize.Bits = MaxPackedBitSize; + TotalPackedSize.Bits = MaxPackedBitSize; TotalPackedSize.Bytes = SourceByteSize; Status = EdsLib_DataTypeDB_PackCompleteObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, &TotalPackedSize); @@ -800,7 +852,6 @@ int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, } } - return Status; } @@ -810,17 +861,21 @@ int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, const EdsLib_SizeInfo_t *MaxSize, EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + const EdsLib_SizeInfo_t *MaxSize, + EdsLib_SizeInfo_t *ProcessedSize) { EdsLib_DataTypeUnpack_State_t UnpackState; - int32_t Status; + int32_t Status; memset(&UnpackState, 0, sizeof(UnpackState)); - UnpackState.Common.HandleMember = EdsLib_DataTypeUnpack_HandleMember; + UnpackState.Common.HandleMember = EdsLib_DataTypeUnpack_HandleMember; UnpackState.Common.NativeBufferPtr = DestBuffer; - UnpackState.Common.MaxSize = *MaxSize; + UnpackState.Common.MaxSize = *MaxSize; EdsLib_Decode_StructId(&UnpackState.Common.RefObj, *EdsId); UnpackState.NativeDstPtr = DestBuffer; @@ -841,7 +896,7 @@ int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject if (ProcessedSize != NULL) { - ProcessedSize->Bits = UnpackState.Common.LastActualTailBitPos; + ProcessedSize->Bits = UnpackState.Common.LastActualTailBitPos; ProcessedSize->Bytes = UnpackState.Common.LastNominalTail.Bytes; } @@ -854,15 +909,20 @@ int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxNativeByteSize, uint32_t SourceBitSize, uint32_t StartingByte) +int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxNativeByteSize, + uint32_t SourceBitSize, + uint32_t StartingByte) { - EdsLib_SizeInfo_t MaxSize; - EdsLib_SizeInfo_t ProcessedSize; + EdsLib_SizeInfo_t MaxSize; + EdsLib_SizeInfo_t ProcessedSize; EdsLib_DataTypeDB_EntityInfo_t EntityInfo; - int32_t Status; + int32_t Status; - MaxSize.Bits = SourceBitSize; + MaxSize.Bits = SourceBitSize; MaxSize.Bytes = MaxNativeByteSize; memset(&ProcessedSize, 0, sizeof(ProcessedSize)); @@ -892,35 +952,40 @@ int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, if (Status == EDSLIB_SUCCESS) { - Status = EdsLib_DataTypeDB_UnpackPartialObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, &MaxSize, &ProcessedSize); + Status = + EdsLib_DataTypeDB_UnpackPartialObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, &MaxSize, &ProcessedSize); } return Status; } - /*---------------------------------------------------------------- * * EdsLib public API function * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *NativeBuffer, const void *PackedBuffer, uint32_t RecomputeFields, const EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *NativeBuffer, + const void *PackedBuffer, + uint32_t RecomputeFields, + const EdsLib_SizeInfo_t *ProcessedSize) { EdsLib_NativePostProc_ControlBlock_t CtlBlock; memset(&CtlBlock, 0, sizeof(CtlBlock)); - CtlBlock.Unpack.Common.HandleMember = EdsLib_NativeObject_PostProc_Callback; + CtlBlock.Unpack.Common.HandleMember = EdsLib_NativeObject_PostProc_Callback; CtlBlock.Unpack.Common.NativeBufferPtr = NativeBuffer; - CtlBlock.Unpack.Common.MaxSize = *ProcessedSize; - CtlBlock.Unpack.Common.MaxPasses = 1; + CtlBlock.Unpack.Common.MaxSize = *ProcessedSize; + CtlBlock.Unpack.Common.MaxPasses = 1; EdsLib_Decode_StructId(&CtlBlock.Unpack.Common.RefObj, EdsId); CtlBlock.Unpack.NativeDstPtr = NativeBuffer; CtlBlock.Unpack.PackedSrcPtr = PackedBuffer; - CtlBlock.RecomputeFields = RecomputeFields; - CtlBlock.CheckFields = EDSLIB_DATATYPEDB_RECOMPUTE_ALL; + CtlBlock.RecomputeFields = RecomputeFields; + CtlBlock.CheckFields = EDSLIB_DATATYPEDB_RECOMPUTE_ALL; EdsLib_DataTypePackUnpack_Impl(GD, &CtlBlock.Unpack.Common); @@ -933,11 +998,14 @@ int32_t EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(const EdsLib_DatabaseObjec * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - void *UnpackedObj, const void *PackedObj, uint32_t RecomputeFields) +int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *UnpackedObj, + const void *PackedObj, + uint32_t RecomputeFields) { EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - int32_t Status; + int32_t Status; /* * This API gets the size from the DB, it is not passed via arguments. Thus @@ -951,7 +1019,12 @@ int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD } else { - Status = EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(GD, EdsId, UnpackedObj, PackedObj, RecomputeFields, &TypeInfo.Size); + Status = EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(GD, + EdsId, + UnpackedObj, + PackedObj, + RecomputeFields, + &TypeInfo.Size); } return Status; @@ -963,13 +1036,14 @@ int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -static void EdsLib_NativeObject_ConstraintInitCallback(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, EdsLib_GenericValueBuffer_t *ConstraintValue, void *Arg) +static void EdsLib_NativeObject_ConstraintInitCallback(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, + EdsLib_GenericValueBuffer_t *ConstraintValue, + void *Arg) { uint8_t *DataBuf = Arg; - EdsLib_DataTypeDB_StoreValue(GD, MemberInfo->EdsId, - &DataBuf[MemberInfo->Offset.Bytes], - ConstraintValue); + EdsLib_DataTypeDB_StoreValue(GD, MemberInfo->EdsId, &DataBuf[MemberInfo->Offset.Bytes], ConstraintValue); } /*---------------------------------------------------------------- @@ -978,23 +1052,24 @@ static void EdsLib_NativeObject_ConstraintInitCallback(const EdsLib_DatabaseObje * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *UnpackedObj) +int32_t +EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *UnpackedObj) { EdsLib_NativePostProc_ControlBlock_t CtlBlock; - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - int32_t Status; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + int32_t Status; memset(&CtlBlock, 0, sizeof(CtlBlock)); EdsLib_DataTypeDB_GetTypeInfo(GD, EdsId, &TypeInfo); - CtlBlock.Unpack.Common.HandleMember = EdsLib_NativeObject_PostProc_Callback; + CtlBlock.Unpack.Common.HandleMember = EdsLib_NativeObject_PostProc_Callback; CtlBlock.Unpack.Common.NativeBufferPtr = UnpackedObj; - CtlBlock.Unpack.Common.MaxSize = TypeInfo.Size; - CtlBlock.Unpack.Common.MaxPasses = 1; + CtlBlock.Unpack.Common.MaxSize = TypeInfo.Size; + CtlBlock.Unpack.Common.MaxPasses = 1; EdsLib_Decode_StructId(&CtlBlock.Unpack.Common.RefObj, EdsId); CtlBlock.Unpack.NativeDstPtr = UnpackedObj; - CtlBlock.RecomputeFields = EDSLIB_DATATYPEDB_RECOMPUTE_FIXEDVALUE | EDSLIB_DATATYPEDB_RECOMPUTE_LENGTH; + CtlBlock.RecomputeFields = EDSLIB_DATATYPEDB_RECOMPUTE_FIXEDVALUE | EDSLIB_DATATYPEDB_RECOMPUTE_LENGTH; EdsLib_DataTypePackUnpack_Impl(GD, &CtlBlock.Unpack.Common); @@ -1002,8 +1077,11 @@ int32_t EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t * if (Status == EDSLIB_SUCCESS) { - Status = EdsLib_DataTypeDB_ConstraintIterator(GD, EDSLIB_ID_INVALID, EdsId, - EdsLib_NativeObject_ConstraintInitCallback, UnpackedObj); + Status = EdsLib_DataTypeDB_ConstraintIterator(GD, + EDSLIB_ID_INVALID, + EdsId, + EdsLib_NativeObject_ConstraintInitCallback, + UnpackedObj); } return Status; @@ -1015,23 +1093,31 @@ int32_t EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t * * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, uint32_t MaxNativeByteSize, uint32_t SourceBitSize) +int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxNativeByteSize, + uint32_t SourceBitSize) { - int32_t Status; + int32_t Status; EdsLib_SizeInfo_t MaxSize; EdsLib_SizeInfo_t ProcessedSize; - MaxSize.Bits = SourceBitSize; + MaxSize.Bits = SourceBitSize; MaxSize.Bytes = MaxNativeByteSize; memset(&ProcessedSize, 0, sizeof(ProcessedSize)); - Status = EdsLib_DataTypeDB_UnpackPartialObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, - &MaxSize, &ProcessedSize); + Status = + EdsLib_DataTypeDB_UnpackPartialObjectVarSize(GD, EdsId, DestBuffer, SourceBuffer, &MaxSize, &ProcessedSize); if (Status == EDSLIB_SUCCESS) { - Status = EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(GD, *EdsId, DestBuffer, - SourceBuffer, EDSLIB_DATATYPEDB_RECOMPUTE_NONE, &ProcessedSize); + Status = EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(GD, + *EdsId, + DestBuffer, + SourceBuffer, + EDSLIB_DATATYPEDB_RECOMPUTE_NONE, + &ProcessedSize); } return Status; @@ -1043,11 +1129,14 @@ int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_GenericValueBuffer_t *DestBuffer, const void *SrcPtr) +int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_GenericValueBuffer_t *DestBuffer, + const void *SrcPtr) { - EdsLib_DatabaseRef_t TempRef; + EdsLib_DatabaseRef_t TempRef; const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - EdsLib_ConstPtr_t Src = { .Ptr = SrcPtr }; + EdsLib_ConstPtr_t Src = { .Ptr = SrcPtr }; DestBuffer->ValueType = EDSLIB_BASICTYPE_NONE; EdsLib_Decode_StructId(&TempRef, EdsId); @@ -1070,11 +1159,14 @@ int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, EdsLib_GenericValueBuffer_t *SrcBuffer) +int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *DestPtr, + EdsLib_GenericValueBuffer_t *SrcBuffer) { - EdsLib_DatabaseRef_t TempRef; + EdsLib_DatabaseRef_t TempRef; const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - EdsLib_Ptr_t Dest = { .Ptr = DestPtr }; + EdsLib_Ptr_t Dest = { .Ptr = DestPtr }; EdsLib_Decode_StructId(&TempRef, EdsId); DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &TempRef); @@ -1096,12 +1188,15 @@ int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, EdsLib_I * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const void *BufferPtr, - size_t BufferSize, EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo) +int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *BufferPtr, + size_t BufferSize, + EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo) { const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - EdsLib_DatabaseRef_t ActualRef; - int32_t Status; + EdsLib_DatabaseRef_t ActualRef; + int32_t Status; EdsLib_Decode_StructId(&ActualRef, EdsId); DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &ActualRef); @@ -1112,8 +1207,12 @@ int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t * } else { - Status = EdsLib_DataTypeIdentifyBuffer_Impl(GD, DataDictPtr, BufferPtr, BufferSize, - &DerivObjInfo->DerivativeTableIndex, &ActualRef); + Status = EdsLib_DataTypeIdentifyBuffer_Impl(GD, + DataDictPtr, + BufferPtr, + BufferSize, + &DerivObjInfo->DerivativeTableIndex, + &ActualRef); } if (Status == EDSLIB_SUCCESS) @@ -1135,12 +1234,14 @@ int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t * * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const void *BufferPtr, - EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo) +int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *BufferPtr, + EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo) { const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - EdsLib_DatabaseRef_t ActualRef; - int32_t Status; + EdsLib_DatabaseRef_t ActualRef; + int32_t Status; EdsLib_Decode_StructId(&ActualRef, EdsId); DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &ActualRef); @@ -1151,8 +1252,12 @@ int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, EdsL } else { - Status = EdsLib_DataTypeIdentifyBuffer_Impl(GD, DataDictPtr, BufferPtr, DataDictPtr->SizeInfo.Bytes, - &DerivObjInfo->DerivativeTableIndex, &ActualRef); + Status = EdsLib_DataTypeIdentifyBuffer_Impl(GD, + DataDictPtr, + BufferPtr, + DataDictPtr->SizeInfo.Bytes, + &DerivObjInfo->DerivativeTableIndex, + &ActualRef); } if (Status == EDSLIB_SUCCESS) diff --git a/edslib/fsw/src/edslib_datatypedb_constraints.c b/edslib/fsw/src/edslib_datatypedb_constraints.c index 44c809c..052b672 100644 --- a/edslib/fsw/src/edslib_datatypedb_constraints.c +++ b/edslib/fsw/src/edslib_datatypedb_constraints.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb_constraints.c * \ingroup fsw @@ -48,20 +47,21 @@ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_ConstraintIterator_Impl(const EdsLib_DatabaseObject_t *GD, - EdsLib_ConstraintIterator_ControlBlock_t *CtlBlock, const EdsLib_DatabaseRef_t *BaseRef) +int32_t EdsLib_DataTypeDB_ConstraintIterator_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_ConstraintIterator_ControlBlock_t *CtlBlock, + const EdsLib_DatabaseRef_t *BaseRef) { - const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - const EdsLib_ContainerDescriptor_t *DerivDescPtr; + const EdsLib_DataTypeDB_Entry_t *DataDictPtr; + const EdsLib_ContainerDescriptor_t *DerivDescPtr; const EdsLib_IdentityCheckSequence_t *DerivativeCheck; - const EdsLib_IdentSequenceEntry_t *IdentSequencePtr; - const EdsLib_DerivativeEntry_t *DerivEntryPtr; - const EdsLib_ValueEntry_t *SelectedEntry; - const EdsLib_ConstraintEntity_t *SelectedLocation; - uint16_t DerivIdx; - int32_t Status; - - SelectedEntry = NULL; + const EdsLib_IdentSequenceEntry_t *IdentSequencePtr; + const EdsLib_DerivativeEntry_t *DerivEntryPtr; + const EdsLib_ValueEntry_t *SelectedEntry; + const EdsLib_ConstraintEntity_t *SelectedLocation; + uint16_t DerivIdx; + int32_t Status; + + SelectedEntry = NULL; SelectedLocation = NULL; DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, BaseRef); @@ -85,9 +85,9 @@ int32_t EdsLib_DataTypeDB_ConstraintIterator_Impl(const EdsLib_DatabaseObject_t return EDSLIB_NO_MATCHING_VALUE; } - Status = EDSLIB_NO_MATCHING_VALUE; + Status = EDSLIB_NO_MATCHING_VALUE; DerivEntryPtr = DerivDescPtr->DerivativeList; - for (DerivIdx=0; DerivIdx < DerivDescPtr->DerivativeListSize; ++DerivIdx) + for (DerivIdx = 0; DerivIdx < DerivDescPtr->DerivativeListSize; ++DerivIdx) { if (EdsLib_DatabaseRef_IsEqual(&DerivEntryPtr->RefObj, &CtlBlock->TargetRef)) { @@ -114,7 +114,7 @@ int32_t EdsLib_DataTypeDB_ConstraintIterator_Impl(const EdsLib_DatabaseObject_t * start at the result (the derivative) and follow the ParentOperation * links, which reveal the conditions required on the base type. */ - IdentSequencePtr = &DerivativeCheck->SequenceList[DerivEntryPtr->IdentSeqIdx]; + IdentSequencePtr = &DerivativeCheck->SequenceList[DerivEntryPtr->IdentSeqIdx]; CtlBlock->TempConstraintValue.ValueType = EDSLIB_BASICTYPE_NONE; while (IdentSequencePtr->EntryType != EDSLIB_IDENT_SEQUENCE_INVALID) { @@ -133,34 +133,39 @@ int32_t EdsLib_DataTypeDB_ConstraintIterator_Impl(const EdsLib_DatabaseObject_t if (SelectedEntry->BasicType == EDSLIB_BASICTYPE_SIGNED_INT) { CtlBlock->TempConstraintValue.Value.SignedInteger = SelectedEntry->RefValue.Single.SignedInt; - CtlBlock->TempConstraintValue.ValueType = SelectedEntry->BasicType; + CtlBlock->TempConstraintValue.ValueType = SelectedEntry->BasicType; } else if (SelectedEntry->BasicType == EDSLIB_BASICTYPE_UNSIGNED_INT) { - CtlBlock->TempConstraintValue.Value.UnsignedInteger = SelectedEntry->RefValue.Single.UnsignedInt; + CtlBlock->TempConstraintValue.Value.UnsignedInteger = + SelectedEntry->RefValue.Single.UnsignedInt; CtlBlock->TempConstraintValue.ValueType = SelectedEntry->BasicType; } else if (SelectedEntry->BasicType == EDSLIB_BASICTYPE_FLOAT) { CtlBlock->TempConstraintValue.Value.FloatingPoint = SelectedEntry->RefValue.Single.FloatingPt; - CtlBlock->TempConstraintValue.ValueType = SelectedEntry->BasicType; + CtlBlock->TempConstraintValue.ValueType = SelectedEntry->BasicType; } else if (SelectedEntry->BasicType == EDSLIB_BASICTYPE_BINARY) { - strncpy(CtlBlock->TempConstraintValue.Value.StringData, SelectedEntry->RefValue.Single.String, + strncpy(CtlBlock->TempConstraintValue.Value.StringData, + SelectedEntry->RefValue.Single.String, sizeof(CtlBlock->TempConstraintValue.Value.StringData)); CtlBlock->TempConstraintValue.ValueType = SelectedEntry->BasicType; } } if (CtlBlock->TempConstraintValue.ValueType != EDSLIB_BASICTYPE_NONE) { - CtlBlock->TempMemberInfo.EdsId = EdsLib_Encode_StructId(&SelectedLocation->RefObj); - CtlBlock->TempMemberInfo.Offset = SelectedLocation->Offset; + CtlBlock->TempMemberInfo.EdsId = EdsLib_Encode_StructId(&SelectedLocation->RefObj); + CtlBlock->TempMemberInfo.Offset = SelectedLocation->Offset; CtlBlock->TempMemberInfo.MaxSize = DataDictPtr->SizeInfo; - CtlBlock->UserCallback(GD, &CtlBlock->TempMemberInfo, &CtlBlock->TempConstraintValue, CtlBlock->CbArg); + CtlBlock->UserCallback(GD, + &CtlBlock->TempMemberInfo, + &CtlBlock->TempConstraintValue, + CtlBlock->CbArg); } CtlBlock->TempConstraintValue.ValueType = EDSLIB_BASICTYPE_NONE; - SelectedEntry = NULL; + SelectedEntry = NULL; } } IdentSequencePtr = &DerivativeCheck->SequenceList[IdentSequencePtr->ParentOperation]; @@ -259,7 +264,7 @@ int8_t EdsLib_DataType_CompareGeneric(const EdsLib_GenericValueBuffer_t *Value1, /* ensure the data is consistently typed - value2 will be coerced into whatever type value1 is */ EdsLib_DataTypeConvert(Value2, Value1->ValueType); - switch(Value1->ValueType) + switch (Value1->ValueType) { case EDSLIB_BASICTYPE_UNSIGNED_INT: Result = EdsLib_DataType_CompareUnsignedInt(Value1->Value.UnsignedInteger, Value2->Value.UnsignedInteger); @@ -287,10 +292,12 @@ int8_t EdsLib_DataType_CompareGeneric(const EdsLib_GenericValueBuffer_t *Value1, * Load a reference value from the DB * *-----------------------------------------------------------------*/ -void EdsLib_DataType_IdentLoadReference(EdsLib_GenericValueBuffer_t *ValuePtr, EdsLib_BasicType_t RefType, const EdsLib_SingleValue_t *RefValPtr) +void EdsLib_DataType_IdentLoadReference(EdsLib_GenericValueBuffer_t *ValuePtr, + EdsLib_BasicType_t RefType, + const EdsLib_SingleValue_t *RefValPtr) { ValuePtr->ValueType = RefType; - switch(RefType) + switch (RefType) { case EDSLIB_BASICTYPE_UNSIGNED_INT: ValuePtr->Value.UnsignedInteger = RefValPtr->UnsignedInt; @@ -316,7 +323,8 @@ void EdsLib_DataType_IdentLoadReference(EdsLib_GenericValueBuffer_t *ValuePtr, E * Implement single value check * *-----------------------------------------------------------------*/ -int8_t EdsLib_DataType_IdentValueCheckSingle(const EdsLib_ValueEntry_t *SelectedEntry, const EdsLib_GenericValueBuffer_t *ValuePtr) +int8_t EdsLib_DataType_IdentValueCheckSingle(const EdsLib_ValueEntry_t *SelectedEntry, + const EdsLib_GenericValueBuffer_t *ValuePtr) { EdsLib_GenericValueBuffer_t RefValue; @@ -331,16 +339,17 @@ int8_t EdsLib_DataType_IdentValueCheckSingle(const EdsLib_ValueEntry_t *Selected * Implement range value check * *-----------------------------------------------------------------*/ -int8_t EdsLib_DataType_IdentValueCheckRange(const EdsLib_ValueEntry_t *SelectedEntry, const EdsLib_GenericValueBuffer_t *ValuePtr) +int8_t EdsLib_DataType_IdentValueCheckRange(const EdsLib_ValueEntry_t *SelectedEntry, + const EdsLib_GenericValueBuffer_t *ValuePtr) { EdsLib_GenericValueBuffer_t RefTemp; - int8_t MinResult; - int8_t MaxResult; - int8_t MinReq; - int8_t MaxReq; + int8_t MinResult; + int8_t MaxResult; + int8_t MinReq; + int8_t MaxReq; /* load the minimum, if applicable */ - switch(SelectedEntry->InclusionStyle) + switch (SelectedEntry->InclusionStyle) { case EDSLIB_VALUE_INCLUSIONSTYLE_NONE: MinResult = -1; @@ -362,7 +371,7 @@ int8_t EdsLib_DataType_IdentValueCheckRange(const EdsLib_ValueEntry_t *SelectedE } /* load the maximum, if applicable */ - switch(SelectedEntry->InclusionStyle) + switch (SelectedEntry->InclusionStyle) { case EDSLIB_VALUE_INCLUSIONSTYLE_NONE: MaxResult = 1; @@ -383,7 +392,7 @@ int8_t EdsLib_DataType_IdentValueCheckRange(const EdsLib_ValueEntry_t *SelectedE break; } - switch(SelectedEntry->InclusionStyle) + switch (SelectedEntry->InclusionStyle) { case EDSLIB_VALUE_INCLUSIONSTYLE_INCLUSIVE_MIN_INCLUSIVE_MAX: case EDSLIB_VALUE_INCLUSIONSTYLE_INCLUSIVE_MIN_EXCLUSIVE_MAX: @@ -396,7 +405,7 @@ int8_t EdsLib_DataType_IdentValueCheckRange(const EdsLib_ValueEntry_t *SelectedE break; } - switch(SelectedEntry->InclusionStyle) + switch (SelectedEntry->InclusionStyle) { case EDSLIB_VALUE_INCLUSIONSTYLE_INCLUSIVE_MIN_INCLUSIVE_MAX: case EDSLIB_VALUE_INCLUSIONSTYLE_EXCLUSIVE_MIN_INCLUSIVE_MAX: @@ -429,7 +438,8 @@ int8_t EdsLib_DataType_IdentValueCheckRange(const EdsLib_ValueEntry_t *SelectedE * Implement value check supporting both single and range * *-----------------------------------------------------------------*/ -int8_t EdsLib_DataType_IdentValueCheck(const EdsLib_ValueEntry_t *SelectedEntry, const EdsLib_GenericValueBuffer_t *ValuePtr) +int8_t EdsLib_DataType_IdentValueCheck(const EdsLib_ValueEntry_t *SelectedEntry, + const EdsLib_GenericValueBuffer_t *ValuePtr) { int8_t Result; @@ -455,25 +465,28 @@ int8_t EdsLib_DataType_IdentValueCheck(const EdsLib_ValueEntry_t *SelectedEntry, } return Result; - } +} - /*---------------------------------------------------------------- +/*---------------------------------------------------------------- * * EdsLib internal function * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const EdsLib_IdentSequenceEntry_t *EdsLib_DataTypeExecuteConstraintSequence_Impl(const EdsLib_DatabaseObject_t *GD, - const EdsLib_IdentityCheckSequence_t *CheckSequence, const void *Buffer, size_t MaxOffset) +const EdsLib_IdentSequenceEntry_t * +EdsLib_DataTypeExecuteConstraintSequence_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_IdentityCheckSequence_t *CheckSequence, + const void *Buffer, + size_t MaxOffset) { - const EdsLib_ValueEntry_t *SelectedValue; - const EdsLib_ConstraintEntity_t *SelectedConstraint; + const EdsLib_ValueEntry_t *SelectedValue; + const EdsLib_ConstraintEntity_t *SelectedConstraint; const EdsLib_IdentSequenceEntry_t *IdentSequencePtr; - const EdsLib_DataTypeDB_Entry_t *DataTypePtr; - EdsLib_ConstPtr_t SrcPtr; - EdsLib_GenericValueBuffer_t ValueBuff; - int8_t CompareResult; - uint16_t CurrSeqPos; + const EdsLib_DataTypeDB_Entry_t *DataTypePtr; + EdsLib_ConstPtr_t SrcPtr; + EdsLib_GenericValueBuffer_t ValueBuff; + int8_t CompareResult; + uint16_t CurrSeqPos; CurrSeqPos = CheckSequence->SequenceEntryIdx; do @@ -493,7 +506,7 @@ const EdsLib_IdentSequenceEntry_t *EdsLib_DataTypeExecuteConstraintSequence_Impl else if (IdentSequencePtr->EntryType == EDSLIB_IDENT_SEQUENCE_ENTITY_LOCATION) { SelectedConstraint = &CheckSequence->ConstraintEntityList[IdentSequencePtr->Datum]; - DataTypePtr = EdsLib_DataTypeDB_GetEntry(GD, &SelectedConstraint->RefObj); + DataTypePtr = EdsLib_DataTypeDB_GetEntry(GD, &SelectedConstraint->RefObj); if (DataTypePtr != NULL && (SelectedConstraint->Offset.Bytes + DataTypePtr->SizeInfo.Bytes) <= MaxOffset) { SrcPtr.Ptr = (const uint8_t *)Buffer + SelectedConstraint->Offset.Bytes; @@ -540,8 +553,7 @@ const EdsLib_IdentSequenceEntry_t *EdsLib_DataTypeExecuteConstraintSequence_Impl /* a "match" means simply move to the next item */ --CurrSeqPos; } - } - while (true); + } while (true); return IdentSequencePtr; } @@ -552,11 +564,16 @@ const EdsLib_IdentSequenceEntry_t *EdsLib_DataTypeExecuteConstraintSequence_Impl * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeIdentifyBuffer_Impl(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataTypeDB_Entry_t *DataDictPtr, const void *Buffer, size_t MaxOffset, uint16_t *DerivTableIndex, EdsLib_DatabaseRef_t *ActualObj) +int32_t EdsLib_DataTypeIdentifyBuffer_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + const void *Buffer, + size_t MaxOffset, + uint16_t *DerivTableIndex, + EdsLib_DatabaseRef_t *ActualObj) { const EdsLib_ContainerDescriptor_t *DerivedContainerDesc; - const EdsLib_IdentSequenceEntry_t *IdentSequencePtr; - int32_t Status; + const EdsLib_IdentSequenceEntry_t *IdentSequencePtr; + int32_t Status; if (DataDictPtr == NULL || DataDictPtr->BasicType != EDSLIB_BASICTYPE_CONTAINER) { @@ -568,8 +585,8 @@ int32_t EdsLib_DataTypeIdentifyBuffer_Impl(const EdsLib_DatabaseObject_t *GD, co Status = EDSLIB_NO_MATCHING_VALUE; if (DerivedContainerDesc->CheckSequence != NULL) { - IdentSequencePtr = EdsLib_DataTypeExecuteConstraintSequence_Impl(GD, - DerivedContainerDesc->CheckSequence, Buffer, MaxOffset); + IdentSequencePtr = + EdsLib_DataTypeExecuteConstraintSequence_Impl(GD, DerivedContainerDesc->CheckSequence, Buffer, MaxOffset); if (IdentSequencePtr != NULL && IdentSequencePtr->EntryType == EDSLIB_IDENT_SEQUENCE_REFOBJ_RESULT) { diff --git a/edslib/fsw/src/edslib_datatypedb_errorcontrol.c b/edslib/fsw/src/edslib_datatypedb_errorcontrol.c index 924b7cb..facf431 100644 --- a/edslib/fsw/src/edslib_datatypedb_errorcontrol.c +++ b/edslib/fsw/src/edslib_datatypedb_errorcontrol.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb_errorcontrol.c * \ingroup fsw @@ -44,7 +43,7 @@ * Output Reflection: False * XOR Output: 0x0000 */ -#define EDSLIB_CRC16_CCITT_POLY 0x1021 /* x^16 + x^12 + x^5 + 1 */ +#define EDSLIB_CRC16_CCITT_POLY 0x1021 /* x^16 + x^12 + x^5 + 1 */ /* * CRC Algorithm: CRC-8 @@ -54,35 +53,31 @@ * Output Reflection: False * XOR Output: 0x00 */ -#define EDSLIB_CRC8_POLY 0x07 /* x^8 + x^2 + x^1 + 1 */ - +#define EDSLIB_CRC8_POLY 0x07 /* x^8 + x^2 + x^1 + 1 */ typedef uintmax_t (*EdsLib_ErrorControlImpl_t)(const void *Buffer, uint32_t BufferSizeBytes, uint32_t ErrCtlBitPos); static uintmax_t EdsLib_ErrorControlAlgorithm_ZERO(const void *Base, uint32_t Size, uint32_t ErrCtlBitPos); -static uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL(const void *Base, uint32_t Size, uint32_t ErrCtlBitPos); +static uintmax_t +EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL(const void *Base, uint32_t Size, uint32_t ErrCtlBitPos); static uintmax_t EdsLib_ErrorControlAlgorithm_CRC16_CCITT(const void *Base, uint32_t Size, uint32_t ErrCtlBitPos); static uintmax_t EdsLib_ErrorControlAlgorithm_CRC8(const void *Base, uint32_t Size, uint32_t ErrCtlBitPos); static uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM(const void *Base, uint32_t Size, uint32_t ErrCtlBitPos); - -static const EdsLib_ErrorControlImpl_t EDSLIB_ERRCTL_DISPATCH[EdsLib_ErrorControlType_MAX] = -{ - [EdsLib_ErrorControlType_INVALID] = EdsLib_ErrorControlAlgorithm_ZERO, - [EdsLib_ErrorControlType_ALWAYS_ZERO] = EdsLib_ErrorControlAlgorithm_ZERO, - [EdsLib_ErrorControlType_CHECKSUM] = EdsLib_ErrorControlAlgorithm_CHECKSUM, - [EdsLib_ErrorControlType_CHECKSUM_LONGITUDINAL] = EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL, - [EdsLib_ErrorControlType_CRC8] = EdsLib_ErrorControlAlgorithm_CRC8, - [EdsLib_ErrorControlType_CRC16_CCITT] = EdsLib_ErrorControlAlgorithm_CRC16_CCITT, - [EdsLib_ErrorControlType_CRC32] = EdsLib_ErrorControlAlgorithm_ZERO, /* placeholder; not implemented yet */ - [EdsLib_ErrorControlType_CRC32C] = EdsLib_ErrorControlAlgorithm_ZERO /* placeholder; not implemented yet */ +static const EdsLib_ErrorControlImpl_t EDSLIB_ERRCTL_DISPATCH[EdsLib_ErrorControlType_MAX] = { + [EdsLib_ErrorControlType_INVALID] = EdsLib_ErrorControlAlgorithm_ZERO, + [EdsLib_ErrorControlType_ALWAYS_ZERO] = EdsLib_ErrorControlAlgorithm_ZERO, + [EdsLib_ErrorControlType_CHECKSUM] = EdsLib_ErrorControlAlgorithm_CHECKSUM, + [EdsLib_ErrorControlType_CHECKSUM_LONGITUDINAL] = EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL, + [EdsLib_ErrorControlType_CRC8] = EdsLib_ErrorControlAlgorithm_CRC8, + [EdsLib_ErrorControlType_CRC16_CCITT] = EdsLib_ErrorControlAlgorithm_CRC16_CCITT, + [EdsLib_ErrorControlType_CRC32] = EdsLib_ErrorControlAlgorithm_ZERO, /* placeholder; not implemented yet */ + [EdsLib_ErrorControlType_CRC32C] = EdsLib_ErrorControlAlgorithm_ZERO /* placeholder; not implemented yet */ }; - static uint16_t EDSLIB_CRC16_CCITT_TABLE[256]; static uint8_t EDSLIB_CRC8_TABLE[256]; - /*---------------------------------------------------------------- * * EdsLib internal function @@ -107,7 +102,7 @@ void EdsLib_ErrorControl_Initialize(void) for (i = 0; i < 256; ++i) { crc16_shiftreg = i << 8; - crc8_shiftreg = 0; + crc8_shiftreg = 0; for (bit = 0; bit < 8; ++bit) { @@ -120,7 +115,7 @@ void EdsLib_ErrorControl_Initialize(void) for (bit = 0; bit < 8; ++bit) { crc16_shiftreg <<= 1; - crc8_shiftreg <<= 1; + crc8_shiftreg <<= 1; if (crc16_shiftreg & 0x10000) { crc16_shiftreg ^= EDSLIB_CRC16_CCITT_POLY; @@ -154,28 +149,28 @@ uintmax_t EdsLib_ErrorControlAlgorithm_ZERO(const void *Base, uint32_t TotalBitS return 0; } - /*---------------------------------------------------------------- * * EdsLib local helper function * *-----------------------------------------------------------------*/ -uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL(const void *Base, uint32_t TotalBitSize, uint32_t ErrCtlBitPos) +uintmax_t +EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL(const void *Base, uint32_t TotalBitSize, uint32_t ErrCtlBitPos) { const uint8_t *SrcPtr; - uint32_t ErrCtlByte; - uint32_t CurrByte; - uint32_t TotalByte; - uint8_t NextMask; - uint8_t Byte; - uint8_t Checksum; - - NextMask = 0xFF; - Checksum = 0xFF; - TotalByte = (TotalBitSize + 7) >> 3; + uint32_t ErrCtlByte; + uint32_t CurrByte; + uint32_t TotalByte; + uint8_t NextMask; + uint8_t Byte; + uint8_t Checksum; + + NextMask = 0xFF; + Checksum = 0xFF; + TotalByte = (TotalBitSize + 7) >> 3; ErrCtlByte = ErrCtlBitPos >> 3; - CurrByte = 0; - SrcPtr = Base; + CurrByte = 0; + SrcPtr = Base; while (CurrByte < TotalByte) { Byte = *SrcPtr; @@ -183,13 +178,13 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL(const void *Base, u if (CurrByte == ErrCtlByte) { - NextMask = (0x100 >> (ErrCtlBitPos & 0x07)) - 1; - Byte &= ~NextMask; + NextMask = (0x100 >> (ErrCtlBitPos & 0x07)) - 1; + Byte &= ~NextMask; } else { - Byte &= NextMask; - NextMask = 0xFF; + Byte &= NextMask; + NextMask = 0xFF; } Checksum ^= Byte; @@ -207,15 +202,15 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM_LONGITUDINAL(const void *Base, u uintmax_t EdsLib_ErrorControlAlgorithm_CRC16_CCITT(const void *Base, uint32_t TotalBitSize, uint32_t ErrCtlBitPos) { const uint8_t *SrcPtr; - uint32_t NextBitPos; - uint32_t CurrBitPos; - uint32_t BreakpointBitPos; - uint32_t CurrShift; - uint16_t crc; - uint8_t byte; - - crc = 0xFFFF; - SrcPtr = Base; + uint32_t NextBitPos; + uint32_t CurrBitPos; + uint32_t BreakpointBitPos; + uint32_t CurrShift; + uint16_t crc; + uint8_t byte; + + crc = 0xFFFF; + SrcPtr = Base; CurrBitPos = 0; if (ErrCtlBitPos < TotalBitSize) { @@ -227,18 +222,17 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC16_CCITT(const void *Base, uint32_t To } CurrShift = 0; - while(CurrBitPos < TotalBitSize) + while (CurrBitPos < TotalBitSize) { - byte = SrcPtr[CurrBitPos >> 3]; + byte = SrcPtr[CurrBitPos >> 3]; NextBitPos = CurrBitPos + 8; if (CurrShift == 0 && NextBitPos <= BreakpointBitPos) { - crc = EDSLIB_CRC16_CCITT_TABLE[(byte ^ (crc >> 8)) & 0xff] ^ - (crc << 8); + crc = EDSLIB_CRC16_CCITT_TABLE[(byte ^ (crc >> 8)) & 0xff] ^ (crc << 8); } else { - byte = byte << CurrShift; + byte = byte << CurrShift; NextBitPos -= CurrShift; if (NextBitPos > BreakpointBitPos) @@ -246,7 +240,7 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC16_CCITT(const void *Base, uint32_t To NextBitPos = BreakpointBitPos; } - while(CurrBitPos < NextBitPos) + while (CurrBitPos < NextBitPos) { if (byte & 0x80) { @@ -268,7 +262,6 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC16_CCITT(const void *Base, uint32_t To CurrBitPos = NextBitPos; } - return crc; } @@ -280,15 +273,15 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC16_CCITT(const void *Base, uint32_t To uintmax_t EdsLib_ErrorControlAlgorithm_CRC8(const void *Base, uint32_t TotalBitSize, uint32_t ErrCtlBitPos) { const uint8_t *SrcPtr; - uint32_t NextBitPos; - uint32_t CurrBitPos; - uint32_t BreakpointBitPos; - uint32_t CurrShift; - uint8_t crc; - uint8_t byte; - - crc = 0; - SrcPtr = Base; + uint32_t NextBitPos; + uint32_t CurrBitPos; + uint32_t BreakpointBitPos; + uint32_t CurrShift; + uint8_t crc; + uint8_t byte; + + crc = 0; + SrcPtr = Base; CurrBitPos = 0; if (ErrCtlBitPos < TotalBitSize) { @@ -300,9 +293,9 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC8(const void *Base, uint32_t TotalBitS } CurrShift = 0; - while(CurrBitPos < TotalBitSize) + while (CurrBitPos < TotalBitSize) { - byte = SrcPtr[CurrBitPos >> 3]; + byte = SrcPtr[CurrBitPos >> 3]; NextBitPos = CurrBitPos + 8; if (CurrShift == 0 && NextBitPos <= BreakpointBitPos) { @@ -310,7 +303,7 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC8(const void *Base, uint32_t TotalBitS } else { - byte = byte << CurrShift; + byte = byte << CurrShift; NextBitPos -= CurrShift; if (NextBitPos > BreakpointBitPos) @@ -318,7 +311,7 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC8(const void *Base, uint32_t TotalBitS NextBitPos = BreakpointBitPos; } - while(CurrBitPos < NextBitPos) + while (CurrBitPos < NextBitPos) { if (byte & 0x80) { @@ -333,13 +326,12 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC8(const void *Base, uint32_t TotalBitS NextBitPos = CurrBitPos + 8; } - CurrShift = (0 - NextBitPos) & 0x7; + CurrShift = (0 - NextBitPos) & 0x7; BreakpointBitPos = TotalBitSize; } CurrBitPos = NextBitPos; } - return crc; } @@ -351,13 +343,13 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CRC8(const void *Base, uint32_t TotalBitS uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM(const void *Base, uint32_t TotalBitSize, uint32_t ErrCtlBitPos) { const uint8_t *SrcPtr; - uint32_t sum = 0; - uint32_t NextMask = 0xFFFFFFFF; - uint32_t offset = 0; - uint32_t intermediate = 0; + uint32_t sum = 0; + uint32_t NextMask = 0xFFFFFFFF; + uint32_t offset = 0; + uint32_t intermediate = 0; SrcPtr = Base; - for (offset=0; offset < TotalBitSize; offset += 8) + for (offset = 0; offset < TotalBitSize; offset += 8) { intermediate = (intermediate << 8) | *SrcPtr; if ((offset & 0x18) == 0x18) @@ -365,13 +357,13 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM(const void *Base, uint32_t Total /* mask out bits that are part of the error control field itself */ if ((offset >> 5) == (ErrCtlBitPos >> 5)) { - NextMask = (UINT32_C(1) << (32-(ErrCtlBitPos & 0x1F))) - 1; + NextMask = (UINT32_C(1) << (32 - (ErrCtlBitPos & 0x1F))) - 1; intermediate &= ~NextMask; } else { intermediate &= NextMask; - NextMask = 0xFFFFFFFF; + NextMask = 0xFFFFFFFF; } sum += intermediate; @@ -382,18 +374,20 @@ uintmax_t EdsLib_ErrorControlAlgorithm_CHECKSUM(const void *Base, uint32_t Total if ((offset & 0x1F) != 0) { intermediate <<= 32 - (offset & 0x1F); - intermediate &= NextMask; - sum += intermediate; + intermediate &= NextMask; + sum += intermediate; } return sum; } - /******************************************************* * MAIN ERROR CONTROL IMPLEMENTATION FUNCTION *******************************************************/ -uintmax_t EdsLib_ErrorControlCompute(EdsLib_ErrorControlType_t Algorithm, const void *Buffer, uint32_t BufferSizeBits, uint32_t ErrCtlBitPos) +uintmax_t EdsLib_ErrorControlCompute(EdsLib_ErrorControlType_t Algorithm, + const void *Buffer, + uint32_t BufferSizeBits, + uint32_t ErrCtlBitPos) { uint32_t Idx; diff --git a/edslib/fsw/src/edslib_datatypedb_iterator.c b/edslib/fsw/src/edslib_datatypedb_iterator.c index 5f5d1e1..ca27a11 100644 --- a/edslib/fsw/src/edslib_datatypedb_iterator.c +++ b/edslib/fsw/src/edslib_datatypedb_iterator.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb_iterator.c * \ingroup fsw @@ -41,19 +40,19 @@ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeIterator_Impl(const EdsLib_DatabaseObject_t *GD, - EdsLib_DataTypeIterator_ControlBlock_t *StateInfo) +int32_t EdsLib_DataTypeIterator_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_DataTypeIterator_ControlBlock_t *StateInfo) { EdsLib_DataTypeIterator_StackEntry_t *CurrLev; EdsLib_DataTypeIterator_StackEntry_t *ParentLev; - EdsLib_Iterator_Rc_t NextAction; - int32_t Status; - uint16_t TopDepth; + EdsLib_Iterator_Rc_t NextAction; + int32_t Status; + uint16_t TopDepth; - TopDepth = 1; + TopDepth = 1; ParentLev = NULL; - CurrLev = StateInfo->StackBase; - Status = EDSLIB_SUCCESS; + CurrLev = StateInfo->StackBase; + Status = EDSLIB_SUCCESS; /* * Set up the first entry in the state stack @@ -66,9 +65,9 @@ int32_t EdsLib_DataTypeIterator_Impl(const EdsLib_DatabaseObject_t *GD, return EDSLIB_INCOMPLETE_DB_OBJECT; } - CurrLev->CurrDepth = TopDepth; - CurrLev->EndOffset = CurrLev->DataDictPtr->SizeInfo; - CurrLev->EndOffset.Bits += CurrLev->StartOffset.Bits; + CurrLev->CurrDepth = TopDepth; + CurrLev->EndOffset = CurrLev->DataDictPtr->SizeInfo; + CurrLev->EndOffset.Bits += CurrLev->StartOffset.Bits; CurrLev->EndOffset.Bytes += CurrLev->StartOffset.Bytes; if (CurrLev->DataDictPtr->NumSubElements == 0) { @@ -84,7 +83,7 @@ int32_t EdsLib_DataTypeIterator_Impl(const EdsLib_DatabaseObject_t *GD, NextAction = EDSLIB_ITERATOR_RC_DESCEND; } - while(NextAction != EDSLIB_ITERATOR_RC_STOP) + while (NextAction != EDSLIB_ITERATOR_RC_STOP) { /* * Perform the user callback based on the current requested action. @@ -92,165 +91,163 @@ int32_t EdsLib_DataTypeIterator_Impl(const EdsLib_DatabaseObject_t *GD, */ switch (NextAction) { - case EDSLIB_ITERATOR_RC_DESCEND: - if (CurrLev->DataDictPtr == NULL) - { - Status = EDSLIB_INCOMPLETE_DB_OBJECT; - NextAction = EDSLIB_ITERATOR_RC_ASCEND; - } - else if (TopDepth < StateInfo->StackSize) - { - /* Give indication to the user application that an object is being started */ - NextAction = StateInfo->Callback(GD, EDSLIB_ITERATOR_CBTYPE_START, CurrLev, StateInfo->CallbackArg); - ParentLev = CurrLev; - ++CurrLev; - ++TopDepth; - memset(CurrLev, 0, sizeof(*CurrLev)); - CurrLev->CurrDepth = TopDepth; - } - - /* It is never valid to descend twice (must "continue" at least once to get the 1st element) */ - if (NextAction == EDSLIB_ITERATOR_RC_DESCEND) - { - NextAction = EDSLIB_ITERATOR_RC_CONTINUE; - } - break; - case EDSLIB_ITERATOR_RC_ASCEND: - --CurrLev; - --TopDepth; + case EDSLIB_ITERATOR_RC_DESCEND: + if (CurrLev->DataDictPtr == NULL) + { + Status = EDSLIB_INCOMPLETE_DB_OBJECT; + NextAction = EDSLIB_ITERATOR_RC_ASCEND; + } + else if (TopDepth < StateInfo->StackSize) + { + /* Give indication to the user application that an object is being started */ + NextAction = StateInfo->Callback(GD, EDSLIB_ITERATOR_CBTYPE_START, CurrLev, StateInfo->CallbackArg); + ParentLev = CurrLev; + ++CurrLev; + ++TopDepth; + memset(CurrLev, 0, sizeof(*CurrLev)); + CurrLev->CurrDepth = TopDepth; + } - if (TopDepth > 1) - { - --ParentLev; + /* It is never valid to descend twice (must "continue" at least once to get the 1st element) */ + if (NextAction == EDSLIB_ITERATOR_RC_DESCEND) + { + NextAction = EDSLIB_ITERATOR_RC_CONTINUE; + } + break; + case EDSLIB_ITERATOR_RC_ASCEND: + --CurrLev; + --TopDepth; - /* Give indication to the user application that an object is finished */ - NextAction = StateInfo->Callback(GD, EDSLIB_ITERATOR_CBTYPE_END, CurrLev, StateInfo->CallbackArg); - } - else - { - ParentLev = NULL; - NextAction = EDSLIB_ITERATOR_RC_STOP; - } - break; - case EDSLIB_ITERATOR_RC_CONTINUE: - if (ParentLev == NULL) - { - NextAction = EDSLIB_ITERATOR_RC_STOP; - } - else if (CurrLev->CurrIndex >= ParentLev->DataDictPtr->NumSubElements) - { - /* - * Advance to the next element in the parent container, if we have not gotten to the end. - */ - NextAction = EDSLIB_ITERATOR_RC_ASCEND; - } - else if (ParentLev->DataDictPtr->BasicType == EDSLIB_BASICTYPE_ARRAY) - { - /* - * Because structure elements might contain padding, - * we reset the "AbsOffset" every time through, recalculate - * by taking the parent AbsOffset and adding the start offset to the - * current element. - */ - if (CurrLev->CurrIndex == 0) + if (TopDepth > 1) { - /* Lookup the actual array type. Unlike containers, this only needs to be - * done on the first time since all entries are of the same type. - * - * This calculates the END offset of this element based on the parent size. Doing - * it this way accounts for (potential) extra padding between elements, such as - * cases where we have an array of base type containers. This would not be accounted - * for when using the "SizeInfo" of the current level directly, as this would only be - * the size of the base type. - */ - CurrLev->Details.RefObj = ParentLev->DataDictPtr->Detail.Array->ElementRefObj; - CurrLev->DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &CurrLev->Details.RefObj); - CurrLev->Details.EntryType = EDSLIB_ENTRYTYPE_ARRAY_ELEMENT; - CurrLev->StartOffset = ParentLev->StartOffset; - CurrLev->EndOffset.Bytes = (ParentLev->EndOffset.Bytes - ParentLev->StartOffset.Bytes); - CurrLev->EndOffset.Bits = (ParentLev->EndOffset.Bits - ParentLev->StartOffset.Bits); - CurrLev->EndOffset.Bytes /= ParentLev->DataDictPtr->NumSubElements; - CurrLev->EndOffset.Bits /= ParentLev->DataDictPtr->NumSubElements; - CurrLev->EndOffset.Bytes += CurrLev->StartOffset.Bytes; - CurrLev->EndOffset.Bits += CurrLev->StartOffset.Bits; + --ParentLev; + + /* Give indication to the user application that an object is finished */ + NextAction = StateInfo->Callback(GD, EDSLIB_ITERATOR_CBTYPE_END, CurrLev, StateInfo->CallbackArg); } else { - /* - * Adjust the start/end offsets to the next element - */ - EdsLib_SizeInfo_t ElementSize; - ElementSize.Bytes = CurrLev->EndOffset.Bytes - CurrLev->StartOffset.Bytes; - ElementSize.Bits = CurrLev->EndOffset.Bits - CurrLev->StartOffset.Bits; - CurrLev->StartOffset = CurrLev->EndOffset; - CurrLev->EndOffset.Bytes += ElementSize.Bytes; - CurrLev->EndOffset.Bits += ElementSize.Bits; + ParentLev = NULL; + NextAction = EDSLIB_ITERATOR_RC_STOP; } - } - else if (ParentLev->DataDictPtr->BasicType == EDSLIB_BASICTYPE_CONTAINER || - ParentLev->DataDictPtr->BasicType == EDSLIB_BASICTYPE_COMPONENT) - { - /* Copy the entry details directly from the DB */ - CurrLev->Details = ParentLev->DataDictPtr->Detail.Container-> - EntryList[CurrLev->CurrIndex]; - - /* - * Current level is a structure container, all sub-elements are a different type; - * so structure ID and type info must be reinitialized for each member - */ - if (CurrLev->CurrIndex == 0) + break; + case EDSLIB_ITERATOR_RC_CONTINUE: + if (ParentLev == NULL) + { + NextAction = EDSLIB_ITERATOR_RC_STOP; + } + else if (CurrLev->CurrIndex >= ParentLev->DataDictPtr->NumSubElements) { /* - * Usually the offset of the first entry is zero, except in case - * where there is leading padding in a container. So it must be - * added now. + * Advance to the next element in the parent container, if we have not gotten to the end. */ - CurrLev->StartOffset.Bytes = ParentLev->StartOffset.Bytes + - CurrLev->Details.Offset.Bytes; - CurrLev->StartOffset.Bits = ParentLev->StartOffset.Bits + - CurrLev->Details.Offset.Bits; + NextAction = EDSLIB_ITERATOR_RC_ASCEND; } - else + else if (ParentLev->DataDictPtr->BasicType == EDSLIB_BASICTYPE_ARRAY) { - /* The start of the current element is the end of the previous one */ - CurrLev->StartOffset = CurrLev->EndOffset; + /* + * Because structure elements might contain padding, + * we reset the "AbsOffset" every time through, recalculate + * by taking the parent AbsOffset and adding the start offset to the + * current element. + */ + if (CurrLev->CurrIndex == 0) + { + /* Lookup the actual array type. Unlike containers, this only needs to be + * done on the first time since all entries are of the same type. + * + * This calculates the END offset of this element based on the parent size. Doing + * it this way accounts for (potential) extra padding between elements, such as + * cases where we have an array of base type containers. This would not be accounted + * for when using the "SizeInfo" of the current level directly, as this would only be + * the size of the base type. + */ + CurrLev->Details.RefObj = ParentLev->DataDictPtr->Detail.Array->ElementRefObj; + CurrLev->DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &CurrLev->Details.RefObj); + CurrLev->Details.EntryType = EDSLIB_ENTRYTYPE_ARRAY_ELEMENT; + CurrLev->StartOffset = ParentLev->StartOffset; + CurrLev->EndOffset.Bytes = (ParentLev->EndOffset.Bytes - ParentLev->StartOffset.Bytes); + CurrLev->EndOffset.Bits = (ParentLev->EndOffset.Bits - ParentLev->StartOffset.Bits); + CurrLev->EndOffset.Bytes /= ParentLev->DataDictPtr->NumSubElements; + CurrLev->EndOffset.Bits /= ParentLev->DataDictPtr->NumSubElements; + CurrLev->EndOffset.Bytes += CurrLev->StartOffset.Bytes; + CurrLev->EndOffset.Bits += CurrLev->StartOffset.Bits; + } + else + { + /* + * Adjust the start/end offsets to the next element + */ + EdsLib_SizeInfo_t ElementSize; + ElementSize.Bytes = CurrLev->EndOffset.Bytes - CurrLev->StartOffset.Bytes; + ElementSize.Bits = CurrLev->EndOffset.Bits - CurrLev->StartOffset.Bits; + CurrLev->StartOffset = CurrLev->EndOffset; + CurrLev->EndOffset.Bytes += ElementSize.Bytes; + CurrLev->EndOffset.Bits += ElementSize.Bits; + } } - if (CurrLev->CurrIndex < (ParentLev->DataDictPtr->NumSubElements-1)) + else if (ParentLev->DataDictPtr->BasicType == EDSLIB_BASICTYPE_CONTAINER + || ParentLev->DataDictPtr->BasicType == EDSLIB_BASICTYPE_COMPONENT) { - /* peek ahead to the offset of the _next_ entry. This is done - * for the same reason as the array entries - to include for padding/buffer - * space between elements in case an entry is actually a base type */ - CurrLev->EndOffset = ParentLev->DataDictPtr->Detail.Container-> - EntryList[1+CurrLev->CurrIndex].Offset; - CurrLev->EndOffset.Bytes += ParentLev->StartOffset.Bytes; - CurrLev->EndOffset.Bits += ParentLev->StartOffset.Bits; + /* Copy the entry details directly from the DB */ + CurrLev->Details = ParentLev->DataDictPtr->Detail.Container->EntryList[CurrLev->CurrIndex]; + + /* + * Current level is a structure container, all sub-elements are a different type; + * so structure ID and type info must be reinitialized for each member + */ + if (CurrLev->CurrIndex == 0) + { + /* + * Usually the offset of the first entry is zero, except in case + * where there is leading padding in a container. So it must be + * added now. + */ + CurrLev->StartOffset.Bytes = ParentLev->StartOffset.Bytes + CurrLev->Details.Offset.Bytes; + CurrLev->StartOffset.Bits = ParentLev->StartOffset.Bits + CurrLev->Details.Offset.Bits; + } + else + { + /* The start of the current element is the end of the previous one */ + CurrLev->StartOffset = CurrLev->EndOffset; + } + if (CurrLev->CurrIndex < (ParentLev->DataDictPtr->NumSubElements - 1)) + { + /* peek ahead to the offset of the _next_ entry. This is done + * for the same reason as the array entries - to include for padding/buffer + * space between elements in case an entry is actually a base type */ + CurrLev->EndOffset = + ParentLev->DataDictPtr->Detail.Container->EntryList[1 + CurrLev->CurrIndex].Offset; + CurrLev->EndOffset.Bytes += ParentLev->StartOffset.Bytes; + CurrLev->EndOffset.Bits += ParentLev->StartOffset.Bits; + } + else + { + /* use the parent end offset */ + CurrLev->EndOffset = ParentLev->EndOffset; + } + CurrLev->DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &CurrLev->Details.RefObj); } else { - /* use the parent end offset */ - CurrLev->EndOffset = ParentLev->EndOffset; + /* Should not get here; bug in database? */ + NextAction = EDSLIB_ITERATOR_RC_ASCEND; } - CurrLev->DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &CurrLev->Details.RefObj); - } - else - { - /* Should not get here; bug in database? */ - NextAction = EDSLIB_ITERATOR_RC_ASCEND; - } - if (NextAction == EDSLIB_ITERATOR_RC_CONTINUE) - { - NextAction = StateInfo->Callback(GD, EDSLIB_ITERATOR_CBTYPE_MEMBER, CurrLev, StateInfo->CallbackArg); - ++CurrLev->CurrIndex; - } - break; + if (NextAction == EDSLIB_ITERATOR_RC_CONTINUE) + { + NextAction = + StateInfo->Callback(GD, EDSLIB_ITERATOR_CBTYPE_MEMBER, CurrLev, StateInfo->CallbackArg); + ++CurrLev->CurrIndex; + } + break; - case EDSLIB_ITERATOR_RC_STOP: - break; + case EDSLIB_ITERATOR_RC_STOP: + break; - default: - NextAction = EDSLIB_ITERATOR_RC_CONTINUE; - break; + default: + NextAction = EDSLIB_ITERATOR_RC_CONTINUE; + break; } } diff --git a/edslib/fsw/src/edslib_datatypedb_load_store.c b/edslib/fsw/src/edslib_datatypedb_load_store.c index 28485e8..b8dbbeb 100644 --- a/edslib/fsw/src/edslib_datatypedb_load_store.c +++ b/edslib/fsw/src/edslib_datatypedb_load_store.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb_load_store.c * \ingroup fsw @@ -39,10 +38,12 @@ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DataTypeLoad_Impl(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_ConstPtr_t SrcPtr, const EdsLib_DataTypeDB_Entry_t *DictEntryPtr) +void EdsLib_DataTypeLoad_Impl(EdsLib_GenericValueBuffer_t *ValueBuff, + EdsLib_ConstPtr_t SrcPtr, + const EdsLib_DataTypeDB_Entry_t *DictEntryPtr) { EdsLib_BasicType_t SubjectType; - uint32_t SubjectSize; + uint32_t SubjectSize; /* * In keeping with existing paradigms in other internal API calls, this should deal with @@ -60,66 +61,66 @@ void EdsLib_DataTypeLoad_Impl(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_Con } ValueBuff->ValueType = SubjectType; - switch(EDSLIB_TYPE_AND_SIZE(SubjectSize, SubjectType)) + switch (EDSLIB_TYPE_AND_SIZE(SubjectSize, SubjectType)) { - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i8), EDSLIB_BASICTYPE_SIGNED_INT): - ValueBuff->Value.SignedInteger = SrcPtr.u->i8; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u8), EDSLIB_BASICTYPE_UNSIGNED_INT): - ValueBuff->Value.UnsignedInteger = SrcPtr.u->u8; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i16), EDSLIB_BASICTYPE_SIGNED_INT): - ValueBuff->Value.SignedInteger = SrcPtr.u->i16; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u16), EDSLIB_BASICTYPE_UNSIGNED_INT): - ValueBuff->Value.UnsignedInteger = SrcPtr.u->u16; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i32), EDSLIB_BASICTYPE_SIGNED_INT): - ValueBuff->Value.SignedInteger = SrcPtr.u->i32; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u32), EDSLIB_BASICTYPE_UNSIGNED_INT): - ValueBuff->Value.UnsignedInteger = SrcPtr.u->u32; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i64), EDSLIB_BASICTYPE_SIGNED_INT): - ValueBuff->Value.SignedInteger = SrcPtr.u->i64; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u64), EDSLIB_BASICTYPE_UNSIGNED_INT): - ValueBuff->Value.UnsignedInteger = SrcPtr.u->u64; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.fpsgl), EDSLIB_BASICTYPE_FLOAT): - ValueBuff->Value.FloatingPoint = SrcPtr.u->fpsgl; - break; - default: - if (SubjectType == EDSLIB_BASICTYPE_FLOAT) - { - /* NOTE - this check for max-precision float is done in the default case because - * on some machines that do not have a long double, it is identical to double. - * this avoids a potential "duplicate case" error on those machines. - * Other machines might have float and double as the same width. */ - if (SubjectSize == sizeof(ValueBuff->Value.fpmax)) + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i8), EDSLIB_BASICTYPE_SIGNED_INT): + ValueBuff->Value.SignedInteger = SrcPtr.u->i8; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u8), EDSLIB_BASICTYPE_UNSIGNED_INT): + ValueBuff->Value.UnsignedInteger = SrcPtr.u->u8; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i16), EDSLIB_BASICTYPE_SIGNED_INT): + ValueBuff->Value.SignedInteger = SrcPtr.u->i16; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u16), EDSLIB_BASICTYPE_UNSIGNED_INT): + ValueBuff->Value.UnsignedInteger = SrcPtr.u->u16; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i32), EDSLIB_BASICTYPE_SIGNED_INT): + ValueBuff->Value.SignedInteger = SrcPtr.u->i32; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u32), EDSLIB_BASICTYPE_UNSIGNED_INT): + ValueBuff->Value.UnsignedInteger = SrcPtr.u->u32; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.i64), EDSLIB_BASICTYPE_SIGNED_INT): + ValueBuff->Value.SignedInteger = SrcPtr.u->i64; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.u64), EDSLIB_BASICTYPE_UNSIGNED_INT): + ValueBuff->Value.UnsignedInteger = SrcPtr.u->u64; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(ValueBuff->Value.fpsgl), EDSLIB_BASICTYPE_FLOAT): + ValueBuff->Value.FloatingPoint = SrcPtr.u->fpsgl; + break; + default: + if (SubjectType == EDSLIB_BASICTYPE_FLOAT) { - ValueBuff->Value.FloatingPoint = SrcPtr.u->fpmax; + /* NOTE - this check for max-precision float is done in the default case because + * on some machines that do not have a long double, it is identical to double. + * this avoids a potential "duplicate case" error on those machines. + * Other machines might have float and double as the same width. */ + if (SubjectSize == sizeof(ValueBuff->Value.fpmax)) + { + ValueBuff->Value.FloatingPoint = SrcPtr.u->fpmax; + } + else if (SubjectSize == sizeof(ValueBuff->Value.fpdbl)) + { + ValueBuff->Value.FloatingPoint = SrcPtr.u->fpdbl; + } + else + { + ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; + ValueBuff->Value.UnsignedInteger = 0; + } } - else if (SubjectSize == sizeof(ValueBuff->Value.fpdbl)) + else if (SubjectType == EDSLIB_BASICTYPE_BINARY && SubjectSize <= sizeof(ValueBuff->Value.StringData)) { - ValueBuff->Value.FloatingPoint = SrcPtr.u->fpdbl; + strncpy(ValueBuff->Value.StringData, SrcPtr.Ptr, SubjectSize); } else { - ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; + ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; ValueBuff->Value.UnsignedInteger = 0; } - } - else if (SubjectType == EDSLIB_BASICTYPE_BINARY && SubjectSize <= sizeof(ValueBuff->Value.StringData)) - { - strncpy(ValueBuff->Value.StringData, SrcPtr.Ptr, SubjectSize); - } - else - { - ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; - ValueBuff->Value.UnsignedInteger = 0; - } - break; + break; } } @@ -131,46 +132,46 @@ void EdsLib_DataTypeLoad_Impl(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_Con *-----------------------------------------------------------------*/ void EdsLib_DataTypeConvert(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_BasicType_t DesiredType) { - switch(EDSLIB_TYPE_AND_SIZE(DesiredType, ValueBuff->ValueType)) + switch (EDSLIB_TYPE_AND_SIZE(DesiredType, ValueBuff->ValueType)) { - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_SIGNED_INT, EDSLIB_BASICTYPE_UNSIGNED_INT): - ValueBuff->Value.SignedInteger = ValueBuff->Value.UnsignedInteger; - ValueBuff->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; - break; - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_FLOAT, EDSLIB_BASICTYPE_UNSIGNED_INT): - ValueBuff->Value.FloatingPoint = ValueBuff->Value.UnsignedInteger; - ValueBuff->ValueType = EDSLIB_BASICTYPE_FLOAT; - break; - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_UNSIGNED_INT, EDSLIB_BASICTYPE_SIGNED_INT): - ValueBuff->Value.UnsignedInteger = ValueBuff->Value.SignedInteger; - ValueBuff->ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; - break; - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_FLOAT, EDSLIB_BASICTYPE_SIGNED_INT): - ValueBuff->Value.FloatingPoint = ValueBuff->Value.SignedInteger; - ValueBuff->ValueType = EDSLIB_BASICTYPE_FLOAT; - break; - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_SIGNED_INT, EDSLIB_BASICTYPE_FLOAT): - ValueBuff->Value.SignedInteger = ValueBuff->Value.FloatingPoint; - ValueBuff->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; - break; - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_UNSIGNED_INT, EDSLIB_BASICTYPE_FLOAT): - ValueBuff->Value.UnsignedInteger = ValueBuff->Value.FloatingPoint; - ValueBuff->ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; - break; - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_FLOAT, EDSLIB_BASICTYPE_FLOAT): - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_SIGNED_INT, EDSLIB_BASICTYPE_SIGNED_INT): - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_UNSIGNED_INT, EDSLIB_BASICTYPE_UNSIGNED_INT): - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_BINARY, EDSLIB_BASICTYPE_BINARY): - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_ARRAY, EDSLIB_BASICTYPE_ARRAY): - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_CONTAINER, EDSLIB_BASICTYPE_CONTAINER): - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_COMPONENT, EDSLIB_BASICTYPE_COMPONENT): - case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_GENERIC, EDSLIB_BASICTYPE_GENERIC): - /* No changes to ValueBuff */ - break; - default: - /* Invalid */ - ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; - break; + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_SIGNED_INT, EDSLIB_BASICTYPE_UNSIGNED_INT): + ValueBuff->Value.SignedInteger = ValueBuff->Value.UnsignedInteger; + ValueBuff->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + break; + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_FLOAT, EDSLIB_BASICTYPE_UNSIGNED_INT): + ValueBuff->Value.FloatingPoint = ValueBuff->Value.UnsignedInteger; + ValueBuff->ValueType = EDSLIB_BASICTYPE_FLOAT; + break; + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_UNSIGNED_INT, EDSLIB_BASICTYPE_SIGNED_INT): + ValueBuff->Value.UnsignedInteger = ValueBuff->Value.SignedInteger; + ValueBuff->ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + break; + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_FLOAT, EDSLIB_BASICTYPE_SIGNED_INT): + ValueBuff->Value.FloatingPoint = ValueBuff->Value.SignedInteger; + ValueBuff->ValueType = EDSLIB_BASICTYPE_FLOAT; + break; + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_SIGNED_INT, EDSLIB_BASICTYPE_FLOAT): + ValueBuff->Value.SignedInteger = ValueBuff->Value.FloatingPoint; + ValueBuff->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + break; + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_UNSIGNED_INT, EDSLIB_BASICTYPE_FLOAT): + ValueBuff->Value.UnsignedInteger = ValueBuff->Value.FloatingPoint; + ValueBuff->ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + break; + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_FLOAT, EDSLIB_BASICTYPE_FLOAT): + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_SIGNED_INT, EDSLIB_BASICTYPE_SIGNED_INT): + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_UNSIGNED_INT, EDSLIB_BASICTYPE_UNSIGNED_INT): + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_BINARY, EDSLIB_BASICTYPE_BINARY): + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_ARRAY, EDSLIB_BASICTYPE_ARRAY): + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_CONTAINER, EDSLIB_BASICTYPE_CONTAINER): + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_COMPONENT, EDSLIB_BASICTYPE_COMPONENT): + case EDSLIB_TYPE_AND_SIZE(EDSLIB_BASICTYPE_GENERIC, EDSLIB_BASICTYPE_GENERIC): + /* No changes to ValueBuff */ + break; + default: + /* Invalid */ + ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; + break; } } @@ -180,10 +181,12 @@ void EdsLib_DataTypeConvert(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_Basic * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DataTypeStore_Impl(EdsLib_Ptr_t DstPtr, EdsLib_GenericValueBuffer_t *ValueBuff, const EdsLib_DataTypeDB_Entry_t *DictEntryPtr) +void EdsLib_DataTypeStore_Impl(EdsLib_Ptr_t DstPtr, + EdsLib_GenericValueBuffer_t *ValueBuff, + const EdsLib_DataTypeDB_Entry_t *DictEntryPtr) { EdsLib_BasicType_t SubjectType; - uint32_t SubjectSize; + uint32_t SubjectSize; /* * In keeping with existing paradigms in other internal API calls, this should deal with @@ -202,65 +205,63 @@ void EdsLib_DataTypeStore_Impl(EdsLib_Ptr_t DstPtr, EdsLib_GenericValueBuffer_t EdsLib_DataTypeConvert(ValueBuff, SubjectType); - switch(EDSLIB_TYPE_AND_SIZE(SubjectSize, ValueBuff->ValueType)) + switch (EDSLIB_TYPE_AND_SIZE(SubjectSize, ValueBuff->ValueType)) { - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i8), EDSLIB_BASICTYPE_SIGNED_INT): - DstPtr.u->i8 = ValueBuff->Value.SignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u8), EDSLIB_BASICTYPE_UNSIGNED_INT): - DstPtr.u->u8 = ValueBuff->Value.UnsignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i16), EDSLIB_BASICTYPE_SIGNED_INT): - DstPtr.u->i16 = ValueBuff->Value.SignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u16), EDSLIB_BASICTYPE_UNSIGNED_INT): - DstPtr.u->u16 = ValueBuff->Value.UnsignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i32), EDSLIB_BASICTYPE_SIGNED_INT): - DstPtr.u->i32 = ValueBuff->Value.SignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u32), EDSLIB_BASICTYPE_UNSIGNED_INT): - DstPtr.u->u32 = ValueBuff->Value.UnsignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i64), EDSLIB_BASICTYPE_SIGNED_INT): - DstPtr.u->i64 = ValueBuff->Value.SignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u64), EDSLIB_BASICTYPE_UNSIGNED_INT): - DstPtr.u->u64 = ValueBuff->Value.UnsignedInteger; - break; - case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->fpsgl), EDSLIB_BASICTYPE_FLOAT): - DstPtr.u->fpsgl = ValueBuff->Value.FloatingPoint; - break; - default: - if (SubjectType == EDSLIB_BASICTYPE_FLOAT) - { - /* floating point sizes checked here, since on some machines - * the size of double/long double might be the same. - * This would result in a duplicate case value */ - if (SubjectSize == sizeof(ValueBuff->Value.fpmax)) + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i8), EDSLIB_BASICTYPE_SIGNED_INT): + DstPtr.u->i8 = ValueBuff->Value.SignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u8), EDSLIB_BASICTYPE_UNSIGNED_INT): + DstPtr.u->u8 = ValueBuff->Value.UnsignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i16), EDSLIB_BASICTYPE_SIGNED_INT): + DstPtr.u->i16 = ValueBuff->Value.SignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u16), EDSLIB_BASICTYPE_UNSIGNED_INT): + DstPtr.u->u16 = ValueBuff->Value.UnsignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i32), EDSLIB_BASICTYPE_SIGNED_INT): + DstPtr.u->i32 = ValueBuff->Value.SignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u32), EDSLIB_BASICTYPE_UNSIGNED_INT): + DstPtr.u->u32 = ValueBuff->Value.UnsignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->i64), EDSLIB_BASICTYPE_SIGNED_INT): + DstPtr.u->i64 = ValueBuff->Value.SignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->u64), EDSLIB_BASICTYPE_UNSIGNED_INT): + DstPtr.u->u64 = ValueBuff->Value.UnsignedInteger; + break; + case EDSLIB_TYPE_AND_SIZE(sizeof(DstPtr.u->fpsgl), EDSLIB_BASICTYPE_FLOAT): + DstPtr.u->fpsgl = ValueBuff->Value.FloatingPoint; + break; + default: + if (SubjectType == EDSLIB_BASICTYPE_FLOAT) { - DstPtr.u->fpmax = ValueBuff->Value.FloatingPoint; + /* floating point sizes checked here, since on some machines + * the size of double/long double might be the same. + * This would result in a duplicate case value */ + if (SubjectSize == sizeof(ValueBuff->Value.fpmax)) + { + DstPtr.u->fpmax = ValueBuff->Value.FloatingPoint; + } + else if (SubjectSize == sizeof(ValueBuff->Value.fpdbl)) + { + DstPtr.u->fpdbl = ValueBuff->Value.FloatingPoint; + } + else + { + /* invalid size */ + ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; + } } - else if (SubjectSize == sizeof(ValueBuff->Value.fpdbl)) + else if (SubjectType == EDSLIB_BASICTYPE_BINARY && SubjectSize <= sizeof(ValueBuff->Value.StringData)) { - DstPtr.u->fpdbl = ValueBuff->Value.FloatingPoint; + strncpy(DstPtr.Ptr, ValueBuff->Value.StringData, SubjectSize); } else { - /* invalid size */ ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; } - } - else if (SubjectType == EDSLIB_BASICTYPE_BINARY && - SubjectSize <= sizeof(ValueBuff->Value.StringData)) - { - strncpy(DstPtr.Ptr, ValueBuff->Value.StringData, SubjectSize); - } - else - { - ValueBuff->ValueType = EDSLIB_BASICTYPE_NONE; - } - break; + break; } } - diff --git a/edslib/fsw/src/edslib_datatypedb_lookup.c b/edslib/fsw/src/edslib_datatypedb_lookup.c index e360897..8aa31ae 100644 --- a/edslib/fsw/src/edslib_datatypedb_lookup.c +++ b/edslib/fsw/src/edslib_datatypedb_lookup.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb_lookup.c * \ingroup fsw @@ -53,12 +52,12 @@ EdsLib_DataTypeDB_t EdsLib_DataTypeDB_GetTopLevel(const EdsLib_DatabaseObject_t { if (GD == NULL || GD->DataTypeDB_Table == NULL) { - return NULL; + return NULL; } if (AppIdx >= GD->AppTableSize) { - return NULL; + return NULL; } return GD->DataTypeDB_Table[AppIdx]; @@ -70,14 +69,15 @@ EdsLib_DataTypeDB_t EdsLib_DataTypeDB_GetTopLevel(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const EdsLib_DataTypeDB_Entry_t *EdsLib_DataTypeDB_GetEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj) +const EdsLib_DataTypeDB_Entry_t *EdsLib_DataTypeDB_GetEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj) { - EdsLib_DataTypeDB_t Dict; + EdsLib_DataTypeDB_t Dict; const EdsLib_DataTypeDB_Entry_t *DataDictEntry; - const EdsLib_DatabaseRef_t *CurrRef; + const EdsLib_DatabaseRef_t *CurrRef; DataDictEntry = NULL; - CurrRef = RefObj; + CurrRef = RefObj; while (true) { @@ -116,14 +116,15 @@ const EdsLib_DataTypeDB_Entry_t *EdsLib_DataTypeDB_GetEntry(const EdsLib_Databas * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DataTypeDB_CopyTypeInfo(const EdsLib_DataTypeDB_Entry_t *DataDictEntry, EdsLib_DataTypeDB_TypeInfo_t *TypeInfo) +void EdsLib_DataTypeDB_CopyTypeInfo(const EdsLib_DataTypeDB_Entry_t *DataDictEntry, + EdsLib_DataTypeDB_TypeInfo_t *TypeInfo) { memset(TypeInfo, 0, sizeof(*TypeInfo)); if (DataDictEntry != NULL) { - TypeInfo->Size = DataDictEntry->SizeInfo; - TypeInfo->Flags = DataDictEntry->Flags; - TypeInfo->ElemType = DataDictEntry->BasicType; + TypeInfo->Size = DataDictEntry->SizeInfo; + TypeInfo->Flags = DataDictEntry->Flags; + TypeInfo->ElemType = DataDictEntry->BasicType; TypeInfo->NumSubElements = DataDictEntry->NumSubElements; } } @@ -200,26 +201,28 @@ uint16_t EdsLib_GetArrayIdxFromBits(const void *SubjectPtr, const EdsLib_SizeInf * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_FindContainerMember_Impl(const EdsLib_DatabaseObject_t *GD, - const EdsLib_DataTypeDB_Entry_t *BaseDict, const void *CompareArg, EdsLib_EntryCompareFunc_t CompFunc, - EdsLib_DataTypeDB_EntityInfo_t *EntInfo) +int32_t EdsLib_DataTypeDB_FindContainerMember_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_Entry_t *BaseDict, + const void *CompareArg, + EdsLib_EntryCompareFunc_t CompFunc, + EdsLib_DataTypeDB_EntityInfo_t *EntInfo) { const EdsLib_FieldDetailEntry_t *ContEntry; const EdsLib_FieldDetailEntry_t *NextEntry; const EdsLib_DataTypeDB_Entry_t *MemberDict; - uint32_t Flags; - int32_t Result; - uint16_t Idx; + uint32_t Flags; + int32_t Result; + uint16_t Idx; ContEntry = BaseDict->Detail.Container->EntryList; NextEntry = NULL; - Flags = 0; + Flags = 0; /* * Locate the entry _prior_ to the one where the offset exceeds * the specified offset */ - for (Idx=1; Idx < BaseDict->NumSubElements; ++Idx) + for (Idx = 1; Idx < BaseDict->NumSubElements; ++Idx) { /* Note, This is peeking at the start of the NEXT entry */ NextEntry = &ContEntry[Idx]; @@ -248,9 +251,9 @@ int32_t EdsLib_DataTypeDB_FindContainerMember_Impl(const EdsLib_DatabaseObject_t Flags |= MemberDict->Flags; } - EntInfo->EdsId = EdsLib_Encode_StructId(&ContEntry->RefObj); + EntInfo->EdsId = EdsLib_Encode_StructId(&ContEntry->RefObj); EntInfo->Offset = ContEntry->Offset; - EntInfo->Flags = Flags; + EntInfo->Flags = Flags; if (NextEntry != NULL) { /* Not last element, peek at offset of _next_ element to get max size */ @@ -262,7 +265,7 @@ int32_t EdsLib_DataTypeDB_FindContainerMember_Impl(const EdsLib_DatabaseObject_t EntInfo->MaxSize = BaseDict->SizeInfo; } EntInfo->MaxSize.Bytes -= EntInfo->Offset.Bytes; - EntInfo->MaxSize.Bits -= EntInfo->Offset.Bits; + EntInfo->MaxSize.Bits -= EntInfo->Offset.Bits; Result = EDSLIB_SUCCESS; } @@ -280,30 +283,32 @@ int32_t EdsLib_DataTypeDB_FindContainerMember_Impl(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_FindArrayMember_Impl(const EdsLib_DatabaseObject_t *GD, - const EdsLib_DataTypeDB_Entry_t *BaseDict, const void *GetIdxArg, EdsLib_GetArrayIdxFunc_t GetIdxFunc, - EdsLib_DataTypeDB_EntityInfo_t *EntInfo) +int32_t EdsLib_DataTypeDB_FindArrayMember_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_Entry_t *BaseDict, + const void *GetIdxArg, + EdsLib_GetArrayIdxFunc_t GetIdxFunc, + EdsLib_DataTypeDB_EntityInfo_t *EntInfo) { EdsLib_SizeInfo_t ElementSize; - int32_t Result; - uint16_t SubIndex; + int32_t Result; + uint16_t SubIndex; /* - * Calculating the start offset this way, although it involves division, - * does not require that we actually _have_ the definition of the array - * element type loaded. The total byte size of the entire array _must_ - * be an integer multiple of the array length, by definition. - */ + * Calculating the start offset this way, although it involves division, + * does not require that we actually _have_ the definition of the array + * element type loaded. The total byte size of the entire array _must_ + * be an integer multiple of the array length, by definition. + */ ElementSize.Bytes = BaseDict->SizeInfo.Bytes / BaseDict->NumSubElements; - ElementSize.Bits = BaseDict->SizeInfo.Bits / BaseDict->NumSubElements; - SubIndex = GetIdxFunc(GetIdxArg, &ElementSize); + ElementSize.Bits = BaseDict->SizeInfo.Bits / BaseDict->NumSubElements; + SubIndex = GetIdxFunc(GetIdxArg, &ElementSize); if (SubIndex < BaseDict->NumSubElements) { - EntInfo->EdsId = EdsLib_Encode_StructId(&BaseDict->Detail.Array->ElementRefObj); - EntInfo->MaxSize = ElementSize; + EntInfo->EdsId = EdsLib_Encode_StructId(&BaseDict->Detail.Array->ElementRefObj); + EntInfo->MaxSize = ElementSize; EntInfo->Offset.Bytes = ElementSize.Bytes * SubIndex; - EntInfo->Offset.Bits = ElementSize.Bits * SubIndex; + EntInfo->Offset.Bits = ElementSize.Bits * SubIndex; Result = EDSLIB_SUCCESS; } diff --git a/edslib/fsw/src/edslib_datatypedb_pack_unpack.c b/edslib/fsw/src/edslib_datatypedb_pack_unpack.c index f090f10..009c1db 100644 --- a/edslib/fsw/src/edslib_datatypedb_pack_unpack.c +++ b/edslib/fsw/src/edslib_datatypedb_pack_unpack.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_datatypedb_pack_unpack.c * \ingroup fsw @@ -69,17 +68,17 @@ * Use "long double" internally during encode/decode * to minimize loss of precision */ -typedef long double EdsLib_Internal_Float_t; +typedef long double EdsLib_Internal_Float_t; /* * Use the math library calls with an "l" suffix * These should operate on long doubles */ -#define EDSLIB_FABS fabsl -#define EDSLIB_LDEXP ldexpl -#define EDSLIB_FREXP frexpl -#define EDSLIB_MODF modfl -#define EDSLIB_FLOAT_C(x) (x ## L) +#define EDSLIB_FABS fabsl +#define EDSLIB_LDEXP ldexpl +#define EDSLIB_FREXP frexpl +#define EDSLIB_MODF modfl +#define EDSLIB_FLOAT_C(x) (x##L) #else @@ -88,17 +87,17 @@ typedef long double EdsLib_Internal_Float_t; * Use "double" internally, may lose some precision * but should have wider C library support */ -typedef double EdsLib_Internal_Float_t; +typedef double EdsLib_Internal_Float_t; /* * Use the math library calls without the "l" suffix * These should operate on regular doubles */ -#define EDSLIB_FABS fabs -#define EDSLIB_LDEXP ldexp -#define EDSLIB_FREXP frexp -#define EDSLIB_MODF modf -#define EDSLIB_FLOAT_C(x) (x) +#define EDSLIB_FABS fabs +#define EDSLIB_LDEXP ldexp +#define EDSLIB_FREXP frexp +#define EDSLIB_MODF modf +#define EDSLIB_FLOAT_C(x) (x) #endif /** @@ -118,41 +117,45 @@ typedef double EdsLib_Internal_Float_t; */ typedef enum { - LEADING_PAD_UNDEFINED = 0, /**< Unknown or no leading invalid bits */ - LEADING_PAD_MSB, /**< MSB from leading byte(s) are invalid */ - LEADING_PAD_LSB /**< LSB From leading byte(s) are invalid */ + LEADING_PAD_UNDEFINED = 0, /**< Unknown or no leading invalid bits */ + LEADING_PAD_MSB, /**< MSB from leading byte(s) are invalid */ + LEADING_PAD_LSB /**< LSB From leading byte(s) are invalid */ } EdsLib_BitPackLeadingPad_Enum_t; - typedef struct { EdsLib_NumberByteOrder_Enum_t ByteOrder; - EdsLib_BasicType_t IntermediateType; - size_t IntermediateSize; - ptrdiff_t MemStride; - ptrdiff_t LeadingPadBits; - ptrdiff_t TrailingPadBits; - int32_t IntermediateShift; - bool Invert; + EdsLib_BasicType_t IntermediateType; + size_t IntermediateSize; + ptrdiff_t MemStride; + ptrdiff_t LeadingPadBits; + ptrdiff_t TrailingPadBits; + int32_t IntermediateShift; + bool Invert; } EdsLib_Internal_PackStyleInfo_t; -typedef size_t (*EdsLib_Internal_PackFunc_t)(EdsLib_GenericValueBuffer_t *ValBuf, const uint8_t *SrcPtr, size_t SrcSizeBytes, EdsLib_NumberEncoding_Enum_t EncodingStyle, uint32_t EncodingBits); -typedef void (*EdsLib_Internal_UnpackFunc_t)(uint8_t *DstPtr, size_t DstSizeBytes, EdsLib_GenericValueBuffer_t *ValBuf, EdsLib_NumberEncoding_Enum_t EncodingStyle, uint32_t EncodingBits); - +typedef size_t (*EdsLib_Internal_PackFunc_t)(EdsLib_GenericValueBuffer_t *ValBuf, + const uint8_t *SrcPtr, + size_t SrcSizeBytes, + EdsLib_NumberEncoding_Enum_t EncodingStyle, + uint32_t EncodingBits); +typedef void (*EdsLib_Internal_UnpackFunc_t)(uint8_t *DstPtr, + size_t DstSizeBytes, + EdsLib_GenericValueBuffer_t *ValBuf, + EdsLib_NumberEncoding_Enum_t EncodingStyle, + uint32_t EncodingBits); static const union { - uint16_t Value; - int8_t Bytes[2]; -} EDSLIB_NATIVE_BYTEORDER = { 0x0102 }; + uint16_t Value; + int8_t Bytes[2]; +} EDSLIB_NATIVE_BYTEORDER = { 0x0102 }; /* An expression that evaluates to 1 on big endian and -1 on little endian */ -#define EDSLIB_BIG_ENDIAN_STRIDE \ - (EDSLIB_NATIVE_BYTEORDER.Bytes[1] - EDSLIB_NATIVE_BYTEORDER.Bytes[0]) +#define EDSLIB_BIG_ENDIAN_STRIDE (EDSLIB_NATIVE_BYTEORDER.Bytes[1] - EDSLIB_NATIVE_BYTEORDER.Bytes[0]) /* An expression that evaluates to 1 on little endian and -1 on big endian */ -#define EDSLIB_LITTLE_ENDIAN_STRIDE \ - (EDSLIB_NATIVE_BYTEORDER.Bytes[0] - EDSLIB_NATIVE_BYTEORDER.Bytes[1]) +#define EDSLIB_LITTLE_ENDIAN_STRIDE (EDSLIB_NATIVE_BYTEORDER.Bytes[0] - EDSLIB_NATIVE_BYTEORDER.Bytes[1]) /* * An expression that evaluates to 1 on big endian and 2 on little endian machines @@ -160,33 +163,33 @@ static const union * EDSLIB_DATATYPE_FLAG_PACKED_BE * EDSLIB_DATATYPE_FLAG_PACKED_LE */ -#define EDSLIB_NATIVE_BYTE_PACK (EDSLIB_NATIVE_BYTEORDER.Bytes[0]) +#define EDSLIB_NATIVE_BYTE_PACK (EDSLIB_NATIVE_BYTEORDER.Bytes[0]) /*---------------------------------------------------------------- * * EdsLib local helper function * *-----------------------------------------------------------------*/ -static bool EdsLib_Internal_GetPackStyle(EdsLib_Internal_PackStyleInfo_t *PackStyle, const EdsLib_DataTypeDB_Entry_t *DataDictPtr) +static bool EdsLib_Internal_GetPackStyle(EdsLib_Internal_PackStyleInfo_t *PackStyle, + const EdsLib_DataTypeDB_Entry_t *DataDictPtr) { - bool IsValid = true; + bool IsValid = true; EdsLib_BasicType_t RefType; - size_t RefSize; - ptrdiff_t PadBits; + size_t RefSize; + ptrdiff_t PadBits; memset(PackStyle, 0, sizeof(*PackStyle)); - if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_SIGNED_INT || - DataDictPtr->BasicType == EDSLIB_BASICTYPE_UNSIGNED_INT || - DataDictPtr->BasicType == EDSLIB_BASICTYPE_FLOAT) + if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_SIGNED_INT || DataDictPtr->BasicType == EDSLIB_BASICTYPE_UNSIGNED_INT + || DataDictPtr->BasicType == EDSLIB_BASICTYPE_FLOAT) { - PackStyle->Invert = (DataDictPtr->Detail.Number.BitInvertFlag != 0); + PackStyle->Invert = (DataDictPtr->Detail.Number.BitInvertFlag != 0); PackStyle->ByteOrder = DataDictPtr->Detail.Number.ByteOrder; if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_SIGNED_INT) { - if (DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_BCD_OCTET || - DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_BCD_PACKED) + if (DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_BCD_OCTET + || DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_BCD_PACKED) { PackStyle->IntermediateType = EDSLIB_BASICTYPE_BINARY; /* anticipated intermediate */ PackStyle->IntermediateSize = EdsLib_BITS_TO_OCTETS(DataDictPtr->SizeInfo.Bits); @@ -195,8 +198,8 @@ static bool EdsLib_Internal_GetPackStyle(EdsLib_Internal_PackStyleInfo_t *PackSt IsValid = false; } } - else if (DataDictPtr->Detail.Number.Encoding != EDSLIB_NUMBERENCODING_TWOS_COMPLEMENT && - DataDictPtr->Detail.Number.Encoding != EDSLIB_NUMBERENCODING_UNDEFINED) + else if (DataDictPtr->Detail.Number.Encoding != EDSLIB_NUMBERENCODING_TWOS_COMPLEMENT + && DataDictPtr->Detail.Number.Encoding != EDSLIB_NUMBERENCODING_UNDEFINED) { PackStyle->IntermediateType = EDSLIB_BASICTYPE_UNSIGNED_INT; /* anticipated intermediate */ PackStyle->IntermediateSize = sizeof(EdsLib_Generic_UnsignedInt_t); @@ -228,8 +231,8 @@ static bool EdsLib_Internal_GetPackStyle(EdsLib_Internal_PackStyleInfo_t *PackSt IsValid = false; } } - else if (DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_IEEE_754 || - DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_UNDEFINED) + else if (DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_IEEE_754 + || DataDictPtr->Detail.Number.Encoding == EDSLIB_NUMBERENCODING_UNDEFINED) { /* * IEEE-754 supports encodings of 32, 64, or 128 bits. @@ -341,7 +344,7 @@ static bool EdsLib_Internal_GetPackStyle(EdsLib_Internal_PackStyleInfo_t *PackSt * This shift also helps when unpacking, as it can be used to * sign-extend twos complement data as needed. */ - PackStyle->MemStride = EDSLIB_LITTLE_ENDIAN_STRIDE; + PackStyle->MemStride = EDSLIB_LITTLE_ENDIAN_STRIDE; PackStyle->IntermediateShift = PadBits; } @@ -372,7 +375,7 @@ static bool EdsLib_Internal_GetPackStyle(EdsLib_Internal_PackStyleInfo_t *PackSt * can be used to sign-extend twos complement data. This * puts extra bits into the last byte LSB instead. */ - PackStyle->MemStride = EDSLIB_BIG_ENDIAN_STRIDE; + PackStyle->MemStride = EDSLIB_BIG_ENDIAN_STRIDE; PackStyle->IntermediateShift = PadBits; } @@ -389,137 +392,139 @@ static bool EdsLib_Internal_GetPackStyle(EdsLib_Internal_PackStyleInfo_t *PackSt * EdsLib local helper function * *-----------------------------------------------------------------*/ -static size_t EdsLib_Internal_DoSignedIntPack(EdsLib_GenericValueUnion_t *ValBuf, const uint8_t *SrcPtr, size_t SrcSizeBytes, EdsLib_NumberEncoding_Enum_t EncodingStyle, uint32_t EncodingBits) +static size_t EdsLib_Internal_DoSignedIntPack(EdsLib_GenericValueUnion_t *ValBuf, + const uint8_t *SrcPtr, + size_t SrcSizeBytes, + EdsLib_NumberEncoding_Enum_t EncodingStyle, + uint32_t EncodingBits) { - EdsLib_ConstPtr_t TempSrc = { .Addr = SrcPtr }; + EdsLib_ConstPtr_t TempSrc = { .Addr = SrcPtr }; EdsLib_Generic_UnsignedInt_t TempUnsigned; - size_t ConvSize; + size_t ConvSize; - switch(SrcSizeBytes) + switch (SrcSizeBytes) { - case sizeof(TempSrc.u->i8): - ValBuf->SignedInteger = TempSrc.u->i8; - break; - case sizeof(TempSrc.u->i16): - ValBuf->SignedInteger = TempSrc.u->i16; - break; - case sizeof(TempSrc.u->i32): - ValBuf->SignedInteger = TempSrc.u->i32; - break; - case sizeof(TempSrc.u->i64): - ValBuf->SignedInteger = TempSrc.u->i64; - break; - default: - /* should never happen, but avoid leaving garbage data into the output */ - ValBuf->SignedInteger = 0; - break; + case sizeof(TempSrc.u->i8): + ValBuf->SignedInteger = TempSrc.u->i8; + break; + case sizeof(TempSrc.u->i16): + ValBuf->SignedInteger = TempSrc.u->i16; + break; + case sizeof(TempSrc.u->i32): + ValBuf->SignedInteger = TempSrc.u->i32; + break; + case sizeof(TempSrc.u->i64): + ValBuf->SignedInteger = TempSrc.u->i64; + break; + default: + /* should never happen, but avoid leaving garbage data into the output */ + ValBuf->SignedInteger = 0; + break; } - switch(EncodingStyle) + switch (EncodingStyle) { - case EDSLIB_NUMBERENCODING_SIGN_MAGNITUDE: - { - if (ValBuf->SignedInteger < 0) - { - /* convert to a positive unsigned, and set the sign bit */ - TempUnsigned = -ValBuf->SignedInteger; - TempUnsigned |= 1ULL << (EncodingBits-1); - } - else + case EDSLIB_NUMBERENCODING_SIGN_MAGNITUDE: { - TempUnsigned = ValBuf->SignedInteger; + if (ValBuf->SignedInteger < 0) + { + /* convert to a positive unsigned, and set the sign bit */ + TempUnsigned = -ValBuf->SignedInteger; + TempUnsigned |= 1ULL << (EncodingBits - 1); + } + else + { + TempUnsigned = ValBuf->SignedInteger; + } + ValBuf->UnsignedInteger = TempUnsigned; + ConvSize = sizeof(ValBuf->UnsignedInteger); + break; } - ValBuf->UnsignedInteger = TempUnsigned; - ConvSize = sizeof(ValBuf->UnsignedInteger); - break; - } - case EDSLIB_NUMBERENCODING_ONES_COMPLEMENT: - { - if (ValBuf->SignedInteger < 0) + case EDSLIB_NUMBERENCODING_ONES_COMPLEMENT: { - /* convert to a positive unsigned, and invert all bits */ - TempUnsigned = -ValBuf->SignedInteger; - TempUnsigned = ~TempUnsigned; + if (ValBuf->SignedInteger < 0) + { + /* convert to a positive unsigned, and invert all bits */ + TempUnsigned = -ValBuf->SignedInteger; + TempUnsigned = ~TempUnsigned; + } + else + { + TempUnsigned = ValBuf->SignedInteger; + } + ValBuf->UnsignedInteger = TempUnsigned; + ConvSize = sizeof(ValBuf->UnsignedInteger); + break; } - else + case EDSLIB_NUMBERENCODING_BCD_OCTET: { - TempUnsigned = ValBuf->SignedInteger; - } - ValBuf->UnsignedInteger = TempUnsigned; - ConvSize = sizeof(ValBuf->UnsignedInteger); - break; - } - case EDSLIB_NUMBERENCODING_BCD_OCTET: - { - char *p = ValBuf->StringData; - uint8_t *q = ValBuf->BinaryData; - size_t len = sizeof(ValBuf->StringData); + char *p = ValBuf->StringData; + uint8_t *q = ValBuf->BinaryData; + size_t len = sizeof(ValBuf->StringData); - snprintf(p, len, "%0*lld", - (int)(EncodingBits / 8), ValBuf->SignedInteger); - len = strlen(p); - ConvSize = len; + snprintf(p, len, "%0*lld", (int)(EncodingBits / 8), ValBuf->SignedInteger); + len = strlen(p); + ConvSize = len; - while(len > 0) - { - if (isdigit((int)*p)) + while (len > 0) { - *q = (unsigned int)(*p - '0'); + if (isdigit((int)*p)) + { + *q = (unsigned int)(*p - '0'); + } + ++p; + ++q; + --len; } - ++p; - ++q; - --len; + break; } - break; - } - case EDSLIB_NUMBERENCODING_BCD_PACKED: - { - char *p = ValBuf->StringData; - uint8_t *q = ValBuf->BinaryData; - size_t len = sizeof(ValBuf->StringData); - uint8_t out; + case EDSLIB_NUMBERENCODING_BCD_PACKED: + { + char *p = ValBuf->StringData; + uint8_t *q = ValBuf->BinaryData; + size_t len = sizeof(ValBuf->StringData); + uint8_t out; - snprintf(p, len, "%0*lld", - (int)(EncodingBits / 4), ValBuf->SignedInteger); - len = (strlen(p) + 1) / 2; - ConvSize = len; + snprintf(p, len, "%0*lld", (int)(EncodingBits / 4), ValBuf->SignedInteger); + len = (strlen(p) + 1) / 2; + ConvSize = len; - /* - * NOTE: This doesn't handle negative values properly. - * The SOIS Red Book is not exactly clear on this. - */ - while(len > 0) - { - out = 0; - if (isdigit((int)p[0])) - { - out |= (unsigned int)(p[0] - '0') << 4; - } - if (isdigit((int)p[1])) + /* + * NOTE: This doesn't handle negative values properly. + * The SOIS Red Book is not exactly clear on this. + */ + while (len > 0) { - out |= (unsigned int)(p[1] - '0'); + out = 0; + if (isdigit((int)p[0])) + { + out |= (unsigned int)(p[0] - '0') << 4; + } + if (isdigit((int)p[1])) + { + out |= (unsigned int)(p[1] - '0'); + } + *q = out; + p += 2; + ++q; + --len; } - *q = out; - p += 2; - ++q; - --len; + break; + } + case EDSLIB_NUMBERENCODING_TWOS_COMPLEMENT: + case EDSLIB_NUMBERENCODING_UNDEFINED: + { + /* default encoding type is a pass thru + * This should work on twos complement machines, + * which is basically everything. */ + ConvSize = sizeof(ValBuf->SignedInteger); + break; + } + default: + { + ConvSize = 0; + break; } - break; - } - case EDSLIB_NUMBERENCODING_TWOS_COMPLEMENT: - case EDSLIB_NUMBERENCODING_UNDEFINED: - { - /* default encoding type is a pass thru - * This should work on twos complement machines, - * which is basically everything. */ - ConvSize = sizeof(ValBuf->SignedInteger); - break; - } - default: - { - ConvSize = 0; - break; - } } return ConvSize; @@ -531,9 +536,12 @@ static size_t EdsLib_Internal_DoSignedIntPack(EdsLib_GenericValueUnion_t *ValBuf * Packs a float value according to MIL-STD-1750A * *-----------------------------------------------------------------*/ -static size_t EdsLib_Internal_DoFloatPack_MilStd1750A(EdsLib_GenericValueUnion_t *ValBuf, uint32_t EncodingBits, EdsLib_Internal_Float_t Significand, int32_t Exponent) +static size_t EdsLib_Internal_DoFloatPack_MilStd1750A(EdsLib_GenericValueUnion_t *ValBuf, + uint32_t EncodingBits, + EdsLib_Internal_Float_t Significand, + int32_t Exponent) { - size_t ConvSize; + size_t ConvSize; uint64_t MantissaBits; uint32_t Temp32; @@ -551,7 +559,7 @@ static size_t EdsLib_Internal_DoFloatPack_MilStd1750A(EdsLib_GenericValueUnion_t { /* Zero is represented by all fields set to zero */ MantissaBits = 0; - Exponent = 0; + Exponent = 0; } else if (Significand == EDSLIB_FLOAT_C(-0.5)) { @@ -561,16 +569,16 @@ static size_t EdsLib_Internal_DoFloatPack_MilStd1750A(EdsLib_GenericValueUnion_t } /* Get 40 bits worth of mantissa (signed twos complement) */ - MantissaBits = EDSLIB_LDEXP(Significand,39); + MantissaBits = EDSLIB_LDEXP(Significand, 39); /* Pack into the uint32, filling all 32 bits of it */ - Temp32 = (uint32_t)(MantissaBits >> 8) & 0xFFFFFF00; + Temp32 = (uint32_t)(MantissaBits >> 8) & 0xFFFFFF00; Temp32 |= (uint32_t)Exponent & 0xFF; if (EncodingBits == 32) { ValBuf->u32 = Temp32; - ConvSize = sizeof(ValBuf->u32); + ConvSize = sizeof(ValBuf->u32); } else if (EncodingBits == 48) { @@ -580,9 +588,9 @@ static size_t EdsLib_Internal_DoFloatPack_MilStd1750A(EdsLib_GenericValueUnion_t * * This will be held in the uint64_t value, with 48 bits valid. */ - ValBuf->u64 = Temp32; /* extend to 64 bits first */ + ValBuf->u64 = Temp32; /* extend to 64 bits first */ ValBuf->u64 = (ValBuf->u64 << 16) | (MantissaBits & 0xFFFF); - ConvSize = sizeof(ValBuf->u64); + ConvSize = sizeof(ValBuf->u64); } else { @@ -599,10 +607,13 @@ static size_t EdsLib_Internal_DoFloatPack_MilStd1750A(EdsLib_GenericValueUnion_t * Packs a float value according to IEEE-754 * *-----------------------------------------------------------------*/ -static size_t EdsLib_Internal_DoFloatPack_Ieee754(EdsLib_GenericValueUnion_t *ValBuf, uint32_t EncodingBits, EdsLib_Internal_Float_t Significand, int32_t Exponent) +static size_t EdsLib_Internal_DoFloatPack_Ieee754(EdsLib_GenericValueUnion_t *ValBuf, + uint32_t EncodingBits, + EdsLib_Internal_Float_t Significand, + int32_t Exponent) { - size_t ConvSize; - size_t x; + size_t ConvSize; + size_t x; EdsLib_Internal_Float_t Frac; EdsLib_Internal_Float_t Whole; @@ -635,9 +646,9 @@ static size_t EdsLib_Internal_DoFloatPack_Ieee754(EdsLib_GenericValueUnion_t *Va /* Fill all bits of mantissa value from MSB to LSB. */ Frac *= EDSLIB_FLOAT_C(2.0); - for (x=2; x < 16; ++x) + for (x = 2; x < 16; ++x) { - Frac = EDSLIB_MODF(EDSLIB_LDEXP(Frac, 8), &Whole); + Frac = EDSLIB_MODF(EDSLIB_LDEXP(Frac, 8), &Whole); ValBuf->BinaryData[x] = ((uint8_t)Whole) & 0xFF; } } @@ -654,7 +665,7 @@ static size_t EdsLib_Internal_DoFloatPack_Ieee754(EdsLib_GenericValueUnion_t *Va } else { - ValBuf->u64 = EDSLIB_LDEXP(Frac,53); + ValBuf->u64 = EDSLIB_LDEXP(Frac, 53); ValBuf->u64 &= UINT64_C(0xFFFFFFFFFFFFF); ValBuf->u64 |= ((uint64_t)((Exponent + 1022) & 0x7FF)) << 52; @@ -677,7 +688,7 @@ static size_t EdsLib_Internal_DoFloatPack_Ieee754(EdsLib_GenericValueUnion_t *Va } else { - ValBuf->u32 = EDSLIB_LDEXP(Frac,24); + ValBuf->u32 = EDSLIB_LDEXP(Frac, 24); ValBuf->u32 &= UINT32_C(0x7FFFFF); ValBuf->u32 |= (uint32_t)((Exponent + 126) & 0xFF) << 23; @@ -703,7 +714,11 @@ static size_t EdsLib_Internal_DoFloatPack_Ieee754(EdsLib_GenericValueUnion_t *Va * EdsLib local helper function * *-----------------------------------------------------------------*/ -static size_t EdsLib_Internal_DoFloatPack(EdsLib_GenericValueUnion_t *ValBuf, const uint8_t *SrcPtr, size_t SrcSizeBytes, EdsLib_NumberEncoding_Enum_t EncodingStyle, uint32_t EncodingBits) +static size_t EdsLib_Internal_DoFloatPack(EdsLib_GenericValueUnion_t *ValBuf, + const uint8_t *SrcPtr, + size_t SrcSizeBytes, + EdsLib_NumberEncoding_Enum_t EncodingStyle, + uint32_t EncodingBits) { /* * All floating point notations (including the less common ones) express @@ -719,9 +734,9 @@ static size_t EdsLib_Internal_DoFloatPack(EdsLib_GenericValueUnion_t *ValBuf, co * in a future version if there is a need for these exception values). */ EdsLib_ConstPtr_t TempSrc = { .Addr = SrcPtr }; - size_t ConvSize; + size_t ConvSize; - int Exponent = 0; + int Exponent = 0; EdsLib_Internal_Float_t Significand = EDSLIB_FLOAT_C(0.0); /* the base-2 exponent/mantissa can be extracted using the @@ -743,8 +758,7 @@ static size_t EdsLib_Internal_DoFloatPack(EdsLib_GenericValueUnion_t *ValBuf, co { ConvSize = EdsLib_Internal_DoFloatPack_MilStd1750A(ValBuf, EncodingBits, Significand, Exponent); } - else if (EncodingStyle == EDSLIB_NUMBERENCODING_IEEE_754 || - EncodingStyle == EDSLIB_NUMBERENCODING_UNDEFINED) + else if (EncodingStyle == EDSLIB_NUMBERENCODING_IEEE_754 || EncodingStyle == EDSLIB_NUMBERENCODING_UNDEFINED) { ConvSize = EdsLib_Internal_DoFloatPack_Ieee754(ValBuf, EncodingBits, Significand, Exponent); } @@ -762,15 +776,18 @@ static size_t EdsLib_Internal_DoFloatPack(EdsLib_GenericValueUnion_t *ValBuf, co * EdsLib local helper function * *-----------------------------------------------------------------*/ -static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr, const EdsLib_DataTypeDB_Entry_t *DataDictPtr, uint32_t DstBitOffset) +static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, + const uint8_t *SrcPtr, + const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + uint32_t DstBitOffset) { - uint32_t ShiftRegister; - uint32_t HighBitPos; - uint32_t TotalBits; - EdsLib_GenericValueUnion_t NumBuf; - const uint8_t *LoadPtr; + uint32_t ShiftRegister; + uint32_t HighBitPos; + uint32_t TotalBits; + EdsLib_GenericValueUnion_t NumBuf; + const uint8_t *LoadPtr; EdsLib_Internal_PackStyleInfo_t Pack; - size_t ConvSize; + size_t ConvSize; LoadPtr = NULL; @@ -811,23 +828,28 @@ static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr } /* Do conversion to intermediate type, if indicated */ - if (Pack.IntermediateType == EDSLIB_BASICTYPE_NONE || - Pack.IntermediateSize == 0) + if (Pack.IntermediateType == EDSLIB_BASICTYPE_NONE || Pack.IntermediateSize == 0) { - LoadPtr = SrcPtr; + LoadPtr = SrcPtr; ConvSize = DataDictPtr->SizeInfo.Bytes; } else { if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_SIGNED_INT) { - ConvSize = EdsLib_Internal_DoSignedIntPack(&NumBuf, SrcPtr, DataDictPtr->SizeInfo.Bytes, - DataDictPtr->Detail.Number.Encoding, DataDictPtr->SizeInfo.Bits); + ConvSize = EdsLib_Internal_DoSignedIntPack(&NumBuf, + SrcPtr, + DataDictPtr->SizeInfo.Bytes, + DataDictPtr->Detail.Number.Encoding, + DataDictPtr->SizeInfo.Bits); } else if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_FLOAT) { - ConvSize = EdsLib_Internal_DoFloatPack(&NumBuf, SrcPtr, DataDictPtr->SizeInfo.Bytes, - DataDictPtr->Detail.Number.Encoding, DataDictPtr->SizeInfo.Bits); + ConvSize = EdsLib_Internal_DoFloatPack(&NumBuf, + SrcPtr, + DataDictPtr->SizeInfo.Bytes, + DataDictPtr->Detail.Number.Encoding, + DataDictPtr->SizeInfo.Bits); } else { @@ -840,7 +862,7 @@ static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr /* error: pack routine did not output * expected size object */ NumBuf.BinaryData[0] = 0xFF; - Pack.MemStride = 0; + Pack.MemStride = 0; } } @@ -848,51 +870,50 @@ static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr { EdsLib_ConstPtr_t Src = { .Addr = LoadPtr }; - switch(ConvSize) + switch (ConvSize) { - case sizeof(Src.u->u8): - NumBuf.u8 = Src.u->u8 << Pack.IntermediateShift; - break; - case sizeof(Src.u->u16): - NumBuf.u16 = Src.u->u16 << Pack.IntermediateShift; - break; - case sizeof(Src.u->u32): - NumBuf.u32 = Src.u->u32 << Pack.IntermediateShift; - break; - case sizeof(Src.u->u64): - NumBuf.u64 = Src.u->u64 << Pack.IntermediateShift; - break; - default: - /* error/invalid */ - break; - } - - LoadPtr = NumBuf.BinaryData; - - if (Pack.Invert) - { - switch(ConvSize) - { case sizeof(Src.u->u8): - NumBuf.u8 ^= UINT8_C(0xFF); + NumBuf.u8 = Src.u->u8 << Pack.IntermediateShift; break; case sizeof(Src.u->u16): - NumBuf.u16 ^= UINT16_C(0xFFFF); + NumBuf.u16 = Src.u->u16 << Pack.IntermediateShift; break; case sizeof(Src.u->u32): - NumBuf.u32 ^= UINT32_C(0xFFFFFFFF); + NumBuf.u32 = Src.u->u32 << Pack.IntermediateShift; break; case sizeof(Src.u->u64): - NumBuf.u64 ^= UINT64_C(0xFFFFFFFFFFFFFFFF); + NumBuf.u64 = Src.u->u64 << Pack.IntermediateShift; break; default: /* error/invalid */ break; + } + + LoadPtr = NumBuf.BinaryData; + + if (Pack.Invert) + { + switch (ConvSize) + { + case sizeof(Src.u->u8): + NumBuf.u8 ^= UINT8_C(0xFF); + break; + case sizeof(Src.u->u16): + NumBuf.u16 ^= UINT16_C(0xFFFF); + break; + case sizeof(Src.u->u32): + NumBuf.u32 ^= UINT32_C(0xFFFFFFFF); + break; + case sizeof(Src.u->u64): + NumBuf.u64 ^= UINT64_C(0xFFFFFFFFFFFFFFFF); + break; + default: + /* error/invalid */ + break; } } } - /* * Prepare to copy the encoded value to the output buffer. * @@ -963,11 +984,11 @@ static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr { /* preload ShiftRegister with exiting bits in output buffer * This avoids clobbering any partial byte that was already packed */ - ShiftRegister = *DstPtr; + ShiftRegister = *DstPtr; ShiftRegister >>= 8 - DstBitOffset; } HighBitPos = DstBitOffset; - TotalBits = HighBitPos + DataDictPtr->SizeInfo.Bits; + TotalBits = HighBitPos + DataDictPtr->SizeInfo.Bits; /* * If the first octet is not a whole octet, @@ -981,39 +1002,39 @@ static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr LoadPtr += (Pack.LeadingPadBits / 8) * Pack.MemStride; /* skip whole bytes */ /* Load the entire byte, then right-shift out the padding */ - ShiftRegister = (ShiftRegister << 8) | *LoadPtr; + ShiftRegister = (ShiftRegister << 8) | *LoadPtr; ShiftRegister >>= RemainderBits; - HighBitPos += 8 - RemainderBits; /* add number of REAL bits */ + HighBitPos += 8 - RemainderBits; /* add number of REAL bits */ - LoadPtr += Pack.MemStride; /* account for leading byte just loaded */ + LoadPtr += Pack.MemStride; /* account for leading byte just loaded */ } /* Now load entire bytes into the shift register */ - while(TotalBits > HighBitPos) + while (TotalBits > HighBitPos) { if (HighBitPos < 24) { /* Read 8 more bits of data from source into bottom of Shift Register */ - ShiftRegister = (ShiftRegister << 8) | *LoadPtr; - HighBitPos += 8; - LoadPtr += Pack.MemStride; + ShiftRegister = (ShiftRegister << 8) | *LoadPtr; + HighBitPos += 8; + LoadPtr += Pack.MemStride; } else { /* Output 8 bits of data from top of shift register to destination */ HighBitPos -= 8; - TotalBits -= 8; - *DstPtr = ShiftRegister >> HighBitPos; + TotalBits -= 8; + *DstPtr = ShiftRegister >> HighBitPos; ++DstPtr; } } /* Output any remaining full octets */ - while(TotalBits >= 8) + while (TotalBits >= 8) { HighBitPos -= 8; - TotalBits -= 8; - *DstPtr = ShiftRegister >> HighBitPos; + TotalBits -= 8; + *DstPtr = ShiftRegister >> HighBitPos; ++DstPtr; } @@ -1032,8 +1053,8 @@ static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr * This is important when updating a field in the middle of * a packet, such as a CRC/Checksum. */ ShiftRegister |= *DstPtr & ((1U << (8 - TotalBits)) - 1); - *DstPtr = ShiftRegister; - HighBitPos = 0; + *DstPtr = ShiftRegister; + HighBitPos = 0; } } @@ -1042,117 +1063,121 @@ static void EdsLib_Internal_DoBitwisePack(uint8_t *DstPtr, const uint8_t *SrcPtr * EdsLib local helper function * *-----------------------------------------------------------------*/ -static void EdsLib_Internal_DoSignedIntUnpack(uint8_t *DstPtr, size_t DstSizeBytes, EdsLib_GenericValueUnion_t *ValBuf, EdsLib_NumberEncoding_Enum_t EncodingStyle, uint32_t EncodingBits) +static void EdsLib_Internal_DoSignedIntUnpack(uint8_t *DstPtr, + size_t DstSizeBytes, + EdsLib_GenericValueUnion_t *ValBuf, + EdsLib_NumberEncoding_Enum_t EncodingStyle, + uint32_t EncodingBits) { - EdsLib_Ptr_t TempDst = { .Addr = DstPtr }; - EdsLib_Generic_SignedInt_t TempSigned; + EdsLib_Ptr_t TempDst = { .Addr = DstPtr }; + EdsLib_Generic_SignedInt_t TempSigned; EdsLib_Generic_UnsignedInt_t SignBit; - uint32_t count; - uint8_t digit; + uint32_t count; + uint8_t digit; TempSigned = 0; - switch(EncodingStyle) - { - case EDSLIB_NUMBERENCODING_SIGN_MAGNITUDE: - { - SignBit = ((EdsLib_Generic_UnsignedInt_t)1) << (EncodingBits-1); - if (ValBuf->UnsignedInteger & SignBit) - { - /* convert to a negative signed */ - TempSigned = 0 - (ValBuf->UnsignedInteger & (SignBit - 1)); - } - else - { - TempSigned = ValBuf->UnsignedInteger; - } - break; - } - case EDSLIB_NUMBERENCODING_ONES_COMPLEMENT: - { - SignBit = ((EdsLib_Generic_UnsignedInt_t)1) << (EncodingBits-1); - if (ValBuf->UnsignedInteger & SignBit) - { - /* convert to a negative signed, and invert all bits */ - TempSigned = 0 - (~ValBuf->UnsignedInteger & (SignBit - 1)); - } - else - { - TempSigned = ValBuf->UnsignedInteger; - } - break; - } - case EDSLIB_NUMBERENCODING_BCD_OCTET: + switch (EncodingStyle) { - count = 0; - while(count < EncodingBits) + case EDSLIB_NUMBERENCODING_SIGN_MAGNITUDE: { - digit = ValBuf->BinaryData[count >> 3]; - if (digit < 10) + SignBit = ((EdsLib_Generic_UnsignedInt_t)1) << (EncodingBits - 1); + if (ValBuf->UnsignedInteger & SignBit) { - TempSigned = (TempSigned * 10) + digit; + /* convert to a negative signed */ + TempSigned = 0 - (ValBuf->UnsignedInteger & (SignBit - 1)); } - count += 8; + else + { + TempSigned = ValBuf->UnsignedInteger; + } + break; } - if (ValBuf->StringData[0] == '-') + case EDSLIB_NUMBERENCODING_ONES_COMPLEMENT: { - TempSigned = -TempSigned; - } - break; - } - case EDSLIB_NUMBERENCODING_BCD_PACKED: - { - count = 0; - while(count < EncodingBits) - { - digit = ValBuf->BinaryData[count >> 3]; - if (digit == '-') + SignBit = ((EdsLib_Generic_UnsignedInt_t)1) << (EncodingBits - 1); + if (ValBuf->UnsignedInteger & SignBit) { - count += 8; + /* convert to a negative signed, and invert all bits */ + TempSigned = 0 - (~ValBuf->UnsignedInteger & (SignBit - 1)); } else { - digit >>= (~count & 4); - digit &= 0x0F; + TempSigned = ValBuf->UnsignedInteger; + } + break; + } + case EDSLIB_NUMBERENCODING_BCD_OCTET: + { + count = 0; + while (count < EncodingBits) + { + digit = ValBuf->BinaryData[count >> 3]; if (digit < 10) { TempSigned = (TempSigned * 10) + digit; } - count += 4; + count += 8; + } + if (ValBuf->StringData[0] == '-') + { + TempSigned = -TempSigned; + } + break; + } + case EDSLIB_NUMBERENCODING_BCD_PACKED: + { + count = 0; + while (count < EncodingBits) + { + digit = ValBuf->BinaryData[count >> 3]; + if (digit == '-') + { + count += 8; + } + else + { + digit >>= (~count & 4); + digit &= 0x0F; + if (digit < 10) + { + TempSigned = (TempSigned * 10) + digit; + } + count += 4; + } } + if (ValBuf->StringData[0] == '-') + { + TempSigned = -TempSigned; + } + break; } - if (ValBuf->StringData[0] == '-') + default: { - TempSigned = -TempSigned; + /* default encoding type is a pass thru. + * This should work on twos complement machines */ + break; } - break; - } - default: - { - /* default encoding type is a pass thru. - * This should work on twos complement machines */ - break; - } } - switch(DstSizeBytes) + switch (DstSizeBytes) { - case sizeof(TempDst.u->i8): - TempDst.u->i8 = TempSigned; - break; - case sizeof(TempDst.u->i16): - TempDst.u->i16 = TempSigned; - break; - case sizeof(TempDst.u->i32): - TempDst.u->i32 = TempSigned; - break; - case sizeof(TempDst.u->i64): - TempDst.u->i64 = TempSigned; - break; - default: - /* should never happen, but avoid leaving garbage data into the output */ - memset(TempDst.Ptr, 0, DstSizeBytes); - break; + case sizeof(TempDst.u->i8): + TempDst.u->i8 = TempSigned; + break; + case sizeof(TempDst.u->i16): + TempDst.u->i16 = TempSigned; + break; + case sizeof(TempDst.u->i32): + TempDst.u->i32 = TempSigned; + break; + case sizeof(TempDst.u->i64): + TempDst.u->i64 = TempSigned; + break; + default: + /* should never happen, but avoid leaving garbage data into the output */ + memset(TempDst.Ptr, 0, DstSizeBytes); + break; } } @@ -1161,7 +1186,11 @@ static void EdsLib_Internal_DoSignedIntUnpack(uint8_t *DstPtr, size_t DstSizeByt * EdsLib local helper function * *-----------------------------------------------------------------*/ -static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, EdsLib_GenericValueUnion_t *ValBuf, EdsLib_NumberEncoding_Enum_t EncodingStyle, uint32_t EncodingBits) +static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, + size_t DstSizeBytes, + EdsLib_GenericValueUnion_t *ValBuf, + EdsLib_NumberEncoding_Enum_t EncodingStyle, + uint32_t EncodingBits) { /* * All floating point notations (including the less common ones) express @@ -1176,11 +1205,11 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, * like NaN or Infinity it will currently encode a zero. (this could be fixed * in a future version if there is a need for these exception values). */ - EdsLib_Ptr_t TempDst = { .Addr = DstPtr }; - size_t x; - int Exponent = -1; - int64_t MantissaBits = 0; - EdsLib_Internal_Float_t Value = EDSLIB_FLOAT_C(0.0); + EdsLib_Ptr_t TempDst = { .Addr = DstPtr }; + size_t x; + int Exponent = -1; + int64_t MantissaBits = 0; + EdsLib_Internal_Float_t Value = EDSLIB_FLOAT_C(0.0); if (EncodingStyle == EDSLIB_NUMBERENCODING_MILSTD_1750A) { @@ -1189,7 +1218,7 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, if (EncodingBits == 32 && ValBuf->u32 != 0) { /* 24 bits of mantissa as sign bit + 23 bits, 8 bits of exponent */ - Exponent = (ValBuf->u32 & UINT32_C(0x000000FF)); + Exponent = (ValBuf->u32 & UINT32_C(0x000000FF)); MantissaBits = (ValBuf->u32 & UINT32_C(0xFFFFFF00)); /* Interpolate mantissa to 64 bits - @@ -1199,8 +1228,8 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, else if (EncodingBits == 48 && ValBuf->u64 != 0) { /* 40 actual bits of mantissa, split between sign bit, 23 bits and 16 bits */ - Exponent = (ValBuf->u64 & UINT64_C(0x000000FF0000)) >> 16; - MantissaBits = (ValBuf->u64 & UINT64_C(0xFFFFFF000000)) >> 8; + Exponent = (ValBuf->u64 & UINT64_C(0x000000FF0000)) >> 16; + MantissaBits = (ValBuf->u64 & UINT64_C(0xFFFFFF000000)) >> 8; MantissaBits |= (ValBuf->u64 & UINT64_C(0x00000000FFFF)); /* Interpolate mantissa to 64 bits - @@ -1211,7 +1240,7 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, if (Exponent >= 0) { Exponent -= (Exponent & 0x80) << 1; /* sign extend */ - Value = EDSLIB_LDEXP(MantissaBits, Exponent - 63); + Value = EDSLIB_LDEXP(MantissaBits, Exponent - 63); } } else if (EncodingStyle == EDSLIB_NUMBERENCODING_IEEE_754) @@ -1219,13 +1248,12 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, if (EncodingBits == 128) { /* The first two bytes are the sign and exponent */ - Exponent = ((ValBuf->BinaryData[0] & 0x7F) << 8) + - (ValBuf->BinaryData[1] & 0xFF); + Exponent = ((ValBuf->BinaryData[0] & 0x7F) << 8) + (ValBuf->BinaryData[1] & 0xFF); - for (x=15; x >= 2; --x) + for (x = 15; x >= 2; --x) { Value += ValBuf->BinaryData[x]; - Value = EDSLIB_LDEXP(Value,-8); + Value = EDSLIB_LDEXP(Value, -8); } if (Value != EDSLIB_FLOAT_C(0.0) || Exponent != 0) @@ -1242,7 +1270,7 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, { /* Interpret as uint64, mask out bits for IEEE double */ MantissaBits = (ValBuf->u64 & UINT64_C(0xFFFFFFFFFFFFF)); - Exponent = (ValBuf->u64 >> 52) & 0x7FF; + Exponent = (ValBuf->u64 >> 52) & 0x7FF; if (MantissaBits != 0 || Exponent != 0) { @@ -1254,7 +1282,7 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, { /* Interpret as uint32, mask out bits for IEEE single */ MantissaBits = (ValBuf->u32 & UINT32_C(0x7FFFFF)); - Exponent = (ValBuf->u32 >> 23) & 0xFF; + Exponent = (ValBuf->u32 >> 23) & 0xFF; if (MantissaBits != 0 || Exponent != 0) { @@ -1284,17 +1312,19 @@ static void EdsLib_Internal_DoFloatUnpack(uint8_t *DstPtr, size_t DstSizeBytes, * EdsLib local helper function * *-----------------------------------------------------------------*/ -static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcPtr, const EdsLib_DataTypeDB_Entry_t *DataDictPtr, uint32_t SrcBitOffset) +static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, + const uint8_t *SrcPtr, + const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + uint32_t SrcBitOffset) { - uint32_t ShiftRegister; - uint32_t LowBitPos; - uint32_t TotalBits; - EdsLib_GenericValueUnion_t NumBuf; - size_t FillBits; - uint8_t *StorePtr; + uint32_t ShiftRegister; + uint32_t LowBitPos; + uint32_t TotalBits; + EdsLib_GenericValueUnion_t NumBuf; + size_t FillBits; + uint8_t *StorePtr; EdsLib_Internal_PackStyleInfo_t Pack; - size_t ConvSize; - + size_t ConvSize; /* * General process of unpacking ints/floats @@ -1345,8 +1375,7 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP } /* Do conversion to intermediate type, if indicated */ - if (Pack.IntermediateType != EDSLIB_BASICTYPE_NONE && - Pack.IntermediateSize != 0) + if (Pack.IntermediateType != EDSLIB_BASICTYPE_NONE && Pack.IntermediateSize != 0) { StorePtr = NumBuf.BinaryData; ConvSize = Pack.IntermediateSize; @@ -1365,10 +1394,9 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP ConvSize = DataDictPtr->SizeInfo.Bytes; } - ShiftRegister = 0; - LowBitPos = 24 + SrcBitOffset; - TotalBits = SrcBitOffset + DataDictPtr->SizeInfo.Bits; + LowBitPos = 24 + SrcBitOffset; + TotalBits = SrcBitOffset + DataDictPtr->SizeInfo.Bits; /* * When reading in reverse order, @@ -1382,9 +1410,9 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP FillBits = 0; while ((FillBits + 8) <= Pack.LeadingPadBits) { - *StorePtr = 0; - StorePtr += Pack.MemStride; - FillBits += 8; + *StorePtr = 0; + StorePtr += Pack.MemStride; + FillBits += 8; } ConvSize *= 8; @@ -1403,8 +1431,8 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP /* This could have gotten some extra bits beyond the last valid bit * if so, clear them out of the shift register here */ ShiftRegister &= ~((UINT32_C(1) << (LowBitPos - TotalBits)) - 1); - TotalBits = 0; - LowBitPos = 0; + TotalBits = 0; + LowBitPos = 0; } else { @@ -1424,20 +1452,19 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP { /* store a partial octet - * the valid bits aligned to the MSB, and clear any LSBs */ - *StorePtr = (ShiftRegister >> 16) & - (((UINT32_C(1) << (Pack.LeadingPadBits - FillBits)) - 1) ^ 0xFF); + *StorePtr = (ShiftRegister >> 16) & (((UINT32_C(1) << (Pack.LeadingPadBits - FillBits)) - 1) ^ 0xFF); - FillBits += 8; + FillBits += 8; ShiftRegister <<= (FillBits - Pack.LeadingPadBits); - LowBitPos += (FillBits - Pack.LeadingPadBits); + LowBitPos += (FillBits - Pack.LeadingPadBits); } else { /* store a whole octet */ - *StorePtr = ShiftRegister >> 16; + *StorePtr = ShiftRegister >> 16; ShiftRegister <<= 8; - LowBitPos += 8; - FillBits += 8; + LowBitPos += 8; + FillBits += 8; } StorePtr += Pack.MemStride; } @@ -1446,38 +1473,38 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP /* Un-shift the numeric data if indicated */ if (Pack.Invert || Pack.IntermediateShift > 0) { - EdsLib_Ptr_t ShiftDst; + EdsLib_Ptr_t ShiftDst; EdsLib_BasicType_t ShiftType; if (Pack.IntermediateType != EDSLIB_BASICTYPE_NONE) { ShiftDst.u = &NumBuf; - ShiftType = Pack.IntermediateType; + ShiftType = Pack.IntermediateType; } else { - ShiftType = DataDictPtr->BasicType; + ShiftType = DataDictPtr->BasicType; ShiftDst.Addr = DstPtr; } if (Pack.Invert) { - switch(ConvSize) + switch (ConvSize) { - case 8: - NumBuf.u8 = ~NumBuf.u8; - break; - case 16: - NumBuf.u16 = ~NumBuf.u16; - break; - case 32: - NumBuf.u32 = ~NumBuf.u32; - break; - case 64: - NumBuf.u64 = ~NumBuf.u64; - break; - default: - break; + case 8: + NumBuf.u8 = ~NumBuf.u8; + break; + case 16: + NumBuf.u16 = ~NumBuf.u16; + break; + case 32: + NumBuf.u32 = ~NumBuf.u32; + break; + case 64: + NumBuf.u64 = ~NumBuf.u64; + break; + default: + break; } } @@ -1495,41 +1522,42 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP * But every machine should implement this correctly. * The alternative is to divide by 1<i8 = NumBuf.i8 >> Pack.IntermediateShift; - break; - case 16: - ShiftDst.u->i16 = NumBuf.i16 >> Pack.IntermediateShift; - break; - case 32: - ShiftDst.u->i32 = NumBuf.i32 >> Pack.IntermediateShift; - break; - case 64: - ShiftDst.u->i64 = NumBuf.i64 >> Pack.IntermediateShift; - break; - default: - break; + case 8: + ShiftDst.u->i8 = NumBuf.i8 >> Pack.IntermediateShift; + break; + case 16: + ShiftDst.u->i16 = NumBuf.i16 >> Pack.IntermediateShift; + break; + case 32: + ShiftDst.u->i32 = NumBuf.i32 >> Pack.IntermediateShift; + break; + case 64: + ShiftDst.u->i64 = NumBuf.i64 >> Pack.IntermediateShift; + break; + default: + break; } } - else switch(ConvSize) /* anything else is unsigned shift */ - { - case 8: - ShiftDst.u->u8 = NumBuf.u8 >> Pack.IntermediateShift; - break; - case 16: - ShiftDst.u->u16 = NumBuf.u16 >> Pack.IntermediateShift; - break; - case 32: - ShiftDst.u->u32 = NumBuf.u32 >> Pack.IntermediateShift; - break; - case 64: - ShiftDst.u->u64 = NumBuf.u64 >> Pack.IntermediateShift; - break; - default: - break; - } + else + switch (ConvSize) /* anything else is unsigned shift */ + { + case 8: + ShiftDst.u->u8 = NumBuf.u8 >> Pack.IntermediateShift; + break; + case 16: + ShiftDst.u->u16 = NumBuf.u16 >> Pack.IntermediateShift; + break; + case 32: + ShiftDst.u->u32 = NumBuf.u32 >> Pack.IntermediateShift; + break; + case 64: + ShiftDst.u->u64 = NumBuf.u64 >> Pack.IntermediateShift; + break; + default: + break; + } } /* @@ -1541,13 +1569,19 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP { if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_SIGNED_INT) { - EdsLib_Internal_DoSignedIntUnpack(DstPtr, DataDictPtr->SizeInfo.Bytes, &NumBuf, - DataDictPtr->Detail.Number.Encoding, DataDictPtr->SizeInfo.Bits); + EdsLib_Internal_DoSignedIntUnpack(DstPtr, + DataDictPtr->SizeInfo.Bytes, + &NumBuf, + DataDictPtr->Detail.Number.Encoding, + DataDictPtr->SizeInfo.Bits); } else if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_FLOAT) { - EdsLib_Internal_DoFloatUnpack(DstPtr, DataDictPtr->SizeInfo.Bytes, &NumBuf, - DataDictPtr->Detail.Number.Encoding, DataDictPtr->SizeInfo.Bits); + EdsLib_Internal_DoFloatUnpack(DstPtr, + DataDictPtr->SizeInfo.Bytes, + &NumBuf, + DataDictPtr->Detail.Number.Encoding, + DataDictPtr->SizeInfo.Bits); } } } @@ -1557,11 +1591,14 @@ static void EdsLib_Internal_DoBitwiseUnpack(uint8_t *DstPtr, const uint8_t *SrcP * EdsLib local helper function * *-----------------------------------------------------------------*/ -static int32_t EdsLib_DataTypePackUnpack_CheckPresence(const EdsLib_DatabaseObject_t *GD, - const EdsLib_IdentityCheckSequence_t *Presence, const void *Buffer, size_t MaxOffset, bool *Result) +static int32_t EdsLib_DataTypePackUnpack_CheckPresence(const EdsLib_DatabaseObject_t *GD, + const EdsLib_IdentityCheckSequence_t *Presence, + const void *Buffer, + size_t MaxOffset, + bool *Result) { const EdsLib_IdentSequenceEntry_t *IdentResultPtr; - int32_t RetCode; + int32_t RetCode; RetCode = EDSLIB_SUCCESS; @@ -1572,13 +1609,12 @@ static int32_t EdsLib_DataTypePackUnpack_CheckPresence(const EdsLib_DatabaseObje else if (Buffer == NULL) { /* buffer is needed because object is not fixed size */ - RetCode = EDSLIB_NOT_FIXED_SIZE; + RetCode = EDSLIB_NOT_FIXED_SIZE; IdentResultPtr = NULL; } else { - IdentResultPtr = EdsLib_DataTypeExecuteConstraintSequence_Impl(GD, - Presence, Buffer, MaxOffset); + IdentResultPtr = EdsLib_DataTypeExecuteConstraintSequence_Impl(GD, Presence, Buffer, MaxOffset); } if (IdentResultPtr == NULL) @@ -1605,45 +1641,45 @@ static int32_t EdsLib_DataTypePackUnpack_CheckPresence(const EdsLib_DatabaseObje * EdsLib local helper function * *-----------------------------------------------------------------*/ -static EdsLib_PackAction_t EdsLib_DataTypePackUnpack_GetPackAction( - const EdsLib_DataTypeDB_Entry_t *DataDictPtr, bool IsByteAligned) +static EdsLib_PackAction_t EdsLib_DataTypePackUnpack_GetPackAction(const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + bool IsByteAligned) { EdsLib_PackAction_t PackAction; - bool IsPacked; - bool IsByteOrderMatch; + bool IsPacked; + bool IsByteOrderMatch; PackAction = EDSLIB_PACKACTION_NONE; /* - * Determine if this field is a candidate for optimized handling, i.e. direct copy. - * - * If the data type is exactly equivalent to a C type with no embedded padding - * or unused bits, and (in the case of structures) has no special element types, - * then this flag should be set. This was determined by the EDS tool at compile time. - */ + * Determine if this field is a candidate for optimized handling, i.e. direct copy. + * + * If the data type is exactly equivalent to a C type with no embedded padding + * or unused bits, and (in the case of structures) has no special element types, + * then this flag should be set. This was determined by the EDS tool at compile time. + */ IsPacked = (DataDictPtr->Flags & EDSLIB_DATATYPE_FLAG_PACKED) != 0; /* - * Determine if the native byte-ordering matches that of the message format (typically big-endian) - * This determines if resulting bytes need to be inverted in memory or if they can be copied in-order - */ + * Determine if the native byte-ordering matches that of the message format (typically big-endian) + * This determines if resulting bytes need to be inverted in memory or if they can be copied in-order + */ IsByteOrderMatch = (DataDictPtr->Flags & EDSLIB_DATATYPE_FLAG_PACKED) == EDSLIB_NATIVE_BYTE_PACK; - switch(DataDictPtr->BasicType) + switch (DataDictPtr->BasicType) { case EDSLIB_BASICTYPE_CONTAINER: case EDSLIB_BASICTYPE_COMPONENT: case EDSLIB_BASICTYPE_ARRAY: { /* - * Optimization: - * 1) if the machine encoding is the same as the packed encoding - * 2) if the entire sub-structure does not contain any padding - * 3) The packed bits start on a byte boundary (so no shifting is required) - * - * THEN -- this can be a simple byte-wise memory copy operation, which will - * be much more efficient than iterating over all the sub-structure contents - */ + * Optimization: + * 1) if the machine encoding is the same as the packed encoding + * 2) if the entire sub-structure does not contain any padding + * 3) The packed bits start on a byte boundary (so no shifting is required) + * + * THEN -- this can be a simple byte-wise memory copy operation, which will + * be much more efficient than iterating over all the sub-structure contents + */ if (IsByteOrderMatch && IsPacked && IsByteAligned) { PackAction = EDSLIB_PACKACTION_BYTECOPY_STRAIGHT; @@ -1702,7 +1738,7 @@ static void EdsLib_DataTypePack_ByteSwapCopy(uint8_t *DstPtr, const uint8_t *Src { /* need to invert byte order while copying, so use custom routine */ DstPtr += Size; - while(Size > 0) + while (Size > 0) { --DstPtr; *DstPtr = *SrcPtr; @@ -1716,22 +1752,21 @@ static void EdsLib_DataTypePack_ByteSwapCopy(uint8_t *DstPtr, const uint8_t *Src * EdsLib local helper function * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypePack_HandleMember( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction) +int32_t EdsLib_DataTypePack_HandleMember(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction) { EdsLib_DataTypePack_State_t *PackState = (EdsLib_DataTypePack_State_t *)Parent; - int32_t StatusCode; - const uint8_t *SrcPtr; - uint8_t *DstPtr; - size_t UnitSize; + int32_t StatusCode; + const uint8_t *SrcPtr; + uint8_t *DstPtr; + size_t UnitSize; StatusCode = EDSLIB_SUCCESS; - UnitSize = 0; - SrcPtr = PackState->NativeSrcPtr; - DstPtr = PackState->PackedDstPtr; + UnitSize = 0; + SrcPtr = PackState->NativeSrcPtr; + DstPtr = PackState->PackedDstPtr; if (PackAction == EDSLIB_PACKACTION_PREPARE) { @@ -1746,35 +1781,34 @@ int32_t EdsLib_DataTypePack_HandleMember( * object being handled, all other START callbacks will be for sub-objects * inside this. */ - if (EdsLib_DatabaseRef_IsEqual(&PackState->Common.RefObj, &CbInfo->Details.RefObj) && - PackState->Common.MaxSize.Bits > PackState->Common.LastActualTailBitPos) + if (EdsLib_DatabaseRef_IsEqual(&PackState->Common.RefObj, &CbInfo->Details.RefObj) + && PackState->Common.MaxSize.Bits > PackState->Common.LastActualTailBitPos) { - UnitSize = EdsLib_BITS_TO_OCTETS(PackState->Common.LastActualTailBitPos); - DstPtr += UnitSize; - UnitSize = EdsLib_BITS_TO_OCTETS(PackState->Common.MaxSize.Bits) - UnitSize; + UnitSize = EdsLib_BITS_TO_OCTETS(PackState->Common.LastActualTailBitPos); + DstPtr += UnitSize; + UnitSize = EdsLib_BITS_TO_OCTETS(PackState->Common.MaxSize.Bits) - UnitSize; } else { PackAction = EDSLIB_PACKACTION_NONE; } - } - else if (CbInfo->StartOffset.Bytes < PackState->Common.LastNominalTail.Bytes || - CbInfo->Details.EntryType == EDSLIB_ENTRYTYPE_CONTAINER_ERROR_CONTROL_ENTRY || - CbInfo->Details.EntryType == EDSLIB_ENTRYTYPE_CONTAINER_LENGTH_ENTRY || - CbInfo->Details.EntryType == EDSLIB_ENTRYTYPE_CONTAINER_FIXED_VALUE_ENTRY) + else if (CbInfo->StartOffset.Bytes < PackState->Common.LastNominalTail.Bytes + || CbInfo->Details.EntryType == EDSLIB_ENTRYTYPE_CONTAINER_ERROR_CONTROL_ENTRY + || CbInfo->Details.EntryType == EDSLIB_ENTRYTYPE_CONTAINER_LENGTH_ENTRY + || CbInfo->Details.EntryType == EDSLIB_ENTRYTYPE_CONTAINER_FIXED_VALUE_ENTRY) { /* nothing to do here, it was either already handled, or will be handled later */ PackAction = EDSLIB_PACKACTION_NONE; } else { - SrcPtr += CbInfo->StartOffset.Bytes; - DstPtr += (BitPosition / 8); - UnitSize = CbInfo->DataDictPtr->SizeInfo.Bytes; + SrcPtr += CbInfo->StartOffset.Bytes; + DstPtr += (BitPosition / 8); + UnitSize = CbInfo->DataDictPtr->SizeInfo.Bytes; } - switch(PackAction) + switch (PackAction) { case EDSLIB_PACKACTION_PREPARE: { @@ -1812,22 +1846,21 @@ int32_t EdsLib_DataTypePack_HandleMember( * EdsLib local helper function * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeUnpack_HandleMember( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction) +int32_t EdsLib_DataTypeUnpack_HandleMember(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction) { EdsLib_DataTypeUnpack_State_t *UnpackState = (EdsLib_DataTypeUnpack_State_t *)Parent; - int32_t StatusCode; - const uint8_t *SrcPtr; - uint8_t *DstPtr; - size_t UnitSize; + int32_t StatusCode; + const uint8_t *SrcPtr; + uint8_t *DstPtr; + size_t UnitSize; StatusCode = EDSLIB_SUCCESS; - UnitSize = 0; - DstPtr = UnpackState->NativeDstPtr; - SrcPtr = UnpackState->PackedSrcPtr; + UnitSize = 0; + DstPtr = UnpackState->NativeDstPtr; + SrcPtr = UnpackState->PackedSrcPtr; if (PackAction == EDSLIB_PACKACTION_PREPARE) { @@ -1842,17 +1875,16 @@ int32_t EdsLib_DataTypeUnpack_HandleMember( * object being handled, all other START callbacks will be for sub-objects * inside this. */ - if (EdsLib_DatabaseRef_IsEqual(&UnpackState->Common.RefObj, &CbInfo->Details.RefObj) && - UnpackState->Common.MaxSize.Bytes > UnpackState->Common.LastNominalTail.Bytes) + if (EdsLib_DatabaseRef_IsEqual(&UnpackState->Common.RefObj, &CbInfo->Details.RefObj) + && UnpackState->Common.MaxSize.Bytes > UnpackState->Common.LastNominalTail.Bytes) { - DstPtr += UnpackState->Common.LastNominalTail.Bytes; - UnitSize = UnpackState->Common.MaxSize.Bytes - UnpackState->Common.LastNominalTail.Bytes; + DstPtr += UnpackState->Common.LastNominalTail.Bytes; + UnitSize = UnpackState->Common.MaxSize.Bytes - UnpackState->Common.LastNominalTail.Bytes; } else { PackAction = EDSLIB_PACKACTION_NONE; } - } else if (CbInfo->StartOffset.Bytes >= UnpackState->Common.LastNominalTail.Bytes) { @@ -1867,7 +1899,7 @@ int32_t EdsLib_DataTypeUnpack_HandleMember( PackAction = EDSLIB_PACKACTION_NONE; } - switch(PackAction) + switch (PackAction) { case EDSLIB_PACKACTION_PREPARE: { @@ -1905,20 +1937,20 @@ int32_t EdsLib_DataTypeUnpack_HandleMember( * EdsLib local helper function * *-----------------------------------------------------------------*/ -static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - void *OpaqueArg) +static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + void *OpaqueArg) { EdsLib_DataTypePackUnpack_ControlBlock_t *Base = (EdsLib_DataTypePackUnpack_ControlBlock_t *)OpaqueArg; - EdsLib_Iterator_Rc_t RetCode; - bool HasBits; - uint32_t ActualBitPosition; - EdsLib_PackAction_t PackAction; + EdsLib_Iterator_Rc_t RetCode; + bool HasBits; + uint32_t ActualBitPosition; + EdsLib_PackAction_t PackAction; - RetCode = EDSLIB_ITERATOR_RC_CONTINUE; + RetCode = EDSLIB_ITERATOR_RC_CONTINUE; PackAction = EDSLIB_PACKACTION_NONE; - HasBits = false; + HasBits = false; if (CbInfo->EndOffset.Bits <= Base->LastNominalTail.Bits) { @@ -1939,8 +1971,8 @@ static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_Data /* Padding entries just show as a gap between the nominal bit position of members, * they do not have their own entry in the tables. So if the start of this member * is not the same as the end of the previous, then there is padding */ - if (CbInfo->StartOffset.Bytes == Base->LastNominalTail.Bytes && - CbInfo->StartOffset.Bits > Base->LastNominalTail.Bits) + if (CbInfo->StartOffset.Bytes == Base->LastNominalTail.Bytes + && CbInfo->StartOffset.Bits > Base->LastNominalTail.Bits) { /* add the padding to the output */ Base->LastActualTailBitPos += CbInfo->StartOffset.Bits - Base->LastNominalTail.Bits; @@ -1955,7 +1987,11 @@ static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_Data else if (CbType == EDSLIB_ITERATOR_CBTYPE_MEMBER) { /* If this has a presence tag, check if should be packed or skipped */ - Base->Status = EdsLib_DataTypePackUnpack_CheckPresence(GD, CbInfo->Details.CheckSequence, Base->NativeBufferPtr, Base->MaxSize.Bytes, &HasBits); + Base->Status = EdsLib_DataTypePackUnpack_CheckPresence(GD, + CbInfo->Details.CheckSequence, + Base->NativeBufferPtr, + Base->MaxSize.Bytes, + &HasBits); if (Base->Status != EDSLIB_SUCCESS) { PackAction = EDSLIB_PACKACTION_FAULT; @@ -1966,7 +2002,7 @@ static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_Data } } - switch(PackAction) + switch (PackAction) { case EDSLIB_PACKACTION_BYTECOPY_STRAIGHT: case EDSLIB_PACKACTION_BYTECOPY_INVERT: @@ -1974,8 +2010,8 @@ static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_Data case EDSLIB_PACKACTION_PREPARE: { /* if this will have actual bits in the final object, ensure there is space for them */ - if ((HasBits && (ActualBitPosition + CbInfo->DataDictPtr->SizeInfo.Bits) > Base->MaxSize.Bits) || - CbInfo->EndOffset.Bytes > Base->MaxSize.Bytes) + if ((HasBits && (ActualBitPosition + CbInfo->DataDictPtr->SizeInfo.Bits) > Base->MaxSize.Bits) + || CbInfo->EndOffset.Bytes > Base->MaxSize.Bytes) { /* No data for this object, stop here */ Base->Status = EDSLIB_BUFFER_SIZE_ERROR; @@ -1988,10 +2024,10 @@ static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_Data case EDSLIB_PACKACTION_SUBCOMPONENTS: { /* - * If the structure contains sub-components then the iterator - * must dig down into the sub-components. The bits will be - * accounted for when processing the sub-components. - */ + * If the structure contains sub-components then the iterator + * must dig down into the sub-components. The bits will be + * accounted for when processing the sub-components. + */ RetCode = EDSLIB_ITERATOR_RC_DESCEND; HasBits = false; /* the bits will be accounted later */ break; @@ -2024,7 +2060,6 @@ static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_Data Base->LastNominalTail = CbInfo->EndOffset; } - return RetCode; } @@ -2033,16 +2068,18 @@ static EdsLib_Iterator_Rc_t EdsLib_DataTypePackUnpack_Callback(const EdsLib_Data * EdsLib local helper function * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_PackUnpackFindTailEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - const EdsLib_SizeInfo_t *TargetOffset, EdsLib_DataTypeDB_EntityInfo_t *ResultInfo) +int32_t EdsLib_DataTypeDB_PackUnpackFindTailEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const EdsLib_SizeInfo_t *TargetOffset, + EdsLib_DataTypeDB_EntityInfo_t *ResultInfo) { - EdsLib_SizeInfo_t CurrentOffset; + EdsLib_SizeInfo_t CurrentOffset; EdsLib_DataTypeDB_EntityInfo_t TempInfo; - int32_t Status; + int32_t Status; memset(ResultInfo, 0, sizeof(*ResultInfo)); memset(&TempInfo, 0, sizeof(TempInfo)); - CurrentOffset = *TargetOffset; + CurrentOffset = *TargetOffset; TempInfo.EdsId = EdsId; do { @@ -2065,12 +2102,12 @@ int32_t EdsLib_DataTypeDB_PackUnpackFindTailEntity(const EdsLib_DatabaseObject_t break; } - ResultInfo->EdsId = TempInfo.EdsId; - ResultInfo->Flags &= ~EDSLIB_DATATYPE_FLAG_VARIABLE; - ResultInfo->Flags |= TempInfo.Flags; + ResultInfo->EdsId = TempInfo.EdsId; + ResultInfo->Flags &= ~EDSLIB_DATATYPE_FLAG_VARIABLE; + ResultInfo->Flags |= TempInfo.Flags; ResultInfo->Offset.Bytes += TempInfo.Offset.Bytes; - ResultInfo->Offset.Bits += TempInfo.Offset.Bits; - ResultInfo->MaxSize = TempInfo.MaxSize; + ResultInfo->Offset.Bits += TempInfo.Offset.Bits; + ResultInfo->MaxSize = TempInfo.MaxSize; if (TargetOffset->Bytes != 0 && ResultInfo->Offset.Bytes >= TargetOffset->Bytes) { @@ -2092,8 +2129,7 @@ int32_t EdsLib_DataTypeDB_PackUnpackFindTailEntity(const EdsLib_DatabaseObject_t { CurrentOffset.Bits -= TempInfo.Offset.Bits; } - } - while(true); + } while (true); return Status; } @@ -2104,11 +2140,13 @@ int32_t EdsLib_DataTypeDB_PackUnpackFindTailEntity(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DataTypeDB_PackUnpackFindTail(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - const EdsLib_SizeInfo_t *InputPtr, EdsLib_DataTypePackUnpack_ControlBlock_t *CbPtr) +int32_t EdsLib_DataTypeDB_PackUnpackFindTail(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const EdsLib_SizeInfo_t *InputPtr, + EdsLib_DataTypePackUnpack_ControlBlock_t *CbPtr) { EdsLib_DataTypeDB_EntityInfo_t EntityInfo; - int32_t Status; + int32_t Status; memset(&CbPtr->LastNominalTail, 0, sizeof(CbPtr->LastNominalTail)); @@ -2120,7 +2158,7 @@ int32_t EdsLib_DataTypeDB_PackUnpackFindTail(const EdsLib_DatabaseObject_t *GD, } else { - CbPtr->LastActualTailBitPos = InputPtr->Bits; + CbPtr->LastActualTailBitPos = InputPtr->Bits; CbPtr->LastNominalTail.Bytes = InputPtr->Bytes; Status = EdsLib_DataTypeDB_PackUnpackFindTailEntity(GD, EdsId, &CbPtr->LastNominalTail, &EntityInfo); if (Status == EDSLIB_SUCCESS) @@ -2138,23 +2176,24 @@ int32_t EdsLib_DataTypeDB_PackUnpackFindTail(const EdsLib_DatabaseObject_t *GD, * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DataTypePackUnpack_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_DataTypePackUnpack_ControlBlock_t *PackState) +void EdsLib_DataTypePackUnpack_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_DataTypePackUnpack_ControlBlock_t *PackState) { const EdsLib_DataTypeDB_Entry_t *DataDictPtr; - EdsLib_DatabaseRef_t NextBaseObj; - uint32_t PassCount; - int32_t Status; + EdsLib_DatabaseRef_t NextBaseObj; + uint32_t PassCount; + int32_t Status; EDSLIB_DECLARE_ITERATOR_CB(IteratorState, - EDSLIB_ITERATOR_MAX_DEEP_DEPTH, - EdsLib_DataTypePackUnpack_Callback, - PackState); + EDSLIB_ITERATOR_MAX_DEEP_DEPTH, + EdsLib_DataTypePackUnpack_Callback, + PackState); - Status = EDSLIB_SUCCESS; + Status = EDSLIB_SUCCESS; PassCount = 0; NextBaseObj = PackState->RefObj; - while(1) + while (1) { DataDictPtr = EdsLib_DataTypeDB_GetEntry(GD, &NextBaseObj); if (DataDictPtr == NULL) @@ -2195,7 +2234,12 @@ void EdsLib_DataTypePackUnpack_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_Da * Note this must use the "native" representation, so the buffer which contains * native data will be the source when packing or destination when unpacking */ - Status = EdsLib_DataTypeIdentifyBuffer_Impl(GD, DataDictPtr, PackState->NativeBufferPtr, DataDictPtr->SizeInfo.Bytes, NULL, &NextBaseObj); + Status = EdsLib_DataTypeIdentifyBuffer_Impl(GD, + DataDictPtr, + PackState->NativeBufferPtr, + DataDictPtr->SizeInfo.Bytes, + NULL, + &NextBaseObj); if (Status != EDSLIB_SUCCESS) { /* Not further derived; normal stop condition */ @@ -2216,10 +2260,13 @@ void EdsLib_DataTypePackUnpack_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_Da * Local Helper function * *-----------------------------------------------------------------*/ -void EdsLib_PackedObject_UpdateSingleField(void *PackedObject, uint32_t BitPosition, const EdsLib_DataTypeDB_Entry_t *DataDictPtr, EdsLib_GenericValueBuffer_t *ValBuf) +void EdsLib_PackedObject_UpdateSingleField(void *PackedObject, + uint32_t BitPosition, + const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + EdsLib_GenericValueBuffer_t *ValBuf) { EdsLib_ConstPtr_t TempSrc; - EdsLib_Ptr_t TempDst; + EdsLib_Ptr_t TempDst; if (DataDictPtr->BasicType != EDSLIB_BASICTYPE_BINARY) { @@ -2228,8 +2275,8 @@ void EdsLib_PackedObject_UpdateSingleField(void *PackedObject, uint32_t BitPosit EdsLib_DataTypeStore_Impl(TempDst, ValBuf, DataDictPtr); } - TempSrc.u = &ValBuf->Value; - TempDst.Ptr = PackedObject; + TempSrc.u = &ValBuf->Value; + TempDst.Ptr = PackedObject; TempDst.Addr += BitPosition / 8; EdsLib_Internal_DoBitwisePack(TempDst.Addr, TempSrc.Addr, DataDictPtr, BitPosition % 0x08); } @@ -2239,10 +2286,9 @@ void EdsLib_PackedObject_UpdateSingleField(void *PackedObject, uint32_t BitPosit * Local Helper function * *-----------------------------------------------------------------*/ -void EdsLib_PackUnpack_GetFixedValueRef( - EdsLib_GenericValueBuffer_t *ScratchBuf, - const EdsLib_DataTypeDB_Entry_t *DataDictPtr, - const EdsLib_HandlerArgument_t *HandlerArg) +void EdsLib_PackUnpack_GetFixedValueRef(EdsLib_GenericValueBuffer_t *ScratchBuf, + const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + const EdsLib_HandlerArgument_t *HandlerArg) { if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_BINARY) { @@ -2255,17 +2301,17 @@ void EdsLib_PackUnpack_GetFixedValueRef( else if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_SIGNED_INT) { ScratchBuf->Value.SignedInteger = HandlerArg->FixedInteger; - ScratchBuf->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ScratchBuf->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; } else if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_UNSIGNED_INT) { ScratchBuf->Value.UnsignedInteger = HandlerArg->FixedUnsigned; - ScratchBuf->ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ScratchBuf->ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; } else if (DataDictPtr->BasicType == EDSLIB_BASICTYPE_FLOAT) { ScratchBuf->Value.FloatingPoint = HandlerArg->FixedFloat; - ScratchBuf->ValueType = EDSLIB_BASICTYPE_FLOAT; + ScratchBuf->ValueType = EDSLIB_BASICTYPE_FLOAT; } } @@ -2275,36 +2321,35 @@ void EdsLib_PackUnpack_GetFixedValueRef( * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_PackedObject_PostProc_Callback( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction) +int32_t EdsLib_PackedObject_PostProc_Callback(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction) { - EdsLib_PackedPostProc_ControlBlock_t *Base = (EdsLib_PackedPostProc_ControlBlock_t *)Parent; + EdsLib_PackedPostProc_ControlBlock_t *Base = (EdsLib_PackedPostProc_ControlBlock_t *)Parent; EdsLib_PackedPostProc_DeferredField_t *DeferredFieldPtr; - EdsLib_GenericValueBuffer_t ScratchBuf; - int32_t StatusCode; + EdsLib_GenericValueBuffer_t ScratchBuf; + int32_t StatusCode; - DeferredFieldPtr = NULL; - StatusCode = EDSLIB_SUCCESS; + DeferredFieldPtr = NULL; + StatusCode = EDSLIB_SUCCESS; ScratchBuf.ValueType = EDSLIB_BASICTYPE_NONE; switch (CbInfo->Details.EntryType) { case EDSLIB_ENTRYTYPE_CONTAINER_ERROR_CONTROL_ENTRY: /* - * Error control fields still cannot be handled yet -- - * the correct value is not known at the moment, and other special fields - * may affect its value (e.g. length needs to be populated before error control) - */ + * Error control fields still cannot be handled yet -- + * the correct value is not known at the moment, and other special fields + * may affect its value (e.g. length needs to be populated before error control) + */ if (Base->DeferredFieldCount < EDSLIB_PACKEDPOSTPROC_MAX_DEFERRED_FIELDS) { DeferredFieldPtr = &Base->DeferredFields[Base->DeferredFieldCount]; - DeferredFieldPtr->DictPtr = CbInfo->DataDictPtr; - DeferredFieldPtr->EntryType = CbInfo->Details.EntryType; - DeferredFieldPtr->HandlerArg = CbInfo->Details.HandlerArg; + DeferredFieldPtr->DictPtr = CbInfo->DataDictPtr; + DeferredFieldPtr->EntryType = CbInfo->Details.EntryType; + DeferredFieldPtr->HandlerArg = CbInfo->Details.HandlerArg; DeferredFieldPtr->PackedBitOffset = BitPosition; ++Base->DeferredFieldCount; @@ -2317,11 +2362,11 @@ int32_t EdsLib_PackedObject_PostProc_Callback( case EDSLIB_ENTRYTYPE_CONTAINER_LENGTH_ENTRY: ScratchBuf.Value.SignedInteger = EdsLib_BITS_TO_OCTETS(Base->Pack.Common.MaxSize.Bits); - ScratchBuf.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ScratchBuf.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; if (CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse) { ScratchBuf.Value.SignedInteger = - CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse(ScratchBuf.Value.SignedInteger); + CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse(ScratchBuf.Value.SignedInteger); } break; @@ -2348,8 +2393,8 @@ int32_t EdsLib_PackedObject_PostProc_Callback( *-----------------------------------------------------------------*/ void EdsLib_PackedObject_PostProc_Deferred(EdsLib_PackedPostProc_ControlBlock_t *Base) { - EdsLib_GenericValueBuffer_t ScratchBuf; - uint32_t i; + EdsLib_GenericValueBuffer_t ScratchBuf; + uint32_t i; EdsLib_PackedPostProc_DeferredField_t *DeferredFieldPtr; /* error control MUST be calculated last, since @@ -2362,16 +2407,21 @@ void EdsLib_PackedObject_PostProc_Deferred(EdsLib_PackedPostProc_ControlBlock_t * this actually has to be the case since the contents of one would affect * the validity of the other. */ - for (i=0; i < Base->DeferredFieldCount; ++i) + for (i = 0; i < Base->DeferredFieldCount; ++i) { DeferredFieldPtr = &Base->DeferredFields[i]; if (DeferredFieldPtr->EntryType == EDSLIB_ENTRYTYPE_CONTAINER_ERROR_CONTROL_ENTRY) { - ScratchBuf.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ScratchBuf.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; ScratchBuf.Value.UnsignedInteger = EdsLib_ErrorControlCompute(DeferredFieldPtr->HandlerArg.ErrorControl, - Base->Pack.PackedDstPtr, Base->Pack.Common.MaxSize.Bits, DeferredFieldPtr->PackedBitOffset); + Base->Pack.PackedDstPtr, + Base->Pack.Common.MaxSize.Bits, + DeferredFieldPtr->PackedBitOffset); - EdsLib_PackedObject_UpdateSingleField(Base->Pack.PackedDstPtr, DeferredFieldPtr->PackedBitOffset, DeferredFieldPtr->DictPtr, &ScratchBuf); + EdsLib_PackedObject_UpdateSingleField(Base->Pack.PackedDstPtr, + DeferredFieldPtr->PackedBitOffset, + DeferredFieldPtr->DictPtr, + &ScratchBuf); } } } @@ -2382,25 +2432,24 @@ void EdsLib_PackedObject_PostProc_Deferred(EdsLib_PackedPostProc_ControlBlock_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_NativeObject_PostProc_Callback( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction) +int32_t EdsLib_NativeObject_PostProc_Callback(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction) { EdsLib_NativePostProc_ControlBlock_t *Base = (EdsLib_NativePostProc_ControlBlock_t *)Parent; - EdsLib_GenericValueBuffer_t ActualValue; - EdsLib_GenericValueBuffer_t ExpectedValue; - EdsLib_GenericValueBuffer_t InitValue; - bool CompareResult; - EdsLib_ConstPtr_t TempSrc; - EdsLib_Ptr_t TempDst; - int32_t RetCode; - - RetCode = EDSLIB_SUCCESS; - ActualValue.ValueType = EDSLIB_BASICTYPE_NONE; + EdsLib_GenericValueBuffer_t ActualValue; + EdsLib_GenericValueBuffer_t ExpectedValue; + EdsLib_GenericValueBuffer_t InitValue; + bool CompareResult; + EdsLib_ConstPtr_t TempSrc; + EdsLib_Ptr_t TempDst; + int32_t RetCode; + + RetCode = EDSLIB_SUCCESS; + ActualValue.ValueType = EDSLIB_BASICTYPE_NONE; ExpectedValue.ValueType = EDSLIB_BASICTYPE_NONE; - InitValue.ValueType = EDSLIB_BASICTYPE_NONE; + InitValue.ValueType = EDSLIB_BASICTYPE_NONE; switch (CbInfo->Details.EntryType) { @@ -2410,36 +2459,36 @@ int32_t EdsLib_NativeObject_PostProc_Callback( { /* verify value in existing field */ ExpectedValue.Value.UnsignedInteger = EdsLib_BITS_TO_OCTETS(Base->Unpack.Common.MaxSize.Bits); - ExpectedValue.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ExpectedValue.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; if (CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse) { EdsLib_DataTypeConvert(&ExpectedValue, EDSLIB_BASICTYPE_SIGNED_INT); ExpectedValue.Value.SignedInteger = - CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse(ExpectedValue.Value.SignedInteger); + CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse(ExpectedValue.Value.SignedInteger); } } /* - * Initialization value for native object: - * - * Many historical applications assume that the length field - * in the native struct will be based on sizeof(struct). - * - * But In the EDS world the encoded and decoded sizes may - * be different. - * - * So in this case the InitValue for the native object is different than - * the ExpectedValue in a packed object. - */ + * Initialization value for native object: + * + * Many historical applications assume that the length field + * in the native struct will be based on sizeof(struct). + * + * But In the EDS world the encoded and decoded sizes may + * be different. + * + * So in this case the InitValue for the native object is different than + * the ExpectedValue in a packed object. + */ if ((Base->RecomputeFields & EDSLIB_DATATYPEDB_RECOMPUTE_LENGTH) != 0) { - InitValue.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + InitValue.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; InitValue.Value.SignedInteger = Base->Unpack.Common.MaxSize.Bytes; if (CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse) { InitValue.Value.SignedInteger = - CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse(InitValue.Value.SignedInteger); + CbInfo->Details.HandlerArg.IntegerCalibrator.Reverse(InitValue.Value.SignedInteger); } } break; @@ -2450,18 +2499,21 @@ int32_t EdsLib_NativeObject_PostProc_Callback( /* If PackedPtr is supplied, will verify value in existing field */ if (Base->CheckFields & EDSLIB_DATATYPEDB_RECOMPUTE_ERRORCONTROL) { - ExpectedValue.Value.UnsignedInteger = EdsLib_ErrorControlCompute( - CbInfo->Details.HandlerArg.ErrorControl, Base->Unpack.PackedSrcPtr, - Base->Unpack.Common.MaxSize.Bits, BitPosition); + ExpectedValue.Value.UnsignedInteger = + EdsLib_ErrorControlCompute(CbInfo->Details.HandlerArg.ErrorControl, + Base->Unpack.PackedSrcPtr, + Base->Unpack.Common.MaxSize.Bits, + BitPosition); ExpectedValue.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; } if (Base->RecomputeFields & EDSLIB_DATATYPEDB_RECOMPUTE_ERRORCONTROL) { - InitValue.Value.UnsignedInteger = EdsLib_ErrorControlCompute( - CbInfo->Details.HandlerArg.ErrorControl, Base->Unpack.NativeDstPtr, - EdsLib_OCTETS_TO_BITS(Base->Unpack.Common.MaxSize.Bytes), - EdsLib_OCTETS_TO_BITS(CbInfo->StartOffset.Bytes)); + InitValue.Value.UnsignedInteger = + EdsLib_ErrorControlCompute(CbInfo->Details.HandlerArg.ErrorControl, + Base->Unpack.NativeDstPtr, + EdsLib_OCTETS_TO_BITS(Base->Unpack.Common.MaxSize.Bytes), + EdsLib_OCTETS_TO_BITS(CbInfo->StartOffset.Bytes)); InitValue.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; } break; @@ -2488,7 +2540,6 @@ int32_t EdsLib_NativeObject_PostProc_Callback( break; } - if (ExpectedValue.ValueType != EDSLIB_BASICTYPE_NONE) { TempSrc.Ptr = Base->Unpack.NativeDstPtr + CbInfo->StartOffset.Bytes; @@ -2499,25 +2550,28 @@ int32_t EdsLib_NativeObject_PostProc_Callback( { CompareResult = false; } - else switch(ExpectedValue.ValueType) - { - case EDSLIB_BASICTYPE_SIGNED_INT: - CompareResult = (ActualValue.Value.SignedInteger == ExpectedValue.Value.SignedInteger); - break; - case EDSLIB_BASICTYPE_UNSIGNED_INT: - CompareResult = (ActualValue.Value.UnsignedInteger == ExpectedValue.Value.UnsignedInteger); - break; - case EDSLIB_BASICTYPE_FLOAT: - CompareResult = (ActualValue.Value.FloatingPoint == ExpectedValue.Value.FloatingPoint); - break; - case EDSLIB_BASICTYPE_BINARY: - CompareResult = memcmp(ActualValue.Value.BinaryData, - ExpectedValue.Value.BinaryData, CbInfo->DataDictPtr->SizeInfo.Bytes) == 0; - break; - default: - CompareResult = false; - break; - } + else + switch (ExpectedValue.ValueType) + { + case EDSLIB_BASICTYPE_SIGNED_INT: + CompareResult = (ActualValue.Value.SignedInteger == ExpectedValue.Value.SignedInteger); + break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + CompareResult = (ActualValue.Value.UnsignedInteger == ExpectedValue.Value.UnsignedInteger); + break; + case EDSLIB_BASICTYPE_FLOAT: + CompareResult = (ActualValue.Value.FloatingPoint == ExpectedValue.Value.FloatingPoint); + break; + case EDSLIB_BASICTYPE_BINARY: + CompareResult = memcmp(ActualValue.Value.BinaryData, + ExpectedValue.Value.BinaryData, + CbInfo->DataDictPtr->SizeInfo.Bytes) + == 0; + break; + default: + CompareResult = false; + break; + } if (!CompareResult) { diff --git a/edslib/fsw/src/edslib_displaydb_api.c b/edslib/fsw/src/edslib_displaydb_api.c index 6f855c6..8c8ead9 100644 --- a/edslib/fsw/src/edslib_displaydb_api.c +++ b/edslib/fsw/src/edslib_displaydb_api.c @@ -19,7 +19,6 @@ * limitations under the License. */ - /** * \file edslib_displaydb_api.c * \ingroup fsw @@ -73,7 +72,7 @@ void EdsLib_DisplayDB_Initialize(void) const char *EdsLib_DisplayDB_GetEdsName(const EdsLib_DatabaseObject_t *GD, uint16_t AppId) { EdsLib_DisplayDB_t DisplayDBPtr; - const char *Result; + const char *Result; DisplayDBPtr = EdsLib_DisplayDB_GetTopLevel(GD, AppId); if (DisplayDBPtr != NULL) @@ -103,8 +102,8 @@ const char *EdsLib_DisplayDB_GetEdsName(const EdsLib_DatabaseObject_t *GD, uint1 const char *EdsLib_DisplayDB_GetBaseName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId) { const EdsLib_DisplayDB_Entry_t *DispInfo; - EdsLib_DatabaseRef_t TempRef; - const char *Result; + EdsLib_DatabaseRef_t TempRef; + const char *Result; EdsLib_Decode_StructId(&TempRef, EdsId); DispInfo = EdsLib_DisplayDB_GetEntry(GD, &TempRef); @@ -133,12 +132,13 @@ const char *EdsLib_DisplayDB_GetBaseName(const EdsLib_DatabaseObject_t *GD, EdsL * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *Buffer, uint32_t BufferSize) +const char * +EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *Buffer, uint32_t BufferSize) { const EdsLib_DisplayDB_Entry_t *DispInfo; - EdsLib_DatabaseRef_t TempRef; - const char *Result; - const char *Namespace; + EdsLib_DatabaseRef_t TempRef; + const char *Result; + const char *Namespace; /* Should not return NULL, which allows safe use in printf() statements */ if (Buffer == NULL || BufferSize == 0) @@ -147,7 +147,7 @@ const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsL } EdsLib_Decode_StructId(&TempRef, EdsId); - DispInfo = EdsLib_DisplayDB_GetEntry(GD, &TempRef); + DispInfo = EdsLib_DisplayDB_GetEntry(GD, &TempRef); Buffer[0] = 0; if (DispInfo != NULL) @@ -156,11 +156,11 @@ const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsL if (Namespace != NULL && DispInfo->Name != NULL) { - snprintf(Buffer,BufferSize,"%s/%s", Namespace, DispInfo->Name); + snprintf(Buffer, BufferSize, "%s/%s", Namespace, DispInfo->Name); } else if (DispInfo->Name != NULL) { - snprintf(Buffer,BufferSize,"%s", DispInfo->Name); + snprintf(Buffer, BufferSize, "%s", DispInfo->Name); } } @@ -185,7 +185,7 @@ const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsL const char *EdsLib_DisplayDB_GetNamespace(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId) { EdsLib_DatabaseRef_t TempRef; - const char *Result; + const char *Result; EdsLib_Decode_StructId(&TempRef, EdsId); @@ -211,8 +211,8 @@ const char *EdsLib_DisplayDB_GetNamespace(const EdsLib_DatabaseObject_t *GD, Eds EdsLib_DisplayHint_t EdsLib_DisplayDB_GetDisplayHint(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId) { const EdsLib_DisplayDB_Entry_t *DisplayInf; - EdsLib_DatabaseRef_t TempRef; - EdsLib_DisplayHint_t HintType; + EdsLib_DatabaseRef_t TempRef; + EdsLib_DisplayHint_t HintType; EdsLib_Decode_StructId(&TempRef, EdsId); DisplayInf = EdsLib_DisplayDB_GetEntry(GD, &TempRef); @@ -238,12 +238,15 @@ EdsLib_DisplayHint_t EdsLib_DisplayDB_GetDisplayHint(const EdsLib_DatabaseObject * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *Name, uint16_t *SubIndex) +int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *Name, + uint16_t *SubIndex) { - const EdsLib_DisplayDB_Entry_t *DisplayInf; + const EdsLib_DisplayDB_Entry_t *DisplayInf; const EdsLib_DataTypeDB_Entry_t *DataTypeInf; - EdsLib_DatabaseRef_t TempRef; - int32_t Status; + EdsLib_DatabaseRef_t TempRef; + int32_t Status; EdsLib_Decode_StructId(&TempRef, EdsId); DataTypeInf = EdsLib_DataTypeDB_GetEntry(GD, &TempRef); @@ -271,41 +274,43 @@ int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, EdsLi else { Status = EDSLIB_NAME_NOT_FOUND; - switch(DisplayInf->DisplayHint) - { - case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: + switch (DisplayInf->DisplayHint) { - const EdsLib_SymbolTableEntry_t *EnumSym = - EdsLib_DisplaySymbolLookup_GetByName(DisplayInf->DisplayArg.SymTable, - DisplayInf->DisplayArgTableSize, Name, strlen(Name)); - if (EnumSym != NULL) + case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: { - *SubIndex = EnumSym->SymValue; - Status = EDSLIB_SUCCESS; + const EdsLib_SymbolTableEntry_t *EnumSym = + EdsLib_DisplaySymbolLookup_GetByName(DisplayInf->DisplayArg.SymTable, + DisplayInf->DisplayArgTableSize, + Name, + strlen(Name)); + if (EnumSym != NULL) + { + *SubIndex = EnumSym->SymValue; + Status = EDSLIB_SUCCESS; + } + break; } - break; - } - case EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE: - { - const char * const *NameTable = DisplayInf->DisplayArg.NameTable; - uint16_t Idx; - for (Idx = 0; Idx < DisplayInf->DisplayArgTableSize; ++Idx) + case EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE: { - if (*NameTable != NULL) + const char *const *NameTable = DisplayInf->DisplayArg.NameTable; + uint16_t Idx; + for (Idx = 0; Idx < DisplayInf->DisplayArgTableSize; ++Idx) { - if(strcmp(*NameTable, Name) == 0) + if (*NameTable != NULL) { - *SubIndex = Idx; - Status = EDSLIB_SUCCESS; - break; + if (strcmp(*NameTable, Name) == 0) + { + *SubIndex = Idx; + Status = EDSLIB_SUCCESS; + break; + } } + ++NameTable; } - ++NameTable; + break; } - break; - } - default: - break; + default: + break; } } } @@ -321,10 +326,10 @@ int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, EdsLi *-----------------------------------------------------------------*/ const char *EdsLib_DisplayDB_GetNameByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t SubIndex) { - const EdsLib_DisplayDB_Entry_t *DisplayInf; + const EdsLib_DisplayDB_Entry_t *DisplayInf; const EdsLib_DataTypeDB_Entry_t *DataTypeInf; - EdsLib_DatabaseRef_t TempRef; - const char *result; + EdsLib_DatabaseRef_t TempRef; + const char *result; result = NULL; EdsLib_Decode_StructId(&TempRef, EdsId); @@ -340,30 +345,31 @@ const char *EdsLib_DisplayDB_GetNameByIndex(const EdsLib_DatabaseObject_t *GD, E if (DisplayInf != NULL) { - switch(DisplayInf->DisplayHint) + switch (DisplayInf->DisplayHint) { - case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: - { - const EdsLib_SymbolTableEntry_t *EnumSym = - EdsLib_DisplaySymbolLookup_GetByValue(DisplayInf->DisplayArg.SymTable, - DisplayInf->DisplayArgTableSize, SubIndex); - if (EnumSym != NULL) + case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: { - result = EnumSym->SymName; + const EdsLib_SymbolTableEntry_t *EnumSym = + EdsLib_DisplaySymbolLookup_GetByValue(DisplayInf->DisplayArg.SymTable, + DisplayInf->DisplayArgTableSize, + SubIndex); + if (EnumSym != NULL) + { + result = EnumSym->SymName; + } + break; } - break; - } - case EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE: - { - /* direct lookup */ - if (SubIndex < DisplayInf->DisplayArgTableSize) + case EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE: { - result = DisplayInf->DisplayArg.NameTable[SubIndex]; + /* direct lookup */ + if (SubIndex < DisplayInf->DisplayArgTableSize) + { + result = DisplayInf->DisplayArg.NameTable[SubIndex]; + } + break; } - break; - } - default: - break; + default: + break; } } } @@ -377,23 +383,26 @@ const char *EdsLib_DisplayDB_GetNameByIndex(const EdsLib_DatabaseObject_t *GD, E * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_EntityCallback_t Callback, void *Arg) +void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_EntityCallback_t Callback, + void *Arg) { - EdsLib_DisplayUserIterator_FullName_StackEntry_t NameStack[EDSLIB_ITERATOR_MAX_DEEP_DEPTH]; + EdsLib_DisplayUserIterator_FullName_StackEntry_t NameStack[EDSLIB_ITERATOR_MAX_DEEP_DEPTH]; EdsLib_DisplayUserIterator_FullName_ControlBlock_t CtrlBlock; EDSLIB_DECLARE_DISPLAY_ITERATOR_CB(IteratorState, - EDSLIB_ITERATOR_MAX_DEEP_DEPTH, - EdsLib_DisplayUserIterator_FullName_Callback, - &CtrlBlock); + EDSLIB_ITERATOR_MAX_DEEP_DEPTH, + EdsLib_DisplayUserIterator_FullName_Callback, + &CtrlBlock); EDSLIB_RESET_DISPLAY_ITERATOR_FROM_EDSID(IteratorState, EdsId); memset(&CtrlBlock, 0, sizeof(CtrlBlock)); - CtrlBlock.NextEntry = NameStack; + CtrlBlock.NextEntry = NameStack; CtrlBlock.ScratchNameBuffer[0] = 0; - CtrlBlock.Base.UserCallback = Callback; - CtrlBlock.Base.UserArg = Arg; + CtrlBlock.Base.UserCallback = Callback; + CtrlBlock.Base.UserArg = Arg; EdsLib_DataTypeIterator_Impl(GD, &IteratorState.BaseIter.Cb); } @@ -404,20 +413,23 @@ void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, EdsL * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_EntityCallback_t Callback, void *Arg) +void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_EntityCallback_t Callback, + void *Arg) { EdsLib_DisplayUserIterator_BaseName_ControlBlock_t CtrlBlock; EDSLIB_DECLARE_DISPLAY_ITERATOR_CB(IteratorState, - EDSLIB_ITERATOR_MAX_BASETYPE_DEPTH, - EdsLib_DisplayUserIterator_BaseName_Callback, - &CtrlBlock); + EDSLIB_ITERATOR_MAX_BASETYPE_DEPTH, + EdsLib_DisplayUserIterator_BaseName_Callback, + &CtrlBlock); EDSLIB_RESET_DISPLAY_ITERATOR_FROM_EDSID(IteratorState, EdsId); memset(&CtrlBlock, 0, sizeof(CtrlBlock)); CtrlBlock.UserCallback = Callback; - CtrlBlock.UserArg = Arg; + CtrlBlock.UserArg = Arg; EdsLib_DataTypeIterator_Impl(GD, &IteratorState.BaseIter.Cb); } @@ -427,23 +439,26 @@ void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, Eds * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *Name, EdsLib_DataTypeDB_EntityInfo_t *CompInfo) +int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *Name, + EdsLib_DataTypeDB_EntityInfo_t *CompInfo) { EdsLib_DisplayLocateMember_ControlBlock_t CtrlBlock; - const char *CurrTokenPos; - int32_t Status; + const char *CurrTokenPos; + int32_t Status; memset(CompInfo, 0, sizeof(*CompInfo)); memset(&CtrlBlock, 0, sizeof(CtrlBlock)); EdsLib_Decode_StructId(&CtrlBlock.RefObj, EdsId); CurrTokenPos = Name; - Status = EDSLIB_FAILURE; + Status = EDSLIB_FAILURE; while (1) { - CtrlBlock.ContentPos = CurrTokenPos; - CtrlBlock.NextTokenPos = NULL; - CtrlBlock.MatchQuality = EDSLIB_MATCHQUALITY_NONE; + CtrlBlock.ContentPos = CurrTokenPos; + CtrlBlock.NextTokenPos = NULL; + CtrlBlock.MatchQuality = EDSLIB_MATCHQUALITY_NONE; CtrlBlock.ContentLength = 0; EdsLib_DisplayLocateMember_Impl(GD, &CtrlBlock); @@ -461,10 +476,10 @@ int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, EdsL if (*CurrTokenPos == 0) { - Status = EDSLIB_SUCCESS; - CompInfo->Offset = CtrlBlock.StartOffset; + Status = EDSLIB_SUCCESS; + CompInfo->Offset = CtrlBlock.StartOffset; CompInfo->MaxSize = CtrlBlock.MaxSize; - CompInfo->EdsId = EdsLib_Encode_StructId(&CtrlBlock.RefObj); + CompInfo->EdsId = EdsLib_Encode_StructId(&CtrlBlock.RefObj); break; } } @@ -480,40 +495,40 @@ int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, EdsL *-----------------------------------------------------------------*/ void EdsLib_Generate_Hexdump(void *output, const uint8_t *DataPtr, uint16_t DisplayOffset, uint16_t Count) { - uint16_t i; - char display[20]; - FILE *fp = output; - - fprintf(fp, "Data Segment Length=%u:",Count); - memset(display,0,sizeof(display)); - for (i = 0; i < Count; ++i) - { - if ((i & 0x0F) == 0) - { - fprintf(fp, " %s\n %03x:",display,DisplayOffset); - memset(display,0,sizeof(display)); - } - fprintf(fp, " %02x",*DataPtr); - if (isprint(*DataPtr)) - { - display[i & 0x0F] = *DataPtr; - } - else - { - display[i & 0x0F] = '.'; - } - ++DataPtr; - ++DisplayOffset; - } - if (i > 0) - { - while (i & 0xF) - { - fprintf(fp, " "); - ++i; - } - } - fprintf(fp, " %s\n", display); + uint16_t i; + char display[20]; + FILE *fp = output; + + fprintf(fp, "Data Segment Length=%u:", Count); + memset(display, 0, sizeof(display)); + for (i = 0; i < Count; ++i) + { + if ((i & 0x0F) == 0) + { + fprintf(fp, " %s\n %03x:", display, DisplayOffset); + memset(display, 0, sizeof(display)); + } + fprintf(fp, " %02x", *DataPtr); + if (isprint(*DataPtr)) + { + display[i & 0x0F] = *DataPtr; + } + else + { + display[i & 0x0F] = '.'; + } + ++DataPtr; + ++DisplayOffset; + } + if (i > 0) + { + while (i & 0xF) + { + fprintf(fp, " "); + ++i; + } + } + fprintf(fp, " %s\n", display); } /*---------------------------------------------------------------- @@ -522,14 +537,21 @@ void EdsLib_Generate_Hexdump(void *output, const uint8_t *DataPtr, uint16_t Disp * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_Scalar_ToString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *OutputBuffer, uint32_t BufferSize, const void *SrcPtr) +int32_t EdsLib_Scalar_ToString(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + char *OutputBuffer, + uint32_t BufferSize, + const void *SrcPtr) { EdsLib_DatabaseRef_t TempRef; EdsLib_Decode_StructId(&TempRef, EdsId); - return EdsLib_DisplayScalarConv_ToString_Impl(EdsLib_DataTypeDB_GetEntry(GD, &TempRef), EdsLib_DisplayDB_GetEntry(GD, &TempRef), - OutputBuffer, BufferSize, SrcPtr); + return EdsLib_DisplayScalarConv_ToString_Impl(EdsLib_DataTypeDB_GetEntry(GD, &TempRef), + EdsLib_DisplayDB_GetEntry(GD, &TempRef), + OutputBuffer, + BufferSize, + SrcPtr); } /*---------------------------------------------------------------- @@ -538,14 +560,17 @@ int32_t EdsLib_Scalar_ToString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t Ed * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, const char *SrcString) +int32_t +EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, const char *SrcString) { EdsLib_DatabaseRef_t TempRef; EdsLib_Decode_StructId(&TempRef, EdsId); - return EdsLib_DisplayScalarConv_FromString_Impl(EdsLib_DataTypeDB_GetEntry(GD, &TempRef), EdsLib_DisplayDB_GetEntry(GD, &TempRef), - DestPtr, SrcString); + return EdsLib_DisplayScalarConv_FromString_Impl(EdsLib_DataTypeDB_GetEntry(GD, &TempRef), + EdsLib_DisplayDB_GetEntry(GD, &TempRef), + DestPtr, + SrcString); } /*---------------------------------------------------------------- @@ -554,28 +579,32 @@ int32_t EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const EdsLib_GenericValueBuffer_t *ValueBuffer) +const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const EdsLib_GenericValueBuffer_t *ValueBuffer) { - EdsLib_DatabaseRef_t TempRef; - const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; + EdsLib_DatabaseRef_t TempRef; + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; const EdsLib_SymbolTableEntry_t *TableEnt; TableEnt = NULL; EdsLib_Decode_StructId(&TempRef, EdsId); DisplayInfoPtr = EdsLib_DisplayDB_GetEntry(GD, &TempRef); - if (ValueBuffer != NULL && DisplayInfoPtr != NULL && - DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) + if (ValueBuffer != NULL && DisplayInfoPtr != NULL + && DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) { if (ValueBuffer->ValueType == EDSLIB_BASICTYPE_SIGNED_INT) { TableEnt = EdsLib_DisplaySymbolLookup_GetByValue(DisplayInfoPtr->DisplayArg.SymTable, - DisplayInfoPtr->DisplayArgTableSize, ValueBuffer->Value.SignedInteger); + DisplayInfoPtr->DisplayArgTableSize, + ValueBuffer->Value.SignedInteger); } else if (ValueBuffer->ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT) { TableEnt = EdsLib_DisplaySymbolLookup_GetByValue(DisplayInfoPtr->DisplayArg.SymTable, - DisplayInfoPtr->DisplayArgTableSize, ValueBuffer->Value.UnsignedInteger); + DisplayInfoPtr->DisplayArgTableSize, + ValueBuffer->Value.UnsignedInteger); } } @@ -593,37 +622,41 @@ const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, Eds * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DisplayDB_GetEnumValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *String, EdsLib_GenericValueBuffer_t *ValueBuffer) +void EdsLib_DisplayDB_GetEnumValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *String, + EdsLib_GenericValueBuffer_t *ValueBuffer) { - EdsLib_DatabaseRef_t TempRef; - const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; + EdsLib_DatabaseRef_t TempRef; + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; const EdsLib_SymbolTableEntry_t *Symbol; EdsLib_Decode_StructId(&TempRef, EdsId); - Symbol = NULL; + Symbol = NULL; DisplayInfoPtr = EdsLib_DisplayDB_GetEntry(GD, &TempRef); if (DisplayInfoPtr != NULL && DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) { Symbol = EdsLib_DisplaySymbolLookup_GetByName(DisplayInfoPtr->DisplayArg.SymTable, - DisplayInfoPtr->DisplayArgTableSize, String, strlen(String)); + DisplayInfoPtr->DisplayArgTableSize, + String, + strlen(String)); } else { Symbol = NULL; } - if (ValueBuffer != NULL) { if (Symbol == NULL) { - ValueBuffer->ValueType = EDSLIB_BASICTYPE_NONE; + ValueBuffer->ValueType = EDSLIB_BASICTYPE_NONE; ValueBuffer->Value.SignedInteger = 0; } else { - ValueBuffer->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ValueBuffer->ValueType = EDSLIB_BASICTYPE_SIGNED_INT; ValueBuffer->Value.SignedInteger = Symbol->SymValue; } } @@ -635,28 +668,31 @@ void EdsLib_DisplayDB_GetEnumValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, EdsLib_SymbolCallback_t Callback, void *Arg) +void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_SymbolCallback_t Callback, + void *Arg) { - EdsLib_DatabaseRef_t TempRef; - const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; + EdsLib_DatabaseRef_t TempRef; + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; const EdsLib_SymbolTableEntry_t *Symbol; - uint16_t SymbolCount; + uint16_t SymbolCount; EdsLib_Decode_StructId(&TempRef, EdsId); DisplayInfoPtr = EdsLib_DisplayDB_GetEntry(GD, &TempRef); if (DisplayInfoPtr != NULL && DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) { - Symbol = DisplayInfoPtr->DisplayArg.SymTable; + Symbol = DisplayInfoPtr->DisplayArg.SymTable; SymbolCount = DisplayInfoPtr->DisplayArgTableSize; } else { - Symbol = NULL; + Symbol = NULL; SymbolCount = 0; } - while(Symbol != NULL && SymbolCount > 0) + while (Symbol != NULL && SymbolCount > 0) { Callback(Arg, Symbol->SymName, Symbol->SymValue); ++Symbol; @@ -670,40 +706,44 @@ void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, EdsLi * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const char * EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t Index, char *Buffer, uint32_t BufferSize) +const char *EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t Index, + char *Buffer, + uint32_t BufferSize) { - EdsLib_DatabaseRef_t TempRef; - const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; - const EdsLib_SymbolTableEntry_t *Symbol; - uint16_t SymbolCount; - const char * Result; - - EdsLib_Decode_StructId(&TempRef, EdsId); - DisplayInfoPtr = EdsLib_DisplayDB_GetEntry(GD, &TempRef); - - if (DisplayInfoPtr != NULL && DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) - { - Symbol = DisplayInfoPtr->DisplayArg.SymTable; - SymbolCount = DisplayInfoPtr->DisplayArgTableSize; - } + EdsLib_DatabaseRef_t TempRef; + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; + const EdsLib_SymbolTableEntry_t *Symbol; + uint16_t SymbolCount; + const char *Result; + + EdsLib_Decode_StructId(&TempRef, EdsId); + DisplayInfoPtr = EdsLib_DisplayDB_GetEntry(GD, &TempRef); + + if (DisplayInfoPtr != NULL && DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) + { + Symbol = DisplayInfoPtr->DisplayArg.SymTable; + SymbolCount = DisplayInfoPtr->DisplayArgTableSize; + } else { - Symbol = NULL; + Symbol = NULL; SymbolCount = 0; } - if (Symbol != NULL && Index < SymbolCount) - { - Symbol = Symbol + Index; - snprintf(Buffer, BufferSize,"%s", Symbol->SymName); + if (Symbol != NULL && Index < SymbolCount) + { + Symbol = Symbol + Index; + snprintf(Buffer, BufferSize, "%s", Symbol->SymName); Result = Buffer; - } - else - { - Result = UNDEF_STRING; - } + } + else + { + Result = UNDEF_STRING; + } - return Result; + return Result; } /*---------------------------------------------------------------- @@ -714,37 +754,37 @@ const char * EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t *-----------------------------------------------------------------*/ intmax_t EdsLib_DisplayDB_GetEnumValueByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t Index) { - EdsLib_DatabaseRef_t TempRef; - const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; - const EdsLib_SymbolTableEntry_t *Symbol; - uint16_t SymbolCount; - intmax_t Result; - - EdsLib_Decode_StructId(&TempRef, EdsId); - DisplayInfoPtr = EdsLib_DisplayDB_GetEntry(GD, &TempRef); - - if (DisplayInfoPtr != NULL && DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) - { - Symbol = DisplayInfoPtr->DisplayArg.SymTable; - SymbolCount = DisplayInfoPtr->DisplayArgTableSize; - } + EdsLib_DatabaseRef_t TempRef; + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr; + const EdsLib_SymbolTableEntry_t *Symbol; + uint16_t SymbolCount; + intmax_t Result; + + EdsLib_Decode_StructId(&TempRef, EdsId); + DisplayInfoPtr = EdsLib_DisplayDB_GetEntry(GD, &TempRef); + + if (DisplayInfoPtr != NULL && DisplayInfoPtr->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) + { + Symbol = DisplayInfoPtr->DisplayArg.SymTable; + SymbolCount = DisplayInfoPtr->DisplayArgTableSize; + } else { - Symbol = NULL; + Symbol = NULL; SymbolCount = 0; } - if (Symbol != NULL && Index < SymbolCount) - { - Symbol = Symbol + Index; - Result = Symbol->SymValue; - } - else - { - Result = (intmax_t) EDSLIB_FAILURE; - } + if (Symbol != NULL && Index < SymbolCount) + { + Symbol = Symbol + Index; + Result = Symbol->SymValue; + } + else + { + Result = (intmax_t)EDSLIB_FAILURE; + } - return Result; + return Result; } /*---------------------------------------------------------------- @@ -755,16 +795,16 @@ intmax_t EdsLib_DisplayDB_GetEnumValueByIndex(const EdsLib_DatabaseObject_t *GD, *-----------------------------------------------------------------*/ EdsLib_Id_t EdsLib_DisplayDB_LookupTypeName(const EdsLib_DatabaseObject_t *GD, const char *String) { - EdsLib_DisplayDB_t NameDict; - EdsLib_DataTypeDB_t DataDict; + EdsLib_DisplayDB_t NameDict; + EdsLib_DataTypeDB_t DataDict; const EdsLib_DisplayDB_Entry_t *DisplayInfo; - const char *EndPtr; - size_t PartLength; - uint16_t InstanceNum; - uint16_t AppIdx; - uint16_t StructId; - EdsLib_Id_t Result; - const char *Namespace; + const char *EndPtr; + size_t PartLength; + uint16_t InstanceNum; + uint16_t AppIdx; + uint16_t StructId; + EdsLib_Id_t Result; + const char *Namespace; /* * A global structure ID is different than a message ID in two ways: @@ -772,8 +812,8 @@ EdsLib_Id_t EdsLib_DisplayDB_LookupTypeName(const EdsLib_DatabaseObject_t *GD, c * - the format index goes directly into the map table */ - Result = EDSLIB_ID_INVALID; - NameDict = NULL; + Result = EDSLIB_ID_INVALID; + NameDict = NULL; InstanceNum = 0; if (GD->DisplayDB_Table != NULL && GD->DataTypeDB_Table != NULL) @@ -789,8 +829,7 @@ EdsLib_Id_t EdsLib_DisplayDB_LookupTypeName(const EdsLib_DatabaseObject_t *GD, c { DataDict = GD->DataTypeDB_Table[AppIdx]; NameDict = GD->DisplayDB_Table[AppIdx]; - if (NameDict == NULL || DataDict == NULL || - NameDict->DisplayInfoTable == NULL) + if (NameDict == NULL || DataDict == NULL || NameDict->DisplayInfoTable == NULL) { continue; } @@ -804,15 +843,13 @@ EdsLib_Id_t EdsLib_DisplayDB_LookupTypeName(const EdsLib_DatabaseObject_t *GD, c if (Namespace != NULL) { PartLength = strlen(Namespace); - if (strncmp(Namespace, String, PartLength) != 0 || - String[PartLength] != '/') + if (strncmp(Namespace, String, PartLength) != 0 || String[PartLength] != '/') { continue; } EndPtr += PartLength + 1; } - if (DisplayInfo->Name != NULL && - strcmp(DisplayInfo->Name,EndPtr) == 0) + if (DisplayInfo->Name != NULL && strcmp(DisplayInfo->Name, EndPtr) == 0) { /* Initialize the Global ID with the result */ Result = EDSLIB_MAKE_ID(AppIdx, StructId); diff --git a/edslib/fsw/src/edslib_displaydb_base64.c b/edslib/fsw/src/edslib_displaydb_base64.c index 6271749..fea49ed 100644 --- a/edslib/fsw/src/edslib_displaydb_base64.c +++ b/edslib/fsw/src/edslib_displaydb_base64.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_displaydb_base64.c * \ingroup fsw @@ -34,37 +33,26 @@ #include "edslib_internal.h" -static const char EdsLib_BASE64_CHARSET[64] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; +static const char EdsLib_BASE64_CHARSET[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; /* * Note the reverse lookup must be nonzero for any valid base64 char. The top * bit is used to accomplish this since only the lower 6 are used for decode. * This is how the code determines whether a byte is within the charset or not. */ -static const uint8_t EdsLib_BASE64_REVERSE[128] = -{ - ['A'] = 0x80,['B'] = 0x81,['C'] = 0x82,['D'] = 0x83, - ['E'] = 0x84,['F'] = 0x85,['G'] = 0x86,['H'] = 0x87, - ['I'] = 0x88,['J'] = 0x89,['K'] = 0x8A,['L'] = 0x8B, - ['M'] = 0x8C,['N'] = 0x8D,['O'] = 0x8E,['P'] = 0x8F, - ['Q'] = 0x90,['R'] = 0x91,['S'] = 0x92,['T'] = 0x93, - ['U'] = 0x94,['V'] = 0x95,['W'] = 0x96,['X'] = 0x97, - ['Y'] = 0x98,['Z'] = 0x99,['a'] = 0x9A,['b'] = 0x9B, - ['c'] = 0x9C,['d'] = 0x9D,['e'] = 0x9E,['f'] = 0x9F, - ['g'] = 0xA0,['h'] = 0xA1,['i'] = 0xA2,['j'] = 0xA3, - ['k'] = 0xA4,['l'] = 0xA5,['m'] = 0xA6,['n'] = 0xA7, - ['o'] = 0xA8,['p'] = 0xA9,['q'] = 0xAA,['r'] = 0xAB, - ['s'] = 0xAC,['t'] = 0xAD,['u'] = 0xAE,['v'] = 0xAF, - ['w'] = 0xB0,['x'] = 0xB1,['y'] = 0xB2,['z'] = 0xB3, - ['0'] = 0xB4,['1'] = 0xB5,['2'] = 0xB6,['3'] = 0xB7, - ['4'] = 0xB8,['5'] = 0xB9,['6'] = 0xBA,['7'] = 0xBB, - ['8'] = 0xBC,['9'] = 0xBD,['+'] = 0xBE,['/'] = 0xBF +static const uint8_t EdsLib_BASE64_REVERSE[128] = { + ['A'] = 0x80, ['B'] = 0x81, ['C'] = 0x82, ['D'] = 0x83, ['E'] = 0x84, ['F'] = 0x85, ['G'] = 0x86, ['H'] = 0x87, + ['I'] = 0x88, ['J'] = 0x89, ['K'] = 0x8A, ['L'] = 0x8B, ['M'] = 0x8C, ['N'] = 0x8D, ['O'] = 0x8E, ['P'] = 0x8F, + ['Q'] = 0x90, ['R'] = 0x91, ['S'] = 0x92, ['T'] = 0x93, ['U'] = 0x94, ['V'] = 0x95, ['W'] = 0x96, ['X'] = 0x97, + ['Y'] = 0x98, ['Z'] = 0x99, ['a'] = 0x9A, ['b'] = 0x9B, ['c'] = 0x9C, ['d'] = 0x9D, ['e'] = 0x9E, ['f'] = 0x9F, + ['g'] = 0xA0, ['h'] = 0xA1, ['i'] = 0xA2, ['j'] = 0xA3, ['k'] = 0xA4, ['l'] = 0xA5, ['m'] = 0xA6, ['n'] = 0xA7, + ['o'] = 0xA8, ['p'] = 0xA9, ['q'] = 0xAA, ['r'] = 0xAB, ['s'] = 0xAC, ['t'] = 0xAD, ['u'] = 0xAE, ['v'] = 0xAF, + ['w'] = 0xB0, ['x'] = 0xB1, ['y'] = 0xB2, ['z'] = 0xB3, ['0'] = 0xB4, ['1'] = 0xB5, ['2'] = 0xB6, ['3'] = 0xB7, + ['4'] = 0xB8, ['5'] = 0xB9, ['6'] = 0xBA, ['7'] = 0xBB, ['8'] = 0xBC, ['9'] = 0xBD, ['+'] = 0xBE, ['/'] = 0xBF }; - /*---------------------------------------------------------------- * * EdsLib internal function @@ -77,7 +65,7 @@ void EdsLib_DisplayDB_Base64Encode(char *Out, uint32_t OutputLenBytes, const uin uint32_t NumBits; uint32_t OutputPos; uint32_t TailPos; - uint8_t OutCh; + uint8_t OutCh; /* * Note - this currently does an unpadded base64 conversion i.e. @@ -85,37 +73,37 @@ void EdsLib_DisplayDB_Base64Encode(char *Out, uint32_t OutputLenBytes, const uin * of 3. These are really not necessary unless concatenating data. */ OutputPos = 1; - TailPos = 0; - ShiftReg = 0; - NumBits = 0; - while(InputLenBits > 0) + TailPos = 0; + ShiftReg = 0; + NumBits = 0; + while (InputLenBits > 0) { /* note at the start of this loop NumBits is always < 6, * so it is guaranteed there is enough space to read at least 8 bits */ ShiftReg <<= 8; - ShiftReg |= (*In); + ShiftReg |= (*In); ++In; if (InputLenBits >= 8) { /* all 8 bits are valid */ - NumBits += 8; + NumBits += 8; InputLenBits -= 8; } else { /* shift out bits that are not valid */ - NumBits += InputLenBits; + NumBits += InputLenBits; ShiftReg >>= (8 - InputLenBits); /* pad with zero bits to make a multiple of 6 */ InputLenBits = NumBits % 6; if (InputLenBits != 0) { - InputLenBits = 6 - InputLenBits; - ShiftReg <<= InputLenBits; - NumBits += InputLenBits; - InputLenBits = 0; + InputLenBits = 6 - InputLenBits; + ShiftReg <<= InputLenBits; + NumBits += InputLenBits; + InputLenBits = 0; } } @@ -142,8 +130,8 @@ void EdsLib_DisplayDB_Base64Encode(char *Out, uint32_t OutputLenBytes, const uin * so no need to include trailing zeros in the base64 data */ if (TailPos < OutputLenBytes) { - Out -= OutputPos - TailPos - 1; - *Out = 0; + Out -= OutputPos - TailPos - 1; + *Out = 0; } } @@ -158,15 +146,15 @@ void EdsLib_DisplayDB_Base64Decode(uint8_t *Out, uint32_t OutputLenBits, const c uint32_t ActualLen; uint32_t ShiftReg; uint32_t NumBits; - uint8_t Ch; + uint8_t Ch; /* the native buffer is always a multiple of 8 bits, * even if the packed EDS size is not */ ActualLen = EdsLib_BITS_TO_OCTETS(OutputLenBits); - ShiftReg = 0; - NumBits = 0; + ShiftReg = 0; + NumBits = 0; - while(ActualLen > 0) + while (ActualLen > 0) { /* note at the start of this loop NumBits is always < 8, * so it is guaranteed there is enough space to read at least 8 bits */ @@ -179,8 +167,8 @@ void EdsLib_DisplayDB_Base64Decode(uint8_t *Out, uint32_t OutputLenBits, const c if (Ch != 0) { ShiftReg <<= 6; - ShiftReg |= Ch & 0x3F; - NumBits += 6; + ShiftReg |= Ch & 0x3F; + NumBits += 6; } ++In; } @@ -188,14 +176,13 @@ void EdsLib_DisplayDB_Base64Decode(uint8_t *Out, uint32_t OutputLenBits, const c { /* generate zero padding to fill the entire space */ ShiftReg <<= 8; - NumBits += 8; + NumBits += 8; } - if (NumBits >= 8) { NumBits -= 8; - *Out = (ShiftReg >> NumBits) & 0xFF; + *Out = (ShiftReg >> NumBits) & 0xFF; --ActualLen; ++Out; } diff --git a/edslib/fsw/src/edslib_displaydb_iterator.c b/edslib/fsw/src/edslib_displaydb_iterator.c index d58fd2e..9badf2b 100644 --- a/edslib/fsw/src/edslib_displaydb_iterator.c +++ b/edslib/fsw/src/edslib_displaydb_iterator.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_displaydb_iterator.c * \ingroup fsw @@ -47,93 +46,94 @@ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -EdsLib_Iterator_Rc_t EdsLib_DisplayIterator_Wrapper(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - void *OpaqueArg) +EdsLib_Iterator_Rc_t EdsLib_DisplayIterator_Wrapper(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + void *OpaqueArg) { - EdsLib_DisplayDB_InternalIterator_ControlBlock_t *Iterator = (EdsLib_DisplayDB_InternalIterator_ControlBlock_t *)OpaqueArg; - EdsLib_DisplayIterator_StackEntry_t *TopEnt; - const char *EntityName; - EdsLib_Iterator_Rc_t RetCode; + EdsLib_DisplayDB_InternalIterator_ControlBlock_t *Iterator = + (EdsLib_DisplayDB_InternalIterator_ControlBlock_t *)OpaqueArg; + EdsLib_DisplayIterator_StackEntry_t *TopEnt; + const char *EntityName; + EdsLib_Iterator_Rc_t RetCode; - RetCode = EDSLIB_ITERATOR_RC_DEFAULT; - EntityName = NULL; + RetCode = EDSLIB_ITERATOR_RC_DEFAULT; + EntityName = NULL; - switch(CbType) - { - case EDSLIB_ITERATOR_CBTYPE_START: - { - TopEnt = Iterator->NextStackEntry; - ++Iterator->NextStackEntry; + switch (CbType) + { + case EDSLIB_ITERATOR_CBTYPE_START: + { + TopEnt = Iterator->NextStackEntry; + ++Iterator->NextStackEntry; - /* - * note it is possible to get a NULL display info here, as the display - * info is loaded separately and therefore can be missing. - */ - TopEnt->DisplayInf = EdsLib_DisplayDB_GetEntry(GD, &EntityInfo->Details.RefObj); - while (TopEnt->DisplayInf != NULL && - TopEnt->DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_REFERENCE_TYPE) - { - TopEnt->DisplayInf = EdsLib_DisplayDB_GetEntry(GD, &TopEnt->DisplayInf->DisplayArg.RefObj); - } - break; - } - case EDSLIB_ITERATOR_CBTYPE_MEMBER: - { - TopEnt = Iterator->NextStackEntry - 1; - if (TopEnt->DisplayInf) - { - if (TopEnt->DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE) - { - EntityName = TopEnt->DisplayInf->DisplayArg.NameTable[EntityInfo->CurrIndex]; - } - else if (TopEnt->DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) - { - const EdsLib_SymbolTableEntry_t *TableEnt = - EdsLib_DisplaySymbolLookup_GetByValue(TopEnt->DisplayInf->DisplayArg.SymTable, - TopEnt->DisplayInf->DisplayArgTableSize, EntityInfo->CurrIndex); - if (TableEnt != NULL) - { - EntityName = TableEnt->SymName; - } - } - } - break; - } - case EDSLIB_ITERATOR_CBTYPE_END: - { - --Iterator->NextStackEntry; - break; - } - default: - break; - } + /* + * note it is possible to get a NULL display info here, as the display + * info is loaded separately and therefore can be missing. + */ + TopEnt->DisplayInf = EdsLib_DisplayDB_GetEntry(GD, &EntityInfo->Details.RefObj); + while (TopEnt->DisplayInf != NULL && TopEnt->DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_REFERENCE_TYPE) + { + TopEnt->DisplayInf = EdsLib_DisplayDB_GetEntry(GD, &TopEnt->DisplayInf->DisplayArg.RefObj); + } + break; + } + case EDSLIB_ITERATOR_CBTYPE_MEMBER: + { + TopEnt = Iterator->NextStackEntry - 1; + if (TopEnt->DisplayInf) + { + if (TopEnt->DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE) + { + EntityName = TopEnt->DisplayInf->DisplayArg.NameTable[EntityInfo->CurrIndex]; + } + else if (TopEnt->DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) + { + const EdsLib_SymbolTableEntry_t *TableEnt = + EdsLib_DisplaySymbolLookup_GetByValue(TopEnt->DisplayInf->DisplayArg.SymTable, + TopEnt->DisplayInf->DisplayArgTableSize, + EntityInfo->CurrIndex); + if (TableEnt != NULL) + { + EntityName = TableEnt->SymName; + } + } + } + break; + } + case EDSLIB_ITERATOR_CBTYPE_END: + { + --Iterator->NextStackEntry; + break; + } + default: + break; + } - if (EntityInfo->Details.EntryType == EDSLIB_ENTRYTYPE_BASE_TYPE) - { - /* - * This is a "hidden base type" structure. - * This means that the members of this structure will be iterated as if - * they are members of the parent structure, just like an inherited type - * in the typical OO paradigm. In this case we descend _without_ giving - * the typical user callback. - */ - if (CbType == EDSLIB_ITERATOR_CBTYPE_MEMBER) - { - RetCode = EDSLIB_ITERATOR_RC_DESCEND; - } - else - { - RetCode = EDSLIB_ITERATOR_RC_CONTINUE; - } - } - else - { - RetCode = Iterator->NextCallback(GD, CbType, EntityInfo, EntityName, Iterator->NextCallbackArg); - } + if (EntityInfo->Details.EntryType == EDSLIB_ENTRYTYPE_BASE_TYPE) + { + /* + * This is a "hidden base type" structure. + * This means that the members of this structure will be iterated as if + * they are members of the parent structure, just like an inherited type + * in the typical OO paradigm. In this case we descend _without_ giving + * the typical user callback. + */ + if (CbType == EDSLIB_ITERATOR_CBTYPE_MEMBER) + { + RetCode = EDSLIB_ITERATOR_RC_DESCEND; + } + else + { + RetCode = EDSLIB_ITERATOR_RC_CONTINUE; + } + } + else + { + RetCode = Iterator->NextCallback(GD, CbType, EntityInfo, EntityName, Iterator->NextCallbackArg); + } - return RetCode; + return RetCode; } /*---------------------------------------------------------------- @@ -142,24 +142,25 @@ EdsLib_Iterator_Rc_t EdsLib_DisplayIterator_Wrapper(const EdsLib_DatabaseObject_ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -EdsLib_Iterator_Rc_t EdsLib_DisplayUserIterator_BaseName_Callback(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - const char *EntityName, - void *OpaqueArg) +EdsLib_Iterator_Rc_t +EdsLib_DisplayUserIterator_BaseName_Callback(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + const char *EntityName, + void *OpaqueArg) { EdsLib_DisplayUserIterator_BaseName_ControlBlock_t *CtrlBlock = OpaqueArg; - EdsLib_EntityDescriptor_t ParamBuff; + EdsLib_EntityDescriptor_t ParamBuff; if (CbType == EDSLIB_ITERATOR_CBTYPE_MEMBER) { memset(&ParamBuff, 0, sizeof(ParamBuff)); - ParamBuff.EntityInfo.Offset = EntityInfo->StartOffset; - ParamBuff.EntityInfo.MaxSize.Bits = EntityInfo->EndOffset.Bits - EntityInfo->StartOffset.Bits; + ParamBuff.EntityInfo.Offset = EntityInfo->StartOffset; + ParamBuff.EntityInfo.MaxSize.Bits = EntityInfo->EndOffset.Bits - EntityInfo->StartOffset.Bits; ParamBuff.EntityInfo.MaxSize.Bytes = EntityInfo->EndOffset.Bytes - EntityInfo->StartOffset.Bytes; - ParamBuff.EntityInfo.EdsId = EdsLib_Encode_StructId(&EntityInfo->Details.RefObj); - ParamBuff.FullName = EntityName; - ParamBuff.SeqNum = EntityInfo->CurrIndex; + ParamBuff.EntityInfo.EdsId = EdsLib_Encode_StructId(&EntityInfo->Details.RefObj); + ParamBuff.FullName = EntityName; + ParamBuff.SeqNum = EntityInfo->CurrIndex; CtrlBlock->UserCallback(CtrlBlock->UserArg, &ParamBuff); } @@ -173,88 +174,95 @@ EdsLib_Iterator_Rc_t EdsLib_DisplayUserIterator_BaseName_Callback(const EdsLib_D * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -EdsLib_Iterator_Rc_t EdsLib_DisplayUserIterator_FullName_Callback(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - const char *EntityName, - void *OpaqueArg) +EdsLib_Iterator_Rc_t +EdsLib_DisplayUserIterator_FullName_Callback(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + const char *EntityName, + void *OpaqueArg) { EdsLib_DisplayUserIterator_FullName_ControlBlock_t *CtrlBlock = OpaqueArg; - EdsLib_DisplayUserIterator_FullName_StackEntry_t *TopEnt; - EdsLib_Iterator_Rc_t RetCode; + EdsLib_DisplayUserIterator_FullName_StackEntry_t *TopEnt; + EdsLib_Iterator_Rc_t RetCode; RetCode = EDSLIB_ITERATOR_RC_DEFAULT; - switch(CbType) + switch (CbType) { - case EDSLIB_ITERATOR_CBTYPE_START: - { - TopEnt = CtrlBlock->NextEntry; - ++CtrlBlock->NextEntry; - TopEnt->ScratchOffset = strlen(CtrlBlock->ScratchNameBuffer); - TopEnt->HasNamedMembers = (EntityInfo->DataDictPtr->BasicType == EDSLIB_BASICTYPE_CONTAINER || - EntityInfo->DataDictPtr->BasicType == EDSLIB_BASICTYPE_COMPONENT); - if (TopEnt->HasNamedMembers && TopEnt->ScratchOffset > 0 && - TopEnt->ScratchOffset < (sizeof(CtrlBlock->ScratchNameBuffer) - 1)) + case EDSLIB_ITERATOR_CBTYPE_START: { - CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] = '.'; - ++TopEnt->ScratchOffset; - CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] = 0; + TopEnt = CtrlBlock->NextEntry; + ++CtrlBlock->NextEntry; + TopEnt->ScratchOffset = strlen(CtrlBlock->ScratchNameBuffer); + TopEnt->HasNamedMembers = (EntityInfo->DataDictPtr->BasicType == EDSLIB_BASICTYPE_CONTAINER + || EntityInfo->DataDictPtr->BasicType == EDSLIB_BASICTYPE_COMPONENT); + if (TopEnt->HasNamedMembers && TopEnt->ScratchOffset > 0 + && TopEnt->ScratchOffset < (sizeof(CtrlBlock->ScratchNameBuffer) - 1)) + { + CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] = '.'; + ++TopEnt->ScratchOffset; + CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] = 0; + } + break; } - break; - } - case EDSLIB_ITERATOR_CBTYPE_MEMBER: - { - TopEnt = CtrlBlock->NextEntry - 1; - if (EntityName != NULL) + case EDSLIB_ITERATOR_CBTYPE_MEMBER: { - /* - * For arrays, the name will be suffixed with a C-style array index i.e. parent[index] - * For structures, append a single '.' character as a C-style field delineator i.e "parent.member" - */ - if (EntityInfo->Details.EntryType == EDSLIB_ENTRYTYPE_ARRAY_ELEMENT) + TopEnt = CtrlBlock->NextEntry - 1; + if (EntityName != NULL) + { + /* + * For arrays, the name will be suffixed with a C-style array index i.e. parent[index] + * For structures, append a single '.' character as a C-style field delineator i.e "parent.member" + */ + if (EntityInfo->Details.EntryType == EDSLIB_ENTRYTYPE_ARRAY_ELEMENT) + { + snprintf(&CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset], + sizeof(CtrlBlock->ScratchNameBuffer) - TopEnt->ScratchOffset, + "[%s]", + EntityName); + } + else + { + snprintf(&CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset], + sizeof(CtrlBlock->ScratchNameBuffer) - TopEnt->ScratchOffset, + "%s", + EntityName); + } + } + else if (EntityInfo->Details.EntryType == EDSLIB_ENTRYTYPE_ARRAY_ELEMENT) { snprintf(&CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset], - sizeof(CtrlBlock->ScratchNameBuffer) - TopEnt->ScratchOffset, - "[%s]", EntityName); + sizeof(CtrlBlock->ScratchNameBuffer) - TopEnt->ScratchOffset, + "[%u]", + (unsigned int)EntityInfo->CurrIndex); } else { - snprintf(&CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset], - sizeof(CtrlBlock->ScratchNameBuffer) - TopEnt->ScratchOffset, - "%s", EntityName); + /* No name */ + CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] = 0; } - } - else if (EntityInfo->Details.EntryType == EDSLIB_ENTRYTYPE_ARRAY_ELEMENT) - { - snprintf(&CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset], - sizeof(CtrlBlock->ScratchNameBuffer) - TopEnt->ScratchOffset, - "[%u]", (unsigned int)EntityInfo->CurrIndex); - } - else - { - /* No name */ - CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] = 0; - } - if (EntityInfo->DataDictPtr->NumSubElements > 0) - { - RetCode = EDSLIB_ITERATOR_RC_DESCEND; + if (EntityInfo->DataDictPtr->NumSubElements > 0) + { + RetCode = EDSLIB_ITERATOR_RC_DESCEND; + } + else if (CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] != 0) + { + RetCode = EdsLib_DisplayUserIterator_BaseName_Callback(GD, + CbType, + EntityInfo, + CtrlBlock->ScratchNameBuffer, + &CtrlBlock->Base); + } + break; } - else if (CtrlBlock->ScratchNameBuffer[TopEnt->ScratchOffset] != 0) + case EDSLIB_ITERATOR_CBTYPE_END: { - RetCode = EdsLib_DisplayUserIterator_BaseName_Callback(GD, CbType, - EntityInfo, CtrlBlock->ScratchNameBuffer, &CtrlBlock->Base); + --CtrlBlock->NextEntry; + break; } - break; - } - case EDSLIB_ITERATOR_CBTYPE_END: - { - --CtrlBlock->NextEntry; - break; - } - default: - break; + default: + break; } return RetCode; diff --git a/edslib/fsw/src/edslib_displaydb_locate.c b/edslib/fsw/src/edslib_displaydb_locate.c index 3d0d9c1..61fccdb 100644 --- a/edslib/fsw/src/edslib_displaydb_locate.c +++ b/edslib/fsw/src/edslib_displaydb_locate.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_displaydb_locate.c * \ingroup fsw @@ -43,27 +42,26 @@ * EdsLib local helper function * *-----------------------------------------------------------------*/ -static EdsLib_Iterator_Rc_t EdsLib_DisplayLocateMember_GetContainerPosition_Callback( - const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - const char *EntityName, - void *OpaqueArg) +static EdsLib_Iterator_Rc_t +EdsLib_DisplayLocateMember_GetContainerPosition_Callback(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + const char *EntityName, + void *OpaqueArg) { EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock = OpaqueArg; - if (CbType == EDSLIB_ITERATOR_CBTYPE_MEMBER && - EntityName != NULL && - CtrlBlock->MatchQuality != EDSLIB_MATCHQUALITY_EXACT && - strncmp(EntityName, CtrlBlock->ContentPos, CtrlBlock->ContentLength) == 0 && - EntityName[CtrlBlock->ContentLength] == 0) + if (CbType == EDSLIB_ITERATOR_CBTYPE_MEMBER && EntityName != NULL + && CtrlBlock->MatchQuality != EDSLIB_MATCHQUALITY_EXACT + && strncmp(EntityName, CtrlBlock->ContentPos, CtrlBlock->ContentLength) == 0 + && EntityName[CtrlBlock->ContentLength] == 0) { - CtrlBlock->MatchQuality = EDSLIB_MATCHQUALITY_EXACT; - CtrlBlock->RefObj = EntityInfo->Details.RefObj; - CtrlBlock->MaxSize.Bytes = EntityInfo->EndOffset.Bytes - EntityInfo->StartOffset.Bytes; - CtrlBlock->MaxSize.Bits = EntityInfo->EndOffset.Bits - EntityInfo->StartOffset.Bits; + CtrlBlock->MatchQuality = EDSLIB_MATCHQUALITY_EXACT; + CtrlBlock->RefObj = EntityInfo->Details.RefObj; + CtrlBlock->MaxSize.Bytes = EntityInfo->EndOffset.Bytes - EntityInfo->StartOffset.Bytes; + CtrlBlock->MaxSize.Bits = EntityInfo->EndOffset.Bits - EntityInfo->StartOffset.Bits; CtrlBlock->StartOffset.Bytes += EntityInfo->StartOffset.Bytes; - CtrlBlock->StartOffset.Bits += EntityInfo->StartOffset.Bits; + CtrlBlock->StartOffset.Bits += EntityInfo->StartOffset.Bits; } if (CtrlBlock->MatchQuality != EDSLIB_MATCHQUALITY_EXACT) @@ -79,12 +77,13 @@ static EdsLib_Iterator_Rc_t EdsLib_DisplayLocateMember_GetContainerPosition_Call * EdsLib local helper function * *-----------------------------------------------------------------*/ -static void EdsLib_DisplayLocateMember_GetContainerPosition(const EdsLib_DatabaseObject_t *GD, EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock) +static void EdsLib_DisplayLocateMember_GetContainerPosition(const EdsLib_DatabaseObject_t *GD, + EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock) { EDSLIB_DECLARE_DISPLAY_ITERATOR_CB(IteratorState, - EDSLIB_ITERATOR_MAX_BASETYPE_DEPTH, - EdsLib_DisplayLocateMember_GetContainerPosition_Callback, - CtrlBlock); + EDSLIB_ITERATOR_MAX_BASETYPE_DEPTH, + EdsLib_DisplayLocateMember_GetContainerPosition_Callback, + CtrlBlock); EDSLIB_RESET_DISPLAY_ITERATOR_FROM_REFOBJ(IteratorState, CtrlBlock->RefObj); @@ -96,12 +95,13 @@ static void EdsLib_DisplayLocateMember_GetContainerPosition(const EdsLib_Databas * EdsLib local helper function * *-----------------------------------------------------------------*/ -static void EdsLib_DisplayLocateMember_GetArrayPosition(const EdsLib_DatabaseObject_t *GD, EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock) +static void EdsLib_DisplayLocateMember_GetArrayPosition(const EdsLib_DatabaseObject_t *GD, + EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock) { - const EdsLib_DisplayDB_Entry_t *DisplayInf; + const EdsLib_DisplayDB_Entry_t *DisplayInf; const EdsLib_SymbolTableEntry_t *Sym = NULL; - const char *ConvEnd; - int32_t LocalIdx; + const char *ConvEnd; + int32_t LocalIdx; DisplayInf = EdsLib_DisplayDB_GetEntry(GD, &CtrlBlock->RefObj); while (DisplayInf != NULL && DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_REFERENCE_TYPE) @@ -109,15 +109,16 @@ static void EdsLib_DisplayLocateMember_GetArrayPosition(const EdsLib_DatabaseObj DisplayInf = EdsLib_DisplayDB_GetEntry(GD, &DisplayInf->DisplayArg.RefObj); } - if (DisplayInf != NULL && - DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) + if (DisplayInf != NULL && DisplayInf->DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) { - Sym = EdsLib_DisplaySymbolLookup_GetByName(DisplayInf->DisplayArg.SymTable, DisplayInf->DisplayArgTableSize, - CtrlBlock->ContentPos, CtrlBlock->ContentLength); + Sym = EdsLib_DisplaySymbolLookup_GetByName(DisplayInf->DisplayArg.SymTable, + DisplayInf->DisplayArgTableSize, + CtrlBlock->ContentPos, + CtrlBlock->ContentLength); } if (Sym != NULL) { - LocalIdx = Sym->SymValue; + LocalIdx = Sym->SymValue; CtrlBlock->MatchQuality = EDSLIB_MATCHQUALITY_EXACT; } else @@ -131,11 +132,11 @@ static void EdsLib_DisplayLocateMember_GetArrayPosition(const EdsLib_DatabaseObj } if (CtrlBlock->MatchQuality != EDSLIB_MATCHQUALITY_NONE) { - CtrlBlock->RefObj = CtrlBlock->DataDict->Detail.Array->ElementRefObj; - CtrlBlock->MaxSize.Bytes = (CtrlBlock->DataDict->SizeInfo.Bytes / CtrlBlock->DataDict->NumSubElements); - CtrlBlock->MaxSize.Bits = (CtrlBlock->DataDict->SizeInfo.Bits / CtrlBlock->DataDict->NumSubElements); + CtrlBlock->RefObj = CtrlBlock->DataDict->Detail.Array->ElementRefObj; + CtrlBlock->MaxSize.Bytes = (CtrlBlock->DataDict->SizeInfo.Bytes / CtrlBlock->DataDict->NumSubElements); + CtrlBlock->MaxSize.Bits = (CtrlBlock->DataDict->SizeInfo.Bits / CtrlBlock->DataDict->NumSubElements); CtrlBlock->StartOffset.Bytes += LocalIdx * CtrlBlock->MaxSize.Bytes; - CtrlBlock->StartOffset.Bits += LocalIdx * CtrlBlock->MaxSize.Bits; + CtrlBlock->StartOffset.Bits += LocalIdx * CtrlBlock->MaxSize.Bits; } } @@ -145,7 +146,8 @@ static void EdsLib_DisplayLocateMember_GetArrayPosition(const EdsLib_DatabaseObj * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -void EdsLib_DisplayLocateMember_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock) +void EdsLib_DisplayLocateMember_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock) { const char *EndPos; @@ -155,19 +157,46 @@ void EdsLib_DisplayLocateMember_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_D } CtrlBlock->DataDict = EdsLib_DataTypeDB_GetEntry(GD, &CtrlBlock->RefObj); - if (*CtrlBlock->ContentPos != 0 && CtrlBlock->DataDict != NULL && - CtrlBlock->DataDict->NumSubElements > 0) + if (*CtrlBlock->ContentPos != 0 && CtrlBlock->DataDict != NULL && CtrlBlock->DataDict->NumSubElements > 0) { switch (CtrlBlock->DataDict->BasicType) { - case EDSLIB_BASICTYPE_ARRAY: - if (*CtrlBlock->ContentPos == '[') - { - do + case EDSLIB_BASICTYPE_ARRAY: + if (*CtrlBlock->ContentPos == '[') { - ++CtrlBlock->ContentPos; + do + { + ++CtrlBlock->ContentPos; + } while (isspace((int)*CtrlBlock->ContentPos)); + + EndPos = CtrlBlock->ContentPos; + while (isalnum((int)*EndPos) || *EndPos == '_') + { + ++CtrlBlock->ContentLength; + ++EndPos; + } + + while (isspace((int)*EndPos)) + { + ++EndPos; + } + + if (*EndPos == ']' && CtrlBlock->ContentLength > 0) + { + CtrlBlock->NextTokenPos = EndPos + 1; + EdsLib_DisplayLocateMember_GetArrayPosition(GD, CtrlBlock); + } + } + break; + case EDSLIB_BASICTYPE_CONTAINER: + case EDSLIB_BASICTYPE_COMPONENT: + if (*CtrlBlock->ContentPos == '.') + { + do + { + ++CtrlBlock->ContentPos; + } while (isspace((int)*CtrlBlock->ContentPos)); } - while (isspace((int)*CtrlBlock->ContentPos)); EndPos = CtrlBlock->ContentPos; while (isalnum((int)*EndPos) || *EndPos == '_') @@ -176,44 +205,14 @@ void EdsLib_DisplayLocateMember_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_D ++EndPos; } - while (isspace((int)*EndPos)) - { - ++EndPos; - } - - if (*EndPos == ']' && CtrlBlock->ContentLength > 0) - { - CtrlBlock->NextTokenPos = EndPos + 1; - EdsLib_DisplayLocateMember_GetArrayPosition(GD, CtrlBlock); - } - } - break; - case EDSLIB_BASICTYPE_CONTAINER: - case EDSLIB_BASICTYPE_COMPONENT: - if (*CtrlBlock->ContentPos == '.') - { - do + if (CtrlBlock->ContentLength > 0) { - ++CtrlBlock->ContentPos; + CtrlBlock->NextTokenPos = EndPos; + EdsLib_DisplayLocateMember_GetContainerPosition(GD, CtrlBlock); } - while (isspace((int)*CtrlBlock->ContentPos)); - } - - EndPos = CtrlBlock->ContentPos; - while (isalnum((int)*EndPos) || *EndPos == '_') - { - ++CtrlBlock->ContentLength; - ++EndPos; - } - - if (CtrlBlock->ContentLength > 0) - { - CtrlBlock->NextTokenPos = EndPos; - EdsLib_DisplayLocateMember_GetContainerPosition(GD, CtrlBlock); - } - break; - default: - break; + break; + default: + break; } } } diff --git a/edslib/fsw/src/edslib_displaydb_lookup.c b/edslib/fsw/src/edslib_displaydb_lookup.c index fc48a70..303e7ab 100644 --- a/edslib/fsw/src/edslib_displaydb_lookup.c +++ b/edslib/fsw/src/edslib_displaydb_lookup.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_displaydb_lookup.c * \ingroup fsw @@ -48,20 +47,20 @@ *-----------------------------------------------------------------*/ EdsLib_DisplayDB_t EdsLib_DisplayDB_GetTopLevel(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx) { - /* - * As name tables are dependent on data tables, check that data table is also present - */ - if (GD->DisplayDB_Table == NULL) - { - return NULL; - } + /* + * As name tables are dependent on data tables, check that data table is also present + */ + if (GD->DisplayDB_Table == NULL) + { + return NULL; + } - if (AppIdx >= GD->AppTableSize) - { - return NULL; - } + if (AppIdx >= GD->AppTableSize) + { + return NULL; + } - return GD->DisplayDB_Table[AppIdx]; + return GD->DisplayDB_Table[AppIdx]; } /*---------------------------------------------------------------- @@ -70,34 +69,33 @@ EdsLib_DisplayDB_t EdsLib_DisplayDB_GetTopLevel(const EdsLib_DatabaseObject_t *G * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const EdsLib_DisplayDB_Entry_t *EdsLib_DisplayDB_GetEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj) +const EdsLib_DisplayDB_Entry_t *EdsLib_DisplayDB_GetEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj) { - EdsLib_DisplayDB_t NameDict; - EdsLib_DataTypeDB_t DataDict; + EdsLib_DisplayDB_t NameDict; + EdsLib_DataTypeDB_t DataDict; - if (RefObj == NULL || RefObj->Qualifier != EdsLib_DbRef_Qualifier_DATATYPE) - { - return NULL; - } + if (RefObj == NULL || RefObj->Qualifier != EdsLib_DbRef_Qualifier_DATATYPE) + { + return NULL; + } - DataDict = EdsLib_DataTypeDB_GetTopLevel(GD, RefObj->AppIndex); - if (DataDict == NULL) - { - return NULL; - } + DataDict = EdsLib_DataTypeDB_GetTopLevel(GD, RefObj->AppIndex); + if (DataDict == NULL) + { + return NULL; + } - NameDict = EdsLib_DisplayDB_GetTopLevel(GD, RefObj->AppIndex); - if (NameDict == NULL) - { - return NULL; - } + NameDict = EdsLib_DisplayDB_GetTopLevel(GD, RefObj->AppIndex); + if (NameDict == NULL) + { + return NULL; + } - if (NameDict->DisplayInfoTable == NULL || - RefObj->SubIndex >= DataDict->DataTypeTableSize) - { - return NULL; - } + if (NameDict->DisplayInfoTable == NULL || RefObj->SubIndex >= DataDict->DataTypeTableSize) + { + return NULL; + } - return &NameDict->DisplayInfoTable[RefObj->SubIndex]; + return &NameDict->DisplayInfoTable[RefObj->SubIndex]; } - diff --git a/edslib/fsw/src/edslib_displaydb_stringconv.c b/edslib/fsw/src/edslib_displaydb_stringconv.c index 935a6a5..9fbf3c8 100644 --- a/edslib/fsw/src/edslib_displaydb_stringconv.c +++ b/edslib/fsw/src/edslib_displaydb_stringconv.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_displaydb_stringconv.c * \ingroup fsw @@ -46,16 +45,19 @@ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByName(const EdsLib_SymbolTableEntry_t *SymbolDict, uint16_t TableSize, const char *String, uint32_t StringLen) +const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByName(const EdsLib_SymbolTableEntry_t *SymbolDict, + uint16_t TableSize, + const char *String, + uint32_t StringLen) { const EdsLib_SymbolTableEntry_t *Sym; - int Compare; - uint32_t LowIndex; - uint32_t HighIndex; - uint32_t SearchIndex; + int Compare; + uint32_t LowIndex; + uint32_t HighIndex; + uint32_t SearchIndex; - Sym = NULL; - LowIndex = 0; + Sym = NULL; + LowIndex = 0; HighIndex = TableSize; while (true) { @@ -66,7 +68,7 @@ const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByName(const EdsL } SearchIndex = (LowIndex + HighIndex) / 2; - Sym = &SymbolDict[SearchIndex]; + Sym = &SymbolDict[SearchIndex]; Compare = strncmp(Sym->SymName, String, StringLen); if (Compare == 0 && Sym->SymName[StringLen] == 0) @@ -93,7 +95,8 @@ const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByName(const EdsL * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByValue(const EdsLib_SymbolTableEntry_t *SymbolDict, uint16_t TableSize, intmax_t Value) +const EdsLib_SymbolTableEntry_t * +EdsLib_DisplaySymbolLookup_GetByValue(const EdsLib_SymbolTableEntry_t *SymbolDict, uint16_t TableSize, intmax_t Value) { const EdsLib_SymbolTableEntry_t *Result; @@ -121,21 +124,23 @@ const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByValue(const Eds return Result; } - /*---------------------------------------------------------------- * * EdsLib internal function * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, - char *OutputBuffer, uint32_t BufferSize, const void *SourcePtr) +int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, + char *OutputBuffer, + uint32_t BufferSize, + const void *SourcePtr) { EdsLib_GenericValueBuffer_t NumberBuffer; - EdsLib_ConstPtr_t Src; - int32_t Status; + EdsLib_ConstPtr_t Src; + int32_t Status; - Src.Ptr = SourcePtr; + Src.Ptr = SourcePtr; NumberBuffer.ValueType = EDSLIB_BASICTYPE_NONE; /* @@ -148,22 +153,22 @@ int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t * } else if (DictEntryPtr->BasicType == EDSLIB_BASICTYPE_CONTAINER) { - snprintf(OutputBuffer,BufferSize,""); + snprintf(OutputBuffer, BufferSize, ""); Status = EDSLIB_SUCCESS; } else if (DictEntryPtr->BasicType == EDSLIB_BASICTYPE_COMPONENT) { - snprintf(OutputBuffer,BufferSize,""); + snprintf(OutputBuffer, BufferSize, ""); Status = EDSLIB_SUCCESS; } else if (DictEntryPtr->BasicType == EDSLIB_BASICTYPE_ARRAY) { - snprintf(OutputBuffer,BufferSize,""); + snprintf(OutputBuffer, BufferSize, ""); Status = EDSLIB_SUCCESS; } else if (DictEntryPtr->BasicType == EDSLIB_BASICTYPE_GENERIC) { - snprintf(OutputBuffer,BufferSize,""); + snprintf(OutputBuffer, BufferSize, ""); Status = EDSLIB_SUCCESS; } else @@ -179,103 +184,110 @@ int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t * { switch (DisplayInfoPtr->DisplayHint) { - case EDSLIB_DISPLAYHINT_STRING: - { - uint16_t SrcSize = DictEntryPtr->SizeInfo.Bytes; - - /* - * binary blob contains character string data. - * copy only PRINTABLE chars to output buffer, - * as this is intended for UI display - */ - while (SrcSize > 0 && BufferSize > 1 && Src.u->u8 != 0) + case EDSLIB_DISPLAYHINT_STRING: { - if (isprint((int)Src.u->u8)) + uint16_t SrcSize = DictEntryPtr->SizeInfo.Bytes; + + /* + * binary blob contains character string data. + * copy only PRINTABLE chars to output buffer, + * as this is intended for UI display + */ + while (SrcSize > 0 && BufferSize > 1 && Src.u->u8 != 0) { - *OutputBuffer = Src.u->u8; + if (isprint((int)Src.u->u8)) + { + *OutputBuffer = Src.u->u8; + } + else + { + *OutputBuffer = '.'; + } + + ++OutputBuffer; + --BufferSize; + ++Src.Addr; + --SrcSize; } - else + if (BufferSize > 0) { - *OutputBuffer = '.'; + *OutputBuffer = 0; } - - ++OutputBuffer; - --BufferSize; - ++Src.Addr; - --SrcSize; - } - if (BufferSize > 0) - { - *OutputBuffer = 0; - } - Status = EDSLIB_SUCCESS; - break; - } - case EDSLIB_DISPLAYHINT_BASE64: - { - /* - * binary blob contains binary data, which cannot be - * put into a normal string. Use Base64 encoding. - */ - EdsLib_DisplayDB_Base64Encode(OutputBuffer, BufferSize, Src.Addr, DictEntryPtr->SizeInfo.Bits); - Status = EDSLIB_SUCCESS; - break; - } - case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: - { - const EdsLib_SymbolTableEntry_t *Symbol; - - if (NumberBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT) - { - Symbol = EdsLib_DisplaySymbolLookup_GetByValue(DisplayInfoPtr->DisplayArg.SymTable, - DisplayInfoPtr->DisplayArgTableSize, NumberBuffer.Value.SignedInteger); - } - else if (NumberBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT) - { - Symbol = EdsLib_DisplaySymbolLookup_GetByValue(DisplayInfoPtr->DisplayArg.SymTable, - DisplayInfoPtr->DisplayArgTableSize, NumberBuffer.Value.UnsignedInteger); + Status = EDSLIB_SUCCESS; + break; } - else + case EDSLIB_DISPLAYHINT_BASE64: { - Symbol = NULL; - } - - if (Symbol != NULL) - { - snprintf(OutputBuffer, BufferSize, "%s", Symbol->SymName); + /* + * binary blob contains binary data, which cannot be + * put into a normal string. Use Base64 encoding. + */ + EdsLib_DisplayDB_Base64Encode(OutputBuffer, BufferSize, Src.Addr, DictEntryPtr->SizeInfo.Bits); Status = EDSLIB_SUCCESS; + break; } - break; - } - case EDSLIB_DISPLAYHINT_ADDRESS: - { - /* memory addresses are always hex values */ - if (NumberBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT || - NumberBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT) + case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: { - snprintf(OutputBuffer,BufferSize,"0x%0*llx", (int)(DictEntryPtr->SizeInfo.Bytes * 2), - NumberBuffer.Value.UnsignedInteger); - Status = EDSLIB_SUCCESS; + const EdsLib_SymbolTableEntry_t *Symbol; + + if (NumberBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT) + { + Symbol = EdsLib_DisplaySymbolLookup_GetByValue(DisplayInfoPtr->DisplayArg.SymTable, + DisplayInfoPtr->DisplayArgTableSize, + NumberBuffer.Value.SignedInteger); + } + else if (NumberBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT) + { + Symbol = EdsLib_DisplaySymbolLookup_GetByValue(DisplayInfoPtr->DisplayArg.SymTable, + DisplayInfoPtr->DisplayArgTableSize, + NumberBuffer.Value.UnsignedInteger); + } + else + { + Symbol = NULL; + } + + if (Symbol != NULL) + { + snprintf(OutputBuffer, BufferSize, "%s", Symbol->SymName); + Status = EDSLIB_SUCCESS; + } + break; } - break; - } - case EDSLIB_DISPLAYHINT_BOOLEAN: - { - /* memory addresses are always hex values */ - if ((NumberBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT && NumberBuffer.Value.UnsignedInteger != 0) || - (NumberBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT && NumberBuffer.Value.SignedInteger != 0)) + case EDSLIB_DISPLAYHINT_ADDRESS: { - snprintf(OutputBuffer, BufferSize, "true"); + /* memory addresses are always hex values */ + if (NumberBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT + || NumberBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT) + { + snprintf(OutputBuffer, + BufferSize, + "0x%0*llx", + (int)(DictEntryPtr->SizeInfo.Bytes * 2), + NumberBuffer.Value.UnsignedInteger); + Status = EDSLIB_SUCCESS; + } + break; } - else + case EDSLIB_DISPLAYHINT_BOOLEAN: { - snprintf(OutputBuffer, BufferSize, "false"); + /* memory addresses are always hex values */ + if ((NumberBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT + && NumberBuffer.Value.UnsignedInteger != 0) + || (NumberBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT + && NumberBuffer.Value.SignedInteger != 0)) + { + snprintf(OutputBuffer, BufferSize, "true"); + } + else + { + snprintf(OutputBuffer, BufferSize, "false"); + } + Status = EDSLIB_SUCCESS; + break; } - Status = EDSLIB_SUCCESS; - break; - } - default: - break; + default: + break; } } } @@ -285,27 +297,27 @@ int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t * */ if (Status != EDSLIB_SUCCESS) { - switch(NumberBuffer.ValueType) + switch (NumberBuffer.ValueType) { - case EDSLIB_BASICTYPE_UNSIGNED_INT: - snprintf(OutputBuffer,BufferSize,"%llu",NumberBuffer.Value.UnsignedInteger); - Status = EDSLIB_SUCCESS; - break; - case EDSLIB_BASICTYPE_SIGNED_INT: - snprintf(OutputBuffer,BufferSize,"%lld",NumberBuffer.Value.SignedInteger); - Status = EDSLIB_SUCCESS; - break; - case EDSLIB_BASICTYPE_FLOAT: - snprintf(OutputBuffer,BufferSize,"%.4Lg",NumberBuffer.Value.FloatingPoint); - Status = EDSLIB_SUCCESS; - break; - default: - /* - * catch-all case, to ensure something is written to the buffer. - * If this is seen in the output it likely means a DB is missing. - */ - snprintf(OutputBuffer,BufferSize,"<\?\?\?>"); - break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + snprintf(OutputBuffer, BufferSize, "%llu", NumberBuffer.Value.UnsignedInteger); + Status = EDSLIB_SUCCESS; + break; + case EDSLIB_BASICTYPE_SIGNED_INT: + snprintf(OutputBuffer, BufferSize, "%lld", NumberBuffer.Value.SignedInteger); + Status = EDSLIB_SUCCESS; + break; + case EDSLIB_BASICTYPE_FLOAT: + snprintf(OutputBuffer, BufferSize, "%.4Lg", NumberBuffer.Value.FloatingPoint); + Status = EDSLIB_SUCCESS; + break; + default: + /* + * catch-all case, to ensure something is written to the buffer. + * If this is seen in the output it likely means a DB is missing. + */ + snprintf(OutputBuffer, BufferSize, "<\?\?\?>"); + break; } } @@ -318,14 +330,16 @@ int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t * * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_DisplayScalarConv_FromString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, - void *DestPtr, const char *SrcString) +int32_t EdsLib_DisplayScalarConv_FromString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, + void *DestPtr, + const char *SrcString) { EdsLib_GenericValueBuffer_t NumberBuffer; - int32_t Status; - EdsLib_Ptr_t Dst; + int32_t Status; + EdsLib_Ptr_t Dst; - Dst.Ptr = DestPtr; + Dst.Ptr = DestPtr; NumberBuffer.ValueType = EDSLIB_BASICTYPE_NONE; if (DictEntryPtr == NULL) @@ -348,151 +362,152 @@ int32_t EdsLib_DisplayScalarConv_FromString_Impl(const EdsLib_DataTypeDB_Entry_t { switch (DisplayInfoPtr->DisplayHint) { - case EDSLIB_DISPLAYHINT_STRING: - { - uint16_t DstSize = DictEntryPtr->SizeInfo.Bytes; - while (DstSize > 0) + case EDSLIB_DISPLAYHINT_STRING: { - Dst.u->u8 = *SrcString; - if (*SrcString != 0) + uint16_t DstSize = DictEntryPtr->SizeInfo.Bytes; + while (DstSize > 0) { - ++SrcString; + Dst.u->u8 = *SrcString; + if (*SrcString != 0) + { + ++SrcString; + } + ++Dst.Addr; + --DstSize; } - ++Dst.Addr; - --DstSize; - } - Status = EDSLIB_SUCCESS; - break; - } - case EDSLIB_DISPLAYHINT_BASE64: - { - /* - * binary blob contains binary data, which cannot be - * put into a normal string. Use Base64 encoding. - */ - EdsLib_DisplayDB_Base64Decode(Dst.Addr, DictEntryPtr->SizeInfo.Bits, SrcString); - Status = EDSLIB_SUCCESS; - break; - } - case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: - { - const EdsLib_SymbolTableEntry_t *Symbol; - - Symbol = EdsLib_DisplaySymbolLookup_GetByName(DisplayInfoPtr->DisplayArg.SymTable, - DisplayInfoPtr->DisplayArgTableSize, SrcString, strlen(SrcString)); - - if (Symbol != NULL) - { - NumberBuffer.Value.SignedInteger = Symbol->SymValue; - NumberBuffer.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; - } - break; - } - case EDSLIB_DISPLAYHINT_ADDRESS: - { - /* memory addresses are always hex values */ - const char *EndPtr; - NumberBuffer.Value.UnsignedInteger = strtoull(SrcString, (char**)&EndPtr, 16); - if (EndPtr != SrcString && *EndPtr == 0) - { - NumberBuffer.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; - } - break; - } - case EDSLIB_DISPLAYHINT_BOOLEAN: - { - /* typically TRUE/FALSE, also accept YES/NO or 0/1 */ - const char *EndPtr = SrcString; - if (strcasecmp(SrcString, "true") == 0) - { - EndPtr += 4; - NumberBuffer.Value.UnsignedInteger = 1; - } - else if (strcasecmp(SrcString, "false") == 0) - { - EndPtr += 4; - NumberBuffer.Value.UnsignedInteger = 0; + Status = EDSLIB_SUCCESS; + break; } - else if (strcasecmp(SrcString, "yes") == 0) + case EDSLIB_DISPLAYHINT_BASE64: { - EndPtr += 3; - NumberBuffer.Value.UnsignedInteger = 1; + /* + * binary blob contains binary data, which cannot be + * put into a normal string. Use Base64 encoding. + */ + EdsLib_DisplayDB_Base64Decode(Dst.Addr, DictEntryPtr->SizeInfo.Bits, SrcString); + Status = EDSLIB_SUCCESS; + break; } - else if (strcasecmp(SrcString, "no") == 0) + case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: { - EndPtr += 2; - NumberBuffer.Value.UnsignedInteger = 0; + const EdsLib_SymbolTableEntry_t *Symbol; + + Symbol = EdsLib_DisplaySymbolLookup_GetByName(DisplayInfoPtr->DisplayArg.SymTable, + DisplayInfoPtr->DisplayArgTableSize, + SrcString, + strlen(SrcString)); + + if (Symbol != NULL) + { + NumberBuffer.Value.SignedInteger = Symbol->SymValue; + NumberBuffer.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + } + break; } - else + case EDSLIB_DISPLAYHINT_ADDRESS: { - NumberBuffer.Value.UnsignedInteger = strtol(SrcString, (char**)&EndPtr, 0); + /* memory addresses are always hex values */ + const char *EndPtr; + NumberBuffer.Value.UnsignedInteger = strtoull(SrcString, (char **)&EndPtr, 16); + if (EndPtr != SrcString && *EndPtr == 0) + { + NumberBuffer.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + } + break; } - if (EndPtr != SrcString && *EndPtr == 0) + case EDSLIB_DISPLAYHINT_BOOLEAN: { - NumberBuffer.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + /* typically TRUE/FALSE, also accept YES/NO or 0/1 */ + const char *EndPtr = SrcString; + if (strcasecmp(SrcString, "true") == 0) + { + EndPtr += 4; + NumberBuffer.Value.UnsignedInteger = 1; + } + else if (strcasecmp(SrcString, "false") == 0) + { + EndPtr += 4; + NumberBuffer.Value.UnsignedInteger = 0; + } + else if (strcasecmp(SrcString, "yes") == 0) + { + EndPtr += 3; + NumberBuffer.Value.UnsignedInteger = 1; + } + else if (strcasecmp(SrcString, "no") == 0) + { + EndPtr += 2; + NumberBuffer.Value.UnsignedInteger = 0; + } + else + { + NumberBuffer.Value.UnsignedInteger = strtol(SrcString, (char **)&EndPtr, 0); + } + if (EndPtr != SrcString && *EndPtr == 0) + { + NumberBuffer.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + } + break; } - break; - } - default: - break; + default: + break; } } - if (Status != EDSLIB_SUCCESS && - NumberBuffer.ValueType == EDSLIB_BASICTYPE_NONE) + if (Status != EDSLIB_SUCCESS && NumberBuffer.ValueType == EDSLIB_BASICTYPE_NONE) { const char *EndPtr; - switch(DictEntryPtr->BasicType) + switch (DictEntryPtr->BasicType) { - case EDSLIB_BASICTYPE_UNSIGNED_INT: - case EDSLIB_BASICTYPE_SIGNED_INT: - case EDSLIB_BASICTYPE_FLOAT: - { - /* - * NOTE: conversion is done into the system long double type -- - * This is because we do not have control over how the input data is - * formatted. For instance, if the target type is a signed integer and - * supplied string is "-5.0" or "1e3", these should still work. - * Using a long double here should provide for a 64-bit mantissa, so - * even 64 bit integer values can be stored without precision loss - */ - NumberBuffer.Value.FloatingPoint = strtold(SrcString, (char**)&EndPtr); - if (EndPtr != SrcString && *EndPtr == 0) + case EDSLIB_BASICTYPE_UNSIGNED_INT: + case EDSLIB_BASICTYPE_SIGNED_INT: + case EDSLIB_BASICTYPE_FLOAT: { - NumberBuffer.ValueType = EDSLIB_BASICTYPE_FLOAT; + /* + * NOTE: conversion is done into the system long double type -- + * This is because we do not have control over how the input data is + * formatted. For instance, if the target type is a signed integer and + * supplied string is "-5.0" or "1e3", these should still work. + * Using a long double here should provide for a 64-bit mantissa, so + * even 64 bit integer values can be stored without precision loss + */ + NumberBuffer.Value.FloatingPoint = strtold(SrcString, (char **)&EndPtr); + if (EndPtr != SrcString && *EndPtr == 0) + { + NumberBuffer.ValueType = EDSLIB_BASICTYPE_FLOAT; + } + break; } - break; - } - case EDSLIB_BASICTYPE_BINARY: - { - uint16_t DstSize = DictEntryPtr->SizeInfo.Bytes; - size_t SrcSize = strlen(SrcString); - Status = EDSLIB_SUCCESS; - - while (DstSize > 0 && SrcSize >= 2) + case EDSLIB_BASICTYPE_BINARY: { - NumberBuffer.Value.StringData[0] = *SrcString; - ++SrcString; - NumberBuffer.Value.StringData[1] = *SrcString; - ++SrcString; - NumberBuffer.Value.StringData[2] = 0; - SrcSize -= 2; - - Dst.u->u8 = strtoul(NumberBuffer.Value.StringData, (char **)&EndPtr, 16); - if (*EndPtr != 0) + uint16_t DstSize = DictEntryPtr->SizeInfo.Bytes; + size_t SrcSize = strlen(SrcString); + Status = EDSLIB_SUCCESS; + + while (DstSize > 0 && SrcSize >= 2) { - Status = EDSLIB_FAILURE; - break; + NumberBuffer.Value.StringData[0] = *SrcString; + ++SrcString; + NumberBuffer.Value.StringData[1] = *SrcString; + ++SrcString; + NumberBuffer.Value.StringData[2] = 0; + SrcSize -= 2; + + Dst.u->u8 = strtoul(NumberBuffer.Value.StringData, (char **)&EndPtr, 16); + if (*EndPtr != 0) + { + Status = EDSLIB_FAILURE; + break; + } + ++Dst.Addr; + --DstSize; } - ++Dst.Addr; - --DstSize; + break; + } + default: + { + break; } - break; - } - default: - { - break; - } } } diff --git a/edslib/fsw/src/edslib_global_api.c b/edslib/fsw/src/edslib_global_api.c index a90085b..b43a88b 100644 --- a/edslib/fsw/src/edslib_global_api.c +++ b/edslib/fsw/src/edslib_global_api.c @@ -62,8 +62,10 @@ uint16_t EdsLib_GetNumPackages(const EdsLib_DatabaseObject_t *GD) * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_FindPackageIdxBySubstring(const EdsLib_DatabaseObject_t *GD, const char *MatchString, size_t MatchLen, - uint8_t *IdxOut) +int32_t EdsLib_FindPackageIdxBySubstring(const EdsLib_DatabaseObject_t *GD, + const char *MatchString, + size_t MatchLen, + uint8_t *IdxOut) { const char *NamePtr; int32_t Status; diff --git a/edslib/fsw/src/edslib_init.c b/edslib/fsw/src/edslib_init.c index bc75a9e..24a166a 100644 --- a/edslib/fsw/src/edslib_init.c +++ b/edslib/fsw/src/edslib_init.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_init.c * \ingroup fsw @@ -49,4 +48,3 @@ void EdsLib_Initialize(void) EdsLib_IntfDB_Initialize(); EdsLib_Binding_Initialize(); } - diff --git a/edslib/fsw/src/edslib_internal.h b/edslib/fsw/src/edslib_internal.h index 6a75fae..432796f 100644 --- a/edslib/fsw/src/edslib_internal.h +++ b/edslib/fsw/src/edslib_internal.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_internal.h * \ingroup fsw @@ -32,7 +31,6 @@ #ifndef _EDSLIB_INTERNAL_H_ #define _EDSLIB_INTERNAL_H_ - #include "edslib_database_types.h" #include "edslib_database_ops.h" #include "edslib_global.h" @@ -54,7 +52,7 @@ * the runtime library will support. This also serves as a functional * limit in case an (invalid) circular reference somehow exists in the DB. */ -#define EDSLIB_ITERATOR_MAX_DEEP_DEPTH 32 +#define EDSLIB_ITERATOR_MAX_DEEP_DEPTH 32 /** * The limit for how deep a basetype hierarchy chain can be. This is an @@ -62,20 +60,20 @@ * only "immediate" members can still descend into basetypes, but not need * to allocate a state structure as large as EDSLIB_ITERATOR_MAX_DEEP_DEPTH */ -#define EDSLIB_ITERATOR_MAX_BASETYPE_DEPTH 8 +#define EDSLIB_ITERATOR_MAX_BASETYPE_DEPTH 8 /** * The limit for depth when only iterating through the immediate type members. * This is the smallest and most stack friendly depth but it does not support * descending into sub-structures at all, including base types. */ -#define EDSLIB_ITERATOR_MAX_SHALLOW_DEPTH 2 +#define EDSLIB_ITERATOR_MAX_SHALLOW_DEPTH 2 /** * An internal macro used to combine a type and size from the database into * a single value that can be used in a switch/case statement. */ -#define EDSLIB_TYPE_AND_SIZE(x,y) (((x) << 8) | (y)) +#define EDSLIB_TYPE_AND_SIZE(x, y) (((x) << 8) | (y)) /** * Some fields such as error control cannot be calculated immediately, they @@ -83,7 +81,7 @@ * the maximum number of fields that can have deferred calculation in a single * encode/decode operation. */ -#define EDSLIB_PACKEDPOSTPROC_MAX_DEFERRED_FIELDS 8 +#define EDSLIB_PACKEDPOSTPROC_MAX_DEFERRED_FIELDS 8 /****************************** * TYPEDEFS @@ -96,9 +94,9 @@ */ typedef union { - const void *Ptr; + const void *Ptr; const EdsLib_GenericValueUnion_t *u; - const uint8_t *Addr; + const uint8_t *Addr; } EdsLib_ConstPtr_t; /** @@ -109,22 +107,21 @@ typedef union */ typedef union { - void *Ptr; + void *Ptr; EdsLib_GenericValueUnion_t *u; - uint8_t *Addr; + uint8_t *Addr; } EdsLib_Ptr_t; - /** * Argument to the basic iterator callback function. * Indicates the type of callback taking place. */ typedef enum { - EDSLIB_ITERATOR_CBTYPE_UNDEFINED = 0, - EDSLIB_ITERATOR_CBTYPE_START, - EDSLIB_ITERATOR_CBTYPE_MEMBER, - EDSLIB_ITERATOR_CBTYPE_END + EDSLIB_ITERATOR_CBTYPE_UNDEFINED = 0, + EDSLIB_ITERATOR_CBTYPE_START, + EDSLIB_ITERATOR_CBTYPE_MEMBER, + EDSLIB_ITERATOR_CBTYPE_END } EdsLib_Iterator_CbType_t; /** @@ -142,11 +139,11 @@ typedef enum typedef struct { - uint16_t CurrIndex; - uint16_t CurrDepth; - EdsLib_SizeInfo_t StartOffset; - EdsLib_SizeInfo_t EndOffset; - EdsLib_FieldDetailEntry_t Details; + uint16_t CurrIndex; + uint16_t CurrDepth; + EdsLib_SizeInfo_t StartOffset; + EdsLib_SizeInfo_t EndOffset; + EdsLib_FieldDetailEntry_t Details; const EdsLib_DataTypeDB_Entry_t *DataDictPtr; } EdsLib_DataTypeIterator_StackEntry_t; @@ -154,16 +151,16 @@ typedef struct * Prototype for the basic dictionary iterator callback functions. */ typedef EdsLib_Iterator_Rc_t (*EdsLib_DataTypeIterator_Callback_t)( - const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - void *OpaqueArg); + const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + void *OpaqueArg); typedef struct { EdsLib_DataTypeIterator_Callback_t Callback; - void *CallbackArg; - uint16_t StackSize; + void *CallbackArg; + uint16_t StackSize; /* * The "stack" is variably sized and must contain at least one item @@ -184,9 +181,10 @@ typedef struct * a stack to hold the state at each iteration level up to the specified maximum. */ #define EDSLIB_ITERATOR_CB_TYPE(depth) \ - struct { \ + struct \ + { \ EdsLib_DataTypeIterator_ControlBlock_t Cb; \ - EdsLib_DataTypeIterator_StackEntry_t StackEntries[depth-1]; \ + EdsLib_DataTypeIterator_StackEntry_t StackEntries[depth - 1]; \ } /** @@ -195,26 +193,28 @@ typedef struct * This wraps the control block structure with enough spare memory for * a stack to hold the state at each iteration level up to the specified maximum. */ -#define EDSLIB_INITIALIZE_ITERATOR_CB(name,depth,cbfunc,cbarg) \ - do { \ - name.Cb.Callback = cbfunc; \ - name.Cb.CallbackArg = cbarg; \ - name.Cb.StackSize = depth; \ - } while(0) +#define EDSLIB_INITIALIZE_ITERATOR_CB(name, depth, cbfunc, cbarg) \ + do \ + { \ + name.Cb.Callback = cbfunc; \ + name.Cb.CallbackArg = cbarg; \ + name.Cb.StackSize = depth; \ + } while (0) /** * A combined macro to both instantiate and initialize an iterator */ -#define EDSLIB_DECLARE_ITERATOR_CB(name,depth,cbfunc,cbarg) \ - EDSLIB_ITERATOR_CB_TYPE(depth) name; \ - EDSLIB_INITIALIZE_ITERATOR_CB(name,depth,cbfunc,cbarg) +#define EDSLIB_DECLARE_ITERATOR_CB(name, depth, cbfunc, cbarg) \ + EDSLIB_ITERATOR_CB_TYPE(depth) name; \ + EDSLIB_INITIALIZE_ITERATOR_CB(name, depth, cbfunc, cbarg) /** * Macro to set an iterator to the start of a given object * The object is specified directory as an EdsLib_DatabaseRef_t */ -#define EDSLIB_RESET_ITERATOR_FROM_REFOBJ(name,baseref) \ - do { \ +#define EDSLIB_RESET_ITERATOR_FROM_REFOBJ(name, baseref) \ + do \ + { \ memset(&name.Cb.StackBase[0], 0, sizeof(name.Cb.StackBase[0])); \ name.Cb.StackBase[0].Details.RefObj = baseref; \ } while (0) @@ -223,13 +223,13 @@ typedef struct * Macro to set an iterator to the start of a given object * The object is specified directory as an EdsLib_Id_t */ -#define EDSLIB_RESET_ITERATOR_FROM_EDSID(name,edsid) \ - do { \ - memset(&name.Cb.StackBase[0], 0, sizeof(name.Cb.StackBase[0])); \ - EdsLib_Decode_StructId(&name.Cb.StackBase[0].Details.RefObj, edsid); \ +#define EDSLIB_RESET_ITERATOR_FROM_EDSID(name, edsid) \ + do \ + { \ + memset(&name.Cb.StackBase[0], 0, sizeof(name.Cb.StackBase[0])); \ + EdsLib_Decode_StructId(&name.Cb.StackBase[0].Details.RefObj, edsid); \ } while (0) - typedef enum { EDSLIB_BITPACK_OPERMODE_NONE = 0, @@ -250,9 +250,9 @@ typedef enum typedef struct { - EdsLib_EntryType_t EntryType; - uint32_t PackedBitOffset; - EdsLib_HandlerArgument_t HandlerArg; + EdsLib_EntryType_t EntryType; + uint32_t PackedBitOffset; + EdsLib_HandlerArgument_t HandlerArg; const EdsLib_DataTypeDB_Entry_t *DictPtr; } EdsLib_PackedPostProc_DeferredField_t; @@ -264,50 +264,49 @@ typedef struct EdsLib_DataTypePackUnpack_ControlBlock EdsLib_DataTypePackUnpack_ * This permits a different function to be used when encoding, decoding, or * populating or verifying error control fields. */ -typedef int32_t (*EdsLib_DataTypePackUnpack_HandleMemberFunc_t)( - EdsLib_DataTypePackUnpack_ControlBlock_t *, - const EdsLib_DataTypeIterator_StackEntry_t *, - uint32_t, - EdsLib_PackAction_t); +typedef int32_t (*EdsLib_DataTypePackUnpack_HandleMemberFunc_t)(EdsLib_DataTypePackUnpack_ControlBlock_t *, + const EdsLib_DataTypeIterator_StackEntry_t *, + uint32_t, + EdsLib_PackAction_t); struct EdsLib_DataTypePackUnpack_ControlBlock { - const void *NativeBufferPtr; - EdsLib_DatabaseRef_t RefObj; - EdsLib_SizeInfo_t MaxSize; - EdsLib_SizeInfo_t LastNominalTail; - uint32_t LastActualTailBitPos; - int32_t Status; - uint32_t MaxPasses; + const void *NativeBufferPtr; + EdsLib_DatabaseRef_t RefObj; + EdsLib_SizeInfo_t MaxSize; + EdsLib_SizeInfo_t LastNominalTail; + uint32_t LastActualTailBitPos; + int32_t Status; + uint32_t MaxPasses; EdsLib_DataTypePackUnpack_HandleMemberFunc_t HandleMember; }; typedef struct { EdsLib_DataTypePackUnpack_ControlBlock_t Common; - const uint8_t *NativeSrcPtr; - uint8_t *PackedDstPtr; + const uint8_t *NativeSrcPtr; + uint8_t *PackedDstPtr; } EdsLib_DataTypePack_State_t; typedef struct { EdsLib_DataTypePackUnpack_ControlBlock_t Common; - const uint8_t *PackedSrcPtr; - uint8_t *NativeDstPtr; + const uint8_t *PackedSrcPtr; + uint8_t *NativeDstPtr; } EdsLib_DataTypeUnpack_State_t; typedef struct { - EdsLib_DataTypePack_State_t Pack; - uint16_t DeferredFieldCount; + EdsLib_DataTypePack_State_t Pack; + uint16_t DeferredFieldCount; EdsLib_PackedPostProc_DeferredField_t DeferredFields[EDSLIB_PACKEDPOSTPROC_MAX_DEFERRED_FIELDS]; } EdsLib_PackedPostProc_ControlBlock_t; typedef struct { EdsLib_DataTypeUnpack_State_t Unpack; - uint32_t CheckFields; - uint32_t RecomputeFields; + uint32_t CheckFields; + uint32_t RecomputeFields; } EdsLib_NativePostProc_ControlBlock_t; typedef struct @@ -315,108 +314,110 @@ typedef struct const EdsLib_DisplayDB_Entry_t *DisplayInf; } EdsLib_DisplayIterator_StackEntry_t; -typedef EdsLib_Iterator_Rc_t (*EdsLib_DisplayIterator_Callback_t)(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - const char *EntityName, - void *OpaqueArg); +typedef EdsLib_Iterator_Rc_t (*EdsLib_DisplayIterator_Callback_t)( + const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + const char *EntityName, + void *OpaqueArg); typedef struct { EdsLib_DisplayIterator_StackEntry_t *NextStackEntry; - EdsLib_DisplayIterator_Callback_t NextCallback; - void *NextCallbackArg; + EdsLib_DisplayIterator_Callback_t NextCallback; + void *NextCallbackArg; } EdsLib_DisplayDB_InternalIterator_ControlBlock_t; -EdsLib_Iterator_Rc_t EdsLib_DisplayIterator_Wrapper(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - void *OpaqueArg); - -#define EDSLIB_DECLARE_DISPLAY_ITERATOR_CB(name,depth,cbfunc,cbarg) \ - struct { \ - EDSLIB_ITERATOR_CB_TYPE(depth) BaseIter; \ - EdsLib_DisplayDB_InternalIterator_ControlBlock_t DisplayCb; \ - EdsLib_DisplayIterator_StackEntry_t DisplayStack[depth]; \ - } name; \ - do { \ - EDSLIB_INITIALIZE_ITERATOR_CB(name.BaseIter,depth, \ - EdsLib_DisplayIterator_Wrapper, &name.DisplayCb); \ - name.DisplayCb.NextCallback = cbfunc; \ - name.DisplayCb.NextCallbackArg = cbarg; \ - } while(0) - -#define EDSLIB_RESET_DISPLAY_ITERATOR_FROM_REFOBJ(name,baseref) \ - do { \ - EDSLIB_RESET_ITERATOR_FROM_REFOBJ(name.BaseIter,baseref); \ - name.DisplayCb.NextStackEntry = name.DisplayStack; \ +EdsLib_Iterator_Rc_t EdsLib_DisplayIterator_Wrapper(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + void *OpaqueArg); + +#define EDSLIB_DECLARE_DISPLAY_ITERATOR_CB(name, depth, cbfunc, cbarg) \ + struct \ + { \ + EDSLIB_ITERATOR_CB_TYPE(depth) BaseIter; \ + EdsLib_DisplayDB_InternalIterator_ControlBlock_t DisplayCb; \ + EdsLib_DisplayIterator_StackEntry_t DisplayStack[depth]; \ + } name; \ + do \ + { \ + EDSLIB_INITIALIZE_ITERATOR_CB(name.BaseIter, depth, EdsLib_DisplayIterator_Wrapper, &name.DisplayCb); \ + name.DisplayCb.NextCallback = cbfunc; \ + name.DisplayCb.NextCallbackArg = cbarg; \ } while (0) -#define EDSLIB_RESET_DISPLAY_ITERATOR_FROM_EDSID(name,edsid) \ - do { \ - EDSLIB_RESET_ITERATOR_FROM_EDSID(name.BaseIter,edsid); \ - name.DisplayCb.NextStackEntry = name.DisplayStack; \ +#define EDSLIB_RESET_DISPLAY_ITERATOR_FROM_REFOBJ(name, baseref) \ + do \ + { \ + EDSLIB_RESET_ITERATOR_FROM_REFOBJ(name.BaseIter, baseref); \ + name.DisplayCb.NextStackEntry = name.DisplayStack; \ } while (0) +#define EDSLIB_RESET_DISPLAY_ITERATOR_FROM_EDSID(name, edsid) \ + do \ + { \ + EDSLIB_RESET_ITERATOR_FROM_EDSID(name.BaseIter, edsid); \ + name.DisplayCb.NextStackEntry = name.DisplayStack; \ + } while (0) typedef struct { - EdsLib_DatabaseRef_t TargetRef; - bool Recursive; - EdsLib_ConstraintCallback_t UserCallback; - void *CbArg; - EdsLib_GenericValueBuffer_t TempConstraintValue; + EdsLib_DatabaseRef_t TargetRef; + bool Recursive; + EdsLib_ConstraintCallback_t UserCallback; + void *CbArg; + EdsLib_GenericValueBuffer_t TempConstraintValue; EdsLib_DataTypeDB_EntityInfo_t TempMemberInfo; } EdsLib_ConstraintIterator_ControlBlock_t; typedef enum { - EDSLIB_MATCHQUALITY_NONE, - EDSLIB_MATCHQUALITY_PARTIAL, - EDSLIB_MATCHQUALITY_EXACT + EDSLIB_MATCHQUALITY_NONE, + EDSLIB_MATCHQUALITY_PARTIAL, + EDSLIB_MATCHQUALITY_EXACT } EdsLib_MatchQuality_t; typedef struct { - const char *NextTokenPos; - const char *ContentPos; + const char *NextTokenPos; + const char *ContentPos; const EdsLib_DataTypeDB_Entry_t *DataDict; - uint32_t ContentLength; - EdsLib_MatchQuality_t MatchQuality; - EdsLib_DatabaseRef_t RefObj; - EdsLib_SizeInfo_t StartOffset; - EdsLib_SizeInfo_t MaxSize; + uint32_t ContentLength; + EdsLib_MatchQuality_t MatchQuality; + EdsLib_DatabaseRef_t RefObj; + EdsLib_SizeInfo_t StartOffset; + EdsLib_SizeInfo_t MaxSize; } EdsLib_DisplayLocateMember_ControlBlock_t; typedef struct { EdsLib_EntityCallback_t UserCallback; - void *UserArg; + void *UserArg; } EdsLib_DisplayUserIterator_BaseName_ControlBlock_t; typedef struct { uint16_t ScratchOffset; - bool HasNamedMembers; + bool HasNamedMembers; } EdsLib_DisplayUserIterator_FullName_StackEntry_t; -#define EDSLIB_ITERATOR_NAME_MAX_SIZE 256 - +#define EDSLIB_ITERATOR_NAME_MAX_SIZE 256 typedef struct { EdsLib_DisplayUserIterator_BaseName_ControlBlock_t Base; - EdsLib_DisplayUserIterator_FullName_StackEntry_t *NextEntry; - char ScratchNameBuffer[EDSLIB_ITERATOR_NAME_MAX_SIZE]; + EdsLib_DisplayUserIterator_FullName_StackEntry_t *NextEntry; + char ScratchNameBuffer[EDSLIB_ITERATOR_NAME_MAX_SIZE]; } EdsLib_DisplayUserIterator_FullName_ControlBlock_t; -typedef struct EdsLib_IntfDB_FullContext +typedef struct EdsLib_IntfDB_FullContext { - EdsLib_IntfDB_t IntfDBPtr; + EdsLib_IntfDB_t IntfDBPtr; const EdsLib_IntfDB_ComponentEntry_t *CompEntry; - const EdsLib_IntfDB_DeclIntfEntry_t *DeclIntfEntry; + const EdsLib_IntfDB_DeclIntfEntry_t *DeclIntfEntry; const EdsLib_IntfDB_InterfaceEntry_t *CompIntfEntry; - const EdsLib_IntfDB_CommandEntry_t *CmdEntry; + const EdsLib_IntfDB_CommandEntry_t *CmdEntry; } EdsLib_IntfDB_FullContext_t; /********************************************************** @@ -436,12 +437,18 @@ void EdsLib_ErrorControl_Initialize(void); * **********************************************************/ -EdsLib_DataTypeDB_t EdsLib_DataTypeDB_GetTopLevel(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); -const EdsLib_DataTypeDB_Entry_t *EdsLib_DataTypeDB_GetEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj); -void EdsLib_DataTypeDB_CopyTypeInfo(const EdsLib_DataTypeDB_Entry_t *DataDictEntry, EdsLib_DataTypeDB_TypeInfo_t *TypeInfo); +EdsLib_DataTypeDB_t EdsLib_DataTypeDB_GetTopLevel(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); +const EdsLib_DataTypeDB_Entry_t *EdsLib_DataTypeDB_GetEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj); +void EdsLib_DataTypeDB_CopyTypeInfo(const EdsLib_DataTypeDB_Entry_t *DataDictEntry, + EdsLib_DataTypeDB_TypeInfo_t *TypeInfo); -void EdsLib_DataTypeLoad_Impl(EdsLib_GenericValueBuffer_t *ValueBuff, EdsLib_ConstPtr_t SrcPtr, const EdsLib_DataTypeDB_Entry_t *DictEntryPtr); -void EdsLib_DataTypeStore_Impl(EdsLib_Ptr_t DstPtr, EdsLib_GenericValueBuffer_t *SrcBuff, const EdsLib_DataTypeDB_Entry_t *DictEntryPtr); +void EdsLib_DataTypeLoad_Impl(EdsLib_GenericValueBuffer_t *ValueBuff, + EdsLib_ConstPtr_t SrcPtr, + const EdsLib_DataTypeDB_Entry_t *DictEntryPtr); +void EdsLib_DataTypeStore_Impl(EdsLib_Ptr_t DstPtr, + EdsLib_GenericValueBuffer_t *SrcBuff, + const EdsLib_DataTypeDB_Entry_t *DictEntryPtr); typedef int8_t (*EdsLib_EntryCompareFunc_t)(const void *, const EdsLib_FieldDetailEntry_t *); typedef uint16_t (*EdsLib_GetArrayIdxFunc_t)(const void *, const EdsLib_SizeInfo_t *); @@ -452,62 +459,86 @@ int8_t EdsLib_OffsetCompareBytes(const void *SubjectPtr, const EdsLib_FieldDetai uint16_t EdsLib_GetArrayIdxFromBits(const void *SubjectPtr, const EdsLib_SizeInfo_t *ElemSize); uint16_t EdsLib_GetArrayIdxFromBytes(const void *SubjectPtr, const EdsLib_SizeInfo_t *ElemSize); -int32_t EdsLib_DataTypeDB_FindContainerMember_Impl(const EdsLib_DatabaseObject_t *GD, - const EdsLib_DataTypeDB_Entry_t *BaseDict, const void *CompareArg, EdsLib_EntryCompareFunc_t CompFunc, EdsLib_DataTypeDB_EntityInfo_t *CompInfo); - -int32_t EdsLib_DataTypeDB_FindArrayMember_Impl(const EdsLib_DatabaseObject_t *GD, - const EdsLib_DataTypeDB_Entry_t *BaseDict, const void *GetIdxArg, EdsLib_GetArrayIdxFunc_t GetIdxFunc, - EdsLib_DataTypeDB_EntityInfo_t *EntInfo); - -int32_t EdsLib_DataTypeIterator_Impl(const EdsLib_DatabaseObject_t *GD, - EdsLib_DataTypeIterator_ControlBlock_t *StateInfo); - -int32_t EdsLib_DataTypeDB_ConstraintIterator_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_ConstraintIterator_ControlBlock_t *CtlBlock, const EdsLib_DatabaseRef_t *BaseRef); -int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t BaseId, EdsLib_Id_t DerivedId, EdsLib_ConstraintCallback_t Callback, void *CbArg); -const EdsLib_IdentSequenceEntry_t *EdsLib_DataTypeExecuteConstraintSequence_Impl(const EdsLib_DatabaseObject_t *GD, - const EdsLib_IdentityCheckSequence_t *CheckSequence, const void *Buffer, size_t MaxOffset); - -int32_t EdsLib_DataTypePack_HandleMember( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction); - -int32_t EdsLib_DataTypeUnpack_HandleMember( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction); - -int32_t EdsLib_DataTypeDB_PackUnpackFindTailEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - const EdsLib_SizeInfo_t *TargetOffset, EdsLib_DataTypeDB_EntityInfo_t *ResultInfo); - -int32_t EdsLib_DataTypeDB_PackUnpackFindTail(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - const EdsLib_SizeInfo_t *InputPtr, EdsLib_DataTypePackUnpack_ControlBlock_t *CbPtr); - -void EdsLib_DataTypePackUnpack_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_DataTypePackUnpack_ControlBlock_t *PackState); -int32_t EdsLib_DataTypeIdentifyBuffer_Impl(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataTypeDB_Entry_t *DataDictPtr, const void *Buffer, size_t MaxOffset, - uint16_t *DerivTableIndex, EdsLib_DatabaseRef_t *ActualObj); - -void EdsLib_DataTypeConstraintEntityLookup_Impl(const EdsLib_DataTypeDB_Entry_t *DataDictPtr, uint16_t ConstraintIdx, const EdsLib_DatabaseRef_t **RefObjPtr, EdsLib_SizeInfo_t *Offset); - -int32_t EdsLib_NativeObject_PostProc_Callback( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction); - -int32_t EdsLib_PackedObject_PostProc_Callback( - EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, - const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, - uint32_t BitPosition, - EdsLib_PackAction_t PackAction); +int32_t EdsLib_DataTypeDB_FindContainerMember_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_Entry_t *BaseDict, + const void *CompareArg, + EdsLib_EntryCompareFunc_t CompFunc, + EdsLib_DataTypeDB_EntityInfo_t *CompInfo); + +int32_t EdsLib_DataTypeDB_FindArrayMember_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_Entry_t *BaseDict, + const void *GetIdxArg, + EdsLib_GetArrayIdxFunc_t GetIdxFunc, + EdsLib_DataTypeDB_EntityInfo_t *EntInfo); + +int32_t EdsLib_DataTypeIterator_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_DataTypeIterator_ControlBlock_t *StateInfo); + +int32_t EdsLib_DataTypeDB_ConstraintIterator_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_ConstraintIterator_ControlBlock_t *CtlBlock, + const EdsLib_DatabaseRef_t *BaseRef); +int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t BaseId, + EdsLib_Id_t DerivedId, + EdsLib_ConstraintCallback_t Callback, + void *CbArg); +const EdsLib_IdentSequenceEntry_t * +EdsLib_DataTypeExecuteConstraintSequence_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_IdentityCheckSequence_t *CheckSequence, + const void *Buffer, + size_t MaxOffset); + +int32_t EdsLib_DataTypePack_HandleMember(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction); + +int32_t EdsLib_DataTypeUnpack_HandleMember(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction); + +int32_t EdsLib_DataTypeDB_PackUnpackFindTailEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const EdsLib_SizeInfo_t *TargetOffset, + EdsLib_DataTypeDB_EntityInfo_t *ResultInfo); + +int32_t EdsLib_DataTypeDB_PackUnpackFindTail(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const EdsLib_SizeInfo_t *InputPtr, + EdsLib_DataTypePackUnpack_ControlBlock_t *CbPtr); + +void EdsLib_DataTypePackUnpack_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_DataTypePackUnpack_ControlBlock_t *PackState); +int32_t EdsLib_DataTypeIdentifyBuffer_Impl(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + const void *Buffer, + size_t MaxOffset, + uint16_t *DerivTableIndex, + EdsLib_DatabaseRef_t *ActualObj); + +void EdsLib_DataTypeConstraintEntityLookup_Impl(const EdsLib_DataTypeDB_Entry_t *DataDictPtr, + uint16_t ConstraintIdx, + const EdsLib_DatabaseRef_t **RefObjPtr, + EdsLib_SizeInfo_t *Offset); + +int32_t EdsLib_NativeObject_PostProc_Callback(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction); + +int32_t EdsLib_PackedObject_PostProc_Callback(EdsLib_DataTypePackUnpack_ControlBlock_t *Parent, + const EdsLib_DataTypeIterator_StackEntry_t *CbInfo, + uint32_t BitPosition, + EdsLib_PackAction_t PackAction); void EdsLib_PackedObject_PostProc_Deferred(EdsLib_PackedPostProc_ControlBlock_t *Base); - -void EdsLib_UpdateErrorControlField(const EdsLib_DataTypeDB_Entry_t *ErrorCtlDictPtr, void *PackedObject, - uint32_t TotalBitSize, EdsLib_ErrorControlType_t ErrorCtlType, uint32_t ErrorCtlOffsetBits); +void EdsLib_UpdateErrorControlField(const EdsLib_DataTypeDB_Entry_t *ErrorCtlDictPtr, + void *PackedObject, + uint32_t TotalBitSize, + EdsLib_ErrorControlType_t ErrorCtlType, + uint32_t ErrorCtlOffsetBits); /********************************************************** * PROTOTYPES - DisplayDB helper functions @@ -517,36 +548,49 @@ void EdsLib_UpdateErrorControlField(const EdsLib_DataTypeDB_Entry_t *ErrorCtlDic * **********************************************************/ - -EdsLib_DisplayDB_t EdsLib_DisplayDB_GetTopLevel(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); -const EdsLib_DisplayDB_Entry_t *EdsLib_DisplayDB_GetEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj); - -const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByName(const EdsLib_SymbolTableEntry_t *SymbolDict, uint16_t TableSize, const char *String, uint32_t StringLen); -const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByValue(const EdsLib_SymbolTableEntry_t *SymbolDict, uint16_t TableSize, intmax_t Value); - -void EdsLib_DisplayLocateMember_Impl(const EdsLib_DatabaseObject_t *GD, EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock); - -EdsLib_Iterator_Rc_t EdsLib_DisplayUserIterator_BaseName_Callback(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - const char *EntityName, - void *OpaqueArg); - -EdsLib_Iterator_Rc_t EdsLib_DisplayUserIterator_FullName_Callback(const EdsLib_DatabaseObject_t *GD, - EdsLib_Iterator_CbType_t CbType, - const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, - const char *EntityName, - void *OpaqueArg); - -int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, - char *OutputBuffer, uint32_t BufferSize, const void *SourcePtr); - -int32_t EdsLib_DisplayScalarConv_FromString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, - void *DestPtr, const char *SrcString); - - -uintmax_t EdsLib_ErrorControlCompute(EdsLib_ErrorControlType_t Algorithm, const void *Buffer, uint32_t BufferSizeBits, uint32_t ErrCtlBitPos); - +EdsLib_DisplayDB_t EdsLib_DisplayDB_GetTopLevel(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); +const EdsLib_DisplayDB_Entry_t *EdsLib_DisplayDB_GetEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj); + +const EdsLib_SymbolTableEntry_t *EdsLib_DisplaySymbolLookup_GetByName(const EdsLib_SymbolTableEntry_t *SymbolDict, + uint16_t TableSize, + const char *String, + uint32_t StringLen); +const EdsLib_SymbolTableEntry_t * +EdsLib_DisplaySymbolLookup_GetByValue(const EdsLib_SymbolTableEntry_t *SymbolDict, uint16_t TableSize, intmax_t Value); + +void EdsLib_DisplayLocateMember_Impl(const EdsLib_DatabaseObject_t *GD, + EdsLib_DisplayLocateMember_ControlBlock_t *CtrlBlock); + +EdsLib_Iterator_Rc_t +EdsLib_DisplayUserIterator_BaseName_Callback(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + const char *EntityName, + void *OpaqueArg); + +EdsLib_Iterator_Rc_t +EdsLib_DisplayUserIterator_FullName_Callback(const EdsLib_DatabaseObject_t *GD, + EdsLib_Iterator_CbType_t CbType, + const EdsLib_DataTypeIterator_StackEntry_t *EntityInfo, + const char *EntityName, + void *OpaqueArg); + +int32_t EdsLib_DisplayScalarConv_ToString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, + char *OutputBuffer, + uint32_t BufferSize, + const void *SourcePtr); + +int32_t EdsLib_DisplayScalarConv_FromString_Impl(const EdsLib_DataTypeDB_Entry_t *DictEntryPtr, + const EdsLib_DisplayDB_Entry_t *DisplayInfoPtr, + void *DestPtr, + const char *SrcString); + +uintmax_t EdsLib_ErrorControlCompute(EdsLib_ErrorControlType_t Algorithm, + const void *Buffer, + uint32_t BufferSizeBits, + uint32_t ErrCtlBitPos); /********************************************************** * PROTOTYPES - IntfDB lookup helper functions @@ -556,19 +600,46 @@ uintmax_t EdsLib_ErrorControlCompute(EdsLib_ErrorControlType_t Algorithm, const * **********************************************************/ -EdsLib_IntfDB_t EdsLib_IntfDB_GetTopLevel(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); -const EdsLib_IntfDB_ComponentEntry_t *EdsLib_IntfDB_GetComponentEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj); -const EdsLib_IntfDB_DeclIntfEntry_t *EdsLib_IntfDB_GetDeclIntfEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj); -const EdsLib_IntfDB_InterfaceEntry_t *EdsLib_IntfDB_GetInterfaceEntryFromCompIdx(const EdsLib_IntfDB_ComponentEntry_t *CompEntry, uint16_t CompIdx); -const EdsLib_IntfDB_CommandEntry_t *EdsLib_IntfDB_GetCommandEntryFromIntfIdx(const EdsLib_IntfDB_DeclIntfEntry_t *IntfEntry, uint16_t IntfIdx); -const EdsLib_IntfDB_InterfaceEntry_t *EdsLib_IntfDB_GetComponentInterfaceEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj, const EdsLib_IntfDB_ComponentEntry_t **CompEntryOut); -const EdsLib_IntfDB_CommandEntry_t *EdsLib_IntfDB_GetDeclIntfCommandEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj, const EdsLib_IntfDB_DeclIntfEntry_t **DeclIntfOut); - -int32_t EdsLib_IntfDB_FindComponentBySubstring(EdsLib_IntfDB_t IntfDBPtr, const char *CompName, size_t MatchLen, uint16_t *IdxOut); -int32_t EdsLib_IntfDB_FindDeclIntfBySubstring(EdsLib_IntfDB_t IntfDBPtr, const char *IntfName, size_t MatchLen, uint16_t *IdxOut); -int32_t EdsLib_IntfDB_FindComponentInterfaceBySubstring(const EdsLib_IntfDB_ComponentEntry_t *CompEntry, const char *IntfName, size_t MatchLen, uint16_t *IdxOut); -int32_t EdsLib_IntfDB_FindComponentByQualifiedName(const EdsLib_DatabaseObject_t *GD, const char *CompName, size_t MatchLen, EdsLib_DatabaseRef_t *RefObj); -int32_t EdsLib_IntfDB_FindDeclIntfByQualifiedName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, size_t MatchLen, EdsLib_DatabaseRef_t *RefObj); -int32_t EdsLib_IntfDB_FindFullContext(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj, EdsLib_IntfDB_FullContext_t *CtxtOut); - -#endif /* _EDSLIB_INTERNAL_H_ */ +EdsLib_IntfDB_t EdsLib_IntfDB_GetTopLevel(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx); +const EdsLib_IntfDB_ComponentEntry_t *EdsLib_IntfDB_GetComponentEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj); +const EdsLib_IntfDB_DeclIntfEntry_t *EdsLib_IntfDB_GetDeclIntfEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj); +const EdsLib_IntfDB_InterfaceEntry_t * +EdsLib_IntfDB_GetInterfaceEntryFromCompIdx(const EdsLib_IntfDB_ComponentEntry_t *CompEntry, uint16_t CompIdx); +const EdsLib_IntfDB_CommandEntry_t * +EdsLib_IntfDB_GetCommandEntryFromIntfIdx(const EdsLib_IntfDB_DeclIntfEntry_t *IntfEntry, uint16_t IntfIdx); +const EdsLib_IntfDB_InterfaceEntry_t * +EdsLib_IntfDB_GetComponentInterfaceEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj, + const EdsLib_IntfDB_ComponentEntry_t **CompEntryOut); +const EdsLib_IntfDB_CommandEntry_t * +EdsLib_IntfDB_GetDeclIntfCommandEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj, + const EdsLib_IntfDB_DeclIntfEntry_t **DeclIntfOut); + +int32_t EdsLib_IntfDB_FindComponentBySubstring(EdsLib_IntfDB_t IntfDBPtr, + const char *CompName, + size_t MatchLen, + uint16_t *IdxOut); +int32_t EdsLib_IntfDB_FindDeclIntfBySubstring(EdsLib_IntfDB_t IntfDBPtr, + const char *IntfName, + size_t MatchLen, + uint16_t *IdxOut); +int32_t EdsLib_IntfDB_FindComponentInterfaceBySubstring(const EdsLib_IntfDB_ComponentEntry_t *CompEntry, + const char *IntfName, + size_t MatchLen, + uint16_t *IdxOut); +int32_t EdsLib_IntfDB_FindComponentByQualifiedName(const EdsLib_DatabaseObject_t *GD, + const char *CompName, + size_t MatchLen, + EdsLib_DatabaseRef_t *RefObj); +int32_t EdsLib_IntfDB_FindDeclIntfByQualifiedName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + size_t MatchLen, + EdsLib_DatabaseRef_t *RefObj); +int32_t EdsLib_IntfDB_FindFullContext(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj, + EdsLib_IntfDB_FullContext_t *CtxtOut); + +#endif /* _EDSLIB_INTERNAL_H_ */ diff --git a/edslib/fsw/src/edslib_intfdb_api.c b/edslib/fsw/src/edslib_intfdb_api.c index 2ec32df..02224d5 100644 --- a/edslib/fsw/src/edslib_intfdb_api.c +++ b/edslib/fsw/src/edslib_intfdb_api.c @@ -52,7 +52,9 @@ * to ensure that this code is linked into the target. * *-----------------------------------------------------------------*/ -void EdsLib_IntfDB_Initialize(void) {} +void EdsLib_IntfDB_Initialize(void) +{ +} /*---------------------------------------------------------------- * @@ -76,7 +78,8 @@ void EdsLib_IntfDB_ExportComponentInfo(const EdsLib_IntfDB_ComponentEntry_t *Com * *-----------------------------------------------------------------*/ void EdsLib_IntfDB_ExportCommandInfo(const EdsLib_IntfDB_CommandEntry_t *CmdEntry, - EdsLib_IntfDB_CommandInfo_t *CmdInfoBuffer, const EdsLib_DatabaseRef_t *SelfRefObj) + EdsLib_IntfDB_CommandInfo_t *CmdInfoBuffer, + const EdsLib_DatabaseRef_t *SelfRefObj) { EdsLib_DatabaseRef_t ParentRefObj; @@ -121,7 +124,8 @@ void EdsLib_IntfDB_ExportInterfaceInfo(const EdsLib_IntfDB_InterfaceEntry_t *Int * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t ComponentId, +int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t ComponentId, EdsLib_IntfDB_ComponentInfo_t *CompInfoBuffer) { const EdsLib_IntfDB_ComponentEntry_t *CompEntry; @@ -150,8 +154,10 @@ int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, EdsLib * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx, const char *CompName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD, + uint16_t AppIdx, + const char *CompName, + EdsLib_Id_t *IdBuffer) { EdsLib_IntfDB_t IntfDBPtr; EdsLib_DatabaseRef_t RefObj; @@ -190,8 +196,10 @@ int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t ComponentId, - const char *IntfName, EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t ComponentId, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { const EdsLib_IntfDB_ComponentEntry_t *CompEntry; EdsLib_DatabaseRef_t RefObj; @@ -231,8 +239,9 @@ int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObj * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { EdsLib_DatabaseRef_t RefObj; int32_t Status; @@ -260,8 +269,9 @@ int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObjec * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { const EdsLib_IntfDB_ComponentEntry_t *CompEntry; const char *Separator; @@ -296,7 +306,9 @@ int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObje } else { - Status = EdsLib_IntfDB_FindComponentInterfaceBySubstring(CompEntry, Separator, strlen(Separator), + Status = EdsLib_IntfDB_FindComponentInterfaceBySubstring(CompEntry, + Separator, + strlen(Separator), &RefObj.SubIndex); } } @@ -322,8 +334,10 @@ int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObje * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx, - const char *IntfName, EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, + uint16_t AppIdx, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { EdsLib_IntfDB_t IntfDBPtr; const EdsLib_IntfDB_DeclIntfEntry_t *IntfPtr; @@ -374,8 +388,10 @@ int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObje * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, const char *CmdName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, + const char *CmdName, + EdsLib_Id_t *IdBuffer) { const EdsLib_IntfDB_DeclIntfEntry_t *IntfEntry; const EdsLib_IntfDB_CommandEntry_t *CmdEntry; @@ -432,8 +448,9 @@ int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t CommandId, - EdsLib_IntfDB_CommandInfo_t *CommandInfoBuffer) +int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t CommandId, + EdsLib_IntfDB_CommandInfo_t *CommandInfoBuffer) { const EdsLib_IntfDB_CommandEntry_t *CmdEntry; EdsLib_DatabaseRef_t RefObj; @@ -461,7 +478,8 @@ int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_I * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, +int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, EdsLib_IntfDB_InterfaceInfo_t *IntfInfoBuffer) { const EdsLib_IntfDB_InterfaceEntry_t *IntfEntry; @@ -490,8 +508,11 @@ int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *G * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t CmdEdsId, - EdsLib_Id_t CompIntfEdsId, EdsLib_Id_t *IdBuffer, size_t NumIdBufs) +int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t CmdEdsId, + EdsLib_Id_t CompIntfEdsId, + EdsLib_Id_t *IdBuffer, + size_t NumIdBufs) { const EdsLib_IntfDB_InterfaceEntry_t *IntfEntry; const EdsLib_IntfDB_CommandEntry_t *CmdEntry; @@ -575,8 +596,10 @@ int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, Ed * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, EdsLib_Id_t *IdBuffer, - size_t NumIdBufs) +int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, + EdsLib_Id_t *IdBuffer, + size_t NumIdBufs) { const EdsLib_IntfDB_DeclIntfEntry_t *DeclIntfEntry; EdsLib_DatabaseRef_t RefObj; @@ -622,8 +645,8 @@ int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, EdsLib_ * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *BufferPtr, - size_t BufferLen) +int32_t +EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *BufferPtr, size_t BufferLen) { int32_t Status; EdsLib_IntfDB_FullContext_t Ctxt; @@ -659,7 +682,7 @@ int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t } LengthRemain -= PrintLen; - CurrPtr += PrintLen; + CurrPtr += PrintLen; /* Note, only one or two of these pointers can be non-null at the same time */ if (Ctxt.DeclIntfEntry != NULL) @@ -671,7 +694,7 @@ int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t break; } LengthRemain -= PrintLen; - CurrPtr += PrintLen; + CurrPtr += PrintLen; } if (Ctxt.CompEntry != NULL) { @@ -682,7 +705,7 @@ int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t break; } LengthRemain -= PrintLen; - CurrPtr += PrintLen; + CurrPtr += PrintLen; } if (Ctxt.CmdEntry != NULL) { @@ -693,7 +716,7 @@ int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t break; } LengthRemain -= PrintLen; - CurrPtr += PrintLen; + CurrPtr += PrintLen; } if (Ctxt.CompIntfEntry != NULL) { @@ -704,7 +727,7 @@ int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t break; } LengthRemain -= PrintLen; - CurrPtr += PrintLen; + CurrPtr += PrintLen; } } while (false); diff --git a/edslib/fsw/src/edslib_intfdb_lookup.c b/edslib/fsw/src/edslib_intfdb_lookup.c index 40a288d..17f90d8 100644 --- a/edslib/fsw/src/edslib_intfdb_lookup.c +++ b/edslib/fsw/src/edslib_intfdb_lookup.c @@ -202,7 +202,8 @@ EdsLib_IntfDB_GetCommandEntryFromIntfIdx(const EdsLib_IntfDB_DeclIntfEntry_t *In * *-----------------------------------------------------------------*/ const EdsLib_IntfDB_InterfaceEntry_t * -EdsLib_IntfDB_GetComponentInterfaceEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj, +EdsLib_IntfDB_GetComponentInterfaceEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj, const EdsLib_IntfDB_ComponentEntry_t **CompEntryOut) { EdsLib_IntfDB_t IntfDB; @@ -252,7 +253,8 @@ EdsLib_IntfDB_GetComponentInterfaceEntry(const EdsLib_DatabaseObject_t *GD, cons * *-----------------------------------------------------------------*/ const EdsLib_IntfDB_CommandEntry_t * -EdsLib_IntfDB_GetDeclIntfCommandEntry(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj, +EdsLib_IntfDB_GetDeclIntfCommandEntry(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj, const EdsLib_IntfDB_DeclIntfEntry_t **DeclIntfOut) { EdsLib_IntfDB_t IntfDB; @@ -261,7 +263,7 @@ EdsLib_IntfDB_GetDeclIntfCommandEntry(const EdsLib_DatabaseObject_t *GD, const E uint16_t i; IntfEntry = NULL; - CmdEntry = NULL; + CmdEntry = NULL; do { @@ -301,8 +303,10 @@ EdsLib_IntfDB_GetDeclIntfCommandEntry(const EdsLib_DatabaseObject_t *GD, const E * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindComponentBySubstring(EdsLib_IntfDB_t IntfDBPtr, const char *CompName, size_t MatchLen, - uint16_t *IdxOut) +int32_t EdsLib_IntfDB_FindComponentBySubstring(EdsLib_IntfDB_t IntfDBPtr, + const char *CompName, + size_t MatchLen, + uint16_t *IdxOut) { const EdsLib_IntfDB_ComponentEntry_t *CompEntry; int32_t Status; @@ -314,8 +318,8 @@ int32_t EdsLib_IntfDB_FindComponentBySubstring(EdsLib_IntfDB_t IntfDBPtr, const { CompEntry = &IntfDBPtr->ComponentListEntries[i]; - if (CompEntry->Name != NULL && strlen(CompEntry->Name) == MatchLen && - memcmp(CompEntry->Name, CompName, MatchLen) == 0) + if (CompEntry->Name != NULL && strlen(CompEntry->Name) == MatchLen + && memcmp(CompEntry->Name, CompName, MatchLen) == 0) { *IdxOut = 1 + IntfDBPtr->DeclIntfListSize + i; Status = EDSLIB_SUCCESS; @@ -332,8 +336,10 @@ int32_t EdsLib_IntfDB_FindComponentBySubstring(EdsLib_IntfDB_t IntfDBPtr, const * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindDeclIntfBySubstring(EdsLib_IntfDB_t IntfDBPtr, const char *IntfName, size_t MatchLen, - uint16_t *IdxOut) +int32_t EdsLib_IntfDB_FindDeclIntfBySubstring(EdsLib_IntfDB_t IntfDBPtr, + const char *IntfName, + size_t MatchLen, + uint16_t *IdxOut) { const EdsLib_IntfDB_DeclIntfEntry_t *DeclIntfEntry; int32_t Status; @@ -345,8 +351,8 @@ int32_t EdsLib_IntfDB_FindDeclIntfBySubstring(EdsLib_IntfDB_t IntfDBPtr, const c { DeclIntfEntry = &IntfDBPtr->DeclIntfListEntries[i]; - if (DeclIntfEntry->Name != NULL && strlen(DeclIntfEntry->Name) == MatchLen && - memcmp(DeclIntfEntry->Name, IntfName, MatchLen) == 0) + if (DeclIntfEntry->Name != NULL && strlen(DeclIntfEntry->Name) == MatchLen + && memcmp(DeclIntfEntry->Name, IntfName, MatchLen) == 0) { *IdxOut = 1 + i; Status = EDSLIB_SUCCESS; @@ -364,7 +370,9 @@ int32_t EdsLib_IntfDB_FindDeclIntfBySubstring(EdsLib_IntfDB_t IntfDBPtr, const c * *-----------------------------------------------------------------*/ int32_t EdsLib_IntfDB_FindComponentInterfaceBySubstring(const EdsLib_IntfDB_ComponentEntry_t *CompEntry, - const char *IntfName, size_t MatchLen, uint16_t *IdxOut) + const char *IntfName, + size_t MatchLen, + uint16_t *IdxOut) { const EdsLib_IntfDB_InterfaceEntry_t *IntfEntry; uint16_t CompIdx; @@ -378,8 +386,8 @@ int32_t EdsLib_IntfDB_FindComponentInterfaceBySubstring(const EdsLib_IntfDB_Comp { IntfEntry = EdsLib_IntfDB_GetInterfaceEntryFromCompIdx(CompEntry, CompIdx); - if (IntfEntry != NULL && IntfEntry->Name != NULL && strlen(IntfEntry->Name) == MatchLen && - memcmp(IntfEntry->Name, IntfName, MatchLen) == 0) + if (IntfEntry != NULL && IntfEntry->Name != NULL && strlen(IntfEntry->Name) == MatchLen + && memcmp(IntfEntry->Name, IntfName, MatchLen) == 0) { *IdxOut = CompIdx; @@ -400,8 +408,10 @@ int32_t EdsLib_IntfDB_FindComponentInterfaceBySubstring(const EdsLib_IntfDB_Comp * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindDeclIntfByQualifiedName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, - size_t MatchLen, EdsLib_DatabaseRef_t *RefObj) +int32_t EdsLib_IntfDB_FindDeclIntfByQualifiedName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + size_t MatchLen, + EdsLib_DatabaseRef_t *RefObj) { EdsLib_IntfDB_t IntfDBPtr; const char *Sep; @@ -430,7 +440,7 @@ int32_t EdsLib_IntfDB_FindDeclIntfByQualifiedName(const EdsLib_DatabaseObject_t } CurrChunkPtr += CurrChunkLen + 1; - CurrChunkLen = MatchLen - (CurrChunkPtr - IntfName); + CurrChunkLen = MatchLen - (CurrChunkPtr - IntfName); } if (IntfDBPtr != NULL) @@ -452,8 +462,10 @@ int32_t EdsLib_IntfDB_FindDeclIntfByQualifiedName(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindComponentByQualifiedName(const EdsLib_DatabaseObject_t *GD, const char *CompName, - size_t MatchLen, EdsLib_DatabaseRef_t *RefObj) +int32_t EdsLib_IntfDB_FindComponentByQualifiedName(const EdsLib_DatabaseObject_t *GD, + const char *CompName, + size_t MatchLen, + EdsLib_DatabaseRef_t *RefObj) { EdsLib_IntfDB_t IntfDBPtr; const char *Sep; @@ -482,7 +494,7 @@ int32_t EdsLib_IntfDB_FindComponentByQualifiedName(const EdsLib_DatabaseObject_t } CurrChunkPtr += CurrChunkLen + 1; - CurrChunkLen = MatchLen - (CurrChunkPtr - CompName); + CurrChunkLen = MatchLen - (CurrChunkPtr - CompName); } if (IntfDBPtr != NULL) @@ -504,8 +516,9 @@ int32_t EdsLib_IntfDB_FindComponentByQualifiedName(const EdsLib_DatabaseObject_t * See description in header file for argument/return detail * *-----------------------------------------------------------------*/ -int32_t EdsLib_IntfDB_FindFullContext(const EdsLib_DatabaseObject_t *GD, const EdsLib_DatabaseRef_t *RefObj, - EdsLib_IntfDB_FullContext_t *CtxtOut) +int32_t EdsLib_IntfDB_FindFullContext(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DatabaseRef_t *RefObj, + EdsLib_IntfDB_FullContext_t *CtxtOut) { EdsLib_IntfDB_t IntfDBPtr; const EdsLib_IntfDB_ComponentEntry_t *CompEntry; diff --git a/edslib/fsw/unit-test/edslib_datatypedb_test.c b/edslib/fsw/unit-test/edslib_datatypedb_test.c index a840157..0ea8d0d 100644 --- a/edslib/fsw/unit-test/edslib_datatypedb_test.c +++ b/edslib/fsw/unit-test/edslib_datatypedb_test.c @@ -38,14 +38,14 @@ #include "edslib_datatypedb.h" -const char *UT_DYNAMIC_APPNAME_TABLE[UT_MAX_INDEX] = {NULL}; -EdsLib_DataTypeDB_t UT_DYNAMIC_DATATYPEDB_TABLE[UT_MAX_INDEX] = {NULL}; +const char *UT_DYNAMIC_APPNAME_TABLE[UT_MAX_INDEX] = { NULL }; +EdsLib_DataTypeDB_t UT_DYNAMIC_DATATYPEDB_TABLE[UT_MAX_INDEX] = { NULL }; -EdsLib_DatabaseObject_t UT_DYNAMIC_DB = {.AppTableSize = UT_MAX_INDEX, - .AppName_Table = UT_DYNAMIC_APPNAME_TABLE, - .DataTypeDB_Table = UT_DYNAMIC_DATATYPEDB_TABLE, - .DisplayDB_Table = NULL, - .IntfDB_Table = NULL}; +EdsLib_DatabaseObject_t UT_DYNAMIC_DB = { .AppTableSize = UT_MAX_INDEX, + .AppName_Table = UT_DYNAMIC_APPNAME_TABLE, + .DataTypeDB_Table = UT_DYNAMIC_DATATYPEDB_TABLE, + .DisplayDB_Table = NULL, + .IntfDB_Table = NULL }; void Test_EdsLib_DataTypeDB_Initialize(void) { @@ -165,8 +165,10 @@ void Test_EdsLib_DataTypeDB_GetDerivedInfo(void) UtAssert_INT32_EQ(EdsLib_DataTypeDB_GetDerivedInfo(&UT_DATABASE, UT_EDS_CMDHDR_ID, &DerivInfo), EDSLIB_SUCCESS); } -void UtConstraintCallback(const EdsLib_DatabaseObject_t *GD, const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, - EdsLib_GenericValueBuffer_t *ConstraintValue, void *Arg) +void UtConstraintCallback(const EdsLib_DatabaseObject_t *GD, + const EdsLib_DataTypeDB_EntityInfo_t *MemberInfo, + EdsLib_GenericValueBuffer_t *ConstraintValue, + void *Arg) { } @@ -177,8 +179,11 @@ void Test_EdsLib_DataTypeDB_ConstraintIterator(void) * DerivedId, EdsLib_ConstraintCallback_t Callback, void *CbArg); */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_ConstraintIterator(&UT_DATABASE, UT_EDS_CMDHDR_ID, UT_EDS_CMD1_ID, - UtConstraintCallback, NULL), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_ConstraintIterator(&UT_DATABASE, + UT_EDS_CMDHDR_ID, + UT_EDS_CMD1_ID, + UtConstraintCallback, + NULL), EDSLIB_SUCCESS); } @@ -206,7 +211,11 @@ void Test_EdsLib_DataTypeDB_PackCompleteObject(void) memset(&PackBuf, 0xAA, sizeof(PackBuf)); EdsId = UT_EDS_CMD1_ID; - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId, &PackBuf, &CmdBuf, sizeof(PackBuf) * 8, + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId, + &PackBuf, + &CmdBuf, + sizeof(PackBuf) * 8, sizeof(CmdBuf)), EDSLIB_SUCCESS); } @@ -252,8 +261,13 @@ void Test_EdsLib_DataTypeDB_PackPartialObject(void) memset(&PackBuf, 0xAA, sizeof(PackBuf)); EdsId = UT_EDS_CMD1_ID; - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackPartialObject(&UT_DATABASE, &EdsId, &PackBuf, &CmdBuf, sizeof(PackBuf) * 8, - sizeof(CmdBuf), 0), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackPartialObject(&UT_DATABASE, + &EdsId, + &PackBuf, + &CmdBuf, + sizeof(PackBuf) * 8, + sizeof(CmdBuf), + 0), EDSLIB_SUCCESS); } @@ -271,7 +285,11 @@ void Test_EdsLib_DataTypeDB_UnpackCompleteObject(void) memset(&PackBuf, 0, sizeof(PackBuf)); EdsId = UT_EDS_CMDHDR_ID; - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId, &CmdBuf, &PackBuf, sizeof(CmdBuf), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId, + &CmdBuf, + &PackBuf, + sizeof(CmdBuf), sizeof(PackBuf) * 8), EDSLIB_SUCCESS); } @@ -317,8 +335,13 @@ void Test_EdsLib_DataTypeDB_UnpackPartialObject(void) memset(&PackBuf, 0, sizeof(PackBuf)); EdsId = UT_EDS_CMDHDR_ID; - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackPartialObject(&UT_DATABASE, &EdsId, &CmdBuf, &PackBuf, sizeof(CmdBuf), - sizeof(PackBuf) * 8, 0), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackPartialObject(&UT_DATABASE, + &EdsId, + &CmdBuf, + &PackBuf, + sizeof(CmdBuf), + sizeof(PackBuf) * 8, + 0), EDSLIB_SUCCESS); } @@ -372,7 +395,11 @@ void Test_EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(void) ProcessedSize.Bits = EdsLib_OCTETS_TO_BITS(sizeof(PackBuf)); ProcessedSize.Bytes = sizeof(CmdBuf); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(&UT_DATABASE, UT_EDS_CMD1_ID, &CmdBuf, &PackBuf, 0, + UtAssert_INT32_EQ(EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(&UT_DATABASE, + UT_EDS_CMD1_ID, + &CmdBuf, + &PackBuf, + 0, &ProcessedSize), EDSLIB_SUCCESS); } @@ -463,7 +490,10 @@ void Test_EdsLib_DataTypeDB_IdentifyBufferWithSize(void) /* Setup */ UtAssert_INT32_EQ(EdsLib_DataTypeDB_InitializeNativeObject(&UT_DATABASE, UT_EDS_CMD1_ID, &CmdBuf), EDSLIB_SUCCESS); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_IdentifyBufferWithSize(&UT_DATABASE, UT_EDS_CMDHDR_ID, &CmdBuf, sizeof(CmdBuf), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_IdentifyBufferWithSize(&UT_DATABASE, + UT_EDS_CMDHDR_ID, + &CmdBuf, + sizeof(CmdBuf), &DerivObjInfo), EDSLIB_SUCCESS); @@ -524,14 +554,22 @@ void UtTest_Setup(void) UtTest_Add(Test_EdsLib_DataTypeDB_ConstraintIterator, NULL, NULL, "EdsLib_DataTypeDB_ConstraintIterator"); UtTest_Add(Test_EdsLib_DataTypeDB_BaseCheck, NULL, NULL, "EdsLib_DataTypeDB_BaseCheck"); UtTest_Add(Test_EdsLib_DataTypeDB_PackCompleteObject, NULL, NULL, "EdsLib_DataTypeDB_PackCompleteObject"); - UtTest_Add(Test_EdsLib_DataTypeDB_PackPartialObjectVarSize, NULL, NULL, + UtTest_Add(Test_EdsLib_DataTypeDB_PackPartialObjectVarSize, + NULL, + NULL, "EdsLib_DataTypeDB_PackPartialObjectVarSize"); UtTest_Add(Test_EdsLib_DataTypeDB_UnpackCompleteObject, NULL, NULL, "EdsLib_DataTypeDB_UnpackCompleteObject"); - UtTest_Add(Test_EdsLib_DataTypeDB_UnpackPartialObjectVarSize, NULL, NULL, + UtTest_Add(Test_EdsLib_DataTypeDB_UnpackPartialObjectVarSize, + NULL, + NULL, "EdsLib_DataTypeDB_UnpackPartialObjectVarSize"); - UtTest_Add(Test_EdsLib_DataTypeDB_FinalizePackedObjectVarSize, NULL, NULL, + UtTest_Add(Test_EdsLib_DataTypeDB_FinalizePackedObjectVarSize, + NULL, + NULL, "EdsLib_DataTypeDB_FinalizePackedObjectVarSize"); - UtTest_Add(Test_EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize, NULL, NULL, + UtTest_Add(Test_EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize, + NULL, + NULL, "EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize"); UtTest_Add(Test_EdsLib_DataTypeDB_InitializeNativeObject, NULL, NULL, "EdsLib_DataTypeDB_InitializeNativeObject"); UtTest_Add(Test_EdsLib_DataTypeDB_LoadValue, NULL, NULL, "EdsLib_DataTypeDB_LoadValue"); diff --git a/edslib/fsw/unit-test/edslib_displaydb_test.c b/edslib/fsw/unit-test/edslib_displaydb_test.c index 284af25..23a051f 100644 --- a/edslib/fsw/unit-test/edslib_displaydb_test.c +++ b/edslib/fsw/unit-test/edslib_displaydb_test.c @@ -136,7 +136,9 @@ void Test_EdsLib_DisplayDB_GetNameByIndex(void) UtAssert_STRINGBUF_EQ(Name, -1, "Cmd1Data1", -1); } -static void Test_EntityCallback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) {} +static void Test_EntityCallback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) +{ +} void Test_EdsLib_DisplayDB_IterateBaseEntities(void) { @@ -178,7 +180,7 @@ void Test_EdsLib_Generate_Hexdump(void) /* Test Case for: * void EdsLib_Generate_Hexdump(void *output, const uint8_t *DataPtr, uint16_t DisplayOffset, uint16_t Count); */ - const uint8_t Data[] = {0x0A, 0x0B, 0x0C, 0x0D}; + const uint8_t Data[] = { 0x0A, 0x0B, 0x0C, 0x0D }; UtAssert_VOIDCALL(EdsLib_Generate_Hexdump(stdout, Data, 0, sizeof(Data))); } @@ -238,7 +240,9 @@ void Test_EdsLib_DisplayDB_GetEnumValue(void) UtAssert_UINT32_EQ(ValueBuffer.Value.UnsignedInteger, 142); } -static void Test_SymbolCallback(void *Arg, const char *SymbolName, int32_t SymbolValue) {} +static void Test_SymbolCallback(void *Arg, const char *SymbolName, int32_t SymbolValue) +{ +} void Test_EdsLib_DisplayDB_IterateEnumValues(void) { diff --git a/edslib/fsw/unit-test/edslib_intfdb_test.c b/edslib/fsw/unit-test/edslib_intfdb_test.c index ada9e0a..f260ce7 100644 --- a/edslib/fsw/unit-test/edslib_intfdb_test.c +++ b/edslib/fsw/unit-test/edslib_intfdb_test.c @@ -229,13 +229,21 @@ void UtTest_Setup(void) { UtTest_Add(Test_EdsLib_IntfDB_Initialize, NULL, NULL, "EdsLib_IntfDB_Initialize"); UtTest_Add(Test_EdsLib_IntfDB_FindComponentByLocalName, NULL, NULL, "EdsLib_IntfDB_FindComponentByLocalName"); - UtTest_Add(Test_EdsLib_IntfDB_FindDeclaredInterfaceByLocalName, NULL, NULL, + UtTest_Add(Test_EdsLib_IntfDB_FindDeclaredInterfaceByLocalName, + NULL, + NULL, "EdsLib_IntfDB_FindDeclaredInterfaceByLocalName"); - UtTest_Add(Test_EdsLib_IntfDB_FindDeclaredInterfaceByFullName, NULL, NULL, + UtTest_Add(Test_EdsLib_IntfDB_FindDeclaredInterfaceByFullName, + NULL, + NULL, "EdsLib_IntfDB_FindDeclaredInterfaceByFullName"); - UtTest_Add(Test_EdsLib_IntfDB_FindComponentInterfaceByLocalName, NULL, NULL, + UtTest_Add(Test_EdsLib_IntfDB_FindComponentInterfaceByLocalName, + NULL, + NULL, "EdsLib_IntfDB_FindComponentInterfaceByLocalName"); - UtTest_Add(Test_EdsLib_IntfDB_FindComponentInterfaceByFullName, NULL, NULL, + UtTest_Add(Test_EdsLib_IntfDB_FindComponentInterfaceByFullName, + NULL, + NULL, "EdsLib_IntfDB_FindComponentInterfaceByFullName"); UtTest_Add(Test_EdsLib_IntfDB_FindCommandByLocalName, NULL, NULL, "EdsLib_IntfDB_FindCommandByLocalName"); UtTest_Add(Test_EdsLib_IntfDB_FindAllCommands, NULL, NULL, "EdsLib_IntfDB_FindAllCommands"); diff --git a/edslib/fsw/unit-test/edslib_pack_test.c b/edslib/fsw/unit-test/edslib_pack_test.c index 8d460a3..0c26650 100644 --- a/edslib/fsw/unit-test/edslib_pack_test.c +++ b/edslib/fsw/unit-test/edslib_pack_test.c @@ -87,15 +87,19 @@ void Test_ALL_BOOLEANS(void) unsigned char *vector = TESTDATA_ALL_BOOLEANS_bin; size_t len = TESTDATA_ALL_BOOLEANS_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_t *NativeObj = &UtRef_ALL_BOOLEANS; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -114,8 +118,12 @@ void Test_ALL_FLOATS(void) memset(&PackObj, 0xEE, sizeof(PackObj)); UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_FLOATS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -125,15 +133,19 @@ void Test_ALL_SIGNED_INTS(void) unsigned char *vector = TESTDATA_ALL_SIGNED_INTS_bin; size_t len = TESTDATA_ALL_SIGNED_INTS_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_t *NativeObj = &UtRef_ALL_SIGNED_INTS; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -143,15 +155,19 @@ void Test_ALL_UNSIGNED_INTS(void) unsigned char *vector = TESTDATA_ALL_UNSIGNED_INTS_bin; size_t len = TESTDATA_ALL_UNSIGNED_INTS_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_t *NativeObj = &UtRef_ALL_UNSIGNED_INTS; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -161,15 +177,19 @@ void Test_COMPOUND_TYPES(void) unsigned char *vector = TESTDATA_COMPOUND_TYPES_bin; size_t len = TESTDATA_COMPOUND_TYPES_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_t *NativeObj = &UtRef_COMPOUND_TYPES; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -188,8 +208,12 @@ void Test_DERIV_F64(void) UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_F64_t)); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_BASE_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -206,8 +230,12 @@ void Test_DERIV_U16(void) EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_U16_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_U16_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -224,8 +252,12 @@ void Test_DERIV_U32(void) EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_U32_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_U32_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -244,8 +276,12 @@ void Test_ER_EVEN_FOUR(void) EdsLib_SizeInfo_t SizeInfo; /* Include validation that the var size API must be used for this */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_NOT_FIXED_SIZE); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_EVEN_t)); @@ -320,8 +356,12 @@ void Test_ER_ODD_ONE(void) EdsLib_SizeInfo_t SizeInfo; /* Include validation that the var size API must be used for this */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_NOT_FIXED_SIZE); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_ODD_t)); @@ -389,15 +429,19 @@ void Test_ERRCTL_CHECKSUM(void) unsigned char *vector = TESTDATA_ERRCTL_CHECKSUM_bin; size_t len = TESTDATA_ERRCTL_CHECKSUM_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_t *NativeObj = &UtRef_ERRCTL_CHECKSUM; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -418,8 +462,12 @@ void Test_ERRCTL_CHECKSUM_LONGITUDINAL(void) EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_LONGITUDINAL_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_LONGITUDINAL_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -429,15 +477,19 @@ void Test_ERRCTL_CRC16EL(void) unsigned char *vector = TESTDATA_ERRCTL_CRC16EL_bin; size_t len = TESTDATA_ERRCTL_CRC16EL_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_t *NativeObj = &UtRef_ERRCTL_CRC16EL; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -454,8 +506,12 @@ void Test_ERRCTL_CRC8(void) EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC8_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC8_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -473,8 +529,12 @@ void Test_MFLOAT32EBxEU3(void) EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_MFLOAT32EBxEU3_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_MFLOAT32EBxEU3_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(UtRef_MFLOAT32EBxEU3)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(UtRef_MFLOAT32EBxEU3)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -485,16 +545,20 @@ void Test_OPTIONAL_DIRECT_350(void) unsigned char *vector = TESTDATA_OPTIONAL_DIRECT_350_bin; size_t len = TESTDATA_OPTIONAL_DIRECT_350_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t *NativeObj = &UtRef_OPTIONAL_DIRECT_350; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t PackObj; EdsLib_SizeInfo_t SizeInfo; /* Include validation that the var size API must be used for this */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_NOT_FIXED_SIZE); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t)); @@ -511,9 +575,9 @@ void Test_OPTIONAL_DIRECT_450(void) unsigned char *vector = TESTDATA_OPTIONAL_DIRECT_450_bin; size_t len = TESTDATA_OPTIONAL_DIRECT_450_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t *NativeObj = &UtRef_OPTIONAL_DIRECT_450; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t PackObj; EdsLib_SizeInfo_t SizeInfo; @@ -535,16 +599,20 @@ void Test_OPTIONAL_FIRST_4(void) unsigned char *vector = TESTDATA_OPTIONAL_FIRST_4_bin; size_t len = TESTDATA_OPTIONAL_FIRST_4_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t *NativeObj = &UtRef_OPTIONAL_FIRST_4; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t PackObj; EdsLib_SizeInfo_t SizeInfo; /* Include validation that the var size API must be used for this */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_NOT_FIXED_SIZE); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t)); @@ -563,9 +631,9 @@ void Test_OPTIONAL_FIRST_5(void) unsigned char *vector = TESTDATA_OPTIONAL_FIRST_5_bin; size_t len = TESTDATA_OPTIONAL_FIRST_5_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t *NativeObj = &UtRef_OPTIONAL_FIRST_5; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t PackObj; EdsLib_SizeInfo_t SizeInfo; @@ -586,16 +654,20 @@ void Test_OPTIONAL_LAST_8(void) unsigned char *vector = TESTDATA_OPTIONAL_LAST_8_bin; size_t len = TESTDATA_OPTIONAL_LAST_8_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t *NativeObj = &UtRef_OPTIONAL_LAST_8; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t PackObj; EdsLib_SizeInfo_t SizeInfo; /* Include validation that the var size API must be used for this */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_NOT_FIXED_SIZE); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t)); @@ -614,9 +686,9 @@ void Test_OPTIONAL_LAST_9(void) unsigned char *vector = TESTDATA_OPTIONAL_LAST_9_bin; size_t len = TESTDATA_OPTIONAL_LAST_9_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t *NativeObj = &UtRef_OPTIONAL_LAST_9; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t PackObj; EdsLib_SizeInfo_t SizeInfo; @@ -637,16 +709,20 @@ void Test_OPTIONAL_MID_6(void) unsigned char *vector = TESTDATA_OPTIONAL_MID_6_bin; size_t len = TESTDATA_OPTIONAL_MID_6_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t *NativeObj = &UtRef_OPTIONAL_MID_6; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t PackObj; EdsLib_SizeInfo_t SizeInfo; /* Include validation that the var size API must be used for this */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_NOT_FIXED_SIZE); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t)); @@ -665,9 +741,9 @@ void Test_OPTIONAL_MID_7(void) unsigned char *vector = TESTDATA_OPTIONAL_MID_7_bin; size_t len = TESTDATA_OPTIONAL_MID_7_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t *NativeObj = &UtRef_OPTIONAL_MID_7; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t PackObj; EdsLib_SizeInfo_t SizeInfo; @@ -688,16 +764,20 @@ void Test_OPTIONAL_MULTI_10(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_10_bin; size_t len = TESTDATA_OPTIONAL_MULTI_10_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t *NativeObj = &UtRef_OPTIONAL_MULTI_10; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t PackObj; EdsLib_SizeInfo_t SizeInfo; /* Include validation that the var size API must be used for this */ - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_NOT_FIXED_SIZE); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t)); @@ -716,9 +796,9 @@ void Test_OPTIONAL_MULTI_11(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_11_bin; size_t len = TESTDATA_OPTIONAL_MULTI_11_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t *NativeObj = &UtRef_OPTIONAL_MULTI_11; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t PackObj; EdsLib_SizeInfo_t SizeInfo; @@ -739,9 +819,9 @@ void Test_OPTIONAL_MULTI_12(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_12_bin; size_t len = TESTDATA_OPTIONAL_MULTI_12_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t *NativeObj = &UtRef_OPTIONAL_MULTI_12; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t PackObj; EdsLib_SizeInfo_t SizeInfo; @@ -762,9 +842,9 @@ void Test_OPTIONAL_MULTI_13(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_13_bin; size_t len = TESTDATA_OPTIONAL_MULTI_13_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t *NativeObj = &UtRef_OPTIONAL_MULTI_13; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t PackObj; EdsLib_SizeInfo_t SizeInfo; @@ -785,15 +865,19 @@ void Test_OVERRIDE_TYPES(void) unsigned char *vector = TESTDATA_OVERRIDE_TYPES_bin; size_t len = TESTDATA_OVERRIDE_TYPES_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); const EdsDataType_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_t *NativeObj = &UtRef_OVERRIDE_TYPES; EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(*NativeObj)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(*NativeObj)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); @@ -811,8 +895,12 @@ void Test_S6EBx4(void) EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_S6EBx4_t PackObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_S6EBx4_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, &EdsId_Base, PackObj, NativeObj, - sizeof(PackObj) * 8, sizeof(UtRef_S6EBx4)), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_PackCompleteObject(&UT_DATABASE, + &EdsId_Base, + PackObj, + NativeObj, + sizeof(PackObj) * 8, + sizeof(UtRef_S6EBx4)), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); UtAssert_Eds_Contents(vector, PackObj, len); diff --git a/edslib/fsw/unit-test/edslib_unpack_test.c b/edslib/fsw/unit-test/edslib_unpack_test.c index 263e634..f1fe385 100644 --- a/edslib/fsw/unit-test/edslib_unpack_test.c +++ b/edslib/fsw/unit-test/edslib_unpack_test.c @@ -62,7 +62,10 @@ void Test_Contents(void *Arg, const EdsLib_EntityDescriptor_t *Param) if (Pair->ref) { - EdsLib_Scalar_ToString(&UT_DATABASE, Param->EntityInfo.EdsId, ref_buffer, sizeof(ref_buffer), + EdsLib_Scalar_ToString(&UT_DATABASE, + Param->EntityInfo.EdsId, + ref_buffer, + sizeof(ref_buffer), &Pair->ref[Param->EntityInfo.Offset.Bytes]); } else @@ -72,7 +75,10 @@ void Test_Contents(void *Arg, const EdsLib_EntityDescriptor_t *Param) if (Pair->actual) { - EdsLib_Scalar_ToString(&UT_DATABASE, Param->EntityInfo.EdsId, actual_buffer, sizeof(actual_buffer), + EdsLib_Scalar_ToString(&UT_DATABASE, + Param->EntityInfo.EdsId, + actual_buffer, + sizeof(actual_buffer), &Pair->actual[Param->EntityInfo.Offset.Bytes]); } else @@ -80,14 +86,16 @@ void Test_Contents(void *Arg, const EdsLib_EntityDescriptor_t *Param) actual_buffer[0] = 0; } - UtPrintf("FullName=%s Offset=%lu Value=%s", Param->FullName, (unsigned long)Param->EntityInfo.Offset.Bytes, + UtPrintf("FullName=%s Offset=%lu Value=%s", + Param->FullName, + (unsigned long)Param->EntityInfo.Offset.Bytes, actual_buffer); UtAssert_STRINGBUF_EQ(actual_buffer, sizeof(actual_buffer), ref_buffer, sizeof(ref_buffer)); } void UtAssert_Eds_Contents(EdsLib_Id_t EdsId, const void *ref, const void *actual) { - Test_ComparePair_t Pair = {.actual = actual, .ref = ref}; + Test_ComparePair_t Pair = { .actual = actual, .ref = ref }; EdsLib_DisplayDB_IterateAllEntities(&UT_DATABASE, EdsId, Test_Contents, &Pair); } @@ -96,15 +104,19 @@ void Test_ALL_BOOLEANS(void) unsigned char *vector = TESTDATA_ALL_BOOLEANS_bin; size_t len = TESTDATA_ALL_BOOLEANS_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_BOOLEANS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -123,8 +135,12 @@ void Test_ALL_FLOATS(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ALL_FLOATS_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_FLOATS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -136,15 +152,19 @@ void Test_ALL_SIGNED_INTS(void) unsigned char *vector = TESTDATA_ALL_SIGNED_INTS_bin; size_t len = TESTDATA_ALL_SIGNED_INTS_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_SIGNED_INTS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -156,15 +176,19 @@ void Test_ALL_UNSIGNED_INTS(void) unsigned char *vector = TESTDATA_ALL_UNSIGNED_INTS_bin; size_t len = TESTDATA_ALL_UNSIGNED_INTS_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ALL_UNSIGNED_INTS_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -176,15 +200,19 @@ void Test_COMPOUND_TYPES(void) unsigned char *vector = TESTDATA_COMPOUND_TYPES_bin; size_t len = TESTDATA_COMPOUND_TYPES_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_COMPOUND_TYPES_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -204,8 +232,12 @@ void Test_DERIV_F64(void) UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_F64_t)); UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_BASE_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -224,8 +256,12 @@ void Test_DERIV_U16(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_DERIV_U16_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_U16_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -244,8 +280,12 @@ void Test_DERIV_U32(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_DERIV_U32_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_DERIV_U32_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -264,8 +304,12 @@ void Test_ER_EVEN_FOUR(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ER_EVEN_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_EVEN_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -284,8 +328,12 @@ void Test_ER_EVEN_SIX(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ER_EVEN_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_EVEN_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -304,8 +352,12 @@ void Test_ER_EVEN_TWO(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ER_EVEN_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_EVEN_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -324,8 +376,12 @@ void Test_ER_ODD_ONE(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ER_ODD_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_ODD_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -344,8 +400,12 @@ void Test_ER_ODD_SEVEN(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ER_ODD_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_ODD_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -364,8 +424,12 @@ void Test_ER_ODD_THREE(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ER_ODD_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ER_ODD_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -377,15 +441,19 @@ void Test_ERRCTL_CHECKSUM(void) unsigned char *vector = TESTDATA_ERRCTL_CHECKSUM_bin; size_t len = TESTDATA_ERRCTL_CHECKSUM_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -406,8 +474,12 @@ void Test_ERRCTL_CHECKSUM_LONGITUDINAL(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_LONGITUDINAL_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CHECKSUM_LONGITUDINAL_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -419,15 +491,19 @@ void Test_ERRCTL_CRC16EL(void) unsigned char *vector = TESTDATA_ERRCTL_CRC16EL_bin; size_t len = TESTDATA_ERRCTL_CRC16EL_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC16EL_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -446,8 +522,12 @@ void Test_ERRCTL_CRC8(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC8_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_ERRCTL_CRC8_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -466,8 +546,12 @@ void Test_MFLOAT32EBxEU3(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_MFLOAT32EBxEU3_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_MFLOAT32EBxEU3_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -479,15 +563,19 @@ void Test_OPTIONAL_DIRECT_350(void) unsigned char *vector = TESTDATA_OPTIONAL_DIRECT_350_bin; size_t len = TESTDATA_OPTIONAL_DIRECT_350_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -499,15 +587,19 @@ void Test_OPTIONAL_DIRECT_450(void) unsigned char *vector = TESTDATA_OPTIONAL_DIRECT_450_bin; size_t len = TESTDATA_OPTIONAL_DIRECT_450_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_DIRECT_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -519,15 +611,19 @@ void Test_OPTIONAL_FIRST_4(void) unsigned char *vector = TESTDATA_OPTIONAL_FIRST_4_bin; size_t len = TESTDATA_OPTIONAL_FIRST_4_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -539,15 +635,19 @@ void Test_OPTIONAL_FIRST_5(void) unsigned char *vector = TESTDATA_OPTIONAL_FIRST_5_bin; size_t len = TESTDATA_OPTIONAL_FIRST_5_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_FIRST_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -559,15 +659,19 @@ void Test_OPTIONAL_LAST_8(void) unsigned char *vector = TESTDATA_OPTIONAL_LAST_8_bin; size_t len = TESTDATA_OPTIONAL_LAST_8_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -579,15 +683,19 @@ void Test_OPTIONAL_LAST_9(void) unsigned char *vector = TESTDATA_OPTIONAL_LAST_9_bin; size_t len = TESTDATA_OPTIONAL_LAST_9_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_LAST_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -599,15 +707,19 @@ void Test_OPTIONAL_MID_6(void) unsigned char *vector = TESTDATA_OPTIONAL_MID_6_bin; size_t len = TESTDATA_OPTIONAL_MID_6_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -619,15 +731,19 @@ void Test_OPTIONAL_MID_7(void) unsigned char *vector = TESTDATA_OPTIONAL_MID_7_bin; size_t len = TESTDATA_OPTIONAL_MID_7_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MID_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -639,15 +755,19 @@ void Test_OPTIONAL_MULTI_10(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_10_bin; size_t len = TESTDATA_OPTIONAL_MULTI_10_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -659,15 +779,19 @@ void Test_OPTIONAL_MULTI_11(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_11_bin; size_t len = TESTDATA_OPTIONAL_MULTI_11_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -679,15 +803,19 @@ void Test_OPTIONAL_MULTI_12(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_12_bin; size_t len = TESTDATA_OPTIONAL_MULTI_12_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -699,15 +827,19 @@ void Test_OPTIONAL_MULTI_13(void) unsigned char *vector = TESTDATA_OPTIONAL_MULTI_13_bin; size_t len = TESTDATA_OPTIONAL_MULTI_13_bin_len; EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t NativeObj; UtAssert_LTEQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OPTIONAL_MULTI_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -719,15 +851,19 @@ void Test_OVERRIDE_TYPES(void) unsigned char *vector = TESTDATA_OVERRIDE_TYPES_bin; size_t len = TESTDATA_OVERRIDE_TYPES_bin_len; EdsLib_Id_t EdsId_Expect = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); EdsLib_Id_t EdsId_Base = EDSLIB_MAKE_ID(UT_INDEX_CCSDS_SOIS_SAMPLETYPES, - EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); + EdsContainer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_DATADICTIONARY); EdsDataType_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_OVERRIDE_TYPES_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); @@ -746,8 +882,12 @@ void Test_S6EBx4(void) EdsDataType_CCSDS_SOIS_SAMPLETYPES_S6EBx4_t NativeObj; UtAssert_EQ(size_t, len, sizeof(EdsPackedBuffer_CCSDS_SOIS_SAMPLETYPES_S6EBx4_t)); - UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, &EdsId_Base, &NativeObj, vector, - sizeof(NativeObj), len * 8), + UtAssert_INT32_EQ(EdsLib_DataTypeDB_UnpackCompleteObject(&UT_DATABASE, + &EdsId_Base, + &NativeObj, + vector, + sizeof(NativeObj), + len * 8), EDSLIB_SUCCESS); UtAssert_INT32_EQ(EdsId_Base, EdsId_Expect); diff --git a/edslib/fsw/ut-stubs/edslib_binding_objects_stubs.c b/edslib/fsw/ut-stubs/edslib_binding_objects_stubs.c index 1437226..b015304 100644 --- a/edslib/fsw/ut-stubs/edslib_binding_objects_stubs.c +++ b/edslib/fsw/ut-stubs/edslib_binding_objects_stubs.c @@ -66,8 +66,9 @@ EdsLib_Binding_Compatibility_t EdsLib_Binding_CheckEdsObjectsCompatible(EdsLib_B * Generated stub function for EdsLib_Binding_ExportToPackedBuffer() * ---------------------------------------------------- */ -int32_t EdsLib_Binding_ExportToPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, void *PackedData, - size_t PackedDataSize) +int32_t EdsLib_Binding_ExportToPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, + void *PackedData, + size_t PackedDataSize) { UT_GenStub_SetupReturnBuffer(EdsLib_Binding_ExportToPackedBuffer, int32_t); @@ -134,7 +135,8 @@ size_t EdsLib_Binding_GetNativeSize(const EdsLib_Binding_DescriptorObject_t *Obj * ---------------------------------------------------- */ void EdsLib_Binding_InitDescriptor(EdsLib_Binding_DescriptorObject_t *ObjectUserData, - const EdsLib_DatabaseObject_t *EdsDB, EdsLib_Id_t EdsId) + const EdsLib_DatabaseObject_t *EdsDB, + EdsLib_Id_t EdsId) { UT_GenStub_AddParam(EdsLib_Binding_InitDescriptor, EdsLib_Binding_DescriptorObject_t *, ObjectUserData); UT_GenStub_AddParam(EdsLib_Binding_InitDescriptor, const EdsLib_DatabaseObject_t *, EdsDB); @@ -148,8 +150,9 @@ void EdsLib_Binding_InitDescriptor(EdsLib_Binding_DescriptorObject_t *ObjectUser * Generated stub function for EdsLib_Binding_InitFromPackedBuffer() * ---------------------------------------------------- */ -int32_t EdsLib_Binding_InitFromPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, const void *PackedData, - size_t PackedDataSize) +int32_t EdsLib_Binding_InitFromPackedBuffer(EdsLib_Binding_DescriptorObject_t *ObjectUserData, + const void *PackedData, + size_t PackedDataSize) { UT_GenStub_SetupReturnBuffer(EdsLib_Binding_InitFromPackedBuffer, int32_t); @@ -195,8 +198,8 @@ void EdsLib_Binding_InitSubObject(EdsLib_Binding_DescriptorObject_t *SubOb * Generated stub function for EdsLib_Binding_InitUnmanagedBuffer() * ---------------------------------------------------- */ -EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Binding_Buffer_Content_t *ContentPtr, - void *DataPtr, size_t MaxContentSize) +EdsLib_Binding_Buffer_Content_t * +EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Binding_Buffer_Content_t *ContentPtr, void *DataPtr, size_t MaxContentSize) { UT_GenStub_SetupReturnBuffer(EdsLib_Binding_InitUnmanagedBuffer, EdsLib_Binding_Buffer_Content_t *); @@ -216,7 +219,6 @@ EdsLib_Binding_Buffer_Content_t *EdsLib_Binding_InitUnmanagedBuffer(EdsLib_Bindi */ void EdsLib_Binding_Initialize(void) { - UT_GenStub_Execute(EdsLib_Binding_Initialize, Basic, NULL); } diff --git a/edslib/fsw/ut-stubs/edslib_datatypedb_stubs.c b/edslib/fsw/ut-stubs/edslib_datatypedb_stubs.c index 656afd8..6e43381 100644 --- a/edslib/fsw/ut-stubs/edslib_datatypedb_stubs.c +++ b/edslib/fsw/ut-stubs/edslib_datatypedb_stubs.c @@ -63,8 +63,11 @@ int32_t EdsLib_DataTypeDB_BaseCheck(const EdsLib_DatabaseObject_t *GD, EdsLib_Id * Generated stub function for EdsLib_DataTypeDB_ConstraintIterator() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t BaseId, - EdsLib_Id_t DerivedId, EdsLib_ConstraintCallback_t Callback, void *CbArg) +int32_t EdsLib_DataTypeDB_ConstraintIterator(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t BaseId, + EdsLib_Id_t DerivedId, + EdsLib_ConstraintCallback_t Callback, + void *CbArg) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_ConstraintIterator, int32_t); @@ -102,9 +105,11 @@ int32_t EdsLib_DataTypeDB_FinalizePackedObject(const EdsLib_DatabaseObject_t *GD * Generated stub function for EdsLib_DataTypeDB_FinalizePackedObjectVarSize() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_FinalizePackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - const void *NativeBuffer, void *PackedBuffer, - const EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_FinalizePackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *NativeBuffer, + void *PackedBuffer, + const EdsLib_SizeInfo_t *ProcessedSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_FinalizePackedObjectVarSize, int32_t); @@ -140,8 +145,10 @@ uint16_t EdsLib_DataTypeDB_GetAppIdx(const EdsLib_DataTypeDB_t AppDict) * Generated stub function for EdsLib_DataTypeDB_GetConstraintEntity() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - uint16_t ConstraintIdx, EdsLib_DataTypeDB_EntityInfo_t *MemberInfo) +int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t ConstraintIdx, + EdsLib_DataTypeDB_EntityInfo_t *MemberInfo) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_GetConstraintEntity, int32_t); @@ -160,7 +167,8 @@ int32_t EdsLib_DataTypeDB_GetConstraintEntity(const EdsLib_DatabaseObject_t *GD, * Generated stub function for EdsLib_DataTypeDB_GetDerivedInfo() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, +int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, EdsLib_DataTypeDB_DerivedTypeInfo_t *DerivInfo) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_GetDerivedInfo, int32_t); @@ -179,8 +187,10 @@ int32_t EdsLib_DataTypeDB_GetDerivedInfo(const EdsLib_DatabaseObject_t *GD, EdsL * Generated stub function for EdsLib_DataTypeDB_GetDerivedTypeById() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t DerivId, - EdsLib_Id_t *DerivedEdsId) +int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t DerivId, + EdsLib_Id_t *DerivedEdsId) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_GetDerivedTypeById, int32_t); @@ -199,7 +209,9 @@ int32_t EdsLib_DataTypeDB_GetDerivedTypeById(const EdsLib_DatabaseObject_t *GD, * Generated stub function for EdsLib_DataTypeDB_GetMemberByIndex() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t SubIndex, +int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t SubIndex, EdsLib_DataTypeDB_EntityInfo_t *MemberInfo) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_GetMemberByIndex, int32_t); @@ -219,8 +231,10 @@ int32_t EdsLib_DataTypeDB_GetMemberByIndex(const EdsLib_DatabaseObject_t *GD, Ed * Generated stub function for EdsLib_DataTypeDB_GetMemberByNativeOffset() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - uint32_t ByteOffset, EdsLib_DataTypeDB_EntityInfo_t *MemberInfo) +int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint32_t ByteOffset, + EdsLib_DataTypeDB_EntityInfo_t *MemberInfo) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_GetMemberByNativeOffset, int32_t); @@ -239,8 +253,9 @@ int32_t EdsLib_DataTypeDB_GetMemberByNativeOffset(const EdsLib_DatabaseObject_t * Generated stub function for EdsLib_DataTypeDB_GetTypeInfo() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - EdsLib_DataTypeDB_TypeInfo_t *TypeInfo) +int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_DataTypeDB_TypeInfo_t *TypeInfo) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_GetTypeInfo, int32_t); @@ -258,7 +273,8 @@ int32_t EdsLib_DataTypeDB_GetTypeInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_ * Generated stub function for EdsLib_DataTypeDB_IdentifyBuffer() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, +int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, const void *MessageBuffer, EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo) { @@ -279,8 +295,10 @@ int32_t EdsLib_DataTypeDB_IdentifyBuffer(const EdsLib_DatabaseObject_t *GD, EdsL * Generated stub function for EdsLib_DataTypeDB_IdentifyBufferWithSize() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - const void *BufferPtr, size_t BufferSize, +int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const void *BufferPtr, + size_t BufferSize, EdsLib_DataTypeDB_DerivativeObjectInfo_t *DerivObjInfo) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_IdentifyBufferWithSize, int32_t); @@ -289,7 +307,8 @@ int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t * UT_GenStub_AddParam(EdsLib_DataTypeDB_IdentifyBufferWithSize, EdsLib_Id_t, EdsId); UT_GenStub_AddParam(EdsLib_DataTypeDB_IdentifyBufferWithSize, const void *, BufferPtr); UT_GenStub_AddParam(EdsLib_DataTypeDB_IdentifyBufferWithSize, size_t, BufferSize); - UT_GenStub_AddParam(EdsLib_DataTypeDB_IdentifyBufferWithSize, EdsLib_DataTypeDB_DerivativeObjectInfo_t *, + UT_GenStub_AddParam(EdsLib_DataTypeDB_IdentifyBufferWithSize, + EdsLib_DataTypeDB_DerivativeObjectInfo_t *, DerivObjInfo); UT_GenStub_Execute(EdsLib_DataTypeDB_IdentifyBufferWithSize, Basic, NULL); @@ -304,7 +323,6 @@ int32_t EdsLib_DataTypeDB_IdentifyBufferWithSize(const EdsLib_DatabaseObject_t * */ void EdsLib_DataTypeDB_Initialize(void) { - UT_GenStub_Execute(EdsLib_DataTypeDB_Initialize, Basic, NULL); } @@ -313,8 +331,8 @@ void EdsLib_DataTypeDB_Initialize(void) * Generated stub function for EdsLib_DataTypeDB_InitializeNativeObject() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - void *UnpackedObj) +int32_t +EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *UnpackedObj) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_InitializeNativeObject, int32_t); @@ -332,8 +350,10 @@ int32_t EdsLib_DataTypeDB_InitializeNativeObject(const EdsLib_DatabaseObject_t * * Generated stub function for EdsLib_DataTypeDB_LoadValue() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - EdsLib_GenericValueBuffer_t *DestBuffer, const void *SrcPtr) +int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_GenericValueBuffer_t *DestBuffer, + const void *SrcPtr) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_LoadValue, int32_t); @@ -352,9 +372,12 @@ int32_t EdsLib_DataTypeDB_LoadValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id * Generated stub function for EdsLib_DataTypeDB_PackCompleteObject() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, void *DestBuffer, - const void *SourceBuffer, uint32_t MaxPackedBitSize, - uint32_t SourceByteSize) +int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxPackedBitSize, + uint32_t SourceByteSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_PackCompleteObject, int32_t); @@ -375,9 +398,11 @@ int32_t EdsLib_DataTypeDB_PackCompleteObject(const EdsLib_DatabaseObject_t *GD, * Generated stub function for EdsLib_DataTypeDB_PackCompleteObjectVarSize() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, - EdsLib_SizeInfo_t *PackedSize) +int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + EdsLib_SizeInfo_t *PackedSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_PackCompleteObjectVarSize, int32_t); @@ -397,9 +422,13 @@ int32_t EdsLib_DataTypeDB_PackCompleteObjectVarSize(const EdsLib_DatabaseObject_ * Generated stub function for EdsLib_DataTypeDB_PackPartialObject() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, void *DestBuffer, - const void *SourceBuffer, uint32_t MaxPackedBitSize, - uint32_t SourceByteSize, uint32_t StartingBit) +int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxPackedBitSize, + uint32_t SourceByteSize, + uint32_t StartingBit) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_PackPartialObject, int32_t); @@ -421,9 +450,12 @@ int32_t EdsLib_DataTypeDB_PackPartialObject(const EdsLib_DatabaseObject_t *GD, E * Generated stub function for EdsLib_DataTypeDB_PackPartialObjectVarSize() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, - const EdsLib_SizeInfo_t *MaxSize, EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_PackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + const EdsLib_SizeInfo_t *MaxSize, + EdsLib_SizeInfo_t *ProcessedSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_PackPartialObjectVarSize, int32_t); @@ -461,8 +493,10 @@ int32_t EdsLib_DataTypeDB_Register(EdsLib_DatabaseObject_t *GD, EdsLib_DataTypeD * Generated stub function for EdsLib_DataTypeDB_StoreValue() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, - EdsLib_GenericValueBuffer_t *SrcBuffer) +int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *DestPtr, + EdsLib_GenericValueBuffer_t *SrcBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_StoreValue, int32_t); @@ -481,9 +515,12 @@ int32_t EdsLib_DataTypeDB_StoreValue(const EdsLib_DatabaseObject_t *GD, EdsLib_I * Generated stub function for EdsLib_DataTypeDB_UnpackCompleteObject() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, void *DestBuffer, - const void *SourceBuffer, uint32_t MaxNativeByteSize, - uint32_t SourceBitSize) +int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxNativeByteSize, + uint32_t SourceBitSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_UnpackCompleteObject, int32_t); @@ -504,9 +541,13 @@ int32_t EdsLib_DataTypeDB_UnpackCompleteObject(const EdsLib_DatabaseObject_t *GD * Generated stub function for EdsLib_DataTypeDB_UnpackPartialObject() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, void *DestBuffer, - const void *SourceBuffer, uint32_t MaxNativeByteSize, - uint32_t SourceBitSize, uint32_t StartingByte) +int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + uint32_t MaxNativeByteSize, + uint32_t SourceBitSize, + uint32_t StartingByte) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_UnpackPartialObject, int32_t); @@ -528,9 +569,12 @@ int32_t EdsLib_DataTypeDB_UnpackPartialObject(const EdsLib_DatabaseObject_t *GD, * Generated stub function for EdsLib_DataTypeDB_UnpackPartialObjectVarSize() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t *EdsId, - void *DestBuffer, const void *SourceBuffer, - const EdsLib_SizeInfo_t *MaxSize, EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_UnpackPartialObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t *EdsId, + void *DestBuffer, + const void *SourceBuffer, + const EdsLib_SizeInfo_t *MaxSize, + EdsLib_SizeInfo_t *ProcessedSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_UnpackPartialObjectVarSize, int32_t); @@ -568,8 +612,11 @@ int32_t EdsLib_DataTypeDB_Unregister(EdsLib_DatabaseObject_t *GD, uint16_t AppId * Generated stub function for EdsLib_DataTypeDB_VerifyUnpackedObject() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *UnpackedObj, - const void *PackedObj, uint32_t RecomputeFields) +int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *UnpackedObj, + const void *PackedObj, + uint32_t RecomputeFields) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_VerifyUnpackedObject, int32_t); @@ -589,9 +636,12 @@ int32_t EdsLib_DataTypeDB_VerifyUnpackedObject(const EdsLib_DatabaseObject_t *GD * Generated stub function for EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize() * ---------------------------------------------------- */ -int32_t EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - void *NativeBuffer, const void *PackedBuffer, - uint32_t RecomputeFields, const EdsLib_SizeInfo_t *ProcessedSize) +int32_t EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + void *NativeBuffer, + const void *PackedBuffer, + uint32_t RecomputeFields, + const EdsLib_SizeInfo_t *ProcessedSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DataTypeDB_VerifyUnpackedObjectVarSize, int32_t); diff --git a/edslib/fsw/ut-stubs/edslib_displaydb_stubs.c b/edslib/fsw/ut-stubs/edslib_displaydb_stubs.c index 4b7315d..f7da423 100644 --- a/edslib/fsw/ut-stubs/edslib_displaydb_stubs.c +++ b/edslib/fsw/ut-stubs/edslib_displaydb_stubs.c @@ -113,7 +113,8 @@ const char *EdsLib_DisplayDB_GetEdsName(const EdsLib_DatabaseObject_t *GD, uint1 * Generated stub function for EdsLib_DisplayDB_GetEnumLabel() * ---------------------------------------------------- */ -const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, +const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, const EdsLib_GenericValueBuffer_t *ValueBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_DisplayDB_GetEnumLabel, const char *); @@ -132,8 +133,11 @@ const char *EdsLib_DisplayDB_GetEnumLabel(const EdsLib_DatabaseObject_t *GD, Eds * Generated stub function for EdsLib_DisplayDB_GetEnumLabelByIndex() * ---------------------------------------------------- */ -const char *EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, uint16_t Index, - char *Buffer, uint32_t BufferSize) +const char *EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + uint16_t Index, + char *Buffer, + uint32_t BufferSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DisplayDB_GetEnumLabelByIndex, const char *); @@ -153,8 +157,10 @@ const char *EdsLib_DisplayDB_GetEnumLabelByIndex(const EdsLib_DatabaseObject_t * * Generated stub function for EdsLib_DisplayDB_GetEnumValue() * ---------------------------------------------------- */ -void EdsLib_DisplayDB_GetEnumValue(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *String, - EdsLib_GenericValueBuffer_t *ValueBuffer) +void EdsLib_DisplayDB_GetEnumValue(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *String, + EdsLib_GenericValueBuffer_t *ValueBuffer) { UT_GenStub_AddParam(EdsLib_DisplayDB_GetEnumValue, const EdsLib_DatabaseObject_t *, GD); UT_GenStub_AddParam(EdsLib_DisplayDB_GetEnumValue, EdsLib_Id_t, EdsId); @@ -187,8 +193,10 @@ intmax_t EdsLib_DisplayDB_GetEnumValueByIndex(const EdsLib_DatabaseObject_t *GD, * Generated stub function for EdsLib_DisplayDB_GetIndexByName() * ---------------------------------------------------- */ -int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *Name, - uint16_t *SubIndex) +int32_t EdsLib_DisplayDB_GetIndexByName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *Name, + uint16_t *SubIndex) { UT_GenStub_SetupReturnBuffer(EdsLib_DisplayDB_GetIndexByName, int32_t); @@ -242,8 +250,8 @@ const char *EdsLib_DisplayDB_GetNamespace(const EdsLib_DatabaseObject_t *GD, Eds * Generated stub function for EdsLib_DisplayDB_GetTypeName() * ---------------------------------------------------- */ -const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *Buffer, - uint32_t BufferSize) +const char * +EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *Buffer, uint32_t BufferSize) { UT_GenStub_SetupReturnBuffer(EdsLib_DisplayDB_GetTypeName, const char *); @@ -264,7 +272,6 @@ const char *EdsLib_DisplayDB_GetTypeName(const EdsLib_DatabaseObject_t *GD, EdsL */ void EdsLib_DisplayDB_Initialize(void) { - UT_GenStub_Execute(EdsLib_DisplayDB_Initialize, Basic, NULL); } @@ -273,8 +280,10 @@ void EdsLib_DisplayDB_Initialize(void) * Generated stub function for EdsLib_DisplayDB_IterateAllEntities() * ---------------------------------------------------- */ -void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - EdsLib_EntityCallback_t Callback, void *Arg) +void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_EntityCallback_t Callback, + void *Arg) { UT_GenStub_AddParam(EdsLib_DisplayDB_IterateAllEntities, const EdsLib_DatabaseObject_t *, GD); UT_GenStub_AddParam(EdsLib_DisplayDB_IterateAllEntities, EdsLib_Id_t, EdsId); @@ -289,8 +298,10 @@ void EdsLib_DisplayDB_IterateAllEntities(const EdsLib_DatabaseObject_t *GD, EdsL * Generated stub function for EdsLib_DisplayDB_IterateBaseEntities() * ---------------------------------------------------- */ -void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - EdsLib_EntityCallback_t Callback, void *Arg) +void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_EntityCallback_t Callback, + void *Arg) { UT_GenStub_AddParam(EdsLib_DisplayDB_IterateBaseEntities, const EdsLib_DatabaseObject_t *, GD); UT_GenStub_AddParam(EdsLib_DisplayDB_IterateBaseEntities, EdsLib_Id_t, EdsId); @@ -305,8 +316,10 @@ void EdsLib_DisplayDB_IterateBaseEntities(const EdsLib_DatabaseObject_t *GD, Eds * Generated stub function for EdsLib_DisplayDB_IterateEnumValues() * ---------------------------------------------------- */ -void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, - EdsLib_SymbolCallback_t Callback, void *Arg) +void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + EdsLib_SymbolCallback_t Callback, + void *Arg) { UT_GenStub_AddParam(EdsLib_DisplayDB_IterateEnumValues, const EdsLib_DatabaseObject_t *, GD); UT_GenStub_AddParam(EdsLib_DisplayDB_IterateEnumValues, EdsLib_Id_t, EdsId); @@ -321,7 +334,9 @@ void EdsLib_DisplayDB_IterateEnumValues(const EdsLib_DatabaseObject_t *GD, EdsLi * Generated stub function for EdsLib_DisplayDB_LocateSubEntity() * ---------------------------------------------------- */ -int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, const char *Name, +int32_t EdsLib_DisplayDB_LocateSubEntity(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + const char *Name, EdsLib_DataTypeDB_EntityInfo_t *CompInfo) { UT_GenStub_SetupReturnBuffer(EdsLib_DisplayDB_LocateSubEntity, int32_t); @@ -373,8 +388,8 @@ void EdsLib_Generate_Hexdump(void *output, const uint8_t *DataPtr, uint16_t Disp * Generated stub function for EdsLib_Scalar_FromString() * ---------------------------------------------------- */ -int32_t EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, - const char *SrcString) +int32_t +EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, void *DestPtr, const char *SrcString) { UT_GenStub_SetupReturnBuffer(EdsLib_Scalar_FromString, int32_t); @@ -393,8 +408,11 @@ int32_t EdsLib_Scalar_FromString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t * Generated stub function for EdsLib_Scalar_ToString() * ---------------------------------------------------- */ -int32_t EdsLib_Scalar_ToString(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *OutputBuffer, - uint32_t BufferSize, const void *SrcPtr) +int32_t EdsLib_Scalar_ToString(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t EdsId, + char *OutputBuffer, + uint32_t BufferSize, + const void *SrcPtr) { UT_GenStub_SetupReturnBuffer(EdsLib_Scalar_ToString, int32_t); diff --git a/edslib/fsw/ut-stubs/edslib_global_stubs.c b/edslib/fsw/ut-stubs/edslib_global_stubs.c index 5079996..ee8976d 100644 --- a/edslib/fsw/ut-stubs/edslib_global_stubs.c +++ b/edslib/fsw/ut-stubs/edslib_global_stubs.c @@ -50,8 +50,10 @@ int32_t EdsLib_FindPackageIdxByName(const EdsLib_DatabaseObject_t *GD, const cha * Generated stub function for EdsLib_FindPackageIdxBySubstring() * ---------------------------------------------------- */ -int32_t EdsLib_FindPackageIdxBySubstring(const EdsLib_DatabaseObject_t *GD, const char *MatchString, size_t MatchLen, - uint8_t *IdxOut) +int32_t EdsLib_FindPackageIdxBySubstring(const EdsLib_DatabaseObject_t *GD, + const char *MatchString, + size_t MatchLen, + uint8_t *IdxOut) { UT_GenStub_SetupReturnBuffer(EdsLib_FindPackageIdxBySubstring, int32_t); diff --git a/edslib/fsw/ut-stubs/edslib_init_stubs.c b/edslib/fsw/ut-stubs/edslib_init_stubs.c index b72726b..f87c771 100644 --- a/edslib/fsw/ut-stubs/edslib_init_stubs.c +++ b/edslib/fsw/ut-stubs/edslib_init_stubs.c @@ -34,6 +34,5 @@ */ void EdsLib_Initialize(void) { - UT_GenStub_Execute(EdsLib_Initialize, Basic, NULL); } diff --git a/edslib/fsw/ut-stubs/edslib_intfdb_stubs.c b/edslib/fsw/ut-stubs/edslib_intfdb_stubs.c index d64adf3..a79881d 100644 --- a/edslib/fsw/ut-stubs/edslib_intfdb_stubs.c +++ b/edslib/fsw/ut-stubs/edslib_intfdb_stubs.c @@ -32,8 +32,11 @@ * Generated stub function for EdsLib_IntfDB_FindAllArgumentTypes() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t CmdEdsId, - EdsLib_Id_t CompIntfEdsId, EdsLib_Id_t *IdBuffer, size_t NumIdBufs) +int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t CmdEdsId, + EdsLib_Id_t CompIntfEdsId, + EdsLib_Id_t *IdBuffer, + size_t NumIdBufs) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindAllArgumentTypes, int32_t); @@ -53,8 +56,10 @@ int32_t EdsLib_IntfDB_FindAllArgumentTypes(const EdsLib_DatabaseObject_t *GD, Ed * Generated stub function for EdsLib_IntfDB_FindAllCommands() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, EdsLib_Id_t *IdBuffer, - size_t NumIdBufs) +int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, + EdsLib_Id_t *IdBuffer, + size_t NumIdBufs) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindAllCommands, int32_t); @@ -73,8 +78,10 @@ int32_t EdsLib_IntfDB_FindAllCommands(const EdsLib_DatabaseObject_t *GD, EdsLib_ * Generated stub function for EdsLib_IntfDB_FindCommandByLocalName() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, const char *CmdName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, + const char *CmdName, + EdsLib_Id_t *IdBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindCommandByLocalName, int32_t); @@ -93,8 +100,10 @@ int32_t EdsLib_IntfDB_FindCommandByLocalName(const EdsLib_DatabaseObject_t *GD, * Generated stub function for EdsLib_IntfDB_FindComponentByLocalName() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx, const char *CompName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD, + uint16_t AppIdx, + const char *CompName, + EdsLib_Id_t *IdBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindComponentByLocalName, int32_t); @@ -113,8 +122,9 @@ int32_t EdsLib_IntfDB_FindComponentByLocalName(const EdsLib_DatabaseObject_t *GD * Generated stub function for EdsLib_IntfDB_FindComponentInterfaceByFullName() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindComponentInterfaceByFullName, int32_t); @@ -132,8 +142,10 @@ int32_t EdsLib_IntfDB_FindComponentInterfaceByFullName(const EdsLib_DatabaseObje * Generated stub function for EdsLib_IntfDB_FindComponentInterfaceByLocalName() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t ComponentId, - const char *IntfName, EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t ComponentId, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindComponentInterfaceByLocalName, int32_t); @@ -152,8 +164,9 @@ int32_t EdsLib_IntfDB_FindComponentInterfaceByLocalName(const EdsLib_DatabaseObj * Generated stub function for EdsLib_IntfDB_FindDeclaredInterfaceByFullName() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, const char *IntfName, - EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObject_t *GD, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindDeclaredInterfaceByFullName, int32_t); @@ -171,8 +184,10 @@ int32_t EdsLib_IntfDB_FindDeclaredInterfaceByFullName(const EdsLib_DatabaseObjec * Generated stub function for EdsLib_IntfDB_FindDeclaredInterfaceByLocalName() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, uint16_t AppIdx, - const char *IntfName, EdsLib_Id_t *IdBuffer) +int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObject_t *GD, + uint16_t AppIdx, + const char *IntfName, + EdsLib_Id_t *IdBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_FindDeclaredInterfaceByLocalName, int32_t); @@ -191,8 +206,9 @@ int32_t EdsLib_IntfDB_FindDeclaredInterfaceByLocalName(const EdsLib_DatabaseObje * Generated stub function for EdsLib_IntfDB_GetCommandInfo() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t CommandId, - EdsLib_IntfDB_CommandInfo_t *CommandInfoBuffer) +int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t CommandId, + EdsLib_IntfDB_CommandInfo_t *CommandInfoBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_GetCommandInfo, int32_t); @@ -210,7 +226,8 @@ int32_t EdsLib_IntfDB_GetCommandInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_I * Generated stub function for EdsLib_IntfDB_GetComponentInfo() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t ComponentId, +int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t ComponentId, EdsLib_IntfDB_ComponentInfo_t *CompInfoBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_GetComponentInfo, int32_t); @@ -229,7 +246,8 @@ int32_t EdsLib_IntfDB_GetComponentInfo(const EdsLib_DatabaseObject_t *GD, EdsLib * Generated stub function for EdsLib_IntfDB_GetComponentInterfaceInfo() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t IntfId, +int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *GD, + EdsLib_Id_t IntfId, EdsLib_IntfDB_InterfaceInfo_t *IntfInfoBuffer) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_GetComponentInterfaceInfo, int32_t); @@ -248,8 +266,8 @@ int32_t EdsLib_IntfDB_GetComponentInterfaceInfo(const EdsLib_DatabaseObject_t *G * Generated stub function for EdsLib_IntfDB_GetFullName() * ---------------------------------------------------- */ -int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *BufferPtr, - size_t BufferLen) +int32_t +EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t EdsId, char *BufferPtr, size_t BufferLen) { UT_GenStub_SetupReturnBuffer(EdsLib_IntfDB_GetFullName, int32_t); @@ -270,6 +288,5 @@ int32_t EdsLib_IntfDB_GetFullName(const EdsLib_DatabaseObject_t *GD, EdsLib_Id_t */ void EdsLib_IntfDB_Initialize(void) { - UT_GenStub_Execute(EdsLib_IntfDB_Initialize, Basic, NULL); } diff --git a/edslib/json/inc/edslib_json_objects.h b/edslib/json/inc/edslib_json_objects.h index e6bcd84..9948d02 100644 --- a/edslib/json/inc/edslib_json_objects.h +++ b/edslib/json/inc/edslib_json_objects.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_json_objects.h * \ingroup json @@ -32,26 +31,24 @@ #include - #ifdef __cplusplus extern "C" { #endif -/* - * decouple from json-c headers; - * json_object will be an abstract struct - */ -typedef struct json_object EdsLib_JsonBinding_Object_t; -typedef struct EdsLib_Binding_DescriptorObject EdsLib_JsonBinding_DescriptorObject_t; + /* + * decouple from json-c headers; + * json_object will be an abstract struct + */ + typedef struct json_object EdsLib_JsonBinding_Object_t; + typedef struct EdsLib_Binding_DescriptorObject EdsLib_JsonBinding_DescriptorObject_t; -void EdsLib_JSON_EdsObjectFromJSON(EdsLib_JsonBinding_DescriptorObject_t *DstObject, EdsLib_JsonBinding_Object_t *SrcObject); -EdsLib_JsonBinding_Object_t *EdsLib_JSON_EdsObjectToJSON(const EdsLib_JsonBinding_DescriptorObject_t *SrcObject); + void EdsLib_JSON_EdsObjectFromJSON(EdsLib_JsonBinding_DescriptorObject_t *DstObject, + EdsLib_JsonBinding_Object_t *SrcObject); + EdsLib_JsonBinding_Object_t *EdsLib_JSON_EdsObjectToJSON(const EdsLib_JsonBinding_DescriptorObject_t *SrcObject); #ifdef __cplusplus -} /* extern "C" */ +} /* extern "C" */ #endif - -#endif /* _EDSLIB_JSON_OBJECTS_H_ */ - +#endif /* _EDSLIB_JSON_OBJECTS_H_ */ diff --git a/edslib/json/src/edslib_json_objects.c b/edslib/json/src/edslib_json_objects.c index 048dc34..ef3442d 100644 --- a/edslib/json/src/edslib_json_objects.c +++ b/edslib/json/src/edslib_json_objects.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_json_objects.c * \ingroup json @@ -41,14 +40,14 @@ typedef struct { const EdsLib_Binding_DescriptorObject_t *ParentObj; - struct json_object *JsonObject; + struct json_object *JsonObject; } EdsLib_JsonBinding_ObjectConversion_t; static void EdsLib_JSON_SetJSONObject_Callback(void *Arg, const EdsLib_EntityDescriptor_t *Param) { EdsLib_JsonBinding_ObjectConversion_t *State = Arg; - EdsLib_JsonBinding_DescriptorObject_t SubDesc; - struct json_object *ThisElement; + EdsLib_JsonBinding_DescriptorObject_t SubDesc; + struct json_object *ThisElement; EdsLib_Binding_InitSubObject(&SubDesc, State->ParentObj, &Param->EntityInfo); @@ -84,13 +83,10 @@ static void EdsLib_JSON_SetJSONObject_Callback(void *Arg, const EdsLib_EntityDes } } -static int EdsLib_JSON_Double2Str(struct json_object *jso, - struct printbuf *pb, - int level, - int flags) +static int EdsLib_JSON_Double2Str(struct json_object *jso, struct printbuf *pb, int level, int flags) { - char buf[32]; - int size; + char buf[32]; + int size; double value = json_object_get_double(jso); if (value == value) @@ -116,110 +112,116 @@ EdsLib_JsonBinding_Object_t *EdsLib_JSON_EdsObjectToJSON(const EdsLib_JsonBindin ThisElement = NULL; - switch(SrcObject->TypeInfo.ElemType) - { - case EDSLIB_BASICTYPE_SIGNED_INT: - case EDSLIB_BASICTYPE_UNSIGNED_INT: - case EDSLIB_BASICTYPE_FLOAT: + switch (SrcObject->TypeInfo.ElemType) { - EdsLib_GenericValueBuffer_t ValueBuffer; - const char *SymName; + case EDSLIB_BASICTYPE_SIGNED_INT: + case EDSLIB_BASICTYPE_UNSIGNED_INT: + case EDSLIB_BASICTYPE_FLOAT: + { + EdsLib_GenericValueBuffer_t ValueBuffer; + const char *SymName; - EdsLib_Binding_LoadValue(SrcObject, &ValueBuffer); + EdsLib_Binding_LoadValue(SrcObject, &ValueBuffer); - /* - * note JSON-C does not have a separate unsigned object type, - * so convert to a signed type. Internally this uses a wide type (64 bits) - * so it is generally OK but will truncate values that are greater than 2^63. - * - * This is a limitation of JSON really, so it is what it is. It is unlikely - * that such large values will need to be represented in JSON, so this will - * probably never be noticed. - */ - if (ValueBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT) - { - ValueBuffer.Value.SignedInteger = ValueBuffer.Value.UnsignedInteger; - ValueBuffer.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; - } + /* + * note JSON-C does not have a separate unsigned object type, + * so convert to a signed type. Internally this uses a wide type (64 bits) + * so it is generally OK but will truncate values that are greater than 2^63. + * + * This is a limitation of JSON really, so it is what it is. It is unlikely + * that such large values will need to be represented in JSON, so this will + * probably never be noticed. + */ + if (ValueBuffer.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT) + { + ValueBuffer.Value.SignedInteger = ValueBuffer.Value.UnsignedInteger; + ValueBuffer.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + } - SymName = EdsLib_DisplayDB_GetEnumLabel(SrcObject->GD, SrcObject->EdsId, &ValueBuffer); - if (SymName != NULL) - { - ThisElement = json_object_new_string(SymName); - } - else if (ValueBuffer.ValueType == EDSLIB_BASICTYPE_FLOAT) - { - ThisElement = json_object_new_double(ValueBuffer.Value.FloatingPoint); - json_object_set_serializer(ThisElement, EdsLib_JSON_Double2Str, NULL, NULL); - } - else if (ValueBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT) - { - if (EdsLib_DisplayDB_GetDisplayHint(SrcObject->GD, SrcObject->EdsId) == EDSLIB_DISPLAYHINT_BOOLEAN) + SymName = EdsLib_DisplayDB_GetEnumLabel(SrcObject->GD, SrcObject->EdsId, &ValueBuffer); + if (SymName != NULL) + { + ThisElement = json_object_new_string(SymName); + } + else if (ValueBuffer.ValueType == EDSLIB_BASICTYPE_FLOAT) { - ThisElement = json_object_new_boolean(ValueBuffer.Value.SignedInteger); + ThisElement = json_object_new_double(ValueBuffer.Value.FloatingPoint); + json_object_set_serializer(ThisElement, EdsLib_JSON_Double2Str, NULL, NULL); } - else + else if (ValueBuffer.ValueType == EDSLIB_BASICTYPE_SIGNED_INT) { - ThisElement = json_object_new_int64(ValueBuffer.Value.SignedInteger); + if (EdsLib_DisplayDB_GetDisplayHint(SrcObject->GD, SrcObject->EdsId) == EDSLIB_DISPLAYHINT_BOOLEAN) + { + ThisElement = json_object_new_boolean(ValueBuffer.Value.SignedInteger); + } + else + { + ThisElement = json_object_new_int64(ValueBuffer.Value.SignedInteger); + } } + break; } - break; - } - case EDSLIB_BASICTYPE_BINARY: - { - /* - * JSON objects cannot contain binary data directly; - * Use the EdsLib scalar conversion to export the data in a safe form. - * - * allocate a temporary buffer with 1 byte per 6 bits of actual binary data, - * to cover the case where the data is base64 encoded. - * - * Include a few bytes of extra space in the buffer for e.g. termination. - */ - uint32_t MaxSize = 4 + ((SrcObject->TypeInfo.Size.Bits + 5) / 6); - char* Buffer = malloc(MaxSize); - - if (Buffer != NULL) + case EDSLIB_BASICTYPE_BINARY: { - if (EdsLib_Scalar_ToString(SrcObject->GD, SrcObject->EdsId, Buffer, MaxSize, - EdsLib_Binding_GetNativeObject(SrcObject)) == EDSLIB_SUCCESS) + /* + * JSON objects cannot contain binary data directly; + * Use the EdsLib scalar conversion to export the data in a safe form. + * + * allocate a temporary buffer with 1 byte per 6 bits of actual binary data, + * to cover the case where the data is base64 encoded. + * + * Include a few bytes of extra space in the buffer for e.g. termination. + */ + uint32_t MaxSize = 4 + ((SrcObject->TypeInfo.Size.Bits + 5) / 6); + char *Buffer = malloc(MaxSize); + + if (Buffer != NULL) { - ThisElement = json_object_new_string(Buffer); + if (EdsLib_Scalar_ToString(SrcObject->GD, + SrcObject->EdsId, + Buffer, + MaxSize, + EdsLib_Binding_GetNativeObject(SrcObject)) + == EDSLIB_SUCCESS) + { + ThisElement = json_object_new_string(Buffer); + } + free(Buffer); } - free(Buffer); + break; } - break; - } - case EDSLIB_BASICTYPE_ARRAY: - { - uint16_t Idx; - EdsLib_DataTypeDB_EntityInfo_t CompInfo; - EdsLib_JsonBinding_DescriptorObject_t SubDesc; - - ThisElement = json_object_new_array(); - for (Idx=0; Idx < SrcObject->TypeInfo.NumSubElements; ++Idx) + case EDSLIB_BASICTYPE_ARRAY: { - EdsLib_DataTypeDB_GetMemberByIndex(SrcObject->GD, SrcObject->EdsId, Idx, &CompInfo); - EdsLib_Binding_InitSubObject(&SubDesc, SrcObject, &CompInfo); - json_object_array_put_idx(ThisElement, Idx, EdsLib_JSON_EdsObjectToJSON(&SubDesc)); + uint16_t Idx; + EdsLib_DataTypeDB_EntityInfo_t CompInfo; + EdsLib_JsonBinding_DescriptorObject_t SubDesc; + + ThisElement = json_object_new_array(); + for (Idx = 0; Idx < SrcObject->TypeInfo.NumSubElements; ++Idx) + { + EdsLib_DataTypeDB_GetMemberByIndex(SrcObject->GD, SrcObject->EdsId, Idx, &CompInfo); + EdsLib_Binding_InitSubObject(&SubDesc, SrcObject, &CompInfo); + json_object_array_put_idx(ThisElement, Idx, EdsLib_JSON_EdsObjectToJSON(&SubDesc)); + } + break; } - break; - } - case EDSLIB_BASICTYPE_CONTAINER: - case EDSLIB_BASICTYPE_COMPONENT: - { - EdsLib_JsonBinding_ObjectConversion_t SubObject; + case EDSLIB_BASICTYPE_CONTAINER: + case EDSLIB_BASICTYPE_COMPONENT: + { + EdsLib_JsonBinding_ObjectConversion_t SubObject; - SubObject.ParentObj = SrcObject; - SubObject.JsonObject = json_object_new_object(); - EdsLib_DisplayDB_IterateBaseEntities(SrcObject->GD, SrcObject->EdsId, - EdsLib_JSON_SetJSONObject_Callback, &SubObject); + SubObject.ParentObj = SrcObject; + SubObject.JsonObject = json_object_new_object(); + EdsLib_DisplayDB_IterateBaseEntities(SrcObject->GD, + SrcObject->EdsId, + EdsLib_JSON_SetJSONObject_Callback, + &SubObject); - ThisElement = SubObject.JsonObject; - break; - } - default: - break; + ThisElement = SubObject.JsonObject; + break; + } + default: + break; } return ThisElement; @@ -228,18 +230,18 @@ EdsLib_JsonBinding_Object_t *EdsLib_JSON_EdsObjectToJSON(const EdsLib_JsonBindin static void EdsLib_JSON_SetEDSObject_Callback(void *Arg, const EdsLib_EntityDescriptor_t *Param) { EdsLib_JsonBinding_ObjectConversion_t *State = Arg; - EdsLib_JsonBinding_DescriptorObject_t SubDesc; - struct json_object *SubObj; + EdsLib_JsonBinding_DescriptorObject_t SubDesc; + struct json_object *SubObj; - if (json_object_object_get_ex(State->JsonObject, Param->FullName, &SubObj) && - SubObj != NULL) + if (json_object_object_get_ex(State->JsonObject, Param->FullName, &SubObj) && SubObj != NULL) { EdsLib_Binding_InitSubObject(&SubDesc, State->ParentObj, &Param->EntityInfo); EdsLib_JSON_EdsObjectFromJSON(&SubDesc, SubObj); } } -void EdsLib_JSON_EdsObjectFromJSON(EdsLib_JsonBinding_DescriptorObject_t *DstObject, EdsLib_JsonBinding_Object_t *SrcObject) +void EdsLib_JSON_EdsObjectFromJSON(EdsLib_JsonBinding_DescriptorObject_t *DstObject, + EdsLib_JsonBinding_Object_t *SrcObject) { enum json_type SrcType; @@ -256,22 +258,22 @@ void EdsLib_JSON_EdsObjectFromJSON(EdsLib_JsonBinding_DescriptorObject_t *DstObj if (SrcType == json_type_double) { ValueBuffer.Value.FloatingPoint = json_object_get_double(SrcObject); - ValueBuffer.ValueType = EDSLIB_BASICTYPE_FLOAT; + ValueBuffer.ValueType = EDSLIB_BASICTYPE_FLOAT; } else if (SrcType == json_type_int) { ValueBuffer.Value.SignedInteger = json_object_get_int64(SrcObject); - ValueBuffer.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ValueBuffer.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; } else if (SrcType == json_type_boolean) { ValueBuffer.Value.UnsignedInteger = json_object_get_boolean(SrcObject); - ValueBuffer.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ValueBuffer.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; } else { ValueBuffer.Value.UnsignedInteger = 0; - ValueBuffer.ValueType = EDSLIB_BASICTYPE_NONE; + ValueBuffer.ValueType = EDSLIB_BASICTYPE_NONE; } if (ValueBuffer.ValueType != EDSLIB_BASICTYPE_NONE) @@ -284,18 +286,19 @@ void EdsLib_JSON_EdsObjectFromJSON(EdsLib_JsonBinding_DescriptorObject_t *DstObj * If the JSON value is a string, then just use the EdsLib parser to import it. * This should coerce most strings into the correct type, whatever it is. */ - EdsLib_Scalar_FromString(DstObject->GD, DstObject->EdsId, - EdsLib_Binding_GetNativeObject(DstObject), json_object_get_string(SrcObject)); + EdsLib_Scalar_FromString(DstObject->GD, + DstObject->EdsId, + EdsLib_Binding_GetNativeObject(DstObject), + json_object_get_string(SrcObject)); } } - else if (DstObject->TypeInfo.ElemType == EDSLIB_BASICTYPE_ARRAY && - SrcType == json_type_array) + else if (DstObject->TypeInfo.ElemType == EDSLIB_BASICTYPE_ARRAY && SrcType == json_type_array) { - uint16_t Idx; - EdsLib_DataTypeDB_EntityInfo_t CompInfo; + uint16_t Idx; + EdsLib_DataTypeDB_EntityInfo_t CompInfo; EdsLib_JsonBinding_DescriptorObject_t SubDesc; - for (Idx=0; Idx < DstObject->TypeInfo.NumSubElements; ++Idx) + for (Idx = 0; Idx < DstObject->TypeInfo.NumSubElements; ++Idx) { if (EdsLib_DataTypeDB_GetMemberByIndex(DstObject->GD, DstObject->EdsId, Idx, &CompInfo) == EDSLIB_SUCCESS) { @@ -308,11 +311,12 @@ void EdsLib_JSON_EdsObjectFromJSON(EdsLib_JsonBinding_DescriptorObject_t *DstObj { EdsLib_JsonBinding_ObjectConversion_t SubObject; - SubObject.ParentObj = DstObject; + SubObject.ParentObj = DstObject; SubObject.JsonObject = SrcObject; - EdsLib_DisplayDB_IterateBaseEntities(DstObject->GD, DstObject->EdsId, - EdsLib_JSON_SetEDSObject_Callback, &SubObject); + EdsLib_DisplayDB_IterateBaseEntities(DstObject->GD, + DstObject->EdsId, + EdsLib_JSON_SetEDSObject_Callback, + &SubObject); } } - diff --git a/edslib/lua/inc/edslib_lua_objects.h b/edslib/lua/inc/edslib_lua_objects.h index bbe8f88..397c342 100644 --- a/edslib/lua/inc/edslib_lua_objects.h +++ b/edslib/lua/inc/edslib_lua_objects.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_lua_objects.h * \ingroup lua @@ -30,7 +29,6 @@ #ifndef _EDSLIB_LUA_OBJECTS_H_ #define _EDSLIB_LUA_OBJECTS_H_ - #include #include @@ -39,9 +37,9 @@ * These are not distinct types, but intended to be aliases of types defined elsewhere. * They are aliases to avoid creating a dependency on the header file which actually defines them. */ -typedef struct lua_State EdsLib_LuaBinding_State_t; -typedef struct EdsLib_Binding_DescriptorObject EdsLib_LuaBinding_DescriptorObject_t; -typedef struct EdsLib_DatabaseObject EdsLib_LuaBinding_DatabaseObject_t; +typedef struct lua_State EdsLib_LuaBinding_State_t; +typedef struct EdsLib_Binding_DescriptorObject EdsLib_LuaBinding_DescriptorObject_t; +typedef struct EdsLib_DatabaseObject EdsLib_LuaBinding_DatabaseObject_t; typedef struct { @@ -49,9 +47,8 @@ typedef struct } EdsLib_Lua_Database_Userdata_t; void EdsLib_LuaBinding_GetNativeObject(EdsLib_LuaBinding_State_t *lua, int narg, void **OutPtr, size_t *SizeBuf); -EdsLib_LuaBinding_DescriptorObject_t *EdsLib_LuaBinding_CreateEmptyObject(EdsLib_LuaBinding_State_t *lua, size_t MaxSize); +EdsLib_LuaBinding_DescriptorObject_t *EdsLib_LuaBinding_CreateEmptyObject(EdsLib_LuaBinding_State_t *lua, + size_t MaxSize); void EdsLib_Lua_Attach(EdsLib_LuaBinding_State_t *lua, const EdsLib_LuaBinding_DatabaseObject_t *MissionObj); - -#endif /* _EDSLIB_LUA_OBJECTS_H_ */ - +#endif /* _EDSLIB_LUA_OBJECTS_H_ */ diff --git a/edslib/lua/src/edslib_lua_objects.c b/edslib/lua/src/edslib_lua_objects.c index 0be3e92..2cb0ae8 100644 --- a/edslib/lua/src/edslib_lua_objects.c +++ b/edslib/lua/src/edslib_lua_objects.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_lua_objects.c * \ingroup lua @@ -52,7 +51,7 @@ #include "edslib_binding_objects.h" #include "edslib_lua_objects.h" -#define EDSLIB_MAX_BUFFER_SIZE 65528 +#define EDSLIB_MAX_BUFFER_SIZE 65528 static int EdsLib_LuaBinding_DestroyObject(lua_State *lua) { @@ -84,7 +83,10 @@ static EdsLib_Binding_DescriptorObject_t *EdsLib_LuaBinding_NewDescriptor(lua_St return ObjectUserData; } -static EdsLib_Binding_DescriptorObject_t *EdsLib_LuaBinding_NewSubObject(lua_State *lua, const EdsLib_Binding_DescriptorObject_t *ParentObj, const EdsLib_DataTypeDB_EntityInfo_t *Component) +static EdsLib_Binding_DescriptorObject_t * +EdsLib_LuaBinding_NewSubObject(lua_State *lua, + const EdsLib_Binding_DescriptorObject_t *ParentObj, + const EdsLib_DataTypeDB_EntityInfo_t *Component) { EdsLib_Binding_DescriptorObject_t *SubObject = EdsLib_LuaBinding_NewDescriptor(lua); EdsLib_Binding_InitSubObject(SubObject, ParentObj, Component); @@ -94,8 +96,8 @@ static EdsLib_Binding_DescriptorObject_t *EdsLib_LuaBinding_NewSubObject(lua_Sta static int EdsLib_LuaBinding_GetField(lua_State *lua) { EdsLib_Binding_DescriptorObject_t *Object; - EdsLib_DataTypeDB_EntityInfo_t ComponentInfo; - int32_t Status; + EdsLib_DataTypeDB_EntityInfo_t ComponentInfo; + int32_t Status; /* * Expected LUA stack: @@ -109,46 +111,43 @@ static int EdsLib_LuaBinding_GetField(lua_State *lua) switch (Object->TypeInfo.ElemType) { - case EDSLIB_BASICTYPE_CONTAINER: - case EDSLIB_BASICTYPE_COMPONENT: - { - /* For containers, the field should be a name */ - const char *Name = luaL_checkstring(lua, 2); - Status = EdsLib_DisplayDB_LocateSubEntity(Object->GD, - Object->EdsId, - Name, &ComponentInfo); - break; - } - case EDSLIB_BASICTYPE_ARRAY: - { - /* For arrays, the field can be an integer (normal case) - * or an enumeration label if the array was defined using an "indexTypeRef" of an enumeration - */ - uint16_t SubIndex; - - if (lua_type(lua, 2) == LUA_TNUMBER) + case EDSLIB_BASICTYPE_CONTAINER: + case EDSLIB_BASICTYPE_COMPONENT: { - /* In Lua array indices should start at 1, not 0 */ - SubIndex = luaL_checkinteger(lua, 2) - 1; - Status = EDSLIB_SUCCESS; + /* For containers, the field should be a name */ + const char *Name = luaL_checkstring(lua, 2); + Status = EdsLib_DisplayDB_LocateSubEntity(Object->GD, Object->EdsId, Name, &ComponentInfo); + break; } - else + case EDSLIB_BASICTYPE_ARRAY: { - Status = EdsLib_DisplayDB_GetIndexByName(Object->GD, Object->EdsId, lua_tostring(lua, 2), &SubIndex); - } + /* For arrays, the field can be an integer (normal case) + * or an enumeration label if the array was defined using an "indexTypeRef" of an enumeration + */ + uint16_t SubIndex; - if (Status == EDSLIB_SUCCESS) + if (lua_type(lua, 2) == LUA_TNUMBER) + { + /* In Lua array indices should start at 1, not 0 */ + SubIndex = luaL_checkinteger(lua, 2) - 1; + Status = EDSLIB_SUCCESS; + } + else + { + Status = EdsLib_DisplayDB_GetIndexByName(Object->GD, Object->EdsId, lua_tostring(lua, 2), &SubIndex); + } + + if (Status == EDSLIB_SUCCESS) + { + Status = EdsLib_DataTypeDB_GetMemberByIndex(Object->GD, Object->EdsId, SubIndex, &ComponentInfo); + } + break; + } + default: { - Status = EdsLib_DataTypeDB_GetMemberByIndex(Object->GD, Object->EdsId, - SubIndex, &ComponentInfo); + Status = EDSLIB_NAME_NOT_FOUND; + break; } - break; - } - default: - { - Status = EDSLIB_NAME_NOT_FOUND; - break; - } } if (Status != EDSLIB_SUCCESS) @@ -159,13 +158,12 @@ static int EdsLib_LuaBinding_GetField(lua_State *lua) /* Push a temporary EdsLib userdata object to reflect the sub-structure */ EdsLib_LuaBinding_NewSubObject(lua, Object, &ComponentInfo); return 1; - } static void EdsLib_LuaBinding_EnumerateMembers_Callback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) { - lua_State *lua = Arg; - int idx; + lua_State *lua = Arg; + int idx; EdsLib_Binding_DescriptorObject_t *BaseObj = luaL_checkudata(lua, -3, "EdsLib_Object"); luaL_checktype(lua, -2, LUA_TTABLE); @@ -194,8 +192,8 @@ static void EdsLib_LuaBinding_EnumerateMembers_Callback(void *Arg, const EdsLib_ static int EdsLib_LuaBinding_EdsObjectToLuaObject(lua_State *lua) { EdsLib_Binding_DescriptorObject_t *Object; - EdsLib_DisplayHint_t DispHint; - int start_top = lua_gettop(lua); + EdsLib_DisplayHint_t DispHint; + int start_top = lua_gettop(lua); Object = luaL_testudata(lua, start_top, "EdsLib_Object"); @@ -219,8 +217,8 @@ static int EdsLib_LuaBinding_EdsObjectToLuaObject(lua_State *lua) { if (Object->TypeInfo.ElemType == EDSLIB_BASICTYPE_BINARY) { - const char *Str = (const char*)EdsLib_Binding_GetNativeObject(Object); - uint32_t StrSize = 0; + const char *Str = (const char *)EdsLib_Binding_GetNativeObject(Object); + uint32_t StrSize = 0; if (DispHint == EDSLIB_DISPLAYHINT_STRING) { @@ -243,9 +241,12 @@ static int EdsLib_LuaBinding_EdsObjectToLuaObject(lua_State *lua) { char StringBuffer[256]; - if (EdsLib_Scalar_ToString(Object->GD, Object->EdsId, - StringBuffer, sizeof(StringBuffer), - EdsLib_Binding_GetNativeObject(Object)) == EDSLIB_SUCCESS) + if (EdsLib_Scalar_ToString(Object->GD, + Object->EdsId, + StringBuffer, + sizeof(StringBuffer), + EdsLib_Binding_GetNativeObject(Object)) + == EDSLIB_SUCCESS) { lua_pushstring(lua, StringBuffer); } @@ -256,35 +257,35 @@ static int EdsLib_LuaBinding_EdsObjectToLuaObject(lua_State *lua) EdsLib_Binding_LoadValue(Object, &ValueBuff); - switch(ValueBuff.ValueType) + switch (ValueBuff.ValueType) { - case EDSLIB_BASICTYPE_SIGNED_INT: - if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) - { - /* preserve the boolean nature of the integer field */ - lua_pushboolean(lua, ValueBuff.Value.SignedInteger); - } - else - { - lua_pushinteger(lua, ValueBuff.Value.SignedInteger); - } - break; - case EDSLIB_BASICTYPE_UNSIGNED_INT: - if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) - { - /* preserve the boolean nature of the integer field */ - lua_pushboolean(lua, ValueBuff.Value.UnsignedInteger); - } - else - { - lua_pushinteger(lua, ValueBuff.Value.UnsignedInteger); - } - break; - case EDSLIB_BASICTYPE_FLOAT: - lua_pushnumber(lua, ValueBuff.Value.FloatingPoint); - break; - default: - break; + case EDSLIB_BASICTYPE_SIGNED_INT: + if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) + { + /* preserve the boolean nature of the integer field */ + lua_pushboolean(lua, ValueBuff.Value.SignedInteger); + } + else + { + lua_pushinteger(lua, ValueBuff.Value.SignedInteger); + } + break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) + { + /* preserve the boolean nature of the integer field */ + lua_pushboolean(lua, ValueBuff.Value.UnsignedInteger); + } + else + { + lua_pushinteger(lua, ValueBuff.Value.UnsignedInteger); + } + break; + case EDSLIB_BASICTYPE_FLOAT: + lua_pushnumber(lua, ValueBuff.Value.FloatingPoint); + break; + default: + break; } } } @@ -293,22 +294,24 @@ static int EdsLib_LuaBinding_EdsObjectToLuaObject(lua_State *lua) int idx; /* Create a temporary table with the name name/userdata pairs */ - lua_newtable(lua); /* index 2 -- contains the names */ - lua_newtable(lua); /* index 3 -- contains the value types (userdata) */ - EdsLib_DisplayDB_IterateBaseEntities(Object->GD, Object->EdsId, - EdsLib_LuaBinding_EnumerateMembers_Callback, lua); + lua_newtable(lua); /* index 2 -- contains the names */ + lua_newtable(lua); /* index 3 -- contains the value types (userdata) */ + EdsLib_DisplayDB_IterateBaseEntities(Object->GD, + Object->EdsId, + EdsLib_LuaBinding_EnumerateMembers_Callback, + lua); /* Create the table that will be returned */ - lua_newtable(lua); /* index 4 -- final result */ + lua_newtable(lua); /* index 4 -- final result */ /* Attempt to convert each userdata into a Lua object, recursing as necessary */ for (idx = 1; idx <= lua_rawlen(lua, 2); ++idx) { - lua_rawgeti(lua, 2, idx); /* get name from first temp table */ + lua_rawgeti(lua, 2, idx); /* get name from first temp table */ lua_pushcfunction(lua, EdsLib_LuaBinding_EdsObjectToLuaObject); - lua_rawgeti(lua, 3, idx); /* get userdata from second temp table */ - lua_call(lua, 1, 1); /* recursive call to convert sub-userdata to Lua object */ - lua_rawset(lua, 4); /* store in final table */ + lua_rawgeti(lua, 3, idx); /* get userdata from second temp table */ + lua_call(lua, 1, 1); /* recursive call to convert sub-userdata to Lua object */ + lua_rawset(lua, 4); /* store in final table */ } /* note that the two intermediate tables will be dropped; only the top is returned */ @@ -326,7 +329,7 @@ static int EdsLib_LuaBinding_EdsObjectToLuaObject(lua_State *lua) static int EdsLib_LuaBinding_LuaObjectToEdsObject(lua_State *lua) { EdsLib_Binding_DescriptorObject_t *Object; - int start_top = lua_gettop(lua); + int start_top = lua_gettop(lua); Object = luaL_checkudata(lua, start_top - 1, "EdsLib_Object"); @@ -335,7 +338,7 @@ static int EdsLib_LuaBinding_LuaObjectToEdsObject(lua_State *lua) if (lua_type(lua, start_top) == LUA_TSTRING) { const char *SrcString = lua_tostring(lua, start_top); - uint32_t SrcLength = lua_rawlen(lua, start_top); + uint32_t SrcLength = lua_rawlen(lua, start_top); /* * If the target is a binary field (which includes EDS strings) @@ -360,11 +363,8 @@ static int EdsLib_LuaBinding_LuaObjectToEdsObject(lua_State *lua) * This will attempt to parse the string as the appropriate EDS type. * (therefore slower than the simple case above) */ - EdsLib_Scalar_FromString(Object->GD, Object->EdsId, - EdsLib_Binding_GetNativeObject(Object), - SrcString); + EdsLib_Scalar_FromString(Object->GD, Object->EdsId, EdsLib_Binding_GetNativeObject(Object), SrcString); } - } else { @@ -374,12 +374,12 @@ static int EdsLib_LuaBinding_LuaObjectToEdsObject(lua_State *lua) { /* in Lua all numbers are floats */ ValueBuff.Value.FloatingPoint = lua_tonumber(lua, start_top); - ValueBuff.ValueType = EDSLIB_BASICTYPE_FLOAT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_FLOAT; } else if (lua_type(lua, start_top) == LUA_TBOOLEAN) { ValueBuff.Value.SignedInteger = lua_toboolean(lua, start_top); - ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; } else { @@ -394,7 +394,7 @@ static int EdsLib_LuaBinding_LuaObjectToEdsObject(lua_State *lua) if (lua_istable(lua, start_top)) { lua_pushnil(lua); - while(lua_next(lua, start_top)) + while (lua_next(lua, start_top)) { lua_pushcfunction(lua, EdsLib_LuaBinding_LuaObjectToEdsObject); lua_pushcfunction(lua, EdsLib_LuaBinding_GetField); @@ -470,17 +470,16 @@ static int EdsLib_LuaBinding_EdsObjectAssignValue(lua_State *lua) SrcObject = NULL; } - if (SrcObject != NULL && EdsLib_Binding_IsDescBufferValid(SrcObject) && - EdsLib_Binding_CheckEdsObjectsCompatible(DestObject, SrcObject) != - EDSLIB_BINDING_COMPATIBILITY_NONE) + if (SrcObject != NULL && EdsLib_Binding_IsDescBufferValid(SrcObject) + && EdsLib_Binding_CheckEdsObjectsCompatible(DestObject, SrcObject) != EDSLIB_BINDING_COMPATIBILITY_NONE) { /* * In the simple case, the objects are binary compatible, and the * value can be simply memcpy()'ed to the destination object */ memcpy(EdsLib_Binding_GetNativeObject(DestObject), - EdsLib_Binding_GetNativeObject(SrcObject), - SrcObject->TypeInfo.Size.Bytes); + EdsLib_Binding_GetNativeObject(SrcObject), + SrcObject->TypeInfo.Size.Bytes); } else { @@ -505,7 +504,7 @@ static int EdsLib_LuaBinding_EdsObjectAssignValue(lua_State *lua) lua_call(lua, 1, 1); } - lua_call(lua, 2, 0); /* Calling LuaObjectToEdsObject */ + lua_call(lua, 2, 0); /* Calling LuaObjectToEdsObject */ } return 0; @@ -520,7 +519,7 @@ static int EdsLib_LuaBinding_SetField(lua_State *lua) * Field Value @ 3 */ - lua_settop(lua, 3); /* adjust stack in case different number of args were passed in */ + lua_settop(lua, 3); /* adjust stack in case different number of args were passed in */ lua_pushcfunction(lua, EdsLib_LuaBinding_EdsObjectAssignValue); @@ -536,12 +535,13 @@ static int EdsLib_LuaBinding_SetField(lua_State *lua) return 0; } -static void EdsLib_LuaBinding_PushBufferAsString(lua_State *lua, const char *Desc, const uint8_t *Buffer, uint32_t ContentBitSize) +static void +EdsLib_LuaBinding_PushBufferAsString(lua_State *lua, const char *Desc, const uint8_t *Buffer, uint32_t ContentBitSize) { luaL_Buffer lbuf; - char TempString[5]; - uint32_t i; - uint32_t ContentByteSize = (ContentBitSize + 7) / 8; + char TempString[5]; + uint32_t i; + uint32_t ContentByteSize = (ContentBitSize + 7) / 8; lua_pushfstring(lua, "%s(%d", Desc, (int)ContentBitSize); luaL_buffinit(lua, &lbuf); @@ -549,7 +549,7 @@ static void EdsLib_LuaBinding_PushBufferAsString(lua_State *lua, const char *Des if (ContentByteSize > 0) { luaL_addstring(&lbuf, ":"); - for(i = 0; i < ContentByteSize; ++i) + for (i = 0; i < ContentByteSize; ++i) { snprintf(TempString, sizeof(TempString), " %02x", Buffer[i]); luaL_addstring(&lbuf, TempString); @@ -559,7 +559,6 @@ static void EdsLib_LuaBinding_PushBufferAsString(lua_State *lua, const char *Des luaL_pushresult(&lbuf); lua_pushstring(lua, ")"); lua_concat(lua, 3); - } static int EdsLib_LuaBinding_BufferToString(lua_State *lua) @@ -568,9 +567,8 @@ static int EdsLib_LuaBinding_BufferToString(lua_State *lua) if (lua_type(lua, 1) == LUA_TSTRING) { - const uint8_t *Buffer = (const uint8_t*)lua_tostring(lua, 1); - EdsLib_LuaBinding_PushBufferAsString(lua, "BITSTREAM", - Buffer, 8 * lua_rawlen(lua, 1)); + const uint8_t *Buffer = (const uint8_t *)lua_tostring(lua, 1); + EdsLib_LuaBinding_PushBufferAsString(lua, "BITSTREAM", Buffer, 8 * lua_rawlen(lua, 1)); nret = 1; } else if (lua_type(lua, 1) == LUA_TUSERDATA) @@ -579,10 +577,11 @@ static int EdsLib_LuaBinding_BufferToString(lua_State *lua) if (EdsLib_Binding_IsDescBufferValid(Object)) { char TypeName[128]; - EdsLib_LuaBinding_PushBufferAsString(lua, - EdsLib_DisplayDB_GetTypeName(Object->GD, Object->EdsId, TypeName, sizeof(TypeName)), - EdsLib_Binding_GetNativeObject(Object), - 8 * Object->TypeInfo.Size.Bytes); + EdsLib_LuaBinding_PushBufferAsString( + lua, + EdsLib_DisplayDB_GetTypeName(Object->GD, Object->EdsId, TypeName, sizeof(TypeName)), + EdsLib_Binding_GetNativeObject(Object), + 8 * Object->TypeInfo.Size.Bytes); nret = 1; } } @@ -593,7 +592,7 @@ static int EdsLib_LuaBinding_BufferToString(lua_State *lua) static int EdsLib_LuaBinding_ObjectToString(lua_State *lua) { EdsLib_Binding_DescriptorObject_t *ObjectUserData; - char StringBuffer[256]; + char StringBuffer[256]; ObjectUserData = luaL_checkudata(lua, 1, "EdsLib_Object"); @@ -604,20 +603,29 @@ static int EdsLib_LuaBinding_ObjectToString(lua_State *lua) if (!EdsLib_Binding_IsDescBufferValid(ObjectUserData)) { /* Object is a descriptor only; return a string containing the EDS type descriptor */ - lua_pushstring(lua, EdsLib_DisplayDB_GetTypeName(ObjectUserData->GD, ObjectUserData->EdsId, StringBuffer, sizeof(StringBuffer))); + lua_pushstring(lua, + EdsLib_DisplayDB_GetTypeName(ObjectUserData->GD, + ObjectUserData->EdsId, + StringBuffer, + sizeof(StringBuffer))); } - else if (ObjectUserData->TypeInfo.NumSubElements == 0 && ObjectUserData->TypeInfo.Size.Bytes > 0 && - EdsLib_Scalar_ToString(ObjectUserData->GD, ObjectUserData->EdsId, StringBuffer, sizeof(StringBuffer), - EdsLib_Binding_GetNativeObject(ObjectUserData)) == EDSLIB_SUCCESS) + else if (ObjectUserData->TypeInfo.NumSubElements == 0 && ObjectUserData->TypeInfo.Size.Bytes > 0 + && EdsLib_Scalar_ToString(ObjectUserData->GD, + ObjectUserData->EdsId, + StringBuffer, + sizeof(StringBuffer), + EdsLib_Binding_GetNativeObject(ObjectUserData)) + == EDSLIB_SUCCESS) { lua_pushstring(lua, StringBuffer); } else { - EdsLib_LuaBinding_PushBufferAsString(lua, - EdsLib_DisplayDB_GetTypeName(ObjectUserData->GD, ObjectUserData->EdsId, StringBuffer, sizeof(StringBuffer)), - EdsLib_Binding_GetNativeObject(ObjectUserData), - 8 * ObjectUserData->TypeInfo.Size.Bytes); + EdsLib_LuaBinding_PushBufferAsString( + lua, + EdsLib_DisplayDB_GetTypeName(ObjectUserData->GD, ObjectUserData->EdsId, StringBuffer, sizeof(StringBuffer)), + EdsLib_Binding_GetNativeObject(ObjectUserData), + 8 * ObjectUserData->TypeInfo.Size.Bytes); } return 1; @@ -625,10 +633,10 @@ static int EdsLib_LuaBinding_ObjectToString(lua_State *lua) static int EdsLib_LuaBinding_NewObject(lua_State *lua) { - EdsLib_Lua_Database_Userdata_t *DbObj = luaL_checkudata(lua, lua_upvalueindex(1), "EdsDb"); - EdsLib_Binding_DescriptorObject_t *ObjectUserData; + EdsLib_Lua_Database_Userdata_t *DbObj = luaL_checkudata(lua, lua_upvalueindex(1), "EdsDb"); + EdsLib_Binding_DescriptorObject_t *ObjectUserData; EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - EdsLib_Binding_DescriptorObject_t *SrcObject; + EdsLib_Binding_DescriptorObject_t *SrcObject; /* * The second argument to this function is an optional initializer. @@ -646,8 +654,9 @@ static int EdsLib_LuaBinding_NewObject(lua_State *lua) if (lua_type(lua, 1) == LUA_TSTRING) { - EdsLib_Binding_InitDescriptor(ObjectUserData, DbObj->GD, - EdsLib_DisplayDB_LookupTypeName(DbObj->GD, luaL_checkstring(lua, 1))); + EdsLib_Binding_InitDescriptor(ObjectUserData, + DbObj->GD, + EdsLib_DisplayDB_LookupTypeName(DbObj->GD, luaL_checkstring(lua, 1))); } else if (lua_type(lua, 1) == LUA_TUSERDATA) { @@ -679,13 +688,10 @@ static int EdsLib_LuaBinding_NewObject(lua_State *lua) if (!EdsLib_Binding_IsDescBufferValid(ObjectUserData)) { - return luaL_error(lua, "Memory allocation error obtaining buffer for %d bytes", - (int)DerivInfo.MaxSize.Bytes); + return luaL_error(lua, "Memory allocation error obtaining buffer for %d bytes", (int)DerivInfo.MaxSize.Bytes); } - - if (ObjectUserData->TypeInfo.NumSubElements > 0 && - lua_type(lua, 2) == LUA_TSTRING) + if (ObjectUserData->TypeInfo.NumSubElements > 0 && lua_type(lua, 2) == LUA_TSTRING) { /* * When initializing a compound object (array or container) from a string, @@ -693,20 +699,21 @@ static int EdsLib_LuaBinding_NewObject(lua_State *lua) * * Initialize the new object from the serialized object */ - EdsLib_DataTypeDB_UnpackCompleteObject(DbObj->GD, &ObjectUserData->EdsId, - EdsLib_Binding_GetNativeObject(ObjectUserData), - lua_tostring(lua, 2), DerivInfo.MaxSize.Bytes, 8 * lua_rawlen(lua, 2)); + EdsLib_DataTypeDB_UnpackCompleteObject(DbObj->GD, + &ObjectUserData->EdsId, + EdsLib_Binding_GetNativeObject(ObjectUserData), + lua_tostring(lua, 2), + DerivInfo.MaxSize.Bytes, + 8 * lua_rawlen(lua, 2)); /* * The unpack operation may modify the EdsId, so look up details after completion. */ - EdsLib_DataTypeDB_GetTypeInfo(DbObj->GD, ObjectUserData->EdsId, - &ObjectUserData->TypeInfo); + EdsLib_DataTypeDB_GetTypeInfo(DbObj->GD, ObjectUserData->EdsId, &ObjectUserData->TypeInfo); } else { - EdsLib_DataTypeDB_GetTypeInfo(DbObj->GD, ObjectUserData->EdsId, - &ObjectUserData->TypeInfo); + EdsLib_DataTypeDB_GetTypeInfo(DbObj->GD, ObjectUserData->EdsId, &ObjectUserData->TypeInfo); /* * Initialize the new object from scratch, optionally using a Lua value to prepare internal fields @@ -716,32 +723,30 @@ static int EdsLib_LuaBinding_NewObject(lua_State *lua) if (!lua_isnil(lua, 2)) { lua_pushcfunction(lua, EdsLib_LuaBinding_EdsObjectAssignValue); - lua_pushvalue(lua, 3); /* new object */ - lua_pushvalue(lua, 2); /* initializer object */ + lua_pushvalue(lua, 3); /* new object */ + lua_pushvalue(lua, 2); /* initializer object */ lua_call(lua, 2, 0); } } - return 1; } static int EdsLib_LuaBinding_EncodeObject(lua_State *lua) { - EdsLib_Binding_DescriptorObject_t *ObjectUserData; + EdsLib_Binding_DescriptorObject_t *ObjectUserData; EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - EdsLib_Id_t PackMsg; - EdsLib_SizeInfo_t ActualSize; - uint32_t MaxPackedSize; - uint8_t LocalScratchBuffer[64]; - void *PackBufPtr; - int32_t PackStatus; - int nret; + EdsLib_Id_t PackMsg; + EdsLib_SizeInfo_t ActualSize; + uint32_t MaxPackedSize; + uint8_t LocalScratchBuffer[64]; + void *PackBufPtr; + int32_t PackStatus; + int nret; ObjectUserData = luaL_checkudata(lua, 1, "EdsLib_Object"); - if (EdsLib_DataTypeDB_GetDerivedInfo(ObjectUserData->GD, ObjectUserData->EdsId, - &DerivInfo) == EDSLIB_SUCCESS) + if (EdsLib_DataTypeDB_GetDerivedInfo(ObjectUserData->GD, ObjectUserData->EdsId, &DerivInfo) == EDSLIB_SUCCESS) { /* allocate enough buffer storage for the largest derivative type */ MaxPackedSize = DerivInfo.MaxSize.Bits; @@ -752,8 +757,8 @@ static int EdsLib_LuaBinding_EncodeObject(lua_State *lua) MaxPackedSize = ObjectUserData->TypeInfo.Size.Bits; } - nret = 0; - PackMsg = ObjectUserData->EdsId; + nret = 0; + PackMsg = ObjectUserData->EdsId; MaxPackedSize = EdsLib_BITS_TO_OCTETS(MaxPackedSize); /* @@ -773,14 +778,14 @@ static int EdsLib_LuaBinding_EncodeObject(lua_State *lua) { memset(PackBufPtr, 0, MaxPackedSize); - ActualSize.Bits = EdsLib_OCTETS_TO_BITS(MaxPackedSize); + ActualSize.Bits = EdsLib_OCTETS_TO_BITS(MaxPackedSize); ActualSize.Bytes = EdsLib_Binding_GetNativeSize(ObjectUserData); PackStatus = EdsLib_DataTypeDB_PackCompleteObjectVarSize(ObjectUserData->GD, - &PackMsg, - PackBufPtr, - EdsLib_Binding_GetNativeObject(ObjectUserData), - &ActualSize); + &PackMsg, + PackBufPtr, + EdsLib_Binding_GetNativeObject(ObjectUserData), + &ActualSize); if (PackStatus == EDSLIB_SUCCESS) { @@ -800,9 +805,8 @@ static int EdsLib_LuaBinding_EncodeObject(lua_State *lua) static int EdsLib_LuaBinding_GetMetaData(lua_State *lua) { - EdsLib_Binding_DescriptorObject_t *ObjectUserData = - luaL_checkudata(lua, 1, "EdsLib_Object"); - char StringBuffer[128]; + EdsLib_Binding_DescriptorObject_t *ObjectUserData = luaL_checkudata(lua, 1, "EdsLib_Object"); + char StringBuffer[128]; lua_newtable(lua); lua_pushinteger(lua, ObjectUserData->TypeInfo.Size.Bits); @@ -815,38 +819,40 @@ static int EdsLib_LuaBinding_GetMetaData(lua_State *lua) lua_setfield(lua, -2, "BytePosition"); lua_pushinteger(lua, ObjectUserData->EdsId); lua_setfield(lua, -2, "TypeId"); - lua_pushstring(lua, EdsLib_DisplayDB_GetTypeName(ObjectUserData->GD, ObjectUserData->EdsId, StringBuffer, sizeof(StringBuffer))); + lua_pushstring( + lua, + EdsLib_DisplayDB_GetTypeName(ObjectUserData->GD, ObjectUserData->EdsId, StringBuffer, sizeof(StringBuffer))); lua_setfield(lua, -2, "TypeName"); switch (ObjectUserData->TypeInfo.ElemType) { - case EDSLIB_BASICTYPE_SIGNED_INT: - lua_pushstring(lua, "SIGNED_INT"); - break; - case EDSLIB_BASICTYPE_UNSIGNED_INT: - lua_pushstring(lua, "UNSIGNED_INT"); - break; - case EDSLIB_BASICTYPE_FLOAT: - lua_pushstring(lua, "IEEE_FLOAT"); - break; - case EDSLIB_BASICTYPE_BINARY: - lua_pushstring(lua, "BINARY"); - break; - case EDSLIB_BASICTYPE_CONTAINER: - lua_pushstring(lua, "CONTAINER"); - break; - case EDSLIB_BASICTYPE_COMPONENT: - lua_pushstring(lua, "COMPONENT"); - break; - case EDSLIB_BASICTYPE_ARRAY: - lua_pushstring(lua, "ARRAY"); - break; - case EDSLIB_BASICTYPE_GENERIC: - lua_pushstring(lua, "GENERIC"); - break; - default: - lua_pushnil(lua); - break; + case EDSLIB_BASICTYPE_SIGNED_INT: + lua_pushstring(lua, "SIGNED_INT"); + break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + lua_pushstring(lua, "UNSIGNED_INT"); + break; + case EDSLIB_BASICTYPE_FLOAT: + lua_pushstring(lua, "IEEE_FLOAT"); + break; + case EDSLIB_BASICTYPE_BINARY: + lua_pushstring(lua, "BINARY"); + break; + case EDSLIB_BASICTYPE_CONTAINER: + lua_pushstring(lua, "CONTAINER"); + break; + case EDSLIB_BASICTYPE_COMPONENT: + lua_pushstring(lua, "COMPONENT"); + break; + case EDSLIB_BASICTYPE_ARRAY: + lua_pushstring(lua, "ARRAY"); + break; + case EDSLIB_BASICTYPE_GENERIC: + lua_pushstring(lua, "GENERIC"); + break; + default: + lua_pushnil(lua); + break; } lua_setfield(lua, -2, "TypeClass"); @@ -867,12 +873,11 @@ static int EdsLib_LuaBinding_GetMemberIterator(lua_State *lua) { EdsLib_Binding_DescriptorObject_t *Object = luaL_checkudata(lua, 1, "EdsLib_Object"); - lua_newtable(lua); /* table to hold names */ - lua_newtable(lua); /* table to hold values (userdata) */ + lua_newtable(lua); /* table to hold names */ + lua_newtable(lua); /* table to hold values (userdata) */ /* fill in the two temporary tables */ - EdsLib_DisplayDB_IterateBaseEntities(Object->GD, Object->EdsId, - EdsLib_LuaBinding_EnumerateMembers_Callback, lua); + EdsLib_DisplayDB_IterateBaseEntities(Object->GD, Object->EdsId, EdsLib_LuaBinding_EnumerateMembers_Callback, lua); lua_pushinteger(lua, 0); /* "next index" into the table */ lua_pushcclosure(lua, EdsLib_LuaBinding_MemberIterator_Impl, 3); @@ -887,8 +892,8 @@ static void EdsLib_LuaBinding_CountMembers_Callback(void *Arg, const EdsLib_Enti static int EdsLib_LuaBinding_GetObjectLength(lua_State *lua) { - EdsLib_Binding_DescriptorObject_t *Object = luaL_checkudata(lua, 1, "EdsLib_Object"); - lua_Integer ResultLen = 0; + EdsLib_Binding_DescriptorObject_t *Object = luaL_checkudata(lua, 1, "EdsLib_Object"); + lua_Integer ResultLen = 0; if (Object->TypeInfo.ElemType == EDSLIB_BASICTYPE_ARRAY) { @@ -901,8 +906,10 @@ static int EdsLib_LuaBinding_GetObjectLength(lua_State *lua) * the possible presence of unnamed base types. The number returned here * reflect the same number that one would get from an iterator. */ - EdsLib_DisplayDB_IterateBaseEntities(Object->GD, Object->EdsId, - EdsLib_LuaBinding_CountMembers_Callback, &ResultLen); + EdsLib_DisplayDB_IterateBaseEntities(Object->GD, + Object->EdsId, + EdsLib_LuaBinding_CountMembers_Callback, + &ResultLen); } lua_pushinteger(lua, ResultLen); @@ -927,8 +934,8 @@ static int EdsLib_LuaBinding_TypeEqualCheck(lua_State *lua) } else { - lua_pushboolean(lua, EdsLib_Binding_CheckEdsObjectsCompatible(Obj1, Obj2) == - EDSLIB_BINDING_COMPATIBILITY_EXACT); + lua_pushboolean(lua, + EdsLib_Binding_CheckEdsObjectsCompatible(Obj1, Obj2) == EDSLIB_BINDING_COMPATIBILITY_EXACT); } return 1; @@ -943,8 +950,6 @@ static int EdsLib_LuaBinding_API(lua_State *lua) return 1; } - - /* ********************************************************* * PUBLIC API FUNCTIONS BELOW HERE * *********************************************************/ @@ -976,7 +981,8 @@ void EdsLib_LuaBinding_GetNativeObject(EdsLib_LuaBinding_State_t *lua, int narg, } } -EdsLib_LuaBinding_DescriptorObject_t *EdsLib_LuaBinding_CreateEmptyObject(EdsLib_LuaBinding_State_t *lua, size_t MaxSize) +EdsLib_LuaBinding_DescriptorObject_t *EdsLib_LuaBinding_CreateEmptyObject(EdsLib_LuaBinding_State_t *lua, + size_t MaxSize) { EdsLib_Binding_DescriptorObject_t *ObjectUserData; @@ -997,8 +1003,8 @@ void EdsLib_Lua_Attach(EdsLib_LuaBinding_State_t *lua, const EdsLib_LuaBinding_D } EdsLib_Lua_Database_Userdata_t *DbObj = lua_newuserdata(lua, sizeof(EdsLib_Lua_Database_Userdata_t)); - DbObj->GD = MissionObj; - Obj = lua_gettop(lua); + DbObj->GD = MissionObj; + Obj = lua_gettop(lua); lua_newtable(lua); diff --git a/edslib/python/inc/edslib_python.h b/edslib/python/inc/edslib_python.h index 04a415d..39a5ee2 100644 --- a/edslib/python/inc/edslib_python.h +++ b/edslib/python/inc/edslib_python.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file edslib_python.h * \ingroup python @@ -30,7 +29,6 @@ #ifndef _EDSLIB_PYTHON_H_ #define _EDSLIB_PYTHON_H_ - #include #include #include @@ -40,7 +38,7 @@ * * This is provided for applications that supply their own custom init routine. */ -#define EDSLIB_PYTHON_DOC "Module which provides an interface to the EDS Runtime Library." +#define EDSLIB_PYTHON_DOC "Module which provides an interface to the EDS Runtime Library." /** * Base Name of the Python module @@ -50,7 +48,7 @@ * as the base name, which carries through to the respective "repr()" * implementation and other user-visible items. */ -#define EDSLIB_PYTHON_MODULE_NAME "EdsLib" +#define EDSLIB_PYTHON_MODULE_NAME "EdsLib" /** * Get the name of a Python entity @@ -59,8 +57,7 @@ * by adding a prefix of EDSLIB_PYTHON_MODULE_NAME. It is used * by all types to keep the naming consistent. */ -#define EDSLIB_PYTHON_ENTITY_NAME(x) EDSLIB_PYTHON_MODULE_NAME "." x - +#define EDSLIB_PYTHON_ENTITY_NAME(x) EDSLIB_PYTHON_MODULE_NAME "." x /** * Main Initializer function that sets up a newly-minted module object @@ -75,7 +72,7 @@ * different naming and calling conventions). So it is expected that * an additional wrapper around this will be added to accommodate this. */ -PyObject* EdsLib_Python_CreateModule(void); +PyObject *EdsLib_Python_CreateModule(void); /** * Creates a Python EDS Database object from a C Database Object @@ -151,7 +148,7 @@ const void *EdsLib_Python_ObjectPeek(PyObject *obj); * is the base type for other types, then this will return * the size of the largest possible derivative type. */ -Py_ssize_t EdsLib_Python_DatabaseEntry_GetMaxSize(PyTypeObject* objtype); +Py_ssize_t EdsLib_Python_DatabaseEntry_GetMaxSize(PyTypeObject *objtype); /** * Create an EDS dynamic array from a C array. @@ -165,7 +162,8 @@ Py_ssize_t EdsLib_Python_DatabaseEntry_GetMaxSize(PyTypeObject* objtype); * buffer storage. The buffer will be "read-write" so modifications * are possible from Python and these will be visible from C. */ -PyObject *EdsLib_Python_DynamicArray_FromPtrAndSize(PyTypeObject *objtype, void *ptr, Py_ssize_t nelem, Py_ssize_t elemsz); +PyObject * +EdsLib_Python_DynamicArray_FromPtrAndSize(PyTypeObject *objtype, void *ptr, Py_ssize_t nelem, Py_ssize_t elemsz); /** * Create an EDS dynamic array from a C array. @@ -180,8 +178,9 @@ PyObject *EdsLib_Python_DynamicArray_FromPtrAndSize(PyTypeObject *objtype, void * are not possible from Python. Attempts to get a writable buffer * using the buffer protocol will fail. */ -PyObject *EdsLib_Python_DynamicArray_FromConstPtrAndSize(PyTypeObject *objtype, const void *ptr, Py_ssize_t nelem, Py_ssize_t elemsz); - - -#endif /* _EDSLIB_PYTHON_H_ */ +PyObject *EdsLib_Python_DynamicArray_FromConstPtrAndSize(PyTypeObject *objtype, + const void *ptr, + Py_ssize_t nelem, + Py_ssize_t elemsz); +#endif /* _EDSLIB_PYTHON_H_ */ diff --git a/edslib/python/src/edslib_python_accessor.c b/edslib/python/src/edslib_python_accessor.c index 8fa5dcd..3436e80 100644 --- a/edslib/python/src/edslib_python_accessor.c +++ b/edslib/python/src/edslib_python_accessor.c @@ -18,41 +18,36 @@ * limitations under the License. */ - /** * \file edslib_python_accessor.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** This is an object that combines an offset and buffer size along with a -** pointer to the associated EDS database entry. It implements the Python -** "descriptor protocol". Instances of this object are can be stored as -** attributes in other objects to describe EDS object instances within -** arbitrary memory buffers. + ** This is an object that combines an offset and buffer size along with a + ** pointer to the associated EDS database entry. It implements the Python + ** "descriptor protocol". Instances of this object are can be stored as + ** attributes in other objects to describe EDS object instances within + ** arbitrary memory buffers. */ #include "edslib_python_internal.h" -static PyObject * EdsLib_Python_Accessor_descr_get(PyObject *obj, PyObject *refobj, PyObject *reftype); -static int EdsLib_Python_Accessor_descr_set(PyObject *obj, PyObject *refobj, PyObject *val); -static PyObject * EdsLib_Python_Accessor_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); -static void EdsLib_Python_Accessor_dealloc(PyObject * obj); -static PyObject * EdsLib_Python_Accessor_repr(PyObject *obj); - -PyTypeObject EdsLib_Python_AccessorType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("ElementAccessor"), - .tp_basicsize = sizeof(EdsLib_Python_Accessor_t), - .tp_dealloc = EdsLib_Python_Accessor_dealloc, - .tp_new = EdsLib_Python_Accessor_new, - .tp_repr = EdsLib_Python_Accessor_repr, - .tp_descr_get = EdsLib_Python_Accessor_descr_get, - .tp_descr_set = EdsLib_Python_Accessor_descr_set, - .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, - .tp_doc = PyDoc_STR("EDS Element Accessor Type") -}; - +static PyObject *EdsLib_Python_Accessor_descr_get(PyObject *obj, PyObject *refobj, PyObject *reftype); +static int EdsLib_Python_Accessor_descr_set(PyObject *obj, PyObject *refobj, PyObject *val); +static PyObject *EdsLib_Python_Accessor_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); +static void EdsLib_Python_Accessor_dealloc(PyObject *obj); +static PyObject *EdsLib_Python_Accessor_repr(PyObject *obj); + +PyTypeObject EdsLib_Python_AccessorType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("ElementAccessor"), + .tp_basicsize = sizeof(EdsLib_Python_Accessor_t), + .tp_dealloc = EdsLib_Python_Accessor_dealloc, + .tp_new = EdsLib_Python_Accessor_new, + .tp_repr = EdsLib_Python_Accessor_repr, + .tp_descr_get = EdsLib_Python_Accessor_descr_get, + .tp_descr_set = EdsLib_Python_Accessor_descr_set, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyDoc_STR("EDS Element Accessor Type") }; PyObject *EdsLib_Python_ElementAccessor_CreateFromOffsetSize(EdsLib_Id_t EdsId, Py_ssize_t Offset, Py_ssize_t Length) { @@ -63,33 +58,33 @@ PyObject *EdsLib_Python_ElementAccessor_CreateFromOffsetSize(EdsLib_Id_t EdsId, { return NULL; } - self->EdsId = EdsId; - self->Offset = Offset; + self->EdsId = EdsId; + self->Offset = Offset; self->TotalLength = Length; - return (PyObject*)self; + return (PyObject *)self; } PyObject *EdsLib_Python_ElementAccessor_CreateFromEntityInfo(const EdsLib_DataTypeDB_EntityInfo_t *EntityInfo) { return EdsLib_Python_ElementAccessor_CreateFromOffsetSize(EntityInfo->EdsId, - EntityInfo->Offset.Bytes, EntityInfo->MaxSize.Bytes); + EntityInfo->Offset.Bytes, + EntityInfo->MaxSize.Bytes); } -static void EdsLib_Python_Accessor_dealloc(PyObject * obj) +static void EdsLib_Python_Accessor_dealloc(PyObject *obj) { obj->ob_type->tp_free(obj); } -static PyObject * EdsLib_Python_Accessor_new(PyTypeObject *obj, PyObject *args, PyObject *kwds) +static PyObject *EdsLib_Python_Accessor_new(PyTypeObject *obj, PyObject *args, PyObject *kwds) { - EdsLib_Python_Accessor_t *self = NULL; - Py_ssize_t Offset = 0; - Py_ssize_t BufferSize = 0; - unsigned long EdsId; + EdsLib_Python_Accessor_t *self = NULL; + Py_ssize_t Offset = 0; + Py_ssize_t BufferSize = 0; + unsigned long EdsId; - if (!PyArg_ParseTuple(args, "kn|n:EdsLib_Python_Accessor_new", - &EdsId, &BufferSize, &Offset)) + if (!PyArg_ParseTuple(args, "kn|n:EdsLib_Python_Accessor_new", &EdsId, &BufferSize, &Offset)) { return NULL; } @@ -104,33 +99,33 @@ static PyObject * EdsLib_Python_Accessor_new(PyTypeObject *obj, PyObject *args, * By default, if not supplied, the assume the buffer size is * equal to the maximum possible size */ - self->EdsId = EdsId; - self->Offset = Offset; + self->EdsId = EdsId; + self->Offset = Offset; self->TotalLength = BufferSize; - return (PyObject*)self; + return (PyObject *)self; } -PyObject * EdsLib_Python_Accessor_repr(PyObject *obj) +PyObject *EdsLib_Python_Accessor_repr(PyObject *obj) { - EdsLib_Python_Accessor_t *self = (EdsLib_Python_Accessor_t *)obj; - PyObject *result = NULL; + EdsLib_Python_Accessor_t *self = (EdsLib_Python_Accessor_t *)obj; + PyObject *result = NULL; result = PyUnicode_FromFormat("%s(%lu,%zd,%zd)", - obj->ob_type->tp_name, - (unsigned long)self->EdsId, - self->TotalLength, - self->Offset); + obj->ob_type->tp_name, + (unsigned long)self->EdsId, + self->TotalLength, + self->Offset); return result; } static PyObject *EdsLib_Python_Accessor_descr_get(PyObject *obj, PyObject *refobj, PyObject *reftype) { - EdsLib_Python_Accessor_t *self = (EdsLib_Python_Accessor_t *)obj; + EdsLib_Python_Accessor_t *self = (EdsLib_Python_Accessor_t *)obj; EdsLib_Python_Database_t *edsdb = NULL; - PyTypeObject *subtype; - PyObject *result; + PyTypeObject *subtype; + PyObject *result; result = NULL; @@ -156,9 +151,9 @@ static PyObject *EdsLib_Python_Accessor_descr_get(PyObject *obj, PyObject *refob { edsdb = ((EdsLib_Python_DatabaseEntry_t *)refobj->ob_type)->EdsDb; } - else if (PyObject_IsInstance(refobj, (PyObject*)&EdsLib_Python_ObjectArrayType)) + else if (PyObject_IsInstance(refobj, (PyObject *)&EdsLib_Python_ObjectArrayType)) { - edsdb = ((EdsLib_Python_ObjectArray_t*)refobj)->RefDbEntry->EdsDb; + edsdb = ((EdsLib_Python_ObjectArray_t *)refobj)->RefDbEntry->EdsDb; } if (edsdb == NULL) @@ -183,7 +178,7 @@ static PyObject *EdsLib_Python_Accessor_descr_get(PyObject *obj, PyObject *refob static int EdsLib_Python_Accessor_descr_set(PyObject *obj, PyObject *refobj, PyObject *val) { PyObject *dstobj = NULL; - int result = -1; + int result = -1; do { @@ -199,17 +194,15 @@ static int EdsLib_Python_Accessor_descr_set(PyObject *obj, PyObject *refobj, PyO break; } - if (!EdsLib_Python_ConvertPythonToEdsObject((EdsLib_Python_ObjectBase_t*)dstobj, val)) + if (!EdsLib_Python_ConvertPythonToEdsObject((EdsLib_Python_ObjectBase_t *)dstobj, val)) { break; } result = 0; - } - while(0); + } while (0); Py_XDECREF(dstobj); return result; } - diff --git a/edslib/python/src/edslib_python_array.c b/edslib/python/src/edslib_python_array.c index ef47c24..2c6ab88 100644 --- a/edslib/python/src/edslib_python_array.c +++ b/edslib/python/src/edslib_python_array.c @@ -18,60 +18,49 @@ * limitations under the License. */ - /** * \file edslib_python_array.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** This extends the base type with the Python Sequence protocol. This forms -** the base type of all EDS array objects. For static EDS arrays, i.e. -** those defined at compile time in an EDS file using the "ArrayDataType" EDS -** element, this type will be further derived with the EDS definition in a -** manner similar to scalars and containers. -** -** The python bindings also allow for dynamic arrays, which are allocated at -** run time from any other EDS object and allow any length to be created, -** memory permitting. These also derive (separately) from this base type. + ** This extends the base type with the Python Sequence protocol. This forms + ** the base type of all EDS array objects. For static EDS arrays, i.e. + ** those defined at compile time in an EDS file using the "ArrayDataType" EDS + ** element, this type will be further derived with the EDS definition in a + ** manner similar to scalars and containers. + ** + ** The python bindings also allow for dynamic arrays, which are allocated at + ** run time from any other EDS object and allow any length to be created, + ** memory permitting. These also derive (separately) from this base type. */ #include "edslib_python_internal.h" -static Py_ssize_t EdsLib_Python_ObjectArray_seq_len(PyObject *obj); -static PyObject * EdsLib_Python_ObjectArray_seq_item(PyObject *obj, Py_ssize_t idx); -static int EdsLib_Python_ObjectArray_seq_ass_item(PyObject *obj, Py_ssize_t idx, PyObject *val); -static int EdsLib_Python_ObjectArray_getbuffer(PyObject *obj, Py_buffer *view, int flags); -static void EdsLib_Python_ObjectArray_releasebuffer(PyObject *obj, Py_buffer *view); -static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args, PyObject *kwds); - - -static PyBufferProcs EdsLib_Python_ObjectArray_BufferProcs = -{ - .bf_getbuffer = EdsLib_Python_ObjectArray_getbuffer, - .bf_releasebuffer = EdsLib_Python_ObjectArray_releasebuffer -}; - - -static PySequenceMethods EdsLib_Python_ObjectArray_SequenceMethods = -{ - .sq_length = EdsLib_Python_ObjectArray_seq_len, - .sq_item = EdsLib_Python_ObjectArray_seq_item, - .sq_ass_item = EdsLib_Python_ObjectArray_seq_ass_item -}; - -PyTypeObject EdsLib_Python_ObjectArrayType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("Array"), - .tp_basicsize = sizeof(EdsLib_Python_ObjectArray_t), - .tp_base = &EdsLib_Python_ObjectBaseType, - .tp_as_buffer = &EdsLib_Python_ObjectArray_BufferProcs, - .tp_as_sequence = &EdsLib_Python_ObjectArray_SequenceMethods, - .tp_init = EdsLib_Python_ObjectArray_init, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - .tp_doc = PyDoc_STR("EDS Array Type") -}; - +static Py_ssize_t EdsLib_Python_ObjectArray_seq_len(PyObject *obj); +static PyObject *EdsLib_Python_ObjectArray_seq_item(PyObject *obj, Py_ssize_t idx); +static int EdsLib_Python_ObjectArray_seq_ass_item(PyObject *obj, Py_ssize_t idx, PyObject *val); +static int EdsLib_Python_ObjectArray_getbuffer(PyObject *obj, Py_buffer *view, int flags); +static void EdsLib_Python_ObjectArray_releasebuffer(PyObject *obj, Py_buffer *view); +static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args, PyObject *kwds); + +static PyBufferProcs EdsLib_Python_ObjectArray_BufferProcs = { .bf_getbuffer = EdsLib_Python_ObjectArray_getbuffer, + .bf_releasebuffer = + EdsLib_Python_ObjectArray_releasebuffer }; + +static PySequenceMethods EdsLib_Python_ObjectArray_SequenceMethods = { .sq_length = EdsLib_Python_ObjectArray_seq_len, + .sq_item = EdsLib_Python_ObjectArray_seq_item, + .sq_ass_item = + EdsLib_Python_ObjectArray_seq_ass_item }; + +PyTypeObject EdsLib_Python_ObjectArrayType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("Array"), + .tp_basicsize = sizeof(EdsLib_Python_ObjectArray_t), + .tp_base = &EdsLib_Python_ObjectBaseType, + .tp_as_buffer = &EdsLib_Python_ObjectArray_BufferProcs, + .tp_as_sequence = &EdsLib_Python_ObjectArray_SequenceMethods, + .tp_init = EdsLib_Python_ObjectArray_init, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyDoc_STR("EDS Array Type") }; static Py_ssize_t EdsLib_Python_ObjectArray_seq_len(PyObject *obj) { @@ -79,31 +68,30 @@ static Py_ssize_t EdsLib_Python_ObjectArray_seq_len(PyObject *obj) return self->ElementCount; } -static PyObject * EdsLib_Python_ObjectArray_GetIndexAccessor(PyObject *obj, Py_ssize_t idx) +static PyObject *EdsLib_Python_ObjectArray_GetIndexAccessor(PyObject *obj, Py_ssize_t idx) { EdsLib_Python_ObjectArray_t *self = (EdsLib_Python_ObjectArray_t *)obj; - PyObject *accessor; - + PyObject *accessor; if (idx >= 0 && idx < self->ElementCount) { accessor = EdsLib_Python_ElementAccessor_CreateFromOffsetSize(self->RefDbEntry->EdsId, - self->ElementSize * idx, self->ElementSize); + self->ElementSize * idx, + self->ElementSize); } else { - PyErr_Format(PyExc_IndexError, "Request for index %zd in array of length %zd", - idx, self->ElementCount); + PyErr_Format(PyExc_IndexError, "Request for index %zd in array of length %zd", idx, self->ElementCount); accessor = NULL; } return accessor; } -static PyObject * EdsLib_Python_ObjectArray_seq_item(PyObject *obj, Py_ssize_t idx) +static PyObject *EdsLib_Python_ObjectArray_seq_item(PyObject *obj, Py_ssize_t idx) { - PyObject *accessor = EdsLib_Python_ObjectArray_GetIndexAccessor(obj, idx); - PyObject *result; + PyObject *accessor = EdsLib_Python_ObjectArray_GetIndexAccessor(obj, idx); + PyObject *result; descrgetfunc getfunc; if (accessor == NULL) @@ -134,8 +122,8 @@ static PyObject * EdsLib_Python_ObjectArray_seq_item(PyObject *obj, Py_ssize_t static int EdsLib_Python_ObjectArray_seq_ass_item(PyObject *obj, Py_ssize_t idx, PyObject *val) { - PyObject *accessor = EdsLib_Python_ObjectArray_GetIndexAccessor(obj, idx); - int result; + PyObject *accessor = EdsLib_Python_ObjectArray_GetIndexAccessor(obj, idx); + int result; descrsetfunc setfunc; if (accessor == NULL) @@ -162,10 +150,10 @@ static int EdsLib_Python_ObjectArray_seq_ass_item(PyObject *obj, Py_ssize_t idx, static int EdsLib_Python_ObjectArray_getbuffer(PyObject *obj, Py_buffer *view, int flags) { - EdsLib_Python_ObjectArray_t * self = (EdsLib_Python_ObjectArray_t *)obj; - Py_ssize_t ArrayItemSize; + EdsLib_Python_ObjectArray_t *self = (EdsLib_Python_ObjectArray_t *)obj; + Py_ssize_t ArrayItemSize; - ArrayItemSize = EdsLib_Python_DatabaseEntry_GetMaxSize((PyTypeObject*)self->RefDbEntry); + ArrayItemSize = EdsLib_Python_DatabaseEntry_GetMaxSize((PyTypeObject *)self->RefDbEntry); if (view->itemsize <= 0) { return -1; @@ -192,7 +180,7 @@ static int EdsLib_Python_ObjectArray_getbuffer(PyObject *obj, Py_buffer *view, i } if ((flags & PyBUF_ND) == PyBUF_ND) { - view->ndim = 1; + view->ndim = 1; view->shape = &self->ElementCount; } if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) @@ -208,18 +196,18 @@ static void EdsLib_Python_ObjectArray_releasebuffer(PyObject *obj, Py_buffer *vi EdsLib_Python_Buffer_ReleaseContentRef(view->internal); } -static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args, PyObject *kwds) +static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args, PyObject *kwds) { - static const char *in_kwlist[] = { "value", NULL }; - EdsLib_Python_ObjectArray_t * self = (EdsLib_Python_ObjectArray_t *)obj; - EdsLib_Python_DatabaseEntry_t *dbent = NULL; - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + static const char *in_kwlist[] = { "value", NULL }; + EdsLib_Python_ObjectArray_t *self = (EdsLib_Python_ObjectArray_t *)obj; + EdsLib_Python_DatabaseEntry_t *dbent = NULL; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - Py_ssize_t maxsize = -1; - Py_ssize_t nelem = -1; - Py_ssize_t elemsz = -1; - Py_ssize_t idx; - int result = -1; + Py_ssize_t maxsize = -1; + Py_ssize_t nelem = -1; + Py_ssize_t elemsz = -1; + Py_ssize_t idx; + int result = -1; /* * First drop any existing buffer (e.g. in case __init__ is invoked directly) @@ -227,11 +215,11 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args Py_CLEAR(self->RefDbEntry); kwds = EdsLib_Python_ObjectBase_InitArgsToKwds(args, kwds, in_kwlist); - args = NULL; /* should no longer be used directly */ + args = NULL; /* should no longer be used directly */ do { - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|O:ObjectArray_init", "dbent", &dbent)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|O:ObjectArray_init", "dbent", &dbent)) { break; } @@ -241,29 +229,26 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args Py_INCREF(dbent); /* make owned. It is DECREF'ed at the end of this function. */ if (Py_TYPE(dbent) != &EdsLib_Python_DatabaseEntryType) { - PyErr_Format(PyExc_TypeError, "dbent must be a database entry type, not %s", - Py_TYPE(dbent)->tp_name); + PyErr_Format(PyExc_TypeError, "dbent must be a database entry type, not %s", Py_TYPE(dbent)->tp_name); break; } } - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|n:ObjectArray_init", "nelem", &nelem)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|n:ObjectArray_init", "nelem", &nelem)) { break; } - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|n:ObjectArray_init", "elemsz", &elemsz)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|n:ObjectArray_init", "elemsz", &elemsz)) { break; } - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|n:ObjectArray_init", "maxsize", &maxsize)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|n:ObjectArray_init", "maxsize", &maxsize)) { break; } - - /* * If the object has a direct EDS definition (static array) then look up the info now. * This does not work for dynamic arrays or anything that doesn't directly map to an EDS definition. @@ -282,15 +267,17 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args { EdsLib_DataTypeDB_EntityInfo_t EntityInfo; - if (EdsLib_DataTypeDB_GetMemberByIndex(SelfDbEntry->EdsDb->GD, SelfDbEntry->EdsId, 0, &EntityInfo) != EDSLIB_SUCCESS) + if (EdsLib_DataTypeDB_GetMemberByIndex(SelfDbEntry->EdsDb->GD, SelfDbEntry->EdsId, 0, &EntityInfo) + != EDSLIB_SUCCESS) { PyErr_Format(PyExc_RuntimeError, "Cannot get array entity info from EDS DB"); break; } - dbent = (EdsLib_Python_DatabaseEntry_t *)EdsLib_Python_DatabaseEntry_GetFromEdsId((PyObject*)SelfDbEntry->EdsDb, EntityInfo.EdsId); + dbent = (EdsLib_Python_DatabaseEntry_t *)EdsLib_Python_DatabaseEntry_GetFromEdsId( + (PyObject *)SelfDbEntry->EdsDb, + EntityInfo.EdsId); } - } else { @@ -326,8 +313,7 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args { elemsz = maxsize / nelem; } - else if (EdsLib_DataTypeDB_GetDerivedInfo(dbent->EdsDb->GD, - dbent->EdsId, &DerivInfo) == EDSLIB_SUCCESS) + else if (EdsLib_DataTypeDB_GetDerivedInfo(dbent->EdsDb->GD, dbent->EdsId, &DerivInfo) == EDSLIB_SUCCESS) { elemsz = DerivInfo.MaxSize.Bytes; } @@ -381,10 +367,10 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args break; } - self->RefDbEntry = dbent; - dbent = NULL; /* steal ref */ + self->RefDbEntry = dbent; + dbent = NULL; /* steal ref */ self->ElementCount = nelem; - self->ElementSize = elemsz; + self->ElementSize = elemsz; /* * At this point the Python object is fully initialized.... @@ -399,7 +385,8 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args * Now get the type info for the _element_ rather than the array itself. * This should always be present */ - if (EdsLib_DataTypeDB_GetTypeInfo(self->RefDbEntry->EdsDb->GD, self->RefDbEntry->EdsId, &TypeInfo) != EDSLIB_SUCCESS) + if (EdsLib_DataTypeDB_GetTypeInfo(self->RefDbEntry->EdsDb->GD, self->RefDbEntry->EdsId, &TypeInfo) + != EDSLIB_SUCCESS) { PyErr_Format(PyExc_RuntimeError, "Cannot get type info from EDS DB"); break; @@ -411,7 +398,7 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args * */ if (TypeInfo.NumSubElements > 0) { - EdsLib_Binding_Buffer_Content_t *content; + EdsLib_Binding_Buffer_Content_t *content; EdsLib_Binding_DescriptorObject_t desc; content = EdsLib_Python_Buffer_GetContentRef(self->objbase.StorageBuf, PyBUF_WRITABLE); @@ -422,8 +409,8 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args memset(&desc, 0, sizeof(desc)); - desc.GD = self->RefDbEntry->EdsDb->GD; - desc.EdsId = self->RefDbEntry->EdsId; + desc.GD = self->RefDbEntry->EdsDb->GD; + desc.EdsId = self->RefDbEntry->EdsId; desc.Offset = self->objbase.Offset; desc.Length = self->ElementSize; EdsLib_Binding_SetDescBuffer(&desc, content); @@ -440,12 +427,10 @@ static int EdsLib_Python_ObjectArray_init(PyObject *obj, PyObject *args } result = 0; - } - while (0); + } while (0); Py_XDECREF(dbent); Py_XDECREF(kwds); return result; } - diff --git a/edslib/python/src/edslib_python_base.c b/edslib/python/src/edslib_python_base.c index 48e0621..f8213f6 100644 --- a/edslib/python/src/edslib_python_base.c +++ b/edslib/python/src/edslib_python_base.c @@ -18,19 +18,18 @@ * limitations under the License. */ - /** * \file edslib_python_base.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement common base type Python bindings for EDS objects -** -** This extends the accessor type with actual instance information, mainly -** a buffer object to hold the EDS object described by the accessor. -** -** This is functionality that every instance of an EDS object should implement, -** such as the buffer protocol. + ** Implement common base type Python bindings for EDS objects + ** + ** This extends the accessor type with actual instance information, mainly + ** a buffer object to hold the EDS object described by the accessor. + ** + ** This is functionality that every instance of an EDS object should implement, + ** such as the buffer protocol. */ /* @@ -103,41 +102,34 @@ * */ - #include "edslib_python_internal.h" -static char EDSLIB_PYTHON_BYTES_FORMAT[] = "B"; - -static void EdsLib_Python_ObjectBase_dealloc(PyObject * obj); -static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject *kwds); -static PyObject * EdsLib_Python_ObjectBase_repr(PyObject *obj); -static PyObject * EdsLib_Python_ObjectBase_call(PyObject *obj, PyObject *args, PyObject *kwds); -static int EdsLib_Python_ObjectBase_getbuffer(PyObject *obj, Py_buffer *view, int flags); -static void EdsLib_Python_ObjectBase_releasebuffer(PyObject *obj, Py_buffer *view); - -static PyBufferProcs EdsLib_Python_ObjectBase_BufferProcs = -{ - .bf_getbuffer = EdsLib_Python_ObjectBase_getbuffer, - .bf_releasebuffer = EdsLib_Python_ObjectBase_releasebuffer -}; - - -PyTypeObject EdsLib_Python_ObjectBaseType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("Object"), - .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), - .tp_dealloc = EdsLib_Python_ObjectBase_dealloc, - .tp_init = EdsLib_Python_ObjectBase_init, - .tp_new = PyType_GenericNew, - .tp_repr = EdsLib_Python_ObjectBase_repr, - .tp_call = EdsLib_Python_ObjectBase_call, - .tp_as_buffer = &EdsLib_Python_ObjectBase_BufferProcs, - .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, - .tp_doc = PyDoc_STR("EDS Object") -}; - -static void EdsLib_Python_ObjectBase_dealloc(PyObject * obj) +static char EDSLIB_PYTHON_BYTES_FORMAT[] = "B"; + +static void EdsLib_Python_ObjectBase_dealloc(PyObject *obj); +static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject *kwds); +static PyObject *EdsLib_Python_ObjectBase_repr(PyObject *obj); +static PyObject *EdsLib_Python_ObjectBase_call(PyObject *obj, PyObject *args, PyObject *kwds); +static int EdsLib_Python_ObjectBase_getbuffer(PyObject *obj, Py_buffer *view, int flags); +static void EdsLib_Python_ObjectBase_releasebuffer(PyObject *obj, Py_buffer *view); + +static PyBufferProcs EdsLib_Python_ObjectBase_BufferProcs = { .bf_getbuffer = EdsLib_Python_ObjectBase_getbuffer, + .bf_releasebuffer = + EdsLib_Python_ObjectBase_releasebuffer }; + +PyTypeObject EdsLib_Python_ObjectBaseType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("Object"), + .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), + .tp_dealloc = EdsLib_Python_ObjectBase_dealloc, + .tp_init = EdsLib_Python_ObjectBase_init, + .tp_new = PyType_GenericNew, + .tp_repr = EdsLib_Python_ObjectBase_repr, + .tp_call = EdsLib_Python_ObjectBase_call, + .tp_as_buffer = &EdsLib_Python_ObjectBase_BufferProcs, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyDoc_STR("EDS Object") }; + +static void EdsLib_Python_ObjectBase_dealloc(PyObject *obj) { EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; @@ -157,8 +149,7 @@ PyObject *EdsLib_Python_ObjectBase_GenericNew(PyTypeObject *objtype, PyObject *k * so to construct an object it should always be a subtype */ if (!PyType_IsSubtype(objtype, &EdsLib_Python_ObjectBaseType)) { - PyErr_Format(PyExc_TypeError, "Cannot construct EDS objects of type %s\n", - objtype->tp_name); + PyErr_Format(PyExc_TypeError, "Cannot construct EDS objects of type %s\n", objtype->tp_name); break; } @@ -174,18 +165,17 @@ PyObject *EdsLib_Python_ObjectBase_GenericNew(PyTypeObject *objtype, PyObject *k self = NULL; break; } - } - while(0); - + } while (0); return self; } -PyObject *EdsLib_Python_ObjectBase_NewSubObject(PyObject *obj, PyTypeObject *subobjtype, Py_ssize_t Offset, Py_ssize_t MaxSize) +PyObject * +EdsLib_Python_ObjectBase_NewSubObject(PyObject *obj, PyTypeObject *subobjtype, Py_ssize_t Offset, Py_ssize_t MaxSize) { - static const char *kwlist[] = { "buffer", "offset", "maxsize", NULL }; - PyObject *args = NULL; - PyObject *result = NULL; + static const char *kwlist[] = { "buffer", "offset", "maxsize", NULL }; + PyObject *args = NULL; + PyObject *result = NULL; EdsLib_Python_ObjectBase_t *self; /* sanity check -- the type should always be an EDS object */ @@ -197,8 +187,7 @@ PyObject *EdsLib_Python_ObjectBase_NewSubObject(PyObject *obj, PyTypeObject *sub self = (EdsLib_Python_ObjectBase_t *)obj; - args = EdsLib_Python_ObjectBase_BuildKwArgs("Onn", kwlist, - self->StorageBuf, Offset + self->Offset, MaxSize); + args = EdsLib_Python_ObjectBase_BuildKwArgs("Onn", kwlist, self->StorageBuf, Offset + self->Offset, MaxSize); if (args == NULL) { return NULL; @@ -210,15 +199,13 @@ PyObject *EdsLib_Python_ObjectBase_NewSubObject(PyObject *obj, PyTypeObject *sub return result; } - PyObject *EdsLib_Python_ObjectFromBuffer(PyTypeObject *objtype, PyObject *bufobj, int readonly) { static const char *kwlist[] = { "buffer", NULL }; - PyObject *args = NULL; - PyObject *result = NULL; + PyObject *args = NULL; + PyObject *result = NULL; - args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, - EdsLib_Python_Buffer_FromObject(bufobj, readonly)); + args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, EdsLib_Python_Buffer_FromObject(bufobj, readonly)); if (args == NULL) { return NULL; @@ -228,18 +215,15 @@ PyObject *EdsLib_Python_ObjectFromBuffer(PyTypeObject *objtype, PyObject *bufobj Py_DECREF(args); return result; - } - PyObject *EdsLib_Python_ObjectFromPtr(PyTypeObject *objtype, void *ptr, Py_ssize_t size) { static const char *kwlist[] = { "buffer", NULL }; - PyObject *args = NULL; - PyObject *result = NULL; + PyObject *args = NULL; + PyObject *result = NULL; - args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, - EdsLib_Python_Buffer_FromPtrAndSize(ptr, size)); + args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, EdsLib_Python_Buffer_FromPtrAndSize(ptr, size)); if (args == NULL) { return NULL; @@ -254,11 +238,10 @@ PyObject *EdsLib_Python_ObjectFromPtr(PyTypeObject *objtype, void *ptr, Py_ssize PyObject *EdsLib_Python_ObjectNewCopy(PyTypeObject *objtype, const void *ptr, Py_ssize_t size) { static const char *kwlist[] = { "buffer", NULL }; - PyObject *args = NULL; - PyObject *result = NULL; + PyObject *args = NULL; + PyObject *result = NULL; - args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, - EdsLib_Python_Buffer_Copy(ptr, size)); + args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, EdsLib_Python_Buffer_Copy(ptr, size)); if (args == NULL) { return NULL; @@ -273,11 +256,10 @@ PyObject *EdsLib_Python_ObjectNewCopy(PyTypeObject *objtype, const void *ptr, Py PyObject *EdsLib_Python_ObjectFromConstPtr(PyTypeObject *objtype, const void *ptr, Py_ssize_t size) { static const char *kwlist[] = { "buffer", NULL }; - PyObject *args = NULL; - PyObject *result = NULL; + PyObject *args = NULL; + PyObject *result = NULL; - args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, - EdsLib_Python_Buffer_FromConstPtrAndSize(ptr, size)); + args = EdsLib_Python_ObjectBase_BuildKwArgs("N", kwlist, EdsLib_Python_Buffer_FromConstPtrAndSize(ptr, size)); if (args == NULL) { return NULL; @@ -306,14 +288,14 @@ const void *EdsLib_Python_ObjectPeek(PyObject *obj) static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject *kwds) { - static const char *in_kwlist[] = { "value", NULL }; - EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; + static const char *in_kwlist[] = { "value", NULL }; + EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; EdsLib_Binding_DescriptorObject_t viewdesc; - PyObject *srcvalue = NULL; - PyObject *bufobj = NULL; - Py_ssize_t MaxSize = 0; - Py_ssize_t Offset = 0; - int result = -1; + PyObject *srcvalue = NULL; + PyObject *bufobj = NULL; + Py_ssize_t MaxSize = 0; + Py_ssize_t Offset = 0; + int result = -1; /* * First drop any existing buffer (e.g. in case __init__ is invoked directly) @@ -321,26 +303,26 @@ static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject Py_CLEAR(self->StorageBuf); kwds = EdsLib_Python_ObjectBase_InitArgsToKwds(args, kwds, in_kwlist); - args = NULL; /* should no longer be used directly */ + args = NULL; /* should no longer be used directly */ do { - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|O:ObjectBase_init", "value", &srcvalue)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|O:ObjectBase_init", "value", &srcvalue)) { break; } - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|O:ObjectBase_init", "buffer", &bufobj)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|O:ObjectBase_init", "buffer", &bufobj)) { break; } - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|n:ObjectBase_init", "offset", &Offset)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|n:ObjectBase_init", "offset", &Offset)) { break; } - if (!EdsLib_Python_ObjectBase_GetKwArg(kwds,"|n:ObjectBase_init", "maxsize", &MaxSize)) + if (!EdsLib_Python_ObjectBase_GetKwArg(kwds, "|n:ObjectBase_init", "maxsize", &MaxSize)) { break; } @@ -395,7 +377,7 @@ static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject break; } - self->Offset = Offset; + self->Offset = Offset; self->TotalLength = MaxSize; /* @@ -405,8 +387,8 @@ static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject * Note This default approach only works for those objects directly in EDS (DB entries) * For other object types like Dynamic Arrays they will need a custom routine to do this. */ - if (!EdsLib_Python_Buffer_IsInitialized(self->StorageBuf) && - Py_TYPE(Py_TYPE(self)) == &EdsLib_Python_DatabaseEntryType) + if (!EdsLib_Python_Buffer_IsInitialized(self->StorageBuf) + && Py_TYPE(Py_TYPE(self)) == &EdsLib_Python_DatabaseEntryType) { if (!EdsLib_Python_SetupObjectDesciptor(self, &viewdesc, PyBUF_WRITABLE)) { @@ -421,15 +403,13 @@ static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject /* attempt to initialize the new object from the passed in value. * If no srcvalue was provided, do nothing. */ - if (srcvalue != NULL && - !EdsLib_Python_ConvertPythonToEdsObject(self, srcvalue)) + if (srcvalue != NULL && !EdsLib_Python_ConvertPythonToEdsObject(self, srcvalue)) { break; } result = 0; - } - while(0); + } while (0); Py_XDECREF(kwds); @@ -438,8 +418,8 @@ static int EdsLib_Python_ObjectBase_init(PyObject *obj, PyObject *args, PyObject static PyObject *EdsLib_Python_ObjectBase_repr(PyObject *obj) { - PyObject *val; - PyObject *result; + PyObject *val; + PyObject *result; ternaryfunc callfunc = Py_TYPE(obj)->tp_call; if (callfunc == NULL) @@ -471,14 +451,13 @@ static PyObject *EdsLib_Python_ObjectBase_repr(PyObject *obj) Py_DECREF(val); return result; - } static PyObject *EdsLib_Python_ObjectBase_call(PyObject *obj, PyObject *args, PyObject *kwds) { - EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; - PyObject *value = NULL; - PyObject *result; + EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; + PyObject *value = NULL; + PyObject *result; /* * This functions has two modes: @@ -487,8 +466,7 @@ static PyObject *EdsLib_Python_ObjectBase_call(PyObject *obj, PyObject *args, Py * - If an argument is provided, it is a "setter" * In this case it needs a read-write buffer */ - if (args != NULL && - !PyArg_UnpackTuple(args, __func__, 0, 1, &value)) + if (args != NULL && !PyArg_UnpackTuple(args, __func__, 0, 1, &value)) { return NULL; } @@ -516,7 +494,7 @@ static PyObject *EdsLib_Python_ObjectBase_call(PyObject *obj, PyObject *args, Py int EdsLib_Python_ObjectBase_InitBufferView(EdsLib_Python_ObjectBase_t *self, Py_buffer *view, int flags) { - EdsLib_Binding_Buffer_Content_t* content; + EdsLib_Binding_Buffer_Content_t *content; memset(view, 0, sizeof(*view)); @@ -545,16 +523,16 @@ int EdsLib_Python_ObjectBase_InitBufferView(EdsLib_Python_ObjectBase_t *self, Py } /* adjust the view pointer/length to point to the window indicated by the accessor */ - view->obj = (PyObject*)self; + view->obj = (PyObject *)self; Py_INCREF(view->obj); - view->buf = content->Data + self->Offset; - view->len = self->TotalLength; - view->readonly = self->StorageBuf->is_readonly; - view->itemsize = 0; - view->ndim = 0; - view->format = NULL; - view->shape = NULL; - view->strides = NULL; + view->buf = content->Data + self->Offset; + view->len = self->TotalLength; + view->readonly = self->StorageBuf->is_readonly; + view->itemsize = 0; + view->ndim = 0; + view->format = NULL; + view->shape = NULL; + view->strides = NULL; view->suboffsets = NULL; /* @@ -569,7 +547,7 @@ int EdsLib_Python_ObjectBase_InitBufferView(EdsLib_Python_ObjectBase_t *self, Py static int EdsLib_Python_ObjectBase_getbuffer(PyObject *obj, Py_buffer *view, int flags) { - EdsLib_Python_ObjectBase_t * self = (EdsLib_Python_ObjectBase_t *)obj; + EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; if (EdsLib_Python_ObjectBase_InitBufferView(self, view, flags) != 0) { @@ -589,7 +567,7 @@ static int EdsLib_Python_ObjectBase_getbuffer(PyObject *obj, Py_buffer *view, in } if ((flags & PyBUF_ND) == PyBUF_ND) { - view->ndim = 1; + view->ndim = 1; view->shape = &view->len; } if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) @@ -597,7 +575,6 @@ static int EdsLib_Python_ObjectBase_getbuffer(PyObject *obj, Py_buffer *view, in view->strides = &view->itemsize; } - return 0; } @@ -608,9 +585,9 @@ static void EdsLib_Python_ObjectBase_releasebuffer(PyObject *obj, Py_buffer *vie PyObject *EdsLib_Python_ObjectBase_InitArgsToKwds(PyObject *args, PyObject *kwds, const char **kwlist) { - PyObject *subargs; - bool positional_args_valid = (args != NULL && PyTuple_Check(args)); - bool kw_args_valid = (kwds != NULL && PyDict_Check(kwds)); + PyObject *subargs; + bool positional_args_valid = (args != NULL && PyTuple_Check(args)); + bool kw_args_valid = (kwds != NULL && PyDict_Check(kwds)); Py_ssize_t idx; /* @@ -663,8 +640,8 @@ PyObject *EdsLib_Python_ObjectBase_InitArgsToKwds(PyObject *args, PyObject *kwds bool EdsLib_Python_ObjectBase_SetKwArg(PyObject *kwds, const char *format, const char *kw, ...) { PyObject *args; - bool result = false; - va_list va; + bool result = false; + va_list va; /* * First convert the value to a python object, then @@ -674,7 +651,6 @@ bool EdsLib_Python_ObjectBase_SetKwArg(PyObject *kwds, const char *format, const args = Py_VaBuildValue(format, va); va_end(va); - if (args != NULL) { result = (PyDict_SetItemString(kwds, kw, args) == 0); @@ -686,10 +662,10 @@ bool EdsLib_Python_ObjectBase_SetKwArg(PyObject *kwds, const char *format, const PyObject *EdsLib_Python_ObjectBase_BuildKwArgs(const char *format, const char **kwlist, ...) { - PyObject *args = NULL; - PyObject *kwds = NULL; + PyObject *args = NULL; + PyObject *kwds = NULL; Py_ssize_t idx; - va_list va; + va_list va; do { @@ -736,27 +712,24 @@ PyObject *EdsLib_Python_ObjectBase_BuildKwArgs(const char *format, const char ** } } } - else if (kwlist[0] != NULL && - PyDict_SetItemString(kwds, kwlist[0], args) != 0) + else if (kwlist[0] != NULL && PyDict_SetItemString(kwds, kwlist[0], args) != 0) { /* failed to insert -- unlikely but possible */ Py_DECREF(kwds); kwds = NULL; break; } - } - while(0); + } while (0); Py_XDECREF(args); return kwds; } - bool EdsLib_Python_ObjectBase_GetKwArg(PyObject *kwds, const char *format, const char *kw, void *OutPtr) { - bool result; - bool is_optional; + bool result; + bool is_optional; PyObject *item; /* @@ -810,4 +783,3 @@ bool EdsLib_Python_ObjectBase_GetKwArg(PyObject *kwds, const char *format, const return result; } - diff --git a/edslib/python/src/edslib_python_buffer.c b/edslib/python/src/edslib_python_buffer.c index 5bb5b96..068b734 100644 --- a/edslib/python/src/edslib_python_buffer.c +++ b/edslib/python/src/edslib_python_buffer.c @@ -18,33 +18,27 @@ * limitations under the License. */ - /** * \file edslib_python_buffer.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement Python wrapper type for EdsLib buffer objects + ** Implement Python wrapper type for EdsLib buffer objects */ #include "edslib_python_internal.h" -static PyObject * EdsLib_Python_Buffer_repr(PyObject *obj); -static void EdsLib_Python_Buffer_dealloc(PyObject *obj); - -PyTypeObject EdsLib_Python_BufferType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("Buffer"), - .tp_dealloc = EdsLib_Python_Buffer_dealloc, - .tp_basicsize = sizeof(EdsLib_Python_Buffer_t), - .tp_repr = EdsLib_Python_Buffer_repr, - .tp_flags = Py_TPFLAGS_DEFAULT, - .tp_doc = PyDoc_STR("EDS Buffer") -}; +static PyObject *EdsLib_Python_Buffer_repr(PyObject *obj); +static void EdsLib_Python_Buffer_dealloc(PyObject *obj); +PyTypeObject EdsLib_Python_BufferType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = EDSLIB_PYTHON_ENTITY_NAME("Buffer"), + .tp_dealloc = EdsLib_Python_Buffer_dealloc, + .tp_basicsize = sizeof(EdsLib_Python_Buffer_t), + .tp_repr = EdsLib_Python_Buffer_repr, + .tp_flags = Py_TPFLAGS_DEFAULT, + .tp_doc = PyDoc_STR("EDS Buffer") }; -EdsLib_Binding_Buffer_Content_t* EdsLib_Python_Buffer_GetContentRef(EdsLib_Python_Buffer_t *self, int userflags) +EdsLib_Binding_Buffer_Content_t *EdsLib_Python_Buffer_GetContentRef(EdsLib_Python_Buffer_t *self, int userflags) { /* * Confirm writability @@ -84,16 +78,16 @@ EdsLib_Binding_Buffer_Content_t* EdsLib_Python_Buffer_GetContentRef(EdsLib_Pytho return &self->edsbuf; } -void EdsLib_Python_Buffer_ReleaseContentRef(EdsLib_Binding_Buffer_Content_t* ref) +void EdsLib_Python_Buffer_ReleaseContentRef(EdsLib_Binding_Buffer_Content_t *ref) { union { - uint8_t *byte; - const EdsLib_Binding_Buffer_Content_t* ref; - EdsLib_Python_Buffer_t *self; + uint8_t *byte; + const EdsLib_Binding_Buffer_Content_t *ref; + EdsLib_Python_Buffer_t *self; } ptr; - ptr.ref = ref; + ptr.ref = ref; ptr.byte -= offsetof(EdsLib_Python_Buffer_t, edsbuf); if (ptr.self->edsbuf.ReferenceCount > 0) @@ -109,7 +103,7 @@ void EdsLib_Python_Buffer_ReleaseContentRef(EdsLib_Binding_Buffer_Content_t* ref static void EdsLib_Python_Buffer_dealloc(PyObject *obj) { - EdsLib_Python_Buffer_t *self = (EdsLib_Python_Buffer_t*)obj; + EdsLib_Python_Buffer_t *self = (EdsLib_Python_Buffer_t *)obj; if (self->bufobj) { Py_DECREF(self->bufobj->pyobj); @@ -126,25 +120,26 @@ static void EdsLib_Python_Buffer_dealloc(PyObject *obj) static PyObject *EdsLib_Python_Buffer_repr(PyObject *obj) { - EdsLib_Python_Buffer_t *self = (EdsLib_Python_Buffer_t*)obj; - PyObject *result; + EdsLib_Python_Buffer_t *self = (EdsLib_Python_Buffer_t *)obj; + PyObject *result; if (self->bufobj != NULL) { - result = PyUnicode_FromFormat("%s(%R)",obj->ob_type->tp_name,self->bufobj->pyobj); + result = PyUnicode_FromFormat("%s(%R)", obj->ob_type->tp_name, self->bufobj->pyobj); } else { - result = PyUnicode_FromFormat("%s(%p,%zu)",obj->ob_type->tp_name, self->edsbuf.Data, self->edsbuf.MaxContentSize); + result = + PyUnicode_FromFormat("%s(%p,%zu)", obj->ob_type->tp_name, self->edsbuf.Data, self->edsbuf.MaxContentSize); } return result; } -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromObject(PyObject *bufobj, int readonly) +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_FromObject(PyObject *bufobj, int readonly) { - EdsLib_Python_Buffer_t *self = NULL; - EdsLib_Python_View_t *viewobj = NULL; + EdsLib_Python_Buffer_t *self = NULL; + EdsLib_Python_View_t *viewobj = NULL; do { @@ -159,7 +154,7 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromObject(PyObject *bufobj, int re break; } - viewobj = PyMem_Malloc(sizeof(EdsLib_Python_View_t*)); + viewobj = PyMem_Malloc(sizeof(EdsLib_Python_View_t *)); if (viewobj == NULL) { PyErr_NoMemory(); @@ -180,14 +175,13 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromObject(PyObject *bufobj, int re */ memset(viewobj, 0, sizeof(*viewobj)); Py_INCREF(bufobj); - viewobj->pyobj = bufobj; - self->bufobj = viewobj; - self->is_readonly = readonly; - self->is_dynamic = 0; + viewobj->pyobj = bufobj; + self->bufobj = viewobj; + self->is_readonly = readonly; + self->is_dynamic = 0; self->is_initialized = 1; memset(&self->edsbuf, 0, sizeof(self->edsbuf)); - } - while(0); + } while (0); if (self == NULL && viewobj != NULL) { @@ -197,10 +191,10 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromObject(PyObject *bufobj, int re return self; } -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_New(Py_ssize_t len) +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_New(Py_ssize_t len) { - EdsLib_Python_Buffer_t* self; - void *mem; + EdsLib_Python_Buffer_t *self; + void *mem; mem = PyMem_Malloc(len); if (mem == NULL) @@ -218,9 +212,9 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_New(Py_ssize_t len) * Each must be individually set here or else unpredictable * behavior ensues. */ - self->bufobj = NULL; - self->is_readonly = 0; - self->is_dynamic = 1; + self->bufobj = NULL; + self->is_readonly = 0; + self->is_dynamic = 1; self->is_initialized = 0; memset(mem, 0, len); EdsLib_Binding_InitUnmanagedBuffer(&self->edsbuf, mem, len); @@ -233,9 +227,9 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_New(Py_ssize_t len) return self; } -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromPtrAndSize(void *buf, Py_ssize_t len) +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_FromPtrAndSize(void *buf, Py_ssize_t len) { - EdsLib_Python_Buffer_t* self; + EdsLib_Python_Buffer_t *self; self = PyObject_New(EdsLib_Python_Buffer_t, &EdsLib_Python_BufferType); if (self != NULL) @@ -246,9 +240,9 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromPtrAndSize(void *buf, Py_ssize_ * Each must be individually set here or else unpredictable * behavior ensues. */ - self->bufobj = NULL; - self->is_readonly = 0; - self->is_dynamic = 0; + self->bufobj = NULL; + self->is_readonly = 0; + self->is_dynamic = 0; self->is_initialized = 1; EdsLib_Binding_InitUnmanagedBuffer(&self->edsbuf, buf, len); } @@ -256,9 +250,9 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromPtrAndSize(void *buf, Py_ssize_ return self; } -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_Copy(const void *buf, Py_ssize_t len) +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_Copy(const void *buf, Py_ssize_t len) { - EdsLib_Python_Buffer_t* self = (EdsLib_Python_Buffer_t*)EdsLib_Python_Buffer_New(len); + EdsLib_Python_Buffer_t *self = (EdsLib_Python_Buffer_t *)EdsLib_Python_Buffer_New(len); if (self != NULL) { @@ -269,9 +263,9 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_Copy(const void *buf, Py_ssize_t le return self; } -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromConstPtrAndSize(const void *buf, Py_ssize_t len) +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_FromConstPtrAndSize(const void *buf, Py_ssize_t len) { - EdsLib_Python_Buffer_t* self; + EdsLib_Python_Buffer_t *self; self = PyObject_New(EdsLib_Python_Buffer_t, &EdsLib_Python_BufferType); if (self != NULL) @@ -282,17 +276,17 @@ EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromConstPtrAndSize(const void *buf * Each must be individually set here or else unpredictable * behavior ensues. */ - self->bufobj = NULL; - self->is_readonly = 1; - self->is_dynamic = 0; + self->bufobj = NULL; + self->is_readonly = 1; + self->is_dynamic = 0; self->is_initialized = 1; - EdsLib_Binding_InitUnmanagedBuffer(&self->edsbuf, (void*)buf, len); + EdsLib_Binding_InitUnmanagedBuffer(&self->edsbuf, (void *)buf, len); } return self; } -const void *EdsLib_Python_Buffer_Peek(EdsLib_Python_Buffer_t* buf) +const void *EdsLib_Python_Buffer_Peek(EdsLib_Python_Buffer_t *buf) { /* cannot peek into Python-backed objects */ if (buf->bufobj != NULL) @@ -303,10 +297,10 @@ const void *EdsLib_Python_Buffer_Peek(EdsLib_Python_Buffer_t* buf) return buf->edsbuf.Data; } -Py_ssize_t EdsLib_Python_Buffer_GetMaxSize(EdsLib_Python_Buffer_t* buf) +Py_ssize_t EdsLib_Python_Buffer_GetMaxSize(EdsLib_Python_Buffer_t *buf) { EdsLib_Binding_Buffer_Content_t *content; - Py_ssize_t MaxSize = -1; + Py_ssize_t MaxSize = -1; content = EdsLib_Python_Buffer_GetContentRef(buf, PyBUF_SIMPLE); if (content != NULL) @@ -318,13 +312,12 @@ Py_ssize_t EdsLib_Python_Buffer_GetMaxSize(EdsLib_Python_Buffer_t* buf) return MaxSize; } -bool EdsLib_Python_Buffer_IsInitialized(EdsLib_Python_Buffer_t* buf) +bool EdsLib_Python_Buffer_IsInitialized(EdsLib_Python_Buffer_t *buf) { return buf->is_initialized; } -void EdsLib_Python_Buffer_SetInitialized(EdsLib_Python_Buffer_t* buf) +void EdsLib_Python_Buffer_SetInitialized(EdsLib_Python_Buffer_t *buf) { buf->is_initialized = 1; } - diff --git a/edslib/python/src/edslib_python_container.c b/edslib/python/src/edslib_python_container.c index 0d4b493..6245c99 100644 --- a/edslib/python/src/edslib_python_container.c +++ b/edslib/python/src/edslib_python_container.c @@ -18,79 +18,69 @@ * limitations under the License. */ - /** * \file edslib_python_container.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement Python datatype for EDS container objects -** -** This extends the base object with the mapping protocol and an -** iterator that access the attributes + ** Implement Python datatype for EDS container objects + ** + ** This extends the base object with the mapping protocol and an + ** iterator that access the attributes */ #include "edslib_python_internal.h" - -static PyObject * EdsLib_Python_ObjectContainer_keys(PyObject *obj); -static PyObject * EdsLib_Python_ObjectContainer_values(PyObject *obj); -static PyObject * EdsLib_Python_ObjectContainer_items(PyObject *obj); -static PyObject * EdsLib_Python_ObjectContainer_iter(PyObject *obj); -static Py_ssize_t EdsLib_Python_ObjectContainer_map_len(PyObject *obj); - -static void EdsLib_Python_ContainerIterator_dealloc(PyObject * obj); -static int EdsLib_Python_ContainerIterator_traverse(PyObject *obj, visitproc visit, void *arg); -static int EdsLib_Python_ContainerIterator_clear(PyObject *obj); -static PyObject * EdsLib_Python_ContainerIterator_iternext(PyObject *obj); - -static PyMethodDef EdsLib_Python_Database_methods[] = -{ - {"keys", (PyCFunction)EdsLib_Python_ObjectContainer_keys, METH_NOARGS, "Get a list of keys in container"}, - {"values", (PyCFunction)EdsLib_Python_ObjectContainer_values, METH_NOARGS, "Get a list of values in container"}, - {"items", (PyCFunction)EdsLib_Python_ObjectContainer_items, METH_NOARGS, "Get a list of key/value tuples in container"}, - {NULL} /* Sentinel */ -}; - - -static PyMappingMethods EdsLib_Python_EdsContainer_MappingMethods = -{ - .mp_length = EdsLib_Python_ObjectContainer_map_len, - .mp_subscript = PyObject_GenericGetAttr, - .mp_ass_subscript = PyObject_GenericSetAttr +static PyObject *EdsLib_Python_ObjectContainer_keys(PyObject *obj); +static PyObject *EdsLib_Python_ObjectContainer_values(PyObject *obj); +static PyObject *EdsLib_Python_ObjectContainer_items(PyObject *obj); +static PyObject *EdsLib_Python_ObjectContainer_iter(PyObject *obj); +static Py_ssize_t EdsLib_Python_ObjectContainer_map_len(PyObject *obj); + +static void EdsLib_Python_ContainerIterator_dealloc(PyObject *obj); +static int EdsLib_Python_ContainerIterator_traverse(PyObject *obj, visitproc visit, void *arg); +static int EdsLib_Python_ContainerIterator_clear(PyObject *obj); +static PyObject *EdsLib_Python_ContainerIterator_iternext(PyObject *obj); + +static PyMethodDef EdsLib_Python_Database_methods[] = { + { "keys", (PyCFunction)EdsLib_Python_ObjectContainer_keys, METH_NOARGS, "Get a list of keys in container" }, + { "values", (PyCFunction)EdsLib_Python_ObjectContainer_values, METH_NOARGS, "Get a list of values in container" }, + { "items", + (PyCFunction)EdsLib_Python_ObjectContainer_items, + METH_NOARGS, "Get a list of key/value tuples in container" }, + { NULL } /* Sentinel */ }; -PyTypeObject EdsLib_Python_ObjectContainerType = +static PyMappingMethods EdsLib_Python_EdsContainer_MappingMethods = { .mp_length = + EdsLib_Python_ObjectContainer_map_len, + .mp_subscript = PyObject_GenericGetAttr, + .mp_ass_subscript = PyObject_GenericSetAttr }; + +PyTypeObject EdsLib_Python_ObjectContainerType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("Container"), + .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), + .tp_base = &EdsLib_Python_ObjectBaseType, + .tp_as_mapping = &EdsLib_Python_EdsContainer_MappingMethods, + .tp_methods = EdsLib_Python_Database_methods, + .tp_iter = EdsLib_Python_ObjectContainer_iter, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyDoc_STR("EDS ContainerDataType") }; + +PyTypeObject EdsLib_Python_ContainerIteratorType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("ContainerIterator"), + .tp_basicsize = sizeof(EdsLib_Python_ContainerIterator_t), + .tp_dealloc = EdsLib_Python_ContainerIterator_dealloc, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = EdsLib_Python_ContainerIterator_traverse, + .tp_clear = EdsLib_Python_ContainerIterator_clear, + .tp_iter = PyObject_SelfIter, + .tp_iternext = EdsLib_Python_ContainerIterator_iternext, + .tp_doc = PyDoc_STR("EDS ContainerIteratorType") }; + +static void EdsLib_Python_ContainerIterator_dealloc(PyObject *obj) { - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("Container"), - .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), - .tp_base = &EdsLib_Python_ObjectBaseType, - .tp_as_mapping = &EdsLib_Python_EdsContainer_MappingMethods, - .tp_methods = EdsLib_Python_Database_methods, - .tp_iter = EdsLib_Python_ObjectContainer_iter, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - .tp_doc = PyDoc_STR("EDS ContainerDataType") -}; - -PyTypeObject EdsLib_Python_ContainerIteratorType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("ContainerIterator"), - .tp_basicsize = sizeof(EdsLib_Python_ContainerIterator_t), - .tp_dealloc = EdsLib_Python_ContainerIterator_dealloc, - .tp_getattro = PyObject_GenericGetAttr, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, - .tp_traverse = EdsLib_Python_ContainerIterator_traverse, - .tp_clear = EdsLib_Python_ContainerIterator_clear, - .tp_iter = PyObject_SelfIter, - .tp_iternext = EdsLib_Python_ContainerIterator_iternext, - .tp_doc = PyDoc_STR("EDS ContainerIteratorType") -}; - -static void EdsLib_Python_ContainerIterator_dealloc(PyObject * obj) -{ - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; PyObject_GC_UnTrack(self); Py_XDECREF(self->refobj); PyObject_GC_Del(self); @@ -98,25 +88,25 @@ static void EdsLib_Python_ContainerIterator_dealloc(PyObject * obj) static int EdsLib_Python_ContainerIterator_traverse(PyObject *obj, visitproc visit, void *arg) { - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; Py_VISIT(self->refobj); return 0; } static int EdsLib_Python_ContainerIterator_clear(PyObject *obj) { - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; Py_CLEAR(self->refobj); return 0; } static PyObject *EdsLib_Python_ContainerIterator_iternext(PyObject *obj) { - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; - EdsLib_Python_DatabaseEntry_t *dbent = NULL; - PyObject *key = NULL; - PyObject *value = NULL; - PyObject *result = NULL; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; + EdsLib_Python_DatabaseEntry_t *dbent = NULL; + PyObject *key = NULL; + PyObject *value = NULL; + PyObject *result = NULL; do { @@ -147,8 +137,7 @@ static PyObject *EdsLib_Python_ContainerIterator_iternext(PyObject *obj) } result = PyTuple_Pack(2, key, value); - } - while(0); + } while (0); Py_XDECREF(key); Py_XDECREF(value); @@ -159,10 +148,10 @@ static PyObject *EdsLib_Python_ContainerIterator_iternext(PyObject *obj) static PyObject *EdsLib_Python_ObjectContainer_keys(PyObject *obj) { EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj->ob_type; - Py_ssize_t idx; - Py_ssize_t size; - PyObject *key; - PyObject *result; + Py_ssize_t idx; + Py_ssize_t size; + PyObject *key; + PyObject *result; /* sanity check that the db entry has a valid subentry list (it should for all containers) */ if (dbent->SubEntityList == NULL || !PyList_Check(dbent->SubEntityList)) @@ -170,7 +159,7 @@ static PyObject *EdsLib_Python_ObjectContainer_keys(PyObject *obj) return PyErr_Format(PyExc_TypeError, "%s is not a mappable EDS type", Py_TYPE(obj)->tp_name); } - size = PyList_GET_SIZE(dbent->SubEntityList); + size = PyList_GET_SIZE(dbent->SubEntityList); result = PyList_New(size); if (result == NULL) { @@ -182,13 +171,13 @@ static PyObject *EdsLib_Python_ObjectContainer_keys(PyObject *obj) * If the list were ever modified, bad things would happen. */ for (idx = 0; idx < size; ++idx) { - key = PyList_GET_ITEM(dbent->SubEntityList, idx); /* borrowed ref */ + key = PyList_GET_ITEM(dbent->SubEntityList, idx); /* borrowed ref */ if (key == NULL) { key = Py_None; } - Py_INCREF(key); /* compensate for stealing */ - PyList_SET_ITEM(result, idx, key); /* steals ref */ + Py_INCREF(key); /* compensate for stealing */ + PyList_SET_ITEM(result, idx, key); /* steals ref */ } return result; @@ -197,18 +186,18 @@ static PyObject *EdsLib_Python_ObjectContainer_keys(PyObject *obj) static PyObject *EdsLib_Python_ObjectContainer_values(PyObject *obj) { EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj->ob_type; - Py_ssize_t idx; - Py_ssize_t size; - PyObject *val; - PyObject *key; - PyObject *result; + Py_ssize_t idx; + Py_ssize_t size; + PyObject *val; + PyObject *key; + PyObject *result; if (dbent->SubEntityList == NULL || !PyList_Check(dbent->SubEntityList)) { return PyErr_Format(PyExc_TypeError, "%s is not a mappable EDS type", Py_TYPE(obj)->tp_name); } - size = PyList_GET_SIZE(dbent->SubEntityList); + size = PyList_GET_SIZE(dbent->SubEntityList); result = PyList_New(size); if (result == NULL) { @@ -217,10 +206,10 @@ static PyObject *EdsLib_Python_ObjectContainer_values(PyObject *obj) for (idx = 0; idx < size; ++idx) { - key = PyList_GET_ITEM(dbent->SubEntityList, idx); /* borrowed ref */ + key = PyList_GET_ITEM(dbent->SubEntityList, idx); /* borrowed ref */ if (key != NULL) { - val = PyObject_GetAttr(obj, key); /* new ref */ + val = PyObject_GetAttr(obj, key); /* new ref */ } else { @@ -232,7 +221,7 @@ static PyObject *EdsLib_Python_ObjectContainer_values(PyObject *obj) val = Py_None; Py_INCREF(val); } - PyList_SET_ITEM(result, idx, val); /* steals ref */ + PyList_SET_ITEM(result, idx, val); /* steals ref */ } return result; @@ -241,19 +230,19 @@ static PyObject *EdsLib_Python_ObjectContainer_values(PyObject *obj) static PyObject *EdsLib_Python_ObjectContainer_items(PyObject *obj) { EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj->ob_type; - Py_ssize_t idx; - Py_ssize_t size; - PyObject *item; - PyObject *val; - PyObject *key; - PyObject *result; + Py_ssize_t idx; + Py_ssize_t size; + PyObject *item; + PyObject *val; + PyObject *key; + PyObject *result; if (dbent->SubEntityList == NULL || !PyList_Check(dbent->SubEntityList)) { return PyErr_Format(PyExc_TypeError, "%s is not a mappable EDS type", Py_TYPE(obj)->tp_name); } - size = PyList_GET_SIZE(dbent->SubEntityList); + size = PyList_GET_SIZE(dbent->SubEntityList); result = PyList_New(size); if (result == NULL) { @@ -262,10 +251,10 @@ static PyObject *EdsLib_Python_ObjectContainer_items(PyObject *obj) for (idx = 0; idx < size; ++idx) { - key = PyList_GET_ITEM(dbent->SubEntityList, idx); /* borrowed ref */ + key = PyList_GET_ITEM(dbent->SubEntityList, idx); /* borrowed ref */ if (key != NULL) { - val = PyObject_GetAttr(obj, key); /* new ref */ + val = PyObject_GetAttr(obj, key); /* new ref */ } else { @@ -281,30 +270,30 @@ static PyObject *EdsLib_Python_ObjectContainer_items(PyObject *obj) item = PyTuple_Pack(2, key, val); if (item != NULL) { - PyList_SET_ITEM(result, idx, item); /* steals ref to item */ + PyList_SET_ITEM(result, idx, item); /* steals ref to item */ } - Py_DECREF(val); /* release val ref */ + Py_DECREF(val); /* release val ref */ } return result; } -static Py_ssize_t EdsLib_Python_ObjectContainer_map_len(PyObject *obj) +static Py_ssize_t EdsLib_Python_ObjectContainer_map_len(PyObject *obj) { EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj->ob_type; - lenfunc lenf = dbent->type_base.as_sequence.sq_length; + lenfunc lenf = dbent->type_base.as_sequence.sq_length; if (lenf == NULL) { return 0; } - return lenf((PyObject*)dbent); + return lenf((PyObject *)dbent); } -static PyObject * EdsLib_Python_ObjectContainer_iter(PyObject *obj) +static PyObject *EdsLib_Python_ObjectContainer_iter(PyObject *obj) { - EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj->ob_type; + EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj->ob_type; EdsLib_Python_ContainerIterator_t *result; /* sanity check that the db entry has a valid subentry list (it should for all containers) */ @@ -324,5 +313,5 @@ static PyObject * EdsLib_Python_ObjectContainer_iter(PyObject *obj) result->refobj = obj; PyObject_GC_Track(result); - return (PyObject*)result; + return (PyObject *)result; } diff --git a/edslib/python/src/edslib_python_conversions.c b/edslib/python/src/edslib_python_conversions.c index be3caf8..8259ec7 100644 --- a/edslib/python/src/edslib_python_conversions.c +++ b/edslib/python/src/edslib_python_conversions.c @@ -18,13 +18,12 @@ * limitations under the License. */ - /** * \file edslib_python_conversions.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement conversion routines for EDS/Python objects + ** Implement conversion routines for EDS/Python objects */ #include "edslib_python_internal.h" @@ -37,7 +36,7 @@ typedef struct { EdsLib_Binding_DescriptorObject_t desc; - PyObject *pyobj; + PyObject *pyobj; } EdsLib_Python_ObjectConversionState_t; /* @@ -49,10 +48,11 @@ typedef struct static void EdsLib_Python_ConvertEdsObjectToPythonImpl(EdsLib_Python_ObjectConversionState_t *ConvPair); static void EdsLib_Python_ConvertPythonToEdsObjectImpl(EdsLib_Python_ObjectConversionState_t *ConvPair); -static int EdsLib_Python_InitBindingDescriptorObject(EdsLib_Python_ObjectBase_t *self, EdsLib_Binding_DescriptorObject_t *desc) +static int EdsLib_Python_InitBindingDescriptorObject(EdsLib_Python_ObjectBase_t *self, + EdsLib_Binding_DescriptorObject_t *desc) { EdsLib_Python_DatabaseEntry_t *dbent; - int32_t Status; + int32_t Status; /* * EdsLib Binding descriptor objects can only be generated from @@ -76,10 +76,10 @@ static int EdsLib_Python_InitBindingDescriptorObject(EdsLib_Python_ObjectBase_t return 0; } - desc->GD = dbent->EdsDb->GD; - desc->EdsId = dbent->EdsId; - desc->Offset = self->Offset; - desc->Length = self->TotalLength; + desc->GD = dbent->EdsDb->GD; + desc->EdsId = dbent->EdsId; + desc->Offset = self->Offset; + desc->Length = self->TotalLength; desc->BufferPtr = NULL; return 1; @@ -88,7 +88,7 @@ static int EdsLib_Python_InitBindingDescriptorObject(EdsLib_Python_ObjectBase_t static void EdsLib_Python_ConvertPyMembers_Callback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) { EdsLib_Python_ObjectConversionState_t *ParentConv = Arg; - EdsLib_Python_ObjectConversionState_t subpair; + EdsLib_Python_ObjectConversionState_t subpair; /* Any conversion error should have set an exception/error context. * To avoid triggering multiple exceptions, this is a no-op after the first error */ @@ -103,10 +103,9 @@ static void EdsLib_Python_ConvertPyMembers_Callback(void *Arg, const EdsLib_Enti if (ParamDesc->FullName != NULL && PyMapping_Check(ParentConv->pyobj)) { /* new ref */ - subpair.pyobj = PyMapping_GetItemString(ParentConv->pyobj, (char*)ParamDesc->FullName); + subpair.pyobj = PyMapping_GetItemString(ParentConv->pyobj, (char *)ParamDesc->FullName); } - else if (PySequence_Check(ParentConv->pyobj) && - ParamDesc->SeqNum < PySequence_Size(ParentConv->pyobj)) + else if (PySequence_Check(ParentConv->pyobj) && ParamDesc->SeqNum < PySequence_Size(ParentConv->pyobj)) { /* Use sequence protocol as a backup, which handles normal EDS arrays * or python lists being assigned to EDS containers */ @@ -134,7 +133,7 @@ static void EdsLib_Python_ConvertPyMembers_Callback(void *Arg, const EdsLib_Enti static void EdsLib_Python_ConvertEdsMembers_Callback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) { EdsLib_Python_ObjectConversionState_t *ParentConv = Arg; - EdsLib_Python_ObjectConversionState_t subpair; + EdsLib_Python_ObjectConversionState_t subpair; /* Any conversion error should have set an exception/error context */ if (PyErr_Occurred() == NULL) @@ -161,7 +160,7 @@ static void EdsLib_Python_ConvertEdsMembers_Callback(void *Arg, const EdsLib_Ent { /* If there is a named index then use it * The python object should always be a Dictionary in this case */ - PyDict_SetItemString(ParentConv->pyobj, (char*)ParamDesc->FullName, subpair.pyobj); + PyDict_SetItemString(ParentConv->pyobj, (char *)ParamDesc->FullName, subpair.pyobj); Py_DECREF(subpair.pyobj); } else @@ -186,16 +185,17 @@ static void EdsLib_Python_ConvertEdsObjectToPythonImpl(EdsLib_Python_ObjectConve { ConvPair->pyobj = PyList_New(ConvPair->desc.TypeInfo.NumSubElements); } - else if (ConvPair->desc.TypeInfo.ElemType == EDSLIB_BASICTYPE_CONTAINER || - ConvPair->desc.TypeInfo.ElemType == EDSLIB_BASICTYPE_COMPONENT) + else if (ConvPair->desc.TypeInfo.ElemType == EDSLIB_BASICTYPE_CONTAINER + || ConvPair->desc.TypeInfo.ElemType == EDSLIB_BASICTYPE_COMPONENT) { ConvPair->pyobj = PyDict_New(); } else { - PyErr_Format(PyExc_RuntimeError, "Cannot map %s/%s to a python type", - EdsLib_DisplayDB_GetNamespace(ConvPair->desc.GD, ConvPair->desc.EdsId), - EdsLib_DisplayDB_GetBaseName(ConvPair->desc.GD, ConvPair->desc.EdsId)); + PyErr_Format(PyExc_RuntimeError, + "Cannot map %s/%s to a python type", + EdsLib_DisplayDB_GetNamespace(ConvPair->desc.GD, ConvPair->desc.EdsId), + EdsLib_DisplayDB_GetBaseName(ConvPair->desc.GD, ConvPair->desc.EdsId)); ConvPair->pyobj = NULL; } @@ -205,8 +205,10 @@ static void EdsLib_Python_ConvertEdsObjectToPythonImpl(EdsLib_Python_ObjectConve */ if (ConvPair->pyobj != NULL && ConvPair->desc.TypeInfo.NumSubElements > 0) { - EdsLib_DisplayDB_IterateBaseEntities(ConvPair->desc.GD, ConvPair->desc.EdsId, - EdsLib_Python_ConvertEdsMembers_Callback, ConvPair); + EdsLib_DisplayDB_IterateBaseEntities(ConvPair->desc.GD, + ConvPair->desc.EdsId, + EdsLib_Python_ConvertEdsMembers_Callback, + ConvPair); } } @@ -221,7 +223,8 @@ static int EdsLib_Python_CopyEdsObjectPacked(EdsLib_Python_ObjectConversionState } Status = EdsLib_Binding_InitFromPackedBuffer(&ConvPair->desc, - PyBytes_AsString(ConvPair->pyobj), PyBytes_Size(ConvPair->pyobj)); + PyBytes_AsString(ConvPair->pyobj), + PyBytes_Size(ConvPair->pyobj)); if (Status != EDSLIB_SUCCESS) { @@ -259,16 +262,14 @@ static int EdsLib_Python_CopyEdsObjectDirect(EdsLib_Python_ObjectConversionState * any trailing data. */ size_t DstSize = EdsLib_Binding_GetNativeSize(&ConvPair->desc); size_t SrcSize = EdsLib_Binding_GetNativeSize(&srcobj); - char *DstPtr = EdsLib_Binding_GetNativeObject(&ConvPair->desc); + char *DstPtr = EdsLib_Binding_GetNativeObject(&ConvPair->desc); if (DstSize < SrcSize) { SrcSize = DstSize; } - memcpy(DstPtr, - EdsLib_Binding_GetNativeObject(&srcobj), - SrcSize); + memcpy(DstPtr, EdsLib_Binding_GetNativeObject(&srcobj), SrcSize); if (SrcSize < DstSize) { @@ -292,17 +293,18 @@ static void EdsLib_Python_ConvertPythonToEdsObjectImpl(EdsLib_Python_ObjectConve * * For all other types of python objects, call the regular conversion routine. */ - if (ConvPair->pyobj == Py_None || - EdsLib_Python_CopyEdsObjectPacked(ConvPair) || - EdsLib_Python_CopyEdsObjectDirect(ConvPair)) + if (ConvPair->pyobj == Py_None || EdsLib_Python_CopyEdsObjectPacked(ConvPair) + || EdsLib_Python_CopyEdsObjectDirect(ConvPair)) { /* no-op */ } else if (ConvPair->desc.TypeInfo.NumSubElements > 0) { /* Convert all sub-entities (will recuse back to this function for each item) */ - EdsLib_DisplayDB_IterateBaseEntities(ConvPair->desc.GD, ConvPair->desc.EdsId, - EdsLib_Python_ConvertPyMembers_Callback, ConvPair); + EdsLib_DisplayDB_IterateBaseEntities(ConvPair->desc.GD, + ConvPair->desc.EdsId, + EdsLib_Python_ConvertPyMembers_Callback, + ConvPair); } else { @@ -311,21 +313,19 @@ static void EdsLib_Python_ConvertPythonToEdsObjectImpl(EdsLib_Python_ObjectConve } } - - PyObject *EdsLib_Python_ConvertEdsScalarToPython(EdsLib_Binding_DescriptorObject_t *edsobj) { - EdsLib_DisplayHint_t DispHint; - const char *Ptr; - size_t ActualSize; + EdsLib_DisplayHint_t DispHint; + const char *Ptr; + size_t ActualSize; EdsLib_GenericValueBuffer_t ValueBuff; - char StringBuffer[256]; - PyObject *result; + char StringBuffer[256]; + PyObject *result; - Ptr = EdsLib_Binding_GetNativeObject(edsobj); + Ptr = EdsLib_Binding_GetNativeObject(edsobj); ActualSize = EdsLib_Binding_GetNativeSize(edsobj); - DispHint = EdsLib_DisplayDB_GetDisplayHint(edsobj->GD, edsobj->EdsId); - result = NULL; + DispHint = EdsLib_DisplayDB_GetDisplayHint(edsobj->GD, edsobj->EdsId); + result = NULL; if (edsobj->TypeInfo.ElemType == EDSLIB_BASICTYPE_BINARY) { @@ -347,9 +347,9 @@ PyObject *EdsLib_Python_ConvertEdsScalarToPython(EdsLib_Binding_DescriptorObject } else { - if (DispHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE && - EdsLib_Scalar_ToString(edsobj->GD, edsobj->EdsId, - StringBuffer, sizeof(StringBuffer), Ptr) == EDSLIB_SUCCESS) + if (DispHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE + && EdsLib_Scalar_ToString(edsobj->GD, edsobj->EdsId, StringBuffer, sizeof(StringBuffer), Ptr) + == EDSLIB_SUCCESS) { result = PyUnicode_FromString(StringBuffer); } @@ -357,35 +357,35 @@ PyObject *EdsLib_Python_ConvertEdsScalarToPython(EdsLib_Binding_DescriptorObject { EdsLib_Binding_LoadValue(edsobj, &ValueBuff); - switch(ValueBuff.ValueType) + switch (ValueBuff.ValueType) { - case EDSLIB_BASICTYPE_SIGNED_INT: - if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) - { - /* preserve the boolean nature of the integer field */ - result = PyBool_FromLong(ValueBuff.Value.SignedInteger); - } - else - { - result = PyLong_FromLongLong(ValueBuff.Value.SignedInteger); - } - break; - case EDSLIB_BASICTYPE_UNSIGNED_INT: - if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) - { - /* preserve the boolean nature of the integer field */ - result = PyBool_FromLong(ValueBuff.Value.UnsignedInteger); - } - else - { - result = PyLong_FromUnsignedLongLong(ValueBuff.Value.UnsignedInteger); - } - break; - case EDSLIB_BASICTYPE_FLOAT: - result = PyFloat_FromDouble(ValueBuff.Value.FloatingPoint); - break; - default: - break; + case EDSLIB_BASICTYPE_SIGNED_INT: + if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) + { + /* preserve the boolean nature of the integer field */ + result = PyBool_FromLong(ValueBuff.Value.SignedInteger); + } + else + { + result = PyLong_FromLongLong(ValueBuff.Value.SignedInteger); + } + break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + if (DispHint == EDSLIB_DISPLAYHINT_BOOLEAN) + { + /* preserve the boolean nature of the integer field */ + result = PyBool_FromLong(ValueBuff.Value.UnsignedInteger); + } + else + { + result = PyLong_FromUnsignedLongLong(ValueBuff.Value.UnsignedInteger); + } + break; + case EDSLIB_BASICTYPE_FLOAT: + result = PyFloat_FromDouble(ValueBuff.Value.FloatingPoint); + break; + default: + break; } } } @@ -393,20 +393,19 @@ PyObject *EdsLib_Python_ConvertEdsScalarToPython(EdsLib_Binding_DescriptorObject return result; } - bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *edsobj, PyObject *pyobj) { - char *Ptr; - size_t ActualSize; + char *Ptr; + size_t ActualSize; EdsLib_GenericValueBuffer_t ValueBuff; - PyObject *ReprObj = NULL; - PyObject *BytesObj = NULL; - PyObject *NumberObj = NULL; - bool success = false; + PyObject *ReprObj = NULL; + PyObject *BytesObj = NULL; + PyObject *NumberObj = NULL; + bool success = false; - Ptr = EdsLib_Binding_GetNativeObject(edsobj); + Ptr = EdsLib_Binding_GetNativeObject(edsobj); ActualSize = EdsLib_Binding_GetNativeSize(edsobj); - memset(&ValueBuff,0,sizeof(ValueBuff)); + memset(&ValueBuff, 0, sizeof(ValueBuff)); /* * First check if a string or string-like object was supplied by the caller. @@ -433,40 +432,39 @@ bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *e if (edsobj->TypeInfo.ElemType == EDSLIB_BASICTYPE_UNSIGNED_INT) { ValueBuff.Value.UnsignedInteger = PyInt_AsUnsignedLongMask(pyobj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; } else { ValueBuff.Value.SignedInteger = PyInt_AsLong(pyobj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; } } #endif else if (PyBool_Check(pyobj)) { ValueBuff.Value.UnsignedInteger = (pyobj == Py_True); - ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; } else if (PyLong_Check(pyobj)) { if (edsobj->TypeInfo.ElemType == EDSLIB_BASICTYPE_UNSIGNED_INT) { ValueBuff.Value.UnsignedInteger = PyLong_AsUnsignedLongLong(pyobj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; } else { ValueBuff.Value.SignedInteger = PyLong_AsLongLong(pyobj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; } } else if (PyFloat_Check(pyobj)) { ValueBuff.Value.FloatingPoint = PyFloat_AsDouble(pyobj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_FLOAT; + ValueBuff.ValueType = EDSLIB_BASICTYPE_FLOAT; } - /* * Depending on the desired/wanted data type, if the simple conversion above * did not produce a usable value, then try a backup approach. @@ -474,34 +472,34 @@ bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *e */ if (ValueBuff.ValueType == EDSLIB_BASICTYPE_NONE && PyNumber_Check(pyobj)) { - switch(edsobj->TypeInfo.ElemType) + switch (edsobj->TypeInfo.ElemType) { - case EDSLIB_BASICTYPE_SIGNED_INT: - NumberObj = PyNumber_Long(pyobj); - if (NumberObj != NULL) - { - ValueBuff.Value.SignedInteger = PyLong_AsLongLong(NumberObj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; - } - break; - case EDSLIB_BASICTYPE_UNSIGNED_INT: - NumberObj = PyNumber_Long(pyobj); - if (NumberObj != NULL) - { - ValueBuff.Value.UnsignedInteger = PyLong_AsUnsignedLongLong(NumberObj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; - } - break; - case EDSLIB_BASICTYPE_FLOAT: - NumberObj = PyNumber_Float(pyobj); - if (NumberObj != NULL) - { - ValueBuff.Value.FloatingPoint = PyFloat_AsDouble(NumberObj); - ValueBuff.ValueType = EDSLIB_BASICTYPE_FLOAT; - } - break; - default: - break; + case EDSLIB_BASICTYPE_SIGNED_INT: + NumberObj = PyNumber_Long(pyobj); + if (NumberObj != NULL) + { + ValueBuff.Value.SignedInteger = PyLong_AsLongLong(NumberObj); + ValueBuff.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + } + break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + NumberObj = PyNumber_Long(pyobj); + if (NumberObj != NULL) + { + ValueBuff.Value.UnsignedInteger = PyLong_AsUnsignedLongLong(NumberObj); + ValueBuff.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + } + break; + case EDSLIB_BASICTYPE_FLOAT: + NumberObj = PyNumber_Float(pyobj); + if (NumberObj != NULL) + { + ValueBuff.Value.FloatingPoint = PyFloat_AsDouble(NumberObj); + ValueBuff.ValueType = EDSLIB_BASICTYPE_FLOAT; + } + break; + default: + break; } } @@ -511,9 +509,8 @@ bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *e * the EdsLib FromString function can parse it. This should, for instance, * handle coercion of Python numbers into EDS strings where needed. */ - if (BytesObj == NULL && - (ValueBuff.ValueType == EDSLIB_BASICTYPE_NONE || - edsobj->TypeInfo.ElemType == EDSLIB_BASICTYPE_BINARY)) + if (BytesObj == NULL + && (ValueBuff.ValueType == EDSLIB_BASICTYPE_NONE || edsobj->TypeInfo.ElemType == EDSLIB_BASICTYPE_BINARY)) { ReprObj = PyObject_Repr(pyobj); if (ReprObj != NULL) @@ -554,8 +551,7 @@ bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *e } success = true; } - else if(EdsLib_Scalar_FromString(edsobj->GD, edsobj->EdsId, - Ptr, PyBytes_AsString(BytesObj)) == EDSLIB_SUCCESS) + else if (EdsLib_Scalar_FromString(edsobj->GD, edsobj->EdsId, Ptr, PyBytes_AsString(BytesObj)) == EDSLIB_SUCCESS) { success = true; } @@ -576,8 +572,10 @@ bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *e if (!success) { - PyErr_Format(PyExc_TypeError, "Cannot initialize %s from %s", - EdsLib_DisplayDB_GetBaseName(edsobj->GD, edsobj->EdsId), pyobj->ob_type->tp_name); + PyErr_Format(PyExc_TypeError, + "Cannot initialize %s from %s", + EdsLib_DisplayDB_GetBaseName(edsobj->GD, edsobj->EdsId), + pyobj->ob_type->tp_name); } return success; @@ -589,7 +587,7 @@ bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *e PyObject *EdsLib_Python_ConvertEdsObjectToPython(EdsLib_Python_ObjectBase_t *self) { EdsLib_Python_ObjectConversionState_t ConvPair; - EdsLib_Binding_Buffer_Content_t* content = NULL; + EdsLib_Binding_Buffer_Content_t *content = NULL; memset(&ConvPair, 0, sizeof(ConvPair)); @@ -628,8 +626,7 @@ PyObject *EdsLib_Python_ConvertEdsObjectToPython(EdsLib_Python_ObjectBase_t *sel * If unsuccessful, it will set an exception before returning. */ EdsLib_Python_ConvertEdsObjectToPythonImpl(&ConvPair); - } - while(0); + } while (0); /* be sure to release window reference before returning */ if (content != NULL) @@ -647,8 +644,8 @@ PyObject *EdsLib_Python_ConvertEdsObjectToPython(EdsLib_Python_ObjectBase_t *sel bool EdsLib_Python_ConvertPythonToEdsObject(EdsLib_Python_ObjectBase_t *self, PyObject *pyobj) { EdsLib_Python_ObjectConversionState_t ConvPair; - EdsLib_Binding_Buffer_Content_t *content = NULL; - bool success = false; + EdsLib_Binding_Buffer_Content_t *content = NULL; + bool success = false; memset(&ConvPair, 0, sizeof(ConvPair)); @@ -694,8 +691,7 @@ bool EdsLib_Python_ConvertPythonToEdsObject(EdsLib_Python_ObjectBase_t *self, Py */ EdsLib_Python_ConvertPythonToEdsObjectImpl(&ConvPair); success = (PyErr_Occurred() == NULL); - } - while(0); + } while (0); /* be sure to release window reference before returning */ if (content != NULL) @@ -707,7 +703,9 @@ bool EdsLib_Python_ConvertPythonToEdsObject(EdsLib_Python_ObjectBase_t *self, Py return success; } -int EdsLib_Python_SetupObjectDesciptor(EdsLib_Python_ObjectBase_t *self, EdsLib_Binding_DescriptorObject_t *descobj, int flags) +int EdsLib_Python_SetupObjectDesciptor(EdsLib_Python_ObjectBase_t *self, + EdsLib_Binding_DescriptorObject_t *descobj, + int flags) { EdsLib_Binding_Buffer_Content_t *content; @@ -743,13 +741,13 @@ void EdsLib_Python_ReleaseObjectDesciptor(EdsLib_Binding_DescriptorObject_t *des } } -EdsLib_Id_t EdsLib_Python_ConvertArgToEdsId(const EdsLib_DatabaseObject_t *GD, PyObject* arg) +EdsLib_Id_t EdsLib_Python_ConvertArgToEdsId(const EdsLib_DatabaseObject_t *GD, PyObject *arg) { EdsLib_Id_t Result; - PyObject *temp_id; + PyObject *temp_id; temp_id = NULL; - Result = EDSLIB_ID_INVALID; + Result = EDSLIB_ID_INVALID; /* * The identifier might come from the python interpreter as a string or number. diff --git a/edslib/python/src/edslib_python_database.c b/edslib/python/src/edslib_python_database.c index 259d491..cb913c8 100644 --- a/edslib/python/src/edslib_python_database.c +++ b/edslib/python/src/edslib_python_database.c @@ -35,51 +35,45 @@ PyObject *EdsLib_Python_DatabaseCache = NULL; -static void EdsLib_Python_Database_dealloc(PyObject * obj); -static PyObject * EdsLib_Python_Database_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); -static PyObject * EdsLib_Python_Database_repr(PyObject *obj); -static int EdsLib_Python_Database_traverse(PyObject *obj, visitproc visit, void *arg); -static int EdsLib_Python_Database_clear(PyObject *obj); - -static PyObject * EdsLib_Python_Database_getentry(PyObject *obj, PyObject *key); -static PyObject * EdsLib_Python_Database_IsContainer(PyObject *obj, PyObject *arg); -static PyObject * EdsLib_Python_Database_IsArray(PyObject *obj, PyObject *arg); -static PyObject * EdsLib_Python_Database_IsNumber(PyObject *obj, PyObject *arg); -static PyObject * EdsLib_Python_Database_IsEnum(PyObject *obj, PyObject *arg); - -static PyMethodDef EdsLib_Python_Database_methods[] = -{ - {"Entry", EdsLib_Python_Database_getentry, METH_O, "Lookup an EDS type from DB."}, - {"IsContainer", EdsLib_Python_Database_IsContainer, METH_O, "Check if an object is a container."}, - {"IsArray", EdsLib_Python_Database_IsArray, METH_O, "Check if an object is an array."}, - {"IsNumber", EdsLib_Python_Database_IsNumber, METH_O, "Check if an object is a number."}, - {"IsEnum", EdsLib_Python_Database_IsEnum, METH_O, "Check if a database entry is an enumeration."}, - {NULL} /* Sentinel */ +static void EdsLib_Python_Database_dealloc(PyObject *obj); +static PyObject *EdsLib_Python_Database_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); +static PyObject *EdsLib_Python_Database_repr(PyObject *obj); +static int EdsLib_Python_Database_traverse(PyObject *obj, visitproc visit, void *arg); +static int EdsLib_Python_Database_clear(PyObject *obj); + +static PyObject *EdsLib_Python_Database_getentry(PyObject *obj, PyObject *key); +static PyObject *EdsLib_Python_Database_IsContainer(PyObject *obj, PyObject *arg); +static PyObject *EdsLib_Python_Database_IsArray(PyObject *obj, PyObject *arg); +static PyObject *EdsLib_Python_Database_IsNumber(PyObject *obj, PyObject *arg); +static PyObject *EdsLib_Python_Database_IsEnum(PyObject *obj, PyObject *arg); + +static PyMethodDef EdsLib_Python_Database_methods[] = { + { "Entry", EdsLib_Python_Database_getentry, METH_O, "Lookup an EDS type from DB." }, + { "IsContainer", EdsLib_Python_Database_IsContainer, METH_O, "Check if an object is a container." }, + { "IsArray", EdsLib_Python_Database_IsArray, METH_O, "Check if an object is an array." }, + { "IsNumber", EdsLib_Python_Database_IsNumber, METH_O, "Check if an object is a number." }, + { "IsEnum", EdsLib_Python_Database_IsEnum, METH_O, "Check if a database entry is an enumeration." }, + { NULL } /* Sentinel */ }; -static struct PyMemberDef EdsLib_Python_Database_members[] = -{ - {"Name", T_OBJECT_EX, offsetof(EdsLib_Python_Database_t, DbName), READONLY, "Database Name" }, - {NULL} /* Sentinel */ +static struct PyMemberDef EdsLib_Python_Database_members[] = { + { "Name", T_OBJECT_EX, offsetof(EdsLib_Python_Database_t, DbName), READONLY, "Database Name" }, + { NULL } /* Sentinel */ }; - -PyTypeObject EdsLib_Python_DatabaseType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("Database"), - .tp_basicsize = sizeof(EdsLib_Python_Database_t), - .tp_dealloc = EdsLib_Python_Database_dealloc, - .tp_new = EdsLib_Python_Database_new, - .tp_methods = EdsLib_Python_Database_methods, - .tp_members = EdsLib_Python_Database_members, - .tp_repr = EdsLib_Python_Database_repr, - .tp_traverse = EdsLib_Python_Database_traverse, - .tp_clear = EdsLib_Python_Database_clear, - .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC, - .tp_weaklistoffset = offsetof(EdsLib_Python_Database_t, WeakRefList), - .tp_doc = "EDS database" -}; +PyTypeObject EdsLib_Python_DatabaseType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("Database"), + .tp_basicsize = sizeof(EdsLib_Python_Database_t), + .tp_dealloc = EdsLib_Python_Database_dealloc, + .tp_new = EdsLib_Python_Database_new, + .tp_methods = EdsLib_Python_Database_methods, + .tp_members = EdsLib_Python_Database_members, + .tp_repr = EdsLib_Python_Database_repr, + .tp_traverse = EdsLib_Python_Database_traverse, + .tp_clear = EdsLib_Python_Database_clear, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_weaklistoffset = offsetof(EdsLib_Python_Database_t, WeakRefList), + .tp_doc = "EDS database" }; static int EdsLib_Python_Database_traverse(PyObject *obj, visitproc visit, void *arg) { @@ -180,11 +174,11 @@ int EdsLib_Python_SaveToCache(PyObject *cachedict, PyObject *idxval, PyObject *o return 0; } -static EdsLib_Python_Database_t *EdsLib_Python_Database_CreateImpl(PyTypeObject *obj, PyObject *Name, - const EdsLib_DatabaseObject_t *GD) +static EdsLib_Python_Database_t * +EdsLib_Python_Database_CreateImpl(PyTypeObject *obj, PyObject *Name, const EdsLib_DatabaseObject_t *GD) { EdsLib_Python_Database_t *self; - bool IsSuccess; + bool IsSuccess; IsSuccess = false; @@ -207,7 +201,7 @@ static EdsLib_Python_Database_t *EdsLib_Python_Database_CreateImpl(PyTypeObject self->DbName = Name; /* Create a weak reference to store in the local cache in case this - * database is constructed again. */ + * database is constructed again. */ if (EdsLib_Python_SaveToCache(EdsLib_Python_DatabaseCache, Name, (PyObject *)self) < 0) { /* if something went wrong this raises an error and must return NULL */ @@ -215,8 +209,7 @@ static EdsLib_Python_Database_t *EdsLib_Python_Database_CreateImpl(PyTypeObject } IsSuccess = true; - } - while (false); + } while (false); if (!IsSuccess && self != NULL) { @@ -239,7 +232,8 @@ PyObject *EdsLib_Python_Database_CreateFromStaticDB(const char *Name, const EdsL return NULL; } - self = (EdsLib_Python_Database_t *)EdsLib_Python_GetFromCache(EdsLib_Python_DatabaseCache, pyname, + self = (EdsLib_Python_Database_t *)EdsLib_Python_GetFromCache(EdsLib_Python_DatabaseCache, + pyname, &EdsLib_Python_DatabaseType); if (self != NULL) { @@ -270,21 +264,21 @@ const EdsLib_DatabaseObject_t *EdsLib_Python_Database_GetDB(PyObject *obj) return NULL; } - return ((EdsLib_Python_Database_t*)obj)->GD; + return ((EdsLib_Python_Database_t *)obj)->GD; } static PyObject *EdsLib_Python_Database_new(PyTypeObject *obj, PyObject *args, PyObject *kwds) { - const char *dbstr; - PyObject *nameobj; - PyObject *argobj; - char *p; - char tempstring[512]; - void *handle; - void *symbol; - const char *errstr; + const char *dbstr; + PyObject *nameobj; + PyObject *argobj; + char *p; + char tempstring[512]; + void *handle; + void *symbol; + const char *errstr; EdsLib_Python_Database_t *self; - bool IsSuccess; + bool IsSuccess; /* note: the object returned here is a borrowed ref */ if (!PyArg_ParseTuple(args, "O:Database_new", &argobj)) @@ -323,7 +317,8 @@ static PyObject *EdsLib_Python_Database_new(PyTypeObject *obj, PyObject *args, P * To avoid wasting resources, do not create the same database multiple times. * First check if the db cache object already contains an instance for this name */ - self = (EdsLib_Python_Database_t *)EdsLib_Python_GetFromCache(EdsLib_Python_DatabaseCache, nameobj, + self = (EdsLib_Python_Database_t *)EdsLib_Python_GetFromCache(EdsLib_Python_DatabaseCache, + nameobj, &EdsLib_Python_DatabaseType); if (self != NULL) { @@ -398,10 +393,10 @@ static PyObject *EdsLib_Python_Database_new(PyTypeObject *obj, PyObject *args, P } } - return (PyObject*)self; + return (PyObject *)self; } -PyObject * EdsLib_Python_Database_repr(PyObject *obj) +PyObject *EdsLib_Python_Database_repr(PyObject *obj) { EdsLib_Python_Database_t *self = (EdsLib_Python_Database_t *)obj; @@ -410,22 +405,22 @@ PyObject * EdsLib_Python_Database_repr(PyObject *obj) static PyObject *EdsLib_Python_Database_getentry(PyObject *obj, PyObject *key) { - EdsLib_Python_Database_t *dbobj = (EdsLib_Python_Database_t *)obj; - PyObject *result = NULL; - EdsLib_Id_t EdsId; + EdsLib_Python_Database_t *dbobj = (EdsLib_Python_Database_t *)obj; + PyObject *result = NULL; + EdsLib_Id_t EdsId; EdsId = EdsLib_Python_ConvertArgToEdsId(dbobj->GD, key); /* if not valid this should have raised an exception */ if (EdsLib_Is_Valid(EdsId)) { - result = (PyObject*)EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(dbobj, EdsId); + result = (PyObject *)EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(dbobj, EdsId); } return result; } -static PyObject * EdsLib_Python_Database_IsContainer(PyObject *obj, PyObject *arg) +static PyObject *EdsLib_Python_Database_IsContainer(PyObject *obj, PyObject *arg) { PyObject *result; @@ -443,7 +438,7 @@ static PyObject * EdsLib_Python_Database_IsContainer(PyObject *obj, PyObject * return result; } -static PyObject * EdsLib_Python_Database_IsArray(PyObject *obj, PyObject *arg) +static PyObject *EdsLib_Python_Database_IsArray(PyObject *obj, PyObject *arg) { PyObject *result; @@ -461,7 +456,7 @@ static PyObject * EdsLib_Python_Database_IsArray(PyObject *obj, PyObject *arg) return result; } -static PyObject * EdsLib_Python_Database_IsNumber(PyObject *obj, PyObject *arg) +static PyObject *EdsLib_Python_Database_IsNumber(PyObject *obj, PyObject *arg) { PyObject *result; @@ -479,19 +474,19 @@ static PyObject * EdsLib_Python_Database_IsNumber(PyObject *obj, PyObject *arg return result; } -static PyObject * EdsLib_Python_Database_IsEnum(PyObject *obj, PyObject *arg) +static PyObject *EdsLib_Python_Database_IsEnum(PyObject *obj, PyObject *arg) { EdsLib_Python_DatabaseEntry_t *dbent; - EdsLib_DisplayHint_t DisplayHint; - PyTypeObject *base_type; + EdsLib_DisplayHint_t DisplayHint; + PyTypeObject *base_type; PyObject *result = NULL; if (Py_TYPE(arg) == &EdsLib_Python_DatabaseEntryType) { - dbent = (EdsLib_Python_DatabaseEntry_t *)arg; + dbent = (EdsLib_Python_DatabaseEntry_t *)arg; DisplayHint = EdsLib_DisplayDB_GetDisplayHint(dbent->EdsDb->GD, dbent->EdsId); - base_type = dbent->type_base.ht_type.tp_base; + base_type = dbent->type_base.ht_type.tp_base; if ((DisplayHint == EDSLIB_DISPLAYHINT_ENUM_SYMTABLE) && (base_type == &EdsLib_Python_ObjectNumberType)) { diff --git a/edslib/python/src/edslib_python_databaseentry.c b/edslib/python/src/edslib_python_databaseentry.c index 44d105d..d60e7da 100644 --- a/edslib/python/src/edslib_python_databaseentry.c +++ b/edslib/python/src/edslib_python_databaseentry.c @@ -19,118 +19,105 @@ * limitations under the License. */ - /** * \file edslib_python_databaseentry.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement the "database entry" type -** -** This is a dynamic datatype which refers back to an entry in an EDS database. -** All instances of EDS objects should be types of this type. (note that in -** python types are also objects which have a type, recursively) + ** Implement the "database entry" type + ** + ** This is a dynamic datatype which refers back to an entry in an EDS database. + ** All instances of EDS objects should be types of this type. (note that in + ** python types are also objects which have a type, recursively) */ #include "edslib_python_internal.h" #include -static PyObject * EdsLib_Python_DatabaseEntry_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); -static int EdsLib_Python_DatabaseEntry_init(PyObject *obj, PyObject *args, PyObject *kwds); -static void EdsLib_Python_DatabaseEntry_dealloc(PyObject * obj); -static PyObject * EdsLib_Python_DatabaseEntry_repr(PyObject *obj); -static int EdsLib_Python_DatabaseEntry_traverse(PyObject *obj, visitproc visit, void *arg); -static int EdsLib_Python_DatabaseEntry_clear(PyObject *obj); -static Py_ssize_t EdsLib_Python_DatabaseEntry_len(PyObject *obj); -static PyObject * EdsLib_Python_DatabaseEntry_seq_item(PyObject *obj, Py_ssize_t idx); -static PyObject * EdsLib_Python_DatabaseEntry_map_subscript(PyObject *obj, PyObject *subscr); -static PyObject * EdsLib_Python_DatabaseEntry_iter(PyObject *obj); - -static void EdsLib_Python_EnumEntryIterator_dealloc(PyObject * obj); -static int EdsLib_Python_EnumEntryIterator_traverse(PyObject *obj, visitproc visit, void *arg); -static int EdsLib_Python_EnumEntryIterator_clear(PyObject *obj); -static PyObject * EdsLib_Python_EnumEntryIterator_iternext(PyObject *obj); - -static void EdsLib_Python_ContainerEntryIterator_dealloc(PyObject * obj); -static int EdsLib_Python_ContainerEntryIterator_traverse(PyObject *obj, visitproc visit, void *arg); -static int EdsLib_Python_ContainerEntryIterator_clear(PyObject *obj); -static PyObject * EdsLib_Python_ContainerEntryIterator_iternext(PyObject *obj); - -static PySequenceMethods EdsLib_Python_DatabaseEntry_SequenceMethods = -{ - .sq_length = EdsLib_Python_DatabaseEntry_len, - .sq_item = EdsLib_Python_DatabaseEntry_seq_item +static PyObject *EdsLib_Python_DatabaseEntry_new(PyTypeObject *obj, PyObject *args, PyObject *kwds); +static int EdsLib_Python_DatabaseEntry_init(PyObject *obj, PyObject *args, PyObject *kwds); +static void EdsLib_Python_DatabaseEntry_dealloc(PyObject *obj); +static PyObject *EdsLib_Python_DatabaseEntry_repr(PyObject *obj); +static int EdsLib_Python_DatabaseEntry_traverse(PyObject *obj, visitproc visit, void *arg); +static int EdsLib_Python_DatabaseEntry_clear(PyObject *obj); +static Py_ssize_t EdsLib_Python_DatabaseEntry_len(PyObject *obj); +static PyObject *EdsLib_Python_DatabaseEntry_seq_item(PyObject *obj, Py_ssize_t idx); +static PyObject *EdsLib_Python_DatabaseEntry_map_subscript(PyObject *obj, PyObject *subscr); +static PyObject *EdsLib_Python_DatabaseEntry_iter(PyObject *obj); + +static void EdsLib_Python_EnumEntryIterator_dealloc(PyObject *obj); +static int EdsLib_Python_EnumEntryIterator_traverse(PyObject *obj, visitproc visit, void *arg); +static int EdsLib_Python_EnumEntryIterator_clear(PyObject *obj); +static PyObject *EdsLib_Python_EnumEntryIterator_iternext(PyObject *obj); + +static void EdsLib_Python_ContainerEntryIterator_dealloc(PyObject *obj); +static int EdsLib_Python_ContainerEntryIterator_traverse(PyObject *obj, visitproc visit, void *arg); +static int EdsLib_Python_ContainerEntryIterator_clear(PyObject *obj); +static PyObject *EdsLib_Python_ContainerEntryIterator_iternext(PyObject *obj); + +static PySequenceMethods EdsLib_Python_DatabaseEntry_SequenceMethods = { .sq_length = EdsLib_Python_DatabaseEntry_len, + .sq_item = + EdsLib_Python_DatabaseEntry_seq_item }; + +static PyMappingMethods EdsLib_Python_DatabaseEntry_MappingMethods = { .mp_length = EdsLib_Python_DatabaseEntry_len, + .mp_subscript = + EdsLib_Python_DatabaseEntry_map_subscript }; + +static struct PyMemberDef EdsLib_Python_DatabaseEntry_members[] = { + { "Name", T_OBJECT_EX, offsetof(EdsLib_Python_DatabaseEntry_t, BaseName), READONLY, "Database Name" }, + { NULL } /* Sentinel */ }; -static PyMappingMethods EdsLib_Python_DatabaseEntry_MappingMethods = -{ - .mp_length = EdsLib_Python_DatabaseEntry_len, - .mp_subscript = EdsLib_Python_DatabaseEntry_map_subscript -}; - -static struct PyMemberDef EdsLib_Python_DatabaseEntry_members[] = -{ - {"Name", T_OBJECT_EX, offsetof(EdsLib_Python_DatabaseEntry_t, BaseName), READONLY, "Database Name" }, - {NULL} /* Sentinel */ -}; - -PyTypeObject EdsLib_Python_DatabaseEntryType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("DatabaseEntry"), - .tp_basicsize = sizeof(EdsLib_Python_DatabaseEntry_t), - .tp_dealloc = EdsLib_Python_DatabaseEntry_dealloc, - .tp_new = EdsLib_Python_DatabaseEntry_new, - .tp_as_sequence = &EdsLib_Python_DatabaseEntry_SequenceMethods, - .tp_as_mapping = &EdsLib_Python_DatabaseEntry_MappingMethods, - .tp_members = EdsLib_Python_DatabaseEntry_members, - .tp_init = EdsLib_Python_DatabaseEntry_init, - .tp_repr = EdsLib_Python_DatabaseEntry_repr, - .tp_traverse = EdsLib_Python_DatabaseEntry_traverse, - .tp_clear = EdsLib_Python_DatabaseEntry_clear, - .tp_base = &PyType_Type, - .tp_iter = EdsLib_Python_DatabaseEntry_iter, - .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC, - .tp_weaklistoffset = offsetof(EdsLib_Python_DatabaseEntry_t, WeakRefList), - .tp_doc = PyDoc_STR("EDS database entry") -}; - -PyTypeObject EdsLib_Python_EnumEntryIteratorType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("EnumerationEntryIterator"), - .tp_basicsize = sizeof(EdsLib_Python_EnumerationIterator_t), - .tp_dealloc = EdsLib_Python_EnumEntryIterator_dealloc, - .tp_getattro = PyObject_GenericGetAttr, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, - .tp_traverse = EdsLib_Python_EnumEntryIterator_traverse, - .tp_clear = EdsLib_Python_EnumEntryIterator_clear, - .tp_iter = PyObject_SelfIter, - .tp_iternext = EdsLib_Python_EnumEntryIterator_iternext, - .tp_doc = PyDoc_STR("EDS EnumerationIteratorType") -}; - -PyTypeObject EdsLib_Python_ContainerEntryIteratorType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("ContainerEntryIterator"), - .tp_basicsize = sizeof(EdsLib_Python_ContainerIterator_t), - .tp_dealloc = EdsLib_Python_ContainerEntryIterator_dealloc, - .tp_getattro = PyObject_GenericGetAttr, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, - .tp_traverse = EdsLib_Python_ContainerEntryIterator_traverse, - .tp_clear = EdsLib_Python_ContainerEntryIterator_clear, - .tp_iter = PyObject_SelfIter, - .tp_iternext = EdsLib_Python_ContainerEntryIterator_iternext, - .tp_doc = PyDoc_STR("EDS ContainerIteratorType") -}; - -static void EdsLib_Python_DatabaseEntry_GetFormatCodes(char *buffer, const EdsLib_Python_Database_t *refdb, EdsLib_Id_t EdsId) +PyTypeObject EdsLib_Python_DatabaseEntryType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("DatabaseEntry"), + .tp_basicsize = sizeof(EdsLib_Python_DatabaseEntry_t), + .tp_dealloc = EdsLib_Python_DatabaseEntry_dealloc, + .tp_new = EdsLib_Python_DatabaseEntry_new, + .tp_as_sequence = &EdsLib_Python_DatabaseEntry_SequenceMethods, + .tp_as_mapping = &EdsLib_Python_DatabaseEntry_MappingMethods, + .tp_members = EdsLib_Python_DatabaseEntry_members, + .tp_init = EdsLib_Python_DatabaseEntry_init, + .tp_repr = EdsLib_Python_DatabaseEntry_repr, + .tp_traverse = EdsLib_Python_DatabaseEntry_traverse, + .tp_clear = EdsLib_Python_DatabaseEntry_clear, + .tp_base = &PyType_Type, + .tp_iter = EdsLib_Python_DatabaseEntry_iter, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_weaklistoffset = + offsetof(EdsLib_Python_DatabaseEntry_t, WeakRefList), + .tp_doc = PyDoc_STR("EDS database entry") }; + +PyTypeObject EdsLib_Python_EnumEntryIteratorType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("EnumerationEntryIterator"), + .tp_basicsize = sizeof(EdsLib_Python_EnumerationIterator_t), + .tp_dealloc = EdsLib_Python_EnumEntryIterator_dealloc, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = EdsLib_Python_EnumEntryIterator_traverse, + .tp_clear = EdsLib_Python_EnumEntryIterator_clear, + .tp_iter = PyObject_SelfIter, + .tp_iternext = EdsLib_Python_EnumEntryIterator_iternext, + .tp_doc = PyDoc_STR("EDS EnumerationIteratorType") }; + +PyTypeObject EdsLib_Python_ContainerEntryIteratorType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("ContainerEntryIterator"), + .tp_basicsize = sizeof(EdsLib_Python_ContainerIterator_t), + .tp_dealloc = EdsLib_Python_ContainerEntryIterator_dealloc, + .tp_getattro = PyObject_GenericGetAttr, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .tp_traverse = EdsLib_Python_ContainerEntryIterator_traverse, + .tp_clear = EdsLib_Python_ContainerEntryIterator_clear, + .tp_iter = PyObject_SelfIter, + .tp_iternext = EdsLib_Python_ContainerEntryIterator_iternext, + .tp_doc = PyDoc_STR("EDS ContainerIteratorType") }; + +static void +EdsLib_Python_DatabaseEntry_GetFormatCodes(char *buffer, const EdsLib_Python_Database_t *refdb, EdsLib_Id_t EdsId) { EdsLib_DataTypeDB_EntityInfo_t EntityInfo; - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - Py_ssize_t RepeatCount; - char code = 0; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + Py_ssize_t RepeatCount; + char code = 0; /* * For arrays, get the format for the actual item. @@ -148,76 +135,75 @@ static void EdsLib_Python_DatabaseEntry_GetFormatCodes(char *buffer, const EdsLi RepeatCount = 1; } - switch(TypeInfo.ElemType) + switch (TypeInfo.ElemType) { - case EDSLIB_BASICTYPE_UNSIGNED_INT: - if (TypeInfo.Size.Bytes == sizeof(unsigned char)) - { - code = 'B'; - } - else if (TypeInfo.Size.Bytes == sizeof(unsigned short)) - { - code = 'H'; - } - else if (TypeInfo.Size.Bytes == sizeof(unsigned int)) - { - code = 'I'; - } - else if (TypeInfo.Size.Bytes == sizeof(unsigned long)) - { - code = 'L'; - } - else if (TypeInfo.Size.Bytes == sizeof(unsigned long long)) - { - code = 'Q'; - } - break; - case EDSLIB_BASICTYPE_SIGNED_INT: - if (TypeInfo.Size.Bytes == sizeof(signed char)) - { - code = 'b'; - } - else if (TypeInfo.Size.Bytes == sizeof(signed short)) - { - code = 'h'; - } - else if (TypeInfo.Size.Bytes == sizeof(signed int)) - { - code = 'i'; - } - else if (TypeInfo.Size.Bytes == sizeof(signed long)) - { - code = 'l'; - } - else if (TypeInfo.Size.Bytes == sizeof(signed long long)) - { - code = 'q'; - } - break; - case EDSLIB_BASICTYPE_FLOAT: - if (TypeInfo.Size.Bytes == sizeof(float)) - { - code = 'f'; - } - else if (TypeInfo.Size.Bytes == sizeof(double)) - { - code = 'd'; - } - break; - default: - break; + case EDSLIB_BASICTYPE_UNSIGNED_INT: + if (TypeInfo.Size.Bytes == sizeof(unsigned char)) + { + code = 'B'; + } + else if (TypeInfo.Size.Bytes == sizeof(unsigned short)) + { + code = 'H'; + } + else if (TypeInfo.Size.Bytes == sizeof(unsigned int)) + { + code = 'I'; + } + else if (TypeInfo.Size.Bytes == sizeof(unsigned long)) + { + code = 'L'; + } + else if (TypeInfo.Size.Bytes == sizeof(unsigned long long)) + { + code = 'Q'; + } + break; + case EDSLIB_BASICTYPE_SIGNED_INT: + if (TypeInfo.Size.Bytes == sizeof(signed char)) + { + code = 'b'; + } + else if (TypeInfo.Size.Bytes == sizeof(signed short)) + { + code = 'h'; + } + else if (TypeInfo.Size.Bytes == sizeof(signed int)) + { + code = 'i'; + } + else if (TypeInfo.Size.Bytes == sizeof(signed long)) + { + code = 'l'; + } + else if (TypeInfo.Size.Bytes == sizeof(signed long long)) + { + code = 'q'; + } + break; + case EDSLIB_BASICTYPE_FLOAT: + if (TypeInfo.Size.Bytes == sizeof(float)) + { + code = 'f'; + } + else if (TypeInfo.Size.Bytes == sizeof(double)) + { + code = 'd'; + } + break; + default: + break; } if (code == 0) { RepeatCount *= TypeInfo.Size.Bytes; - code = 'B'; + code = 'B'; } if (RepeatCount > 1) { - snprintf(buffer, EDSLIB_PYTHON_FORMATCODE_LEN, "%u%c", - (unsigned int)RepeatCount, code); + snprintf(buffer, EDSLIB_PYTHON_FORMATCODE_LEN, "%u%c", (unsigned int)RepeatCount, code); } else { @@ -226,15 +212,13 @@ static void EdsLib_Python_DatabaseEntry_GetFormatCodes(char *buffer, const EdsLi } } - - static void EdsLib_Python_DatabaseEntry_build_dict_callback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) { - PyObject *args = Arg; + PyObject *args = Arg; PyObject *MemberDictionary = PyTuple_GET_ITEM(args, 1); - PyObject *MemberList = PyTuple_GET_ITEM(args, 2); - PyObject *MemberName = NULL; - PyObject *accessor = NULL; + PyObject *MemberList = PyTuple_GET_ITEM(args, 2); + PyObject *MemberName = NULL; + PyObject *accessor = NULL; if (PyErr_Occurred()) { @@ -261,8 +245,7 @@ static void EdsLib_Python_DatabaseEntry_build_dict_callback(void *Arg, const Eds PyList_Append(MemberList, MemberName); PyDict_SetItem(MemberDictionary, MemberName, accessor); - } - while(0); + } while (0); } /* @@ -287,13 +270,13 @@ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId(PyObject *obj, EdsLib_Id_ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Database_t *refdb, EdsLib_Id_t EdsId) { EdsLib_Python_DatabaseEntry_t *self = NULL; - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; - PyObject *edsidval = NULL; - PyObject *tempargs = NULL; - PyObject *typename = NULL; - PyObject *typedict = NULL; - PyObject *typelist = NULL; - PyTypeObject *basetype = NULL; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + PyObject *edsidval = NULL; + PyObject *tempargs = NULL; + PyObject *typename = NULL; + PyObject *typedict = NULL; + PyObject *typelist = NULL; + PyTypeObject *basetype = NULL; do { @@ -307,7 +290,9 @@ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Databa * To avoid wasting resources, type objects are only created on demand. * First check if the db cache object already contains an instance for this ID */ - self = (EdsLib_Python_DatabaseEntry_t *)EdsLib_Python_GetFromCache(refdb->TypeCache, edsidval, &EdsLib_Python_DatabaseEntryType); + self = (EdsLib_Python_DatabaseEntry_t *)EdsLib_Python_GetFromCache(refdb->TypeCache, + edsidval, + &EdsLib_Python_DatabaseEntryType); if (self != NULL) { break; @@ -338,9 +323,8 @@ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Databa { basetype = &EdsLib_Python_ObjectScalarType; } - else if (TypeInfo.ElemType == EDSLIB_BASICTYPE_FLOAT || - TypeInfo.ElemType == EDSLIB_BASICTYPE_SIGNED_INT || - TypeInfo.ElemType == EDSLIB_BASICTYPE_UNSIGNED_INT) + else if (TypeInfo.ElemType == EDSLIB_BASICTYPE_FLOAT || TypeInfo.ElemType == EDSLIB_BASICTYPE_SIGNED_INT + || TypeInfo.ElemType == EDSLIB_BASICTYPE_UNSIGNED_INT) { basetype = &EdsLib_Python_ObjectNumberType; } @@ -371,8 +355,10 @@ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Databa break; } - EdsLib_DisplayDB_IterateBaseEntities(refdb->GD, EdsId, - EdsLib_Python_DatabaseEntry_build_dict_callback, tempargs); + EdsLib_DisplayDB_IterateBaseEntities(refdb->GD, + EdsId, + EdsLib_Python_DatabaseEntry_build_dict_callback, + tempargs); Py_DECREF(tempargs); tempargs = NULL; @@ -388,10 +374,10 @@ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Databa * expects certain constraints regarding a type name. */ typename = PyUnicode_FromFormat("%s.%s.%s.%s", - EdsLib_Python_DatabaseEntryType.tp_name, - PyBytes_AsString(refdb->DbName), - EdsLib_DisplayDB_GetNamespace(refdb->GD, EdsId), - EdsLib_DisplayDB_GetBaseName(refdb->GD, EdsId)); + EdsLib_Python_DatabaseEntryType.tp_name, + PyBytes_AsString(refdb->DbName), + EdsLib_DisplayDB_GetNamespace(refdb->GD, EdsId), + EdsLib_DisplayDB_GetBaseName(refdb->GD, EdsId)); if (typename == NULL) { @@ -421,7 +407,8 @@ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Databa * Call the "new" function from the base type to properly * create a heaptype object (it is complicated) */ - self = (EdsLib_Python_DatabaseEntry_t *)EdsLib_Python_DatabaseEntryType.tp_base->tp_new(&EdsLib_Python_DatabaseEntryType, tempargs, NULL); + self = (EdsLib_Python_DatabaseEntry_t *) + EdsLib_Python_DatabaseEntryType.tp_base->tp_new(&EdsLib_Python_DatabaseEntryType, tempargs, NULL); Py_DECREF(tempargs); tempargs = NULL; if (self == NULL) @@ -430,29 +417,28 @@ PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Databa } Py_INCREF(refdb); - self->EdsDb = refdb; - self->EdsId = EdsId; - self->BaseName = PyUnicode_FromFormat("%s", EdsLib_DisplayDB_GetBaseName(refdb->GD, EdsId)); + self->EdsDb = refdb; + self->EdsId = EdsId; + self->BaseName = PyUnicode_FromFormat("%s", EdsLib_DisplayDB_GetBaseName(refdb->GD, EdsId)); self->EdsTypeName = PyUnicode_FromFormat("%s/%s", - EdsLib_DisplayDB_GetNamespace(refdb->GD, EdsId), - EdsLib_DisplayDB_GetBaseName(refdb->GD, EdsId)); + EdsLib_DisplayDB_GetNamespace(refdb->GD, EdsId), + EdsLib_DisplayDB_GetBaseName(refdb->GD, EdsId)); EdsLib_Python_DatabaseEntry_GetFormatCodes(self->FormatInfo, refdb, EdsId); /* "steal" the reference to typelist, if valid */ self->SubEntityList = typelist; - typelist = NULL; + typelist = NULL; /* Create a weak reference to store in the local cache in case this * type is needed again. */ - if (EdsLib_Python_SaveToCache(refdb->TypeCache, edsidval, (PyObject*)self) < 0) + if (EdsLib_Python_SaveToCache(refdb->TypeCache, edsidval, (PyObject *)self) < 0) { /* if something went wrong this raises an error and must return NULL */ Py_DECREF(self); self = NULL; } - } - while(0); + } while (0); /* decrement refcount for all temporary objects created */ Py_XDECREF(edsidval); @@ -488,12 +474,12 @@ static int EdsLib_Python_DatabaseEntry_clear(PyObject *obj) static PyObject *EdsLib_Python_DatabaseEntry_new(PyTypeObject *obj, PyObject *args, PyObject *kwds) { - PyObject *arg1; - PyObject *arg2; - EdsLib_Python_Database_t *refdb = NULL; - PyObject *result = NULL; - PyObject *tempargs = NULL; - EdsLib_Id_t EdsId = EDSLIB_ID_INVALID; + PyObject *arg1; + PyObject *arg2; + EdsLib_Python_Database_t *refdb = NULL; + PyObject *result = NULL; + PyObject *tempargs = NULL; + EdsLib_Id_t EdsId = EDSLIB_ID_INVALID; /* * Database entries are constructed from two values: @@ -515,7 +501,7 @@ static PyObject *EdsLib_Python_DatabaseEntry_new(PyTypeObject *obj, PyObject *ar { if (Py_TYPE(arg1) == &EdsLib_Python_DatabaseType) { - refdb = (EdsLib_Python_Database_t*)arg1; + refdb = (EdsLib_Python_Database_t *)arg1; Py_INCREF(refdb); } else @@ -525,7 +511,7 @@ static PyObject *EdsLib_Python_DatabaseEntry_new(PyTypeObject *obj, PyObject *ar { break; } - refdb = (EdsLib_Python_Database_t*)PyObject_Call((PyObject*)&EdsLib_Python_DatabaseType, tempargs, NULL); + refdb = (EdsLib_Python_Database_t *)PyObject_Call((PyObject *)&EdsLib_Python_DatabaseType, tempargs, NULL); Py_DECREF(tempargs); tempargs = NULL; } @@ -540,10 +526,9 @@ static PyObject *EdsLib_Python_DatabaseEntry_new(PyTypeObject *obj, PyObject *ar /* if not valid this should have raised an exception */ if (EdsLib_Is_Valid(EdsId)) { - result = (PyObject*)EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(refdb, EdsId); + result = (PyObject *)EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(refdb, EdsId); } - } - while(0); + } while (0); /* decrement refcount for all temporary objects created */ Py_XDECREF(refdb); @@ -554,8 +539,8 @@ static PyObject *EdsLib_Python_DatabaseEntry_new(PyTypeObject *obj, PyObject *ar static int EdsLib_Python_DatabaseEntry_init(PyObject *obj, PyObject *args, PyObject *kwds) { - EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t *)obj; - PyObject *subargs = PyTuple_Pack(1, self->type_base.ht_name); + EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t *)obj; + PyObject *subargs = PyTuple_Pack(1, self->type_base.ht_name); if (subargs == NULL) { @@ -569,7 +554,7 @@ static int EdsLib_Python_DatabaseEntry_init(PyObject *obj, PyObject *args, PyObj return 0; } -static void EdsLib_Python_DatabaseEntry_dealloc(PyObject * obj) +static void EdsLib_Python_DatabaseEntry_dealloc(PyObject *obj) { EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t *)obj; Py_XDECREF(self->EdsDb); @@ -586,12 +571,12 @@ static void EdsLib_Python_DatabaseEntry_dealloc(PyObject * obj) static Py_ssize_t EdsLib_Python_DatabaseEntry_len(PyObject *obj) { - EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t*)obj; - Py_ssize_t result; - EdsLib_DataTypeDB_TypeInfo_t TypeInfo; + EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t *)obj; + Py_ssize_t result; + EdsLib_DataTypeDB_TypeInfo_t TypeInfo; EdsLib_DataTypeDB_GetTypeInfo(self->EdsDb->GD, self->EdsId, &TypeInfo); - if ((TypeInfo.ElemType == EDSLIB_BASICTYPE_CONTAINER || TypeInfo.ElemType == EDSLIB_BASICTYPE_COMPONENT) && - self->SubEntityList != NULL) + if ((TypeInfo.ElemType == EDSLIB_BASICTYPE_CONTAINER || TypeInfo.ElemType == EDSLIB_BASICTYPE_COMPONENT) + && self->SubEntityList != NULL) { /* * containers are a bit special in that they may have unnamed @@ -609,10 +594,10 @@ static Py_ssize_t EdsLib_Python_DatabaseEntry_len(PyObject *obj) static PyObject *EdsLib_Python_DatabaseEntry_seq_item(PyObject *obj, Py_ssize_t idx) { - EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t*)obj; + EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t *)obj; EdsLib_DataTypeDB_EntityInfo_t EntityInfo; - PyObject *attribute = NULL; - PyObject *result = NULL; + PyObject *attribute = NULL; + PyObject *result = NULL; EdsLib_DataTypeDB_TypeInfo_t TypeInfo; EdsLib_DataTypeDB_GetTypeInfo(self->EdsDb->GD, self->EdsId, &TypeInfo); @@ -625,11 +610,12 @@ static PyObject *EdsLib_Python_DatabaseEntry_seq_item(PyObject *obj, Py_ssize_t */ if (TypeInfo.NumSubElements == 0) { - PyErr_Format(PyExc_TypeError, "Attempt to index \'%s\' which is not an EDS sequence type", - self->type_base.ht_type.tp_name); + PyErr_Format(PyExc_TypeError, + "Attempt to index \'%s\' which is not an EDS sequence type", + self->type_base.ht_type.tp_name); } - else if ((TypeInfo.ElemType == EDSLIB_BASICTYPE_CONTAINER || TypeInfo.ElemType == EDSLIB_BASICTYPE_COMPONENT) && - self->SubEntityList != NULL) + else if ((TypeInfo.ElemType == EDSLIB_BASICTYPE_CONTAINER || TypeInfo.ElemType == EDSLIB_BASICTYPE_COMPONENT) + && self->SubEntityList != NULL) { attribute = PyList_GetItem(self->SubEntityList, idx); if (attribute == NULL) @@ -656,7 +642,7 @@ static PyObject *EdsLib_Python_DatabaseEntry_seq_item(PyObject *obj, Py_ssize_t return result; } -static PyObject * EdsLib_Python_DatabaseEntry_map_subscript(PyObject *obj, PyObject *subscr) +static PyObject *EdsLib_Python_DatabaseEntry_map_subscript(PyObject *obj, PyObject *subscr) { PyObject *result; @@ -672,25 +658,24 @@ static PyObject * EdsLib_Python_DatabaseEntry_map_subscript(PyObject *obj, PyObj return result; } -static PyObject * EdsLib_Python_DatabaseEntry_repr(PyObject *obj) +static PyObject *EdsLib_Python_DatabaseEntry_repr(PyObject *obj) { - EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t *)obj; - PyObject *result = NULL; + EdsLib_Python_DatabaseEntry_t *self = (EdsLib_Python_DatabaseEntry_t *)obj; + PyObject *result = NULL; - result = PyUnicode_FromFormat("%s(%R,%R)", - obj->ob_type->tp_name, self->EdsDb->DbName, self->EdsTypeName); + result = PyUnicode_FromFormat("%s(%R,%R)", obj->ob_type->tp_name, self->EdsDb->DbName, self->EdsTypeName); return result; } -Py_ssize_t EdsLib_Python_DatabaseEntry_GetMaxSize(PyTypeObject* objtype) +Py_ssize_t EdsLib_Python_DatabaseEntry_GetMaxSize(PyTypeObject *objtype) { - EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)objtype; + EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)objtype; EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; if (Py_TYPE(objtype) != &EdsLib_Python_DatabaseEntryType) { - PyErr_SetObject(PyExc_TypeError, (PyObject*)objtype); + PyErr_SetObject(PyExc_TypeError, (PyObject *)objtype); return -1; } @@ -703,62 +688,64 @@ Py_ssize_t EdsLib_Python_DatabaseEntry_GetMaxSize(PyTypeObject* objtype) return DerivInfo.MaxSize.Bytes; } -static PyObject * EdsLib_Python_DatabaseEntry_iter(PyObject *obj) +static PyObject *EdsLib_Python_DatabaseEntry_iter(PyObject *obj) { - EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj; + EdsLib_Python_DatabaseEntry_t *dbent = (EdsLib_Python_DatabaseEntry_t *)obj; EdsLib_Python_EnumerationIterator_t *EnumIter; - EdsLib_Python_ContainerIterator_t *ContainerIter; - EdsLib_DisplayHint_t DisplayHint; - PyObject *result; + EdsLib_Python_ContainerIterator_t *ContainerIter; + EdsLib_DisplayHint_t DisplayHint; + PyObject *result; /* sanity check that the db entry is an EDS entry is iterable (Container or Enumeration) */ DisplayHint = EdsLib_DisplayDB_GetDisplayHint(dbent->EdsDb->GD, dbent->EdsId); - switch(DisplayHint) + switch (DisplayHint) { - case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: - EnumIter = PyObject_GC_New(EdsLib_Python_EnumerationIterator_t, &EdsLib_Python_EnumEntryIteratorType); + case EDSLIB_DISPLAYHINT_ENUM_SYMTABLE: + EnumIter = PyObject_GC_New(EdsLib_Python_EnumerationIterator_t, &EdsLib_Python_EnumEntryIteratorType); - if (EnumIter == NULL) - { - return NULL; - } + if (EnumIter == NULL) + { + return NULL; + } - EnumIter->Index = 0; - Py_INCREF(obj); - EnumIter->refobj = obj; + EnumIter->Index = 0; + Py_INCREF(obj); + EnumIter->refobj = obj; - result = (PyObject *)EnumIter; - PyObject_GC_Track(result); + result = (PyObject *)EnumIter; + PyObject_GC_Track(result); - break; - case EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE: - /* sanity check that the db entry has a valid subentry list (it should for all containers) */ - if (dbent->SubEntityList == NULL || !PyList_Check(dbent->SubEntityList)) - { - return PyErr_Format(PyExc_TypeError, "%s is not a mappable EDS type", Py_TYPE(obj)->tp_name); - } - ContainerIter = PyObject_GC_New(EdsLib_Python_ContainerIterator_t, &EdsLib_Python_ContainerEntryIteratorType); - if (ContainerIter == NULL) - { - return NULL; - } - ContainerIter->Position = 0; - Py_INCREF(obj); - ContainerIter->refobj = obj; - result = (PyObject *)ContainerIter; - PyObject_GC_Track(result); - break; - default: - return PyErr_Format(PyExc_TypeError, "%s is not an EDS Iterable type (Container or Enumeration)", Py_TYPE(obj)->tp_name); + break; + case EDSLIB_DISPLAYHINT_MEMBER_NAMETABLE: + /* sanity check that the db entry has a valid subentry list (it should for all containers) */ + if (dbent->SubEntityList == NULL || !PyList_Check(dbent->SubEntityList)) + { + return PyErr_Format(PyExc_TypeError, "%s is not a mappable EDS type", Py_TYPE(obj)->tp_name); + } + ContainerIter = + PyObject_GC_New(EdsLib_Python_ContainerIterator_t, &EdsLib_Python_ContainerEntryIteratorType); + if (ContainerIter == NULL) + { + return NULL; + } + ContainerIter->Position = 0; + Py_INCREF(obj); + ContainerIter->refobj = obj; + result = (PyObject *)ContainerIter; + PyObject_GC_Track(result); + break; + default: + return PyErr_Format(PyExc_TypeError, + "%s is not an EDS Iterable type (Container or Enumeration)", + Py_TYPE(obj)->tp_name); } return result; } - -static void EdsLib_Python_EnumEntryIterator_dealloc(PyObject * obj) +static void EdsLib_Python_EnumEntryIterator_dealloc(PyObject *obj) { - EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t*)obj; + EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t *)obj; PyObject_GC_UnTrack(self); Py_XDECREF(self->refobj); PyObject_GC_Del(self); @@ -766,57 +753,60 @@ static void EdsLib_Python_EnumEntryIterator_dealloc(PyObject * obj) static int EdsLib_Python_EnumEntryIterator_traverse(PyObject *obj, visitproc visit, void *arg) { - EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t*)obj; + EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t *)obj; Py_VISIT(self->refobj); return 0; } static int EdsLib_Python_EnumEntryIterator_clear(PyObject *obj) { - EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t*)obj; + EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t *)obj; Py_CLEAR(self->refobj); return 0; } static PyObject *EdsLib_Python_EnumEntryIterator_iternext(PyObject *obj) { - EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t*)obj; - EdsLib_Python_DatabaseEntry_t *dbent = NULL; - const char * Label; - char LabelBuffer[64]; - intmax_t Value; - PyObject *key = NULL; - PyObject *value = NULL; - PyObject *result = NULL; + EdsLib_Python_EnumerationIterator_t *self = (EdsLib_Python_EnumerationIterator_t *)obj; + EdsLib_Python_DatabaseEntry_t *dbent = NULL; + const char *Label; + char LabelBuffer[64]; + intmax_t Value; + PyObject *key = NULL; + PyObject *value = NULL; + PyObject *result = NULL; do { - if (self->refobj == NULL) + if (self->refobj == NULL) { break; } dbent = (EdsLib_Python_DatabaseEntry_t *)self->refobj; - Label = EdsLib_DisplayDB_GetEnumLabelByIndex(dbent->EdsDb->GD, dbent->EdsId, self->Index, LabelBuffer, sizeof(LabelBuffer)); + Label = EdsLib_DisplayDB_GetEnumLabelByIndex(dbent->EdsDb->GD, + dbent->EdsId, + self->Index, + LabelBuffer, + sizeof(LabelBuffer)); Value = EdsLib_DisplayDB_GetEnumValueByIndex(dbent->EdsDb->GD, dbent->EdsId, self->Index); - if (strcmp(Label,"UNDEFINED") != 0) + if (strcmp(Label, "UNDEFINED") != 0) { - key = PyUnicode_FromString(Label); + key = PyUnicode_FromString(Label); value = PyLong_FromLong(Value); if ((key == NULL) || (value == NULL)) { - /* end */ - Py_CLEAR(self->refobj); - break; + /* end */ + Py_CLEAR(self->refobj); + break; } ++self->Index; result = PyTuple_Pack(2, key, value); } - } - while(0); + } while (0); Py_XDECREF(key); Py_XDECREF(value); @@ -824,9 +814,9 @@ static PyObject *EdsLib_Python_EnumEntryIterator_iternext(PyObject *obj) return result; } -static void EdsLib_Python_ContainerEntryIterator_dealloc(PyObject * obj) +static void EdsLib_Python_ContainerEntryIterator_dealloc(PyObject *obj) { - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; PyObject_GC_UnTrack(self); Py_XDECREF(self->refobj); PyObject_GC_Del(self); @@ -834,36 +824,36 @@ static void EdsLib_Python_ContainerEntryIterator_dealloc(PyObject * obj) static int EdsLib_Python_ContainerEntryIterator_traverse(PyObject *obj, visitproc visit, void *arg) { - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; Py_VISIT(self->refobj); return 0; } static int EdsLib_Python_ContainerEntryIterator_clear(PyObject *obj) { - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; Py_CLEAR(self->refobj); return 0; } static PyObject *EdsLib_Python_ContainerEntryIterator_iternext(PyObject *obj) { - EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t*)obj; - EdsLib_Python_DatabaseEntry_t *dbent = NULL; + EdsLib_Python_ContainerIterator_t *self = (EdsLib_Python_ContainerIterator_t *)obj; + EdsLib_Python_DatabaseEntry_t *dbent = NULL; const char *keystr; EdsLib_DataTypeDB_EntityInfo_t CompInfo; - PyObject *sub_obj = NULL; + PyObject *sub_obj = NULL; EdsLib_Python_DatabaseEntry_t *sub_dbent = NULL; - PyObject *key = NULL; - PyObject *dbname = NULL; - PyObject *entry = NULL; - PyObject *result = NULL; + PyObject *key = NULL; + PyObject *dbname = NULL; + PyObject *entry = NULL; + PyObject *result = NULL; do { - if (self->refobj == NULL) + if (self->refobj == NULL) { break; } @@ -885,10 +875,10 @@ static PyObject *EdsLib_Python_ContainerEntryIterator_iternext(PyObject *obj) if (EdsLib_DisplayDB_LocateSubEntity(dbent->EdsDb->GD, dbent->EdsId, keystr, &CompInfo) == EDSLIB_SUCCESS) { - sub_obj = (PyObject *)EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(dbent->EdsDb, CompInfo.EdsId); - sub_dbent = (EdsLib_Python_DatabaseEntry_t *) sub_obj; - dbname = sub_dbent->EdsDb->DbName; - entry = sub_dbent->EdsTypeName; + sub_obj = (PyObject *)EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(dbent->EdsDb, CompInfo.EdsId); + sub_dbent = (EdsLib_Python_DatabaseEntry_t *)sub_obj; + dbname = sub_dbent->EdsDb->DbName; + entry = sub_dbent->EdsTypeName; } if ((entry == NULL) || (dbname == NULL)) @@ -899,8 +889,7 @@ static PyObject *EdsLib_Python_ContainerEntryIterator_iternext(PyObject *obj) Py_INCREF(dbname); Py_INCREF(entry); result = PyTuple_Pack(3, key, dbname, entry); - } - while(0); + } while (0); Py_XDECREF(key); Py_XDECREF(dbname); diff --git a/edslib/python/src/edslib_python_dynamicarray.c b/edslib/python/src/edslib_python_dynamicarray.c index dfe8399..d711ab2 100644 --- a/edslib/python/src/edslib_python_dynamicarray.c +++ b/edslib/python/src/edslib_python_dynamicarray.c @@ -18,44 +18,39 @@ * limitations under the License. */ - /** * \file edslib_python_dynamicarray.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement Python type to represent a sequence (array) of other EDS objects -** -** This allows an arbitrary multiple of instances of any other EDS object type -** where the data is stored sequentially in memory. These are arrays that are -** created dynamically at run time rather than statically sized at compile time. -** -** In contrast to static arrays, these instance types are _not_ directly -** defined in EDS. + ** Implement Python type to represent a sequence (array) of other EDS objects + ** + ** This allows an arbitrary multiple of instances of any other EDS object type + ** where the data is stored sequentially in memory. These are arrays that are + ** created dynamically at run time rather than statically sized at compile time. + ** + ** In contrast to static arrays, these instance types are _not_ directly + ** defined in EDS. */ #include "edslib_python_internal.h" +static int EdsLib_Python_DynamicArray_init(PyObject *obj, PyObject *args, PyObject *kwds); +static PyObject *EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, PyObject *kwds); -static int EdsLib_Python_DynamicArray_init(PyObject *obj, PyObject *args, PyObject *kwds); -static PyObject * EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, PyObject *kwds); +PyTypeObject EdsLib_Python_DynamicArrayType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("DynamicArray"), + .tp_basicsize = sizeof(EdsLib_Python_ObjectArray_t), + .tp_base = &EdsLib_Python_ObjectArrayType, + .tp_init = EdsLib_Python_DynamicArray_init, + .tp_call = EdsLib_Python_DynamicArray_call, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyDoc_STR("EDS Dynamic Array Type") }; -PyTypeObject EdsLib_Python_DynamicArrayType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("DynamicArray"), - .tp_basicsize = sizeof(EdsLib_Python_ObjectArray_t), - .tp_base = &EdsLib_Python_ObjectArrayType, - .tp_init = EdsLib_Python_DynamicArray_init, - .tp_call = EdsLib_Python_DynamicArray_call, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - .tp_doc = PyDoc_STR("EDS Dynamic Array Type") -}; - -static int EdsLib_Python_DynamicArray_init(PyObject *obj, PyObject *args, PyObject *kwds) +static int EdsLib_Python_DynamicArray_init(PyObject *obj, PyObject *args, PyObject *kwds) { static const char *kwlist[] = { "dbent", "nelem", "elemsz", NULL }; - int result = -1; + int result = -1; kwds = EdsLib_Python_ObjectBase_InitArgsToKwds(args, kwds, kwlist); if (kwds != NULL) @@ -70,23 +65,21 @@ static int EdsLib_Python_DynamicArray_init(PyObject *obj, PyObject *arg static PyObject *EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, PyObject *kwds) { - EdsLib_Python_ObjectArray_t *self = (EdsLib_Python_ObjectArray_t *)obj; - PyObject *inseq = NULL; - PyObject *outlist = NULL; - PyObject *result = NULL; - PyObject *subarg = NULL; - PyObject *element = NULL; - Py_ssize_t idx = 0; - Py_ssize_t maxlen = -1; - ternaryfunc callfunc = ((PyTypeObject*)self->RefDbEntry)->tp_call; - + EdsLib_Python_ObjectArray_t *self = (EdsLib_Python_ObjectArray_t *)obj; + PyObject *inseq = NULL; + PyObject *outlist = NULL; + PyObject *result = NULL; + PyObject *subarg = NULL; + PyObject *element = NULL; + Py_ssize_t idx = 0; + Py_ssize_t maxlen = -1; + ternaryfunc callfunc = ((PyTypeObject *)self->RefDbEntry)->tp_call; /* * This function is basically just a "call iterator" that calls * every element with a corresponding arg from a sequence object. */ - /* * This functions has two modes: * - If no arguments are provided, it acts a "getter" @@ -102,20 +95,20 @@ static PyObject *EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, * Not expected to happen, but do not crash it if does. * Anything inheriting from ObjectBase should implement tp_call. */ - PyErr_Format(PyExc_TypeError, "\'%s\' does not implement tp_call()\n", - ((PyTypeObject*)self->RefDbEntry)->tp_name); + PyErr_Format(PyExc_TypeError, + "\'%s\' does not implement tp_call()\n", + ((PyTypeObject *)self->RefDbEntry)->tp_name); break; } - if (args != NULL && - !PyArg_UnpackTuple(args, __func__, 0, 1, &inseq)) + if (args != NULL && !PyArg_UnpackTuple(args, __func__, 0, 1, &inseq)) { break; } if (inseq == NULL) { - maxlen = self->ElementCount; + maxlen = self->ElementCount; outlist = PyList_New(self->ElementCount); if (outlist == NULL) { @@ -124,7 +117,10 @@ static PyObject *EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, } else if (!PySequence_Check(inseq)) { - PyErr_Format(PyExc_TypeError, "%s(): argument type \'%s\' is not a sequence", __func__, Py_TYPE(inseq)->tp_name); + PyErr_Format(PyExc_TypeError, + "%s(): argument type \'%s\' is not a sequence", + __func__, + Py_TYPE(inseq)->tp_name); break; } else @@ -193,7 +189,7 @@ static PyObject *EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, } else { - Py_DECREF(outvalue); /* discard ref */ + Py_DECREF(outvalue); /* discard ref */ } } } @@ -219,8 +215,7 @@ static PyObject *EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, result = Py_None; } Py_INCREF(result); - } - while(0); + } while (0); /* * DECREF any owned objects used during this procedure. @@ -232,16 +227,19 @@ static PyObject *EdsLib_Python_DynamicArray_call(PyObject *obj, PyObject *args, return result; } - -PyObject * EdsLib_Python_DynamicArray_FromPtrAndSize(PyTypeObject *objtype, void *ptr, Py_ssize_t nelem, Py_ssize_t elemsz) +PyObject * +EdsLib_Python_DynamicArray_FromPtrAndSize(PyTypeObject *objtype, void *ptr, Py_ssize_t nelem, Py_ssize_t elemsz) { static const char *kwlist[] = { "buffer", "dbent", "nelem", "elemsz", NULL }; - PyObject *args = NULL; - PyObject *result = NULL; - - args = EdsLib_Python_ObjectBase_BuildKwArgs("NOnn", kwlist, - EdsLib_Python_Buffer_FromPtrAndSize(ptr, nelem * elemsz), - objtype, nelem, elemsz); + PyObject *args = NULL; + PyObject *result = NULL; + + args = EdsLib_Python_ObjectBase_BuildKwArgs("NOnn", + kwlist, + EdsLib_Python_Buffer_FromPtrAndSize(ptr, nelem * elemsz), + objtype, + nelem, + elemsz); if (args == NULL) { return NULL; @@ -254,15 +252,21 @@ PyObject * EdsLib_Python_DynamicArray_FromPtrAndSize(PyTypeObject *objtype, vo return result; } -PyObject * EdsLib_Python_DynamicArray_FromConstPtrAndSize(PyTypeObject *objtype, const void *ptr, Py_ssize_t nelem, Py_ssize_t elemsz) +PyObject *EdsLib_Python_DynamicArray_FromConstPtrAndSize(PyTypeObject *objtype, + const void *ptr, + Py_ssize_t nelem, + Py_ssize_t elemsz) { static const char *kwlist[] = { "buffer", "dbent", "nelem", "elemsz", NULL }; - PyObject *args = NULL; - PyObject *result = NULL; - - args = EdsLib_Python_ObjectBase_BuildKwArgs("NOnn", kwlist, - EdsLib_Python_Buffer_FromConstPtrAndSize(ptr, nelem * elemsz), - objtype, nelem, elemsz); + PyObject *args = NULL; + PyObject *result = NULL; + + args = EdsLib_Python_ObjectBase_BuildKwArgs("NOnn", + kwlist, + EdsLib_Python_Buffer_FromConstPtrAndSize(ptr, nelem * elemsz), + objtype, + nelem, + elemsz); if (args == NULL) { return NULL; @@ -274,7 +278,3 @@ PyObject * EdsLib_Python_DynamicArray_FromConstPtrAndSize(PyTypeObject *objtyp return result; } - - - - diff --git a/edslib/python/src/edslib_python_internal.h b/edslib/python/src/edslib_python_internal.h index cb5340c..0b7e70c 100644 --- a/edslib/python/src/edslib_python_internal.h +++ b/edslib/python/src/edslib_python_internal.h @@ -19,19 +19,17 @@ * limitations under the License. */ - /** * \file edslib_python_internal.h * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Internal Header file for Python / EDS bindings + ** Internal Header file for Python / EDS bindings */ #ifndef _EDSLIB_PYTHON_INTERNAL_H_ #define _EDSLIB_PYTHON_INTERNAL_H_ - #include "edslib_python.h" #include @@ -45,54 +43,50 @@ #include "edslib_binding_objects.h" -#define EDSLIB_PYTHON_FORMATCODE_LEN 12 +#define EDSLIB_PYTHON_FORMATCODE_LEN 12 typedef struct { - PyObject_HEAD - void *dl; + PyObject_HEAD void *dl; const EdsLib_DatabaseObject_t *GD; - PyObject *DbName; + PyObject *DbName; /* TypeCache contains weak references to entries in the db, such that they * will not be re-created each time they are required. This also gives persistence, * i.e. repeated calls to lookup the same type give the same object, instead of a * separate-but-equal object. */ - PyObject *TypeCache; - PyObject *WeakRefList; + PyObject *TypeCache; + PyObject *WeakRefList; } EdsLib_Python_Database_t; typedef struct { - PyHeapTypeObject type_base; + PyHeapTypeObject type_base; EdsLib_Python_Database_t *EdsDb; - PyObject *BaseName; - PyObject *EdsTypeName; - EdsLib_Id_t EdsId; - char FormatInfo[EDSLIB_PYTHON_FORMATCODE_LEN]; - PyObject* SubEntityList; - PyObject* WeakRefList; + PyObject *BaseName; + PyObject *EdsTypeName; + EdsLib_Id_t EdsId; + char FormatInfo[EDSLIB_PYTHON_FORMATCODE_LEN]; + PyObject *SubEntityList; + PyObject *WeakRefList; } EdsLib_Python_DatabaseEntry_t; typedef struct { - PyObject_HEAD - Py_ssize_t Position; - PyObject* refobj; + PyObject_HEAD Py_ssize_t Position; + PyObject *refobj; } EdsLib_Python_ContainerIterator_t; typedef struct { - PyObject_HEAD - uint16_t Index; - PyObject* refobj; + PyObject_HEAD uint16_t Index; + PyObject *refobj; } EdsLib_Python_EnumerationIterator_t; typedef struct { - PyObject_HEAD - EdsLib_Id_t EdsId; - Py_ssize_t Offset; - Py_ssize_t TotalLength; + PyObject_HEAD EdsLib_Id_t EdsId; + Py_ssize_t Offset; + Py_ssize_t TotalLength; } EdsLib_Python_Accessor_t; typedef struct @@ -103,72 +97,72 @@ typedef struct typedef struct { - PyObject_HEAD - EdsLib_Binding_Buffer_Content_t edsbuf; - uint8_t is_readonly; - uint8_t is_dynamic; - uint8_t is_initialized; - EdsLib_Python_View_t *bufobj; + PyObject_HEAD EdsLib_Binding_Buffer_Content_t edsbuf; + uint8_t is_readonly; + uint8_t is_dynamic; + uint8_t is_initialized; + EdsLib_Python_View_t *bufobj; } EdsLib_Python_Buffer_t; typedef struct { - PyObject_HEAD - Py_ssize_t Offset; - Py_ssize_t TotalLength; - EdsLib_Python_Buffer_t *StorageBuf; + PyObject_HEAD Py_ssize_t Offset; + Py_ssize_t TotalLength; + EdsLib_Python_Buffer_t *StorageBuf; } EdsLib_Python_ObjectBase_t; typedef struct { - EdsLib_Python_ObjectBase_t objbase; + EdsLib_Python_ObjectBase_t objbase; EdsLib_Python_DatabaseEntry_t *RefDbEntry; - Py_ssize_t ElementSize; - Py_ssize_t ElementCount; + Py_ssize_t ElementSize; + Py_ssize_t ElementCount; } EdsLib_Python_ObjectArray_t; extern PyObject *EdsLib_Python_DatabaseCache; - PyObject *EdsLib_Python_GetFromCache(PyObject *cachedict, PyObject *idxval, PyTypeObject *reqtype); -int EdsLib_Python_SaveToCache(PyObject *cachedict, PyObject *idxval, PyObject *saveobj); +int EdsLib_Python_SaveToCache(PyObject *cachedict, PyObject *idxval, PyObject *saveobj); -bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *edsobj, PyObject *pyobj); -bool EdsLib_Python_ConvertPythonToEdsObject(EdsLib_Python_ObjectBase_t *self, PyObject *pyobj); -PyObject * EdsLib_Python_ConvertEdsScalarToPython(EdsLib_Binding_DescriptorObject_t *edsobj); -PyObject * EdsLib_Python_ConvertEdsObjectToPython(EdsLib_Python_ObjectBase_t *self); +bool EdsLib_Python_ConvertPythonToEdsScalar(EdsLib_Binding_DescriptorObject_t *edsobj, PyObject *pyobj); +bool EdsLib_Python_ConvertPythonToEdsObject(EdsLib_Python_ObjectBase_t *self, PyObject *pyobj); +PyObject *EdsLib_Python_ConvertEdsScalarToPython(EdsLib_Binding_DescriptorObject_t *edsobj); +PyObject *EdsLib_Python_ConvertEdsObjectToPython(EdsLib_Python_ObjectBase_t *self); -EdsLib_Id_t EdsLib_Python_ConvertArgToEdsId(const EdsLib_DatabaseObject_t *GD, PyObject* arg); +EdsLib_Id_t EdsLib_Python_ConvertArgToEdsId(const EdsLib_DatabaseObject_t *GD, PyObject *arg); -PyTypeObject* EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Database_t *EdsDb, EdsLib_Id_t EdsId); +PyTypeObject *EdsLib_Python_DatabaseEntry_GetFromEdsId_Impl(EdsLib_Python_Database_t *EdsDb, EdsLib_Id_t EdsId); PyObject *EdsLib_Python_ElementAccessor_CreateFromOffsetSize(EdsLib_Id_t EdsId, Py_ssize_t Offset, Py_ssize_t Length); PyObject *EdsLib_Python_ElementAccessor_CreateFromEntityInfo(const EdsLib_DataTypeDB_EntityInfo_t *EntityInfo); PyObject *EdsLib_Python_ObjectBase_InitArgsToKwds(PyObject *args, PyObject *kwds, const char **kwlist); PyObject *EdsLib_Python_ObjectBase_BuildKwArgs(const char *format, const char **kwlist, ...); -bool EdsLib_Python_ObjectBase_SetKwArg(PyObject *kwds, const char *format, const char *kw, ...); -bool EdsLib_Python_ObjectBase_GetKwArg(PyObject *kwds, const char *format, const char *kw, void *OutPtr); +bool EdsLib_Python_ObjectBase_SetKwArg(PyObject *kwds, const char *format, const char *kw, ...); +bool EdsLib_Python_ObjectBase_GetKwArg(PyObject *kwds, const char *format, const char *kw, void *OutPtr); PyObject *EdsLib_Python_ObjectBase_GenericNew(PyTypeObject *objtype, PyObject *kwargs); -PyObject *EdsLib_Python_ObjectBase_NewSubObject(PyObject *obj, PyTypeObject *subobjtype, Py_ssize_t Offset, Py_ssize_t MaxSize); +PyObject * +EdsLib_Python_ObjectBase_NewSubObject(PyObject *obj, PyTypeObject *subobjtype, Py_ssize_t Offset, Py_ssize_t MaxSize); int EdsLib_Python_ObjectBase_InitBufferView(EdsLib_Python_ObjectBase_t *self, Py_buffer *view, int flags); -int EdsLib_Python_SetupObjectDesciptor(EdsLib_Python_ObjectBase_t *self, EdsLib_Binding_DescriptorObject_t *descobj, int flags); +int EdsLib_Python_SetupObjectDesciptor(EdsLib_Python_ObjectBase_t *self, + EdsLib_Binding_DescriptorObject_t *descobj, + int flags); void EdsLib_Python_ReleaseObjectDesciptor(EdsLib_Binding_DescriptorObject_t *descobj); /* various methods to construct EDS python object buffers */ -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_New(Py_ssize_t len); -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_Copy(const void *buf, Py_ssize_t len); -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromObject(PyObject *bufobj, int readonly); -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromPtrAndSize(void *buf, Py_ssize_t len); -EdsLib_Python_Buffer_t* EdsLib_Python_Buffer_FromConstPtrAndSize(const void *buf, Py_ssize_t len); -const void *EdsLib_Python_Buffer_Peek(EdsLib_Python_Buffer_t* buf); -Py_ssize_t EdsLib_Python_Buffer_GetMaxSize(EdsLib_Python_Buffer_t* buf); -bool EdsLib_Python_Buffer_IsInitialized(EdsLib_Python_Buffer_t* buf); -void EdsLib_Python_Buffer_SetInitialized(EdsLib_Python_Buffer_t* buf); - -EdsLib_Binding_Buffer_Content_t* EdsLib_Python_Buffer_GetContentRef(EdsLib_Python_Buffer_t *self, int userflags); -void EdsLib_Python_Buffer_ReleaseContentRef(EdsLib_Binding_Buffer_Content_t* ref); +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_New(Py_ssize_t len); +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_Copy(const void *buf, Py_ssize_t len); +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_FromObject(PyObject *bufobj, int readonly); +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_FromPtrAndSize(void *buf, Py_ssize_t len); +EdsLib_Python_Buffer_t *EdsLib_Python_Buffer_FromConstPtrAndSize(const void *buf, Py_ssize_t len); +const void *EdsLib_Python_Buffer_Peek(EdsLib_Python_Buffer_t *buf); +Py_ssize_t EdsLib_Python_Buffer_GetMaxSize(EdsLib_Python_Buffer_t *buf); +bool EdsLib_Python_Buffer_IsInitialized(EdsLib_Python_Buffer_t *buf); +void EdsLib_Python_Buffer_SetInitialized(EdsLib_Python_Buffer_t *buf); + +EdsLib_Binding_Buffer_Content_t *EdsLib_Python_Buffer_GetContentRef(EdsLib_Python_Buffer_t *self, int userflags); +void EdsLib_Python_Buffer_ReleaseContentRef(EdsLib_Binding_Buffer_Content_t *ref); /* * EDS-defined data types are split into three categories for Python purposes- @@ -199,5 +193,4 @@ extern PyTypeObject EdsLib_Python_ObjectContainerType; extern PyTypeObject EdsLib_Python_ObjectArrayType; extern PyTypeObject EdsLib_Python_DynamicArrayType; - -#endif /* _EDSLIB_PYTHON_INTERNAL_H_ */ +#endif /* _EDSLIB_PYTHON_INTERNAL_H_ */ diff --git a/edslib/python/src/edslib_python_module.c b/edslib/python/src/edslib_python_module.c index 0e8439b..00aa737 100644 --- a/edslib/python/src/edslib_python_module.c +++ b/edslib/python/src/edslib_python_module.c @@ -18,24 +18,23 @@ * limitations under the License. */ - /** * \file edslib_python_module.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** A module that implements Python bindings for EDS objects -** -** This file is just a thin wrapper that contains a Python-compatible init -** function for the module. This is expected to be used when the EdsLib -** module is imported directly in a Python program. No built-in database -** object will be added. The user is on their own to load a database -** separately from the EdsLib module. -** -** Note that other applications which embed Python would typically -** _not_ use this entry point. Instead, the EdsLib would be registered -** as a built-in module using its own customized init, and typically -** would add an actual database object to the module during that process. + ** A module that implements Python bindings for EDS objects + ** + ** This file is just a thin wrapper that contains a Python-compatible init + ** function for the module. This is expected to be used when the EdsLib + ** module is imported directly in a Python program. No built-in database + ** object will be added. The user is on their own to load a database + ** separately from the EdsLib module. + ** + ** Note that other applications which embed Python would typically + ** _not_ use this entry point. Instead, the EdsLib would be registered + ** as a built-in module using its own customized init, and typically + ** would add an actual database object to the module during that process. */ #include "edslib_python.h" @@ -85,7 +84,6 @@ PyMODINIT_FUNC PyInit_EdsLib(void) #define PyMODINIT_FUNC void #endif - PyMODINIT_FUNC initEdsLib(void) { /* python2 does not want module object */ @@ -93,4 +91,3 @@ PyMODINIT_FUNC initEdsLib(void) } #endif - diff --git a/edslib/python/src/edslib_python_number.c b/edslib/python/src/edslib_python_number.c index 8df855d..2803de9 100644 --- a/edslib/python/src/edslib_python_number.c +++ b/edslib/python/src/edslib_python_number.c @@ -18,16 +18,15 @@ * limitations under the License. */ - /** * \file edslib_python_number.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement Python data type for EDS number objects -** -** This extends the base object type and implements the "number protocol" -** so EDS objects can work with all standard Python functions that accept numbers. + ** Implement Python data type for EDS number objects + ** + ** This extends the base object type and implements the "number protocol" + ** so EDS objects can work with all standard Python functions that accept numbers. */ #include "edslib_python_internal.h" @@ -36,46 +35,41 @@ * Only implementing the "number conversion" methods. * This should allow EDS numbers to be coerced into integer or floats as necessary */ -static PyObject * EdsLib_Python_NativeObject_NumberAsInt(PyObject *obj); -static PyObject * EdsLib_Python_NativeObject_NumberAsFloat(PyObject *obj); -static int EdsLib_Python_NativeObject_NumberAsBool(PyObject *obj); - +static PyObject *EdsLib_Python_NativeObject_NumberAsInt(PyObject *obj); +static PyObject *EdsLib_Python_NativeObject_NumberAsFloat(PyObject *obj); +static int EdsLib_Python_NativeObject_NumberAsBool(PyObject *obj); -static PyNumberMethods EdsLib_Python_NumberMethods = -{ +static PyNumberMethods EdsLib_Python_NumberMethods = { #if PY_MAJOR_VERSION >= 3 - .nb_bool = EdsLib_Python_NativeObject_NumberAsBool, - .nb_int = EdsLib_Python_NativeObject_NumberAsInt, + .nb_bool = EdsLib_Python_NativeObject_NumberAsBool, + .nb_int = EdsLib_Python_NativeObject_NumberAsInt, #else - .nb_nonzero = EdsLib_Python_NativeObject_NumberAsBool, - .nb_long = EdsLib_Python_NativeObject_NumberAsInt, + .nb_nonzero = EdsLib_Python_NativeObject_NumberAsBool, + .nb_long = EdsLib_Python_NativeObject_NumberAsInt, #endif - .nb_float = EdsLib_Python_NativeObject_NumberAsFloat, - .nb_index = EdsLib_Python_NativeObject_NumberAsInt + .nb_float = EdsLib_Python_NativeObject_NumberAsFloat, + .nb_index = EdsLib_Python_NativeObject_NumberAsInt }; -PyTypeObject EdsLib_Python_ObjectNumberType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("Number"), - .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), - .tp_base = &EdsLib_Python_ObjectScalarType, - .tp_as_number = &EdsLib_Python_NumberMethods, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - .tp_doc = PyDoc_STR("EDS Number Value") -}; +PyTypeObject EdsLib_Python_ObjectNumberType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("Number"), + .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), + .tp_base = &EdsLib_Python_ObjectScalarType, + .tp_as_number = &EdsLib_Python_NumberMethods, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyDoc_STR("EDS Number Value") }; static void EdsLib_Python_NativeObject_GetValueBuffer(PyObject *obj, EdsLib_GenericValueBuffer_t *ValBuf) { - EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; - EdsLib_BasicType_t DesiredValueType; + EdsLib_Python_ObjectBase_t *self = (EdsLib_Python_ObjectBase_t *)obj; + EdsLib_BasicType_t DesiredValueType; EdsLib_Binding_DescriptorObject_t viewdesc; - DesiredValueType = ValBuf->ValueType; + DesiredValueType = ValBuf->ValueType; ValBuf->ValueType = EDSLIB_BASICTYPE_NONE; - if (!PyType_IsSubtype(Py_TYPE(obj), &EdsLib_Python_ObjectBaseType) || - !PyType_IsSubtype(Py_TYPE(obj->ob_type), &EdsLib_Python_DatabaseEntryType)) + if (!PyType_IsSubtype(Py_TYPE(obj), &EdsLib_Python_ObjectBaseType) + || !PyType_IsSubtype(Py_TYPE(obj->ob_type), &EdsLib_Python_DatabaseEntryType)) { PyErr_SetString(PyExc_TypeError, "Object is not an EDS type"); return; @@ -98,12 +92,12 @@ static void EdsLib_Python_NativeObject_GetValueBuffer(PyObject *obj, EdsLib_Gene EdsLib_Python_ReleaseObjectDesciptor(&viewdesc); } -static PyObject * EdsLib_Python_NativeObject_NumberAsInt(PyObject *obj) +static PyObject *EdsLib_Python_NativeObject_NumberAsInt(PyObject *obj) { EdsLib_GenericValueBuffer_t ValBuf; - PyObject *result; + PyObject *result; - ValBuf.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; + ValBuf.ValueType = EDSLIB_BASICTYPE_SIGNED_INT; ValBuf.Value.SignedInteger = 0; EdsLib_Python_NativeObject_GetValueBuffer(obj, &ValBuf); @@ -125,12 +119,12 @@ static PyObject * EdsLib_Python_NativeObject_NumberAsInt(PyObject *obj) return result; } -static PyObject * EdsLib_Python_NativeObject_NumberAsFloat(PyObject *obj) +static PyObject *EdsLib_Python_NativeObject_NumberAsFloat(PyObject *obj) { EdsLib_GenericValueBuffer_t ValBuf; - PyObject *result; + PyObject *result; - ValBuf.ValueType = EDSLIB_BASICTYPE_FLOAT; + ValBuf.ValueType = EDSLIB_BASICTYPE_FLOAT; ValBuf.Value.FloatingPoint = 0; EdsLib_Python_NativeObject_GetValueBuffer(obj, &ValBuf); @@ -152,15 +146,14 @@ static PyObject * EdsLib_Python_NativeObject_NumberAsFloat(PyObject *obj) return result; } -static int EdsLib_Python_NativeObject_NumberAsBool(PyObject *obj) +static int EdsLib_Python_NativeObject_NumberAsBool(PyObject *obj) { EdsLib_GenericValueBuffer_t ValBuf; - ValBuf.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; + ValBuf.ValueType = EDSLIB_BASICTYPE_UNSIGNED_INT; ValBuf.Value.FloatingPoint = 0; EdsLib_Python_NativeObject_GetValueBuffer(obj, &ValBuf); - return (ValBuf.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT && - ValBuf.Value.UnsignedInteger != 0); + return (ValBuf.ValueType == EDSLIB_BASICTYPE_UNSIGNED_INT && ValBuf.Value.UnsignedInteger != 0); } diff --git a/edslib/python/src/edslib_python_packedobject.c b/edslib/python/src/edslib_python_packedobject.c index d09d6bb..bac647e 100644 --- a/edslib/python/src/edslib_python_packedobject.c +++ b/edslib/python/src/edslib_python_packedobject.c @@ -18,17 +18,16 @@ * limitations under the License. */ - /** * \file edslib_python_packedobject.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement "packed object" type -** -** This is just a light wrapper around the standard Python Bytes type. Its -** main purpose is to tell the difference between native bytes objects and -** bytes objects which are in the packed form, so they can be converted accordingly. + ** Implement "packed object" type + ** + ** This is just a light wrapper around the standard Python Bytes type. Its + ** main purpose is to tell the difference between native bytes objects and + ** bytes objects which are in the packed form, so they can be converted accordingly. */ #include "edslib_python_internal.h" @@ -37,8 +36,10 @@ * but older versions need a small workaround */ #if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_TYPE) static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) -{ ob->ob_type = type; } -#define Py_SET_TYPE(ob, type) _Py_SET_TYPE((PyObject*)(ob), type) +{ + ob->ob_type = type; +} +#define Py_SET_TYPE(ob, type) _Py_SET_TYPE((PyObject *)(ob), type) #endif /* * A shared scratch buffer for packing objects... @@ -50,38 +51,34 @@ static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) typedef struct { - void *ScratchPtr; + void *ScratchPtr; Py_ssize_t ScratchSize; Py_ssize_t ContentSize; } EdsLib_Python_ObjectScratchArea_t; - static EdsLib_Python_ObjectScratchArea_t EdsLib_Python_PackedObject_GLOBAL = { NULL, 0, 0 }; static PyObject *EdsLib_Python_PackedObjectType_new(PyTypeObject *objtype, PyObject *args, PyObject *kwds); static PyObject *EdsLib_Python_PackedObjectType_repr(PyObject *obj); -PyTypeObject EdsLib_Python_PackedObjectType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("PackedObject"), - .tp_basicsize = sizeof(PyBytesObject), - .tp_itemsize = 1, - .tp_base = &PyBytes_Type, - .tp_new = EdsLib_Python_PackedObjectType_new, - .tp_repr = EdsLib_Python_PackedObjectType_repr, - .tp_flags = Py_TPFLAGS_DEFAULT, - .tp_doc = PyDoc_STR("EDS Packed Object Bytes Type") -}; - -static int EdsLib_Python_InitScratchAreaFromEdsObject(EdsLib_Python_ObjectBase_t *srcobj, - EdsLib_Python_ObjectScratchArea_t *scratch) +PyTypeObject EdsLib_Python_PackedObjectType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("PackedObject"), + .tp_basicsize = sizeof(PyBytesObject), + .tp_itemsize = 1, + .tp_base = &PyBytes_Type, + .tp_new = EdsLib_Python_PackedObjectType_new, + .tp_repr = EdsLib_Python_PackedObjectType_repr, + .tp_flags = Py_TPFLAGS_DEFAULT, + .tp_doc = PyDoc_STR("EDS Packed Object Bytes Type") }; + +static int EdsLib_Python_InitScratchAreaFromEdsObject(EdsLib_Python_ObjectBase_t *srcobj, + EdsLib_Python_ObjectScratchArea_t *scratch) { - EdsLib_Binding_DescriptorObject_t viewdesc; - EdsLib_Python_DatabaseEntry_t *dbent; + EdsLib_Binding_DescriptorObject_t viewdesc; + EdsLib_Python_DatabaseEntry_t *dbent; EdsLib_DataTypeDB_DerivedTypeInfo_t DerivInfo; - size_t actualsz; - int32_t status; + size_t actualsz; + int32_t status; if (srcobj->StorageBuf == NULL) { @@ -90,7 +87,7 @@ static int EdsLib_Python_InitScratchAreaFromEdsObject(EdsLib_Python_ObjectBase_t } scratch->ContentSize = 0; - dbent = (EdsLib_Python_DatabaseEntry_t *)Py_TYPE(srcobj); + dbent = (EdsLib_Python_DatabaseEntry_t *)Py_TYPE(srcobj); EdsLib_DataTypeDB_GetDerivedInfo(dbent->EdsDb->GD, dbent->EdsId, &DerivInfo); actualsz = (DerivInfo.MaxSize.Bits + 7) / 8; @@ -130,8 +127,7 @@ static int EdsLib_Python_InitScratchAreaFromEdsObject(EdsLib_Python_ObjectBase_t return 0; } - status = EdsLib_Binding_ExportToPackedBuffer(&viewdesc, - scratch->ScratchPtr, actualsz-1); + status = EdsLib_Binding_ExportToPackedBuffer(&viewdesc, scratch->ScratchPtr, actualsz - 1); EdsLib_Python_ReleaseObjectDesciptor(&viewdesc); @@ -151,14 +147,14 @@ static int EdsLib_Python_InitScratchAreaFromEdsObject(EdsLib_Python_ObjectBase_t static PyObject *EdsLib_Python_PackedObjectType_new(PyTypeObject *objtype, PyObject *args, PyObject *kwds) { - PyObject *argobj; + PyObject *argobj; PyBytesObject *result; - void *contentdata_src; - size_t contentdata_size; + void *contentdata_src; + size_t contentdata_size; - contentdata_src = NULL; + contentdata_src = NULL; contentdata_size = 0; - result = NULL; + result = NULL; if (!PyArg_ParseTuple(args, "O:PackedObjectType_new", &argobj)) { return NULL; @@ -173,17 +169,16 @@ static PyObject *EdsLib_Python_PackedObjectType_new(PyTypeObject *objtype, PyObj */ if (PyObject_TypeCheck(Py_TYPE(argobj), &EdsLib_Python_DatabaseEntryType)) { - if (EdsLib_Python_InitScratchAreaFromEdsObject( - (EdsLib_Python_ObjectBase_t *)argobj, - &EdsLib_Python_PackedObject_GLOBAL)) + if (EdsLib_Python_InitScratchAreaFromEdsObject((EdsLib_Python_ObjectBase_t *)argobj, + &EdsLib_Python_PackedObject_GLOBAL)) { - contentdata_src = EdsLib_Python_PackedObject_GLOBAL.ScratchPtr; + contentdata_src = EdsLib_Python_PackedObject_GLOBAL.ScratchPtr; contentdata_size = EdsLib_Python_PackedObject_GLOBAL.ContentSize; } } else if (PyObject_TypeCheck(argobj, &PyBytes_Type)) { - contentdata_src = PyBytes_AS_STRING(argobj); + contentdata_src = PyBytes_AS_STRING(argobj); contentdata_size = PyBytes_GET_SIZE(argobj); } else @@ -194,20 +189,21 @@ static PyObject *EdsLib_Python_PackedObjectType_new(PyTypeObject *objtype, PyObj if (contentdata_src != NULL) { - result = (PyBytesObject*)PyBytes_FromStringAndSize(contentdata_src, contentdata_size); + result = (PyBytesObject *)PyBytes_FromStringAndSize(contentdata_src, contentdata_size); if (result != NULL) { - /* This identifies it as an instance of the EdsLib.PackedObject type, as opposed to a vanilla bytes object */ + /* This identifies it as an instance of the EdsLib.PackedObject type, as opposed to a vanilla bytes object + */ Py_SET_TYPE(result, objtype); } } - return (PyObject*)result; + return (PyObject *)result; } static PyObject *EdsLib_Python_PackedObjectType_repr(PyObject *obj) { - PyObject *repr = EdsLib_Python_PackedObjectType.tp_base->tp_repr(obj); + PyObject *repr = EdsLib_Python_PackedObjectType.tp_base->tp_repr(obj); PyObject *result = NULL; if (repr != NULL) @@ -218,4 +214,3 @@ static PyObject *EdsLib_Python_PackedObjectType_repr(PyObject *obj) return result; } - diff --git a/edslib/python/src/edslib_python_scalar.c b/edslib/python/src/edslib_python_scalar.c index 54e4229..dc35f82 100644 --- a/edslib/python/src/edslib_python_scalar.c +++ b/edslib/python/src/edslib_python_scalar.c @@ -18,34 +18,30 @@ * limitations under the License. */ - /** * \file edslib_python_scalar.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement Python data type for EDS scalar objects. -** -** This is to provide a better implementation of the "str" routine, which -** converts EDS objects into strings. Without this, the "repr" function -** would be used which produces less useful results for passing into another -** function which expects a string. + ** Implement Python data type for EDS scalar objects. + ** + ** This is to provide a better implementation of the "str" routine, which + ** converts EDS objects into strings. Without this, the "repr" function + ** would be used which produces less useful results for passing into another + ** function which expects a string. */ #include "edslib_python_internal.h" static PyObject *EdsLib_Python_NativeObject_ScalarType_str(PyObject *obj); -PyTypeObject EdsLib_Python_ObjectScalarType = -{ - PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = EDSLIB_PYTHON_ENTITY_NAME("Scalar"), - .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), - .tp_base = &EdsLib_Python_ObjectBaseType, - .tp_str = EdsLib_Python_NativeObject_ScalarType_str, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - .tp_doc = PyDoc_STR("EDS ScalarDataType") -}; +PyTypeObject EdsLib_Python_ObjectScalarType = { PyVarObject_HEAD_INIT(NULL, 0).tp_name = + EDSLIB_PYTHON_ENTITY_NAME("Scalar"), + .tp_basicsize = sizeof(EdsLib_Python_ObjectBase_t), + .tp_base = &EdsLib_Python_ObjectBaseType, + .tp_str = EdsLib_Python_NativeObject_ScalarType_str, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_doc = PyDoc_STR("EDS ScalarDataType") }; static PyObject *EdsLib_Python_NativeObject_ScalarType_str(PyObject *obj) { diff --git a/edslib/python/src/edslib_python_setup.c b/edslib/python/src/edslib_python_setup.c index bf9618c..e06385e 100644 --- a/edslib/python/src/edslib_python_setup.c +++ b/edslib/python/src/edslib_python_setup.c @@ -19,13 +19,12 @@ * limitations under the License. */ - /** * \file edslib_python_setup.c * \ingroup python * \author joseph.p.hickey@nasa.gov * -** Implement setup function / initializer for EDS/Python module objects + ** Implement setup function / initializer for EDS/Python module objects */ #include "edslib_python_internal.h" @@ -39,15 +38,12 @@ */ #if (PY_MAJOR_VERSION >= 3) -static PyModuleDef EdsLib_Python_ModuleDef = -{ - PyModuleDef_HEAD_INIT, - EDSLIB_PYTHON_MODULE_NAME, - PyDoc_STR(EDSLIB_PYTHON_DOC), - -1 -}; +static PyModuleDef EdsLib_Python_ModuleDef = { PyModuleDef_HEAD_INIT, + EDSLIB_PYTHON_MODULE_NAME, + PyDoc_STR(EDSLIB_PYTHON_DOC), + -1 }; -static inline PyObject* EdsLib_Python_InstantiateModule(void) +static inline PyObject *EdsLib_Python_InstantiateModule(void) { /* python3 uses PyModule_Create() API */ return PyModule_Create(&EdsLib_Python_ModuleDef); @@ -55,7 +51,7 @@ static inline PyObject* EdsLib_Python_InstantiateModule(void) #else -static inline PyObject* EdsLib_Python_InstantiateModule(void) +static inline PyObject *EdsLib_Python_InstantiateModule(void) { /* python2 uses Py_InitModule3() API */ return Py_InitModule3(EDSLIB_PYTHON_MODULE_NAME, NULL, EDSLIB_PYTHON_DOC); @@ -63,8 +59,7 @@ static inline PyObject* EdsLib_Python_InstantiateModule(void) #endif - -PyObject* EdsLib_Python_CreateModule(void) +PyObject *EdsLib_Python_CreateModule(void) { PyObject *m = NULL; @@ -73,20 +68,16 @@ PyObject* EdsLib_Python_CreateModule(void) /* * Prepare all of the types defined here */ - if (PyType_Ready(&EdsLib_Python_DatabaseType) != 0 || - PyType_Ready(&EdsLib_Python_DatabaseEntryType) != 0 || - PyType_Ready(&EdsLib_Python_BufferType) != 0 || - PyType_Ready(&EdsLib_Python_AccessorType) != 0 || - PyType_Ready(&EdsLib_Python_PackedObjectType) != 0 || - PyType_Ready(&EdsLib_Python_ContainerIteratorType) != 0 || - PyType_Ready(&EdsLib_Python_EnumEntryIteratorType) != 0 || - PyType_Ready(&EdsLib_Python_ContainerEntryIteratorType) != 0 || - PyType_Ready(&EdsLib_Python_ObjectBaseType) != 0 || - PyType_Ready(&EdsLib_Python_ObjectScalarType) != 0 || - PyType_Ready(&EdsLib_Python_ObjectNumberType) != 0 || - PyType_Ready(&EdsLib_Python_ObjectContainerType) != 0 || - PyType_Ready(&EdsLib_Python_ObjectArrayType) != 0 || - PyType_Ready(&EdsLib_Python_DynamicArrayType) != 0) + if (PyType_Ready(&EdsLib_Python_DatabaseType) != 0 || PyType_Ready(&EdsLib_Python_DatabaseEntryType) != 0 + || PyType_Ready(&EdsLib_Python_BufferType) != 0 || PyType_Ready(&EdsLib_Python_AccessorType) != 0 + || PyType_Ready(&EdsLib_Python_PackedObjectType) != 0 + || PyType_Ready(&EdsLib_Python_ContainerIteratorType) != 0 + || PyType_Ready(&EdsLib_Python_EnumEntryIteratorType) != 0 + || PyType_Ready(&EdsLib_Python_ContainerEntryIteratorType) != 0 + || PyType_Ready(&EdsLib_Python_ObjectBaseType) != 0 || PyType_Ready(&EdsLib_Python_ObjectScalarType) != 0 + || PyType_Ready(&EdsLib_Python_ObjectNumberType) != 0 + || PyType_Ready(&EdsLib_Python_ObjectContainerType) != 0 + || PyType_Ready(&EdsLib_Python_ObjectArrayType) != 0 || PyType_Ready(&EdsLib_Python_DynamicArrayType) != 0) { break; } @@ -109,14 +100,12 @@ PyObject* EdsLib_Python_CreateModule(void) /* * Add appropriate types so object instances can be constructed */ - PyModule_AddObject(m, "Database", (PyObject*)&EdsLib_Python_DatabaseType); - PyModule_AddObject(m, "DatabaseEntry", (PyObject*)&EdsLib_Python_DatabaseEntryType); - PyModule_AddObject(m, "PackedObject", (PyObject*)&EdsLib_Python_PackedObjectType); - PyModule_AddObject(m, "ElementAccessor", (PyObject*)&EdsLib_Python_AccessorType); - PyModule_AddObject(m, "DynamicArray", (PyObject*)&EdsLib_Python_DynamicArrayType); - } - while(0); + PyModule_AddObject(m, "Database", (PyObject *)&EdsLib_Python_DatabaseType); + PyModule_AddObject(m, "DatabaseEntry", (PyObject *)&EdsLib_Python_DatabaseEntryType); + PyModule_AddObject(m, "PackedObject", (PyObject *)&EdsLib_Python_PackedObjectType); + PyModule_AddObject(m, "ElementAccessor", (PyObject *)&EdsLib_Python_AccessorType); + PyModule_AddObject(m, "DynamicArray", (PyObject *)&EdsLib_Python_DynamicArrayType); + } while (0); return m; } - diff --git a/tool/src/seds_checksum.c b/tool/src/seds_checksum.c index 1bfe1fd..68fac0d 100644 --- a/tool/src/seds_checksum.c +++ b/tool/src/seds_checksum.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_checksum.c * \ingroup tool @@ -64,7 +63,7 @@ /** * Polynomial used to initialize the checksum table */ -#define SEDS_CHECKSUM_POLY 0x04C11DB70012E321U +#define SEDS_CHECKSUM_POLY 0x04C11DB70012E321U /** * Internal byte-wise checksum table, to speed up calculations @@ -88,9 +87,9 @@ void seds_checksum_init_table(void) seds_checksum_t v; seds_checksum_t mask; seds_checksum_t result; - int32_t i, j; + int32_t i, j; - mask = 1; + mask = 1; mask <<= 8 * sizeof(mask) - 1; /* * This is a modified / simplified crc-type checksum @@ -99,9 +98,9 @@ void seds_checksum_init_table(void) * the table is skewed to place the "no effect" byte at a * different spot in the table. */ - for(i = 0; i < 256; ++i) + for (i = 0; i < 256; ++i) { - v = i ^ 0x7F; + v = i ^ 0x7F; v <<= 8 * sizeof(v) - 8; for (j = 0; j < 8; ++j) { @@ -118,8 +117,8 @@ void seds_checksum_init_table(void) result = 0; for (j = 0; j < (8 * sizeof(v)); ++j) { - result = (result << 1) | (v & 1); - v >>= 1; + result = (result << 1) | (v & 1); + v >>= 1; } SEDS_CHECKSUM_TABLE[i] = result; @@ -154,14 +153,14 @@ seds_checksum_t seds_update_checksum_numeric(seds_checksum_t sum, uintmax_t loca while (significant_bits > 0) { - sum = (sum >> 8) ^ SEDS_CHECKSUM_TABLE[(sum ^ localvalue) & 0xFF]; + sum = (sum >> 8) ^ SEDS_CHECKSUM_TABLE[(sum ^ localvalue) & 0xFF]; /* * In theory the right shift should always insert 0 bits on the left, * since the argument is unsigned. However, the C spec allows for some * implementation-defined behavior with right shifts, so.... * Apply a mask to ensure that the leftmost bits are indeed zero. */ - localvalue = (localvalue >> 8) & LOCAL_MASK; + localvalue = (localvalue >> 8) & LOCAL_MASK; significant_bits -= 8; } @@ -217,4 +216,3 @@ seds_checksum_t seds_update_checksum_int(seds_checksum_t sum, seds_integer_t val */ return seds_update_checksum_numeric(sum, value, 64); } - diff --git a/tool/src/seds_checksum.h b/tool/src/seds_checksum.h index 28c77b5..07ed1e7 100644 --- a/tool/src/seds_checksum.h +++ b/tool/src/seds_checksum.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_checksum.h * \ingroup tool @@ -33,10 +32,8 @@ #ifndef _SEDS_CHECKSUM_H_ #define _SEDS_CHECKSUM_H_ - #include "seds_global.h" - /*******************************************************************************/ /* Macro definitions */ /*******************************************************************************/ @@ -44,8 +41,7 @@ /** * Initial value to use for checksum calculations */ -#define SEDS_CHECKSUM_INITIAL 0x49A42201BE3217D6U - +#define SEDS_CHECKSUM_INITIAL 0x49A42201BE3217D6U /*******************************************************************************/ /* Function documentation and prototypes */ @@ -74,7 +70,8 @@ void seds_checksum_init_table(void); * @param significant_bits the number of bits in localvalue to consider * @return updated checksum */ -seds_checksum_t seds_update_checksum_numeric(seds_checksum_t sum, uintmax_t localvalue, seds_integer_t significant_bits); +seds_checksum_t +seds_update_checksum_numeric(seds_checksum_t sum, uintmax_t localvalue, seds_integer_t significant_bits); /** * Update a checksum based on a string value @@ -106,6 +103,4 @@ seds_checksum_t seds_update_checksum_string(seds_checksum_t sum, const char *cst */ seds_checksum_t seds_update_checksum_int(seds_checksum_t sum, seds_integer_t value); - -#endif /* _SEDS_CHECKSUM_H_ */ - +#endif /* _SEDS_CHECKSUM_H_ */ diff --git a/tool/src/seds_generic_props.c b/tool/src/seds_generic_props.c index 59372e4..5999c52 100644 --- a/tool/src/seds_generic_props.c +++ b/tool/src/seds_generic_props.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_generic_props.c * \ingroup tool @@ -50,8 +49,6 @@ static const char PROPERTY_HISTORY_KEY; /* (these are not referenced outside this unit) */ /*******************************************************************************/ - - /* ------------------------------------------------------------------- */ /** * Lua callable helper function to get the tracking data of a given property name @@ -129,7 +126,6 @@ static void seds_generic_props_do_tracking(lua_State *lua, const char *action_na /* (referenced outside this unit and prototyped in a separate header) */ /*******************************************************************************/ - /* * ------------------------------------------------------ * External API function - see full details in prototype. @@ -223,7 +219,6 @@ int seds_generic_props_set_property(lua_State *lua) seds_generic_props_do_tracking(lua, action_name); } - /* * Do the actual property value set */ @@ -236,7 +231,6 @@ int seds_generic_props_set_property(lua_State *lua) return 0; } - /* * ------------------------------------------------------ * External API function - see full details in prototype. @@ -249,7 +243,7 @@ int seds_generic_props_enumerate_properties(lua_State *lua) lua_getuservalue(lua, 1); luaL_checktype(lua, 3, LUA_TTABLE); lua_pushnil(lua); - while(lua_next(lua, 3) != 0) + while (lua_next(lua, 3) != 0) { lua_pushvalue(lua, 4); lua_rawseti(lua, 2, 1 + lua_rawlen(lua, 2)); diff --git a/tool/src/seds_generic_props.h b/tool/src/seds_generic_props.h index 963c6fd..295d71a 100644 --- a/tool/src/seds_generic_props.h +++ b/tool/src/seds_generic_props.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_generic_props.h * \ingroup tool @@ -31,7 +30,6 @@ #ifndef _SEDS_GENERIC_PROPS_H_ #define _SEDS_GENERIC_PROPS_H_ - #include "seds_global.h" /*******************************************************************************/ @@ -39,7 +37,6 @@ /* (everything referenced outside this unit should be described here) */ /*******************************************************************************/ - /** * Lua callable function to get a property of a userdata object * @@ -86,12 +83,9 @@ int seds_generic_props_set_property(lua_State *lua); */ int seds_generic_props_enumerate_properties(lua_State *lua); - /** * Register any globals associated with this module in the Lua state */ void seds_generic_props_register_globals(lua_State *lua); - -#endif /* _SEDS_GENERIC_PROPS_H_ */ - +#endif /* _SEDS_GENERIC_PROPS_H_ */ diff --git a/tool/src/seds_global.h b/tool/src/seds_global.h index 3eeaa0e..ecf1234 100644 --- a/tool/src/seds_global.h +++ b/tool/src/seds_global.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_global.h * \ingroup tool @@ -38,7 +37,6 @@ #ifndef _SEDS_GLOBAL_H_ #define _SEDS_GLOBAL_H_ - /* Use C99 standard integer/boolean types. Any viable host/build system must have these headers. */ #include #include @@ -61,10 +59,10 @@ * When using GNU C, it can give helpful warnings about mismatched arguments to printf-style calls. * this macro enables that error checking. */ -#if defined (__GNUC__) -#define SEDS_PRINTF(n,m) __attribute__ ((format (printf, n, m))) +#if defined(__GNUC__) +#define SEDS_PRINTF(n, m) __attribute__((format(printf, n, m))) #else -#define SEDS_PRINTF(n,m) +#define SEDS_PRINTF(n, m) #endif /** @@ -83,30 +81,30 @@ typedef uint64_t seds_checksum_t; /** * Minimum value for seds_integer_t values */ -#define SEDS_INTEGER_MIN INTMAX_MIN +#define SEDS_INTEGER_MIN INTMAX_MIN /** * Maximum value for seds_integer_t values */ -#define SEDS_INTEGER_MAX INTMAX_MAX +#define SEDS_INTEGER_MAX INTMAX_MAX /** EDS booleans */ -typedef bool seds_boolean_t; +typedef bool seds_boolean_t; /** EDS floating-point number values */ -typedef double seds_number_t; +typedef double seds_number_t; /** * Maximum value for seds_number_t values without losing integer precision. * NOTE - this is not the full range of the data type, but rather a "useful range" */ -#define SEDS_NUMBER_MAX ((seds_number_t)((1ULL << DBL_MANT_DIG))) +#define SEDS_NUMBER_MAX ((seds_number_t)((1ULL << DBL_MANT_DIG))) /** * Minimum value for seds_number_t values without losing integer precision. * NOTE - this is not the full range of the data type, but rather a "useful range" */ -#define SEDS_NUMBER_MIN (-SEDS_NUMBER_MAX) +#define SEDS_NUMBER_MIN (-SEDS_NUMBER_MAX) /** * Structure to store the top-level state of the toolchain as a while @@ -141,11 +139,9 @@ typedef struct } seds_toplevel_t; - /** * A single global containing the top level state object of the tool. */ extern seds_toplevel_t sedstool; - -#endif /* _SEDS_GLOBAL_H_ */ +#endif /* _SEDS_GLOBAL_H_ */ diff --git a/tool/src/seds_instance_node.c b/tool/src/seds_instance_node.c index 8d5473f..51bdc92 100644 --- a/tool/src/seds_instance_node.c +++ b/tool/src/seds_instance_node.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_instance_node.c * \ingroup tool @@ -48,17 +47,13 @@ * This module is loaded when the tree functions are registered. */ static const char SEDS_INSTANCE_METHODS_SCRIPT_FILE[] = "seds_instance_methods.lua"; -static const char SEDS_INSTANCE_PROPERTIES_LUA_KEY = '\0'; - - +static const char SEDS_INSTANCE_PROPERTIES_LUA_KEY = '\0'; /*******************************************************************************/ /* Internal / static Helper Functions */ /* (these are not referenced outside this unit) */ /*******************************************************************************/ - - /* ------------------------------------------------------------------- */ /** * Helper function to compare two "seds_instance" objects @@ -81,9 +76,7 @@ static int seds_instance_node_compare(lua_State *lua) lua_getuservalue(lua, 2); lua_getfield(lua, 3, "name"); lua_getfield(lua, 4, "name"); - if (lua_isnil(lua, 5) || - lua_type(lua, 5) != lua_type(lua, 6) || - lua_compare(lua, 5, 6, LUA_OPEQ)) + if (lua_isnil(lua, 5) || lua_type(lua, 5) != lua_type(lua, 6) || lua_compare(lua, 5, 6, LUA_OPEQ)) { lua_pop(lua, 2); lua_getfield(lua, 3, "id"); @@ -156,7 +149,7 @@ static int seds_new_component_instance(lua_State *lua) seds_node_t *compnode = luaL_checkudata(lua, 1, "seds_node"); seds_node_t *rulenode = luaL_checkudata(lua, 2, "seds_node"); seds_node_t *trigger; - int instance_pos; + int instance_pos; if (lua_gettop(lua) >= 3) { @@ -249,4 +242,3 @@ void seds_instance_node_register_globals(lua_State *lua) lua_rawsetp(lua, LUA_REGISTRYINDEX, &SEDS_INSTANCE_PROPERTIES_LUA_KEY); } - diff --git a/tool/src/seds_instance_node.h b/tool/src/seds_instance_node.h index fc58c4e..087ac24 100644 --- a/tool/src/seds_instance_node.h +++ b/tool/src/seds_instance_node.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_instance_node.h * \ingroup tool @@ -38,13 +37,10 @@ /* (everything referenced outside this unit should be described here) */ /*******************************************************************************/ - /** * Register the tree functions which are called from Lua * These are added to a table which is at the top of the stack */ void seds_instance_node_register_globals(lua_State *lua); - -#endif /* _SEDS_INSTANCE_NODE_H_ */ - +#endif /* _SEDS_INSTANCE_NODE_H_ */ diff --git a/tool/src/seds_memreq.c b/tool/src/seds_memreq.c index 42c6c85..f32d48a 100644 --- a/tool/src/seds_memreq.c +++ b/tool/src/seds_memreq.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_memreq.c * \ingroup tool @@ -47,13 +46,11 @@ #include "seds_memreq.h" - /*******************************************************************************/ /* Internal / static Helper Functions */ /* (these are not referenced outside this unit) */ /*******************************************************************************/ - /** * Lua-callable Helper function to append an element to a container memory requirement * @@ -68,7 +65,7 @@ static int seds_memreq_add(lua_State *lua) { seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); - seds_memreq_t *padd = luaL_checkudata(lua, 2, "seds_memreq"); + seds_memreq_t *padd = luaL_checkudata(lua, 2, "seds_memreq"); seds_integer_t start_offset_bytes; seds_integer_t start_offset_bits; @@ -97,8 +94,7 @@ static int seds_memreq_add(lua_State *lua) /* inherit the status of the added element */ psize->packing_status = padd->packing_status; } - else if (padd->packing_status != SEDS_BYTEPACK_STATUS_UNDEFINED && - psize->packing_status != padd->packing_status) + else if (padd->packing_status != SEDS_BYTEPACK_STATUS_UNDEFINED && psize->packing_status != padd->packing_status) { psize->packing_status = SEDS_BYTEPACK_STATUS_OTHER; } @@ -108,16 +104,16 @@ static int seds_memreq_add(lua_State *lua) psize->is_variable_size = true; } - start_offset_bits = psize->raw_bit_size; - start_offset_bytes = (psize->endpoint_bytes + padd->local_align_mask) & ~padd->local_align_mask; + start_offset_bits = psize->raw_bit_size; + start_offset_bytes = (psize->endpoint_bytes + padd->local_align_mask) & ~padd->local_align_mask; psize->endpoint_bytes = start_offset_bytes + padd->local_storage_bytes; if (psize->local_align_mask < padd->local_align_mask) { psize->local_align_mask = padd->local_align_mask; } - psize->raw_bit_size += padd->raw_bit_size; - psize->local_storage_bytes = (psize->endpoint_bytes + psize->local_align_mask) & ~psize->local_align_mask; + psize->raw_bit_size += padd->raw_bit_size; + psize->local_storage_bytes = (psize->endpoint_bytes + psize->local_align_mask) & ~psize->local_align_mask; psize->checksum = seds_update_checksum_int(psize->checksum, psize->raw_bit_size); psize->checksum = seds_update_checksum_int(psize->checksum, padd->checksum); @@ -136,7 +132,7 @@ static int seds_memreq_add(lua_State *lua) static int seds_memreq_union(lua_State *lua) { seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); - seds_memreq_t *padd = luaL_checkudata(lua, 2, "seds_memreq"); + seds_memreq_t *padd = luaL_checkudata(lua, 2, "seds_memreq"); luaL_argcheck(lua, psize != NULL, 1, "memreq argument expected"); luaL_argcheck(lua, padd != NULL, 2, "memreq argument expected"); @@ -150,12 +146,12 @@ static int seds_memreq_union(lua_State *lua) if (padd->raw_bit_size > psize->raw_bit_size) { - psize->raw_bit_size = padd->raw_bit_size; + psize->raw_bit_size = padd->raw_bit_size; psize->is_variable_size = padd->is_variable_size; } - psize->packing_status = SEDS_BYTEPACK_STATUS_OTHER; - psize->checksum ^= padd->checksum; + psize->packing_status = SEDS_BYTEPACK_STATUS_OTHER; + psize->checksum ^= padd->checksum; return 0; } @@ -167,9 +163,9 @@ static int seds_memreq_union(lua_State *lua) */ static int seds_memreq_multiply(lua_State *lua) { - seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); + seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); seds_integer_t multiplier = luaL_checkinteger(lua, 2); - seds_boolean_t byte_pack = lua_toboolean(lua, 3); + seds_boolean_t byte_pack = lua_toboolean(lua, 3); if (psize->raw_bit_size == 0) { @@ -210,24 +206,24 @@ static int seds_memreq_flavor(lua_State *lua) switch (lua_type(lua, 2)) { - case LUA_TSTRING: - psize->checksum += 2; - psize->checksum = seds_update_checksum_string(psize->checksum, lua_tostring(lua, 2)); - break; - case LUA_TNUMBER: - psize->checksum += 3; - psize->checksum = seds_update_checksum_int(psize->checksum, lua_tointeger(lua, 2)); - break; - case LUA_TBOOLEAN: - psize->checksum += 4; - psize->checksum = seds_update_checksum_int(psize->checksum, lua_toboolean(lua, 2)); - break; - default: - /* - * Causes every pass through this routine to modify the checksum in some way - */ - ++psize->checksum; - break; + case LUA_TSTRING: + psize->checksum += 2; + psize->checksum = seds_update_checksum_string(psize->checksum, lua_tostring(lua, 2)); + break; + case LUA_TNUMBER: + psize->checksum += 3; + psize->checksum = seds_update_checksum_int(psize->checksum, lua_tointeger(lua, 2)); + break; + case LUA_TBOOLEAN: + psize->checksum += 4; + psize->checksum = seds_update_checksum_int(psize->checksum, lua_toboolean(lua, 2)); + break; + default: + /* + * Causes every pass through this routine to modify the checksum in some way + */ + ++psize->checksum; + break; } return 0; @@ -241,7 +237,7 @@ static int seds_memreq_flavor(lua_State *lua) */ static int seds_memreq_setpack(lua_State *lua) { - seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); + seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); seds_bytepack_status_t packstat; if (lua_isnoneornil(lua, 2)) @@ -267,18 +263,16 @@ static int seds_memreq_setpack(lua_State *lua) /* if packing status was already set _differently_ then * set it to OTHER (for mixed values) */ - if (psize->packing_status != SEDS_BYTEPACK_STATUS_UNDEFINED && - packstat != SEDS_BYTEPACK_STATUS_UNDEFINED && - psize->packing_status != packstat) + if (psize->packing_status != SEDS_BYTEPACK_STATUS_UNDEFINED && packstat != SEDS_BYTEPACK_STATUS_UNDEFINED + && psize->packing_status != packstat) { packstat = SEDS_BYTEPACK_STATUS_OTHER; } - if (packstat != SEDS_BYTEPACK_STATUS_UNDEFINED && - psize->packing_status != packstat) + if (packstat != SEDS_BYTEPACK_STATUS_UNDEFINED && psize->packing_status != packstat) { psize->packing_status = packstat; - psize->checksum = seds_update_checksum_int(psize->checksum, 100 + packstat); + psize->checksum = seds_update_checksum_int(psize->checksum, 100 + packstat); } return 0; @@ -305,11 +299,11 @@ static int seds_memreq_setvariable(lua_State *lua) */ static int seds_memreq_pad(lua_State *lua) { - seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); + seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); seds_integer_t pad_bits = luaL_checkinteger(lua, 2); - psize->checksum += 5; - psize->checksum = seds_update_checksum_int(psize->checksum, pad_bits); + psize->checksum += 5; + psize->checksum = seds_update_checksum_int(psize->checksum, pad_bits); psize->raw_bit_size += pad_bits; /* @@ -393,7 +387,7 @@ static int seds_memreq_get_property(lua_State *lua) * Therefore the checksums are returned as a hex string */ char stringbuf[20]; - snprintf(stringbuf,sizeof(stringbuf),"%016lx", (unsigned long)psize->checksum); + snprintf(stringbuf, sizeof(stringbuf), "%016lx", (unsigned long)psize->checksum); lua_pushstring(lua, stringbuf); return 1; } @@ -454,14 +448,16 @@ static int seds_memreq_get_property(lua_State *lua) static int seds_memreq_to_string(lua_State *lua) { seds_memreq_t *psize = luaL_checkudata(lua, 1, "seds_memreq"); - char stringbuf[128]; + char stringbuf[128]; - snprintf(stringbuf, sizeof(stringbuf), "bits=%4ld bytes=%4ld/%-4ld align=0x%lx checksum=%016llx", - (long)psize->raw_bit_size, - (long)psize->endpoint_bytes, - (long)psize->local_storage_bytes, - (unsigned long)psize->local_align_mask, - (unsigned long long)psize->checksum); + snprintf(stringbuf, + sizeof(stringbuf), + "bits=%4ld bytes=%4ld/%-4ld align=0x%lx checksum=%016llx", + (long)psize->raw_bit_size, + (long)psize->endpoint_bytes, + (long)psize->local_storage_bytes, + (unsigned long)psize->local_align_mask, + (unsigned long long)psize->checksum); lua_pushstring(lua, stringbuf); return 1; @@ -496,7 +492,7 @@ int seds_memreq_new_object(lua_State *lua) if (lua_isnumber(lua, 1)) { - psize->raw_bit_size = lua_tointeger(lua, 1); + psize->raw_bit_size = lua_tointeger(lua, 1); psize->endpoint_bytes = (psize->raw_bit_size + 7) / 8; if (lua_isnumber(lua, 2)) @@ -523,8 +519,7 @@ int seds_memreq_new_object(lua_State *lua) * Calculate the initial alignment mask and storage based on the supplied size */ psize->local_align_mask = 1; - while (psize->local_align_mask < 16 && - psize->local_align_mask < psize->endpoint_bytes) + while (psize->local_align_mask < 16 && psize->local_align_mask < psize->endpoint_bytes) { psize->local_align_mask <<= 1; } @@ -532,7 +527,7 @@ int seds_memreq_new_object(lua_State *lua) } psize->local_storage_bytes = (psize->endpoint_bytes + psize->local_align_mask) & ~psize->local_align_mask; - psize->checksum = seds_update_checksum_int(psize->checksum, psize->raw_bit_size); + psize->checksum = seds_update_checksum_int(psize->checksum, psize->raw_bit_size); } else if (lua_isuserdata(lua, 1)) { @@ -563,8 +558,8 @@ int seds_memreq_new_object(lua_State *lua) unsigned int seds_get_binary_digits(double limit, bool twos_complement) { unsigned int digits; - double val; - int exp; + double val; + int exp; val = frexp(fabs(limit), &exp); if (isinf(val)) @@ -577,12 +572,12 @@ unsigned int seds_get_binary_digits(double limit, bool twos_complement) digits = exp; /* - * Because numbers are internally "double" values in Lua, - * anything above ~52 bits may result in an extra - * digit due to rounding up. This adds a "slop factor" - * to avoid triggering false errors (the cost is that - * this might not flag a borderline case that is an error) - */ + * Because numbers are internally "double" values in Lua, + * anything above ~52 bits may result in an extra + * digit due to rounding up. This adds a "slop factor" + * to avoid triggering false errors (the cost is that + * this might not flag a borderline case that is an error) + */ if (digits > 52 && val < 0.55) { --digits; @@ -590,7 +585,7 @@ unsigned int seds_get_binary_digits(double limit, bool twos_complement) else if (twos_complement && val == 0.5 && limit < 0.0) { /* special handling for twos complement, has one extra - * value of range on the negative side */ + * value of range on the negative side */ --digits; } } @@ -619,7 +614,7 @@ int seds_calulate_range_digits(lua_State *lua) double min = lua_tonumber(lua, 2); double posdig; double negdig; - bool twos_complement; + bool twos_complement; if (lua_type(lua, 3) == LUA_TSTRING) { diff --git a/tool/src/seds_memreq.h b/tool/src/seds_memreq.h index 120993a..22ff73a 100644 --- a/tool/src/seds_memreq.h +++ b/tool/src/seds_memreq.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_memreq.h * \ingroup tool @@ -31,7 +30,6 @@ #ifndef _SEDS_MEMREQ_H_ #define _SEDS_MEMREQ_H_ - #include "seds_global.h" #include "seds_checksum.h" @@ -74,7 +72,6 @@ typedef enum SEDS_BYTEPACK_STATUS_OTHER } seds_bytepack_status_t; - /** * Structure that tracks the size of EDS-defined objects * @@ -83,16 +80,16 @@ typedef enum */ typedef struct { - seds_integer_t raw_bit_size; /**< Total bits consumed by the object */ - seds_integer_t endpoint_bytes; /**< Byte offset of the end of the object */ - seds_integer_t local_storage_bytes; /**< Total byte storage required (may include padding) */ - seds_integer_t local_align_mask; /**< Expected alignment requirements based on typical alignment rules */ - seds_bytepack_status_t packing_status; /**< If the structure is packed efficiently, this allows for some added optimizations */ - seds_checksum_t checksum; /**< Checksum/Hash value for the data type definition */ - seds_boolean_t is_variable_size; /**< Set true if the size is not a fixed quantity of bits */ + seds_integer_t raw_bit_size; /**< Total bits consumed by the object */ + seds_integer_t endpoint_bytes; /**< Byte offset of the end of the object */ + seds_integer_t local_storage_bytes; /**< Total byte storage required (may include padding) */ + seds_integer_t local_align_mask; /**< Expected alignment requirements based on typical alignment rules */ + seds_bytepack_status_t + packing_status; /**< If the structure is packed efficiently, this allows for some added optimizations */ + seds_checksum_t checksum; /**< Checksum/Hash value for the data type definition */ + seds_boolean_t is_variable_size; /**< Set true if the size is not a fixed quantity of bits */ } seds_memreq_t; - /*******************************************************************************/ /* Function documentation and prototypes */ /* (everything referenced outside this unit should be described here) */ @@ -104,5 +101,4 @@ typedef struct */ void seds_memreq_register_globals(lua_State *lua); - -#endif /* _SEDS_MEMREQ_H_ */ +#endif /* _SEDS_MEMREQ_H_ */ diff --git a/tool/src/seds_outputfile.c b/tool/src/seds_outputfile.c index 5323b32..f9a998b 100644 --- a/tool/src/seds_outputfile.c +++ b/tool/src/seds_outputfile.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_outputfile.c * \ingroup tool @@ -35,7 +34,6 @@ * - Indentation rules */ - #include #include #include @@ -54,26 +52,26 @@ #include "seds_user_message.h" #include "seds_outputfile.h" -static const char SEDS_CDECL_OUTPUT_DEFAULT_LINE_ENDING[] = "\n"; +static const char SEDS_CDECL_OUTPUT_DEFAULT_LINE_ENDING[] = "\n"; /** * Output file record which maps to a Lua userdata filehandle object */ typedef struct { - FILE *outfp; - const char *static_line_ending; - const char *comment_start; - const char *comment_docstart; - const char *comment_multiline; - const char *comment_end; - long content_start; - long content_end; + FILE *outfp; + const char *static_line_ending; + const char *comment_start; + const char *comment_docstart; + const char *comment_multiline; + const char *comment_end; + long content_start; + long content_end; seds_integer_t indent_depth; - char output_file_name[256]; - char output_buffer[512]; - char cheader_guard_string[128]; - char user_line_ending[4]; + char output_file_name[256]; + char output_buffer[512]; + char cheader_guard_string[128]; + char user_line_ending[4]; } seds_output_file_t; /*******************************************************************************/ @@ -81,7 +79,6 @@ typedef struct /* (these are not referenced outside this unit) */ /*******************************************************************************/ - /* ------------------------------------------------------------------- */ /** * Write all pending output to the file. @@ -96,7 +93,7 @@ void seds_output_file_flush(seds_output_file_t *pfile) { if (pfile->indent_depth > 0) { - fprintf(pfile->outfp,"%*s", (int)pfile->indent_depth * 3, ""); + fprintf(pfile->outfp, "%*s", (int)pfile->indent_depth * 3, ""); } fprintf(pfile->outfp, "%s%s%s", pfile->output_buffer, pfile->user_line_ending, pfile->static_line_ending); @@ -105,7 +102,6 @@ void seds_output_file_flush(seds_output_file_t *pfile) pfile->user_line_ending[0] = 0; } - /* ------------------------------------------------------------------- */ /** * Add whitespace into the output file. @@ -121,13 +117,12 @@ void seds_output_file_add_whitespace(seds_output_file_t *pfile, seds_integer_t n { while (nlines > 0) { - fprintf(pfile->outfp,"%s",pfile->static_line_ending); + fprintf(pfile->outfp, "%s", pfile->static_line_ending); --nlines; } } } - /* ------------------------------------------------------------------- */ /** * Modify the line ending of the previously written line @@ -154,7 +149,6 @@ void seds_output_file_append_previous(seds_output_file_t *pfile, const char *str pfile->user_line_ending[sizeof(pfile->user_line_ending) - 1] = 0; } - /* ------------------------------------------------------------------- */ /** * Writes a the line into the output file @@ -164,7 +158,7 @@ void seds_output_file_append_previous(seds_output_file_t *pfile, const char *str void seds_output_file_write_line(seds_output_file_t *pfile, const char *format, ...) { va_list va; - int outsz; + int outsz; /* Output any current buffer contents to the actual file */ seds_output_file_flush(pfile); @@ -179,14 +173,13 @@ void seds_output_file_write_line(seds_output_file_t *pfile, const char *format, } /* trim trailing whitespace (including any newlines, which will be replaced with the preferred newline sequence) */ - while(outsz > 0 && isspace((int)pfile->output_buffer[outsz - 1])) + while (outsz > 0 && isspace((int)pfile->output_buffer[outsz - 1])) { --outsz; } pfile->output_buffer[outsz] = 0; } - /* ------------------------------------------------------------------- */ /** * Open an indented output group @@ -210,7 +203,6 @@ void seds_output_file_start_indent_group(seds_output_file_t *pfile, const char * ++pfile->indent_depth; } - /* ------------------------------------------------------------------- */ /** * Close an indented output group @@ -234,7 +226,6 @@ void seds_output_file_end_indent_group(seds_output_file_t *pfile, const char *st } } - /* ------------------------------------------------------------------- */ /** * Add a banner style comment to an output file @@ -258,12 +249,19 @@ void seds_output_file_section_marker(seds_output_file_t *pfile, const char *sect seds_output_file_write_line(pfile, "%s", pfile->comment_start); } - seds_output_file_write_line(pfile, "%s ******************************************************************************", - pfile->comment_multiline); - seds_output_file_write_line(pfile, "%s ** %*s%*s **", - pfile->comment_multiline,72 - padlen, section_name, padlen, ""); - seds_output_file_write_line(pfile, "%s ******************************************************************************", - pfile->comment_multiline); + seds_output_file_write_line(pfile, + "%s ******************************************************************************", + pfile->comment_multiline); + seds_output_file_write_line(pfile, + "%s ** %*s%*s **", + pfile->comment_multiline, + 72 - padlen, + section_name, + padlen, + ""); + seds_output_file_write_line(pfile, + "%s ******************************************************************************", + pfile->comment_multiline); if (pfile->comment_end) { @@ -273,7 +271,6 @@ void seds_output_file_section_marker(seds_output_file_t *pfile, const char *sect seds_output_file_add_whitespace(pfile, 1); } - /* ------------------------------------------------------------------- */ /** * Add a documentation style comment to an output file @@ -282,12 +279,15 @@ void seds_output_file_section_marker(seds_output_file_t *pfile, const char *sect * particular item in the file. The intent is to be compatible with the "doxygen" * tool for C code, but other languages could be implemented as well. */ -void seds_output_file_write_doxytags(seds_output_file_t *pfile, const char *shortdesc, const char *longdesc, seds_boolean_t delim) +void seds_output_file_write_doxytags(seds_output_file_t *pfile, + const char *shortdesc, + const char *longdesc, + seds_boolean_t delim) { - char linebuffer[120]; - const char *end; + char linebuffer[120]; + const char *end; seds_boolean_t shortdesc_present; - size_t sz; + size_t sz; seds_output_file_flush(pfile); @@ -297,14 +297,12 @@ void seds_output_file_write_doxytags(seds_output_file_t *pfile, const char *shor { /* add opening delimiter, if indicated */ seds_output_file_add_whitespace(pfile, 1); - seds_output_file_write_line(pfile, "%s", - pfile->comment_docstart); + seds_output_file_write_line(pfile, "%s", pfile->comment_docstart); } if (shortdesc != NULL && *shortdesc != 0 && pfile->comment_multiline != NULL) { - seds_output_file_write_line(pfile, "%s@brief %s", - pfile->comment_multiline, shortdesc); + seds_output_file_write_line(pfile, "%s@brief %s", pfile->comment_multiline, shortdesc); shortdesc_present = true; } else @@ -317,11 +315,10 @@ void seds_output_file_write_doxytags(seds_output_file_t *pfile, const char *shor /* if both long and short descriptions are present, add a line between them */ if (shortdesc_present) { - seds_output_file_write_line(pfile, "%s", - pfile->comment_multiline); + seds_output_file_write_line(pfile, "%s", pfile->comment_multiline); } - sz = 0; + sz = 0; end = longdesc; while (*end != 0) { @@ -335,7 +332,8 @@ void seds_output_file_write_doxytags(seds_output_file_t *pfile, const char *shor if (sz >= (sizeof(linebuffer) - 1)) { /* Back up to a whitespace or punctuation character, if possible */ - while (sz > (sizeof(linebuffer) / 2) && !ispunct(linebuffer[sz-1]) && !isspace(linebuffer[sz-1])) + while (sz > (sizeof(linebuffer) / 2) && !ispunct(linebuffer[sz - 1]) + && !isspace(linebuffer[sz - 1])) { --end; --sz; @@ -356,13 +354,16 @@ void seds_output_file_write_doxytags(seds_output_file_t *pfile, const char *shor ++end; } /* Trim trailing whitespace */ - while (sz > 0 && isspace(linebuffer[sz-1])) + while (sz > 0 && isspace(linebuffer[sz - 1])) { --sz; } linebuffer[sz] = 0; - seds_output_file_write_line(pfile,"%s%s%s", - pfile->comment_multiline, linebuffer, pfile->static_line_ending); + seds_output_file_write_line(pfile, + "%s%s%s", + pfile->comment_multiline, + linebuffer, + pfile->static_line_ending); sz = 0; } } @@ -370,15 +371,13 @@ void seds_output_file_write_doxytags(seds_output_file_t *pfile, const char *shor if (delim && pfile->comment_end != NULL) { /* add closing delimiter, if indicated */ - seds_output_file_write_line(pfile,"%s", - pfile->comment_end); + seds_output_file_write_line(pfile, "%s", pfile->comment_end); } } seds_output_file_flush(pfile); } - /* ------------------------------------------------------------------- */ /** * Compare a generated output file with a previously-existing copy of the same file. @@ -399,15 +398,14 @@ void seds_output_file_write_doxytags(seds_output_file_t *pfile, const char *shor */ static seds_boolean_t seds_verify_final_file(seds_output_file_t *pfile) { - FILE *refp; - char refline[sizeof(pfile->output_buffer)]; - size_t linelen; - size_t endlen; - long ref_start; - long ref_end; + FILE *refp; + char refline[sizeof(pfile->output_buffer)]; + size_t linelen; + size_t endlen; + long ref_start; + long ref_end; seds_boolean_t result_match; - /* * Now re-read the existing file, if any, to see if it is substantively identical * i.e. consider it identical if only the initial header comments differ. @@ -429,7 +427,7 @@ static seds_boolean_t seds_verify_final_file(seds_output_file_t *pfile) } result_match = true; - endlen = strlen(pfile->static_line_ending); + endlen = strlen(pfile->static_line_ending); if (pfile->comment_multiline == NULL) { @@ -451,15 +449,14 @@ static seds_boolean_t seds_verify_final_file(seds_output_file_t *pfile) /* content should be identical. Note that comparing 1+linelen chars * includes the terminating NUL char, so if one line is longer than the * other one then this check will fail. */ - if (fgets(pfile->output_buffer, sizeof(pfile->output_buffer), pfile->outfp) == NULL || - memcmp(pfile->output_buffer, refline, 1 + linelen) != 0) + if (fgets(pfile->output_buffer, sizeof(pfile->output_buffer), pfile->outfp) == NULL + || memcmp(pfile->output_buffer, refline, 1 + linelen) != 0) { result_match = false; break; } } - else if (linelen < endlen || - memcmp(&refline[linelen - endlen], pfile->static_line_ending, endlen) != 0) + else if (linelen < endlen || memcmp(&refline[linelen - endlen], pfile->static_line_ending, endlen) != 0) { result_match = false; break; @@ -474,7 +471,7 @@ static seds_boolean_t seds_verify_final_file(seds_output_file_t *pfile) if (result_match) { - ref_end = ftell(refp); + ref_end = ftell(refp); result_match = ((ref_end - ref_start) == (pfile->content_end - pfile->content_start)); } @@ -483,7 +480,6 @@ static seds_boolean_t seds_verify_final_file(seds_output_file_t *pfile) return result_match; } - /* ------------------------------------------------------------------- */ /** * Close an output file. @@ -492,7 +488,7 @@ static seds_boolean_t seds_verify_final_file(seds_output_file_t *pfile) */ void seds_output_file_close(seds_output_file_t *pfile) { - char namebuf[sizeof(pfile->output_file_name) + 4]; + char namebuf[sizeof(pfile->output_file_name) + 4]; seds_boolean_t result_match; if (pfile->outfp != NULL) @@ -503,8 +499,11 @@ void seds_output_file_close(seds_output_file_t *pfile) if (pfile->cheader_guard_string[0] != 0) { seds_output_file_add_whitespace(pfile, 1); - seds_output_file_write_line(pfile, "#endif %s _%s_ %s", - pfile->comment_start, pfile->cheader_guard_string, pfile->comment_end); + seds_output_file_write_line(pfile, + "#endif %s _%s_ %s", + pfile->comment_start, + pfile->cheader_guard_string, + pfile->comment_end); pfile->cheader_guard_string[0] = 0; } @@ -512,11 +511,11 @@ void seds_output_file_close(seds_output_file_t *pfile) seds_output_file_flush(pfile); fflush(pfile->outfp); pfile->content_end = ftell(pfile->outfp); - result_match = seds_verify_final_file(pfile); + result_match = seds_verify_final_file(pfile); fclose(pfile->outfp); pfile->outfp = NULL; - snprintf(namebuf,sizeof(namebuf),"%s.tmp",pfile->output_file_name); + snprintf(namebuf, sizeof(namebuf), "%s.tmp", pfile->output_file_name); if (result_match) { /* @@ -530,12 +529,11 @@ void seds_output_file_close(seds_output_file_t *pfile) else { /* result file was different, so rename the new one overwriting the old one */ - rename(namebuf,pfile->output_file_name); + rename(namebuf, pfile->output_file_name); } } } - /* ------------------------------------------------------------------- */ /** * Open an output file. @@ -545,9 +543,13 @@ void seds_output_file_close(seds_output_file_t *pfile) * It actually opens a temporary file with a different name first. Once the file * is closed, it will replace the existing copy, making the change atomic. */ -void seds_output_file_open(seds_output_file_t *pfile, const char *basedir, const char *subdir, const char *destfile, const char *sourcefile) +void seds_output_file_open(seds_output_file_t *pfile, + const char *basedir, + const char *subdir, + const char *destfile, + const char *sourcefile) { - char namebuf[sizeof(pfile->output_file_name) + 4]; + char namebuf[sizeof(pfile->output_file_name) + 4]; time_t nowtime; seds_output_file_close(pfile); @@ -561,14 +563,14 @@ void seds_output_file_open(seds_output_file_t *pfile, const char *basedir, const SEDS_REPORT_ERRNO(FATAL, basedir); } - snprintf(namebuf,sizeof(namebuf),"%s/%s",basedir,subdir); + snprintf(namebuf, sizeof(namebuf), "%s/%s", basedir, subdir); if (mkdir(namebuf, 0755) < 0 && errno != EEXIST) { SEDS_REPORT_ERRNO(FATAL, namebuf); } - snprintf(pfile->output_file_name,sizeof(pfile->output_file_name),"%s/%s/%s",basedir,subdir,destfile); - snprintf(namebuf,sizeof(namebuf),"%s.tmp",pfile->output_file_name); + snprintf(pfile->output_file_name, sizeof(pfile->output_file_name), "%s/%s/%s", basedir, subdir, destfile); + snprintf(namebuf, sizeof(namebuf), "%s.tmp", pfile->output_file_name); pfile->outfp = fopen(namebuf, "w+"); SEDS_ASSERT_ERRNO(pfile->outfp != NULL, namebuf); @@ -579,8 +581,9 @@ void seds_output_file_open(seds_output_file_t *pfile, const char *basedir, const seds_output_file_write_line(pfile, "%s", pfile->comment_start); } - seds_output_file_write_line(pfile, "%s NOTE -- THIS IS A GENERATED FILE -- DO NOT EDIT", - pfile->comment_multiline); + seds_output_file_write_line(pfile, + "%s NOTE -- THIS IS A GENERATED FILE -- DO NOT EDIT", + pfile->comment_multiline); seds_output_file_write_line(pfile, "%s", pfile->comment_multiline); if (sourcefile != NULL && *sourcefile != 0) { @@ -588,7 +591,11 @@ void seds_output_file_open(seds_output_file_t *pfile, const char *basedir, const } seds_output_file_write_line(pfile, "%s %16s: %s", pfile->comment_multiline, "Output File", destfile); nowtime = time(NULL); - seds_output_file_write_line(pfile, "%s %16s: %s", pfile->comment_multiline, "Generation Time", ctime(&nowtime)); /* note - ctime adds '\n' */ + seds_output_file_write_line(pfile, + "%s %16s: %s", + pfile->comment_multiline, + "Generation Time", + ctime(&nowtime)); /* note - ctime adds '\n' */ if (pfile->comment_end) { @@ -610,8 +617,8 @@ void seds_output_file_open(seds_output_file_t *pfile, const char *basedir, const */ if (pfile->cheader_guard_string[0] != 0) { - seds_output_file_write_line(pfile,"#ifndef _%s_", pfile->cheader_guard_string); - seds_output_file_write_line(pfile,"#define _%s_", pfile->cheader_guard_string); + seds_output_file_write_line(pfile, "#ifndef _%s_", pfile->cheader_guard_string); + seds_output_file_write_line(pfile, "#define _%s_", pfile->cheader_guard_string); seds_output_file_add_whitespace(pfile, 1); } } @@ -692,7 +699,10 @@ static int seds_lua_output_file_section_marker(lua_State *lua) */ static int seds_lua_output_documentation(lua_State *lua) { - seds_output_file_write_doxytags(luaL_checkudata(lua, 1, "seds_output_file"), luaL_optstring(lua, 2, NULL), luaL_optstring(lua, 3, NULL), true); + seds_output_file_write_doxytags(luaL_checkudata(lua, 1, "seds_output_file"), + luaL_optstring(lua, 2, NULL), + luaL_optstring(lua, 3, NULL), + true); return 0; } @@ -795,12 +805,12 @@ static int seds_lua_output_file_set_method(lua_State *lua) * * Attempts to call SEDS.get_define() with the given varname, and leaves * the result on the top of the stack. This adjust the stack such that - * one (and only one) item is added, and it is either the result from + * one (and only one) item is added, and it is either the result from * get_define or the fallback string. * */ static void seds_get_define_safe(lua_State *lua, const char *varname, const char *fallback) -{ +{ int stack_top = lua_gettop(lua); lua_getglobal(lua, "SEDS"); @@ -844,12 +854,12 @@ static void seds_get_define_safe(lua_State *lua, const char *varname, const char */ static int seds_lua_output_file_open(lua_State *lua) { - const char *destfile = luaL_checkstring(lua, 1); - const char *sourcefile = luaL_optstring(lua, 2, NULL); - const char *outlang = luaL_optstring(lua, 3, NULL); - const char *subdir = "."; - seds_output_file_t *pfile = lua_newuserdata(lua, sizeof(seds_output_file_t)); - int stack_top = lua_gettop(lua); + const char *destfile = luaL_checkstring(lua, 1); + const char *sourcefile = luaL_optstring(lua, 2, NULL); + const char *outlang = luaL_optstring(lua, 3, NULL); + const char *subdir = "."; + seds_output_file_t *pfile = lua_newuserdata(lua, sizeof(seds_output_file_t)); + int stack_top = lua_gettop(lua); memset(pfile, 0, sizeof(*pfile)); if (luaL_newmetatable(lua, "seds_output_file")) @@ -897,14 +907,12 @@ static int seds_lua_output_file_open(lua_State *lua) * this also sets up for a preprocessor guard macro around the whole file * (only if the filename ends in .h) */ - if (strcasecmp(outlang, "c") == 0 || - strcasecmp(outlang, "h") == 0 || - strcasecmp(outlang, "cpp") == 0 || - strcasecmp(outlang, "hpp") == 0) + if (strcasecmp(outlang, "c") == 0 || strcasecmp(outlang, "h") == 0 || strcasecmp(outlang, "cpp") == 0 + || strcasecmp(outlang, "hpp") == 0) { - size_t sz = strlen(destfile); + size_t sz = strlen(destfile); const char *inp = destfile + sz; - char *outp; + char *outp; while (sz > 0) { @@ -930,9 +938,9 @@ static int seds_lua_output_file_open(lua_State *lua) pfile->cheader_guard_string[sizeof(pfile->cheader_guard_string) - 1] = 0; lua_pop(lua, 1); - inp = destfile; - outp = pfile->cheader_guard_string; - sz = strlen(pfile->cheader_guard_string); + inp = destfile; + outp = pfile->cheader_guard_string; + sz = strlen(pfile->cheader_guard_string); outp += sz; while (sz < (sizeof(pfile->cheader_guard_string) - 1) && *inp != 0) { @@ -961,49 +969,44 @@ static int seds_lua_output_file_open(lua_State *lua) /* * Set up C-style comment blocks */ - pfile->comment_start = "/* "; - pfile->comment_docstart = "/**"; + pfile->comment_start = "/* "; + pfile->comment_docstart = "/**"; pfile->comment_multiline = " * "; - pfile->comment_end = " */"; + pfile->comment_end = " */"; } - else if (strcasecmp(outlang, "make") == 0 || - strcasecmp(outlang, "mk") == 0 || - strcasecmp(outlang, "shell") == 0 || - strcasecmp(outlang, "sh") == 0 || - strcasecmp(outlang, "perl") == 0 || - strcasecmp(outlang, "pl") == 0 || - strcasecmp(outlang, "python") == 0 || - strcasecmp(outlang, "py") == 0) + else if (strcasecmp(outlang, "make") == 0 || strcasecmp(outlang, "mk") == 0 || strcasecmp(outlang, "shell") == 0 + || strcasecmp(outlang, "sh") == 0 || strcasecmp(outlang, "perl") == 0 || strcasecmp(outlang, "pl") == 0 + || strcasecmp(outlang, "python") == 0 || strcasecmp(outlang, "py") == 0) { /* * Set up shell-style comment blocks * This style is applicable to several interpreted languages, * including makefiles, perl and python */ - pfile->comment_start = "# "; - pfile->comment_docstart = pfile->comment_start; + pfile->comment_start = "# "; + pfile->comment_docstart = pfile->comment_start; pfile->comment_multiline = pfile->comment_start; - pfile->comment_end = pfile->comment_start; + pfile->comment_end = pfile->comment_start; } else if (strcasecmp(outlang, "lua") == 0) { /* * Set up lua-style comment blocks */ - pfile->comment_start = "-- "; - pfile->comment_docstart = "---"; + pfile->comment_start = "-- "; + pfile->comment_docstart = "---"; pfile->comment_multiline = pfile->comment_start; - pfile->comment_end = pfile->comment_start; + pfile->comment_end = pfile->comment_start; } else if (strcasecmp(outlang, "xml") == 0) { /* * Set up xml-style comment blocks */ - pfile->comment_start = ""; + pfile->comment_end = " -->"; } lua_rawgetp(lua, LUA_REGISTRYINDEX, &sedstool.GLOBAL_SYMBOL_TABLE_KEY); @@ -1044,7 +1047,6 @@ static int seds_lua_output_file_mkdir(lua_State *lua) /* (referenced outside this unit and prototyped in a separate header) */ /*******************************************************************************/ - void seds_outputfile_register_globals(lua_State *lua) { luaL_checktype(lua, -1, LUA_TTABLE); diff --git a/tool/src/seds_outputfile.h b/tool/src/seds_outputfile.h index 267e617..13d9880 100644 --- a/tool/src/seds_outputfile.h +++ b/tool/src/seds_outputfile.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_outputfile.h * \ingroup tool @@ -47,5 +46,4 @@ */ void seds_outputfile_register_globals(lua_State *lua); -#endif /* _SEDS_OUTPUTFILE_H_ */ - +#endif /* _SEDS_OUTPUTFILE_H_ */ diff --git a/tool/src/seds_plugin.c b/tool/src/seds_plugin.c index 19011ca..ad3189a 100644 --- a/tool/src/seds_plugin.c +++ b/tool/src/seds_plugin.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_plugin.c * \ingroup tool @@ -65,11 +64,10 @@ */ typedef struct { - void *dlhandle; /**< actual handle from dlopen() */ + void *dlhandle; /**< actual handle from dlopen() */ seds_integer_t refcount; } seds_c_plugin_t; - /** * An object to simplify dynamically loaded symbol lookups * @@ -78,8 +76,8 @@ typedef struct */ typedef union { - void *symaddr; /**< symbol address from dlsym() */ - lua_CFunction lua_func; /**< address as a Lua function */ + void *symaddr; /**< symbol address from dlsym() */ + lua_CFunction lua_func; /**< address as a Lua function */ void (*simple_func)(void); void (*singlearg_func)(void *arg); void (*dualarg_func)(void *arg1, void *arg2); @@ -87,16 +85,14 @@ typedef union /* slight cheat here - default the path to the same place as the C source. * if not overridden, then this is passed to dirname() to get the default. */ -static char SEDS_DEFAULT_SOURCE_PATH[] = __FILE__; -static const char SEDS_PLUGIN_TABLE_KEY; /**< Key for Lua registry table containing plugin objects */ +static char SEDS_DEFAULT_SOURCE_PATH[] = __FILE__; +static const char SEDS_PLUGIN_TABLE_KEY; /**< Key for Lua registry table containing plugin objects */ /*******************************************************************************/ /* Internal / static Helper Functions */ /* (these are not referenced outside this unit) */ /*******************************************************************************/ - - /* ------------------------------------------------------------------- */ /** * Convert a value on the stack into a C pointer object. @@ -120,36 +116,36 @@ static void *lua_value_to_cptr(lua_State *lua, int narg) { union { - void *vptr; - const char *vstr; /* For strings */ - ptrdiff_t vint; /* "ptrdiff_t" should be a signed integer type with the same width as void* */ + void *vptr; + const char *vstr; /* For strings */ + ptrdiff_t vint; /* "ptrdiff_t" should be a signed integer type with the same width as void* */ } value; - switch(lua_type(lua,narg)) - { - case LUA_TBOOLEAN: - value.vint = lua_toboolean(lua, narg); - break; - case LUA_TNUMBER: - value.vint = lua_tointeger(lua, narg); - break; - case LUA_TUSERDATA: + switch (lua_type(lua, narg)) { - EdsLib_LuaBinding_GetNativeObject(lua, narg, &value.vptr, NULL); - break; - } - case LUA_TLIGHTUSERDATA: - value.vptr = lua_touserdata(lua, narg); - break; - case LUA_TSTRING: - value.vstr = lua_tostring(lua, narg); - break; - case LUA_TTABLE: - case LUA_TNIL: - case LUA_TFUNCTION: - default: - value.vptr = NULL; - break; + case LUA_TBOOLEAN: + value.vint = lua_toboolean(lua, narg); + break; + case LUA_TNUMBER: + value.vint = lua_tointeger(lua, narg); + break; + case LUA_TUSERDATA: + { + EdsLib_LuaBinding_GetNativeObject(lua, narg, &value.vptr, NULL); + break; + } + case LUA_TLIGHTUSERDATA: + value.vptr = lua_touserdata(lua, narg); + break; + case LUA_TSTRING: + value.vstr = lua_tostring(lua, narg); + break; + case LUA_TTABLE: + case LUA_TNIL: + case LUA_TFUNCTION: + default: + value.vptr = NULL; + break; } return value.vptr; @@ -178,8 +174,8 @@ static void *lua_value_to_cptr(lua_State *lua, int narg) */ static int seds_c_symbol_call(lua_State *lua) { - seds_c_symbol_t *c_sym = luaL_checkudata(lua, 1, "c_symbol"); - int stack_top = lua_gettop(lua); + seds_c_symbol_t *c_sym = luaL_checkudata(lua, 1, "c_symbol"); + int stack_top = lua_gettop(lua); if (stack_top == 1) { @@ -191,8 +187,7 @@ static int seds_c_symbol_call(lua_State *lua) } else { - c_sym->dualarg_func(lua_value_to_cptr(lua, 2), - lua_value_to_cptr(lua, 3)); + c_sym->dualarg_func(lua_value_to_cptr(lua, 2), lua_value_to_cptr(lua, 3)); } return 0; @@ -231,8 +226,8 @@ static seds_c_symbol_t *seds_new_symbol_obj(lua_State *lua) static int seds_c_plugin_get_symbol(lua_State *lua) { seds_c_plugin_t *plugin = luaL_checkudata(lua, 1, "c_plugin"); - const char *tmpstr; - void *sym; + const char *tmpstr; + void *sym; if (lua_type(lua, 2) != LUA_TSTRING) { @@ -240,7 +235,7 @@ static int seds_c_plugin_get_symbol(lua_State *lua) } dlerror(); - sym = dlsym(plugin->dlhandle, lua_tostring(lua, 2)); + sym = dlsym(plugin->dlhandle, lua_tostring(lua, 2)); tmpstr = dlerror(); if (tmpstr != NULL) { @@ -258,7 +253,7 @@ static int seds_c_plugin_get_symbol(lua_State *lua) { /* Success - return the symbol as a user data */ seds_c_symbol_t *c_sym = seds_new_symbol_obj(lua); - c_sym->symaddr = sym; + c_sym->symaddr = sym; ++plugin->refcount; } return 1; @@ -340,7 +335,6 @@ static int seds_lua_load_plugin_module(lua_State *lua) /* (referenced outside this unit and prototyped in a separate header) */ /*******************************************************************************/ - /* * ------------------------------------------------------ * External API function - see full details in prototype. @@ -348,14 +342,14 @@ static int seds_lua_load_plugin_module(lua_State *lua) */ void seds_plugin_load_so(lua_State *lua, const char *filename) { - void *dlhandle; - const char *tmpstr; + void *dlhandle; + const char *tmpstr; seds_c_symbol_t c_sym; seds_user_message_printf(SEDS_USER_MESSAGE_INFO, NULL, 0, "LOADING PLUGIN: %s", filename); dlerror(); dlhandle = dlopen(filename, RTLD_NOW | RTLD_LOCAL); - tmpstr = dlerror(); + tmpstr = dlerror(); if (dlhandle == NULL && tmpstr == NULL) { tmpstr = "Unknown"; @@ -377,7 +371,7 @@ void seds_plugin_load_so(lua_State *lua, const char *filename) * the value of that symbol as a light user data. */ c_sym.symaddr = dlsym(dlhandle, "lua_plugin_init"); - tmpstr = dlerror(); + tmpstr = dlerror(); if (c_sym.symaddr != NULL && tmpstr == NULL) { lua_pushcfunction(lua, c_sym.lua_func); @@ -386,8 +380,8 @@ void seds_plugin_load_so(lua_State *lua, const char *filename) else { seds_c_plugin_t *plugin = seds_new_plugin_obj(lua); - plugin->dlhandle = dlhandle; - plugin->refcount = 0; + plugin->dlhandle = dlhandle; + plugin->refcount = 0; } } } @@ -400,15 +394,14 @@ void seds_plugin_load_so(lua_State *lua, const char *filename) void seds_plugin_load_lua(lua_State *lua, const char *runtime_file) { char runtime_file_buffer[512]; - int top_start = lua_gettop(lua); + int top_start = lua_gettop(lua); if (sedstool.user_runtime_path == NULL) { sedstool.user_runtime_path = dirname(SEDS_DEFAULT_SOURCE_PATH); } - snprintf(runtime_file_buffer, sizeof(runtime_file_buffer), "%s/%s", - sedstool.user_runtime_path, runtime_file); + snprintf(runtime_file_buffer, sizeof(runtime_file_buffer), "%s/%s", sedstool.user_runtime_path, runtime_file); if (luaL_loadfile(lua, runtime_file_buffer) != LUA_OK) { @@ -438,7 +431,7 @@ void seds_plugin_register_globals(lua_State *lua) * * This simplifies future symbol lookups. */ - mainprog = seds_new_plugin_obj(lua); + mainprog = seds_new_plugin_obj(lua); mainprog->dlhandle = NULL; lua_pop(lua, 1); diff --git a/tool/src/seds_plugin.h b/tool/src/seds_plugin.h index df689c9..3d2d146 100644 --- a/tool/src/seds_plugin.h +++ b/tool/src/seds_plugin.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_plugin.h * \ingroup tool @@ -33,13 +32,11 @@ #include "seds_global.h" - /*******************************************************************************/ /* Function documentation and prototypes */ /* (everything referenced outside this unit should be described here) */ /*******************************************************************************/ - /** * Load a Lua runtime script plugin from the C source directory. * @@ -77,7 +74,4 @@ void seds_plugin_load_so(lua_State *lua, const char *filename); */ void seds_plugin_register_globals(lua_State *lua); - - -#endif /* _SEDS_PLUGIN_H_ */ - +#endif /* _SEDS_PLUGIN_H_ */ diff --git a/tool/src/seds_preprocess.c b/tool/src/seds_preprocess.c index 074852d..1640803 100644 --- a/tool/src/seds_preprocess.c +++ b/tool/src/seds_preprocess.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_preprocess.c * \ingroup tool @@ -92,7 +91,7 @@ static const char SEDS_PREPROCESS_ENVIRONMENT; static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) { seds_boolean_t quoting_required; - uint32_t token_size; + uint32_t token_size; enum TokenType { TOKENTYPE_UNKNOWN, @@ -100,12 +99,12 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) TOKENTYPE_VALUE, TOKENTYPE_OPERATOR, TOKENTYPE_MAX - } curr_token, prev_token; - + } curr_token, + prev_token; quoting_required = false; curr_token = prev_token = TOKENTYPE_UNKNOWN; - token_size = 0; + token_size = 0; while (*p != 0) { if (strncasecmp(p, "false", 5) == 0) @@ -144,8 +143,8 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) token_size = 2; curr_token = TOKENTYPE_OPERATOR; } - else if (strncmp(p, "==", 2) == 0 || strncmp(p, "~=", 2) == 0 || - strncmp(p, "<=", 2) == 0 || strncmp(p, ">=", 2) == 0) + else if (strncmp(p, "==", 2) == 0 || strncmp(p, "~=", 2) == 0 || strncmp(p, "<=", 2) == 0 + || strncmp(p, ">=", 2) == 0) { /* relational operators */ token_size = 2; @@ -154,7 +153,8 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) else if (strncmp(p, "${", 2) == 0) { token_size = 2; - while (p[token_size] != '}' && p[token_size] != 0) ++token_size; + while (p[token_size] != '}' && p[token_size] != 0) + ++token_size; if (p[token_size] == '}') { /* complete reference -- include the terminator itself */ @@ -171,14 +171,16 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) else if (isblank(*p)) { token_size = 1; - while (isblank(p[token_size])) ++token_size; + while (isblank(p[token_size])) + ++token_size; curr_token = TOKENTYPE_BLANK; } else if (strncmp(p, "0x", 2) == 0) { /* Hex literals start with 0x and only contain hex digits */ token_size = 2; - while (isxdigit(p[token_size])) ++token_size; + while (isxdigit(p[token_size])) + ++token_size; if (token_size <= 2) { /* if not followed by actual hex digits, it is not a valid literal */ @@ -194,7 +196,8 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) { /* Decimal literals may contain decimal points and/or may be in scientific notation */ token_size = 1; - while (isdigit(p[token_size]) || p[token_size] == '.') ++token_size; + while (isdigit(p[token_size]) || p[token_size] == '.') + ++token_size; if (p[token_size] == 'e') { if (isdigit(p[token_size + 1])) @@ -206,7 +209,8 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) token_size += 3; } - while (isdigit(p[token_size])) ++token_size; + while (isdigit(p[token_size])) + ++token_size; } curr_token = TOKENTYPE_VALUE; } @@ -235,8 +239,8 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) * Two values next to each other with no operator between them also * is an indicator that this should be a string */ - if (token_size == 0 || curr_token == TOKENTYPE_UNKNOWN || - (prev_token == TOKENTYPE_VALUE && curr_token == TOKENTYPE_VALUE)) + if (token_size == 0 || curr_token == TOKENTYPE_UNKNOWN + || (prev_token == TOKENTYPE_VALUE && curr_token == TOKENTYPE_VALUE)) { quoting_required = true; break; @@ -267,12 +271,12 @@ static seds_boolean_t seds_resolve_is_lua_quoting_required(const char *p) */ static int seds_resolve_luafy_seds_reference(lua_State *lua) { - luaL_Buffer buffer; - const char *input; - const char *p, *q; + luaL_Buffer buffer; + const char *input; + const char *p, *q; seds_boolean_t quoting_required; - input = lua_tostring(lua, -1); + input = lua_tostring(lua, -1); quoting_required = seds_resolve_is_lua_quoting_required(input); /* Note - As of Lua 5.4, this may push something onto the stack. @@ -318,7 +322,8 @@ static int seds_resolve_luafy_seds_reference(lua_State *lua) if (*p == '{') { q = p + 1; - while (*q != '}' && *q != 0) ++q; + while (*q != '}' && *q != 0) + ++q; } } @@ -363,7 +368,6 @@ static int seds_resolve_luafy_seds_reference(lua_State *lua) /* Add concatenation operator and open a new string */ luaL_addstring(&buffer, " .. \""); } - } else if (isprint(*input)) { @@ -452,7 +456,6 @@ static int seds_resolve_set_eval_func(lua_State *lua) /* (referenced outside this unit and prototyped in a separate header) */ /*******************************************************************************/ - /* * ------------------------------------------------------ * External API function - see full details in prototype. diff --git a/tool/src/seds_preprocess.h b/tool/src/seds_preprocess.h index b510c5d..c7af481 100644 --- a/tool/src/seds_preprocess.h +++ b/tool/src/seds_preprocess.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_preprocess.h * \ingroup tool @@ -31,12 +30,9 @@ #ifndef _SEDS_PREPROCESS_H_ #define _SEDS_PREPROCESS_H_ - /** * Register the preprocessor functions in the global Lua state */ void seds_preprocess_register_globals(lua_State *lua); - -#endif /* _SEDS_PREPROCESS_H_ */ - +#endif /* _SEDS_PREPROCESS_H_ */ diff --git a/tool/src/seds_range.c b/tool/src/seds_range.c index 4488730..0a0361a 100644 --- a/tool/src/seds_range.c +++ b/tool/src/seds_range.c @@ -340,7 +340,7 @@ static bool seds_rangesegment_is_single_value(const seds_rangesegment_t *pseg) /** * Helper function: push a single value onto the stack corresponding to the segment - * + * * If the segment is a single value, this pushes that value in simple/primitive form. * For example a single number is pushed as a number. If the value is not actually * a single, then this depends on the "force" option. @@ -367,7 +367,7 @@ static void seds_rangesegment_push_as_single_value(lua_State *lua, int arg_idx, /* push the midpoint as a number, this is reasonable for sorting purposes */ lua_pushnumber(lua, (pseg->min.valx + pseg->max.valx) / 2); } - else + else { /* not able to push as single value, push as nil */ lua_pushnil(lua); @@ -409,8 +409,8 @@ static void seds_rangesegment_set_empty(seds_rangesegment_t *pseg) */ static bool seds_rangesegment_includes_rangesegment(seds_rangesegment_t *pseg1, seds_rangesegment_t *pseg2) { - return seds_rangesegment_compare_min(&pseg1->min, &pseg2->min) && - seds_rangesegment_compare_max(&pseg1->max, &pseg2->max); + return seds_rangesegment_compare_min(&pseg1->min, &pseg2->min) + && seds_rangesegment_compare_max(&pseg1->max, &pseg2->max); } /** @@ -533,7 +533,8 @@ static int seds_rangesegment_matches(lua_State *lua) * NOTE: this will produce an invalid result if the segments * do not overlap at all (this can be checked for via is_empty) */ -static void seds_rangesegment_compute_intersection(seds_rangesegment_t *pcombined, const seds_rangesegment_t *pseg1, +static void seds_rangesegment_compute_intersection(seds_rangesegment_t *pcombined, + const seds_rangesegment_t *pseg1, const seds_rangesegment_t *pseg2) { memset(pcombined, 0, sizeof(*pcombined)); @@ -567,7 +568,8 @@ static void seds_rangesegment_compute_intersection(seds_rangesegment_t *pcombine * NOTE: this covers any gap between them, the caller should confirm the segments * are overlapping in some way before bridging if the intent is to create a union */ -static void seds_rangesegment_compute_bridge(seds_rangesegment_t *pcombined, const seds_rangesegment_t *pseg1, +static void seds_rangesegment_compute_bridge(seds_rangesegment_t *pcombined, + const seds_rangesegment_t *pseg1, const seds_rangesegment_t *pseg2) { /* get the lesser of the two minimums */ @@ -696,16 +698,16 @@ static int seds_rangesegment_contiguous_with(lua_State *lua) pseg1 = seds_rangesegment_get_safe(lua, 1, &temp1); pseg2 = seds_rangesegment_get_safe(lua, 2, &temp2); - result = (seds_rangelimit_is_contiguous(&pseg1->max, &pseg2->min) || - seds_rangelimit_is_contiguous(&pseg1->min, &pseg2->max)); + result = (seds_rangelimit_is_contiguous(&pseg1->max, &pseg2->min) + || seds_rangelimit_is_contiguous(&pseg1->min, &pseg2->max)); lua_pushboolean(lua, result); return 1; } -static bool seds_rangesegment_compute_union(seds_rangesegment_t *pcombined, seds_rangesegment_t *pseg1, - seds_rangesegment_t *pseg2) +static bool +seds_rangesegment_compute_union(seds_rangesegment_t *pcombined, seds_rangesegment_t *pseg1, seds_rangesegment_t *pseg2) { seds_rangesegment_t temp; bool result; @@ -718,8 +720,8 @@ static bool seds_rangesegment_compute_union(seds_rangesegment_t *pcombined, seds * the segment(s) are immediately next to eachother even if they do not * overlap. In this case the union is still representable as a single * segment. */ - if (!seds_rangesegment_is_empty(&temp) || seds_rangelimit_is_contiguous(&pseg1->max, &pseg2->min) || - seds_rangelimit_is_contiguous(&pseg1->min, &pseg2->max)) + if (!seds_rangesegment_is_empty(&temp) || seds_rangelimit_is_contiguous(&pseg1->max, &pseg2->min) + || seds_rangelimit_is_contiguous(&pseg1->min, &pseg2->max)) { seds_rangesegment_compute_bridge(pcombined, pseg1, pseg2); result = true; @@ -977,7 +979,12 @@ static int seds_rangesegment_to_string(lua_State *lua) snprintf(maxbuf, sizeof(maxbuf), "+inf"); } - snprintf(stringbuf, sizeof(stringbuf), "%c%s,%s%c", pseg->min.is_inclusive ? '[' : '(', minbuf, maxbuf, + snprintf(stringbuf, + sizeof(stringbuf), + "%c%s,%s%c", + pseg->min.is_inclusive ? '[' : '(', + minbuf, + maxbuf, pseg->max.is_inclusive ? ']' : ')'); lua_pushstring(lua, stringbuf); @@ -2351,7 +2358,7 @@ static int seds_rangemap_set_value(lua_State *lua) static int seds_rangemap_tostring(lua_State *lua) { luaL_Buffer buf; - bool is_empty; + bool is_empty; is_empty = true; luaL_buffinit(lua, &buf); @@ -2364,7 +2371,7 @@ static int seds_rangemap_tostring(lua_State *lua) { is_empty = false; } - else + else { luaL_addstring(&buf, "+"); } diff --git a/tool/src/seds_tool_main.c b/tool/src/seds_tool_main.c index 22734dc..1b6ca7d 100644 --- a/tool/src/seds_tool_main.c +++ b/tool/src/seds_tool_main.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_tool_main.c * \ingroup tool @@ -51,8 +50,6 @@ #include #include - - /** * Lua source file containing the main implementation of the SEDS * tool basic routines. This is loaded at runtime. @@ -67,24 +64,13 @@ static const char SEDS_RUNTIME_SCRIPT_FILE[] = "seds_runtime.lua"; */ seds_toplevel_t sedstool; - /*******************************************************************************/ /* Internal / static Helper Functions */ /* (these are not referenced outside this unit) */ /*******************************************************************************/ -static const char *SEDS_REQUIRED_GLOBALS[] = -{ - "EDSTOOL_OUTPUT_DIR", - "EDSTOOL_PROJECT_NAME", - "CC", - "LD", - "AR", - "CFLAGS", - "LDFLAGS", - "SRCDIR", - "INCDIR", - "OBJDIR" +static const char *SEDS_REQUIRED_GLOBALS[] = { + "EDSTOOL_OUTPUT_DIR", "EDSTOOL_PROJECT_NAME", "CC", "LD", "AR", "CFLAGS", "LDFLAGS", "SRCDIR", "INCDIR", "OBJDIR" }; static void seds_export_environment(lua_State *lua) @@ -92,7 +78,7 @@ static void seds_export_environment(lua_State *lua) int i; lua_rawgetp(lua, LUA_REGISTRYINDEX, &sedstool.GLOBAL_SYMBOL_TABLE_KEY); - for (i=0; i < (sizeof(SEDS_REQUIRED_GLOBALS) / sizeof(SEDS_REQUIRED_GLOBALS[0])); ++i) + for (i = 0; i < (sizeof(SEDS_REQUIRED_GLOBALS) / sizeof(SEDS_REQUIRED_GLOBALS[0])); ++i) { lua_getfield(lua, -1, SEDS_REQUIRED_GLOBALS[i]); @@ -110,11 +96,11 @@ static void seds_export_environment(lua_State *lua) static void seds_setup_base_environment(lua_State *lua) { const char *env_value; - size_t i; + size_t i; lua_newtable(lua); - for (i=0; i < (sizeof(SEDS_REQUIRED_GLOBALS) / sizeof(SEDS_REQUIRED_GLOBALS[0])); ++i) + for (i = 0; i < (sizeof(SEDS_REQUIRED_GLOBALS) / sizeof(SEDS_REQUIRED_GLOBALS[0])); ++i) { env_value = getenv(SEDS_REQUIRED_GLOBALS[i]); @@ -136,7 +122,7 @@ static void seds_setup_base_environment(lua_State *lua) static void seds_parse_commandline_symbol(lua_State *lua, const char *sym) { const char *valtxt; - size_t len; + size_t len; /* Trim any leading space */ while (*sym != 0 && isspace((int)sym[0])) @@ -182,8 +168,8 @@ static void seds_parse_commandline_files(lua_State *lua, int argc, char **argv) { const char *fileext; const char *filename; - int arg; - int sedsmodule_pos; + int arg; + int sedsmodule_pos; /* * At the top of the stack should be the table which reflects @@ -287,7 +273,7 @@ static void seds_parse_commandline_files(lua_State *lua, int argc, char **argv) static void seds_gencdecl_initialize_post_processing(lua_State *lua) { - const char *verbose_mode; + const char *verbose_mode; seds_integer_t verbosity; verbose_mode = getenv("VERBOSE"); @@ -412,12 +398,12 @@ static void seds_usage_summary(void) int main(int argc, char *argv[]) { lua_State *lua; - int arg; + int arg; seds_checksum_init_table(); EdsLib_Initialize(); - memset(&sedstool,0,sizeof(sedstool)); + memset(&sedstool, 0, sizeof(sedstool)); /* * Create a new Lua state and load the standard libraries @@ -437,37 +423,39 @@ int main(int argc, char *argv[]) seds_setup_base_environment(lua); - while ((arg = getopt (argc, argv, "vD:s:")) != -1) + while ((arg = getopt(argc, argv, "vD:s:")) != -1) { switch (arg) { - case 'D': - lua_rawgetp(lua, LUA_REGISTRYINDEX, &sedstool.GLOBAL_SYMBOL_TABLE_KEY); - seds_parse_commandline_symbol(lua, optarg); - lua_rawset(lua, -3); - lua_pop(lua, 1); - break; + case 'D': + lua_rawgetp(lua, LUA_REGISTRYINDEX, &sedstool.GLOBAL_SYMBOL_TABLE_KEY); + seds_parse_commandline_symbol(lua, optarg); + lua_rawset(lua, -3); + lua_pop(lua, 1); + break; - case 'v': - ++sedstool.verbosity; - break; + case 'v': + ++sedstool.verbosity; + break; - case 's': - sedstool.user_runtime_path = optarg; - break; + case 's': + sedstool.user_runtime_path = optarg; + break; - default: - if (isprint (arg)) - { - seds_user_message_printf(SEDS_USER_MESSAGE_ERROR, "cmdline", 0, - "Unknown argument `-%c'.\n", arg); - } - else - { - seds_user_message_printf(SEDS_USER_MESSAGE_ERROR, "cmdline", 0, - "Unknown argument character `\\x%x'.\n", arg); - } - break; + default: + if (isprint(arg)) + { + seds_user_message_printf(SEDS_USER_MESSAGE_ERROR, "cmdline", 0, "Unknown argument `-%c'.\n", arg); + } + else + { + seds_user_message_printf(SEDS_USER_MESSAGE_ERROR, + "cmdline", + 0, + "Unknown argument character `\\x%x'.\n", + arg); + } + break; } } @@ -525,7 +513,7 @@ int main(int argc, char *argv[]) seds_parse_commandline_files(lua, argc - optind, argv + optind); - lua_pop(lua, 1); /* SEDS global, not needed on stack anymore */ + lua_pop(lua, 1); /* SEDS global, not needed on stack anymore */ seds_export_environment(lua); @@ -537,11 +525,11 @@ int main(int argc, char *argv[]) lua_close(lua); printf("SEDS tool complete -- %ld error(s) and %ld warning(s)\n", - (long)seds_user_message_get_count(SEDS_USER_MESSAGE_ERROR), - (long)seds_user_message_get_count(SEDS_USER_MESSAGE_WARNING)); + (long)seds_user_message_get_count(SEDS_USER_MESSAGE_ERROR), + (long)seds_user_message_get_count(SEDS_USER_MESSAGE_WARNING)); - if (seds_user_message_get_count(SEDS_USER_MESSAGE_ERROR) != 0 || - seds_user_message_get_count(SEDS_USER_MESSAGE_FATAL) != 0) + if (seds_user_message_get_count(SEDS_USER_MESSAGE_ERROR) != 0 + || seds_user_message_get_count(SEDS_USER_MESSAGE_FATAL) != 0) { return EXIT_FAILURE; } diff --git a/tool/src/seds_tree_node.c b/tool/src/seds_tree_node.c index 93e2c5d..64c81b0 100644 --- a/tool/src/seds_tree_node.c +++ b/tool/src/seds_tree_node.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_tree_node.c * \ingroup tool @@ -49,191 +48,188 @@ * This module is loaded when the tree functions are registered. */ static const char SEDS_TREE_METHODS_SCRIPT_FILE[] = "seds_tree_methods.lua"; -static const char SEDS_TREE_PROPERTIES_LUA_KEY = '\0'; +static const char SEDS_TREE_PROPERTIES_LUA_KEY = '\0'; /** * Local lookup table to get a printable name associated with a node type */ -static const char *SEDS_NODETYPE_LOOKUP[SEDS_NODETYPE_MAX] = -{ - [SEDS_NODETYPE_UNKNOWN] = "UNKNOWN", - [SEDS_NODETYPE_ROOT] = "ROOT", - [SEDS_NODETYPE_CCSDS_STANDARD_FIRST] = "CCSDS_STANDARD_FIRST", - [SEDS_NODETYPE_DATASHEET] = "DATASHEET", - [SEDS_NODETYPE_PACKAGEFILE] = "PACKAGEFILE", - [SEDS_NODETYPE_PACKAGE] = "PACKAGE", - [SEDS_NODETYPE_LONG_DESCRIPTION] = "LONG_DESCRIPTION", - [SEDS_NODETYPE_SEMANTICS] = "SEMANTICS", - [SEDS_NODETYPE_SET_NODE_FIRST] = "SET_NODE_FIRST", - [SEDS_NODETYPE_DATA_TYPE_SET] = "DATA_TYPE_SET", - [SEDS_NODETYPE_BASE_INTERFACE_SET] = "BASE_INTERFACE_SET", - [SEDS_NODETYPE_GENERIC_TYPE_SET] = "GENERIC_TYPE_SET", - [SEDS_NODETYPE_PARAMETER_SET] = "PARAMETER_SET", - [SEDS_NODETYPE_COMMAND_SET] = "COMMAND_SET", - [SEDS_NODETYPE_GENERIC_TYPE_MAP_SET] = "GENERIC_TYPE_MAP_SET", - [SEDS_NODETYPE_CONSTRAINT_SET] = "CONSTRAINT_SET", - [SEDS_NODETYPE_DECLARED_INTERFACE_SET] = "DECLARED_INTERFACE_SET", - [SEDS_NODETYPE_PROVIDED_INTERFACE_SET] = "PROVIDED_INTERFACE_SET", - [SEDS_NODETYPE_REQUIRED_INTERFACE_SET] = "REQUIRED_INTERFACE_SET", - [SEDS_NODETYPE_COMPONENT_SET] = "COMPONENT_SET", - [SEDS_NODETYPE_ALTERNATE_SET] = "ALTERNATE_SET", - [SEDS_NODETYPE_PARAMETER_MAP_SET] = "PARAMETER_MAP_SET", - [SEDS_NODETYPE_VARIABLE_SET] = "VARIABLE_SET", - [SEDS_NODETYPE_ACTIVITY_SET] = "ACTIVITY_SET", - [SEDS_NODETYPE_METADATA_VALUE_SET] = "METADATA_VALUE_SET", - [SEDS_NODETYPE_NOMINAL_RANGE_SET] = "NOMINAL_RANGE_SET", - [SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP_SET] = "PARAMETER_ACTIVITY_MAP_SET", - [SEDS_NODETYPE_RANGE_SET] = "RANGE_SET", - [SEDS_NODETYPE_STATE_MACHINE_SET] = "STATE_MACHINE_SET", - [SEDS_NODETYPE_SET_NODE_LAST] = "SET_NODE_LAST", - [SEDS_NODETYPE_COMPONENT] = "COMPONENT", - [SEDS_NODETYPE_COMMAND] = "COMMAND", - [SEDS_NODETYPE_IMPLEMENTATION] = "IMPLEMENTATION", - [SEDS_NODETYPE_ALTERNATE] = "ALTERNATE", - [SEDS_NODETYPE_PARAMETER] = "PARAMETER", - [SEDS_NODETYPE_ARGUMENT] = "ARGUMENT", - [SEDS_NODETYPE_GENERIC_TYPE_MAP] = "GENERIC_TYPE_MAP", - [SEDS_NODETYPE_PARAMETER_MAP] = "PARAMETER_MAP", - [SEDS_NODETYPE_VARIABLE] = "VARIABLE", - [SEDS_NODETYPE_CONTAINER_ENTRY_LIST] = "CONTAINER_ENTRY_LIST", - [SEDS_NODETYPE_CONTAINER_TRAILER_ENTRY_LIST] = "CONTAINER_TRAILER_ENTRY_LIST", - [SEDS_NODETYPE_DIMENSION_LIST] = "DIMENSION_LIST", - [SEDS_NODETYPE_ENUMERATION_LIST] = "ENUMERATION_LIST", - [SEDS_NODETYPE_SCALAR_DATATYPE_FIRST] = "SCALAR_DATATYPE_FIRST", - [SEDS_NODETYPE_INTEGER_DATATYPE] = "INTEGER_DATATYPE", - [SEDS_NODETYPE_FLOAT_DATATYPE] = "FLOAT_DATATYPE", - [SEDS_NODETYPE_ENUMERATION_DATATYPE] = "ENUMERATION_DATATYPE", - [SEDS_NODETYPE_BINARY_DATATYPE] = "BINARY_DATATYPE", - [SEDS_NODETYPE_STRING_DATATYPE] = "STRING_DATATYPE", - [SEDS_NODETYPE_BOOLEAN_DATATYPE] = "BOOLEAN_DATATYPE", - [SEDS_NODETYPE_SUBRANGE_DATATYPE] = "SUBRANGE_DATATYPE", - [SEDS_NODETYPE_ALIAS_DATATYPE] = "ALIAS_DATATYPE", - [SEDS_NODETYPE_SCALAR_DATATYPE_LAST] = "SCALAR_DATATYPE_LAST", - [SEDS_NODETYPE_COMPOUND_DATATYPE_FIRST] = "COMPOUND_DATATYPE_FIRST", - [SEDS_NODETYPE_ARRAY_DATATYPE] = "ARRAY_DATATYPE", - [SEDS_NODETYPE_CONTAINER_DATATYPE] = "CONTAINER_DATATYPE", - [SEDS_NODETYPE_COMPOUND_DATATYPE_LAST] = "COMPOUND_DATATYPE_LAST", - [SEDS_NODETYPE_DYNAMIC_DATATYPE_FIRST] = "DYNAMIC_DATATYPE_FIRST", - [SEDS_NODETYPE_GENERIC_TYPE] = "GENERIC_TYPE", - [SEDS_NODETYPE_DYNAMIC_DATATYPE_LAST] = "DYNAMIC_DATATYPE_LAST", - [SEDS_NODETYPE_INTERFACE_FIRST] = "INTERFACE_FIRST", - [SEDS_NODETYPE_INTERFACE] = "INTERFACE", - [SEDS_NODETYPE_DECLARED_INTERFACE] = "DECLARED_INTERFACE", - [SEDS_NODETYPE_PROVIDED_INTERFACE] = "PROVIDED_INTERFACE", - [SEDS_NODETYPE_REQUIRED_INTERFACE] = "REQUIRED_INTERFACE", - [SEDS_NODETYPE_BASE_INTERFACE] = "BASE_INTERFACE", - [SEDS_NODETYPE_INTERFACE_LAST] = "INTERFACE_LAST", - [SEDS_NODETYPE_ENUMERATION_ENTRY] = "ENUMERATION_ENTRY", - [SEDS_NODETYPE_CONTAINER_ENTRY] = "CONTAINER_ENTRY", - [SEDS_NODETYPE_CONTAINER_FIXED_VALUE_ENTRY] = "CONTAINER_FIXED_VALUE_ENTRY", - [SEDS_NODETYPE_CONTAINER_PADDING_ENTRY] = "CONTAINER_PADDING_ENTRY", - [SEDS_NODETYPE_CONTAINER_LIST_ENTRY] = "CONTAINER_LIST_ENTRY", - [SEDS_NODETYPE_CONTAINER_LENGTH_ENTRY] = "CONTAINER_LENGTH_ENTRY", - [SEDS_NODETYPE_CONTAINER_ERROR_CONTROL_ENTRY] = "CONTAINER_ERROR_CONTROL_ENTRY", - [SEDS_NODETYPE_CONSTRAINT_FIRST] = "CONSTRAINT_FIRST", - [SEDS_NODETYPE_CONSTRAINT] = "CONSTRAINT", - [SEDS_NODETYPE_TYPE_CONSTRAINT] = "TYPE_CONSTRAINT", - [SEDS_NODETYPE_RANGE_CONSTRAINT] = "RANGE_CONSTRAINT", - [SEDS_NODETYPE_VALUE_CONSTRAINT] = "VALUE_CONSTRAINT", - [SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT] = "PRESENCE_TYPE_CONSTRAINT", - [SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT] = "PRESENCE_RANGE_CONSTRAINT", - [SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT] = "PRESENCE_VALUE_CONSTRAINT", - [SEDS_NODETYPE_CONSTRAINT_LAST] = "CONSTRAINT_LAST", - [SEDS_NODETYPE_ENCODING_FIRST] = "ENCODING_FIRST", - [SEDS_NODETYPE_INTEGER_DATA_ENCODING] = "INTEGER_DATA_ENCODING", - [SEDS_NODETYPE_FLOAT_DATA_ENCODING] = "FLOAT_DATA_ENCODING", - [SEDS_NODETYPE_STRING_DATA_ENCODING] = "STRING_DATA_ENCODING", - [SEDS_NODETYPE_ENCODING_LAST] = "ENCODING_LAST", - [SEDS_NODETYPE_RANGE_FIRST] = "RANGE_FIRST", - [SEDS_NODETYPE_MINMAX_RANGE] = "MINMAX_RANGE", - [SEDS_NODETYPE_PRECISION_RANGE] = "PRECISION_RANGE", - [SEDS_NODETYPE_ENUMERATED_RANGE] = "ENUMERATED_RANGE", - [SEDS_NODETYPE_RANGE_LAST] = "RANGE_LAST", - [SEDS_NODETYPE_RANGE] = "RANGE", - [SEDS_NODETYPE_VALID_RANGE] = "VALID_RANGE", - [SEDS_NODETYPE_DIMENSION] = "DIMENSION", - [SEDS_NODETYPE_ARRAY_DIMENSIONS] = "ARRAY_DIMENSIONS", - [SEDS_NODETYPE_SPLINE_CALIBRATOR] = "SPLINE_CALIBRATOR", - [SEDS_NODETYPE_POLYNOMIAL_CALIBRATOR] = "POLYNOMIAL_CALIBRATOR", - [SEDS_NODETYPE_SPLINE_POINT] = "SPLINE_POINT", - [SEDS_NODETYPE_POLYNOMIAL_TERM] = "POLYNOMIAL_TERM", - [SEDS_NODETYPE_ACTIVITY] = "ACTIVITY", - [SEDS_NODETYPE_ANDED_CONDITIONS] = "ANDED_CONDITIONS", - [SEDS_NODETYPE_ARGUMENT_VALUE] = "ARGUMENT_VALUE", - [SEDS_NODETYPE_ARRAY_DATA_TYPE] = "ARRAY_DATA_TYPE", - [SEDS_NODETYPE_ASSIGNMENT] = "ASSIGNMENT", - [SEDS_NODETYPE_BODY] = "BODY", - [SEDS_NODETYPE_BOOLEAN_DATA_ENCODING] = "BOOLEAN_DATA_ENCODING", - [SEDS_NODETYPE_CALIBRATION] = "CALIBRATION", - [SEDS_NODETYPE_CALL] = "CALL", - [SEDS_NODETYPE_CATEGORY] = "CATEGORY", - [SEDS_NODETYPE_COMPARISON_OPERATOR] = "COMPARISON_OPERATOR", - [SEDS_NODETYPE_CONDITIONAL] = "CONDITIONAL", - [SEDS_NODETYPE_CONDITION] = "CONDITION", - [SEDS_NODETYPE_DATE_VALUE] = "DATE_VALUE", - [SEDS_NODETYPE_DEVICE] = "DEVICE", - [SEDS_NODETYPE_DO] = "DO", - [SEDS_NODETYPE_END_AT] = "END_AT", - [SEDS_NODETYPE_ENTRY_STATE] = "ENTRY_STATE", - [SEDS_NODETYPE_EXIT_STATE] = "EXIT_STATE", - [SEDS_NODETYPE_FIRST_OPERAND] = "FIRST_OPERAND", - [SEDS_NODETYPE_FLOAT_VALUE] = "FLOAT_VALUE", - [SEDS_NODETYPE_GET_ACTIVITY] = "GET_ACTIVITY", - [SEDS_NODETYPE_GUARD] = "GUARD", - [SEDS_NODETYPE_INTEGER_VALUE] = "INTEGER_VALUE", - [SEDS_NODETYPE_ITERATION] = "ITERATION", - [SEDS_NODETYPE_LABEL] = "LABEL", - [SEDS_NODETYPE_MATH_OPERATION] = "MATH_OPERATION", - [SEDS_NODETYPE_METADATA] = "METADATA", - [SEDS_NODETYPE_ON_COMMAND_PRIMITIVE] = "ON_COMMAND_PRIMITIVE", - [SEDS_NODETYPE_ON_CONDITION_FALSE] = "ON_CONDITION_FALSE", - [SEDS_NODETYPE_ON_CONDITION_TRUE] = "ON_CONDITION_TRUE", - [SEDS_NODETYPE_ON_ENTRY] = "ON_ENTRY", - [SEDS_NODETYPE_ON_EXIT] = "ON_EXIT", - [SEDS_NODETYPE_ON_PARAMETER_PRIMITIVE] = "ON_PARAMETER_PRIMITIVE", - [SEDS_NODETYPE_ON_TIMER] = "ON_TIMER", - [SEDS_NODETYPE_OPERATOR] = "OPERATOR", - [SEDS_NODETYPE_ORED_CONDITIONS] = "ORED_CONDITIONS", - [SEDS_NODETYPE_OVER_ARRAY] = "OVER_ARRAY", - [SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP] = "PARAMETER_ACTIVITY_MAP", - [SEDS_NODETYPE_PRESENT_WHEN] = "PRESENT_WHEN", - [SEDS_NODETYPE_PROVIDED] = "PROVIDED", - [SEDS_NODETYPE_REQUIRED] = "REQUIRED", - [SEDS_NODETYPE_SECOND_OPERAND] = "SECOND_OPERAND", - [SEDS_NODETYPE_SEMANTICS_TERM] = "SEMANTICS_TERM", - [SEDS_NODETYPE_SEND_COMMAND_PRIMITIVE] = "SEND_COMMAND_PRIMITIVE", - [SEDS_NODETYPE_SEND_PARAMETER_PRIMITIVE] = "SEND_PARAMETER_PRIMITIVE", - [SEDS_NODETYPE_SET_ACTIVITY_ONLY] = "SET_ACTIVITY_ONLY", - [SEDS_NODETYPE_SET_ACTIVITY] = "SET_ACTIVITY", - [SEDS_NODETYPE_START_AT] = "START_AT", - [SEDS_NODETYPE_STATE_MACHINE] = "STATE_MACHINE", - [SEDS_NODETYPE_STATE] = "STATE", - [SEDS_NODETYPE_STEP] = "STEP", - [SEDS_NODETYPE_STRING_VALUE] = "STRING_VALUE", - [SEDS_NODETYPE_TRANSITION] = "TRANSITION", - [SEDS_NODETYPE_TYPE_CONDITION] = "TYPE_CONDITION", - [SEDS_NODETYPE_TYPE_OPERAND] = "TYPE_OPERAND", - [SEDS_NODETYPE_VALUE] = "VALUE", - [SEDS_NODETYPE_VARIABLE_REF] = "VARIABLE_REF", - [SEDS_NODETYPE_CCSDS_STANDARD_LAST] = "CCSDS_STANDARD_LAST", - [SEDS_NODETYPE_XINCLUDE_PASSTHRU] = "XINCLUDE_PASSTHRU", - [SEDS_NODETYPE_DESCRIPTION_PASSTHRU] = "DESCRIPTION_PASSTHRU", - [SEDS_NODETYPE_DESIGN_PARAMETERS] = "DESIGN_PARAMETERS", - [SEDS_NODETYPE_DEFINE] = "DEFINE", - [SEDS_NODETYPE_INSTANCE_RULE_SET] = "INSTANCE_RULE_SET", - [SEDS_NODETYPE_INSTANCE_RULE] = "INSTANCE_RULE", - [SEDS_NODETYPE_INTERFACE_MAP_SET] = "INTERFACE_MAP_SET", - [SEDS_NODETYPE_INTERFACE_MAP] = "INTERFACE_MAP", - [SEDS_NODETYPE_PARAMETER_VALUE] = "PARAMETER_VALUE", +static const char *SEDS_NODETYPE_LOOKUP[SEDS_NODETYPE_MAX] = { + [SEDS_NODETYPE_UNKNOWN] = "UNKNOWN", + [SEDS_NODETYPE_ROOT] = "ROOT", + [SEDS_NODETYPE_CCSDS_STANDARD_FIRST] = "CCSDS_STANDARD_FIRST", + [SEDS_NODETYPE_DATASHEET] = "DATASHEET", + [SEDS_NODETYPE_PACKAGEFILE] = "PACKAGEFILE", + [SEDS_NODETYPE_PACKAGE] = "PACKAGE", + [SEDS_NODETYPE_LONG_DESCRIPTION] = "LONG_DESCRIPTION", + [SEDS_NODETYPE_SEMANTICS] = "SEMANTICS", + [SEDS_NODETYPE_SET_NODE_FIRST] = "SET_NODE_FIRST", + [SEDS_NODETYPE_DATA_TYPE_SET] = "DATA_TYPE_SET", + [SEDS_NODETYPE_BASE_INTERFACE_SET] = "BASE_INTERFACE_SET", + [SEDS_NODETYPE_GENERIC_TYPE_SET] = "GENERIC_TYPE_SET", + [SEDS_NODETYPE_PARAMETER_SET] = "PARAMETER_SET", + [SEDS_NODETYPE_COMMAND_SET] = "COMMAND_SET", + [SEDS_NODETYPE_GENERIC_TYPE_MAP_SET] = "GENERIC_TYPE_MAP_SET", + [SEDS_NODETYPE_CONSTRAINT_SET] = "CONSTRAINT_SET", + [SEDS_NODETYPE_DECLARED_INTERFACE_SET] = "DECLARED_INTERFACE_SET", + [SEDS_NODETYPE_PROVIDED_INTERFACE_SET] = "PROVIDED_INTERFACE_SET", + [SEDS_NODETYPE_REQUIRED_INTERFACE_SET] = "REQUIRED_INTERFACE_SET", + [SEDS_NODETYPE_COMPONENT_SET] = "COMPONENT_SET", + [SEDS_NODETYPE_ALTERNATE_SET] = "ALTERNATE_SET", + [SEDS_NODETYPE_PARAMETER_MAP_SET] = "PARAMETER_MAP_SET", + [SEDS_NODETYPE_VARIABLE_SET] = "VARIABLE_SET", + [SEDS_NODETYPE_ACTIVITY_SET] = "ACTIVITY_SET", + [SEDS_NODETYPE_METADATA_VALUE_SET] = "METADATA_VALUE_SET", + [SEDS_NODETYPE_NOMINAL_RANGE_SET] = "NOMINAL_RANGE_SET", + [SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP_SET] = "PARAMETER_ACTIVITY_MAP_SET", + [SEDS_NODETYPE_RANGE_SET] = "RANGE_SET", + [SEDS_NODETYPE_STATE_MACHINE_SET] = "STATE_MACHINE_SET", + [SEDS_NODETYPE_SET_NODE_LAST] = "SET_NODE_LAST", + [SEDS_NODETYPE_COMPONENT] = "COMPONENT", + [SEDS_NODETYPE_COMMAND] = "COMMAND", + [SEDS_NODETYPE_IMPLEMENTATION] = "IMPLEMENTATION", + [SEDS_NODETYPE_ALTERNATE] = "ALTERNATE", + [SEDS_NODETYPE_PARAMETER] = "PARAMETER", + [SEDS_NODETYPE_ARGUMENT] = "ARGUMENT", + [SEDS_NODETYPE_GENERIC_TYPE_MAP] = "GENERIC_TYPE_MAP", + [SEDS_NODETYPE_PARAMETER_MAP] = "PARAMETER_MAP", + [SEDS_NODETYPE_VARIABLE] = "VARIABLE", + [SEDS_NODETYPE_CONTAINER_ENTRY_LIST] = "CONTAINER_ENTRY_LIST", + [SEDS_NODETYPE_CONTAINER_TRAILER_ENTRY_LIST] = "CONTAINER_TRAILER_ENTRY_LIST", + [SEDS_NODETYPE_DIMENSION_LIST] = "DIMENSION_LIST", + [SEDS_NODETYPE_ENUMERATION_LIST] = "ENUMERATION_LIST", + [SEDS_NODETYPE_SCALAR_DATATYPE_FIRST] = "SCALAR_DATATYPE_FIRST", + [SEDS_NODETYPE_INTEGER_DATATYPE] = "INTEGER_DATATYPE", + [SEDS_NODETYPE_FLOAT_DATATYPE] = "FLOAT_DATATYPE", + [SEDS_NODETYPE_ENUMERATION_DATATYPE] = "ENUMERATION_DATATYPE", + [SEDS_NODETYPE_BINARY_DATATYPE] = "BINARY_DATATYPE", + [SEDS_NODETYPE_STRING_DATATYPE] = "STRING_DATATYPE", + [SEDS_NODETYPE_BOOLEAN_DATATYPE] = "BOOLEAN_DATATYPE", + [SEDS_NODETYPE_SUBRANGE_DATATYPE] = "SUBRANGE_DATATYPE", + [SEDS_NODETYPE_ALIAS_DATATYPE] = "ALIAS_DATATYPE", + [SEDS_NODETYPE_SCALAR_DATATYPE_LAST] = "SCALAR_DATATYPE_LAST", + [SEDS_NODETYPE_COMPOUND_DATATYPE_FIRST] = "COMPOUND_DATATYPE_FIRST", + [SEDS_NODETYPE_ARRAY_DATATYPE] = "ARRAY_DATATYPE", + [SEDS_NODETYPE_CONTAINER_DATATYPE] = "CONTAINER_DATATYPE", + [SEDS_NODETYPE_COMPOUND_DATATYPE_LAST] = "COMPOUND_DATATYPE_LAST", + [SEDS_NODETYPE_DYNAMIC_DATATYPE_FIRST] = "DYNAMIC_DATATYPE_FIRST", + [SEDS_NODETYPE_GENERIC_TYPE] = "GENERIC_TYPE", + [SEDS_NODETYPE_DYNAMIC_DATATYPE_LAST] = "DYNAMIC_DATATYPE_LAST", + [SEDS_NODETYPE_INTERFACE_FIRST] = "INTERFACE_FIRST", + [SEDS_NODETYPE_INTERFACE] = "INTERFACE", + [SEDS_NODETYPE_DECLARED_INTERFACE] = "DECLARED_INTERFACE", + [SEDS_NODETYPE_PROVIDED_INTERFACE] = "PROVIDED_INTERFACE", + [SEDS_NODETYPE_REQUIRED_INTERFACE] = "REQUIRED_INTERFACE", + [SEDS_NODETYPE_BASE_INTERFACE] = "BASE_INTERFACE", + [SEDS_NODETYPE_INTERFACE_LAST] = "INTERFACE_LAST", + [SEDS_NODETYPE_ENUMERATION_ENTRY] = "ENUMERATION_ENTRY", + [SEDS_NODETYPE_CONTAINER_ENTRY] = "CONTAINER_ENTRY", + [SEDS_NODETYPE_CONTAINER_FIXED_VALUE_ENTRY] = "CONTAINER_FIXED_VALUE_ENTRY", + [SEDS_NODETYPE_CONTAINER_PADDING_ENTRY] = "CONTAINER_PADDING_ENTRY", + [SEDS_NODETYPE_CONTAINER_LIST_ENTRY] = "CONTAINER_LIST_ENTRY", + [SEDS_NODETYPE_CONTAINER_LENGTH_ENTRY] = "CONTAINER_LENGTH_ENTRY", + [SEDS_NODETYPE_CONTAINER_ERROR_CONTROL_ENTRY] = "CONTAINER_ERROR_CONTROL_ENTRY", + [SEDS_NODETYPE_CONSTRAINT_FIRST] = "CONSTRAINT_FIRST", + [SEDS_NODETYPE_CONSTRAINT] = "CONSTRAINT", + [SEDS_NODETYPE_TYPE_CONSTRAINT] = "TYPE_CONSTRAINT", + [SEDS_NODETYPE_RANGE_CONSTRAINT] = "RANGE_CONSTRAINT", + [SEDS_NODETYPE_VALUE_CONSTRAINT] = "VALUE_CONSTRAINT", + [SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT] = "PRESENCE_TYPE_CONSTRAINT", + [SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT] = "PRESENCE_RANGE_CONSTRAINT", + [SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT] = "PRESENCE_VALUE_CONSTRAINT", + [SEDS_NODETYPE_CONSTRAINT_LAST] = "CONSTRAINT_LAST", + [SEDS_NODETYPE_ENCODING_FIRST] = "ENCODING_FIRST", + [SEDS_NODETYPE_INTEGER_DATA_ENCODING] = "INTEGER_DATA_ENCODING", + [SEDS_NODETYPE_FLOAT_DATA_ENCODING] = "FLOAT_DATA_ENCODING", + [SEDS_NODETYPE_STRING_DATA_ENCODING] = "STRING_DATA_ENCODING", + [SEDS_NODETYPE_ENCODING_LAST] = "ENCODING_LAST", + [SEDS_NODETYPE_RANGE_FIRST] = "RANGE_FIRST", + [SEDS_NODETYPE_MINMAX_RANGE] = "MINMAX_RANGE", + [SEDS_NODETYPE_PRECISION_RANGE] = "PRECISION_RANGE", + [SEDS_NODETYPE_ENUMERATED_RANGE] = "ENUMERATED_RANGE", + [SEDS_NODETYPE_RANGE_LAST] = "RANGE_LAST", + [SEDS_NODETYPE_RANGE] = "RANGE", + [SEDS_NODETYPE_VALID_RANGE] = "VALID_RANGE", + [SEDS_NODETYPE_DIMENSION] = "DIMENSION", + [SEDS_NODETYPE_ARRAY_DIMENSIONS] = "ARRAY_DIMENSIONS", + [SEDS_NODETYPE_SPLINE_CALIBRATOR] = "SPLINE_CALIBRATOR", + [SEDS_NODETYPE_POLYNOMIAL_CALIBRATOR] = "POLYNOMIAL_CALIBRATOR", + [SEDS_NODETYPE_SPLINE_POINT] = "SPLINE_POINT", + [SEDS_NODETYPE_POLYNOMIAL_TERM] = "POLYNOMIAL_TERM", + [SEDS_NODETYPE_ACTIVITY] = "ACTIVITY", + [SEDS_NODETYPE_ANDED_CONDITIONS] = "ANDED_CONDITIONS", + [SEDS_NODETYPE_ARGUMENT_VALUE] = "ARGUMENT_VALUE", + [SEDS_NODETYPE_ARRAY_DATA_TYPE] = "ARRAY_DATA_TYPE", + [SEDS_NODETYPE_ASSIGNMENT] = "ASSIGNMENT", + [SEDS_NODETYPE_BODY] = "BODY", + [SEDS_NODETYPE_BOOLEAN_DATA_ENCODING] = "BOOLEAN_DATA_ENCODING", + [SEDS_NODETYPE_CALIBRATION] = "CALIBRATION", + [SEDS_NODETYPE_CALL] = "CALL", + [SEDS_NODETYPE_CATEGORY] = "CATEGORY", + [SEDS_NODETYPE_COMPARISON_OPERATOR] = "COMPARISON_OPERATOR", + [SEDS_NODETYPE_CONDITIONAL] = "CONDITIONAL", + [SEDS_NODETYPE_CONDITION] = "CONDITION", + [SEDS_NODETYPE_DATE_VALUE] = "DATE_VALUE", + [SEDS_NODETYPE_DEVICE] = "DEVICE", + [SEDS_NODETYPE_DO] = "DO", + [SEDS_NODETYPE_END_AT] = "END_AT", + [SEDS_NODETYPE_ENTRY_STATE] = "ENTRY_STATE", + [SEDS_NODETYPE_EXIT_STATE] = "EXIT_STATE", + [SEDS_NODETYPE_FIRST_OPERAND] = "FIRST_OPERAND", + [SEDS_NODETYPE_FLOAT_VALUE] = "FLOAT_VALUE", + [SEDS_NODETYPE_GET_ACTIVITY] = "GET_ACTIVITY", + [SEDS_NODETYPE_GUARD] = "GUARD", + [SEDS_NODETYPE_INTEGER_VALUE] = "INTEGER_VALUE", + [SEDS_NODETYPE_ITERATION] = "ITERATION", + [SEDS_NODETYPE_LABEL] = "LABEL", + [SEDS_NODETYPE_MATH_OPERATION] = "MATH_OPERATION", + [SEDS_NODETYPE_METADATA] = "METADATA", + [SEDS_NODETYPE_ON_COMMAND_PRIMITIVE] = "ON_COMMAND_PRIMITIVE", + [SEDS_NODETYPE_ON_CONDITION_FALSE] = "ON_CONDITION_FALSE", + [SEDS_NODETYPE_ON_CONDITION_TRUE] = "ON_CONDITION_TRUE", + [SEDS_NODETYPE_ON_ENTRY] = "ON_ENTRY", + [SEDS_NODETYPE_ON_EXIT] = "ON_EXIT", + [SEDS_NODETYPE_ON_PARAMETER_PRIMITIVE] = "ON_PARAMETER_PRIMITIVE", + [SEDS_NODETYPE_ON_TIMER] = "ON_TIMER", + [SEDS_NODETYPE_OPERATOR] = "OPERATOR", + [SEDS_NODETYPE_ORED_CONDITIONS] = "ORED_CONDITIONS", + [SEDS_NODETYPE_OVER_ARRAY] = "OVER_ARRAY", + [SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP] = "PARAMETER_ACTIVITY_MAP", + [SEDS_NODETYPE_PRESENT_WHEN] = "PRESENT_WHEN", + [SEDS_NODETYPE_PROVIDED] = "PROVIDED", + [SEDS_NODETYPE_REQUIRED] = "REQUIRED", + [SEDS_NODETYPE_SECOND_OPERAND] = "SECOND_OPERAND", + [SEDS_NODETYPE_SEMANTICS_TERM] = "SEMANTICS_TERM", + [SEDS_NODETYPE_SEND_COMMAND_PRIMITIVE] = "SEND_COMMAND_PRIMITIVE", + [SEDS_NODETYPE_SEND_PARAMETER_PRIMITIVE] = "SEND_PARAMETER_PRIMITIVE", + [SEDS_NODETYPE_SET_ACTIVITY_ONLY] = "SET_ACTIVITY_ONLY", + [SEDS_NODETYPE_SET_ACTIVITY] = "SET_ACTIVITY", + [SEDS_NODETYPE_START_AT] = "START_AT", + [SEDS_NODETYPE_STATE_MACHINE] = "STATE_MACHINE", + [SEDS_NODETYPE_STATE] = "STATE", + [SEDS_NODETYPE_STEP] = "STEP", + [SEDS_NODETYPE_STRING_VALUE] = "STRING_VALUE", + [SEDS_NODETYPE_TRANSITION] = "TRANSITION", + [SEDS_NODETYPE_TYPE_CONDITION] = "TYPE_CONDITION", + [SEDS_NODETYPE_TYPE_OPERAND] = "TYPE_OPERAND", + [SEDS_NODETYPE_VALUE] = "VALUE", + [SEDS_NODETYPE_VARIABLE_REF] = "VARIABLE_REF", + [SEDS_NODETYPE_CCSDS_STANDARD_LAST] = "CCSDS_STANDARD_LAST", + [SEDS_NODETYPE_XINCLUDE_PASSTHRU] = "XINCLUDE_PASSTHRU", + [SEDS_NODETYPE_DESCRIPTION_PASSTHRU] = "DESCRIPTION_PASSTHRU", + [SEDS_NODETYPE_DESIGN_PARAMETERS] = "DESIGN_PARAMETERS", + [SEDS_NODETYPE_DEFINE] = "DEFINE", + [SEDS_NODETYPE_INSTANCE_RULE_SET] = "INSTANCE_RULE_SET", + [SEDS_NODETYPE_INSTANCE_RULE] = "INSTANCE_RULE", + [SEDS_NODETYPE_INTERFACE_MAP_SET] = "INTERFACE_MAP_SET", + [SEDS_NODETYPE_INTERFACE_MAP] = "INTERFACE_MAP", + [SEDS_NODETYPE_PARAMETER_VALUE] = "PARAMETER_VALUE", }; - /*******************************************************************************/ /* Internal / static Helper Functions */ /* (these are not referenced outside this unit) */ /*******************************************************************************/ - /** * Lua callable function to output a message regarding a SEDS DOM node object * @@ -250,7 +246,7 @@ static const char *SEDS_NODETYPE_LOOKUP[SEDS_NODETYPE_MAX] = */ static int seds_tree_mark_error(lua_State *lua) { - const char *extramsg; + const char *extramsg; seds_user_message_t msgtype = lua_tointeger(lua, lua_upvalueindex(1)); luaL_checkudata(lua, 1, "seds_node"); @@ -269,10 +265,7 @@ static int seds_tree_mark_error(lua_State *lua) lua_getfield(lua, 1, "xml_filename"); lua_getfield(lua, 1, "xml_linenum"); - seds_user_message_preformat(msgtype, - lua_tostring(lua, -2), - lua_tointeger(lua, -1), - lua_tostring(lua, 2), extramsg); + seds_user_message_preformat(msgtype, lua_tostring(lua, -2), lua_tointeger(lua, -1), lua_tostring(lua, 2), extramsg); if (msgtype == SEDS_USER_MESSAGE_ERROR) { @@ -328,11 +321,9 @@ static int seds_tree_node_get_property(lua_State *lua) lua_settop(lua, 2); - if (lua_type(lua, 2) == LUA_TSTRING && - strcmp(lua_tostring(lua, 2), "entity_type") == 0) + if (lua_type(lua, 2) == LUA_TSTRING && strcmp(lua_tostring(lua, 2), "entity_type") == 0) { - if (pnode->node_type < SEDS_NODETYPE_MAX && - SEDS_NODETYPE_LOOKUP[pnode->node_type] != NULL) + if (pnode->node_type < SEDS_NODETYPE_MAX && SEDS_NODETYPE_LOOKUP[pnode->node_type] != NULL) { lua_pushstring(lua, SEDS_NODETYPE_LOOKUP[pnode->node_type]); } @@ -366,8 +357,8 @@ static int seds_tree_node_get_property(lua_State *lua) static int seds_tree_node_to_string(lua_State *lua) { seds_node_t *pnode = luaL_checkudata(lua, 1, "seds_node"); - int uv_idx; - luaL_Buffer buf; + int uv_idx; + luaL_Buffer buf; /* Note - As of Lua 5.4, this may push something onto the stack. * Whereas in 5.3 and below, it does not change the stack. */ @@ -406,17 +397,16 @@ static int seds_tree_node_to_string(lua_State *lua) */ static int seds_tree_node_new_object(lua_State *lua) { - int i; - int nret; + int i; + int nret; const char *nodetype_str = luaL_checkstring(lua, 1); nret = 0; if (nodetype_str != NULL) { - for (i=0; i < (sizeof(SEDS_NODETYPE_LOOKUP) / sizeof(SEDS_NODETYPE_LOOKUP[0])); ++i) + for (i = 0; i < (sizeof(SEDS_NODETYPE_LOOKUP) / sizeof(SEDS_NODETYPE_LOOKUP[0])); ++i) { - if (SEDS_NODETYPE_LOOKUP[i] != NULL && - strcmp(SEDS_NODETYPE_LOOKUP[i], nodetype_str) == 0) + if (SEDS_NODETYPE_LOOKUP[i] != NULL && strcmp(SEDS_NODETYPE_LOOKUP[i], nodetype_str) == 0) { seds_tree_node_push_new_object(lua, i); nret = 1; @@ -509,5 +499,4 @@ void seds_tree_node_register_globals(lua_State *lua) lua_setfield(lua, -2, "get_properties"); lua_rawsetp(lua, LUA_REGISTRYINDEX, &SEDS_TREE_PROPERTIES_LUA_KEY); - } diff --git a/tool/src/seds_tree_node.h b/tool/src/seds_tree_node.h index 3e84112..5c3d68f 100644 --- a/tool/src/seds_tree_node.h +++ b/tool/src/seds_tree_node.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_tree_node.h * \ingroup tool @@ -51,232 +50,235 @@ typedef enum * unsupported. */ - SEDS_NODETYPE_UNKNOWN, /**< Reserved value - for nodes that are ignored */ - SEDS_NODETYPE_ROOT, /**< Root node of entire hierarchy */ - SEDS_NODETYPE_CCSDS_STANDARD_FIRST, /**< Reserved index marker - not used */ - - /* Basic EDS node types */ - SEDS_NODETYPE_DATASHEET, /**< Opening tag for SEDS datasheet */ - SEDS_NODETYPE_PACKAGEFILE, /**< Opening tag for SEDS packagefile */ - SEDS_NODETYPE_PACKAGE, /**< Package definition */ - SEDS_NODETYPE_LONG_DESCRIPTION, /**< Long description (documentation) node */ - SEDS_NODETYPE_SEMANTICS, /**< Extra usage semantics that are beyond EDS scope (TBD) */ - - /* - * SET and LIST EDS nodes: these are structural from the xml file and only exist - * to contain other nodes of a specific type - */ - SEDS_NODETYPE_SET_NODE_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_DATA_TYPE_SET, /**< DataTypeSet node */ - SEDS_NODETYPE_BASE_INTERFACE_SET, - SEDS_NODETYPE_GENERIC_TYPE_SET, - SEDS_NODETYPE_PARAMETER_SET, - SEDS_NODETYPE_COMMAND_SET, - SEDS_NODETYPE_GENERIC_TYPE_MAP_SET, - SEDS_NODETYPE_CONSTRAINT_SET, - SEDS_NODETYPE_DECLARED_INTERFACE_SET, - SEDS_NODETYPE_PROVIDED_INTERFACE_SET, - SEDS_NODETYPE_REQUIRED_INTERFACE_SET, - SEDS_NODETYPE_COMPONENT_SET, - SEDS_NODETYPE_ALTERNATE_SET, - SEDS_NODETYPE_PARAMETER_MAP_SET, - SEDS_NODETYPE_VARIABLE_SET, - SEDS_NODETYPE_ACTIVITY_SET, - SEDS_NODETYPE_METADATA_VALUE_SET, - SEDS_NODETYPE_NOMINAL_RANGE_SET, - SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP_SET, - SEDS_NODETYPE_RANGE_SET, - SEDS_NODETYPE_STATE_MACHINE_SET, - SEDS_NODETYPE_SET_NODE_LAST, /**< Reserved index marker - not used */ - - SEDS_NODETYPE_COMPONENT, - SEDS_NODETYPE_COMMAND, - SEDS_NODETYPE_IMPLEMENTATION, - SEDS_NODETYPE_ALTERNATE, - SEDS_NODETYPE_PARAMETER, - SEDS_NODETYPE_ARGUMENT, - SEDS_NODETYPE_GENERIC_TYPE_MAP, - SEDS_NODETYPE_PARAMETER_MAP, - SEDS_NODETYPE_VARIABLE, - - SEDS_NODETYPE_CONTAINER_ENTRY_LIST, /**< EntryList node (container types) */ - SEDS_NODETYPE_CONTAINER_TRAILER_ENTRY_LIST, /**< TrailerEntryList node (container types) */ - SEDS_NODETYPE_DIMENSION_LIST, /**< DimensionList node (array types) */ - SEDS_NODETYPE_ENUMERATION_LIST, /**< EnumerationList node (enumerated types) */ - - /* Data type definition EDS nodes */ - SEDS_NODETYPE_SCALAR_DATATYPE_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_INTEGER_DATATYPE, /**< Integer Data type */ - SEDS_NODETYPE_FLOAT_DATATYPE, /**< Floating Point Data type */ - SEDS_NODETYPE_ENUMERATION_DATATYPE, /**< Enumerated Data type */ - SEDS_NODETYPE_BINARY_DATATYPE, /**< Binary Blob Data type */ - SEDS_NODETYPE_STRING_DATATYPE, /**< String Data type */ - SEDS_NODETYPE_BOOLEAN_DATATYPE, /**< Boolean Data type */ - SEDS_NODETYPE_SUBRANGE_DATATYPE, /**< SubRange Data type */ - SEDS_NODETYPE_SCALAR_DATATYPE_LAST, /**< Reserved index marker - not used */ - - SEDS_NODETYPE_COMPOUND_DATATYPE_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_ARRAY_DATATYPE, /**< Array Data type */ - SEDS_NODETYPE_CONTAINER_DATATYPE, /**< Container Data type */ - SEDS_NODETYPE_COMPOUND_DATATYPE_LAST, /**< Reserved index marker - not used */ - - SEDS_NODETYPE_DYNAMIC_DATATYPE_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_GENERIC_TYPE, /**< Generic Type (deferred definition) */ - SEDS_NODETYPE_ALIAS_DATATYPE, /**< Alias Data type */ - SEDS_NODETYPE_DYNAMIC_DATATYPE_LAST, /**< Reserved index marker - not used */ - - SEDS_NODETYPE_INTERFACE_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_INTERFACE, - SEDS_NODETYPE_DECLARED_INTERFACE, - SEDS_NODETYPE_PROVIDED_INTERFACE, - SEDS_NODETYPE_REQUIRED_INTERFACE, - SEDS_NODETYPE_BASE_INTERFACE, - SEDS_NODETYPE_INTERFACE_LAST, /**< Reserved index marker - not used */ - - SEDS_NODETYPE_ENUMERATION_ENTRY, /**< Enumeration label node (enumerated types) */ - SEDS_NODETYPE_CONTAINER_ENTRY, /**< Entry node (container types) */ - SEDS_NODETYPE_CONTAINER_FIXED_VALUE_ENTRY, /**< Entry node (container types) */ - SEDS_NODETYPE_CONTAINER_PADDING_ENTRY, /**< Entry node (container types) */ - SEDS_NODETYPE_CONTAINER_LIST_ENTRY, /**< Entry node (container types) */ - SEDS_NODETYPE_CONTAINER_LENGTH_ENTRY, /**< Entry node (container types) */ - SEDS_NODETYPE_CONTAINER_ERROR_CONTROL_ENTRY, /**< Entry node (container types) */ - - /* Contstraint nodes */ - SEDS_NODETYPE_CONSTRAINT_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_CONSTRAINT, - SEDS_NODETYPE_TYPE_CONSTRAINT, - SEDS_NODETYPE_RANGE_CONSTRAINT, - SEDS_NODETYPE_VALUE_CONSTRAINT, - SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT, - SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT, - SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT, - SEDS_NODETYPE_CONSTRAINT_LAST, /**< Reserved index marker - not used */ - - /* Encoding specifiers */ - SEDS_NODETYPE_ENCODING_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_INTEGER_DATA_ENCODING, - SEDS_NODETYPE_FLOAT_DATA_ENCODING, - SEDS_NODETYPE_STRING_DATA_ENCODING, - SEDS_NODETYPE_ENCODING_LAST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_UNKNOWN, /**< Reserved value - for nodes that are ignored */ + SEDS_NODETYPE_ROOT, /**< Root node of entire hierarchy */ + SEDS_NODETYPE_CCSDS_STANDARD_FIRST, /**< Reserved index marker - not used */ - /* Range specifiers */ - SEDS_NODETYPE_RANGE_FIRST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_MINMAX_RANGE, - SEDS_NODETYPE_PRECISION_RANGE, - SEDS_NODETYPE_ENUMERATED_RANGE, - SEDS_NODETYPE_RANGE_LAST, /**< Reserved index marker - not used */ + /* Basic EDS node types */ + SEDS_NODETYPE_DATASHEET, /**< Opening tag for SEDS datasheet */ + SEDS_NODETYPE_PACKAGEFILE, /**< Opening tag for SEDS packagefile */ + SEDS_NODETYPE_PACKAGE, /**< Package definition */ + SEDS_NODETYPE_LONG_DESCRIPTION, /**< Long description (documentation) node */ + SEDS_NODETYPE_SEMANTICS, /**< Extra usage semantics that are beyond EDS scope (TBD) */ - SEDS_NODETYPE_RANGE, - SEDS_NODETYPE_VALID_RANGE, - - /* Dimension specifiers */ - SEDS_NODETYPE_DIMENSION, /**< Dimension node (array types) */ - SEDS_NODETYPE_ARRAY_DIMENSIONS, - - /* Calibration specifiers */ - SEDS_NODETYPE_SPLINE_CALIBRATOR, /**< Spline calibrator */ - SEDS_NODETYPE_POLYNOMIAL_CALIBRATOR, /**< Polynomial calibrator */ - SEDS_NODETYPE_SPLINE_POINT, /**< Spline point */ - SEDS_NODETYPE_POLYNOMIAL_TERM, /**< Polynomial term */ - - /* Other SEDS XML elements */ - /* (These are acceptable per SEDS schema but may or may not be utilized) */ - SEDS_NODETYPE_ACTIVITY, - SEDS_NODETYPE_ANDED_CONDITIONS, - SEDS_NODETYPE_ARGUMENT_VALUE, - SEDS_NODETYPE_ARRAY_DATA_TYPE, - SEDS_NODETYPE_ASSIGNMENT, - SEDS_NODETYPE_BODY, - SEDS_NODETYPE_BOOLEAN_DATA_ENCODING, - SEDS_NODETYPE_CALIBRATION, - SEDS_NODETYPE_CALL, - SEDS_NODETYPE_CATEGORY, - SEDS_NODETYPE_COMPARISON_OPERATOR, - SEDS_NODETYPE_CONDITIONAL, - SEDS_NODETYPE_CONDITION, - SEDS_NODETYPE_DATE_VALUE, - SEDS_NODETYPE_DEVICE, - SEDS_NODETYPE_DO, - SEDS_NODETYPE_END_AT, - SEDS_NODETYPE_ENTRY_STATE, - SEDS_NODETYPE_EXIT_STATE, - SEDS_NODETYPE_FIRST_OPERAND, - SEDS_NODETYPE_FLOAT_VALUE, - SEDS_NODETYPE_GET_ACTIVITY, - SEDS_NODETYPE_GUARD, - SEDS_NODETYPE_INTEGER_VALUE, - SEDS_NODETYPE_ITERATION, - SEDS_NODETYPE_LABEL, - SEDS_NODETYPE_MATH_OPERATION, - SEDS_NODETYPE_METADATA, - SEDS_NODETYPE_ON_COMMAND_PRIMITIVE, - SEDS_NODETYPE_ON_CONDITION_FALSE, - SEDS_NODETYPE_ON_CONDITION_TRUE, - SEDS_NODETYPE_ON_ENTRY, - SEDS_NODETYPE_ON_EXIT, - SEDS_NODETYPE_ON_PARAMETER_PRIMITIVE, - SEDS_NODETYPE_ON_TIMER, - SEDS_NODETYPE_OPERATOR, - SEDS_NODETYPE_ORED_CONDITIONS, - SEDS_NODETYPE_OVER_ARRAY, - SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP, - SEDS_NODETYPE_PRESENT_WHEN, - SEDS_NODETYPE_PROVIDED, - SEDS_NODETYPE_REQUIRED, - SEDS_NODETYPE_SECOND_OPERAND, - SEDS_NODETYPE_SEMANTICS_TERM, - SEDS_NODETYPE_SEND_COMMAND_PRIMITIVE, - SEDS_NODETYPE_SEND_PARAMETER_PRIMITIVE, - SEDS_NODETYPE_SET_ACTIVITY_ONLY, - SEDS_NODETYPE_SET_ACTIVITY, - SEDS_NODETYPE_START_AT, - SEDS_NODETYPE_STATE_MACHINE, - SEDS_NODETYPE_STATE, - SEDS_NODETYPE_STEP, - SEDS_NODETYPE_STRING_VALUE, - SEDS_NODETYPE_TRANSITION, - SEDS_NODETYPE_TYPE_CONDITION, - SEDS_NODETYPE_TYPE_OPERAND, - SEDS_NODETYPE_VALUE, - SEDS_NODETYPE_VARIABLE_REF, - - SEDS_NODETYPE_CCSDS_STANDARD_LAST, /**< Reserved index marker - not used */ - - /* - * ---------------------------------------------------------------------------------- - * Additional node types specific to this NASA cFS toolchain implementation - * - * These provide extra necessary information that the CCSDS SEDS specification currently does not cover. - * These elements would generally be stripped out of XML files that were intended to be CCSDS SEDS-compliant, - * and/or instantiated via supplemental XML files that are specific to this tool chain. - * ---------------------------------------------------------------------------------- - */ + /* + * SET and LIST EDS nodes: these are structural from the xml file and only exist + * to contain other nodes of a specific type + */ + SEDS_NODETYPE_SET_NODE_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_DATA_TYPE_SET, /**< DataTypeSet node */ + SEDS_NODETYPE_BASE_INTERFACE_SET, + SEDS_NODETYPE_GENERIC_TYPE_SET, + SEDS_NODETYPE_PARAMETER_SET, + SEDS_NODETYPE_COMMAND_SET, + SEDS_NODETYPE_GENERIC_TYPE_MAP_SET, + SEDS_NODETYPE_CONSTRAINT_SET, + SEDS_NODETYPE_DECLARED_INTERFACE_SET, + SEDS_NODETYPE_PROVIDED_INTERFACE_SET, + SEDS_NODETYPE_REQUIRED_INTERFACE_SET, + SEDS_NODETYPE_COMPONENT_SET, + SEDS_NODETYPE_ALTERNATE_SET, + SEDS_NODETYPE_PARAMETER_MAP_SET, + SEDS_NODETYPE_VARIABLE_SET, + SEDS_NODETYPE_ACTIVITY_SET, + SEDS_NODETYPE_METADATA_VALUE_SET, + SEDS_NODETYPE_NOMINAL_RANGE_SET, + SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP_SET, + SEDS_NODETYPE_RANGE_SET, + SEDS_NODETYPE_STATE_MACHINE_SET, + SEDS_NODETYPE_SET_NODE_LAST, /**< Reserved index marker - not used */ + + SEDS_NODETYPE_COMPONENT, + SEDS_NODETYPE_COMMAND, + SEDS_NODETYPE_IMPLEMENTATION, + SEDS_NODETYPE_ALTERNATE, + SEDS_NODETYPE_PARAMETER, + SEDS_NODETYPE_ARGUMENT, + SEDS_NODETYPE_GENERIC_TYPE_MAP, + SEDS_NODETYPE_PARAMETER_MAP, + SEDS_NODETYPE_VARIABLE, + + SEDS_NODETYPE_CONTAINER_ENTRY_LIST, /**< EntryList node (container types) */ + SEDS_NODETYPE_CONTAINER_TRAILER_ENTRY_LIST, /**< TrailerEntryList node (container types) */ + SEDS_NODETYPE_DIMENSION_LIST, /**< DimensionList node (array types) */ + SEDS_NODETYPE_ENUMERATION_LIST, /**< EnumerationList node (enumerated types) */ + + /* Data type definition EDS nodes */ + SEDS_NODETYPE_SCALAR_DATATYPE_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_INTEGER_DATATYPE, /**< Integer Data type */ + SEDS_NODETYPE_FLOAT_DATATYPE, /**< Floating Point Data type */ + SEDS_NODETYPE_ENUMERATION_DATATYPE, /**< Enumerated Data type */ + SEDS_NODETYPE_BINARY_DATATYPE, /**< Binary Blob Data type */ + SEDS_NODETYPE_STRING_DATATYPE, /**< String Data type */ + SEDS_NODETYPE_BOOLEAN_DATATYPE, /**< Boolean Data type */ + SEDS_NODETYPE_SUBRANGE_DATATYPE, /**< SubRange Data type */ + SEDS_NODETYPE_SCALAR_DATATYPE_LAST, /**< Reserved index marker - not used */ + + SEDS_NODETYPE_COMPOUND_DATATYPE_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_ARRAY_DATATYPE, /**< Array Data type */ + SEDS_NODETYPE_CONTAINER_DATATYPE, /**< Container Data type */ + SEDS_NODETYPE_COMPOUND_DATATYPE_LAST, /**< Reserved index marker - not used */ + + SEDS_NODETYPE_DYNAMIC_DATATYPE_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_GENERIC_TYPE, /**< Generic Type (deferred definition) */ + SEDS_NODETYPE_ALIAS_DATATYPE, /**< Alias Data type */ + SEDS_NODETYPE_DYNAMIC_DATATYPE_LAST, /**< Reserved index marker - not used */ + + SEDS_NODETYPE_INTERFACE_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_INTERFACE, + SEDS_NODETYPE_DECLARED_INTERFACE, + SEDS_NODETYPE_PROVIDED_INTERFACE, + SEDS_NODETYPE_REQUIRED_INTERFACE, + SEDS_NODETYPE_BASE_INTERFACE, + SEDS_NODETYPE_INTERFACE_LAST, /**< Reserved index marker - not used */ + + SEDS_NODETYPE_ENUMERATION_ENTRY, /**< Enumeration label node (enumerated types) */ + SEDS_NODETYPE_CONTAINER_ENTRY, /**< Entry node (container types) */ + SEDS_NODETYPE_CONTAINER_FIXED_VALUE_ENTRY, /**< Entry node (container types) */ + SEDS_NODETYPE_CONTAINER_PADDING_ENTRY, /**< Entry node (container types) */ + SEDS_NODETYPE_CONTAINER_LIST_ENTRY, /**< Entry node (container types) */ + SEDS_NODETYPE_CONTAINER_LENGTH_ENTRY, /**< Entry node (container types) */ + SEDS_NODETYPE_CONTAINER_ERROR_CONTROL_ENTRY, /**< Entry node (container types) */ + + /* Contstraint nodes */ + SEDS_NODETYPE_CONSTRAINT_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_CONSTRAINT, + SEDS_NODETYPE_TYPE_CONSTRAINT, + SEDS_NODETYPE_RANGE_CONSTRAINT, + SEDS_NODETYPE_VALUE_CONSTRAINT, + SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT, + SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT, + SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT, + SEDS_NODETYPE_CONSTRAINT_LAST, /**< Reserved index marker - not used */ + + /* Encoding specifiers */ + SEDS_NODETYPE_ENCODING_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_INTEGER_DATA_ENCODING, + SEDS_NODETYPE_FLOAT_DATA_ENCODING, + SEDS_NODETYPE_STRING_DATA_ENCODING, + SEDS_NODETYPE_ENCODING_LAST, /**< Reserved index marker - not used */ + + /* Range specifiers */ + SEDS_NODETYPE_RANGE_FIRST, /**< Reserved index marker - not used */ + SEDS_NODETYPE_MINMAX_RANGE, + SEDS_NODETYPE_PRECISION_RANGE, + SEDS_NODETYPE_ENUMERATED_RANGE, + SEDS_NODETYPE_RANGE_LAST, /**< Reserved index marker - not used */ + + SEDS_NODETYPE_RANGE, + SEDS_NODETYPE_VALID_RANGE, + + /* Dimension specifiers */ + SEDS_NODETYPE_DIMENSION, /**< Dimension node (array types) */ + SEDS_NODETYPE_ARRAY_DIMENSIONS, + + /* Calibration specifiers */ + SEDS_NODETYPE_SPLINE_CALIBRATOR, /**< Spline calibrator */ + SEDS_NODETYPE_POLYNOMIAL_CALIBRATOR, /**< Polynomial calibrator */ + SEDS_NODETYPE_SPLINE_POINT, /**< Spline point */ + SEDS_NODETYPE_POLYNOMIAL_TERM, /**< Polynomial term */ + + /* Other SEDS XML elements */ + /* (These are acceptable per SEDS schema but may or may not be utilized) */ + SEDS_NODETYPE_ACTIVITY, + SEDS_NODETYPE_ANDED_CONDITIONS, + SEDS_NODETYPE_ARGUMENT_VALUE, + SEDS_NODETYPE_ARRAY_DATA_TYPE, + SEDS_NODETYPE_ASSIGNMENT, + SEDS_NODETYPE_BODY, + SEDS_NODETYPE_BOOLEAN_DATA_ENCODING, + SEDS_NODETYPE_CALIBRATION, + SEDS_NODETYPE_CALL, + SEDS_NODETYPE_CATEGORY, + SEDS_NODETYPE_COMPARISON_OPERATOR, + SEDS_NODETYPE_CONDITIONAL, + SEDS_NODETYPE_CONDITION, + SEDS_NODETYPE_DATE_VALUE, + SEDS_NODETYPE_DEVICE, + SEDS_NODETYPE_DO, + SEDS_NODETYPE_END_AT, + SEDS_NODETYPE_ENTRY_STATE, + SEDS_NODETYPE_EXIT_STATE, + SEDS_NODETYPE_FIRST_OPERAND, + SEDS_NODETYPE_FLOAT_VALUE, + SEDS_NODETYPE_GET_ACTIVITY, + SEDS_NODETYPE_GUARD, + SEDS_NODETYPE_INTEGER_VALUE, + SEDS_NODETYPE_ITERATION, + SEDS_NODETYPE_LABEL, + SEDS_NODETYPE_MATH_OPERATION, + SEDS_NODETYPE_METADATA, + SEDS_NODETYPE_ON_COMMAND_PRIMITIVE, + SEDS_NODETYPE_ON_CONDITION_FALSE, + SEDS_NODETYPE_ON_CONDITION_TRUE, + SEDS_NODETYPE_ON_ENTRY, + SEDS_NODETYPE_ON_EXIT, + SEDS_NODETYPE_ON_PARAMETER_PRIMITIVE, + SEDS_NODETYPE_ON_TIMER, + SEDS_NODETYPE_OPERATOR, + SEDS_NODETYPE_ORED_CONDITIONS, + SEDS_NODETYPE_OVER_ARRAY, + SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP, + SEDS_NODETYPE_PRESENT_WHEN, + SEDS_NODETYPE_PROVIDED, + SEDS_NODETYPE_REQUIRED, + SEDS_NODETYPE_SECOND_OPERAND, + SEDS_NODETYPE_SEMANTICS_TERM, + SEDS_NODETYPE_SEND_COMMAND_PRIMITIVE, + SEDS_NODETYPE_SEND_PARAMETER_PRIMITIVE, + SEDS_NODETYPE_SET_ACTIVITY_ONLY, + SEDS_NODETYPE_SET_ACTIVITY, + SEDS_NODETYPE_START_AT, + SEDS_NODETYPE_STATE_MACHINE, + SEDS_NODETYPE_STATE, + SEDS_NODETYPE_STEP, + SEDS_NODETYPE_STRING_VALUE, + SEDS_NODETYPE_TRANSITION, + SEDS_NODETYPE_TYPE_CONDITION, + SEDS_NODETYPE_TYPE_OPERAND, + SEDS_NODETYPE_VALUE, + SEDS_NODETYPE_VARIABLE_REF, + + SEDS_NODETYPE_CCSDS_STANDARD_LAST, /**< Reserved index marker - not used */ - SEDS_NODETYPE_XINCLUDE_PASSTHRU, /**< For Xinclude elements - ignored by this tool, suppresses warnings */ - SEDS_NODETYPE_DESCRIPTION_PASSTHRU, /**< Long description (documentation) continuation/pass-through node */ - SEDS_NODETYPE_DESIGN_PARAMETERS, /**< Opening tag for SEDS design-time parameter sheet (supplements the data sheet) */ - SEDS_NODETYPE_DEFINE, /**< Equate text name to value during pre-processing */ - SEDS_NODETYPE_INSTANCE_RULE_SET, - SEDS_NODETYPE_INSTANCE_RULE, - SEDS_NODETYPE_INTERFACE_MAP_SET, - SEDS_NODETYPE_INTERFACE_MAP, - SEDS_NODETYPE_PARAMETER_VALUE, + /* + * ---------------------------------------------------------------------------------- + * Additional node types specific to this NASA cFS toolchain implementation + * + * These provide extra necessary information that the CCSDS SEDS specification currently does not cover. + * These elements would generally be stripped out of XML files that were intended to be CCSDS SEDS-compliant, + * and/or instantiated via supplemental XML files that are specific to this tool chain. + * ---------------------------------------------------------------------------------- + */ - SEDS_NODETYPE_MAX + SEDS_NODETYPE_XINCLUDE_PASSTHRU, /**< For Xinclude elements - ignored by this tool, suppresses warnings */ + SEDS_NODETYPE_DESCRIPTION_PASSTHRU, /**< Long description (documentation) continuation/pass-through node */ + SEDS_NODETYPE_DESIGN_PARAMETERS, /**< Opening tag for SEDS design-time parameter sheet (supplements the data sheet) + */ + SEDS_NODETYPE_DEFINE, /**< Equate text name to value during pre-processing */ + SEDS_NODETYPE_INSTANCE_RULE_SET, + SEDS_NODETYPE_INSTANCE_RULE, + SEDS_NODETYPE_INTERFACE_MAP_SET, + SEDS_NODETYPE_INTERFACE_MAP, + SEDS_NODETYPE_PARAMETER_VALUE, + + SEDS_NODETYPE_MAX } seds_nodetype_t; -#define SEDSTAG_IN_RANGE(typ,range) (((uint32_t)(typ)) > SEDS_NODETYPE_##range##_FIRST && ((uint32_t)(typ)) < SEDS_NODETYPE_##range##_LAST) -#define SEDSTAG_IS_SCALAR_DATATYPE(t) SEDSTAG_IN_RANGE(t, SCALAR_DATATYPE) -#define SEDSTAG_IS_COMPOUND_DATATYPE(t) SEDSTAG_IN_RANGE(t, COMPOUND_DATATYPE) -#define SEDSTAG_IS_DYNAMIC_DATATYPE(t) SEDSTAG_IN_RANGE(t, DYNAMIC_DATATYPE) -#define SEDSTAG_IS_NORMAL_DATATYPE(t) (SEDSTAG_IS_SCALAR_DATATYPE(t) || SEDSTAG_IS_COMPOUND_DATATYPE(t)) -#define SEDSTAG_IS_ANY_DATATYPE(t) (SEDSTAG_IS_SCALAR_DATATYPE(t) || SEDSTAG_IS_COMPOUND_DATATYPE(t) || SEDSTAG_IS_DYNAMIC_DATATYPE(t)) -#define SEDSTAG_IS_CONSTRAINT(t) SEDSTAG_IN_RANGE(t, CONSTRAINT) -#define SEDSTAG_IS_ENCODING(t) SEDSTAG_IN_RANGE(t, ENCODING) -#define SEDSTAG_IS_RANGE(t) SEDSTAG_IN_RANGE(t, RANGE) -#define SEDSTAG_IS_INTERFACE(t) SEDSTAG_IN_RANGE(t, INTERFACE) -#define SEDSTAG_IS_CCSDS_STANDARD(t) SEDSTAG_IN_RANGE(t, CCSDS_STANDARD) -#define SEDSTAG_IS_VALID(t) ((t) != SEDS_NODETYPE_UNKNOWN && ((uint32_t)(t)) < SEDS_NODETYPE_MAX) +#define SEDSTAG_IN_RANGE(typ, range) \ + (((uint32_t)(typ)) > SEDS_NODETYPE_##range##_FIRST && ((uint32_t)(typ)) < SEDS_NODETYPE_##range##_LAST) +#define SEDSTAG_IS_SCALAR_DATATYPE(t) SEDSTAG_IN_RANGE(t, SCALAR_DATATYPE) +#define SEDSTAG_IS_COMPOUND_DATATYPE(t) SEDSTAG_IN_RANGE(t, COMPOUND_DATATYPE) +#define SEDSTAG_IS_DYNAMIC_DATATYPE(t) SEDSTAG_IN_RANGE(t, DYNAMIC_DATATYPE) +#define SEDSTAG_IS_NORMAL_DATATYPE(t) (SEDSTAG_IS_SCALAR_DATATYPE(t) || SEDSTAG_IS_COMPOUND_DATATYPE(t)) +#define SEDSTAG_IS_ANY_DATATYPE(t) \ + (SEDSTAG_IS_SCALAR_DATATYPE(t) || SEDSTAG_IS_COMPOUND_DATATYPE(t) || SEDSTAG_IS_DYNAMIC_DATATYPE(t)) +#define SEDSTAG_IS_CONSTRAINT(t) SEDSTAG_IN_RANGE(t, CONSTRAINT) +#define SEDSTAG_IS_ENCODING(t) SEDSTAG_IN_RANGE(t, ENCODING) +#define SEDSTAG_IS_RANGE(t) SEDSTAG_IN_RANGE(t, RANGE) +#define SEDSTAG_IS_INTERFACE(t) SEDSTAG_IN_RANGE(t, INTERFACE) +#define SEDSTAG_IS_CCSDS_STANDARD(t) SEDSTAG_IN_RANGE(t, CCSDS_STANDARD) +#define SEDSTAG_IS_VALID(t) ((t) != SEDS_NODETYPE_UNKNOWN && ((uint32_t)(t)) < SEDS_NODETYPE_MAX) /** * Basic DOM Node object @@ -289,7 +291,7 @@ typedef enum typedef struct { seds_nodetype_t node_type; -} seds_node_t; +} seds_node_t; /** * Push a new node onto the Lua stack. @@ -314,6 +316,4 @@ seds_nodetype_t seds_tree_node_get_type(lua_State *lua, int pos); */ void seds_tree_node_register_globals(lua_State *lua); - -#endif /* _SEDS_TREE_NODE_H_ */ - +#endif /* _SEDS_TREE_NODE_H_ */ diff --git a/tool/src/seds_user_message.c b/tool/src/seds_user_message.c index bc8858e..fa26183 100644 --- a/tool/src/seds_user_message.c +++ b/tool/src/seds_user_message.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_user_message.c * \ingroup tool @@ -30,7 +29,6 @@ * aids the operator should things go wrong. */ - #include #include #include @@ -43,10 +41,8 @@ #include "seds_user_message.h" - static seds_integer_t seds_global_message_counts[SEDS_USER_MESSAGE_MAX]; - /*******************************************************************************/ /* Internal / static Helper Functions */ /* (these are not referenced outside this unit) */ @@ -79,7 +75,7 @@ static int seds_lua_user_message(lua_State *lua) { const char *full_message = luaL_checkstring(lua, 1); const char *filename; - lua_Debug ar; + lua_Debug ar; memset(&ar, 0, sizeof(ar)); lua_getstack(lua, 1, &ar); @@ -90,8 +86,7 @@ static int seds_lua_user_message(lua_State *lua) { ++filename; } - seds_user_message_preformat(lua_tointeger(lua, lua_upvalueindex(1)), - filename, ar.currentline, full_message, NULL); + seds_user_message_preformat(lua_tointeger(lua, lua_upvalueindex(1)), filename, ar.currentline, full_message, NULL); return 0; } @@ -106,30 +101,34 @@ static int seds_lua_user_message(lua_State *lua) * External API function - see full details in prototype. * ------------------------------------------------------ */ -void seds_user_message_preformat(seds_user_message_t msgtype, const char *file, unsigned long line, const char *message1, const char *message2) +void seds_user_message_preformat(seds_user_message_t msgtype, + const char *file, + unsigned long line, + const char *message1, + const char *message2) { const char *msgtag; - switch(msgtype) + switch (msgtype) { - case SEDS_USER_MESSAGE_INFO: - msgtag = "info"; - break; - case SEDS_USER_MESSAGE_WARNING: - msgtag = "warning"; - break; - case SEDS_USER_MESSAGE_ERROR: - msgtag = "error"; - break; - case SEDS_USER_MESSAGE_FATAL: - msgtag = "fatal"; - break; - case SEDS_USER_MESSAGE_DEBUG: - msgtag = "debug"; - break; - default: - msgtag = NULL; - break; + case SEDS_USER_MESSAGE_INFO: + msgtag = "info"; + break; + case SEDS_USER_MESSAGE_WARNING: + msgtag = "warning"; + break; + case SEDS_USER_MESSAGE_ERROR: + msgtag = "error"; + break; + case SEDS_USER_MESSAGE_FATAL: + msgtag = "fatal"; + break; + case SEDS_USER_MESSAGE_DEBUG: + msgtag = "debug"; + break; + default: + msgtag = NULL; + break; } if (msgtag == NULL) @@ -173,9 +172,13 @@ void seds_user_message_preformat(seds_user_message_t msgtype, const char *file, * External API function - see full details in prototype. * ------------------------------------------------------ */ -void seds_user_message_printf(seds_user_message_t msgtype, const char *file, unsigned long line, const char *format, ...) +void seds_user_message_printf(seds_user_message_t msgtype, + const char *file, + unsigned long line, + const char *format, + ...) { - char full_message[256]; + char full_message[256]; va_list va; va_start(va, format); diff --git a/tool/src/seds_user_message.h b/tool/src/seds_user_message.h index 7f544c8..ea72d89 100644 --- a/tool/src/seds_user_message.h +++ b/tool/src/seds_user_message.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_user_message.h * \ingroup tool @@ -43,21 +42,34 @@ * Useful for conditions where there is no valid/useful runtime recovery, e.g. if * a call to malloc() returns NULL, no sense in going on. */ -#define SEDS_ASSERT(condition,message) { if (!(condition)) seds_user_message_preformat(SEDS_USER_MESSAGE_FATAL, __FILE__, __LINE__, "Assertion \'" #condition "\' failed", message); } +#define SEDS_ASSERT(condition, message) \ + { \ + if (!(condition)) \ + seds_user_message_preformat(SEDS_USER_MESSAGE_FATAL, \ + __FILE__, \ + __LINE__, \ + "Assertion \'" #condition "\' failed", \ + message); \ + } /** * Report a message based on the host system "errno" value. * The severity of the message is user-defined. */ -#define SEDS_REPORT_ERRNO(mt,x) { seds_user_message_errno(SEDS_USER_MESSAGE_ ## mt, __FILE__, __LINE__, x); } +#define SEDS_REPORT_ERRNO(mt, x) \ + { \ + seds_user_message_errno(SEDS_USER_MESSAGE_##mt, __FILE__, __LINE__, x); \ + } /** * Assert that a condition is true, trigger a "fatal" error and abort if not. * The reported message to the user will be based on the host system "errno" value. */ -#define SEDS_ASSERT_ERRNO(cond,x) { if (!(cond)) SEDS_REPORT_ERRNO(FATAL, "Assertion \'" #cond "\' failed: " #x); } - - +#define SEDS_ASSERT_ERRNO(cond, x) \ + { \ + if (!(cond)) \ + SEDS_REPORT_ERRNO(FATAL, "Assertion \'" #cond "\' failed: " #x); \ + } /** * Classification of various types of user messages. @@ -90,7 +102,11 @@ typedef enum * @param message1 the complete error message to display * @param message2 additional details or context info about the error (may be NULL if no added details) */ -void seds_user_message_preformat(seds_user_message_t msgtype, const char *file, unsigned long line, const char *message1, const char *message2); +void seds_user_message_preformat(seds_user_message_t msgtype, + const char *file, + unsigned long line, + const char *message1, + const char *message2); /** * Send any message to the user, using a printf-style format specification @@ -104,7 +120,11 @@ void seds_user_message_preformat(seds_user_message_t msgtype, const char *file, * @param line passed through to seds_user_message_impl * @param format printf-style format string */ -void seds_user_message_printf(seds_user_message_t msgtype, const char *file, unsigned long line, const char *format, ...) SEDS_PRINTF(4,5); +void seds_user_message_printf(seds_user_message_t msgtype, + const char *file, + unsigned long line, + const char *format, + ...) SEDS_PRINTF(4, 5); /** * Send an "errno" message to the user @@ -121,7 +141,6 @@ void seds_user_message_printf(seds_user_message_t msgtype, const char *file, uns */ void seds_user_message_errno(seds_user_message_t msgtype, const char *file, unsigned long line, const char *message); - /** * Return the number of times a message of the given type was generated * @@ -138,6 +157,4 @@ seds_integer_t seds_user_message_get_count(seds_user_message_t msgtype); */ void seds_user_message_register_globals(lua_State *lua); - -#endif /* _SEDS_USER_MESSAGE_H_ */ - +#endif /* _SEDS_USER_MESSAGE_H_ */ diff --git a/tool/src/seds_xmlparser.c b/tool/src/seds_xmlparser.c index 40e0927..e4adb53 100644 --- a/tool/src/seds_xmlparser.c +++ b/tool/src/seds_xmlparser.c @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_xmlparser.c * \ingroup tool @@ -56,8 +55,7 @@ * As long as XML_Char type == char type, then this is a pass through * If XML_Char is something different, this macro should provide a conversion */ -#define XML_CHAR_C(x) x - +#define XML_CHAR_C(x) x /* * Define the functions used for basic string ops on XML strings. @@ -67,8 +65,8 @@ * * (Use strcasecmp for case insensitivity during most operations) */ -#define XML_strcmp strcasecmp -#define XML_tolower tolower +#define XML_strcmp strcasecmp +#define XML_tolower tolower /** * Structure to map between character based XML tags and @@ -84,164 +82,163 @@ typedef struct * Mapping table for start tags - comes from the SOIS EDS blue book * Each defined XML tag should have an entry in this table and an associated enum label for that tag */ -static const seds_stringmap_t XML_SEDS_STARTTAG_MAP[] = -{ - - /* Element types defined by SEDS and supported by this toolchain */ - { .tag_name = XML_CHAR_C("ActivitySet"), .tag_id = SEDS_NODETYPE_ACTIVITY_SET }, - { .tag_name = XML_CHAR_C("Activity"), .tag_id = SEDS_NODETYPE_ACTIVITY }, - { .tag_name = XML_CHAR_C("AliasDataType"), .tag_id = SEDS_NODETYPE_ALIAS_DATATYPE }, - { .tag_name = XML_CHAR_C("AlternateSet"), .tag_id = SEDS_NODETYPE_ALTERNATE_SET }, - { .tag_name = XML_CHAR_C("Alternate"), .tag_id = SEDS_NODETYPE_ALTERNATE }, - { .tag_name = XML_CHAR_C("ANDedConditions"), .tag_id = SEDS_NODETYPE_ANDED_CONDITIONS }, - { .tag_name = XML_CHAR_C("Argument"), .tag_id = SEDS_NODETYPE_ARGUMENT }, - { .tag_name = XML_CHAR_C("ArgumentValue"), .tag_id = SEDS_NODETYPE_ARGUMENT_VALUE }, - { .tag_name = XML_CHAR_C("ArrayDataType"), .tag_id = SEDS_NODETYPE_ARRAY_DATATYPE }, - { .tag_name = XML_CHAR_C("ArrayDimensions"), .tag_id = SEDS_NODETYPE_ARRAY_DIMENSIONS }, - { .tag_name = XML_CHAR_C("Assignment"), .tag_id = SEDS_NODETYPE_ASSIGNMENT }, - { .tag_name = XML_CHAR_C("BaseInterfaceSet"), .tag_id = SEDS_NODETYPE_BASE_INTERFACE_SET }, - { .tag_name = XML_CHAR_C("BinaryDataType"), .tag_id = SEDS_NODETYPE_BINARY_DATATYPE }, - { .tag_name = XML_CHAR_C("Body"), .tag_id = SEDS_NODETYPE_BODY }, - { .tag_name = XML_CHAR_C("BooleanDataEncoding"), .tag_id = SEDS_NODETYPE_BOOLEAN_DATA_ENCODING }, - { .tag_name = XML_CHAR_C("BooleanDataType"), .tag_id = SEDS_NODETYPE_BOOLEAN_DATATYPE }, - { .tag_name = XML_CHAR_C("Calibration"), .tag_id = SEDS_NODETYPE_CALIBRATION }, - { .tag_name = XML_CHAR_C("Call"), .tag_id = SEDS_NODETYPE_CALL }, - { .tag_name = XML_CHAR_C("Category"), .tag_id = SEDS_NODETYPE_CATEGORY }, - { .tag_name = XML_CHAR_C("CommandSet"), .tag_id = SEDS_NODETYPE_COMMAND_SET }, - { .tag_name = XML_CHAR_C("Command"), .tag_id = SEDS_NODETYPE_COMMAND }, - { .tag_name = XML_CHAR_C("ComparisonOperator"), .tag_id = SEDS_NODETYPE_COMPARISON_OPERATOR }, - { .tag_name = XML_CHAR_C("ComponentSet"), .tag_id = SEDS_NODETYPE_COMPONENT_SET }, - { .tag_name = XML_CHAR_C("Component"), .tag_id = SEDS_NODETYPE_COMPONENT }, - { .tag_name = XML_CHAR_C("Conditional"), .tag_id = SEDS_NODETYPE_CONDITIONAL }, - { .tag_name = XML_CHAR_C("Condition"), .tag_id = SEDS_NODETYPE_CONDITION }, - { .tag_name = XML_CHAR_C("ConstraintSet"), .tag_id = SEDS_NODETYPE_CONSTRAINT_SET }, - { .tag_name = XML_CHAR_C("ContainerDataType"), .tag_id = SEDS_NODETYPE_CONTAINER_DATATYPE }, - { .tag_name = XML_CHAR_C("DataSheet"), .tag_id = SEDS_NODETYPE_DATASHEET }, - { .tag_name = XML_CHAR_C("DataTypeSet"), .tag_id = SEDS_NODETYPE_DATA_TYPE_SET }, - { .tag_name = XML_CHAR_C("DateValue"), .tag_id = SEDS_NODETYPE_DATE_VALUE }, - { .tag_name = XML_CHAR_C("DeclaredInterfaceSet"), .tag_id = SEDS_NODETYPE_DECLARED_INTERFACE_SET }, - { .tag_name = XML_CHAR_C("Device"), .tag_id = SEDS_NODETYPE_DEVICE }, - { .tag_name = XML_CHAR_C("DimensionList"), .tag_id = SEDS_NODETYPE_DIMENSION_LIST }, - { .tag_name = XML_CHAR_C("Dimension"), .tag_id = SEDS_NODETYPE_DIMENSION }, - { .tag_name = XML_CHAR_C("Do"), .tag_id = SEDS_NODETYPE_DO }, - { .tag_name = XML_CHAR_C("EndAt"), .tag_id = SEDS_NODETYPE_END_AT }, - { .tag_name = XML_CHAR_C("EntryList"), .tag_id = SEDS_NODETYPE_CONTAINER_ENTRY_LIST }, - { .tag_name = XML_CHAR_C("EntryState"), .tag_id = SEDS_NODETYPE_ENTRY_STATE }, - { .tag_name = XML_CHAR_C("Entry"), .tag_id = SEDS_NODETYPE_CONTAINER_ENTRY }, - { .tag_name = XML_CHAR_C("EnumeratedDataType"), .tag_id = SEDS_NODETYPE_ENUMERATION_DATATYPE }, - { .tag_name = XML_CHAR_C("EnumeratedRange"), .tag_id = SEDS_NODETYPE_ENUMERATED_RANGE }, - { .tag_name = XML_CHAR_C("EnumerationList"), .tag_id = SEDS_NODETYPE_ENUMERATION_LIST }, - { .tag_name = XML_CHAR_C("Enumeration"), .tag_id = SEDS_NODETYPE_ENUMERATION_ENTRY }, - { .tag_name = XML_CHAR_C("ErrorControlEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_ERROR_CONTROL_ENTRY }, - { .tag_name = XML_CHAR_C("ExitState"), .tag_id = SEDS_NODETYPE_EXIT_STATE }, - { .tag_name = XML_CHAR_C("FirstOperand"), .tag_id = SEDS_NODETYPE_FIRST_OPERAND }, - { .tag_name = XML_CHAR_C("FixedValueEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_FIXED_VALUE_ENTRY }, - { .tag_name = XML_CHAR_C("FloatDataEncoding"), .tag_id = SEDS_NODETYPE_FLOAT_DATA_ENCODING }, - { .tag_name = XML_CHAR_C("FloatDataType"), .tag_id = SEDS_NODETYPE_FLOAT_DATATYPE }, - { .tag_name = XML_CHAR_C("FloatValue"), .tag_id = SEDS_NODETYPE_FLOAT_VALUE }, - { .tag_name = XML_CHAR_C("GenericTypeMapSet"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE_MAP_SET }, - { .tag_name = XML_CHAR_C("GenericTypeMap"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE_MAP }, - { .tag_name = XML_CHAR_C("GenericTypeSet"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE_SET }, - { .tag_name = XML_CHAR_C("GenericType"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE }, - { .tag_name = XML_CHAR_C("GetActivity"), .tag_id = SEDS_NODETYPE_GET_ACTIVITY }, - { .tag_name = XML_CHAR_C("Guard"), .tag_id = SEDS_NODETYPE_GUARD }, - { .tag_name = XML_CHAR_C("Implementation"), .tag_id = SEDS_NODETYPE_IMPLEMENTATION }, - { .tag_name = XML_CHAR_C("IntegerDataEncoding"), .tag_id = SEDS_NODETYPE_INTEGER_DATA_ENCODING }, - { .tag_name = XML_CHAR_C("IntegerDataType"), .tag_id = SEDS_NODETYPE_INTEGER_DATATYPE }, - { .tag_name = XML_CHAR_C("IntegerValue"), .tag_id = SEDS_NODETYPE_INTEGER_VALUE }, - { .tag_name = XML_CHAR_C("Interface"), .tag_id = SEDS_NODETYPE_INTERFACE }, - { .tag_name = XML_CHAR_C("Iteration"), .tag_id = SEDS_NODETYPE_ITERATION }, - { .tag_name = XML_CHAR_C("Label"), .tag_id = SEDS_NODETYPE_LABEL }, - { .tag_name = XML_CHAR_C("LengthEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_LENGTH_ENTRY }, - { .tag_name = XML_CHAR_C("ListEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_LIST_ENTRY }, - { .tag_name = XML_CHAR_C("LongDescription"), .tag_id = SEDS_NODETYPE_LONG_DESCRIPTION }, - { .tag_name = XML_CHAR_C("MathOperation"), .tag_id = SEDS_NODETYPE_MATH_OPERATION }, - { .tag_name = XML_CHAR_C("Metadata"), .tag_id = SEDS_NODETYPE_METADATA }, - { .tag_name = XML_CHAR_C("MetadataValueSet"), .tag_id = SEDS_NODETYPE_METADATA_VALUE_SET }, - { .tag_name = XML_CHAR_C("MinMaxRange"), .tag_id = SEDS_NODETYPE_MINMAX_RANGE }, - { .tag_name = XML_CHAR_C("NominalRangeSet"), .tag_id = SEDS_NODETYPE_NOMINAL_RANGE_SET }, - { .tag_name = XML_CHAR_C("OnCommandPrimitive"), .tag_id = SEDS_NODETYPE_ON_COMMAND_PRIMITIVE }, - { .tag_name = XML_CHAR_C("OnConditionFalse"), .tag_id = SEDS_NODETYPE_ON_CONDITION_FALSE }, - { .tag_name = XML_CHAR_C("OnConditionTrue"), .tag_id = SEDS_NODETYPE_ON_CONDITION_TRUE }, - { .tag_name = XML_CHAR_C("OnEntry"), .tag_id = SEDS_NODETYPE_ON_ENTRY }, - { .tag_name = XML_CHAR_C("OnExit"), .tag_id = SEDS_NODETYPE_ON_EXIT }, - { .tag_name = XML_CHAR_C("OnParameterPrimitive"), .tag_id = SEDS_NODETYPE_ON_PARAMETER_PRIMITIVE }, - { .tag_name = XML_CHAR_C("OnTimer"), .tag_id = SEDS_NODETYPE_ON_TIMER }, - { .tag_name = XML_CHAR_C("Operator"), .tag_id = SEDS_NODETYPE_OPERATOR }, - { .tag_name = XML_CHAR_C("ORedConditions"), .tag_id = SEDS_NODETYPE_ORED_CONDITIONS }, - { .tag_name = XML_CHAR_C("OverArray"), .tag_id = SEDS_NODETYPE_OVER_ARRAY }, - { .tag_name = XML_CHAR_C("PackageFile"), .tag_id = SEDS_NODETYPE_PACKAGEFILE }, - { .tag_name = XML_CHAR_C("Package"), .tag_id = SEDS_NODETYPE_PACKAGE }, - { .tag_name = XML_CHAR_C("PaddingEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_PADDING_ENTRY }, - { .tag_name = XML_CHAR_C("ParameterActivityMapSet"),.tag_id = SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP_SET }, - { .tag_name = XML_CHAR_C("ParameterActivityMap"), .tag_id = SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP }, - { .tag_name = XML_CHAR_C("ParameterMapSet"), .tag_id = SEDS_NODETYPE_PARAMETER_MAP_SET }, - { .tag_name = XML_CHAR_C("ParameterMap"), .tag_id = SEDS_NODETYPE_PARAMETER_MAP }, - { .tag_name = XML_CHAR_C("ParameterSet"), .tag_id = SEDS_NODETYPE_PARAMETER_SET }, - { .tag_name = XML_CHAR_C("Parameter"), .tag_id = SEDS_NODETYPE_PARAMETER }, - { .tag_name = XML_CHAR_C("PolynomialCalibrator"), .tag_id = SEDS_NODETYPE_POLYNOMIAL_CALIBRATOR }, - { .tag_name = XML_CHAR_C("PrecisionRange"), .tag_id = SEDS_NODETYPE_PRECISION_RANGE }, - { .tag_name = XML_CHAR_C("PresentWhen"), .tag_id = SEDS_NODETYPE_PRESENT_WHEN }, - { .tag_name = XML_CHAR_C("ProvidedInterfaceSet"), .tag_id = SEDS_NODETYPE_PROVIDED_INTERFACE_SET }, - { .tag_name = XML_CHAR_C("Provided"), .tag_id = SEDS_NODETYPE_PROVIDED }, - { .tag_name = XML_CHAR_C("RangeConstraint"), .tag_id = SEDS_NODETYPE_RANGE_CONSTRAINT }, - { .tag_name = XML_CHAR_C("RangeSet"), .tag_id = SEDS_NODETYPE_RANGE_SET }, - { .tag_name = XML_CHAR_C("Range"), .tag_id = SEDS_NODETYPE_RANGE }, - { .tag_name = XML_CHAR_C("RequiredInterfaceSet"), .tag_id = SEDS_NODETYPE_REQUIRED_INTERFACE_SET }, - { .tag_name = XML_CHAR_C("Required"), .tag_id = SEDS_NODETYPE_REQUIRED }, - { .tag_name = XML_CHAR_C("SecondOperand"), .tag_id = SEDS_NODETYPE_SECOND_OPERAND }, - { .tag_name = XML_CHAR_C("Semantics"), .tag_id = SEDS_NODETYPE_SEMANTICS }, - { .tag_name = XML_CHAR_C("SemanticsTerm"), .tag_id = SEDS_NODETYPE_SEMANTICS_TERM }, - { .tag_name = XML_CHAR_C("SendCommandPrimitive"), .tag_id = SEDS_NODETYPE_SEND_COMMAND_PRIMITIVE }, - { .tag_name = XML_CHAR_C("SendParameterPrimitive"), .tag_id = SEDS_NODETYPE_SEND_PARAMETER_PRIMITIVE}, - { .tag_name = XML_CHAR_C("SetActivityOnly"), .tag_id = SEDS_NODETYPE_SET_ACTIVITY_ONLY }, - { .tag_name = XML_CHAR_C("SetActivity"), .tag_id = SEDS_NODETYPE_SET_ACTIVITY }, - { .tag_name = XML_CHAR_C("SplineCalibrator"), .tag_id = SEDS_NODETYPE_SPLINE_CALIBRATOR }, - { .tag_name = XML_CHAR_C("SplinePoint"), .tag_id = SEDS_NODETYPE_SPLINE_POINT }, - { .tag_name = XML_CHAR_C("StartAt"), .tag_id = SEDS_NODETYPE_START_AT }, - { .tag_name = XML_CHAR_C("StateMachineSet"), .tag_id = SEDS_NODETYPE_STATE_MACHINE_SET }, - { .tag_name = XML_CHAR_C("StateMachine"), .tag_id = SEDS_NODETYPE_STATE_MACHINE }, - { .tag_name = XML_CHAR_C("State"), .tag_id = SEDS_NODETYPE_STATE }, - { .tag_name = XML_CHAR_C("Step"), .tag_id = SEDS_NODETYPE_STEP }, - { .tag_name = XML_CHAR_C("StringDataEncoding"), .tag_id = SEDS_NODETYPE_STRING_DATA_ENCODING }, - { .tag_name = XML_CHAR_C("StringDataType"), .tag_id = SEDS_NODETYPE_STRING_DATATYPE }, - { .tag_name = XML_CHAR_C("StringValue"), .tag_id = SEDS_NODETYPE_STRING_VALUE }, - { .tag_name = XML_CHAR_C("SubRangeDataType"), .tag_id = SEDS_NODETYPE_SUBRANGE_DATATYPE }, - { .tag_name = XML_CHAR_C("Term"), .tag_id = SEDS_NODETYPE_POLYNOMIAL_TERM }, - { .tag_name = XML_CHAR_C("TrailerEntryList"), .tag_id = SEDS_NODETYPE_CONTAINER_TRAILER_ENTRY_LIST }, - { .tag_name = XML_CHAR_C("Transition"), .tag_id = SEDS_NODETYPE_TRANSITION }, - { .tag_name = XML_CHAR_C("TypeCondition"), .tag_id = SEDS_NODETYPE_TYPE_CONDITION }, - { .tag_name = XML_CHAR_C("TypeConstraint"), .tag_id = SEDS_NODETYPE_TYPE_CONSTRAINT }, - { .tag_name = XML_CHAR_C("TypeOperand"), .tag_id = SEDS_NODETYPE_TYPE_OPERAND }, - { .tag_name = XML_CHAR_C("ValidRange"), .tag_id = SEDS_NODETYPE_VALID_RANGE }, - { .tag_name = XML_CHAR_C("ValueConstraint"), .tag_id = SEDS_NODETYPE_VALUE_CONSTRAINT }, - { .tag_name = XML_CHAR_C("Value"), .tag_id = SEDS_NODETYPE_VALUE }, - { .tag_name = XML_CHAR_C("VariableRef"), .tag_id = SEDS_NODETYPE_VARIABLE_REF }, - { .tag_name = XML_CHAR_C("VariableSet"), .tag_id = SEDS_NODETYPE_VARIABLE_SET }, - { .tag_name = XML_CHAR_C("Variable"), .tag_id = SEDS_NODETYPE_VARIABLE }, - - /* catch instances of xi:include, these are ignored by this tool but do not generate warnings */ - { .tag_name = XML_CHAR_C("xi:include"), .tag_id = SEDS_NODETYPE_XINCLUDE_PASSTHRU }, - - /* Extra Element types _not_ defined by SEDS that this toolchain supports (SEDS supplement) */ - { .tag_name = XML_CHAR_C("DesignParameters"), .tag_id = SEDS_NODETYPE_DESIGN_PARAMETERS }, - { .tag_name = XML_CHAR_C("Define"), .tag_id = SEDS_NODETYPE_DEFINE }, - { .tag_name = XML_CHAR_C("InstanceRuleSet"), .tag_id = SEDS_NODETYPE_INSTANCE_RULE_SET }, - { .tag_name = XML_CHAR_C("InstanceRule"), .tag_id = SEDS_NODETYPE_INSTANCE_RULE }, - { .tag_name = XML_CHAR_C("InterfaceMapSet"), .tag_id = SEDS_NODETYPE_INTERFACE_MAP_SET }, - { .tag_name = XML_CHAR_C("InterfaceMap"), .tag_id = SEDS_NODETYPE_INTERFACE_MAP }, - { .tag_name = XML_CHAR_C("ParameterValue"), .tag_id = SEDS_NODETYPE_PARAMETER_VALUE }, - { .tag_name = XML_CHAR_C("DeclaredInterface"), .tag_id = SEDS_NODETYPE_DECLARED_INTERFACE }, - { .tag_name = XML_CHAR_C("ProvidedInterface"), .tag_id = SEDS_NODETYPE_PROVIDED_INTERFACE }, - { .tag_name = XML_CHAR_C("RequiredInterface"), .tag_id = SEDS_NODETYPE_REQUIRED_INTERFACE }, - - /* these are variations of the constraint elements that appear within PresentWhen elements */ - { .tag_name = XML_CHAR_C("PresenceTypeConstraint"), .tag_id = SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT }, - { .tag_name = XML_CHAR_C("PresenceRangeConstraint"), .tag_id = SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT }, - { .tag_name = XML_CHAR_C("PresenceValueConstraint"), .tag_id = SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT }, - - /* Keep NULL tag last - absolute end of list marker */ - { .tag_name = NULL, .tag_id = SEDS_NODETYPE_UNKNOWN } +static const seds_stringmap_t XML_SEDS_STARTTAG_MAP[] = { + + /* Element types defined by SEDS and supported by this toolchain */ + { .tag_name = XML_CHAR_C("ActivitySet"), .tag_id = SEDS_NODETYPE_ACTIVITY_SET }, + { .tag_name = XML_CHAR_C("Activity"), .tag_id = SEDS_NODETYPE_ACTIVITY }, + { .tag_name = XML_CHAR_C("AliasDataType"), .tag_id = SEDS_NODETYPE_ALIAS_DATATYPE }, + { .tag_name = XML_CHAR_C("AlternateSet"), .tag_id = SEDS_NODETYPE_ALTERNATE_SET }, + { .tag_name = XML_CHAR_C("Alternate"), .tag_id = SEDS_NODETYPE_ALTERNATE }, + { .tag_name = XML_CHAR_C("ANDedConditions"), .tag_id = SEDS_NODETYPE_ANDED_CONDITIONS }, + { .tag_name = XML_CHAR_C("Argument"), .tag_id = SEDS_NODETYPE_ARGUMENT }, + { .tag_name = XML_CHAR_C("ArgumentValue"), .tag_id = SEDS_NODETYPE_ARGUMENT_VALUE }, + { .tag_name = XML_CHAR_C("ArrayDataType"), .tag_id = SEDS_NODETYPE_ARRAY_DATATYPE }, + { .tag_name = XML_CHAR_C("ArrayDimensions"), .tag_id = SEDS_NODETYPE_ARRAY_DIMENSIONS }, + { .tag_name = XML_CHAR_C("Assignment"), .tag_id = SEDS_NODETYPE_ASSIGNMENT }, + { .tag_name = XML_CHAR_C("BaseInterfaceSet"), .tag_id = SEDS_NODETYPE_BASE_INTERFACE_SET }, + { .tag_name = XML_CHAR_C("BinaryDataType"), .tag_id = SEDS_NODETYPE_BINARY_DATATYPE }, + { .tag_name = XML_CHAR_C("Body"), .tag_id = SEDS_NODETYPE_BODY }, + { .tag_name = XML_CHAR_C("BooleanDataEncoding"), .tag_id = SEDS_NODETYPE_BOOLEAN_DATA_ENCODING }, + { .tag_name = XML_CHAR_C("BooleanDataType"), .tag_id = SEDS_NODETYPE_BOOLEAN_DATATYPE }, + { .tag_name = XML_CHAR_C("Calibration"), .tag_id = SEDS_NODETYPE_CALIBRATION }, + { .tag_name = XML_CHAR_C("Call"), .tag_id = SEDS_NODETYPE_CALL }, + { .tag_name = XML_CHAR_C("Category"), .tag_id = SEDS_NODETYPE_CATEGORY }, + { .tag_name = XML_CHAR_C("CommandSet"), .tag_id = SEDS_NODETYPE_COMMAND_SET }, + { .tag_name = XML_CHAR_C("Command"), .tag_id = SEDS_NODETYPE_COMMAND }, + { .tag_name = XML_CHAR_C("ComparisonOperator"), .tag_id = SEDS_NODETYPE_COMPARISON_OPERATOR }, + { .tag_name = XML_CHAR_C("ComponentSet"), .tag_id = SEDS_NODETYPE_COMPONENT_SET }, + { .tag_name = XML_CHAR_C("Component"), .tag_id = SEDS_NODETYPE_COMPONENT }, + { .tag_name = XML_CHAR_C("Conditional"), .tag_id = SEDS_NODETYPE_CONDITIONAL }, + { .tag_name = XML_CHAR_C("Condition"), .tag_id = SEDS_NODETYPE_CONDITION }, + { .tag_name = XML_CHAR_C("ConstraintSet"), .tag_id = SEDS_NODETYPE_CONSTRAINT_SET }, + { .tag_name = XML_CHAR_C("ContainerDataType"), .tag_id = SEDS_NODETYPE_CONTAINER_DATATYPE }, + { .tag_name = XML_CHAR_C("DataSheet"), .tag_id = SEDS_NODETYPE_DATASHEET }, + { .tag_name = XML_CHAR_C("DataTypeSet"), .tag_id = SEDS_NODETYPE_DATA_TYPE_SET }, + { .tag_name = XML_CHAR_C("DateValue"), .tag_id = SEDS_NODETYPE_DATE_VALUE }, + { .tag_name = XML_CHAR_C("DeclaredInterfaceSet"), .tag_id = SEDS_NODETYPE_DECLARED_INTERFACE_SET }, + { .tag_name = XML_CHAR_C("Device"), .tag_id = SEDS_NODETYPE_DEVICE }, + { .tag_name = XML_CHAR_C("DimensionList"), .tag_id = SEDS_NODETYPE_DIMENSION_LIST }, + { .tag_name = XML_CHAR_C("Dimension"), .tag_id = SEDS_NODETYPE_DIMENSION }, + { .tag_name = XML_CHAR_C("Do"), .tag_id = SEDS_NODETYPE_DO }, + { .tag_name = XML_CHAR_C("EndAt"), .tag_id = SEDS_NODETYPE_END_AT }, + { .tag_name = XML_CHAR_C("EntryList"), .tag_id = SEDS_NODETYPE_CONTAINER_ENTRY_LIST }, + { .tag_name = XML_CHAR_C("EntryState"), .tag_id = SEDS_NODETYPE_ENTRY_STATE }, + { .tag_name = XML_CHAR_C("Entry"), .tag_id = SEDS_NODETYPE_CONTAINER_ENTRY }, + { .tag_name = XML_CHAR_C("EnumeratedDataType"), .tag_id = SEDS_NODETYPE_ENUMERATION_DATATYPE }, + { .tag_name = XML_CHAR_C("EnumeratedRange"), .tag_id = SEDS_NODETYPE_ENUMERATED_RANGE }, + { .tag_name = XML_CHAR_C("EnumerationList"), .tag_id = SEDS_NODETYPE_ENUMERATION_LIST }, + { .tag_name = XML_CHAR_C("Enumeration"), .tag_id = SEDS_NODETYPE_ENUMERATION_ENTRY }, + { .tag_name = XML_CHAR_C("ErrorControlEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_ERROR_CONTROL_ENTRY }, + { .tag_name = XML_CHAR_C("ExitState"), .tag_id = SEDS_NODETYPE_EXIT_STATE }, + { .tag_name = XML_CHAR_C("FirstOperand"), .tag_id = SEDS_NODETYPE_FIRST_OPERAND }, + { .tag_name = XML_CHAR_C("FixedValueEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_FIXED_VALUE_ENTRY }, + { .tag_name = XML_CHAR_C("FloatDataEncoding"), .tag_id = SEDS_NODETYPE_FLOAT_DATA_ENCODING }, + { .tag_name = XML_CHAR_C("FloatDataType"), .tag_id = SEDS_NODETYPE_FLOAT_DATATYPE }, + { .tag_name = XML_CHAR_C("FloatValue"), .tag_id = SEDS_NODETYPE_FLOAT_VALUE }, + { .tag_name = XML_CHAR_C("GenericTypeMapSet"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE_MAP_SET }, + { .tag_name = XML_CHAR_C("GenericTypeMap"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE_MAP }, + { .tag_name = XML_CHAR_C("GenericTypeSet"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE_SET }, + { .tag_name = XML_CHAR_C("GenericType"), .tag_id = SEDS_NODETYPE_GENERIC_TYPE }, + { .tag_name = XML_CHAR_C("GetActivity"), .tag_id = SEDS_NODETYPE_GET_ACTIVITY }, + { .tag_name = XML_CHAR_C("Guard"), .tag_id = SEDS_NODETYPE_GUARD }, + { .tag_name = XML_CHAR_C("Implementation"), .tag_id = SEDS_NODETYPE_IMPLEMENTATION }, + { .tag_name = XML_CHAR_C("IntegerDataEncoding"), .tag_id = SEDS_NODETYPE_INTEGER_DATA_ENCODING }, + { .tag_name = XML_CHAR_C("IntegerDataType"), .tag_id = SEDS_NODETYPE_INTEGER_DATATYPE }, + { .tag_name = XML_CHAR_C("IntegerValue"), .tag_id = SEDS_NODETYPE_INTEGER_VALUE }, + { .tag_name = XML_CHAR_C("Interface"), .tag_id = SEDS_NODETYPE_INTERFACE }, + { .tag_name = XML_CHAR_C("Iteration"), .tag_id = SEDS_NODETYPE_ITERATION }, + { .tag_name = XML_CHAR_C("Label"), .tag_id = SEDS_NODETYPE_LABEL }, + { .tag_name = XML_CHAR_C("LengthEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_LENGTH_ENTRY }, + { .tag_name = XML_CHAR_C("ListEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_LIST_ENTRY }, + { .tag_name = XML_CHAR_C("LongDescription"), .tag_id = SEDS_NODETYPE_LONG_DESCRIPTION }, + { .tag_name = XML_CHAR_C("MathOperation"), .tag_id = SEDS_NODETYPE_MATH_OPERATION }, + { .tag_name = XML_CHAR_C("Metadata"), .tag_id = SEDS_NODETYPE_METADATA }, + { .tag_name = XML_CHAR_C("MetadataValueSet"), .tag_id = SEDS_NODETYPE_METADATA_VALUE_SET }, + { .tag_name = XML_CHAR_C("MinMaxRange"), .tag_id = SEDS_NODETYPE_MINMAX_RANGE }, + { .tag_name = XML_CHAR_C("NominalRangeSet"), .tag_id = SEDS_NODETYPE_NOMINAL_RANGE_SET }, + { .tag_name = XML_CHAR_C("OnCommandPrimitive"), .tag_id = SEDS_NODETYPE_ON_COMMAND_PRIMITIVE }, + { .tag_name = XML_CHAR_C("OnConditionFalse"), .tag_id = SEDS_NODETYPE_ON_CONDITION_FALSE }, + { .tag_name = XML_CHAR_C("OnConditionTrue"), .tag_id = SEDS_NODETYPE_ON_CONDITION_TRUE }, + { .tag_name = XML_CHAR_C("OnEntry"), .tag_id = SEDS_NODETYPE_ON_ENTRY }, + { .tag_name = XML_CHAR_C("OnExit"), .tag_id = SEDS_NODETYPE_ON_EXIT }, + { .tag_name = XML_CHAR_C("OnParameterPrimitive"), .tag_id = SEDS_NODETYPE_ON_PARAMETER_PRIMITIVE }, + { .tag_name = XML_CHAR_C("OnTimer"), .tag_id = SEDS_NODETYPE_ON_TIMER }, + { .tag_name = XML_CHAR_C("Operator"), .tag_id = SEDS_NODETYPE_OPERATOR }, + { .tag_name = XML_CHAR_C("ORedConditions"), .tag_id = SEDS_NODETYPE_ORED_CONDITIONS }, + { .tag_name = XML_CHAR_C("OverArray"), .tag_id = SEDS_NODETYPE_OVER_ARRAY }, + { .tag_name = XML_CHAR_C("PackageFile"), .tag_id = SEDS_NODETYPE_PACKAGEFILE }, + { .tag_name = XML_CHAR_C("Package"), .tag_id = SEDS_NODETYPE_PACKAGE }, + { .tag_name = XML_CHAR_C("PaddingEntry"), .tag_id = SEDS_NODETYPE_CONTAINER_PADDING_ENTRY }, + { .tag_name = XML_CHAR_C("ParameterActivityMapSet"), .tag_id = SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP_SET }, + { .tag_name = XML_CHAR_C("ParameterActivityMap"), .tag_id = SEDS_NODETYPE_PARAMETER_ACTIVITY_MAP }, + { .tag_name = XML_CHAR_C("ParameterMapSet"), .tag_id = SEDS_NODETYPE_PARAMETER_MAP_SET }, + { .tag_name = XML_CHAR_C("ParameterMap"), .tag_id = SEDS_NODETYPE_PARAMETER_MAP }, + { .tag_name = XML_CHAR_C("ParameterSet"), .tag_id = SEDS_NODETYPE_PARAMETER_SET }, + { .tag_name = XML_CHAR_C("Parameter"), .tag_id = SEDS_NODETYPE_PARAMETER }, + { .tag_name = XML_CHAR_C("PolynomialCalibrator"), .tag_id = SEDS_NODETYPE_POLYNOMIAL_CALIBRATOR }, + { .tag_name = XML_CHAR_C("PrecisionRange"), .tag_id = SEDS_NODETYPE_PRECISION_RANGE }, + { .tag_name = XML_CHAR_C("PresentWhen"), .tag_id = SEDS_NODETYPE_PRESENT_WHEN }, + { .tag_name = XML_CHAR_C("ProvidedInterfaceSet"), .tag_id = SEDS_NODETYPE_PROVIDED_INTERFACE_SET }, + { .tag_name = XML_CHAR_C("Provided"), .tag_id = SEDS_NODETYPE_PROVIDED }, + { .tag_name = XML_CHAR_C("RangeConstraint"), .tag_id = SEDS_NODETYPE_RANGE_CONSTRAINT }, + { .tag_name = XML_CHAR_C("RangeSet"), .tag_id = SEDS_NODETYPE_RANGE_SET }, + { .tag_name = XML_CHAR_C("Range"), .tag_id = SEDS_NODETYPE_RANGE }, + { .tag_name = XML_CHAR_C("RequiredInterfaceSet"), .tag_id = SEDS_NODETYPE_REQUIRED_INTERFACE_SET }, + { .tag_name = XML_CHAR_C("Required"), .tag_id = SEDS_NODETYPE_REQUIRED }, + { .tag_name = XML_CHAR_C("SecondOperand"), .tag_id = SEDS_NODETYPE_SECOND_OPERAND }, + { .tag_name = XML_CHAR_C("Semantics"), .tag_id = SEDS_NODETYPE_SEMANTICS }, + { .tag_name = XML_CHAR_C("SemanticsTerm"), .tag_id = SEDS_NODETYPE_SEMANTICS_TERM }, + { .tag_name = XML_CHAR_C("SendCommandPrimitive"), .tag_id = SEDS_NODETYPE_SEND_COMMAND_PRIMITIVE }, + { .tag_name = XML_CHAR_C("SendParameterPrimitive"), .tag_id = SEDS_NODETYPE_SEND_PARAMETER_PRIMITIVE }, + { .tag_name = XML_CHAR_C("SetActivityOnly"), .tag_id = SEDS_NODETYPE_SET_ACTIVITY_ONLY }, + { .tag_name = XML_CHAR_C("SetActivity"), .tag_id = SEDS_NODETYPE_SET_ACTIVITY }, + { .tag_name = XML_CHAR_C("SplineCalibrator"), .tag_id = SEDS_NODETYPE_SPLINE_CALIBRATOR }, + { .tag_name = XML_CHAR_C("SplinePoint"), .tag_id = SEDS_NODETYPE_SPLINE_POINT }, + { .tag_name = XML_CHAR_C("StartAt"), .tag_id = SEDS_NODETYPE_START_AT }, + { .tag_name = XML_CHAR_C("StateMachineSet"), .tag_id = SEDS_NODETYPE_STATE_MACHINE_SET }, + { .tag_name = XML_CHAR_C("StateMachine"), .tag_id = SEDS_NODETYPE_STATE_MACHINE }, + { .tag_name = XML_CHAR_C("State"), .tag_id = SEDS_NODETYPE_STATE }, + { .tag_name = XML_CHAR_C("Step"), .tag_id = SEDS_NODETYPE_STEP }, + { .tag_name = XML_CHAR_C("StringDataEncoding"), .tag_id = SEDS_NODETYPE_STRING_DATA_ENCODING }, + { .tag_name = XML_CHAR_C("StringDataType"), .tag_id = SEDS_NODETYPE_STRING_DATATYPE }, + { .tag_name = XML_CHAR_C("StringValue"), .tag_id = SEDS_NODETYPE_STRING_VALUE }, + { .tag_name = XML_CHAR_C("SubRangeDataType"), .tag_id = SEDS_NODETYPE_SUBRANGE_DATATYPE }, + { .tag_name = XML_CHAR_C("Term"), .tag_id = SEDS_NODETYPE_POLYNOMIAL_TERM }, + { .tag_name = XML_CHAR_C("TrailerEntryList"), .tag_id = SEDS_NODETYPE_CONTAINER_TRAILER_ENTRY_LIST }, + { .tag_name = XML_CHAR_C("Transition"), .tag_id = SEDS_NODETYPE_TRANSITION }, + { .tag_name = XML_CHAR_C("TypeCondition"), .tag_id = SEDS_NODETYPE_TYPE_CONDITION }, + { .tag_name = XML_CHAR_C("TypeConstraint"), .tag_id = SEDS_NODETYPE_TYPE_CONSTRAINT }, + { .tag_name = XML_CHAR_C("TypeOperand"), .tag_id = SEDS_NODETYPE_TYPE_OPERAND }, + { .tag_name = XML_CHAR_C("ValidRange"), .tag_id = SEDS_NODETYPE_VALID_RANGE }, + { .tag_name = XML_CHAR_C("ValueConstraint"), .tag_id = SEDS_NODETYPE_VALUE_CONSTRAINT }, + { .tag_name = XML_CHAR_C("Value"), .tag_id = SEDS_NODETYPE_VALUE }, + { .tag_name = XML_CHAR_C("VariableRef"), .tag_id = SEDS_NODETYPE_VARIABLE_REF }, + { .tag_name = XML_CHAR_C("VariableSet"), .tag_id = SEDS_NODETYPE_VARIABLE_SET }, + { .tag_name = XML_CHAR_C("Variable"), .tag_id = SEDS_NODETYPE_VARIABLE }, + + /* catch instances of xi:include, these are ignored by this tool but do not generate warnings */ + { .tag_name = XML_CHAR_C("xi:include"), .tag_id = SEDS_NODETYPE_XINCLUDE_PASSTHRU }, + + /* Extra Element types _not_ defined by SEDS that this toolchain supports (SEDS supplement) */ + { .tag_name = XML_CHAR_C("DesignParameters"), .tag_id = SEDS_NODETYPE_DESIGN_PARAMETERS }, + { .tag_name = XML_CHAR_C("Define"), .tag_id = SEDS_NODETYPE_DEFINE }, + { .tag_name = XML_CHAR_C("InstanceRuleSet"), .tag_id = SEDS_NODETYPE_INSTANCE_RULE_SET }, + { .tag_name = XML_CHAR_C("InstanceRule"), .tag_id = SEDS_NODETYPE_INSTANCE_RULE }, + { .tag_name = XML_CHAR_C("InterfaceMapSet"), .tag_id = SEDS_NODETYPE_INTERFACE_MAP_SET }, + { .tag_name = XML_CHAR_C("InterfaceMap"), .tag_id = SEDS_NODETYPE_INTERFACE_MAP }, + { .tag_name = XML_CHAR_C("ParameterValue"), .tag_id = SEDS_NODETYPE_PARAMETER_VALUE }, + { .tag_name = XML_CHAR_C("DeclaredInterface"), .tag_id = SEDS_NODETYPE_DECLARED_INTERFACE }, + { .tag_name = XML_CHAR_C("ProvidedInterface"), .tag_id = SEDS_NODETYPE_PROVIDED_INTERFACE }, + { .tag_name = XML_CHAR_C("RequiredInterface"), .tag_id = SEDS_NODETYPE_REQUIRED_INTERFACE }, + + /* these are variations of the constraint elements that appear within PresentWhen elements */ + { .tag_name = XML_CHAR_C("PresenceTypeConstraint"), .tag_id = SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT }, + { .tag_name = XML_CHAR_C("PresenceRangeConstraint"), .tag_id = SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT }, + { .tag_name = XML_CHAR_C("PresenceValueConstraint"), .tag_id = SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT }, + + /* Keep NULL tag last - absolute end of list marker */ + { .tag_name = NULL, .tag_id = SEDS_NODETYPE_UNKNOWN } }; /** @@ -252,16 +249,14 @@ static const seds_stringmap_t XML_SEDS_STARTTAG_MAP[] = typedef struct { XML_Parser xmlp; - FILE *fp; + FILE *fp; } seds_parser_t; - /*******************************************************************************/ /* Internal / static Helper Functions */ /* (these are not referenced outside this unit) */ /*******************************************************************************/ - /** * Helper function to identify an element in an XML file. * @@ -273,14 +268,13 @@ typedef struct static seds_nodetype_t seds_xmlparser_identify_element(seds_nodetype_t parent_node_type, const XML_Char *str) { const seds_stringmap_t *mapptr; - seds_nodetype_t node_type; + seds_nodetype_t node_type; /* if the parent was any "passthru" type, then consider the child to also * be that same type. This can be used to ignore entire subtrees, for * unimplemented features */ - if (parent_node_type == SEDS_NODETYPE_UNKNOWN || - parent_node_type == SEDS_NODETYPE_XINCLUDE_PASSTHRU || - parent_node_type == SEDS_NODETYPE_DESCRIPTION_PASSTHRU) + if (parent_node_type == SEDS_NODETYPE_UNKNOWN || parent_node_type == SEDS_NODETYPE_XINCLUDE_PASSTHRU + || parent_node_type == SEDS_NODETYPE_DESCRIPTION_PASSTHRU) { node_type = parent_node_type; } @@ -320,45 +314,45 @@ static seds_nodetype_t seds_xmlparser_identify_element(seds_nodetype_t parent_no * there are different sets of required attributes and the attribute interpretation * varies. */ - switch(parent_node_type) + switch (parent_node_type) { - case SEDS_NODETYPE_DECLARED_INTERFACE_SET: - node_type = SEDS_NODETYPE_DECLARED_INTERFACE; - break; - case SEDS_NODETYPE_REQUIRED_INTERFACE_SET: - node_type = SEDS_NODETYPE_REQUIRED_INTERFACE; - break; - case SEDS_NODETYPE_PROVIDED_INTERFACE_SET: - node_type = SEDS_NODETYPE_PROVIDED_INTERFACE; - break; - case SEDS_NODETYPE_BASE_INTERFACE_SET: - node_type = SEDS_NODETYPE_BASE_INTERFACE; - break; - default: - break; + case SEDS_NODETYPE_DECLARED_INTERFACE_SET: + node_type = SEDS_NODETYPE_DECLARED_INTERFACE; + break; + case SEDS_NODETYPE_REQUIRED_INTERFACE_SET: + node_type = SEDS_NODETYPE_REQUIRED_INTERFACE; + break; + case SEDS_NODETYPE_PROVIDED_INTERFACE_SET: + node_type = SEDS_NODETYPE_PROVIDED_INTERFACE; + break; + case SEDS_NODETYPE_BASE_INTERFACE_SET: + node_type = SEDS_NODETYPE_BASE_INTERFACE; + break; + default: + break; } } - /* + /* * The same constraint XML elements are also used within PresentWhen, but these * need to be handled differently from other constraint elements because they are - * used for a different purpose in this context + * used for a different purpose in this context */ if (parent_node_type == SEDS_NODETYPE_PRESENT_WHEN) { - switch(node_type) + switch (node_type) { - case SEDS_NODETYPE_VALUE_CONSTRAINT: - node_type = SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT; - break; - case SEDS_NODETYPE_TYPE_CONSTRAINT: - node_type = SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT; - break; - case SEDS_NODETYPE_RANGE_CONSTRAINT: - node_type = SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT; - break; - default: - break; + case SEDS_NODETYPE_VALUE_CONSTRAINT: + node_type = SEDS_NODETYPE_PRESENCE_VALUE_CONSTRAINT; + break; + case SEDS_NODETYPE_TYPE_CONSTRAINT: + node_type = SEDS_NODETYPE_PRESENCE_TYPE_CONSTRAINT; + break; + case SEDS_NODETYPE_RANGE_CONSTRAINT: + node_type = SEDS_NODETYPE_PRESENCE_RANGE_CONSTRAINT; + break; + default: + break; } } @@ -382,14 +376,14 @@ static seds_nodetype_t seds_xmlparser_identify_element(seds_nodetype_t parent_no */ static void seds_xmlparser_message(lua_State *lua, seds_user_message_t msgtype) { - int top_start = lua_gettop(lua); /* top of stack should be the user supplied message */ - const char *element; - const char *file; + int top_start = lua_gettop(lua); /* top of stack should be the user supplied message */ + const char *element; + const char *file; unsigned long line; element = NULL; - file = NULL; - line = 0; + file = NULL; + line = 0; if (luaL_checkudata(lua, top_start - 1, "seds_node")) { @@ -397,8 +391,8 @@ static void seds_xmlparser_message(lua_State *lua, seds_user_message_t msgtype) lua_getfield(lua, top_start - 1, "xml_linenum"); lua_getfield(lua, top_start - 1, "xml_element"); - file = lua_tostring(lua, -3); - line = lua_tointeger(lua, -2); + file = lua_tostring(lua, -3); + line = lua_tointeger(lua, -2); element = lua_tostring(lua, -1); } @@ -440,17 +434,17 @@ static int seds_xmlparser_recreate_xml(lua_State *lua) lua_pushnil(lua); /* - * Note - lua_next pops 1 item from the stack, interpreted as the prev table index, nil to start. - * It then pushes 2 items back on - the next table index, and the corresponding value. - * At the end of the table it pushes nothing back on, but still pops the last index. - */ + * Note - lua_next pops 1 item from the stack, interpreted as the prev table index, nil to start. + * It then pushes 2 items back on - the next table index, and the corresponding value. + * At the end of the table it pushes nothing back on, but still pops the last index. + */ while (lua_next(lua, 2)) { /* - * The item at the top should be the value, the item at -1 should be the key. - * because the next code does multiple pushes, it is easier to capture the stack - * number as an absolute position rather than using offsets. - */ + * The item at the top should be the value, the item at -1 should be the key. + * because the next code does multiple pushes, it is easier to capture the stack + * number as an absolute position rather than using offsets. + */ tbl_val_idx = lua_gettop(lua); if (lua_type(lua, tbl_val_idx - 1) == LUA_TSTRING) { @@ -462,9 +456,9 @@ static int seds_xmlparser_recreate_xml(lua_State *lua) lua_concat(lua, 5); /* - * This puts the concatenated value immediately below the table index. - * Note that each iteration through this code adds 1 to the stack. - */ + * This puts the concatenated value immediately below the table index. + * Note that each iteration through this code adds 1 to the stack. + */ lua_insert(lua, tbl_val_idx - 2); } lua_pop(lua, 1); @@ -526,11 +520,11 @@ static int seds_xmlparser_recreate_xml(lua_State *lua) */ static int seds_xmlparser_breakup_namespace(lua_State *lua) { - int stack_top = lua_gettop(lua); + int stack_top = lua_gettop(lua); const char *nspace; const char *sep; - while(1) + while (1) { if (luaL_checkudata(lua, 1, "seds_node") == NULL) { @@ -543,7 +537,7 @@ static int seds_xmlparser_breakup_namespace(lua_State *lua) } nspace = lua_tostring(lua, stack_top + 1); - sep = strrchr(nspace, '/'); + sep = strrchr(nspace, '/'); if (sep == NULL) { break; @@ -607,12 +601,12 @@ static int seds_xmlparser_breakup_namespace(lua_State *lua) */ static void seds_xmlparser_starttag(void *data, const XML_Char *el, const XML_Char **xattr) { - lua_State *lua = data; - seds_nodetype_t node_type; - const char *name_attr; - char attrib_string[64]; - size_t len; - int top_start; + lua_State *lua = data; + seds_nodetype_t node_type; + const char *name_attr; + char attrib_string[64]; + size_t len; + int top_start; const XML_Char **iattr; top_start = lua_gettop(lua); @@ -657,8 +651,8 @@ static void seds_xmlparser_starttag(void *data, const XML_Char *el, const XML_Ch if (xattr[0] != NULL && xattr[1] != NULL) { iattr = xattr; - lua_newtable(lua); /* top+2: current node attribute table */ - lua_newtable(lua); /* top+3: current node attribute table */ + lua_newtable(lua); /* top+2: current node attribute table */ + lua_newtable(lua); /* top+3: current node attribute table */ while (iattr[0] != NULL && iattr[1] != NULL) { lua_pushstring(lua, iattr[0]); @@ -699,7 +693,7 @@ static void seds_xmlparser_starttag(void *data, const XML_Char *el, const XML_Ch seds_xmlparser_message(lua, SEDS_USER_MESSAGE_WARNING); } - lua_settop(lua, top_start + 1); /* top : current node data table */ + lua_settop(lua, top_start + 1); /* top : current node data table */ } /* ------------------------------------------------------------------- */ @@ -718,71 +712,71 @@ static void seds_xmlparser_starttag(void *data, const XML_Char *el, const XML_Ch */ static void seds_xmlparser_endtag(void *data, const XML_Char *el) { - lua_State *lua = data; + lua_State *lua = data; const char *parent_append_field; - int parent_append_type; - int top_start; + int parent_append_type; + int top_start; top_start = lua_gettop(lua); luaL_argcheck(lua, luaL_checkudata(lua, top_start - 1, "seds_node") != NULL, top_start - 1, "seds_node expected"); - switch(seds_tree_node_get_type(lua, top_start)) + switch (seds_tree_node_get_type(lua, top_start)) { - case SEDS_NODETYPE_LONG_DESCRIPTION: - /* - * concatenate with the "longdescription" of the parent - */ - parent_append_field = "longdescription"; - parent_append_type = LUA_TSTRING; - lua_getfield(lua, top_start, "xml_cdata"); - lua_remove(lua, top_start); - break; + case SEDS_NODETYPE_LONG_DESCRIPTION: + /* + * concatenate with the "longdescription" of the parent + */ + parent_append_field = "longdescription"; + parent_append_type = LUA_TSTRING; + lua_getfield(lua, top_start, "xml_cdata"); + lua_remove(lua, top_start); + break; - case SEDS_NODETYPE_DESCRIPTION_PASSTHRU: - /* - * Re-create an XML tag from the contents, - * concatenate with the "xml_cdata" of the parent - */ - parent_append_field = "xml_cdata"; - parent_append_type = LUA_TSTRING; + case SEDS_NODETYPE_DESCRIPTION_PASSTHRU: + /* + * Re-create an XML tag from the contents, + * concatenate with the "xml_cdata" of the parent + */ + parent_append_field = "xml_cdata"; + parent_append_type = LUA_TSTRING; - lua_pushcfunction(lua, seds_xmlparser_recreate_xml); - lua_getfield(lua, top_start, "xml_element"); - lua_getfield(lua, top_start, "xml_attrs"); - lua_getfield(lua, top_start, "xml_cdata"); - lua_call(lua, 3, 1); + lua_pushcfunction(lua, seds_xmlparser_recreate_xml); + lua_getfield(lua, top_start, "xml_element"); + lua_getfield(lua, top_start, "xml_attrs"); + lua_getfield(lua, top_start, "xml_cdata"); + lua_call(lua, 3, 1); - lua_remove(lua, top_start); - break; + lua_remove(lua, top_start); + break; - case SEDS_NODETYPE_PACKAGE: - /* - * Namespaces needs special handling in case they have - * implicitly nested namespaces within them. - * - */ - lua_pushcfunction(lua, seds_xmlparser_breakup_namespace); - lua_insert(lua, top_start); - lua_call(lua, 1, 1); + case SEDS_NODETYPE_PACKAGE: + /* + * Namespaces needs special handling in case they have + * implicitly nested namespaces within them. + * + */ + lua_pushcfunction(lua, seds_xmlparser_breakup_namespace); + lua_insert(lua, top_start); + lua_call(lua, 1, 1); - parent_append_field = "subnodes"; - parent_append_type = LUA_TTABLE; - break; + parent_append_field = "subnodes"; + parent_append_type = LUA_TTABLE; + break; - case SEDS_NODETYPE_UNKNOWN: - case SEDS_NODETYPE_XINCLUDE_PASSTHRU: - /* discard the node, do not append it */ - parent_append_field = NULL; - parent_append_type = LUA_TNONE; - break; + case SEDS_NODETYPE_UNKNOWN: + case SEDS_NODETYPE_XINCLUDE_PASSTHRU: + /* discard the node, do not append it */ + parent_append_field = NULL; + parent_append_type = LUA_TNONE; + break; - default: - /* - * Typical case -- append the current node to the subnodes table of the parent - */ - parent_append_field = "subnodes"; - parent_append_type = LUA_TTABLE; - break; + default: + /* + * Typical case -- append the current node to the subnodes table of the parent + */ + parent_append_field = "subnodes"; + parent_append_type = LUA_TTABLE; + break; } if (parent_append_field != NULL) @@ -799,7 +793,7 @@ static void seds_xmlparser_endtag(void *data, const XML_Char *el) lua_newtable(lua); } lua_pushvalue(lua, top_start); - lua_rawseti(lua, -2, 1 + lua_rawlen(lua, -2)); + lua_rawseti(lua, -2, 1 + lua_rawlen(lua, -2)); lua_pushinteger(lua, lua_rawlen(lua, -1)); lua_setfield(lua, top_start, "id"); @@ -811,39 +805,39 @@ static void seds_xmlparser_endtag(void *data, const XML_Char *el) if (lua_type(lua, -1) != parent_append_type) { lua_pop(lua, 1); - switch(parent_append_type) + switch (parent_append_type) { - case LUA_TTABLE: - lua_newtable(lua); - break; - case LUA_TSTRING: - lua_pushstring(lua, ""); - break; - default: - lua_pushnil(lua); - break; + case LUA_TTABLE: + lua_newtable(lua); + break; + case LUA_TSTRING: + lua_pushstring(lua, ""); + break; + default: + lua_pushnil(lua); + break; } } lua_insert(lua, top_start); - switch(parent_append_type) + switch (parent_append_type) { - case LUA_TTABLE: - lua_rawseti(lua, top_start, 1 + lua_rawlen(lua, top_start)); - break; - case LUA_TSTRING: - if (lua_isstring(lua, -1)) - { - lua_concat(lua, 2); - } - else - { - lua_pop(lua, 1); - } - break; - default: - break; + case LUA_TTABLE: + lua_rawseti(lua, top_start, 1 + lua_rawlen(lua, top_start)); + break; + case LUA_TSTRING: + if (lua_isstring(lua, -1)) + { + lua_concat(lua, 2); + } + else + { + lua_pop(lua, 1); + } + break; + default: + break; } lua_setfield(lua, top_start - 1, parent_append_field); @@ -869,9 +863,8 @@ static void seds_xmlparser_endtag(void *data, const XML_Char *el) */ static void seds_xmlparser_cdata(void *data, const XML_Char *s, int len) { - lua_State *lua = data; - int top_start = lua_gettop(lua); - + lua_State *lua = data; + int top_start = lua_gettop(lua); /* * At the top of the LUA stack should be a table @@ -952,7 +945,7 @@ static int seds_xmlparser_get_property(lua_State *lua) /* */ seds_parser_t *pself = luaL_checkudata(lua, 1, "seds_parser"); - const char *prop = NULL; + const char *prop = NULL; /* * note - lua_tostring() possibly converts to a string, @@ -1047,10 +1040,9 @@ static int seds_xmlparser_set_property(lua_State *lua) int seds_xmlparser_readfile(lua_State *lua) { seds_parser_t *pself = luaL_checkudata(lua, 1, "seds_parser"); - void *xmlbuf; - size_t len; - int file_flag; - + void *xmlbuf; + size_t len; + int file_flag; luaL_argcheck(lua, pself != NULL, 1, "seds_parser expected"); @@ -1080,7 +1072,7 @@ int seds_xmlparser_readfile(lua_State *lua) { fclose(pself->fp); } - pself->fp = fopen(lua_tostring(lua, 2), "r"); /* arg2: xml_filename */ + pself->fp = fopen(lua_tostring(lua, 2), "r"); /* arg2: xml_filename */ if (!pself->fp) { lua_pushfstring(lua, "%s: %s", lua_tostring(lua, 2), strerror(errno)); @@ -1103,13 +1095,14 @@ int seds_xmlparser_readfile(lua_State *lua) xmlbuf = XML_GetBuffer(pself->xmlp, 16384); if (xmlbuf == NULL) { - lua_pushfstring(lua, "%s: XML Buffering Error: %s", - lua_tostring(lua, 2), - XML_ErrorString(XML_GetErrorCode(pself->xmlp))); + lua_pushfstring(lua, + "%s: XML Buffering Error: %s", + lua_tostring(lua, 2), + XML_ErrorString(XML_GetErrorCode(pself->xmlp))); return lua_error(lua); } - len = fread(xmlbuf, 1, 16384, pself->fp); + len = fread(xmlbuf, 1, 16384, pself->fp); file_flag = ferror(pself->fp); if (file_flag != 0) { @@ -1120,14 +1113,14 @@ int seds_xmlparser_readfile(lua_State *lua) file_flag = feof(pself->fp); if (!XML_ParseBuffer(pself->xmlp, len, file_flag)) { - lua_pushfstring(lua, "%s:%d: XML Parsing Error: %s", - lua_tostring(lua, 2), - XML_GetCurrentLineNumber(pself->xmlp), - XML_ErrorString(XML_GetErrorCode(pself->xmlp))); + lua_pushfstring(lua, + "%s:%d: XML Parsing Error: %s", + lua_tostring(lua, 2), + XML_GetCurrentLineNumber(pself->xmlp), + XML_ErrorString(XML_GetErrorCode(pself->xmlp))); return lua_error(lua); } - } - while (!file_flag); + } while (!file_flag); XML_SetUserData(pself->xmlp, NULL); @@ -1211,14 +1204,24 @@ int seds_xmlparser_finish(lua_State *lua) return luaL_error(lua, "No XML datasheets parsed"); } - seds_user_message_printf(SEDS_USER_MESSAGE_DEBUG, __FILE__, __LINE__, "%s(): ROOT=> %d", __func__, (int) lua_rawlen(lua, 3)); + seds_user_message_printf(SEDS_USER_MESSAGE_DEBUG, + __FILE__, + __LINE__, + "%s(): ROOT=> %d", + __func__, + (int)lua_rawlen(lua, 3)); lua_pushnil(lua); while (lua_next(lua, 3)) { luaL_tolstring(lua, -2, NULL); luaL_tolstring(lua, -2, NULL); - seds_user_message_printf(SEDS_USER_MESSAGE_DEBUG, __FILE__, __LINE__, "%s(): %s => %s", __func__, - lua_tostring(lua, -2), lua_tostring(lua, -1)); + seds_user_message_printf(SEDS_USER_MESSAGE_DEBUG, + __FILE__, + __LINE__, + "%s(): %s => %s", + __func__, + lua_tostring(lua, -2), + lua_tostring(lua, -1)); lua_pop(lua, 3); } lua_pop(lua, 1); diff --git a/tool/src/seds_xmlparser.h b/tool/src/seds_xmlparser.h index af66e21..b6d6955 100644 --- a/tool/src/seds_xmlparser.h +++ b/tool/src/seds_xmlparser.h @@ -18,7 +18,6 @@ * limitations under the License. */ - /** * \file seds_xmlparser.h * \ingroup tool @@ -51,6 +50,4 @@ int seds_xmlparser_readfile(lua_State *lua); */ int seds_xmlparser_finish(lua_State *lua); - -#endif /* _SEDS_XMLPARSER_H_ */ - +#endif /* _SEDS_XMLPARSER_H_ */ From 02b20a561d0197e84cb8acf5d3a4cee8dab8babc Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Wed, 4 Feb 2026 14:14:43 -0500 Subject: [PATCH 02/15] Fix #81, resolve nil data types in generated cosmos DB Add a mapping for the FLOAT datatype Also generate packed bytes for arrays of elements that are not byte-aligned --- cfecfs/missionlib/eds/91-write_cosmos_txt.lua | 65 ++++++++++++++----- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/cfecfs/missionlib/eds/91-write_cosmos_txt.lua b/cfecfs/missionlib/eds/91-write_cosmos_txt.lua index b27b58a..2556117 100644 --- a/cfecfs/missionlib/eds/91-write_cosmos_txt.lua +++ b/cfecfs/missionlib/eds/91-write_cosmos_txt.lua @@ -150,9 +150,13 @@ write_cosmos_lineitem = function(output,line_writer,entry,qual_prefix,descr) bits_remainder = bits_remainder - attribs.bitsize end attribs.bitsize = bits_remainder - elseif (entry.entity_type == "STRING_DATATYPE" or entry.entity_type == "BINARY_DATATYPE") then + elseif (entry.entity_type == "STRING_DATATYPE") then attribs.ctype = "STRING" - elseif (SEDS.index_datatype_filter(entry)) then + elseif (entry.entity_type == "BINARY_DATATYPE") then + attribs.ctype = "BLOCK" + elseif (entry.entity_type == "FLOAT_DATATYPE") then + attribs.ctype = "FLOAT" + elseif (entry.entity_type == "BOOLEAN_DATATYPE" or SEDS.index_datatype_filter(entry)) then attribs.ctype = (entry.is_signed and "INT") or "UINT" -- This only handles integers @@ -193,38 +197,68 @@ write_cosmos_block = function(output,line_writer,entry,qual_prefix,descr) end - -- ------------------------------------------------------------------------- -- Helper function: write a flattened array, adding a digit to the name prefix -- ------------------------------------------------------------------------- write_cosmos_array_members = function(output,line_writer,arr,qual_prefix) - local min, max - -- Arrays can be dimensioned by an index type, and that type may have a better string representation -- This also means that the range could be something other than the typical limits + local min, max + local minv, maxv local dimension_typename + local writer + local datatyperef + local dimension_obj + + -- This wrapper handles the case where the array elements are not at byte boundaries + -- The output is expressed as a series of 8 bit values (packed) + local_packedarray_writer = function(idx, element_qual_prefix) + local attribs = { + name = SEDS.to_macro_name(element_qual_prefix), + ctype = "UINT", + bitsize = 8, + descr = string.format("%s packed byte %d", qual_prefix or "array", idx) + } + line_writer(output, attribs) + end - for dimension in arr:iterate_subtree("DIMENSION") do - if (dimension.indextyperef) then - dimension_typename = dimension.indextyperef:get_qualified_name() - min = dimension.indextyperef.resolved_range.min - max = dimension.indextyperef.resolved_range.max + -- This wrapper handles the normal case where the array elements are a + -- whole number of bytes, and thus spelled out normally in the definition + local_array_writer = function(idx, element_qual_prefix) + write_cosmos_block(output,line_writer,datatyperef,element_qual_prefix) + end + + datatyperef = arr.datatyperef + + -- Check if this needs to be output as a bitmap + if ((datatyperef.resolved_size.bits % 8) ~= 0) then + -- Packing: The dimension is the size of the whole array + min = { value = 0, inclusive = true } + max = { value = arr.resolved_size.bits / 8, inclusive = false } + writer = local_packedarray_writer + else + -- Normal: The actual dimension will be used + for dimension in arr:iterate_subtree("DIMENSION") do + if (dimension.indextyperef) then + dimension_typename = dimension.indextyperef:get_qualified_name() + min = dimension.indextyperef.resolved_range.min + max = dimension.indextyperef.resolved_range.max + end end + writer = local_array_writer end -- As a fallback use a generic 32-bit integer as the index type - local dimension_obj = SEDS.edslib.NewObject(dimension_typename or "BASE_TYPES/int32") + dimension_obj = SEDS.edslib.NewObject(dimension_typename or "BASE_TYPES/int32") -- Determine the usable min/max -- this means adjusting for inclusiveness of the limits - local minv if (min) then minv = min.value + (min.inclusive and 0 or 1) else minv = 0 end - local maxv if (max) then maxv = max.value - (max.inclusive and 0 or 1) else @@ -234,7 +268,7 @@ write_cosmos_array_members = function(output,line_writer,arr,qual_prefix) for i=minv,maxv do dimension_obj(i) - write_cosmos_block(output,line_writer,arr.datatyperef,append_qual_prefix(qual_prefix, dimension_obj)) + writer(i, append_qual_prefix(qual_prefix, dimension_obj)) end @@ -355,7 +389,7 @@ for _,instance in ipairs(SEDS.highlevel_interfaces) do -- The various interfaces should be attached under required_links for _,binding in ipairs(instance.required_links) do local reqintf = binding.reqintf - local intf_type_str = reqintf.type:get_qualified_name() + local intf_type_str = reqintf.type:get_qualified_name() if (intf_type_str == "CFE_SB/Telemetry" or intf_type_str == "CFE_SB/Telecommand") then local cmd = reqintf.intf_commands and reqintf.intf_commands[1] @@ -391,4 +425,3 @@ for _,instance in ipairs(SEDS.highlevel_interfaces) do end end end - From cc399314ec345065300ca145e550b366c0054fba Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Wed, 4 Feb 2026 14:57:18 -0500 Subject: [PATCH 03/15] Fix #83, add format check --- .github/workflows/format-check-internal.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/format-check-internal.yml diff --git a/.github/workflows/format-check-internal.yml b/.github/workflows/format-check-internal.yml new file mode 100644 index 0000000..2779e00 --- /dev/null +++ b/.github/workflows/format-check-internal.yml @@ -0,0 +1,19 @@ +name: Internal Format Check + +# Run on all push and pull requests +on: + push: + branches: + - dev + - main + pull_request: + types: + - opened + - reopened + - synchronize + workflow_dispatch: + +jobs: + format-check: + name: Run format check + uses: cFS/workflows/.github/workflows/format-check-reusable-internal.yml@dev From 855474cffd9324f55b5fed49598ae2d8f8a20a50 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Mon, 23 Feb 2026 17:00:14 -0500 Subject: [PATCH 04/15] Fix #87, resolve build issues on RHEL 8 Only include the db.so as a dependency on the file that needs it Reset the compile definitions and options for the python libraries --- cfecfs/missionlib/cmake/dbobj_patternrules.mk | 4 +++- cfecfs/missionlib/python/CMakeLists.txt | 6 ++++++ edslib/python/CMakeLists.txt | 8 +++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cfecfs/missionlib/cmake/dbobj_patternrules.mk b/cfecfs/missionlib/cmake/dbobj_patternrules.mk index 0a02dd3..d39ed46 100644 --- a/cfecfs/missionlib/cmake/dbobj_patternrules.mk +++ b/cfecfs/missionlib/cmake/dbobj_patternrules.mk @@ -21,9 +21,11 @@ include $(EDS_REPO_SOURCE_DIR)/edslib/cmake/base_patternrules.mk # linker logic that CMake uses, this just assumes a GNU-style LD, and that the file extension # (.so or .obj) indicates the style of loadable object being used. +$(O)/$(EDS_FILE_PREFIX)_sb_dispatchdb.so: EXTRA_LINK_LIBS=-l:$(EDS_FILE_PREFIX)_db.so + $(O)/%.so: @echo EDS: Linking shared object $(@) for $(EDSTOOL_ARCH) - $(LD) $(SHARED_LDFLAGS) -shared -o $@ $^ -L$(O) -l:$(EDS_FILE_PREFIX)_db.so + $(LD) $(SHARED_LDFLAGS) -shared -o $@ $^ -L$(O) $(EXTRA_LINK_LIBS) $(O)/%.obj: @echo EDS: Linking relocatable object $(@) for $(EDSTOOL_ARCH) diff --git a/cfecfs/missionlib/python/CMakeLists.txt b/cfecfs/missionlib/python/CMakeLists.txt index 903fbb4..54dd012 100644 --- a/cfecfs/missionlib/python/CMakeLists.txt +++ b/cfecfs/missionlib/python/CMakeLists.txt @@ -78,6 +78,12 @@ option(CFE_MISSIONLIB_PYTHON_BUILD_STANDALONE_MODULE if (NOT PYTHON_FOUND) message(" Python support not configured, skipping MissionLib Python bindings") else () + # Note when using the Python.h header file it sometimes defines things like _XOPEN_SOURCE directly + # To avoid triggering errors, do not use any existing compile definitions in this module. Also + # sometimes Python marks something as deprecated even with minimal/no overlap in having an alternate. + set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "") + set_directory_properties(PROPERTIES COMPILE_OPTIONS "-Wno-deprecated-declarations") + include_directories(inc) include_directories(${EDSLIB_FSW_SOURCE_DIR}/inc) include_directories(${EDSLIB_PYTHONBINDINGS_SOURCE_DIR}/inc) diff --git a/edslib/python/CMakeLists.txt b/edslib/python/CMakeLists.txt index add721b..63355b9 100644 --- a/edslib/python/CMakeLists.txt +++ b/edslib/python/CMakeLists.txt @@ -38,9 +38,6 @@ # PYTHON_LIBS = libraries to put on link line (-l switches) # -# More fixes needed for 3.13! -add_definitions(-Wno-deprecated-declarations) - project(EDSLIB_PYTHONBINDINGS C) if(NOT PYTHON_FOUND) @@ -79,6 +76,11 @@ option(EDSLIB_PYTHON_BUILD_STANDALONE_MODULE if (NOT PYTHON_FOUND) message(" Python support not configured, skipping EdsLib Python bindings") else () + # Note when using the Python.h header file it sometimes defines things like _XOPEN_SOURCE directly + # To avoid triggering errors, do not use any existing compile definitions in this module + set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "") + set_directory_properties(PROPERTIES COMPILE_OPTIONS "-Wno-deprecated-declarations") + include_directories(inc) include_directories(${EDSLIB_FSW_SOURCE_DIR}/inc) include_directories(${PYTHON_INCLUDE_DIRS}) From 7bd998deb7e4d43333fbb07ea6aa4be12a9a9078 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Thu, 12 Mar 2026 14:12:24 -0500 Subject: [PATCH 05/15] Fix #90, correct iteration of topics in python bindings Filter the global topic list by the parent intf type (CMD or TLM) and only return results in the iterator that match. This also updates the SetPubSub routine to accept instance names in addition to instance numbers. --- .../src/cfe_missionlib_python_database.c | 39 ++++++++++++++++--- .../src/cfe_missionlib_python_interface.c | 26 ++++++++++--- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c index d0e4c72..e503a9e 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c @@ -525,7 +525,9 @@ static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) EdsComponent_CFE_SB_Listener_t Params; EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; - if (!PyArg_UnpackTuple(args, "DecodeEdsId", 3, 3, &arg1, &arg2, &arg3)) + CFE_MissionLib_Python_Database_t *IntfDb = (CFE_MissionLib_Python_Database_t *)obj; + + if (!PyArg_UnpackTuple(args, "SetPubSub", 3, 3, &arg1, &arg2, &arg3)) { PyErr_Format(PyExc_RuntimeError, "Arguments expected: InstanceNumber, TopicId, and SpacePacket Message"); return Py_False; @@ -535,18 +537,44 @@ static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) Py_INCREF(arg2); Py_INCREF(arg3); + tempargs = NULL; + memset(&Params, 0, sizeof(Params)); + do { if (PyNumber_Check(arg1)) { tempargs = PyNumber_Long(arg1); + } + else if (PyUnicode_Check(arg1)) + { + /* Do a lookup but make sure the string is plain ASCII */ + tempargs = PyUnicode_AsASCIIString(arg1); + } + else + { + tempargs = PyObject_ASCII(arg1); + } + + if (tempargs != NULL) + { + if (PyNumber_Check(arg1)) + { + Params.Telecommand.InstanceNumber = PyLong_AsUnsignedLong(tempargs); + } + else + { + Params.Telecommand.InstanceNumber = + CFE_MissionLib_GetInstanceNumber(IntfDb->IntfDb, PyBytes_AsString(tempargs)); + } - Params.Telecommand.InstanceNumber = PyLong_AsUnsignedLong(tempargs); Py_DECREF(tempargs); + tempargs = NULL; } - else + + if (Params.Telecommand.InstanceNumber == 0) { - PyErr_Format(PyExc_RuntimeError, "InstanceNumber needs to be an integer"); + PyErr_Format(PyExc_ValueError, "Cannot convert %R to an instance number", arg1); break; } @@ -559,7 +587,8 @@ static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) } else { - PyErr_Format(PyExc_RuntimeError, "TopicId needs to be an integer"); + /* In theory this could accept a named topic as well, if needed */ + PyErr_Format(PyExc_TypeError, "TopicId needs to be an integer"); break; } diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c index f031d9f..175786b 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_interface.c @@ -407,6 +407,7 @@ static PyObject *CFE_MissionLib_Python_InterfaceIterator_iternext(PyObject *obj) CFE_MissionLib_Python_Interface_t *intf = NULL; char Buffer[128]; CFE_MissionLib_TopicInfo_t TopicInfo; + EdsLib_IntfDB_InterfaceInfo_t IntfInfo; int32_t Status; PyObject *key = NULL; PyObject *topicid = NULL; @@ -432,11 +433,26 @@ static PyObject *CFE_MissionLib_Python_InterfaceIterator_iternext(PyObject *obj) break; } - /* This fails quickly if passed an invalid identifier - it will not assemble the string */ - Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(intf->DbObj->IntfDb), - TopicInfo.ParentIntfId, - Buffer, - sizeof(Buffer)); + Status = EdsLib_IntfDB_GetComponentInterfaceInfo(CFE_MissionLib_GetParent(intf->DbObj->IntfDb), + TopicInfo.ParentIntfId, + &IntfInfo); + if (Status == EDSLIB_SUCCESS) + { + /* Only look at entries associated with this interface (Bypass topics from other interfaces) */ + if (IntfInfo.IntfTypeEdsId != intf->DeclEdsId) + { + Status = EDSLIB_NO_MATCHING_VALUE; + } + else + { + /* This fails quickly if passed an invalid identifier - it will not assemble the string */ + Status = EdsLib_IntfDB_GetFullName(CFE_MissionLib_GetParent(intf->DbObj->IntfDb), + TopicInfo.ParentIntfId, + Buffer, + sizeof(Buffer)); + } + } + } while (Status != EDSLIB_SUCCESS); if (Status == EDSLIB_SUCCESS) From e3e5b85d6cc5ea07ca64bd6f39834bbbeaecad35 Mon Sep 17 00:00:00 2001 From: Figueroa Date: Tue, 17 Mar 2026 15:16:37 -0400 Subject: [PATCH 06/15] Fix #92, Adds explicit padding in eds --- cfecfs/edsmsg/eds/cfe_hdr.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/cfecfs/edsmsg/eds/cfe_hdr.xml b/cfecfs/edsmsg/eds/cfe_hdr.xml index f2acfb8..6c64643 100644 --- a/cfecfs/edsmsg/eds/cfe_hdr.xml +++ b/cfecfs/edsmsg/eds/cfe_hdr.xml @@ -91,6 +91,7 @@ --> + From b9dbdaae2251a129b566714ec7dcc95188911f71 Mon Sep 17 00:00:00 2001 From: Adams Date: Wed, 8 Apr 2026 14:28:47 -0500 Subject: [PATCH 07/15] Part cFS/workflows#177, Update Existing Workflows with Internal Logic --- .github/workflows/format-check.yml | 7 +++- .github/workflows/static-analysis.yml | 47 +++++++++++++++++++++++++-- .github/workflows/validation-test.yml | 28 ++++++++++++---- 3 files changed, 72 insertions(+), 10 deletions(-) diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 441199a..243ad40 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -2,13 +2,18 @@ name: Format Check # Run on all push and pull requests on: + push: + branches: + - dev + - main pull_request: types: - opened - reopened - synchronize + workflow_dispatch: jobs: format-check: name: Run format check - uses: nasa/cFS/.github/workflows/format-check.yml@main + uses: nasa/cFS/.github/workflows/format-check.yml@dev \ No newline at end of file diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 40c4cd9..5bd0380 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -1,6 +1,6 @@ name: Static Analysis -# Run on all push and pull requests +# Run on pull requests and by dispatch on: push: branches: @@ -13,8 +13,51 @@ on: - synchronize workflow_dispatch: +# Force bash to apply pipefail option so pipeline failures aren't masked +defaults: + run: + shell: bash + jobs: + #Checks for duplicate actions. Skips push actions if there is a matching or duplicate pull-request action. + checks-for-duplicates: + runs-on: ubuntu-latest + # Map a step output to a job output + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@master + with: + concurrent_skipping: 'same_content' + skip_after_successful_duplicate: 'true' + do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' static-analysis: name: Run cppcheck - uses: nasa/cFS/.github/workflows/static-analysis.yml@main + needs: checks-for-duplicates + if: ${{ needs.checks-for-duplicates.outputs.should_skip != 'true' || contains(github.ref, 'dev') }} + runs-on: ubuntu-latest + container: ghcr.io/core-flight-system/cfsbuildenv-linux:latest + + strategy: + fail-fast: false + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + path: source + + - name: CMake Setup + run: | + cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE -DENABLE_UNIT_TESTS=FALSE -B build -S source + + - name: Run general cppcheck + run: cppcheck --force --inline-suppr --xml --project=build/compile_commands.json 2> cppcheck_err.xml + + - name: Convert cppcheck results to Markdown + run: xsltproc source/.github/scripts/cppcheck-output.xslt cppcheck_err.xml | tee $GITHUB_STEP_SUMMARY cppcheck_err.txt + + - name: Check for reported errors + run: tail -n 1 cppcheck_err.txt | grep -q '^\*\*0 error(s) reported\*\*$' \ No newline at end of file diff --git a/.github/workflows/validation-test.yml b/.github/workflows/validation-test.yml index f900172..372f8b6 100644 --- a/.github/workflows/validation-test.yml +++ b/.github/workflows/validation-test.yml @@ -19,12 +19,28 @@ defaults: env: UPSTREAM_OSAL_REPO: nasa/osal - UPSTREAM_OSAL_REF: main + UPSTREAM_OSAL_REF: dev jobs: + checks-for-duplicates: + runs-on: ubuntu-latest + # Map a step output to a job output + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@master + with: + concurrent_skipping: 'same_content' + skip_after_successful_duplicate: 'true' + do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' + prepare-dependencies: name: Prepare Dependencies + needs: checks-for-duplicates + if: ${{ needs.checks-for-duplicates.outputs.should_skip != 'true' || contains(github.ref, 'dev') }} runs-on: ubuntu-latest + container: ghcr.io/core-flight-system/cfsbuildenv-linux:latest steps: - name: Cache EdsLib Source uses: actions/cache@v3 @@ -58,6 +74,7 @@ jobs: name: Build EdsLib and Execute Tests needs: [prepare-dependencies] runs-on: ubuntu-latest + container: ghcr.io/core-flight-system/cfsbuildenv-linux:latest strategy: fail-fast: false @@ -69,9 +86,6 @@ jobs: steps: - - name: Install Build Dependencies - run: sudo apt-get install liblua5.4-dev libpython3-dev libjson-c-dev pkg-config lcov xsltproc -y - # Note - caches were updated in "prepare-dependencies" job so all three of these should be a hit - name: Retrieve Cached EdsLib Source uses: actions/cache@v3 @@ -91,10 +105,10 @@ jobs: # so in order to make this work it needs to adjust this. - name: Import OSAL run: | - sudo find ${GITHUB_WORKSPACE}/osal-staging -type d -print0 | xargs -0 chmod go+rx - sudo find ${GITHUB_WORKSPACE}/osal-staging -type f -print0 | xargs -0 chmod go+r - sudo find ${GITHUB_WORKSPACE}/osal-staging -type f -path '*/bin/*' -print0 | xargs -0 chmod go+x sudo cp -rv -t / ${GITHUB_WORKSPACE}/osal-staging/* + sudo find /usr/local -type d -exec chmod go+rx {} \; + sudo find /usr/local -type f -exec chmod go+r {} \; + sudo find /usr/local -type f -path '*/bin/*' -exec chmod go+x {} \; - name: Refresh Dynamic Linker Cache run: sudo ldconfig From 4e60221065e0801f3222846be77d35ccd9c56456 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Wed, 8 Apr 2026 14:18:42 -0400 Subject: [PATCH 08/15] Fix #95, return boolean status for msgid/topicid conversions Return status making it easier for apps to know if conversion is valid or not. --- .../fsw/inc/cfe_missionlib_runtime.h | 8 +- .../fsw/src/cfe_missionlib_runtime_default.c | 84 ++++++++++++------- .../ut-stubs/cfe_missionlib_runtime_stubs.c | 24 +++++- 3 files changed, 78 insertions(+), 38 deletions(-) diff --git a/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h b/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h index b4aaf97..e23519e 100644 --- a/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h +++ b/cfecfs/missionlib/fsw/inc/cfe_missionlib_runtime.h @@ -69,13 +69,13 @@ extern "C" { #endif - void CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, + bool CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, const EdsComponent_CFE_SB_Listener_t *Input); - void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, + bool CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input); - void CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, + bool CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, const EdsComponent_CFE_SB_Publisher_t *Input); - void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, + bool CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input); bool CFE_MissionLib_PubSub_IsListenerComponent(const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params); diff --git a/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c b/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c index 6a707c7..1654804 100644 --- a/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c +++ b/cfecfs/missionlib/fsw/src/cfe_missionlib_runtime_default.c @@ -299,35 +299,47 @@ static bool CFE_MissionLib_TryUnmapping(uint16_t return true; } -void CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, +bool CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, const EdsComponent_CFE_SB_Listener_t *Input) { + bool Result; + memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryMapping(Output, - &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, - Input->Telecommand.InstanceNumber, - Input->Telecommand.TopicId)) + Result = CFE_MissionLib_TryMapping(Output, + &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, + Input->Telecommand.InstanceNumber, + Input->Telecommand.TopicId); + + if (!Result) { - CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_GLOBAL_CMD_LIMITS, 0, Input->Telecommand.TopicId); + Result = CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_GLOBAL_CMD_LIMITS, 0, Input->Telecommand.TopicId); } + + return Result; } -void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, +bool CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { + bool Result; + memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, - &Output->Telecommand.TopicId, - &CFE_MISSIONLIB_GLOBAL_CMD_LIMITS, - Input)) + Result = CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, + &Output->Telecommand.TopicId, + &CFE_MISSIONLIB_GLOBAL_CMD_LIMITS, + Input); + + if (!Result) { - CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, - &Output->Telecommand.TopicId, - &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, - Input); + Result = CFE_MissionLib_TryUnmapping(&Output->Telecommand.InstanceNumber, + &Output->Telecommand.TopicId, + &CFE_MISSIONLIB_LOCAL_CMD_LIMITS, + Input); } + + return Result; } bool CFE_MissionLib_PubSub_IsListenerComponent(const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params) @@ -335,35 +347,47 @@ bool CFE_MissionLib_PubSub_IsListenerComponent(const EdsInterface_CFE_SB_Softwar return (CFE_MissionLib_GetMsgIdInterfaceType(&Params->MsgId) == CFE_MISSIONLIB_MSGID_TELECOMMAND_BITS); } -void CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, +bool CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, const EdsComponent_CFE_SB_Publisher_t *Input) { + bool Result; + memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryMapping(Output, - &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, - Input->Telemetry.InstanceNumber, - Input->Telemetry.TopicId)) + Result = CFE_MissionLib_TryMapping(Output, + &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, + Input->Telemetry.InstanceNumber, + Input->Telemetry.TopicId); + + if (!Result) { - CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_GLOBAL_TLM_LIMITS, 0, Input->Telemetry.TopicId); + Result = CFE_MissionLib_TryMapping(Output, &CFE_MISSIONLIB_GLOBAL_TLM_LIMITS, 0, Input->Telemetry.TopicId); } + + return Result; } -void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, +bool CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { + bool Result; + memset(Output, 0, sizeof(*Output)); - if (!CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, - &Output->Telemetry.TopicId, - &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, - Input)) + Result = CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, + &Output->Telemetry.TopicId, + &CFE_MISSIONLIB_LOCAL_TLM_LIMITS, + Input); + + if (!Result) { - CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, - &Output->Telemetry.TopicId, - &CFE_MISSIONLIB_GLOBAL_TLM_LIMITS, - Input); + Result = CFE_MissionLib_TryUnmapping(&Output->Telemetry.InstanceNumber, + &Output->Telemetry.TopicId, + &CFE_MISSIONLIB_GLOBAL_TLM_LIMITS, + Input); } + + return Result; } bool CFE_MissionLib_PubSub_IsPublisherComponent(const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Params) diff --git a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c index 732f375..3a4b8c6 100644 --- a/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c +++ b/cfecfs/missionlib/fsw/ut-stubs/cfe_missionlib_runtime_stubs.c @@ -57,15 +57,19 @@ void CFE_MissionLib_Get_PubSub_Parameters(EdsInterface_CFE_SB_SoftwareBus_PubSub * Generated stub function for CFE_MissionLib_MapListenerComponent() * ---------------------------------------------------- */ -void CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, +bool CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, const EdsComponent_CFE_SB_Listener_t *Input) { + UT_GenStub_SetupReturnBuffer(CFE_MissionLib_MapListenerComponent, bool); + UT_GenStub_AddParam(CFE_MissionLib_MapListenerComponent, EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Output); UT_GenStub_AddParam(CFE_MissionLib_MapListenerComponent, const EdsComponent_CFE_SB_Listener_t *, Input); UT_GenStub_Execute(CFE_MissionLib_MapListenerComponent, Basic, UT_DefaultHandler_CFE_MissionLib_MapListenerComponent); + + return UT_GenStub_GetReturnValue(CFE_MissionLib_MapListenerComponent, bool); } /* @@ -73,15 +77,19 @@ void CFE_MissionLib_MapListenerComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_ * Generated stub function for CFE_MissionLib_MapPublisherComponent() * ---------------------------------------------------- */ -void CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, +bool CFE_MissionLib_MapPublisherComponent(EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Output, const EdsComponent_CFE_SB_Publisher_t *Input) { + UT_GenStub_SetupReturnBuffer(CFE_MissionLib_MapPublisherComponent, bool); + UT_GenStub_AddParam(CFE_MissionLib_MapPublisherComponent, EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Output); UT_GenStub_AddParam(CFE_MissionLib_MapPublisherComponent, const EdsComponent_CFE_SB_Publisher_t *, Input); UT_GenStub_Execute(CFE_MissionLib_MapPublisherComponent, Basic, UT_DefaultHandler_CFE_MissionLib_MapPublisherComponent); + + return UT_GenStub_GetReturnValue(CFE_MissionLib_MapPublisherComponent, bool); } /* @@ -145,15 +153,19 @@ void CFE_MissionLib_Set_PubSub_Parameters(EdsDataType_CFE_HDR_Message_t * Generated stub function for CFE_MissionLib_UnmapListenerComponent() * ---------------------------------------------------- */ -void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, +bool CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { + UT_GenStub_SetupReturnBuffer(CFE_MissionLib_UnmapListenerComponent, bool); + UT_GenStub_AddParam(CFE_MissionLib_UnmapListenerComponent, EdsComponent_CFE_SB_Listener_t *, Output); UT_GenStub_AddParam(CFE_MissionLib_UnmapListenerComponent, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, Input); UT_GenStub_Execute(CFE_MissionLib_UnmapListenerComponent, Basic, UT_DefaultHandler_CFE_MissionLib_UnmapListenerComponent); + + return UT_GenStub_GetReturnValue(CFE_MissionLib_UnmapListenerComponent, bool); } /* @@ -161,9 +173,11 @@ void CFE_MissionLib_UnmapListenerComponent(EdsComponent_CFE_SB_Listener_t * Generated stub function for CFE_MissionLib_UnmapPublisherComponent() * ---------------------------------------------------- */ -void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, +bool CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t *Output, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *Input) { + UT_GenStub_SetupReturnBuffer(CFE_MissionLib_UnmapPublisherComponent, bool); + UT_GenStub_AddParam(CFE_MissionLib_UnmapPublisherComponent, EdsComponent_CFE_SB_Publisher_t *, Output); UT_GenStub_AddParam(CFE_MissionLib_UnmapPublisherComponent, const EdsInterface_CFE_SB_SoftwareBus_PubSub_t *, @@ -172,4 +186,6 @@ void CFE_MissionLib_UnmapPublisherComponent(EdsComponent_CFE_SB_Publisher_t UT_GenStub_Execute(CFE_MissionLib_UnmapPublisherComponent, Basic, UT_DefaultHandler_CFE_MissionLib_UnmapPublisherComponent); + + return UT_GenStub_GetReturnValue(CFE_MissionLib_UnmapPublisherComponent, bool); } From f9c3259d6d77aa21241c5f430ace0937682af3b1 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Wed, 8 Apr 2026 14:38:05 -0400 Subject: [PATCH 09/15] Fix #97, allow multi encode on generic files Employ the same logic that is used for writing CFE table files. If the passed in object is a list of EDS objects, then encode each item and concatenate the results. --- cfecfs/eds2cfetbl/eds2cfetbl.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cfecfs/eds2cfetbl/eds2cfetbl.c b/cfecfs/eds2cfetbl/eds2cfetbl.c index 985aefc..0b392d0 100644 --- a/cfecfs/eds2cfetbl/eds2cfetbl.c +++ b/cfecfs/eds2cfetbl/eds2cfetbl.c @@ -869,7 +869,15 @@ int EdsTableTool_WriteGenericFile(lua_State *lua) return luaL_error(lua, "%s: %s", lua_tostring(lua, 1), strerror(errno)); } - EdsTableTool_PushEncodedSingleObject(lua); + if (lua_type(lua, -1) == LUA_TTABLE) + { + EdsTableTool_PushEncodedMultiObject(lua); + } + else + { + EdsTableTool_PushEncodedSingleObject(lua); + } + fwrite(lua_tostring(lua, -1), lua_rawlen(lua, -1), 1, OutputFile); fclose(OutputFile); lua_pop(lua, 1); From 85012e7a4fb0cc675030c8c744232f73127cdc6c Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Wed, 8 Apr 2026 15:35:10 -0400 Subject: [PATCH 10/15] Fix #101, python conversion strictness The initialization of an EDS object from a python object was done by looping through the members in the EDS object, then reading each of those values from the Python object. The side effect of doing it this way is that if any member does not exist in the Python object, it will trigger an exception. This reverses the logic to loop through the Python object instead of the EDS object, then it finds the member name in the EDS object that correlates. This means the exception will be thrown if the Python initializer references a member that does not exist in EDS, which is more appropriate than the current approach. --- edslib/python/src/edslib_python_conversions.c | 177 +++++++++++++----- 1 file changed, 126 insertions(+), 51 deletions(-) diff --git a/edslib/python/src/edslib_python_conversions.c b/edslib/python/src/edslib_python_conversions.c index 8259ec7..9e727ab 100644 --- a/edslib/python/src/edslib_python_conversions.c +++ b/edslib/python/src/edslib_python_conversions.c @@ -85,51 +85,6 @@ static int EdsLib_Python_InitBindingDescriptorObject(EdsLib_Python_ObjectBase_t return 1; } -static void EdsLib_Python_ConvertPyMembers_Callback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) -{ - EdsLib_Python_ObjectConversionState_t *ParentConv = Arg; - EdsLib_Python_ObjectConversionState_t subpair; - - /* Any conversion error should have set an exception/error context. - * To avoid triggering multiple exceptions, this is a no-op after the first error */ - if (PyErr_Occurred() == NULL) - { - EdsLib_Binding_InitSubObject(&subpair.desc, &ParentConv->desc, &ParamDesc->EntityInfo); - - /* If a named index is present in EDS, and the python object supports the - * mapping protocol, then use the mapping to relate the objects. This use - * case is primarily for containers, but also applies to arrays where an enum - * type is used as the index. */ - if (ParamDesc->FullName != NULL && PyMapping_Check(ParentConv->pyobj)) - { - /* new ref */ - subpair.pyobj = PyMapping_GetItemString(ParentConv->pyobj, (char *)ParamDesc->FullName); - } - else if (PySequence_Check(ParentConv->pyobj) && ParamDesc->SeqNum < PySequence_Size(ParentConv->pyobj)) - { - /* Use sequence protocol as a backup, which handles normal EDS arrays - * or python lists being assigned to EDS containers */ - /*new ref*/ - subpair.pyobj = PySequence_GetItem(ParentConv->pyobj, ParamDesc->SeqNum); - } - else - { - /* no common ground found, so no conversion is possible */ - subpair.pyobj = NULL; - } - - /* - * The absence of an object here is not necessarily an error; - * treat it as a no-op if that occurs. - */ - if (subpair.pyobj != NULL) - { - EdsLib_Python_ConvertPythonToEdsObjectImpl(&subpair); - Py_DECREF(subpair.pyobj); - } - } -} - static void EdsLib_Python_ConvertEdsMembers_Callback(void *Arg, const EdsLib_EntityDescriptor_t *ParamDesc) { EdsLib_Python_ObjectConversionState_t *ParentConv = Arg; @@ -281,6 +236,121 @@ static int EdsLib_Python_CopyEdsObjectDirect(EdsLib_Python_ObjectConversionState return 1; } +static void EdsLib_Python_ConvertPythonSubObjectToEdsImpl(EdsLib_Binding_DescriptorObject_t *ParentDesc, + uint16_t SubIndex, + PyObject *MemberValue) +{ + EdsLib_DataTypeDB_EntityInfo_t MemberInfo; + EdsLib_Python_ObjectConversionState_t subpair; + int32_t EdsStatus; + + EdsStatus = EdsLib_DataTypeDB_GetMemberByIndex(ParentDesc->GD, ParentDesc->EdsId, SubIndex, &MemberInfo); + if (EdsStatus != EDSLIB_SUCCESS) + { + /* This means the subindex is not valid for this object */ + PyErr_Format(PyExc_IndexError, "Invalid Index: %u, Status=%d", (unsigned int)SubIndex, (int)EdsStatus); + } + else + { + EdsLib_Binding_InitSubObject(&subpair.desc, ParentDesc, &MemberInfo); + subpair.pyobj = MemberValue; + EdsLib_Python_ConvertPythonToEdsObjectImpl(&subpair); + } +} + +/* + * internal function, may be called recursively + */ +static void EdsLib_Python_ConvertPythonSequenceToEdsObjImpl(EdsLib_Python_ObjectConversionState_t *ConvPair) +{ + Py_ssize_t SeqSize; + Py_ssize_t idx; + PyObject *MemberValue; + + /* Any conversion error should have set an exception/error context. + * To avoid triggering multiple exceptions, this stops after the first error */ + SeqSize = PySequence_Size(ConvPair->pyobj); + for (idx = 0; PyErr_Occurred() == NULL && idx < SeqSize; ++idx) + { + MemberValue = PySequence_GetItem(ConvPair->pyobj, idx); + if (MemberValue == NULL) + { + /* not expected */ + break; + } + + EdsLib_Python_ConvertPythonSubObjectToEdsImpl(&ConvPair->desc, idx, MemberValue); + Py_DECREF(MemberValue); + } +} + +/* + * internal function, may be called recursively + */ +static void EdsLib_Python_ConvertPythonMappingToEdsObjImpl(EdsLib_Python_ObjectConversionState_t *ConvPair) +{ + PyObject *MemberList; + PyObject *MemberKey; + PyObject *MemberValue; + Py_ssize_t MapSize; + Py_ssize_t idx; + int32_t EdsStatus; + uint16_t SubIndex; + + MemberList = PyMapping_Keys(ConvPair->pyobj); + if (MemberList != NULL) + { + MapSize = PyList_GET_SIZE(MemberList); + /* Any conversion error should have set an exception/error context. + * To avoid triggering multiple exceptions, this stops after the first error */ + for (idx = 0; PyErr_Occurred() == NULL && idx < MapSize; ++idx) + { + /* NOTE: this gets a borrowed ref */ + MemberKey = PyList_GET_ITEM(MemberList, idx); + MemberValue = PyObject_GetItem(ConvPair->pyobj, MemberKey); + if (MemberValue == NULL) + { + /* not expected */ + break; + } + + /* Do an EDS lookup but make sure the string is plain ASCII */ + /* this drops the borrowed ref and replaces it with a strong ref */ + if (PyUnicode_Check(MemberKey)) + { + MemberKey = PyUnicode_AsASCIIString(MemberKey); + } + else + { + MemberKey = PyObject_ASCII(MemberKey); + } + + if (MemberKey != NULL) + { + EdsStatus = EdsLib_DisplayDB_GetIndexByName(ConvPair->desc.GD, + ConvPair->desc.EdsId, + PyBytes_AsString(MemberKey), + &SubIndex); + if (EdsStatus != EDSLIB_SUCCESS) + { + /* This means the python object contained a key that does not exist */ + PyErr_Format(PyExc_KeyError, "Key does not exist in EDS object: %R", MemberKey); + } + else + { + EdsLib_Python_ConvertPythonSubObjectToEdsImpl(&ConvPair->desc, SubIndex, MemberValue); + } + + Py_DECREF(MemberKey); + } + + Py_DECREF(MemberValue); + } + + Py_DECREF(MemberList); + } +} + /* * internal function, may be called recursively */ @@ -298,13 +368,18 @@ static void EdsLib_Python_ConvertPythonToEdsObjectImpl(EdsLib_Python_ObjectConve { /* no-op */ } - else if (ConvPair->desc.TypeInfo.NumSubElements > 0) + else if (PyList_Check(ConvPair->pyobj) || PyTuple_Check(ConvPair->pyobj)) { - /* Convert all sub-entities (will recuse back to this function for each item) */ - EdsLib_DisplayDB_IterateBaseEntities(ConvPair->desc.GD, - ConvPair->desc.EdsId, - EdsLib_Python_ConvertPyMembers_Callback, - ConvPair); + /* Note that this is specifically checking for List or Tuple here because + * the PySequence check is too broad; it also includes strings and Bytes + * objects which we do NOT want to interpret in this way */ + EdsLib_Python_ConvertPythonSequenceToEdsObjImpl(ConvPair); + } + else if (PyAnySet_Check(ConvPair->pyobj) || PyDict_Check(ConvPair->pyobj)) + { + /* As for sequences, the PyMapping_Check is too broad and will match + * unicode objects as well */ + EdsLib_Python_ConvertPythonMappingToEdsObjImpl(ConvPair); } else { From 7f4c38b9fefc6a61faccb8b1b18e4e4d1ad762d3 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Wed, 8 Apr 2026 15:45:31 -0400 Subject: [PATCH 11/15] Fix #99, add msgid access method Update the Python interface wrapper object to provide a method to get the msgid associated with a CFS instance. --- .../src/cfe_missionlib_python_database.c | 200 ++++++++++++++---- 1 file changed, 156 insertions(+), 44 deletions(-) diff --git a/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c b/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c index e503a9e..8a03985 100644 --- a/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c +++ b/cfecfs/missionlib/python/src/cfe_missionlib_python_database.c @@ -59,6 +59,7 @@ static int CFE_MissionLib_Python_Database_clear(PyObject *obj); static PyObject *CFE_MissionLib_Python_Database_GetInterface(PyObject *obj, PyObject *key); static PyObject *CFE_MissionLib_Python_DecodeEdsId(PyObject *obj, PyObject *args); static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args); +static PyObject *CFE_MissionLib_Python_GetMsgId(PyObject *obj, PyObject *args); static PyObject *CFE_MissionLib_Python_Instance_iter(PyObject *obj); static void CFE_MissionLib_Python_InstanceIterator_dealloc(PyObject *obj); @@ -70,6 +71,7 @@ static PyMethodDef CFE_MissionLib_Python_Database_methods[] = { { "Interface", CFE_MissionLib_Python_Database_GetInterface, METH_O, "Lookup an Interface type from DB." }, { "DecodeEdsId", CFE_MissionLib_Python_DecodeEdsId, METH_VARARGS, "Decode the EdsID from a packed cFE message" }, { "SetPubSub", CFE_MissionLib_Python_Set_PubSub, METH_VARARGS, "Set the PubSub parameters for a command message" }, + { "GetMsgId", CFE_MissionLib_Python_GetMsgId, METH_VARARGS, "Get the MsgId for a topic" }, { NULL } /* Sentinel */ }; @@ -509,13 +511,87 @@ static PyObject *CFE_MissionLib_Python_DecodeEdsId(PyObject *obj, PyObject *args return result; } +static uint16_t CFE_MissionLib_Python_ArgToInstanceNum(const CFE_MissionLib_SoftwareBus_Interface_t *IntfDb, + PyObject *arg) +{ + uint16_t Result; + PyObject *temparg; + + Result = 0; + + if (PyNumber_Check(arg)) + { + temparg = PyNumber_Long(arg); + } + else if (PyUnicode_Check(arg)) + { + /* Do a lookup but make sure the string is plain ASCII */ + temparg = PyUnicode_AsASCIIString(arg); + } + else + { + temparg = PyObject_ASCII(arg); + } + + if (temparg != NULL) + { + if (PyNumber_Check(arg)) + { + Result = PyLong_AsUnsignedLong(temparg); + } + else + { + Result = CFE_MissionLib_GetInstanceNumber(IntfDb, PyBytes_AsString(temparg)); + } + + Py_DECREF(temparg); + temparg = NULL; + } + + if (Result == 0) + { + PyErr_Format(PyExc_ValueError, "Cannot convert %R to an instance number", arg); + } + + return Result; +} + +static uint16_t CFE_MissionLib_Python_ArgToTopicId(const CFE_MissionLib_SoftwareBus_Interface_t *IntfDb, PyObject *arg) +{ + uint16_t Result; + PyObject *temparg; + CFE_MissionLib_Python_Topic_t *topic_obj; + + Result = 0; + + if (PyObject_TypeCheck(arg, &CFE_MissionLib_Python_TopicType)) + { + topic_obj = (CFE_MissionLib_Python_Topic_t *)arg; + Result = topic_obj->TopicId; + } + else if (PyNumber_Check(arg)) + { + temparg = PyNumber_Long(arg); + + Result = PyLong_AsUnsignedLong(temparg); + Py_DECREF(temparg); + } + + if (Result == 0) + { + /* In theory this could accept a named topic as well, if needed */ + PyErr_Format(PyExc_ValueError, "Cannot convert %R to a topic ID", arg); + } + + return Result; +} + static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) { PyObject *arg1; PyObject *arg2; PyObject *arg3; - PyObject *tempargs; - PyObject *result = NULL; + PyObject *result; EdsLib_Python_ObjectBase_t *Python_Packet; EdsLib_Python_Buffer_t *StorageBuffer; @@ -537,58 +613,22 @@ static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) Py_INCREF(arg2); Py_INCREF(arg3); - tempargs = NULL; + result = NULL; memset(&Params, 0, sizeof(Params)); do { - if (PyNumber_Check(arg1)) - { - tempargs = PyNumber_Long(arg1); - } - else if (PyUnicode_Check(arg1)) - { - /* Do a lookup but make sure the string is plain ASCII */ - tempargs = PyUnicode_AsASCIIString(arg1); - } - else - { - tempargs = PyObject_ASCII(arg1); - } - - if (tempargs != NULL) - { - if (PyNumber_Check(arg1)) - { - Params.Telecommand.InstanceNumber = PyLong_AsUnsignedLong(tempargs); - } - else - { - Params.Telecommand.InstanceNumber = - CFE_MissionLib_GetInstanceNumber(IntfDb->IntfDb, PyBytes_AsString(tempargs)); - } - - Py_DECREF(tempargs); - tempargs = NULL; - } - + Params.Telecommand.InstanceNumber = CFE_MissionLib_Python_ArgToInstanceNum(IntfDb->IntfDb, arg1); if (Params.Telecommand.InstanceNumber == 0) { - PyErr_Format(PyExc_ValueError, "Cannot convert %R to an instance number", arg1); + /* error already raised */ break; } - if (PyNumber_Check(arg2)) + Params.Telecommand.TopicId = CFE_MissionLib_Python_ArgToTopicId(IntfDb->IntfDb, arg2); + if (Params.Telecommand.TopicId == 0) { - tempargs = PyNumber_Long(arg2); - - Params.Telecommand.TopicId = PyLong_AsUnsignedLong(tempargs); - Py_DECREF(tempargs); - } - else - { - /* In theory this could accept a named topic as well, if needed */ - PyErr_Format(PyExc_TypeError, "TopicId needs to be an integer"); + /* error already raised */ break; } @@ -612,6 +652,78 @@ static PyObject *CFE_MissionLib_Python_Set_PubSub(PyObject *obj, PyObject *args) return result; } +static PyObject *CFE_MissionLib_Python_GetMsgId(PyObject *obj, PyObject *args) +{ + PyObject *arg1; + PyObject *arg2; + PyObject *result; + + union + { + EdsComponent_CFE_SB_Listener_t L; + EdsComponent_CFE_SB_Publisher_t P; + } Params; + EdsInterface_CFE_SB_SoftwareBus_PubSub_t PubSub; + uint16_t TopicId; + uint16_t InstanceNum; + + CFE_MissionLib_Python_Database_t *IntfDb = (CFE_MissionLib_Python_Database_t *)obj; + + if (!PyArg_UnpackTuple(args, "GetMsgId", 2, 2, &arg1, &arg2)) + { + return PyErr_Format(PyExc_RuntimeError, "Arguments expected: InstanceNumber, TopicId"); + } + + Py_INCREF(arg1); + Py_INCREF(arg2); + + result = NULL; + memset(&Params, 0, sizeof(Params)); + + do + { + InstanceNum = CFE_MissionLib_Python_ArgToInstanceNum(IntfDb->IntfDb, arg1); + if (InstanceNum == 0) + { + /* error already raised */ + break; + } + + TopicId = CFE_MissionLib_Python_ArgToTopicId(IntfDb->IntfDb, arg2); + if (TopicId == 0) + { + /* error already raised */ + break; + } + + /* + * There is not a direct way to tell if a topic is CMD or TLM, for now + * the approach has been to try both + */ + Params.L.Telecommand.InstanceNumber = InstanceNum; + Params.L.Telecommand.TopicId = TopicId; + if (!CFE_MissionLib_MapListenerComponent(&PubSub, &Params.L)) + { + Params.P.Telemetry.InstanceNumber = InstanceNum; + Params.P.Telemetry.TopicId = TopicId; + if (!CFE_MissionLib_MapPublisherComponent(&PubSub, &Params.P)) + { + /* If neither worked, the TopicId must be bad */ + PyErr_Format(PyExc_ValueError, "TopicID %R cannot be converted to MsgID", arg2); + break; + } + } + + result = PyLong_FromLong(PubSub.MsgId.Value); + + } while (0); + + Py_XDECREF(arg1); + Py_XDECREF(arg2); + + return result; +} + static PyObject *CFE_MissionLib_Python_Instance_iter(PyObject *obj) { CFE_MissionLib_Python_InstanceIterator_t *InstIter; From f6d803cd2efa4b4377ee310ede0ff8c7448c57cb Mon Sep 17 00:00:00 2001 From: Cameron Sykes Date: Wed, 15 Apr 2026 15:48:54 -0400 Subject: [PATCH 12/15] Fix #78, Modify Generators to Work in COSMOS Squashed commit of the following: commit fdb17daf117a75554aa05f4ec19a61ca35eabfe4 Merge: ea408df 702b38f Author: Cameron Sykes Date: Wed Apr 15 15:48:40 2026 -0400 Merge branch 'dev' of developer.nasa.gov:cFS/EdsLib into fix-78-cosmos-eds-db-errors commit ea408df7bfe0900158f2ccd01b1a85e4fe8e8e00 Merge: 5b0a780 2da725f Author: Cameron Sykes Date: Thu Mar 12 11:00:44 2026 -0400 Merge branch 'dev' of developer.nasa.gov:cFS/EdsLib into fix-78-cosmos-eds-db-errors commit 5b0a780b03b4715b825a6a8cd14dc6cef9ec39de Author: Cameron Sykes Date: Fri Feb 20 13:30:12 2026 -0500 Fix #78, Keep plural two-letter acronyms together commit bbf358b0b25997e38703606a4971570dee2001f9 Author: Cameron Sykes Date: Tue Feb 17 13:27:15 2026 -0500 Fix #78, Revert debugging commit 997376effbd5e16874bb62134f87a58c920bca79 Author: Cameron Sykes Date: Wed Feb 11 15:58:16 2026 -0500 Fix #78, WIP: test qualified name matching commit e25e66391c943ff48c0ef70f981ad940f7d0b628 Merge: 06e07df e399617 Author: Cameron Sykes Date: Thu Feb 5 09:54:15 2026 -0500 Merge branch 'dev' of developer.nasa.gov:cFS/EdsLib into fix-78-cosmos-eds-db-errors commit 06e07df41810d952fc40bf5df9b3488e528b00a3 Merge: 778daa2 f7c17d6 Author: Cameron Sykes Date: Wed Feb 4 16:23:43 2026 -0500 Merge branch 'dev' of developer.nasa.gov:cFS/EdsLib into fix-78-cosmos-eds-db-errors commit 778daa2326b4f45628db7470f6bf238012573fe4 Author: Cameron Sykes Date: Tue Feb 3 16:34:41 2026 -0500 Fix #78, update how tlm defs are made commit a9cc4720880958545fb0be1cdfa8b1cad1d5a91f Author: Cameron Sykes Date: Tue Feb 3 12:13:15 2026 -0500 Fix #78, update how commands are generated --- cfecfs/missionlib/eds/91-write_cosmos_txt.lua | 36 +++++-------------- tool/src/seds_runtime.lua | 7 ++++ 2 files changed, 15 insertions(+), 28 deletions(-) diff --git a/cfecfs/missionlib/eds/91-write_cosmos_txt.lua b/cfecfs/missionlib/eds/91-write_cosmos_txt.lua index 2556117..9f87eb3 100644 --- a/cfecfs/missionlib/eds/91-write_cosmos_txt.lua +++ b/cfecfs/missionlib/eds/91-write_cosmos_txt.lua @@ -306,23 +306,12 @@ local write_tlm_intf_items = function (output,ds,reqintf,msgid,argtype) tlmname = string.sub(tlmname, 1, -5) end - output:write(string.format("TELEMETRY %s %s %s_ENDIAN \"%s\"", global_fsw_title, tlmname, - endianness, reqintf.attributes.shortdescription or "Telemetry Message")) + -- Use the predefined values in the cfs_tlm_hdr() function for packet specifics + output:write(string.format("<%%= cfs_tlm_hdr(target_name, '%s', \"%s\") %%>", tlmname, + reqintf.attributes.shortdescription or "Telemetry Message")) output:start_group("") - - -- BACKWARD COMPATIBILITY: A proper identification of the packet involves multiple fields. - -- Historically these were merged into a single 16-bit "StreamID" value and that's what - -- appears to be done in existing/old cosmos DB files. This mimics that for now. There - -- should be a better/more correct way to do this. But for now, this just duplicates the - -- simplified (3x 16-bit UINT) view of the CCSDS v1 header. These should always be big-endian. - output:write(string.format("APPEND_ID_ITEM CCSDS_STREAMID 16 UINT 0x%04X \"CCSDS Packet Identification\" FORMAT_STRING \"0x%%04X\"%s", msgid.Value(), ccsds_append)) - output:write(string.format("APPEND_ITEM CCSDS_SEQUENCE 16 UINT \"CCSDS Packet Sequence Control\" FORMAT_STRING \"0x%%04X\"%s", ccsds_append)) - output:write(string.format("APPEND_ITEM CCSDS_LENGTH 16 UINT \"CCSDS Packet Data Length\"%s", ccsds_append)) - output:write(string.format("APPEND_ITEM SECONDS 32 UINT \"Whole number of Seconds since CFS Epoch\"%s", ccsds_append)) - output:write(string.format("APPEND_ITEM SUBSECS 16 UINT \"Fractional portion of Seconds since CFS Epoch\"%s", ccsds_append)) - -- Write the definition of the payload -- Do not output the basetype, only direct members (Payload) -- This is done by checking that refnode is non-nil @@ -348,22 +337,12 @@ local write_cmd_intf_params = function (output,ds,reqintf,msgid,cc) cmdname = string.sub(cmdname, 1, -5) end - output:write(string.format("COMMAND %s %s %s_ENDIAN \"%s\"", global_fsw_title, cmdname, - endianness, argtype.attributes.shortdescription or "Telecommand Message")) + -- Use the predefined values in the cfs_cmd_hdr() function for packet specifics + output:write(string.format("<%%= cfs_cmd_hdr(target_name, '%s', %d, \"%s\") %%>", cmdname, cc.value, + argtype.attributes.shortdescription or "Telecommand Message")) output:start_group("") - -- BACKWARD COMPATIBILITY: A proper identification of the packet involves multiple fields. - -- Historically these were merged into a single 16-bit "StreamID" value and that's what - -- appears to be done in existing/old cosmos DB files. This mimics that for now. There - -- should be a better/more correct way to do this. But for now, this just duplicates the - -- simplified (3x 16-bit UINT) view of the CCSDS v1 header. These should always be big-endian. - output:write(string.format("APPEND_ID_PARAMETER CCSDS_STREAMID 16 UINT MIN MAX 0x%04X \"CCSDS Packet Identification\" FORMAT_STRING \"0x%%04X\"%s", msgid.Value(), ccsds_append)) - output:write(string.format("APPEND_PARAMETER CCSDS_SEQUENCE 16 UINT MIN MAX 0xC000 \"CCSDS Packet Sequence Control\" FORMAT_STRING \"0x%%04X\"%s", ccsds_append)) - output:write(string.format("APPEND_PARAMETER CCSDS_LENGTH 16 UINT MIN MAX %d \"CCSDS Packet Data Length\"%s", math.ceil(argtype.resolved_size.bits / 8) - 7, ccsds_append)) - output:write(string.format("APPEND_PARAMETER CCSDS_FC 8 UINT MIN MAX %d \"CCSDS Command Function Code\"", cc.value)) - output:write(string.format("APPEND_PARAMETER CCSDS_CHECKSUM 8 UINT MIN MIN 0 \"Checksum\"")) - -- Write the definition of the payload -- Do not output the basetype, only direct members (Payload) -- This is done by checking that refnode is non-nil @@ -401,13 +380,14 @@ for _,instance in ipairs(SEDS.highlevel_interfaces) do local argtype = cmd.args[1].type if (sb_params) then - local file = "cosmos/" .. SEDS.to_filename(reqintf.name .. "_cosmos_intf.txt", ds.name) + local file = "cosmos/" .. SEDS.to_filename(reqintf.name .. "_def.txt", ds.name) local msgid = sb_params.PubSub.MsgId -- This is the actual hex msgid value local output if (reqintf.type.name == "Telecommand") then if (cmd.cc_list) then output = SEDS.output_open(file) + for _,cc in ipairs(cmd.cc_list) do write_cmd_intf_params(output,ds,reqintf,msgid,cc) output:add_whitespace(1) diff --git a/tool/src/seds_runtime.lua b/tool/src/seds_runtime.lua index 447cf25..67b62eb 100644 --- a/tool/src/seds_runtime.lua +++ b/tool/src/seds_runtime.lua @@ -110,6 +110,12 @@ SEDS.to_macro_name = function(ident) local result = string.gsub(ident, "%W+", "_") -- first scrub non alphanumeric characters result = string.gsub(result, "([%u%d])", ".%1") .. "." -- prefix capitalized letters + + -- Recombine plural acronyms that get broken up. + -- For example: ActiveAPs is active action points. + -- The "A" and "Ps" should not be separated + result = string.gsub(result, "(%u)%.(%us)", "%1%2") + result = string.upper(result) -- make ALL_UPPERCASE -- find multiple one-letter words, which most likely are some sort @@ -120,6 +126,7 @@ SEDS.to_macro_name = function(ident) while(true) do local temp = string.gsub(result, "[%.=](%w)%.", "=%1=", 1) + if (temp == result) then -- no replacements made, stop now break From 4f206d458ad678e06c302545dd18bffdde7e62b1 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Thu, 9 Apr 2026 13:02:14 -0400 Subject: [PATCH 13/15] Fix cFS/cFS#604, proof of concept for abstract test runner Replace the obsolete testexecutive with a python version that can potentially execute the same tests as the cosmos plugin does --- cfecfs/CMakeLists.txt | 7 +- cfecfs/testexecutive/CMakeLists.txt | 82 -- cfecfs/testexecutive/inc/testexec.h | 36 - .../modules/ci_to_lab_interface.c | 463 ----------- .../testexecutive/modules/remote_interface.c | 770 ------------------ cfecfs/testexecutive/src/test_interface.c | 580 ------------- cfecfs/testexecutive/src/testctrl.c | 313 ------- cfecfs/testexecutive/src/testexec.c | 299 ------- cfecfs/testrunner/.gitignore | 1 + cfecfs/testrunner/CMakeLists.txt | 29 + cfecfs/testrunner/Makefile | 17 + cfecfs/testrunner/cfs_app_test_groups.mk | 14 + .../testrunner/common/cfs_test_connection.py | 68 ++ cfecfs/testrunner/examples/runtest.py | 55 ++ cfecfs/testrunner/src/__init__.py | 12 + cfecfs/testrunner/src/core/controller_sync.py | 189 +++++ cfecfs/testrunner/src/core/data_model_sync.py | 116 +++ cfecfs/testrunner/src/core/timestamp.py | 103 +++ cfecfs/testrunner/src/core/transport_base.py | 29 + cfecfs/testrunner/src/test_group.py | 32 + cfecfs/testrunner/src/testrunner_adapter.py | 156 ++++ cfecfs/testrunner/src/testrunner_sync.py | 110 +++ .../src/transports/transport_udp.py | 84 ++ cfecfs/testrunner/stage_app_tests.cmake.in | 38 + 24 files changed, 1054 insertions(+), 2549 deletions(-) delete mode 100644 cfecfs/testexecutive/CMakeLists.txt delete mode 100644 cfecfs/testexecutive/inc/testexec.h delete mode 100644 cfecfs/testexecutive/modules/ci_to_lab_interface.c delete mode 100644 cfecfs/testexecutive/modules/remote_interface.c delete mode 100644 cfecfs/testexecutive/src/test_interface.c delete mode 100644 cfecfs/testexecutive/src/testctrl.c delete mode 100644 cfecfs/testexecutive/src/testexec.c create mode 100644 cfecfs/testrunner/.gitignore create mode 100644 cfecfs/testrunner/CMakeLists.txt create mode 100644 cfecfs/testrunner/Makefile create mode 100644 cfecfs/testrunner/cfs_app_test_groups.mk create mode 100644 cfecfs/testrunner/common/cfs_test_connection.py create mode 100644 cfecfs/testrunner/examples/runtest.py create mode 100644 cfecfs/testrunner/src/__init__.py create mode 100644 cfecfs/testrunner/src/core/controller_sync.py create mode 100644 cfecfs/testrunner/src/core/data_model_sync.py create mode 100644 cfecfs/testrunner/src/core/timestamp.py create mode 100644 cfecfs/testrunner/src/core/transport_base.py create mode 100644 cfecfs/testrunner/src/test_group.py create mode 100644 cfecfs/testrunner/src/testrunner_adapter.py create mode 100644 cfecfs/testrunner/src/testrunner_sync.py create mode 100644 cfecfs/testrunner/src/transports/transport_udp.py create mode 100644 cfecfs/testrunner/stage_app_tests.cmake.in diff --git a/cfecfs/CMakeLists.txt b/cfecfs/CMakeLists.txt index f82474d..421f1e8 100644 --- a/cfecfs/CMakeLists.txt +++ b/cfecfs/CMakeLists.txt @@ -24,9 +24,4 @@ add_subdirectory(missionlib) add_subdirectory(eds2cfetbl) add_subdirectory(util) - -# the test executive is an optional component to provide a black-box -# style test framework. It is built using OSAL and UT-Assert. -if (ENABLE_EDS_TESTEXEC) - add_subdirectory(testexecutive) -endif (ENABLE_EDS_TESTEXEC) +add_subdirectory(testrunner) diff --git a/cfecfs/testexecutive/CMakeLists.txt b/cfecfs/testexecutive/CMakeLists.txt deleted file mode 100644 index 26afdb7..0000000 --- a/cfecfs/testexecutive/CMakeLists.txt +++ /dev/null @@ -1,82 +0,0 @@ -# -# LEW-19710-1, CCSDS SOIS Electronic Data Sheet Implementation -# -# Copyright (c) 2020 United States Government as represented by -# the Administrator of the National Aeronautics and Space Administration. -# All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# Functional test (black box) framework - -include_directories(${MISSION_BINARY_DIR}/inc) -include_directories(${osal_MISSION_DIR}/src/os/inc) -include_directories(${osal_MISSION_DIR}/ut_assert/inc) -include_directories(${OSAL_INCLUDEDIR}) -include_directories(${EDSLIB_FSW_SOURCE_DIR}/inc) -include_directories(${EDSLIB_LUABINDINGS_SOURCE_DIR}/inc) -include_directories(${EDS_CFECFS_MISSIONLIB_FSW_SOURCE_DIR}/inc) -include_directories(${EDS_CFECFS_MISSIONLIB_LUABINDINGS_SOURCE_DIR}/inc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc) -include_directories(${LUALIB_INCLUDE_DIRS}) -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -add_definitions(-Wall -Werror) -set(TESTEXEC_INTF_MODULES Remote) - -if (DEFINED to_lab_MISSION_DIR AND DEFINED ci_lab_MISSION_DIR) - list(APPEND TESTEXEC_INTF_MODULES CI_TO_LAB) -endif() - -set(TESTEXEC_LIBS - edslib_runtime_static - cfe_missionlib - cfe_missionlib_runtime_static - cfe_edsdb_static - cfe_missionlib_sb_dispatchdb_static -) - -set(TESTEXEC_INTF_SRCFILES) -set(TESTEXEC_INTF_MODLIST) -foreach (MOD ${TESTEXEC_INTF_MODULES}) - string(TOLOWER ${MOD} LMOD) - list(APPEND TESTEXEC_INTF_SRCFILES modules/${LMOD}_interface.c) - list(APPEND TESTEXEC_INTF_MODLIST "TESTEXEC_MODULE(${MOD})\n") -endforeach (MOD ${TESTEXEC_INTF_MODULES}) -file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testexec_compiledin_modules.h.tmp" - ${TESTEXEC_INTF_MODLIST}) -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${CMAKE_CURRENT_BINARY_DIR}/testexec_compiledin_modules.h.tmp" - "${CMAKE_CURRENT_BINARY_DIR}/testexec_compiledin_modules.h") - - -add_executable(testexec src/testexec.c src/test_interface.c ${TESTEXEC_INTF_SRCFILES}) -add_dependencies(testexec edstool-execute) -target_link_libraries(testexec - ut_bsp - ut_assert - osal - edslib_lua - cfe_missionlib_lua_softwarebus - ${TESTEXEC_LIBS} -) - -add_executable(testctrl src/testctrl.c) -add_dependencies(testctrl edstool-execute) -target_link_libraries(testctrl - osal - ${TESTEXEC_LIBS} -) - -install(TARGETS testexec testctrl DESTINATION host) diff --git a/cfecfs/testexecutive/inc/testexec.h b/cfecfs/testexecutive/inc/testexec.h deleted file mode 100644 index 46088c8..0000000 --- a/cfecfs/testexecutive/inc/testexec.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * LEW-19710-1, CCSDS SOIS Electronic Data Sheet Implementation - * - * Copyright (c) 2020 United States Government as represented by - * the Administrator of the National Aeronautics and Space Administration. - * All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * \file testexec.h - * \ingroup testexecutive - * \author joseph.p.hickey@nasa.gov - * - * Test executive header file - */ - -#ifndef _TESTEXEC_H_ -#define _TESTEXEC_H_ - -int TestIntf_Udp_Create(struct lua_State *lua); -int TestIntf_Remote_Create(struct lua_State *lua); -int TestIntf_GetFactory(struct lua_State *lua); - -#endif /* _TESTEXEC_H_ */ diff --git a/cfecfs/testexecutive/modules/ci_to_lab_interface.c b/cfecfs/testexecutive/modules/ci_to_lab_interface.c deleted file mode 100644 index 840fd26..0000000 --- a/cfecfs/testexecutive/modules/ci_to_lab_interface.c +++ /dev/null @@ -1,463 +0,0 @@ -/* - * LEW-19710-1, CCSDS SOIS Electronic Data Sheet Implementation - * - * Copyright (c) 2020 United States Government as represented by - * the Administrator of the National Aeronautics and Space Administration. - * All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * \file ci_to_lab_interface.c - * \ingroup testexecutive - * \author joseph.p.hickey@nasa.gov - * - * Implementation of test executive - */ - -#include -#include /* memset() */ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "cfe_mission_eds_parameters.h" -#include "cfe_mission_eds_interface_parameters.h" -#include "edslib_displaydb.h" -#include "cfe_missionlib_runtime.h" -#include "cfe_missionlib_api.h" -#include "edslib_lua_objects.h" -#include "cfe_missionlib_lua_softwarebus.h" - -#include "testexec.h" -#include "to_lab_eds_datatypes.h" - -#define TO_LAB_BASE_PORT 2234 -#define CI_LAB_BASE_PORT 1234 - -#define UDP_NET_BUFFER_SIZE 8192 - -typedef struct -{ - EdsInterface_CFE_SB_SoftwareBus_PubSub_t TargetApp; - struct sockaddr_in LocalAddr; - struct sockaddr_in TargetAddr; - struct timespec InterPacketDelay; - int SocketId; - luaL_Buffer TempBuf; -} TestIntf_CI_TO_LAB_Connection_t; - -static int TestIntf_CI_TO_LAB_Send(lua_State *lua) -{ - TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - const char *Data = luaL_checkstring(lua, 2); - uint32_t DataLength = lua_rawlen(lua, 2); - - printf("%s():\n", __func__); - EdsLib_Generate_Hexdump(stdout, (const uint8_t *)Data, 0, DataLength); - printf("\n"); - - sendto(Conn->SocketId, Data, DataLength, 0, (struct sockaddr *)&Conn->TargetAddr, sizeof(Conn->TargetAddr)); - - clock_nanosleep(CLOCK_REALTIME, 0, &Conn->InterPacketDelay, NULL); - - return 0; -} - -static int TestIntf_CI_TO_LAB_Wait(lua_State *lua) -{ - TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - int32_t Timeout = luaL_optinteger(lua, 2, -1); - fd_set rdfd; - struct timeval tv; - struct timeval *ptv; - - if (Timeout >= 0) - { - tv.tv_sec = Timeout / 1000; - tv.tv_usec = 1000 * (Timeout % 1000); - ptv = &tv; - } - else - { - ptv = NULL; - } - - FD_ZERO(&rdfd); - FD_SET(Conn->SocketId, &rdfd); - - if (select(1 + Conn->SocketId, &rdfd, NULL, NULL, ptv) < 0) - { - lua_pushboolean(lua, 0); - } - else - { - lua_pushboolean(lua, 1); - } - - return 1; -} - -static int TestIntf_CI_TO_LAB_Poll(lua_State *lua) -{ - TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - ssize_t Length; - - lua_pushstring(lua, "Message"); - luaL_buffinit(lua, &Conn->TempBuf); - - Length = - recv(Conn->SocketId, luaL_prepbuffsize(&Conn->TempBuf, UDP_NET_BUFFER_SIZE), UDP_NET_BUFFER_SIZE, MSG_DONTWAIT); - - if (Length <= 0) - { - luaL_pushresultsize(&Conn->TempBuf, 0); - return 0; - } - - luaL_pushresultsize(&Conn->TempBuf, Length); - return 2; -} - -static int TestIntf_CI_TO_LAB_CheckSubscribeEvent(lua_State *lua) -{ - const char *AppName; - - lua_settop(lua, 1); - luaL_checkudata(lua, 1, "EdsLib_Object"); - - lua_getfield(lua, 1, "Payload"); - lua_getfield(lua, 2, "PacketID"); - lua_getfield(lua, 3, "AppName"); - lua_call(lua, 0, 1); - AppName = lua_tostring(lua, -1); - if (AppName == NULL || strcmp(AppName, "TO_LAB_APP") != 0) - { - return 0; - } - - lua_getfield(lua, 3, "EventID"); - lua_call(lua, 0, 1); - - if (lua_compare(lua, lua_upvalueindex(1), -1, LUA_OPEQ)) - { - printf("%s(): TRUE\n", __func__); - lua_settop(lua, 1); - return 1; - } - - return 0; -} - -static int TestIntf_CI_TO_LAB_DoSubscription(lua_State *lua) -{ - int IsSubscribe; - luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - - lua_settop(lua, 3); - lua_getglobal(lua, "EdsDB"); /* top@ 4 */ - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Send); /* top@ 5 */ - lua_pushvalue(lua, 1); /* top@ 6 */ - lua_getfield(lua, 4, "Encode"); /* top@ 7 */ - lua_getfield(lua, 4, "NewMessage"); /* top@ 8 */ - - lua_getuservalue(lua, 1); /* top@ 9 */ - lua_getfield(lua, -1, "Interface"); /* top@ 10 */ - lua_remove(lua, -2); /* uservalue, leave interface object @9 */ - - /* Push the operation type - this is either "AddPacket" (subscribe) or "RemovePacket" (unsubscribe) */ - lua_pushvalue(lua, lua_upvalueindex(1)); /* top@ 10 */ - IsSubscribe = (strcmp(lua_tostring(lua, -1), "AddPacket") == 0); - lua_call(lua, 2, 1); /* Call EdsDB.NewMessage(intf, command) - result @8 */ - - lua_getfield(lua, -1, "Payload"); /* Payload @9 */ - lua_pushinteger(lua, 5); - lua_setfield(lua, -2, "BufLimit"); - - /* Incorporate any user-specified attributes */ - if (lua_istable(lua, 3)) - { - lua_pushnil(lua); - while (lua_next(lua, 3)) - { - lua_pushvalue(lua, -2); - lua_insert(lua, -2); - lua_settable(lua, 9); - } - } - - /* Set the "MsgId" parameter to be the second argument */ - lua_pushvalue(lua, 2); - lua_setfield(lua, 9, "MsgId"); - lua_pop(lua, 1); - - lua_call(lua, 1, 1); /* Call EdsDB.Encode(msg) - result@ 7 */ - - /* Send the subscription/unsubscription message via the normal Send() function */ - lua_call(lua, 2, 0); /* Call TestIntf_CI_TO_LAB_Send() - top@ 4 */ - - /* - * On subscribe requests, it should delay until the subscription takes effect. - * Return a wait table value that specifies to wait for CFE_EVS EVENTMSG - * further specify a callback function that looks specifically for TO_LAB_APP event 15 (subscribe) - */ - lua_getuservalue(lua, 1); /* top@ 5 */ - lua_newtable(lua); /* top@ 6 */ - lua_newtable(lua); /* top@ 7 */ - lua_getfield(lua, 5, "EventIntf"); - lua_setfield(lua, 7, "Interface"); - - /* - * JPHFIX: the magic numbers here are the event IDs for subscribe/unsubscribe. - * These should be defined as an enumeration in the EDS to clean this up. - */ - if (IsSubscribe) - { - lua_pushinteger(lua, 15); /* subscribe event id */ - } - else - { - lua_pushinteger(lua, 16); /* unsubscribe event id */ - } - - lua_pushcclosure(lua, TestIntf_CI_TO_LAB_CheckSubscribeEvent, 1); - lua_setfield(lua, 7, "Callback"); - lua_rawseti(lua, 6, 1); - lua_pushinteger(lua, 5000); - - return 2; -} - -static int TestIntf_CI_TO_LAB_Destroy(lua_State *lua) -{ - TestIntf_CI_TO_LAB_Connection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_CI_TO_LAB_Connection"); - - if (Conn->SocketId >= 0) - { - close(Conn->SocketId); - Conn->SocketId = -1; - } - - return 0; -} - -int TestIntf_CI_TO_LAB_Create(lua_State *lua) -{ - uint16_t TargetNum = luaL_checkinteger(lua, 1); - uint16_t LocalPort = 0; - uint16_t TargetPort = 0; - uint32_t InterPacketDelay = 25; - const char *LocalIP = NULL; - const char *TargetIP = NULL; - TestIntf_CI_TO_LAB_Connection_t *Conn; - - if (lua_isstring(lua, 2)) - { - TargetIP = lua_tostring(lua, 2); - } - else if (lua_istable(lua, 2)) - { - /* Trim the stack to 2 entries in case extra args were passed */ - lua_settop(lua, 2); - - lua_getfield(lua, 2, "TargetIP"); - TargetIP = lua_tostring(lua, -1); - lua_getfield(lua, 2, "LocalIP"); - LocalIP = lua_tostring(lua, -1); - - /* - * Note that these strings cannot be popped yet, - * they must sit on the stack until we are done with - * the C strings above - */ - - lua_getfield(lua, 2, "TargetPort"); - if (lua_isnumber(lua, -1)) - { - TargetPort = lua_tointeger(lua, -1); - } - lua_pop(lua, 1); - - lua_getfield(lua, 2, "TargetIP"); - if (lua_isnumber(lua, -1)) - { - LocalPort = lua_tointeger(lua, -1); - } - lua_pop(lua, 1); - - lua_getfield(lua, 2, "InterPacketDelay"); - if (lua_isnumber(lua, -1)) - { - InterPacketDelay = lua_tointeger(lua, -1); - } - lua_pop(lua, 1); - } - - /* - * Always adjust the stack to the same level so absolute refs can be used. - */ - lua_settop(lua, 4); - - if (TargetIP == NULL) - { - /* If user did not specify target, assume it is running on localhost */ - TargetIP = "127.0.0.1"; - } - - if (LocalIP == NULL) - { - /* If user did not specify target, assume it is running on localhost */ - LocalIP = "127.0.0.1"; - } - - if (TargetPort == 0) - { - /* If unspecified, send to the default UDP port that CI_LAB listens on */ - TargetPort = CI_LAB_BASE_PORT + TargetNum - 1; - } - - if (LocalPort == 0) - { - /* If unspecified, bind to the default UDP port that TO_LAB sends to */ - LocalPort = TO_LAB_BASE_PORT + TargetNum - 1; - } - - /* index 5 -- this is the object that will be returned */ - Conn = lua_newuserdata(lua, sizeof(TestIntf_CI_TO_LAB_Connection_t)); - if (luaL_newmetatable(lua, "TestIntf_CI_TO_LAB_Connection")) - { - lua_newtable(lua); - - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Send); - lua_setfield(lua, -2, "Send"); - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Wait); - lua_setfield(lua, -2, "Wait"); - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Poll); - lua_setfield(lua, -2, "Poll"); - - lua_pushstring(lua, "AddPacket"); - lua_pushcclosure(lua, TestIntf_CI_TO_LAB_DoSubscription, 1); - lua_setfield(lua, -2, "Subscribe"); - lua_pushstring(lua, "RemovePacket"); - lua_pushcclosure(lua, TestIntf_CI_TO_LAB_DoSubscription, 1); - lua_setfield(lua, -2, "Unsubscribe"); - - lua_setfield(lua, -2, "__index"); - - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Destroy); - lua_setfield(lua, -2, "__gc"); - } - lua_setmetatable(lua, -2); - - memset(Conn, 0, sizeof(*Conn)); - - Conn->SocketId = socket(PF_INET, SOCK_DGRAM, 0); - if (Conn->SocketId < 0) - { - return luaL_error(lua, "Error opening socket: %s", strerror(errno)); - } - - Conn->InterPacketDelay.tv_sec = InterPacketDelay / 1000; - Conn->InterPacketDelay.tv_nsec = 1000000 * (InterPacketDelay % 1000); - Conn->LocalAddr.sin_family = AF_INET; - Conn->TargetAddr.sin_family = AF_INET; - if (inet_pton(AF_INET, TargetIP, &Conn->TargetAddr.sin_addr) <= 0) - { - return luaL_argerror(lua, 2, "Invalid target IP address"); - } - if (inet_pton(AF_INET, LocalIP, &Conn->LocalAddr.sin_addr) <= 0) - { - return luaL_argerror(lua, 2, "Invalid local IP address"); - } - - Conn->LocalAddr.sin_port = htons(LocalPort); - Conn->TargetAddr.sin_port = htons(TargetPort); - - if (bind(Conn->SocketId, (struct sockaddr *)&Conn->LocalAddr, sizeof(Conn->LocalAddr)) < 0) - { - return luaL_error(lua, "Failed to bind: %s", strerror(errno)); - } - - lua_pushcfunction(lua, TestIntf_CI_TO_LAB_Send); /* top@ 6 */ - lua_getglobal(lua, "EdsDB"); /* top@ 7 */ - lua_getfield(lua, -1, "Encode"); - lua_getfield(lua, -2, "NewMessage"); - lua_getfield(lua, -3, "GetInterface"); - - lua_pushvalue(lua, 5); /* Connection object - top@ 11 */ - lua_replace(lua, 7); /* Replace the EdsDB object @7 - top @10 */ - - /* - * Top of Lua stack should currently be arranged as follows: - * @ 6 - TestIntf_CI_TO_LAB_Send() function - * @ 7 - Connection object (1st argument to TestIntf_CI_TO_LAB_Send) - * @ 8 - EdsDB.Encode() function (return value is 2nd argument to TestIntf_CI_TO_LAB_Send) - * @ 9 - EdsDB.NewMessage() function (return value is 1st argument to EdsDB.Encode) - * @ 10 - EdsDB.GetInterface() function (return value is argument to EdsDB.NewMessage) - */ - - /* - * Save the interface object for future use. - * Create a table to use as the uservalue and set this as the "Interface" field in it. - * The CFE_EVS "EVENT_MSG" interface is relevant to check for subscription events. - */ - lua_newtable(lua); /* top @11 */ - lua_pushvalue(lua, -2); /* GetInterface function - top@ 12 */ - lua_pushstring(lua, "CFE_EVS/Application/EVENT_MSG"); /* top@ 13 */ - lua_call(lua, 1, 1); /* Call GetInterface("CFE_EVS/Application/EVENT_MSG") - result@ 12 */ - if (lua_type(lua, -1) != LUA_TUSERDATA) - { - return luaL_error(lua, "Unknown interface \'CFE_EVS/Application/EVENT_MSG\'"); - } - lua_setfield(lua, -2, "EventIntf"); /* Set object as the "EventIntf" field within the table - top@ 11 */ - lua_pushvalue(lua, -2); /* GetInterface function - top@ 12 */ - lua_pushstring(lua, "TO_LAB/Application/CMD"); /* top@ 13 */ - lua_call(lua, 1, 1); /* Call GetInterface("TO_LAB/Application/CMD") - result@ 12 */ - if (lua_type(lua, -1) != LUA_TUSERDATA) - { - return luaL_error(lua, "Unknown interface \'TO_LAB/Application/CMD\'"); - } - lua_pushvalue(lua, -1); /* save a copy of the intf for next call to NewMessage */ - lua_replace(lua, 10); - lua_setfield(lua, -2, "Interface"); /* Set object as the "Interface" field within the table - top@ 11 */ - lua_setuservalue(lua, 7); /* Set the table as the uservalue for the returned object - top@ 10 */ - - /* - * Create an "OutputEnable" message based on the interface - */ - lua_pushstring(lua, "EnableOutput"); /* top@ 11 */ - lua_call(lua, 2, 1); /* Call NewMessage(intf, "OutputEnable") - result@ 9 */ - - /* Set the Payload.dest_IP member to be the value specified by LocalIP */ - lua_getfield(lua, -1, "Payload"); /* top@ 10 */ - lua_pushstring(lua, LocalIP); /* top@ 11 */ - lua_setfield(lua, -2, "dest_IP"); /* top@ 10 */ - lua_pop(lua, 1); /* top@ 9 */ - - lua_call(lua, 1, 1); /* Call Encode(msg) - result@ 8 */ - lua_call(lua, 2, 0); /* Call TestIntf_CI_TO_LAB_Send(msg) - no return value - top@ 5 */ - - /* Stack top should be back at 5 (the connection object) */ - - return 1; -} /* end TestIntf_CI_TO_LAB_Create */ diff --git a/cfecfs/testexecutive/modules/remote_interface.c b/cfecfs/testexecutive/modules/remote_interface.c deleted file mode 100644 index c3bc4e9..0000000 --- a/cfecfs/testexecutive/modules/remote_interface.c +++ /dev/null @@ -1,770 +0,0 @@ -/* - * LEW-19710-1, CCSDS SOIS Electronic Data Sheet Implementation - * - * Copyright (c) 2020 United States Government as represented by - * the Administrator of the National Aeronautics and Space Administration. - * All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * \file remote_interface.c - * \ingroup testexecutive - * \author joseph.p.hickey@nasa.gov - * - * Implementation of test executive - */ - -#include -#include /* memset() */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "testexec.h" - -#include "cfe_mission_eds_parameters.h" -#include "cfe_mission_eds_interface_parameters.h" -#include "edslib_displaydb.h" -#include "cfe_missionlib_runtime.h" -#include "cfe_missionlib_api.h" -#include "edslib_lua_objects.h" -#include "cfe_missionlib_lua_softwarebus.h" - -/* Size to use for ring buffer - keep as power of 2 for masking */ -#define REMOTE_BUFFER_SIZE 0x8000 -#define REMOTE_BUFFER_MASK 0x7FFF -#define SEND_BUFFER_SIZE 0x4000 - -typedef struct -{ - pid_t pid; - int InFd; - int OutFd; - char SendBuffer[SEND_BUFFER_SIZE]; - char RecvBuffer[REMOTE_BUFFER_SIZE]; - size_t RecvBufWrPos; - size_t RecvBufChkPos; - size_t RecvBufRdPos; - -} TestIntf_RemoteConnection_t; - -static void TestIntf_Poll_Subprocess(TestIntf_RemoteConnection_t *Conn) -{ - if (Conn->pid > 0) - { - if (waitpid(Conn->pid, NULL, WNOHANG) == Conn->pid) - { - Conn->pid = -1; - - if (Conn->InFd >= 0) - { - close(Conn->InFd); - Conn->InFd = -1; - } - - if (Conn->OutFd >= 0) - { - close(Conn->OutFd); - Conn->OutFd = -1; - } - } - } -} - -static int TestIntf_Remote_ObjToString(lua_State *lua) -{ - switch (lua_type(lua, 1)) - { - case LUA_TSTRING: - { - /* - * Note this string could contain embedded special chars (including nulls) - * as well as newlines and other binary data which will throw off the parser. - * To be safe all strings will be base64 encoded. It will increase the length - * by 4/3 but it will be guaranteed to get through intact. - */ - const uint8_t *Data = (const uint8_t *)lua_tostring(lua, 1); - uint32_t DataLength = 8 * lua_rawlen(lua, 1); - uint32_t EncodedLength = (DataLength + 32) / 6; - char *Block; - luaL_Buffer Buf; - - luaL_buffinit(lua, &Buf); - luaL_addstring(&Buf, "Base64("); - lua_pushinteger(lua, DataLength); - luaL_addvalue(&Buf); - luaL_addstring(&Buf, ",\""); - Block = luaL_prepbuffsize(&Buf, EncodedLength); - EdsLib_DisplayDB_Base64Encode(Block, EncodedLength, Data, DataLength); - luaL_addsize(&Buf, strlen(Block)); - luaL_addstring(&Buf, "\")"); - luaL_pushresult(&Buf); - break; - } - case LUA_TNUMBER: - case LUA_TBOOLEAN: - { - luaL_tolstring(lua, 1, NULL); - break; - } - case LUA_TTABLE: - { - lua_pushstring(lua, "{"); - lua_pushnil(lua); - while (lua_next(lua, 1)) - { - if (lua_checkstack(lua, 3) && lua_type(lua, -2) == LUA_TSTRING) - { - lua_pushcfunction(lua, TestIntf_Remote_ObjToString); - lua_insert(lua, -2); - lua_call(lua, 1, 1); - lua_pushstring(lua, "="); - lua_insert(lua, -2); - lua_pushstring(lua, ","); - lua_pushvalue(lua, -4); - } - } - if (lua_gettop(lua) > 2) - { - lua_pop(lua, 1); - } - lua_pushstring(lua, "}"); - lua_concat(lua, lua_gettop(lua) - 1); - break; - } - default: - lua_pushstring(lua, "nil"); - break; - } - - return 1; -} - -static int TestIntf_Remote_DoAction(lua_State *lua) -{ - TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - char *BufPtr; - size_t BufLen; - ssize_t wrsz; - int narg; - int idx; - - TestIntf_Poll_Subprocess(Conn); - if (Conn->OutFd < 0) - { - return luaL_error(lua, "Remote subprocess not running"); - } - - BufLen = - snprintf(Conn->SendBuffer, sizeof(Conn->SendBuffer), "DoAction(\"%s\"", lua_tostring(lua, lua_upvalueindex(1))); - - if (BufLen < sizeof(Conn->SendBuffer)) - { - BufPtr = &Conn->SendBuffer[BufLen + 1]; - } - else - { - BufPtr = NULL; - } - - narg = lua_gettop(lua); - for (idx = 2; idx <= narg && BufPtr != NULL; ++idx) - { - lua_pushcfunction(lua, TestIntf_Remote_ObjToString); - lua_pushvalue(lua, idx); - lua_call(lua, 1, 1); - - /* - * note that memccpy() returns a pointer to the byte after the null char, - * so we need to back it up by one to overwrite the null and append the string. - * for subsequent args we need to replace this with a comma separator. - */ - *(BufPtr - 1) = ','; - BufLen = BufPtr - Conn->SendBuffer; - BufPtr = memccpy(BufPtr, lua_tostring(lua, -1), 0, sizeof(Conn->SendBuffer) - BufLen); - } - - if (BufPtr != NULL) - { - --BufPtr; - BufLen = BufPtr - Conn->SendBuffer; - BufPtr = memccpy(BufPtr, ")\n", 0, sizeof(Conn->SendBuffer) - BufLen); - } - - if (BufPtr == NULL) - { - return luaL_error(lua, "Remote request too long"); - } - - BufLen = BufPtr - Conn->SendBuffer; - BufPtr = Conn->SendBuffer; - while (BufLen > 0) - { - wrsz = write(Conn->OutFd, BufPtr, BufLen); - if (wrsz == 0) - { - lua_pushstring(lua, "zero length write"); - break; - } - if (wrsz > 0) - { - BufPtr += wrsz; - BufLen -= wrsz; - } - else if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) - { - lua_pushstring(lua, strerror(errno)); - break; - } - } - - if (BufLen > 0) - { - if (lua_gettop(lua) == narg) - { - lua_pushstring(lua, "incomplete write"); - } - return lua_error(lua); - } - - return 0; -} - -const char *TestIntf_Remote_RecvBuffReader(lua_State *lua, void *Data, size_t *ChunkSize) -{ - TestIntf_RemoteConnection_t *Conn = Data; - const char *BufPtr; - - if (Conn->RecvBufRdPos == Conn->RecvBufChkPos) - { - BufPtr = NULL; - *ChunkSize = 0; - } - else - { - size_t StartPos = Conn->RecvBufRdPos & REMOTE_BUFFER_MASK; - size_t EndPos = Conn->RecvBufChkPos & REMOTE_BUFFER_MASK; - BufPtr = &Conn->RecvBuffer[StartPos]; - if (StartPos < EndPos) - { - /* The whole chunk may be returned */ - *ChunkSize = EndPos - StartPos; - } - else - { - *ChunkSize = sizeof(Conn->RecvBuffer) - StartPos; - } - Conn->RecvBufRdPos += *ChunkSize; - } - - return BufPtr; -} - -static int TestIntf_Remote_ExecuteAction(lua_State *lua) -{ - int tbl = lua_upvalueindex(1); - - while (lua_gettop(lua) > 0) - { - printf("%s(): set %s\n", __func__, lua_typename(lua, lua_type(lua, -1))); - lua_rawseti(lua, tbl, 1 + lua_rawlen(lua, tbl)); - } - - return 0; -} - -static int TestIntf_Remote_Base64(lua_State *lua) -{ - uint32_t DataLengthBits = luaL_checkinteger(lua, 1); - const char *EncodedStr = luaL_checkstring(lua, 2); - uint32_t DataLengthBytes = (DataLengthBits + 7) / 8; - luaL_Buffer Buf; - - luaL_buffinit(lua, &Buf); - EdsLib_DisplayDB_Base64Decode((uint8_t *)luaL_prepbuffsize(&Buf, DataLengthBytes), DataLengthBits, EncodedStr); - luaL_addsize(&Buf, DataLengthBytes); - luaL_pushresult(&Buf); - return 1; -} - -static int TestIntf_Remote_Wait(lua_State *lua) -{ - TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - int32_t Timeout = luaL_optinteger(lua, 2, -1); - struct timeval stime; - struct timeval *stptr; - fd_set rdfd; - - printf("%s()\n", __func__); - - TestIntf_Poll_Subprocess(Conn); - if (Conn->InFd < 0) - { - lua_pushboolean(lua, 0); - } - else - { - if (Timeout >= 0) - { - stime.tv_sec = Timeout / 1000; - stime.tv_usec = 1000 * (Timeout % 1000); - stptr = &stime; - } - else - { - stptr = NULL; - } - - FD_ZERO(&rdfd); - FD_SET(Conn->InFd, &rdfd); - - if (select(1 + Conn->InFd, &rdfd, NULL, NULL, stptr) < 0) - { - if (errno != EINTR) - { - /* error reading the filehandle */ - fprintf(stderr, "%s(): select: %s\n", __func__, strerror(errno)); - } - lua_pushboolean(lua, 0); - } - else - { - lua_pushboolean(lua, 1); - } - } - - return 1; -} - -static int TestIntf_Remote_Poll(lua_State *lua) -{ - TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - int idx; - size_t TempPos; - ssize_t rdsz; - - lua_settop(lua, 1); - lua_newtable(lua); /* idx 2 - action table (initially empty) */ - - /* - * First poll that the subprocess is still alive. - * If it has ended, we can close the file handles. - */ - TestIntf_Poll_Subprocess(Conn); - - while (1) - { - /* - * check for anything interesting already in the local buffer - * before reading more from the pipe. - */ - while (Conn->RecvBufChkPos != Conn->RecvBufWrPos) - { - TempPos = Conn->RecvBufChkPos & REMOTE_BUFFER_MASK; - ++Conn->RecvBufChkPos; - - if (Conn->RecvBuffer[TempPos] == '\n') - { - /* - * Check that the buffer is not overrun -- if so the data is all garbage - * and must be dropped. - */ - if ((Conn->RecvBufWrPos - Conn->RecvBufRdPos) < sizeof(Conn->RecvBuffer)) - { - if (lua_gettop(lua) == 2) - { - /* Save the global registry and replace it with a temporary one */ - lua_rawgeti(lua, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); /* idx 3 - saved global environment */ - lua_newtable(lua); /* idx 4 - temp global state */ - lua_pushcfunction(lua, TestIntf_Remote_Base64); - lua_setfield(lua, -2, "Base64"); - lua_pushvalue(lua, 2); - lua_pushcclosure(lua, TestIntf_Remote_ExecuteAction, 1); - lua_setfield(lua, -2, "DoAction"); - lua_rawseti(lua, - LUA_REGISTRYINDEX, - LUA_RIDX_GLOBALS); /* Set as temp/protected global environment */ - } - - if (lua_load(lua, TestIntf_Remote_RecvBuffReader, Conn, "in", "t") != LUA_OK) - { - /* In this case Lua should have pushed an error message */ - fprintf(stderr, "%s(): Load error: %s\n", __func__, luaL_tolstring(lua, -1, NULL)); - lua_pop(lua, 2); - } - else if (lua_pcall(lua, 0, 0, 0) != LUA_OK) - { - fprintf(stderr, "%s(): %s\n", __func__, luaL_tolstring(lua, -1, NULL)); - lua_pop(lua, 2); - } - } - - /* - * Normally this would have consumed all data in the buffer. - * If not that means data is being dropped and it is probably worth a note. - */ - if (Conn->RecvBufRdPos != Conn->RecvBufChkPos) - { - fprintf(stderr, "%s(): dropped %zu bytes\n", __func__, Conn->RecvBufChkPos - Conn->RecvBufRdPos); - Conn->RecvBufRdPos = Conn->RecvBufChkPos; - } - - if (lua_rawlen(lua, 2) > 0) - { - /* Action(s) got added to the table, so exit the loop now */ - break; - } - } - } - - if (lua_rawlen(lua, 2) > 0) - { - /* Action(s) got added to the table, so exit the loop now */ - break; - } - - if (Conn->InFd < 0) - { - /* No valid filehandle to read, nothing more to do */ - break; - } - - /* - * Read additional data. - * Do not read more than 25% of the buffer in one shot - - * this makes it less likely to overrun in case the remote side - * starts spewing data, as we can consume some data before reading more. - * - * The filehandle should be set to nonblocking (O_NONBLOCK flag) - * so that there is no risk of getting stuck here. - */ - TempPos = Conn->RecvBufWrPos & REMOTE_BUFFER_MASK; - rdsz = sizeof(Conn->RecvBuffer) - TempPos; - if (rdsz > (sizeof(Conn->RecvBuffer) / 4)) - { - rdsz = (sizeof(Conn->RecvBuffer) / 4); - } - fprintf(stderr, "%s() about to read %ld\n", __func__, (long)rdsz); - rdsz = read(Conn->InFd, &Conn->RecvBuffer[TempPos], rdsz); - fprintf(stderr, "%s() read got %ld\n", __func__, (long)rdsz); - - if (rdsz == 0) - { - /* this is indicative of an EOF condition. - * for a pipe this means the subprocess must have ended. */ - break; - } - - if (rdsz > 0) - { - Conn->RecvBufWrPos += rdsz; - } - else - { - if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) - { - fprintf(stderr, "%s(): read: %s\n", __func__, strerror(errno)); - } - break; - } - } - - if (lua_gettop(lua) == 3) - { - /* Restore the original LUA_RIDX_GLOBALS environment */ - lua_rawseti(lua, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); - } - - for (idx = lua_rawlen(lua, 2); idx > 0; --idx) - { - lua_rawgeti(lua, 2, idx); - printf("%s(): get %d %s\n", __func__, lua_gettop(lua), lua_typename(lua, lua_type(lua, -1))); - } - - return lua_gettop(lua) - 2; -} - -static int TestIntf_Remote_Close(lua_State *lua) -{ - TestIntf_RemoteConnection_t *Conn = luaL_checkudata(lua, 1, "TestIntf_RemoteConnection"); - uint32_t Timeout; - struct pollfd pfd; - nfds_t nfds; - - printf("%s(): START\n", __func__); - /* - * Close our side of the output pipe. The subprocess should see - * this as an EOF on its STDIN stream which (depending on the - * implementation) may trigger a shutdown/exit procedure. - */ - if (Conn->OutFd >= 0) - { - close(Conn->OutFd); - Conn->OutFd = -1; - } - - TestIntf_Poll_Subprocess(Conn); - - /* - * When the subprocess exits, it should close its stdout stream, - * which may appear on this side as a broken pipe signal or a closure of - * the remote side of the pipe. - * - * By using select() on the file descriptor for this side of the pipe we - * can delay until that happens. - * - * This needs to be time-limited to protect against the possibility of a - * rogue subprocess that ignores the TERM signal and refuses to exit. - */ - Timeout = 100; - - /* - * If the child process is running then send a TERM signal - */ - while (Conn->pid > 0) - { - if (waitpid(Conn->pid, NULL, WNOHANG) == Conn->pid) - { - /* process has exited, status gotten */ - Conn->pid = -1; - break; - } - - if (Timeout == 0) - { - if (lua_toboolean(lua, lua_upvalueindex(1))) - { - /* - * did our best but no status was collected -- - * in garbage collection mode we are losing this reference anyway. - * - * This will cause the InStream to be closed if it is still open. - */ - Conn->pid = -1; - } - break; - } - - /* - * subprocess is not exiting on its own ... - * - * First try sending SIGTERM to do graceful shutdown - * Then do subsequently more aggressive signals to get it to exit - * - * Note that some tools only respond to certain signals -- - * e.g. 'nc' in listen mode when nothing is connected only seems to respond to SIGINT - * - * If that doesn't work and we are in garbage collection mode (upvalue 1) - * then finally send a SIGKILL which cannot be ignored - * (this should take care of a subprocess which is hung) - */ - if (Timeout == 90) - { - fprintf(stderr, "Sending SIGTERM to child task\n"); - kill(Conn->pid, SIGTERM); - } - else if (Timeout == 70) - { - fprintf(stderr, "Sending SIGQUIT to child task\n"); - kill(Conn->pid, SIGQUIT); - } - else if (Timeout == 50) - { - fprintf(stderr, "Sending SIGINT to child task\n"); - kill(Conn->pid, SIGINT); - } - else if (Timeout == 30 && lua_toboolean(lua, lua_upvalueindex(1))) - { - fprintf(stderr, "Sending SIGKILL to child task\n"); - kill(Conn->pid, SIGKILL); - } - else - { - /* - * Wait up to 20ms for something to happen. - * If the input pipe is not yet closed then call poll() on it. - * Otherwise use poll() as a way to sleep for a bit. - */ - memset(&pfd, 0, sizeof(pfd)); - if (Conn->InFd >= 0) - { - nfds = 1; - pfd.fd = Conn->InFd; - pfd.events = POLLIN; - } - else - { - nfds = 0; - } - - if (poll(&pfd, nfds, 20) > 0) - { - /* - * in case there was actual data available, read it - * all data at this point is discarded. - */ - if (read(Conn->InFd, Conn->RecvBuffer, sizeof(Conn->RecvBuffer)) == 0) - { - /* - * zero length read is eof indicator. - * This means the remote end of the pipe is closed. - * At this point just poll for task to exit. - */ - close(Conn->InFd); - Conn->InFd = -1; - } - } - } - - --Timeout; - } - - /* - * Ensure that the input read pipe is also closed. - */ - if (Conn->InFd >= 0 && Conn->pid <= 0) - { - close(Conn->InFd); - Conn->InFd = -1; - } - - return 0; -} - -int TestIntf_Remote_Create(lua_State *lua) -{ - const char *ShellCmd = luaL_checkstring(lua, 2); - TestIntf_RemoteConnection_t *Conn; - int rdpipe[2]; - int wrpipe[2]; - int status; - - Conn = lua_newuserdata(lua, sizeof(TestIntf_RemoteConnection_t)); - if (luaL_newmetatable(lua, "TestIntf_RemoteConnection")) - { - lua_newtable(lua); - - lua_pushstring(lua, "Message"); - lua_pushcfunction(lua, TestIntf_Remote_DoAction); - lua_setfield(lua, -2, "Send"); - - lua_pushcfunction(lua, TestIntf_Remote_Poll); - lua_setfield(lua, -2, "Poll"); - - lua_pushcfunction(lua, TestIntf_Remote_Wait); - lua_setfield(lua, -2, "Wait"); - - lua_pushboolean(lua, 0); - lua_pushcclosure(lua, TestIntf_Remote_Close, 1); - lua_setfield(lua, -2, "Close"); - - lua_pushstring(lua, "Subscribe"); - lua_pushcclosure(lua, TestIntf_Remote_DoAction, 1); - lua_setfield(lua, -2, "Subscribe"); - - lua_pushstring(lua, "Unsubscribe"); - lua_pushcclosure(lua, TestIntf_Remote_DoAction, 1); - lua_setfield(lua, -2, "Unsubscribe"); - - lua_setfield(lua, -2, "__index"); - - lua_pushboolean(lua, 1); - lua_pushcclosure(lua, TestIntf_Remote_Close, 1); - lua_setfield(lua, -2, "__gc"); - } - lua_setmetatable(lua, -2); - - memset(Conn, 0, sizeof(*Conn)); - Conn->InFd = -1; - Conn->OutFd = -1; - Conn->pid = -1; - - status = pipe(rdpipe); - if (status < 0) - { - return luaL_error(lua, "pipe(rd): %s", strerror(errno)); - } - - status = pipe(wrpipe); - if (status < 0) - { - close(rdpipe[1]); - close(rdpipe[0]); - return luaL_error(lua, "pipe(wr): %s", strerror(errno)); - } - - Conn->pid = fork(); - if (Conn->pid < 0) - { - /* Some error occurred */ - close(rdpipe[1]); - close(rdpipe[0]); - close(wrpipe[1]); - close(wrpipe[0]); - return luaL_error(lua, "fork(): %s", strerror(errno)); - } - - if (Conn->pid == 0) - { - /* This is the child process */ - close(rdpipe[0]); /* read side */ - close(wrpipe[1]); /* write side */ - - dup2(wrpipe[0], STDIN_FILENO); - close(wrpipe[0]); - dup2(rdpipe[1], STDOUT_FILENO); - close(rdpipe[1]); - - /* Treat the entire string as a command line to pass to the shell for interpretation */ - fprintf(stderr, "running: %s\n", ShellCmd); - status = execl("/bin/sh", "sh", "-c", ShellCmd, NULL); - if (status < 0) - { - /* - * Error occurred -- cannot throw a Lua error anymore since this - * is executing in a child process. - */ - fprintf(stderr, "execl(): %s\n", strerror(errno)); - } - - /* In case e.g. exec did not work, then exit with a failure status code */ - exit(EXIT_FAILURE); - } - - /* - * This is the parent process - * Set up the InStream / OutStream FILE objects from the file descriptors. - */ - close(rdpipe[1]); /* write side */ - close(wrpipe[0]); /* read side */ - Conn->InFd = rdpipe[0]; - Conn->OutFd = wrpipe[1]; - - status = fcntl(Conn->InFd, F_GETFL); - status |= O_NONBLOCK; - fcntl(Conn->InFd, F_SETFL, status); - - return 1; -} /* end TestIntf_Remote_Create */ diff --git a/cfecfs/testexecutive/src/test_interface.c b/cfecfs/testexecutive/src/test_interface.c deleted file mode 100644 index 3767393..0000000 --- a/cfecfs/testexecutive/src/test_interface.c +++ /dev/null @@ -1,580 +0,0 @@ -/* - * LEW-19710-1, CCSDS SOIS Electronic Data Sheet Implementation - * - * Copyright (c) 2020 United States Government as represented by - * the Administrator of the National Aeronautics and Space Administration. - * All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * \file test_interface.c - * \ingroup testexecutive - * \author joseph.p.hickey@nasa.gov - * - * Interface between test executive and test targets - */ - -#include -#include /* memset() */ -#include -#include -#include - -#include -#include -#include - -#include "osapi.h" - -#include "cfe_mission_eds_parameters.h" -#include "cfe_mission_eds_interface_parameters.h" -#include "edslib_displaydb.h" -#include "cfe_missionlib_runtime.h" -#include "cfe_missionlib_api.h" -#include "edslib_lua_objects.h" -#include "cfe_missionlib_lua_softwarebus.h" - -#include "testexec.h" - -typedef struct -{ - uint16 TargetNum; -} TestIntf_t; - -typedef struct -{ - const char *LuaName; - int (*InitFunc)(lua_State *lua); -} TestExec_Intf_ModuleEntry_t; - -#define TESTEXEC_MODULE(x) extern int TestIntf_##x##_Create(lua_State *lua); -#include "testexec_compiledin_modules.h" -#undef TESTEXEC_MODULE - -#define TESTEXEC_MODULE(x) { #x, TestIntf_##x##_Create }, -static const TestExec_Intf_ModuleEntry_t TESTEXEC_INTF_TABLE[] = { -#include "testexec_compiledin_modules.h" - { NULL, NULL } -}; -#undef TESTEXEC_MODULE - -static int TestIntf_Preprocess_Message(lua_State *lua) -{ - printf("%s(): Start\n", __func__); - - /* - * Expected arguments: - * idx@1 - received raw/packed message object (string) - */ - lua_settop(lua, 1); - lua_newtable(lua); - - lua_getglobal(lua, "EdsDB"); - lua_getfield(lua, -1, "IdentifyMessage"); - lua_pushvalue(lua, 1); - lua_call(lua, 1, 2); - - /* - * Expected after call: - * idx@-1 - MissionLib interface object - * idx@-2 - EdsLib data object - */ - printf("%s(): Intf=%s\n", __func__, luaL_tolstring(lua, -1, NULL)); - lua_pop(lua, 1); - - printf("%s(): EdsObj=%s\n", __func__, luaL_tolstring(lua, -2, NULL)); - lua_pop(lua, 1); - - lua_setfield(lua, 2, "Interface"); - lua_setfield(lua, 2, "Object"); - lua_settop(lua, 2); - - printf("%s(): End\n", __func__); - - return 1; -} - -static int TestIntf_Filter_Message(lua_State *lua) -{ - int is_match; - - /* - * Expected arguments: - * idx@1 - filter criteria (table; may contain field "Interface") - * idx@2 - preprocessed event data (table; must contain field "Interface" and "Object") - * - * If interfaces match, then return the object. - * If no match, then return nothing. - */ - luaL_checktype(lua, 1, LUA_TTABLE); - luaL_checktype(lua, 2, LUA_TTABLE); - lua_settop(lua, 2); - lua_getfield(lua, 1, "Interface"); - if (lua_isnil(lua, -1)) - { - /* - * if user did not specify an interface, then do not match anything. - * (user could be looking for events other than messages) - */ - is_match = 0; - } - else - { - lua_getfield(lua, 2, "Interface"); - is_match = lua_compare(lua, 3, 4, LUA_OPEQ); - } - - if (is_match) - { - /* return the object matched */ - lua_getfield(lua, 2, "Object"); - return 1; - } - - /* no match */ - return 0; -} - -static int TestIntf_WaitAction(lua_State *lua) -{ - int32_t Timeout = luaL_optinteger(lua, 2, -1); - struct timespec expire; - struct timespec current; - int nret; - uint32_t conditions_req; - uint32_t conditions_met; - enum - { - WAIT_STATE_NORMAL = 0, - WAIT_STATE_SLEEP - } waitstate; - - printf("%s(): Start\n", __func__); - nret = 0; - luaL_checktype(lua, 1, LUA_TTABLE); - lua_settop(lua, 2); - lua_getfield(lua, lua_upvalueindex(1), "API"); /* @3 (userdata object = low level intf) */ - waitstate = WAIT_STATE_NORMAL; - - clock_gettime(CLOCK_MONOTONIC, &expire); - if (Timeout >= 0) - { - expire.tv_sec += Timeout / 1000; - expire.tv_nsec += (Timeout % 1000) * 1000000; - } - if (expire.tv_nsec > 1000000000) - { - ++expire.tv_sec; - expire.tv_nsec -= 1000000000; - } - - while (1) - { - lua_settop(lua, 3); - - printf("%s(): Poll\n", __func__); - lua_getfield(lua, 3, "Poll"); /* idx 4 = poll function */ - lua_pushvalue(lua, 3); - lua_call(lua, 1, 3); - - /* - * After call: - * idx@4 = type of event ("Message", etc) - * idx@5 = event data object - * idx@6 = additional event attributes - */ - printf("%s(): Stack= %s %s %s\n", - __func__, - lua_typename(lua, lua_type(lua, 4)), - lua_typename(lua, lua_type(lua, 5)), - lua_typename(lua, lua_type(lua, 6))); - if (!lua_isnil(lua, 4)) - { - /* - * Preprocess returned data - */ - if (!lua_isnil(lua, 5)) - { - lua_getfield(lua, lua_upvalueindex(1), "RecvProcessor"); /* idx@7 - preprocessor table */ - lua_pushvalue(lua, 4); /* idx@8 - event type */ - lua_gettable(lua, -2); /* idx@8 - preprocessor func */ - if (lua_isfunction(lua, -1)) - { - lua_pushvalue(lua, 5); /* idx@9 - event data object */ - lua_call(lua, 1, 1); /* idx@8 - preprocessed event data obj */ - lua_replace(lua, 5); /* replace original event data obj */ - } - lua_settop(lua, 6); - } - - /* - * check if the matches have been satisfied - */ - conditions_req = 0; - conditions_met = 0; - lua_pushnil(lua); /* idx @7 - expected event table index */ - while (lua_next(lua, 1)) /* idx @8 - expected event table value */ - { - ++conditions_req; - if (lua_type(lua, 8) == LUA_TTABLE) - { - lua_getfield(lua, 8, "Matched"); /* idx @9 - already matched? */ - if (lua_toboolean(lua, -1)) - { - ++conditions_met; - } - else - { - lua_getfield(lua, lua_upvalueindex(1), "RecvFilter"); /* idx@10 - filter table */ - lua_pushvalue(lua, 4); /* idx@11 - event type */ - lua_gettable(lua, -2); /* idx@11 - filter func */ - if (lua_isfunction(lua, -1)) - { - lua_pushvalue(lua, 8); /* idx@12 - filter criteria table */ - lua_pushvalue(lua, 5); /* idx@13 - preprocessed event data */ - lua_call(lua, 2, 1); /* idx@11 - object (match) or nil (no match) */ - if (lua_toboolean(lua, -1)) - { - /* if the user specified a callback, - * call it now and use its return value. - * It may return nil or false to drop/reject the event. - */ - lua_getfield(lua, 8, "Callback"); - if (lua_isfunction(lua, -1)) - { - lua_pushvalue(lua, -2); - lua_call(lua, 1, 1); - } - else - { - lua_pop(lua, 1); - } - - if (lua_toboolean(lua, -1)) - { - lua_setfield(lua, 8, "Matched"); - lua_pushvalue(lua, 6); - lua_setfield(lua, 8, "Attribs"); - ++conditions_met; - } - } - } - } - } - lua_settop(lua, 7); /* remove everything above event table index */ - } - - if (conditions_met >= conditions_req) - { - lua_pushboolean(lua, 1); - nret = 1; - break; - } - - /* not all conditions met so poll again for more data */ - } - else - { - /* Poll function returned nothing, so need to wait */ - - /* - * If a timeout was specified, check if we have exceeded the timeout yet. - * If timeout was not passed yet then call a low level wait routine - */ - if (Timeout >= 0) - { - clock_gettime(CLOCK_MONOTONIC, ¤t); - current.tv_sec = expire.tv_sec - current.tv_sec; - current.tv_nsec = expire.tv_nsec - current.tv_nsec; - if (current.tv_nsec < 0) - { - --current.tv_sec; - current.tv_nsec += 1000000000; - } - - if (current.tv_sec < 0) - { - /* timeout occurred */ - break; - } - - if (current.tv_sec == 0) - { - if (current.tv_nsec == 0) - { - /* timeout occurred */ - break; - } - - if (current.tv_nsec < 1000000) - { - /* wait a minimum of 1ms - - * this may exceed original timeout, - * but that may be less bad than returning prior to the requested timeout. - */ - current.tv_nsec = 1000000; - } - } - } - else - { - current.tv_sec = 1; - current.tv_nsec = 0; - } - - /* - * If the low level interface has a wait routine, then use it. - * The wait routine should exit and return true if there is any activity - * that makes it worthwhile to re-poll. - */ - lua_getfield(lua, 3, "Wait"); - if (!lua_isfunction(lua, -1)) - { - waitstate = WAIT_STATE_SLEEP; - lua_pop(lua, 1); - } - else - { - lua_pushvalue(lua, 3); - - /* - * The wait task should return if any relevant activity occurs, so - * it is OK to pass in a bigger timeout here. However to be friendly - * to implementations that may have limitations on their timeouts, we - * will not ask for anything more than 30 seconds in one shot. - */ - if (current.tv_sec < 30) - { - lua_pushinteger(lua, (current.tv_sec * 1000) + (current.tv_nsec / 1000000)); - } - else - { - lua_pushinteger(lua, 30000); - } - - lua_call(lua, 2, 1); - if (!lua_toboolean(lua, -1)) - { - waitstate = WAIT_STATE_SLEEP; - } - lua_pop(lua, 1); - } - - if (waitstate == WAIT_STATE_SLEEP) - { - /* - * Fall back to using sleep-based polling - * since this will not automatically wake up early, limit the - * sleep time to ~250ms and re-poll. - */ - if (current.tv_sec > 0 || current.tv_nsec > 250000000) - { - current.tv_sec = 0; - current.tv_nsec = 250000000; - } - clock_nanosleep(CLOCK_MONOTONIC, 0, ¤t, NULL); - waitstate = WAIT_STATE_NORMAL; - } - } - } - - return nret; -} - -static int TestIntf_DoAction(lua_State *lua) -{ - /* - * Expected inputs: - * 1 => Generic User argument (object or interface) - * 2 => Generic User attribute(s) - * - * Upvalue 1 => Low Level intf object (uservalue table from TestIntf object) - * Upvalue 2 => Action name (string) - */ - lua_settop(lua, 2); - - lua_getfield(lua, lua_upvalueindex(1), "API"); /* idx @3 - low level userdata object */ - lua_pushvalue(lua, lua_upvalueindex(2)); - lua_gettable(lua, -2); /* idx @4 - action function */ - if (!lua_isfunction(lua, -1)) - { - return luaL_error(lua, "Action %s undefined", luaL_tolstring(lua, lua_upvalueindex(2), NULL)); - } - lua_insert(lua, -2); - - /* - * Stack at this point: - * @3 => Action function - * @4 => Low level intf object (API) - must be 1st parameter to action function - */ - - if (luaL_testudata(lua, 1, "EdsLib_Object") != NULL) - { - /* Desired action is to send the message to the target */ - lua_getglobal(lua, "EdsDB"); - lua_getfield(lua, -1, "Encode"); - lua_replace(lua, -2); - lua_pushvalue(lua, 1); - lua_call(lua, 1, 1); - - if (!lua_isstring(lua, -1)) - { - return luaL_error(lua, "EdsDb Encode method did not return a string"); - } - } - else if (luaL_testudata(lua, 1, "CFE_MissionLib_Lua_Interface") != NULL) - { - lua_getfield(lua, 1, "MsgId"); - } - else if (!lua_isnil(lua, 1)) - { - lua_pushvalue(lua, 1); - } - - /* - * Argument 2 is an optional attribute argument - * it is passed through unmodified if present. - * this could be a table to specify several attributes if required - */ - if (!lua_isnil(lua, 2)) - { - lua_pushvalue(lua, 2); - } - - /* Call the low level function */ - lua_call(lua, lua_gettop(lua) - 3, 2); /* idx @3,4 = return values */ - - if (lua_type(lua, 3) == LUA_TTABLE) - { - lua_pushnil(lua); - while (lua_next(lua, 3)) - { - printf("%s(): %s = %s\n", __func__, luaL_tolstring(lua, 5, NULL), luaL_tolstring(lua, 6, NULL)); - lua_settop(lua, 5); - } - lua_pushvalue(lua, lua_upvalueindex(1)); - lua_pushcclosure(lua, TestIntf_WaitAction, 1); - lua_insert(lua, 3); - lua_call(lua, 2, 0); - } - - return 0; -} - -static int TestIntf_GetAction(lua_State *lua) -{ - luaL_checkudata(lua, 1, "TestIntf"); - lua_settop(lua, 2); - - lua_getuservalue(lua, 1); /* @3 */ - - if (lua_type(lua, 2) == LUA_TSTRING) - { - if (strcmp(lua_tostring(lua, 2), "Wait") == 0) - { - lua_pushcclosure(lua, TestIntf_WaitAction, 1); - return 1; - } - } - - /* if above did not push a function then try to get it from the low level */ - lua_pushvalue(lua, 2); - lua_pushcclosure(lua, TestIntf_DoAction, 2); - return 1; -} - -static int TestIntf_Destroy(lua_State *lua) -{ - luaL_checkudata(lua, 1, "TestIntf"); - return 0; -} - -static int TestIntf_Create(lua_State *lua) -{ - TestIntf_t *Conn; - - lua_settop(lua, 3); - - Conn = lua_newuserdata(lua, sizeof(TestIntf_t)); /* Index 4 */ - if (luaL_newmetatable(lua, "TestIntf")) - { - lua_pushcfunction(lua, TestIntf_GetAction); - lua_setfield(lua, -2, "__index"); - - lua_pushcfunction(lua, TestIntf_Destroy); - lua_setfield(lua, -2, "__gc"); - } - lua_setmetatable(lua, -2); - - if (lua_isstring(lua, 2)) - { - Conn->TargetNum = CFE_MissionLib_GetInstanceNumber(&CFE_SOFTWAREBUS_INTERFACE, lua_tostring(lua, 2)); - } - else if (lua_isnumber(lua, 2)) - { - Conn->TargetNum = lua_tointeger(lua, 2); - } - else - { - Conn->TargetNum = 1; - } - - luaL_argcheck(lua, Conn->TargetNum != 0, 2, "Invalid target specified"); - - /* create a table for use as the userdata */ - lua_newtable(lua); /* index 5 */ - - lua_pushvalue(lua, 1); - lua_gettable(lua, lua_upvalueindex(1)); - if (!lua_isfunction(lua, -1)) - { - return luaL_argerror(lua, 1, "Unknown connection type"); - } - - lua_pushinteger(lua, Conn->TargetNum); - lua_pushvalue(lua, 3); - lua_call(lua, 2, 1); - lua_setfield(lua, 5, "API"); - lua_newtable(lua); - lua_setfield(lua, 5, "RecvEvents"); - lua_newtable(lua); - lua_pushcfunction(lua, TestIntf_Preprocess_Message); - lua_setfield(lua, -2, "Message"); - lua_setfield(lua, 5, "RecvProcessor"); - lua_newtable(lua); - lua_pushcfunction(lua, TestIntf_Filter_Message); - lua_setfield(lua, -2, "Message"); - lua_setfield(lua, 5, "RecvFilter"); - lua_setuservalue(lua, 4); - - return 1; -} /* end TestIntf_Udp_Create */ - -int TestIntf_GetFactory(lua_State *lua) -{ - const TestExec_Intf_ModuleEntry_t *ModEnt = TESTEXEC_INTF_TABLE; - - lua_newtable(lua); - - while (ModEnt != NULL && ModEnt->InitFunc != NULL && ModEnt->LuaName != NULL) - { - lua_pushcfunction(lua, ModEnt->InitFunc); - lua_setfield(lua, -2, ModEnt->LuaName); - ++ModEnt; - } - - lua_pushcclosure(lua, TestIntf_Create, 1); - return 1; -} diff --git a/cfecfs/testexecutive/src/testctrl.c b/cfecfs/testexecutive/src/testctrl.c deleted file mode 100644 index c135ccb..0000000 --- a/cfecfs/testexecutive/src/testctrl.c +++ /dev/null @@ -1,313 +0,0 @@ -/* - * LEW-19710-1, CCSDS SOIS Electronic Data Sheet Implementation - * - * Copyright (c) 2020 United States Government as represented by - * the Administrator of the National Aeronautics and Space Administration. - * All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * \file testctrl.c - * \ingroup testexecutive - * \author joseph.p.hickey@nasa.gov - * - * Implementation of test cpu controller - */ - -#include -#include /* memset() */ -#include -#include - -#include "osapi.h" - -#include "cfe_mission_eds_parameters.h" -#include "cfe_mission_eds_interface_parameters.h" -#include "edslib_displaydb.h" -#include "cfe_missionlib_runtime.h" -#include "cfe_missionlib_api.h" -#include "cfe_missionlib_lua_softwarebus.h" -#include "ccsds_spacepacket_eds_datatypes.h" - -/* -** volume table. -*/ -OS_VolumeInfo_t OS_VolumeTable[OS_MAX_FILE_SYSTEMS] = { - /* - ** The following entry is a "pre-mounted" path to a non-volatile device - ** This is intended to contain the functional test scripts - */ - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 } -}; - -uint32_t TargetArgCount; -char **TargetArgs; - -#ifdef JPHFIX_SERVER -void TestCtrl_ConnHandler(void) -{ - uint32 SocketID; - int32 Status; - OS_SockAddr_t SocketAddress; - char DataBuf[128]; - - Status = OS_SocketOpen(&SocketID, OS_SocketDomain_INET, OS_SocketType_STREAM); - if (Status != OS_SUCCESS) - { - fprintf(stderr, "OS_SocketOpen() failed: %d\n", (int)Status); - return; - } - - OS_SocketAddrInit(&SocketAddress, OS_SocketDomain_INET); - OS_SocketAddrSetPort(&SocketAddress, 2345); - - uint32 ConnID; - OS_SockAddr_t ConnAddress; - - Status = OS_SocketBind(SocketID, &SocketAddress); - if (Status != OS_SUCCESS) - { - fprintf(stderr, "OS_SocketBind() failed: %d\n", (int)Status); - return; - } - - while (1) - { - Status = OS_SocketAccept(SocketID, &ConnID, &ConnAddress, OS_PEND); - if (Status != OS_SUCCESS) - { - fprintf(stderr, "OS_SocketAccept() failed: %d\n", (int)Status); - break; - } - - while (1) - { - Status = OS_StreamRead(ConnID, DataBuf, sizeof(DataBuf) - 1, OS_PEND); - if (Status < OS_SUCCESS) - { - fprintf(stderr, "OS_StreamRead() failed: %d\n", (int)Status); - break; - } - - if (Status == 0) - { - printf("OS_StreamRead(): disconnect\n"); - break; - } - - DataBuf[Status] = 0; - printf("OS_StreamRead(): %s\n", DataBuf); - } - - OS_SocketClose(ConnID); - } - - OS_SocketClose(SocketID); -} -#endif - -#define COMMAND_MAX_ARGS 8 -#define NETBUFFER_MAX_SIZE (64 + ((sizeof(CCSDS_SpacePacket_Buffer_t) * 4) / 3)) -#define OBJBUFFER_MAX_SIZE (64 + sizeof(CCSDS_SpacePacket_Buffer_t)) - -struct -{ - char *ArgPtr[COMMAND_MAX_ARGS]; - char NetBuffer[NETBUFFER_MAX_SIZE]; - uint8_t ObjBuffer[OBJBUFFER_MAX_SIZE]; - uint32 ArgCount; - uint32 NetDataLen; - uint32 ObjBitSize; -} TestCtrl; - -void TestCtrl_TokenizeCommand(char *CommandData) -{ - char *Ptr = CommandData; - - TestCtrl.ArgCount = 0; - - /* skip flag char and all leading whitespace */ - do - { - ++Ptr; - } while (isspace((int)*Ptr)); - - while (TestCtrl.ArgCount < COMMAND_MAX_ARGS && *Ptr != 0) - { - TestCtrl.ArgPtr[TestCtrl.ArgCount] = Ptr; - ++TestCtrl.ArgCount; - - while (*Ptr != 0 && !isspace((int)*Ptr)) - { - ++Ptr; - } - - if (*Ptr == 0) - { - break; - } - - *Ptr = 0; - do - { - ++Ptr; - } while (isspace((int)*Ptr)); - } -} - -void TestCtrl_ProcessDataBlock(void) -{ - char *EndPtr; - uint32_t BitSize; - - if (TestCtrl.NetDataLen < sizeof(TestCtrl.NetBuffer)) - { - TestCtrl.NetBuffer[TestCtrl.NetDataLen] = 0; - } - else - { - TestCtrl.NetBuffer[sizeof(TestCtrl.NetBuffer) - 1] = 0; - } - - if (TestCtrl.ArgCount > 1) - { - BitSize = strtoul(TestCtrl.ArgPtr[1], &EndPtr, 0); - if (*EndPtr != 0) - { - BitSize = 0; - } - } - else - { - BitSize = 0; - } - - if (BitSize > (8 * sizeof(TestCtrl.ObjBuffer))) - { - BitSize = (8 * sizeof(TestCtrl.ObjBuffer)); - } - - EdsLib_DisplayDB_Base64Decode(TestCtrl.ObjBuffer, BitSize, TestCtrl.NetBuffer); - TestCtrl.ObjBitSize = BitSize; - - EdsLib_Generate_Hexdump(stderr, TestCtrl.ObjBuffer, 0, (BitSize + 7) / 8); -} - -void TestCtrl_RunCommandLoop(void) -{ - char NetworkBuffer[256]; - uint32 ContentLen; - - while (fgets(NetworkBuffer, sizeof(NetworkBuffer), stdin) != NULL) - { - /* - * All directives should begin with a consistent character for easy identification. - * This character should _NOT_ be part of the standard base64 charset, since base64 - * may be used to transfer binary objects across the pipe. Using a non-base64 char - * as a flag ensures that it is not possible to confuse directives with data. - * - * (This means A-Z, a-z, 0-9 and symbols '+', '/', and '=' should be avoided. Other - * chars are fair game) - */ - if (NetworkBuffer[0] == '@') - { - /* it is a directive */ - TestCtrl_TokenizeCommand(NetworkBuffer); - - if (TestCtrl.ArgCount > 0) - { - if (strcmp(TestCtrl.ArgPtr[0], "BLOCK") == 0) - { - TestCtrl_ProcessDataBlock(); - TestCtrl.NetDataLen = 0; - } - else - { - /* Call user command handler */ - } - } - } - else if (TestCtrl.NetDataLen < sizeof(TestCtrl.NetBuffer)) - { - ContentLen = strlen(NetworkBuffer); - if ((TestCtrl.NetDataLen + ContentLen) > sizeof(TestCtrl.NetBuffer)) - { - ContentLen = sizeof(TestCtrl.NetBuffer) - TestCtrl.NetDataLen; - } - memcpy(&TestCtrl.NetBuffer[TestCtrl.NetDataLen], NetworkBuffer, ContentLen); - TestCtrl.NetDataLen += ContentLen; - } - } -} - -int main(int argc, char *argv[]) -{ - int opt; - - /* Initialize the OSAL */ - if (OS_API_Init() != OS_SUCCESS) - { - fprintf(stderr, "OS_API_Init() failed"); - return EXIT_FAILURE; - } - - while ((opt = getopt(argc, argv, "c:i:")) >= 0) - { - switch (opt) - { - case 'c': - { - CFE_MissionLib_GetInstanceNumber(&CFE_SOFTWAREBUS_INTERFACE, optarg); - break; - } - case 'i': - { - break; - } - case 'l': - { - break; - } - default: /* '?' */ - { - fprintf(stderr, "Usage: %s [-c cpu_name]\n", argv[0]); - exit(EXIT_FAILURE); - } - } - } - - if (optind < argc) - { - TargetArgCount = argc - optind; - TargetArgs = &argv[optind]; - } - - TestCtrl_RunCommandLoop(); - - return EXIT_SUCCESS; -} diff --git a/cfecfs/testexecutive/src/testexec.c b/cfecfs/testexecutive/src/testexec.c deleted file mode 100644 index 528b0cd..0000000 --- a/cfecfs/testexecutive/src/testexec.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * LEW-19710-1, CCSDS SOIS Electronic Data Sheet Implementation - * - * Copyright (c) 2020 United States Government as represented by - * the Administrator of the National Aeronautics and Space Administration. - * All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * \file testexec.c - * \ingroup testexecutive - * \author joseph.p.hickey@nasa.gov - * - * Implementation of test executive - */ - -#include -#include /* memset() */ - -#include -#include -#include - -#include "osapi.h" -#include "utbsp.h" -#include "uttest.h" -#include "utassert.h" - -#include "cfe_mission_eds_parameters.h" -#include "cfe_mission_eds_interface_parameters.h" -#include "edslib_displaydb.h" -#include "cfe_missionlib_runtime.h" -#include "cfe_missionlib_api.h" -#include "edslib_lua_objects.h" -#include "cfe_missionlib_lua_softwarebus.h" - -#include "testexec.h" - -static lua_State *BaseState; -static int BaseStackTop; - -typedef struct -{ - int32 FileId; - char DataBuffer[252]; -} TestExec_OsalLoadState_t; - -/* -** volume table. -*/ -OS_VolumeInfo_t OS_VolumeTable[OS_MAX_FILE_SYSTEMS] = { - /* - ** The following entry is a "pre-mounted" path to a non-volatile device - ** This is intended to contain the functional test scripts - */ - { "ftest", "./ftest", FS_BASED, FALSE, FALSE, TRUE, "FT", "/ftest", 512 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 }, - { "unused", "unused", FS_BASED, TRUE, TRUE, FALSE, " ", " ", 0 } -}; - -static const char *TestExec_Lua_FileReader(lua_State *lua, void *data, size_t *size) -{ - TestExec_OsalLoadState_t *LoadState = data; - int32 Status; - - Status = OS_read(LoadState->FileId, LoadState->DataBuffer, sizeof(LoadState->DataBuffer)); - if (Status < 0) - { - *size = 0; - return NULL; - } - - *size = Status; - return LoadState->DataBuffer; -} - -static int TestExec_Lua_DoAssert(lua_State *lua) -{ - /* stack: - * @1 = condition (boolean) - * @2 = message (string) - */ - lua_Debug ar; - const char *filename; - - if (lua_getstack(lua, 1, &ar)) - { - lua_getinfo(lua, "Sl", &ar); - } - else - { - memset(&ar, 0, sizeof(ar)); - } - - if (ar.source != NULL && *ar.source == '@') - { - filename = ar.source + 1; - } - else - { - filename = NULL; - ar.currentline = -1; - } - - UtAssertEx(lua_toboolean(lua, 1), - UtAssert_GetContext(), - filename, - ar.currentline, - "%s", - luaL_tolstring(lua, 2, NULL)); - - return 0; -} - -static int TestExec_Lua_ErrorHandler(lua_State *lua) -{ - /* Start stack: 1 = user string */ - lua_Debug ar; - const char *file; - uint32 line; - - file = NULL; - line = 0; - if (lua_getstack(lua, 1, &ar) && lua_getinfo(lua, "Sl", &ar)) - { - file = ar.source; - if (file != NULL && *file == '@') - { - ++file; - } - line = ar.currentline; - } - - UtAssertEx(FALSE, UTASSERT_CASETYPE_FAILURE, file, line, "%s", lua_tostring(lua, 1)); - - lua_getglobal(lua, "debug"); - lua_getfield(lua, -1, "traceback"); - lua_pushnil(lua); - lua_pushinteger(lua, 3); - lua_call(lua, 2, 1); - UT_BSP_DoText(UTASSERT_CASETYPE_DEBUG, lua_tostring(lua, -1)); - return 0; -} - -static void TestExec_LoadScript(void) -{ - const char *SegmentName = UtAssert_GetSegmentName(); - TestExec_OsalLoadState_t LoadState; - int32 Status; - - Status = OS_open(SegmentName, OS_READ_ONLY, 0); - if (Status < 0) - { - os_err_name_t ErrName; - OS_GetErrorName(Status, &ErrName); - lua_pushfstring(BaseState, "OS_open(%s): %s", SegmentName, ErrName); - } - else - { - LoadState.FileId = Status; - lua_load(BaseState, TestExec_Lua_FileReader, &LoadState, SegmentName, NULL); - OS_close(LoadState.FileId); - } - - if (lua_type(BaseState, -1) == LUA_TSTRING) - { - UtAssert_Failed("%s", lua_tostring(BaseState, -1)); - } - else - { - UtAssert_True(lua_isfunction(BaseState, -1), "Load test script: %s", SegmentName); - } -} - -static void TestExec_RunScript(void) -{ - if (lua_type(BaseState, -1) == LUA_TFUNCTION) - { - lua_pcall(BaseState, 0, 0, BaseStackTop); - } -} - -static void TestExec_ResetStack(void) -{ - lua_settop(BaseState, BaseStackTop); -} - -void OS_Application_Shutdown(void) -{ - lua_close(BaseState); -} - -void OS_Application_Startup(void) -{ - int32 i; - const char *OptString; - - if (OS_API_Init() != OS_SUCCESS) - { - UtAssert_Abort("OS_API_Init() failed"); - } - - atexit(OS_Application_Shutdown); - - /* - * Create a new Lua state and load the standard libraries - */ - BaseState = luaL_newstate(); - luaL_openlibs(BaseState); - - EdsLib_Lua_Attach(BaseState, &EDS_DATABASE); - CFE_MissionLib_Lua_SoftwareBus_Attach(BaseState, &CFE_SOFTWAREBUS_INTERFACE); - lua_setglobal(BaseState, "EdsDB"); - - lua_pushcfunction(BaseState, TestIntf_GetFactory); - lua_call(BaseState, 0, 1); - lua_setglobal(BaseState, "NewConnection"); - - lua_pushinteger(BaseState, UTASSERT_CASETYPE_FAILURE); - lua_pushcclosure(BaseState, TestExec_Lua_DoAssert, 1); - lua_setglobal(BaseState, "Assert"); - - lua_pushcfunction(BaseState, TestExec_Lua_ErrorHandler); - BaseStackTop = lua_gettop(BaseState); - - for (i = 0; i < UT_BSP_GetTotalOptions(); ++i) - { - OptString = UT_BSP_GetOptionString(i); - if (OptString != NULL) - { - /* Check if the option has an assignment operator. - * If so, pass it directly to Lua for interpretation - * (it can e.g. set a global) - */ - if (strchr(OptString, '=') != NULL) - { - luaL_loadstring(BaseState, OptString); - lua_pcall(BaseState, 0, 0, 1); - } - else - { - UtTest_Add(TestExec_RunScript, TestExec_LoadScript, TestExec_ResetStack, OptString); - } - } - } - -#ifdef JPHFIX_CLIENT - OS_SocketAddrFromString(&SocketAddress, "127.0.0.1"); - Status = OS_SocketConnect(SocketID, &SocketAddress, OS_PEND); - if (Status != OS_SUCCESS) - { - fprintf(stderr, "OS_SocketConnect() failed: %d\n", (int)Status); - return; - } - - while (1) - { - Status = OS_StreamRead(SocketID, DataBuf, sizeof(DataBuf) - 1, OS_PEND); - if (Status < OS_SUCCESS) - { - fprintf(stderr, "OS_StreamRead() failed: %d\n", (int)Status); - break; - } - - if (Status == 0) - { - printf("OS_StreamRead(): disconnect\n"); - break; - } - - DataBuf[Status] = 0; - printf("OS_StreamRead(): %s\n", DataBuf); - } -#endif - -} /* end OS_Application Startup */ diff --git a/cfecfs/testrunner/.gitignore b/cfecfs/testrunner/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/cfecfs/testrunner/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/cfecfs/testrunner/CMakeLists.txt b/cfecfs/testrunner/CMakeLists.txt new file mode 100644 index 0000000..fd5755a --- /dev/null +++ b/cfecfs/testrunner/CMakeLists.txt @@ -0,0 +1,29 @@ +################################################################## +# +# TESTRUNNER CMake build +# +# This does not build any code - it only installs the TESTRUNNER scripts +# into the CFS staging directory +# +################################################################## + +cmake_minimum_required(VERSION 3.10) +project(EDS_CFS_TESTRUNNER NONE) + +set(TESTRUNNER_INSTALL_SYMLINK $ENV{TESTRUNNER_DEBUG} + CACHE BOOL "Whether to install library as a symlink for debugging") + +# In normal (non-debug) deployment, install the library to the python staging dir +# The debug mode will be handled by the installation script below +if (NOT TESTRUNNER_INSTALL_SYMLINK) + install(DIRECTORY src/ DESTINATION lib/python/testrunner + PATTERN __pycache__ EXCLUDE + PATTERN *.py + ) +endif () + +install(FILES common/cfs_test_connection.py DESTINATION lib/python) +install(PROGRAMS examples/runtest.py DESTINATION host) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/stage_app_tests.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/stage_app_tests.cmake @ONLY) +install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/stage_app_tests.cmake) diff --git a/cfecfs/testrunner/Makefile b/cfecfs/testrunner/Makefile new file mode 100644 index 0000000..bd70530 --- /dev/null +++ b/cfecfs/testrunner/Makefile @@ -0,0 +1,17 @@ +ifeq ($(O),) +$(error $$(O) must point to build dir) +endif + +export O + +.PHONY: refresh_tests run_test + +run_test: export PYTHONPATH=$(CURDIR):$(O)/exe/lib/python +run_test: export LD_LIBRARY_PATH=$(O)/exe/lib + +refresh_tests: + mkdir -p $(O)/exe/lib/python/cfs_app_tests + make -C $(O)/exe/lib/python/cfs_app_tests -f $(CURDIR)/cfs_app_test_groups.mk __init__.py + +run_test: refresh_tests + python3 ${SCRIPT} diff --git a/cfecfs/testrunner/cfs_app_test_groups.mk b/cfecfs/testrunner/cfs_app_test_groups.mk new file mode 100644 index 0000000..6c3ef9c --- /dev/null +++ b/cfecfs/testrunner/cfs_app_test_groups.mk @@ -0,0 +1,14 @@ + +# If debug mode is set, then create symlinks instead of copies +ifneq ($(TESTRUNNER_INSTALL_SYMLINK),) +%.py: + ln -s $(^) $(@) +else +%.py: + cp $(^) $(@) +endif + +include $(O)/cfs_app_tests.mk + +__init__.py: $(ALL_CFS_APP_TESTS) + echo "__all__ = [ $(foreach T,$(notdir $(basename $(^))),'$(T)',) ]" > __init__.py diff --git a/cfecfs/testrunner/common/cfs_test_connection.py b/cfecfs/testrunner/common/cfs_test_connection.py new file mode 100644 index 0000000..f966dd5 --- /dev/null +++ b/cfecfs/testrunner/common/cfs_test_connection.py @@ -0,0 +1,68 @@ + +from abc import ABC,abstractmethod + +class CfsTest_Connection(ABC): + + @abstractmethod + def wait_check_packet(self, tlm_id, num_pkt, timeout): + print (f"In wait_check_packet({tlm_id}, {timeout})") + return + + @abstractmethod + def tlm(self, tlm_id, param_id): + print (f"In tlm({tlm_id})") + return 1 + + @abstractmethod + def cmd(self, cmd_id): + print (f"In cmd({cmd_id})") + return 1 + + @abstractmethod + def wait_check(self, tlm_id, param_id, value, timeout): + print (f"In wait_check({tlm_id}, {param_id}, {timeout})") + return False + + @abstractmethod + def spawn_child(self, app_name:str): + pass + + @abstractmethod + def wait(timeout): + pass + + def print(self, msg : str): + print(msg) + return + + def get_app_name(self): + return self.app_name + + def get_instance_name(self): + return self.instance_name + + def __init__(self, method_type, **kwargs): + self.method_obj = None + self.app_name = None + self.instance_name = None + self.remote_addr = None + + if method_type is not None: + self.method_obj = method_type(self) + + if 'app_name' in kwargs: + self.app_name = kwargs['app_name'] + elif 'DEFAULT_APP_NAME' in method_type.__dict__: + self.app_name = method_type.__dict__['DEFAULT_APP_NAME'] + + if 'instance_name' in kwargs: + self.instance_name = kwargs['instance_name'] + + if 'remote_addr' in kwargs: + self.remote_addr = kwargs['remote_addr'] + else: + self.remote_addr = ('127.0.0.1',1234) + + print(f"Instantiated CfsTest_Connection with app_name={self.app_name} instance_name={self.instance_name} remote_addr={self.remote_addr}") + + return diff --git a/cfecfs/testrunner/examples/runtest.py b/cfecfs/testrunner/examples/runtest.py new file mode 100644 index 0000000..610ae6c --- /dev/null +++ b/cfecfs/testrunner/examples/runtest.py @@ -0,0 +1,55 @@ +#!/usr/bin/python3 + +import importlib +import sys +import argparse + +from testrunner.test_group import TestGroup + +parser = argparse.ArgumentParser(prog='runtest', + description = "Executes test script") + +parser.add_argument("-i", "--instance-name", default='cpu1', help="Instance name") +parser.add_argument("-m", "--mission-name", default='samplemission', help="Mission name") +parser.add_argument("-l", "--local-addr", default='127.0.0.1:2234', help="Local IP address:port to listen on") +parser.add_argument("-r", "--remote-addr", default='127.0.0.1:1234', help="Remote IP address:port to send commands to") +parser.add_argument("app_name", help="The name of the application") +parser.add_argument("tests", help="Test names to execute", nargs='*') + +# 3. Parse arguments +args = parser.parse_args() + +def load_test_group(app_name : str, instance_name : str, mission_name : str, local_addr : tuple, remote_addr : tuple): + module_name = f"{app_name}_test_methods" + tmod = importlib.import_module(f"cfs_app_tests.{module_name}") + tobj = None + + # Look for a class in the module with a matching name + tc = tmod.__dict__[module_name] + + print(f"Instantiating: {tc} targeted at {instance_name}") + return TestGroup(tc, instance_name=instance_name, mission_name = mission_name, local_addr = local_addr, remote_addr = remote_addr) + +def addr_as_tuple(addr_str : str, default_ip : str, default_port : int): + (host,port) = addr_str.split(':', 2) + if port is None: + port = default_port + if host is None: + host = default_ip + return (host, int(port)) + +local_addr = addr_as_tuple(args.local_addr, '127.0.0.1', 2234) +remote_addr = addr_as_tuple(args.remote_addr, '127.0.0.1', 1234) + +print (f"Starting runtest script, local={local_addr} remote={remote_addr}") + +test_group = load_test_group(app_name = args.app_name, instance_name = args.instance_name, + mission_name = args.mission_name, local_addr = local_addr, remote_addr = remote_addr) + +test_group.enable_output() +if len(args.tests) == 0: + print ("No test specified, will execute all") + test_group.execute_all() +else: + for test in args.tests: + test_group.execute(test) diff --git a/cfecfs/testrunner/src/__init__.py b/cfecfs/testrunner/src/__init__.py new file mode 100644 index 0000000..c4d8e51 --- /dev/null +++ b/cfecfs/testrunner/src/__init__.py @@ -0,0 +1,12 @@ +""" +TESTRUNNER: Automated System Testing for Robust Operations + +A functional test framework for verifying cFS-based flight systems using +Electronic Data Sheets (EDS) for command and telemetry definitions. +""" + +from testrunner.testrunner_sync import TestrunnerSync +from testrunner.testrunner_adapter import TestrunnerAdapter +from cfs_test_connection import CfsTest_Connection + +__all__ = ['TestrunnerSync', 'CfsTest_Connection', "TestrunnerAdapter"] diff --git a/cfecfs/testrunner/src/core/controller_sync.py b/cfecfs/testrunner/src/core/controller_sync.py new file mode 100644 index 0000000..f835dd6 --- /dev/null +++ b/cfecfs/testrunner/src/core/controller_sync.py @@ -0,0 +1,189 @@ +''' +Copyright (c) 2025 United States Government as represented by +the Administrator of the National Aeronautics and Space Administration. +All Rights Reserved. +''' + +import EdsLib +import CFE_MissionLib + +class ControllerSync: + ''' + The Controller class contains routines that interact with the EDS and MissionLib databases + - Update Instance, Topic, and Subcommand dictionaries/lists + - Generate, set, pack, and send telecommand messages + ''' + def __init__(self, mission_name:str='samplemission'): + self.initialized = False + + # If the mission name is invlaid a RuntimeError will occur here + self.eds_db = EdsLib.Database(mission_name) + + # Set the mission name and the rest of the CFE_MissionLib objects + self.mission_name = mission_name + self.intf_db = CFE_MissionLib.Database(self.mission_name, self.eds_db) + self.telecommand = self.intf_db.Interface('CFE_SB/Telecommand') + self.telemetry = self.intf_db.Interface('CFE_SB/Telemetry') + + self.tlm_dict = None + self.cmd_dict = None + self.all_topics = None + + self.last_sequence = dict() + + def get_telecommand_topics(self): + ''' + Returns a dictionary of Telecommand topics + ''' + print ("Inside get_telecommand_topics") + if self.cmd_dict is None: + self.cmd_dict = dict() # Initialize topic_list_dict + + for topic in self.telecommand: + self.cmd_dict[topic[0]] = self.telecommand.Topic(topic[0]) + + + return self.cmd_dict + + + def get_telemetry_topics(self): + ''' + Returns a dictionary of Telemetry topics + ''' + print ("Inside get_telemetry_topics") + if self.tlm_dict is None: + self.tlm_dict = dict() # Initialize topic_list_dict + + for topic in self.telemetry: + self.tlm_dict[topic[0]] = self.telemetry.Topic(topic[0]) + + return self.tlm_dict + + def get_all_topics(self): + if self.all_topics is None: + self.all_topics = {**self.get_telecommand_topics(), **self.get_telemetry_topics()} # merge dictionaries + + return self.all_topics + + def get_subcommands(self, topic_name:str): + ''' + Returns a dictionary of Subcommands based on a given telecommand topic + + Inputs: + topic_name - User specified telecommand topic name + ''' + subcommand_list_dict = dict() # Initialize subcommand_list_dict + try: + topic = self.telecommand.Topic(topic_name) + for subcommand in topic: + subcommand_list_dict[subcommand[0]] = subcommand[1] + except RuntimeError: + pass + return subcommand_list_dict + + def lookup_topic_name(self, topic_name:str): + topic_obj = None + all_topics = self.get_all_topics() + + if topic_name in all_topics: + topic_obj = all_topics[topic_name] + + return topic_obj + + def get_eds_id_from_topic(self, topic_name:str): + ''' + Returns the EdsId associated with a given topic name + + Inputs: + topic_name - Telecommand topic name + ''' + result = self.lookup_topic_name(topic_name) + if result: + result = result.EdsId + return result + + def get_msg_id_from_topic(self, topic_name:str, instance_id=1): + ''' + Returns the MsgId associated with a given topic name + + Inputs: + topic_name - Telecommand topic name + ''' + result = None + topic_obj = self.lookup_topic_name(topic_name) + if topic_obj: + result = self.intf_db.GetMsgId(instance_id, topic_obj) + return result + + def identify_datagram(self, datagram:bytes): + topic_name = None + eds_id, topic_id = self.intf_db.DecodeEdsId(datagram) + msg_datatype = self.eds_db.Entry(eds_id) + + # most items expected to be telemetry so try that first + topic_obj = self.telemetry.Topic(topic_id) + if not topic_obj: + # must be a command + topic_obj = self.telecommand.Topic(topic_id) + + # get the name associated with this topic + if topic_obj: + topic_name = topic_obj.Name + + # instantiating an object of the decoded type performs decoding + decoded_obj = msg_datatype(EdsLib.PackedObject(datagram)) + return decoded_obj, topic_name + + def get_sequence(self, topic_name:str, decoded_data) -> int: + # note that these sequence numbers are mod 2^14, they wrap from 2^14-1 to 0 + this_seq = decoded_data['CCSDS']['Sequence'] # this gives back an edslib ref + this_seq = this_seq() & 0x3FFF # "calling" the ref converts to plain int + if topic_name in self.last_sequence: + seq_diff = this_seq - (self.last_sequence[topic_name] & 0x3FFF) + if seq_diff < 0: + seq_diff += 0x4000 + this_seq += seq_diff + self.last_sequence[topic_name] = this_seq + return this_seq + + def generate_message(self, topic_name:str, cmd_name:str=None) -> EdsLib.DatabaseEntry: + topic_obj = self.get_all_topics()[topic_name] + eds_id = topic_obj.EdsId + if cmd_name: + for sc_name,sc_id in topic_obj: + if sc_name == cmd_name: + eds_id = sc_id + break + + msg_datatype = self.eds_db.Entry(eds_id) + + # this instantiates the message with default content + return msg_datatype() + + def setup_header(self, msg_obj:EdsLib.DatabaseEntry, instance_name:str, topic_name:str) -> EdsLib.DatabaseEntry: + ''' + Sets the Publish/Subscribe parameters in a command header based on the instance_id + and topic_id. We call the function SetPubSub defined in the CFE_Missionlib + python bindings that set the header values of the cmd message based on the + CFE_MissionLib runtime library. + + Inputs: + instance_id - The ID associated with the desitination core flight instance + topic_id - The ID associated with the desired telecommand topic + ''' + topic_obj = self.get_all_topics()[topic_name] + + this_seq = 1 + if topic_name in self.last_sequence: + this_seq += self.last_sequence[topic_name] + + self.last_sequence[topic_name] = this_seq + + # this sets the correct msg id + self.intf_db.SetPubSub(instance_name, topic_obj.TopicId, msg_obj) + msg_obj['CCSDS']['Sequence'] = this_seq & 0x3FFF + msg_obj['CCSDS']['SeqFlag'] = 3 # SeqFlag is hardcoded for now, cfs does not fragment commands + return self + + def encode_datagram(self, msg_data) -> bytes: + return EdsLib.PackedObject(msg_data) diff --git a/cfecfs/testrunner/src/core/data_model_sync.py b/cfecfs/testrunner/src/core/data_model_sync.py new file mode 100644 index 0000000..5fcc191 --- /dev/null +++ b/cfecfs/testrunner/src/core/data_model_sync.py @@ -0,0 +1,116 @@ +''' +Copyright (c) 2025 United States Government as represented by +the Administrator of the National Aeronautics and Space Administration. +All Rights Reserved. +''' + +from testrunner.core.timestamp import Timestamp + +class DataModelSync: + + class HistoryEntry: + next_seq = 0 + + @classmethod + def next_global_seq(self): + self.next_seq = self.next_seq + 1 + return self.next_seq + + def get_raw_data(self) -> bytes: + return self.raw_data + + def get_msg_seq(self) -> int: + return self.msg_seq + + def get_msg_data(self): + return self.msg_data + + def __init__(self, remote_host:str, msg_seq:int, raw_data:bytes, msg_data): + self.remote_host = remote_host + self.raw_data = raw_data + self.msg_seq = msg_seq + self.msg_data = msg_data + self.when = Timestamp() + self.global_seq = DataModelSync.HistoryEntry.next_global_seq() + + ''' + The DataModel class contains structures related to the data saved in the cFS-Groundstation + - Stores dictionaries of Instances, Topics, Subcommands, and Telemetry Types + - Stores an array of raw messages based on Telmetry Type + ''' + def __init__(self, mission:str): + self.mission = mission + self.history_by_topic = dict() + self.history_len = 100 + + def get_topic(self, topic_name:str) -> list | None: + topic_list = None + if topic_name in self.history_by_topic: + topic_list = self.history_by_topic[topic_name] + return topic_list + + def get_or_add_topic(self, topic_name:str) -> list: + if topic_name not in self.history_by_topic: + self.history_by_topic[topic_name] = list() + return self.get_topic(topic_name) + + def append_to_topic(self, topic_id, entry : HistoryEntry): + topic_list = self.get_or_add_topic(topic_id) + topic_list.append(entry) + + # Make sure the history does not grow excessively large + expire_len = len(topic_list) - self.history_len + if expire_len > 0: + del topic_list[:expire_len] # "prune" the oldest entries from list + + def get_last_entry(self, topic_name:str) -> HistoryEntry: + ''' + Returns the most recent history object associated with topic_id. + ''' + last_entry = None + topic_list = self.get_topic(topic_name) + if isinstance(topic_list, list) and len(topic_list) > 0: + last_entry = topic_list[-1] + return last_entry + + def get_count(self, topic_name:str) -> int: + ''' + Returns the most recent history object associated with topic_id. + ''' + topic_list = self.get_topic(topic_name) + count = 0 + if isinstance(topic_list, list): + count = len(topic_list) + return count + + def generate_message(self, instance_id : int|str, topic_id, fcn_code : int = None): + ''' + Sorts the raw message into the associated data array (or creates one if it doesn't exist). + Sorts the decoded EDS object from the message into the associated data array (or creates one if it doesn't exist). + Generates a telemetry display string based on the instance and topic names. + + Inputs: + host - Information where the telemetry message came from + datagram - Raw telemetry message as a bytes string + ''' + topic_obj = None + eds_id = None + eds_datatype = None + msg_data = None + + if topic_id in self.telecommand: + topic_obj = self.telecommand.Topic(topic_id) + elif topic_id in self.telemetry: + topic_obj = self.telemetry.Topic(topic_id) + + if topic_obj is not None: + if fcn_code is None: + eds_id = topic_obj.GetEdsId() + else: + eds_id = topic_obj.GetCmdEdsId(fcn_code) + + if eds_id is not None: + eds_datatype = self.eds_db.Entry(eds_id) + msg_data = eds_datatype() + + return msg_data diff --git a/cfecfs/testrunner/src/core/timestamp.py b/cfecfs/testrunner/src/core/timestamp.py new file mode 100644 index 0000000..0389aae --- /dev/null +++ b/cfecfs/testrunner/src/core/timestamp.py @@ -0,0 +1,103 @@ +''' +Copyright (c) 2025 United States Government as represented by +the Administrator of the National Aeronautics and Space Administration. +All Rights Reserved. + +''' +import time +import operator + +class Timestamp: + + # by default use the monotonic clock for all computations + REF = time.CLOCK_MONOTONIC + NONE = None + + @staticmethod + def now(): + return Timestamp(time.clock_gettime_ns(Timestamp.REF)) + + @classmethod + def undefined(self): + if self.NONE is None: + self.NONE = Timestamp() + self.NONE.ticks = None + + return self.NONE + + @classmethod + def from_ticks(self,ticks): + if ticks is None: + result = self.undefined() + else: + result = self(ticks) + return result + + @classmethod + def from_relative_ticks(self,relative_ticks): + result = self.from_ticks(relative_ticks) + if result.ticks: + result.ticks += time.clock_gettime_ns(Timestamp.REF) + return result + + @classmethod + def from_relative_seconds(self,relative_seconds): + return self.from_relative_ticks(relative_seconds * 1000000000) + + def calc_ticks(self, other, op): + if (self.ticks is not None and other is not None): + result = op(self.ticks, int(other)) + else: + result = None # operation with None is always undefined (like NaN) + + return result + + def remaining_seconds(self): + return float(self.calc_ticks(Timestamp.now(), operator.sub)) / 1000000000 + + def __int__(self): + return int(self.ticks) + + def __add__(self, other): + return Timestamp.from_ticks(self.calc_ticks(other, operator.add)) + + def __sub__(self, other): + return Timestamp.from_ticks(self.calc_ticks(other, operator.sub)) + + def __iadd__(self, other): + new_ticks = self.calc_ticks(other, operator.add) + if new_ticks is None: + raise ValueError("Undefined result") + self.ticks = new_ticks + + def __isub__(self, other): + new_ticks = self.calc_ticks(other, operator.sub) + if new_ticks is None: + raise ValueError("Undefined result") + self.ticks = new_ticks + + def __bool__(self): + return self.ticks is not None + + def __eq__(self, other): + return self.calc_ticks(other, operator.eq) + + def __ne__(self, other): + return self.calc_ticks(other, operator.ne) + + def __gt__(self, other): + return self.calc_ticks(other, operator.gt) + + def __lt__(self, other): + return self.calc_ticks(other, operator.lt) + + def __ge__(self, other): + return self.calc_ticks(other, operator.ge) + + def __le__(self, other): + return self.calc_ticks(other, operator.le) + + def __init__(self, ticks=0): + if ticks is None: + raise ValueError("Attempt to create duplicate undefined timestamp. Use Timestamp.from_ticks() when value might be None.") + self.ticks = int(ticks) diff --git a/cfecfs/testrunner/src/core/transport_base.py b/cfecfs/testrunner/src/core/transport_base.py new file mode 100644 index 0000000..73267f2 --- /dev/null +++ b/cfecfs/testrunner/src/core/transport_base.py @@ -0,0 +1,29 @@ +''' +Copyright (c) 2025 United States Government as represented by +the Administrator of the National Aeronautics and Space Administration. +All Rights Reserved. + +cFS TESTRUNNER Data Interface: +Generic top-level class for data interfaces, such as UDP. +''' + + +from abc import ABC,abstractmethod +from testrunner.core.timestamp import Timestamp + +class TransportBase(ABC): + + @abstractmethod + def wait_readable(self, timeout:Timestamp): + # Abstract class method + raise NotImplementedError + + @abstractmethod + def transmit(self, data:bytes): + # Abstract class method + raise NotImplementedError + + @abstractmethod + def receive(self, timeout:Timestamp): + # Abstract class method + raise NotImplementedError diff --git a/cfecfs/testrunner/src/test_group.py b/cfecfs/testrunner/src/test_group.py new file mode 100644 index 0000000..af5f552 --- /dev/null +++ b/cfecfs/testrunner/src/test_group.py @@ -0,0 +1,32 @@ +import re +from testrunner import TestrunnerAdapter + +class TestGroup: + + def execute(self, method : str, **kwargs): + print(f"execute {method}") + f = self.test_dict[method] + return f(**kwargs) + + # Some tests are prefixed with a number in order to + def find_matching_test(self, method : str, **kwargs): + result = None + for test_name in self.test_dict.keys(): + m = re.match(r'^test_[\d_]*(\w+)$', test_name) + if m and m.group(1) == method: + result = test_name + return result + + + def execute_all(self, **kwargs): + # Using "sorted" makes them execute in a deterministic order + for test_name in sorted(self.test_dict.keys()): + self.execute(test_name, **kwargs) + + def enable_output(self): + self.Methods.enable_output() + + def __init__(self, method_type : type, **kwargs): + self.Methods = TestrunnerAdapter(method_type, **kwargs) + self.Methods.register_tests(self) + return diff --git a/cfecfs/testrunner/src/testrunner_adapter.py b/cfecfs/testrunner/src/testrunner_adapter.py new file mode 100644 index 0000000..40798a2 --- /dev/null +++ b/cfecfs/testrunner/src/testrunner_adapter.py @@ -0,0 +1,156 @@ +from testrunner import TestrunnerSync +from cfs_test_connection import CfsTest_Connection +from testrunner.core.timestamp import Timestamp +from testrunner.transports.transport_udp import Transport_UDP +from types import MethodType + +import re + +class TestrunnerAdapter(CfsTest_Connection): + + def print(self, msg : str): + print (msg) + return + + def wait_next_packet(self, expire:Timestamp): + while True: + remain = expire.remaining_seconds() + if remain > 1: + cycle_expire = Timestamp.from_relative_seconds(1) + else: + cycle_expire = expire + got_packets = self.testrunner.process_traffic(cycle_expire,1) + if got_packets != 0 or remain <= 0: + break + + # Prod the app to send its HK_TLM + self.testrunner.trigger_hk(self.app_name) + + return (got_packets != 0) + + def wait_check_packet(self, tlm_id, num_pkt:int=1, timeout:int=None): + topic_name = f"{self.app_name}/Application/{tlm_id}_TLM" + print (f"In testrunner wait_check_packet({topic_name}, {num_pkt}, {timeout})") + + start_seq = self.testrunner.get_last_seq(topic_name) + curr_seq = start_seq + got_count = 0 + expire = Timestamp.from_relative_seconds(timeout) + while self.wait_next_packet(expire): + curr_seq = self.testrunner.get_last_seq(topic_name) + if curr_seq is not None: + if start_seq is None: + start_seq = curr_seq - 1 # fake it so diff will be 1 + got_count = curr_seq - start_seq + if got_count >= num_pkt: + break # got the amount desired + + return got_count + + def tlm(self, tlm_id, param_id): + topic_name = f"{self.app_name}/Application/{tlm_id}_TLM" + print (f"In testrunner tlm({topic_name}): {param_id}") + + result = self.testrunner.get_last_msg(topic_name) + #Returns EdsLib.DatabaseEntry: A parsed EDS object representing the telemetry packet. + if result != None: + result = result.Payload[param_id]() + + assert result is not None + + return result + + def debug_print_tlm(self, tlm_id): + topic_name = f"{self.app_name}/Application/{tlm_id}_TLM" + print (f"In testrunner debug_print_tlm({topic_name})") + + result = self.testrunner.get_last_msg(topic_name) + #Returns EdsLib.DatabaseEntry: A parsed EDS object representing the telemetry packet. + if result != None: + for member in result.Payload: + print(f'{member[0]} => {member[1]()}') + + + def cmd(self, cmd_id, **kwargs): + topic_name = f"{self.app_name}/Application/CMD" + print (f"In testrunner cmd({topic_name}.{cmd_id}): {kwargs}") + + # Note that the command codes in EDS have a "Cmd" suffix on them + result = self.testrunner.send_cmd(topic_name, cmd_id + 'Cmd', **kwargs) + print (f"In testrunner cmd result: {result}") + return result + + def wait_check(self, tlm_id, param_id, value, timeout): + topic_name = f"{self.app_name}/Application/{tlm_id}_TLM" + result = False + print (f"In testrunner wait_check({topic_name}): {param_id}, {value} {timeout}") + + expire = Timestamp.from_relative_seconds(timeout) + while True: + last_msg = self.testrunner.get_last_msg(topic_name) + if last_msg is not None: + last_value = last_msg.Payload[param_id]() + result = (last_value == value) + + if result or not self.wait_next_packet(expire): + break + + assert result + return result + + def spawn_child(self, app_name:str): + return TestrunnerSecondary(self, app_name) + + def get_tlm_msg_id(self, tlm_id:str): + topic_name = f"{self.app_name}/Application/{tlm_id}_TLM" + return self.testrunner.get_msg_id_from_topic(topic_name) + + def get_cmd_msg_id(self): + topic_name = f"{self.app_name}/Application/CMD" + return self.testrunner.get_msg_id_from_topic(topic_name) + + def get_tests(self): + return self.test_dict.keys() + + def register_test_method(self,test_obj,test_method): + func = lambda s: test_method(self.method_obj) + return MethodType(func, test_obj) + + def register_tests(self,test_obj): + test_dict = dict() + for prop,val in type(self.method_obj).__dict__.items(): + if prop.startswith("test_") and callable(val): + print(f"Found test method: {prop}") + test_dict[prop] = self.register_test_method(test_obj,val) + test_obj.test_dict = test_dict + + def wait(self, timeout : Timestamp): + expire = Timestamp.from_relative_seconds(timeout) + self.testrunner.process_traffic(expire) + + def enable_output(self): + to_app = self.spawn_child("TO_LAB") + to_app.cmd("EnableOutput", dest_IP=self.local_addr[0]) + to_app.cmd("AddPacket", Stream={'Value':self.get_tlm_msg_id("HK")}, BufLimit=5) + + def __init__(self, method_type : type, **kwargs): + CfsTest_Connection.__init__(self, method_type, **kwargs) + # For the time being, this assumes it is always using the UDP transport provided by CI/TO_LAB + if 'remote_addr' in kwargs: + remote_addr = kwargs['remote_addr'] + else: + remote_addr = ('127.0.0.1',1234) + if 'local_addr' in kwargs: + local_addr = kwargs['local_addr'] + else: + local_addr = ('127.0.0.1',2234) + self.remote_addr = remote_addr + self.local_addr = local_addr + default_transport = Transport_UDP(remote_addr,local_addr) + self.testrunner = TestrunnerSync(transport=default_transport, **kwargs) + +# A secondary shares the same testrunner instance and just talks to a different app +class TestrunnerSecondary(TestrunnerAdapter): + def __init__(self, parent_obj : TestrunnerAdapter, app_name:str): + CfsTest_Connection.__init__(self, None, app_name = app_name, instance_name = parent_obj.get_instance_name(), remote_addr = parent_obj.remote_addr) + self.testrunner = parent_obj.testrunner diff --git a/cfecfs/testrunner/src/testrunner_sync.py b/cfecfs/testrunner/src/testrunner_sync.py new file mode 100644 index 0000000..02f12ea --- /dev/null +++ b/cfecfs/testrunner/src/testrunner_sync.py @@ -0,0 +1,110 @@ +''' +Copyright (c) 2025 United States Government as represented by +the Administrator of the National Aeronautics and Space Administration. +All Rights Reserved. +''' + +import operator +from testrunner.core.transport_base import TransportBase +from testrunner.core.controller_sync import ControllerSync +from testrunner.core.data_model_sync import DataModelSync +from testrunner.core.timestamp import Timestamp + +class TestrunnerSync: + """ + High-level API for test scripts to interact with TESTRUNNER. + """ + + # The data model handles encoding and decoding of commands and telemetry, + # and also stores all received messages into a dictionary for future checks + DataModel = None + + # The controller manages the connection(s) to the target, sending raw commands + # and receiving raw telemetry, and also starting and stopping cfs if relevant + # (such as powering on or off or invoking a restart) + Controller = None + + OPS = { + "==": operator.eq, + "!=": operator.ne, + "<": operator.lt, + "<=": operator.le, + ">": operator.gt, + ">=": operator.ge, + } + + def __init__( + self, + transport: TransportBase, + **kwargs + ): + if 'mission_name' in kwargs: + self.mission_name = kwargs['mission_name'] + else: + self.mission_name = 'samplemission' + + if 'instance_name' in kwargs: + self.instance_name = kwargs['instance_name'] + else: + self.instance_name = 'cpu1' + + self.transport = transport + + # jphfix TBD - multiple instances of this share the same controller and data model (maybe) + self.Controller = ControllerSync(self.mission_name) + self.DataModel = DataModelSync(self.mission_name) + + def get_last_msg(self, topic_name:str): + last_msg = self.DataModel.get_last_entry(topic_name) + if last_msg: + last_msg = last_msg.get_msg_data() + return last_msg + + def trigger_hk(self, app_name:str): + sendhk_name = f"{app_name}/Application/SEND_HK" + self.send_cmd(sendhk_name) + + def get_last_seq(self, topic_name:str): + last_seq = None + last_entry = self.DataModel.get_last_entry(topic_name) + if last_entry: + last_seq = last_entry.get_msg_seq() + return last_seq + + def process_traffic(self, expire:Timestamp=None, pkt_limit:int=None): + + got_pkts = 0 + while True: + if pkt_limit is not None and got_pkts >= pkt_limit: + break + + raw_data, host = self.transport.receive(expire) + if raw_data is None: + break + + try: + decoded_obj, topic_name = self.Controller.identify_datagram(raw_data) + + msg_seq = self.Controller.get_sequence(topic_name, decoded_obj) + history_entry = DataModelSync.HistoryEntry(host,msg_seq,raw_data,decoded_obj) + self.DataModel.append_to_topic(topic_name, history_entry) + got_pkts += 1 + except Exception as e: + print (f"Failed to identify and decode: {e}") + + return got_pkts + + def send_cmd(self, topic_name, cmd_name=None, **kwargs): + print (f"In TestrunnerSync.sendcmd({topic_name})") + msg_data = self.Controller.generate_message(topic_name, cmd_name) + if hasattr(msg_data, 'Payload'): + msg_data.Payload = kwargs + self.Controller.setup_header(msg_data, self.instance_name, topic_name) + encoded_obj = self.Controller.encode_datagram(msg_data) + msg_seq = self.Controller.get_sequence(topic_name, msg_data) + history_entry = DataModelSync.HistoryEntry(None,msg_seq,encoded_obj,msg_data) + self.DataModel.append_to_topic(topic_name, history_entry) + return self.transport.transmit(encoded_obj) + + def get_msg_id_from_topic(self, topic_name:str): + return self.Controller.get_msg_id_from_topic(topic_name, self.instance_name) diff --git a/cfecfs/testrunner/src/transports/transport_udp.py b/cfecfs/testrunner/src/transports/transport_udp.py new file mode 100644 index 0000000..b5fcb52 --- /dev/null +++ b/cfecfs/testrunner/src/transports/transport_udp.py @@ -0,0 +1,84 @@ +''' +Copyright (c) 2025 United States Government as represented by +the Administrator of the National Aeronautics and Space Administration. +All Rights Reserved. +''' + +import ipaddress +import socket +import selectors +import errno +from testrunner.core.transport_base import TransportBase +from testrunner.core.timestamp import Timestamp + +class Transport_UDP(TransportBase): + + def __init__(self, remote_addr:tuple, local_addr:tuple=None): + + try: + ipaddress.IPv4Address(remote_addr[0]) + except ipaddress.AddressValueError as e: + print (f"remote IP value is not valid {e}") + raise + + self.remote_addr = remote_addr + self.local_addr = local_addr if local_addr else ("127.0.0.1",2234) + self.socket = None + self.family = socket.AF_INET + self.type = socket.SOCK_DGRAM + self.usock = None + self.rdsel = None + + def get_socket(self): + if self.usock is None: + print(f"Init socket bound to {self.local_addr[0]}:{self.local_addr[1]}") + + try: + self.usock = socket.socket(self.family, self.type) + self.usock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.usock.bind(self.local_addr) + self.usock.setblocking(False) + self.max_recv_bytes = 4096 + + except Exception as e: + print(f"socket initialization failed: {e}") + self.usock = None + raise + + return self.usock + + def wait_readable(self, timeout:Timestamp): + if self.rdsel is None: + self.rdsel = selectors.DefaultSelector() + self.rdsel.register(self.get_socket(), selectors.EVENT_READ) + + remaining_sec = timeout.remaining_seconds() + if remaining_sec is not None and remaining_sec < 0: + remaining_sec = 0 + + return self.rdsel.select(remaining_sec) + + def transmit(self, data:bytes): + + try: + bytessent = self.get_socket().sendto(data, self.remote_addr) + except Exception as e: + print("socket.sendto() failed: {e}") + bytessent = 0 + + return (bytessent == len(data)) + + def receive(self, timeout:Timestamp): + + # wait for the socket to be readable + self.wait_readable(timeout) + + try: + (data, recv_host) = self.get_socket().recvfrom(self.max_recv_bytes) + except IOError as exception: + data = None + recv_host = None + if exception.errno == errno.EWOULDBLOCK: + pass + + return (data, recv_host) diff --git a/cfecfs/testrunner/stage_app_tests.cmake.in b/cfecfs/testrunner/stage_app_tests.cmake.in new file mode 100644 index 0000000..3bbc806 --- /dev/null +++ b/cfecfs/testrunner/stage_app_tests.cmake.in @@ -0,0 +1,38 @@ +set(MAKE $ENV{_}) +set(STAGING_DIR_BASE $ENV{DESTDIR}@CMAKE_INSTALL_PREFIX@/lib/python) +set(STAGING_DIR_TEST ${STAGING_DIR_BASE}/cfs_app_tests) +if (@TESTRUNNER_INSTALL_SYMLINK@) + set(TESTRUNNER_INSTALL_SYMLINK "TESTRUNNER_INSTALL_SYMLINK=1") +else() + set(TESTRUNNER_INSTALL_SYMLINK) +endif() + +message(STATUS "Installing CFS app tests to: ${STAGING_DIR_TEST}") +file(MAKE_DIRECTORY ${STAGING_DIR_TEST}) +execute_process( + COMMAND + make O=@CMAKE_BINARY_DIR@ ${TESTRUNNER_INSTALL_SYMLINK} -f @EDS_CFS_TESTRUNNER_SOURCE_DIR@/cfs_app_test_groups.mk __init__.py + WORKING_DIRECTORY + ${STAGING_DIR_TEST} + RESULT_VARIABLE + STATUS +) + +if (NOT STATUS EQUAL 0) + message(FATAL_ERROR "${MAKE} returned status ${STATUS}") +endif() + +if (TESTRUNNER_INSTALL_SYMLINK) + message(STATUS "Symlinking test library to: ${STAGING_DIR_BASE}") + execute_process( + COMMAND + ${CMAKE_COMMAND} -E create_symlink @EDS_CFS_TESTRUNNER_SOURCE_DIR@/src ${STAGING_DIR_BASE}/testrunner + RESULT_VARIABLE + STATUS + ) + + if (NOT STATUS EQUAL 0) + message(FATAL_ERROR "${CMAKE_COMMAND} returned status ${STATUS}") + endif() + +endif() From 3486316709d7407a2f1b6cfe6c0486438ad0ec14 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Tue, 28 Apr 2026 10:54:41 -0400 Subject: [PATCH 14/15] Fix cFS/cFE#219, ignore msgid during init Depending on the use case the real MsgID might not be known when CFE_MSG_Init is called. Do not fail this call on an unknown MsgID. --- cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h | 2 +- cfecfs/edsmsg/fsw/src/edsmsg_init.c | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h b/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h index c1a4f52..982df2d 100644 --- a/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h +++ b/cfecfs/edsmsg/fsw/inc/edsmsg_hdr.h @@ -73,7 +73,7 @@ .SecHdrFlags = (mid) >> 11, \ .AppId = (mid) & 0x7FF, \ .SeqFlag = 0x03, \ - .Length = (size), \ + .Length = (size - 7), \ }, \ .Sec = {.FunctionCode = (fc), .Checksum = (cksum)} \ } \ diff --git a/cfecfs/edsmsg/fsw/src/edsmsg_init.c b/cfecfs/edsmsg/fsw/src/edsmsg_init.c index 5c1a76a..26714d4 100644 --- a/cfecfs/edsmsg/fsw/src/edsmsg_init.c +++ b/cfecfs/edsmsg/fsw/src/edsmsg_init.c @@ -26,6 +26,7 @@ */ #include "cfe_msg.h" #include "cfe_time.h" +#include "cfe_sb.h" #include "cfe_missionlib_runtime.h" #include "ccsds_spacepacket_eds_datatypes.h" @@ -41,8 +42,7 @@ *-----------------------------------------------------------------*/ CFE_Status_t CFE_MSG_Init(CFE_MSG_Message_t *MsgPtr, CFE_SB_MsgId_t MsgId, CFE_MSG_Size_t Size) { - EdsDataType_CCSDS_CommonHdr_t *CommonHdr; - CFE_Status_t Status; + CFE_Status_t Status; if (MsgPtr == NULL || Size < sizeof(EdsDataType_CCSDS_CommonHdr_t)) { @@ -52,17 +52,22 @@ CFE_Status_t CFE_MSG_Init(CFE_MSG_Message_t *MsgPtr, CFE_SB_MsgId_t MsgId, CFE_M /* Clear and set defaults */ memset(MsgPtr, 0, Size); - /* Set various fields in the MsgPtr Metadata object from the bits in MsgId */ - Status = CFE_MSG_SetMsgId(MsgPtr, MsgId); - if (Status == CFE_SUCCESS) + /* Allow "CFE_SB_INVALID_MSG_ID" here - in some cases the real msgid is filled in later */ + /* however the size should always be a valid value */ + if (CFE_SB_MsgIdToValue(MsgId) == CFE_SB_MsgIdToValue(CFE_SB_INVALID_MSG_ID)) + { + Status = CFE_SUCCESS; + } + else { - CommonHdr = (EdsDataType_CCSDS_CommonHdr_t *)(void *)MsgPtr; + Status = CFE_MSG_SetMsgId(MsgPtr, MsgId); + } - /* Default to complete packets */ - CommonHdr->SeqFlag = 3; /* jphfix: enum? */ + if (Status == CFE_SUCCESS) + { + CFE_MSG_SetSegmentationFlag(MsgPtr, CFE_MSG_SegFlag_Unsegmented); - /* Set the standard size field */ - CommonHdr->Length = Size - 7; + Status = CFE_MSG_SetSize(MsgPtr, Size); } return Status; From 1ff6f2ce116103481ba899c8ca84f3ef7b51d25a Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Thu, 7 May 2026 10:01:21 -0400 Subject: [PATCH 15/15] Fix nasa/cFS#995, Update action versions Update actions versions to resolve deprecation warnings --- .github/actions/setup-osal/action.yml | 2 +- .github/workflows/static-analysis.yml | 2 +- .github/workflows/validation-test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/setup-osal/action.yml b/.github/actions/setup-osal/action.yml index 9981851..f16e83f 100644 --- a/.github/actions/setup-osal/action.yml +++ b/.github/actions/setup-osal/action.yml @@ -19,7 +19,7 @@ runs: using: 'composite' steps: - name: Checkout OSAL - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: ${{ inputs.upstream-repo }} ref: ${{ inputs.upstream-ref }} diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 5bd0380..5f20899 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -45,7 +45,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: source diff --git a/.github/workflows/validation-test.yml b/.github/workflows/validation-test.yml index 372f8b6..e23a13d 100644 --- a/.github/workflows/validation-test.yml +++ b/.github/workflows/validation-test.yml @@ -58,7 +58,7 @@ jobs: - name: Checkout EdsLib if: steps.cache-edslib.outputs.cache-hit != 'True' - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: source