// // -------------------------------------------------------------------------- // Gurux Ltd // // // // Filename: $HeadURL$ // // Version: $Revision$, // $Date$ // $Author$ // // Copyright (c) Gurux Ltd // //--------------------------------------------------------------------------- // // DESCRIPTION // // This file is a part of Gurux Device Framework. // // Gurux Device Framework is Open Source software; you can redistribute it // and/or modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; version 2 of the License. // Gurux Device Framework is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // This code is licensed under the GNU General Public License v2. // Full text may be retrieved at http://www.gnu.org/licenses/gpl-2.0.txt //--------------------------------------------------------------------------- #if defined(_WIN32) || defined(_WIN64) #include #endif #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) #include #include //printf needs this or error is generated. #endif #if _MSC_VER > 1400 #include #endif #include "gxignore.h" #include "converters.h" #include "gxobjects.h" #ifndef DLMS_IGNORE_MALLOC #include "gxmem.h" #ifndef DLMS_IGNORE_STRING_CONVERTER #include #include "objectarray.h" #include "gxkey.h" #endif //DLMS_IGNORE_STRING_CONVERTER #else #include "enums.h" #endif //DLMS_IGNORE_MALLOC #include #include "helpers.h" int obj_typeToString(DLMS_OBJECT_TYPE type, char* buff) { const char* str = obj_typeToString2(type); if (str != NULL) { memcpy(buff, str, strlen(str)); } else { buff[0] = '\0'; } return 0; } #ifdef DLMS_IGNORE_MALLOC int obj_UInt16ArrayToString(gxByteBuffer* bb, gxArray* arr) { int ret = 0; uint16_t pos; uint16_t* it; for (pos = 0; pos != arr->size; ++pos) { if (pos != 0) { bb_addString(bb, ", "); } #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) if ((ret = arr_getByIndex2(arr, pos, (void**)&it, sizeof(uint16_t))) != 0 || (ret = bb_addIntAsString(bb, *it)) != 0) { break; } #else if ((ret = arr_getByIndex(arr, pos, (void**)&it)) != 0 || (ret = bb_addIntAsString(bb, *it)) != 0) { break; } #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) } return ret; } #else int obj_UInt16ArrayToString(gxByteBuffer* bb, gxArray* arr) { int ret = 0; uint16_t pos; uint16_t* it; for (pos = 0; pos != arr->size; ++pos) { if (pos != 0) { bb_addString(bb, ", "); } #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) if ((ret = arr_getByIndex2(arr, pos, (void**)&it, sizeof(uint16_t))) != 0 || (ret = bb_addIntAsString(bb, *it)) != 0) { break; } #else if ((ret = arr_getByIndex(arr, pos, (void**)&it)) != 0 || (ret = bb_addIntAsString(bb, *it)) != 0) { break; } #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) } return ret; } #endif //DLMS_IGNORE_MALLOC const char* obj_typeToString2(DLMS_OBJECT_TYPE type) { const char* ret; switch (type) { case DLMS_OBJECT_TYPE_NONE: ret = GET_STR_FROM_EEPROM(""); break; case DLMS_OBJECT_TYPE_DATA: ret = GET_STR_FROM_EEPROM("Data"); break; case DLMS_OBJECT_TYPE_REGISTER: ret = GET_STR_FROM_EEPROM("Register"); break; case DLMS_OBJECT_TYPE_CLOCK: ret = GET_STR_FROM_EEPROM("Clock"); break; case DLMS_OBJECT_TYPE_ACTION_SCHEDULE: ret = GET_STR_FROM_EEPROM("ActionSchedule"); break; case DLMS_OBJECT_TYPE_ACTIVITY_CALENDAR: ret = GET_STR_FROM_EEPROM("ActivityCalendar"); break; case DLMS_OBJECT_TYPE_ASSOCIATION_LOGICAL_NAME: ret = GET_STR_FROM_EEPROM("AssociationLogicalName"); break; case DLMS_OBJECT_TYPE_ASSOCIATION_SHORT_NAME: ret = GET_STR_FROM_EEPROM("AssociationShortName"); break; case DLMS_OBJECT_TYPE_AUTO_ANSWER: ret = GET_STR_FROM_EEPROM("AutoAnswer"); break; case DLMS_OBJECT_TYPE_AUTO_CONNECT: ret = GET_STR_FROM_EEPROM("AutoConnect"); break; case DLMS_OBJECT_TYPE_DEMAND_REGISTER: ret = GET_STR_FROM_EEPROM("DemandRegister"); break; case DLMS_OBJECT_TYPE_MAC_ADDRESS_SETUP: ret = GET_STR_FROM_EEPROM("MACAddressSetup"); break; case DLMS_OBJECT_TYPE_EXTENDED_REGISTER: ret = GET_STR_FROM_EEPROM("ExtendedRegister"); break; case DLMS_OBJECT_TYPE_GPRS_SETUP: ret = GET_STR_FROM_EEPROM("GPRSSetup"); break; case DLMS_OBJECT_TYPE_SECURITY_SETUP: ret = GET_STR_FROM_EEPROM("SecuritySetup"); break; case DLMS_OBJECT_TYPE_IEC_HDLC_SETUP: ret = GET_STR_FROM_EEPROM("IECHDLCSetup"); break; case DLMS_OBJECT_TYPE_IEC_LOCAL_PORT_SETUP: ret = GET_STR_FROM_EEPROM("IECLocalPortSetup"); break; case DLMS_OBJECT_TYPE_IEC_TWISTED_PAIR_SETUP: ret = GET_STR_FROM_EEPROM("IECTwistedPairSetup"); break; case DLMS_OBJECT_TYPE_IP4_SETUP: ret = GET_STR_FROM_EEPROM("IP4Setup"); break; case DLMS_OBJECT_TYPE_IP6_SETUP: ret = GET_STR_FROM_EEPROM("IP6Setup"); break; case DLMS_OBJECT_TYPE_MBUS_SLAVE_PORT_SETUP: ret = GET_STR_FROM_EEPROM("MBUSSlavePortSetup"); break; case DLMS_OBJECT_TYPE_IMAGE_TRANSFER: ret = GET_STR_FROM_EEPROM("ImageTransfer"); break; case DLMS_OBJECT_TYPE_DISCONNECT_CONTROL: ret = GET_STR_FROM_EEPROM("DisconnectControl"); break; case DLMS_OBJECT_TYPE_LIMITER: ret = GET_STR_FROM_EEPROM("Limiter"); break; case DLMS_OBJECT_TYPE_MBUS_CLIENT: ret = GET_STR_FROM_EEPROM("MBUSClient"); break; case DLMS_OBJECT_TYPE_MODEM_CONFIGURATION: ret = GET_STR_FROM_EEPROM("ModemConfiguration"); break; case DLMS_OBJECT_TYPE_PPP_SETUP: ret = GET_STR_FROM_EEPROM("PPPSetup"); break; case DLMS_OBJECT_TYPE_PROFILE_GENERIC: ret = GET_STR_FROM_EEPROM("ProfileGeneric"); break; case DLMS_OBJECT_TYPE_REGISTER_ACTIVATION: ret = GET_STR_FROM_EEPROM("RegisterActivation"); break; case DLMS_OBJECT_TYPE_REGISTER_MONITOR: ret = GET_STR_FROM_EEPROM("RegisterMonitor"); break; case DLMS_OBJECT_TYPE_REGISTER_TABLE: ret = GET_STR_FROM_EEPROM("RegisterTable"); break; case DLMS_OBJECT_TYPE_ZIG_BEE_SAS_STARTUP: ret = GET_STR_FROM_EEPROM("ZigBeeSASStartup"); break; case DLMS_OBJECT_TYPE_ZIG_BEE_SAS_JOIN: ret = GET_STR_FROM_EEPROM("ZigBeeSASJoin"); break; case DLMS_OBJECT_TYPE_ZIG_BEE_SAS_APS_FRAGMENTATION: ret = GET_STR_FROM_EEPROM("ZigBeeSASAPSFragmentation"); break; case DLMS_OBJECT_TYPE_ZIG_BEE_NETWORK_CONTROL: ret = GET_STR_FROM_EEPROM("ZigBeeNetworkControl"); break; case DLMS_OBJECT_TYPE_SAP_ASSIGNMENT: ret = GET_STR_FROM_EEPROM("SAPAssignment"); break; #ifndef DLMS_IGNORE_SCHEDULE case DLMS_OBJECT_TYPE_SCHEDULE: ret = GET_STR_FROM_EEPROM("Schedule"); break; #endif //DLMS_IGNORE_SCHEDULE #ifndef DLMS_IGNORE_SCRIPT_TABLE case DLMS_OBJECT_TYPE_SCRIPT_TABLE: ret = GET_STR_FROM_EEPROM("ScriptTable"); break; #endif //DLMS_IGNORE_SCRIPT_TABLE case DLMS_OBJECT_TYPE_SMTP_SETUP: ret = GET_STR_FROM_EEPROM("SMTPSetup"); break; case DLMS_OBJECT_TYPE_SPECIAL_DAYS_TABLE: ret = GET_STR_FROM_EEPROM("SpecialDaysTable"); break; case DLMS_OBJECT_TYPE_STATUS_MAPPING: ret = GET_STR_FROM_EEPROM("StatusMapping"); break; case DLMS_OBJECT_TYPE_TCP_UDP_SETUP: ret = GET_STR_FROM_EEPROM("TCPUDPSetup"); break; #ifndef DLMS_IGNORE_MBUS_DIAGNOSTIC case DLMS_OBJECT_TYPE_MBUS_DIAGNOSTIC: ret = GET_STR_FROM_EEPROM("MBusDiagnostic"); break; #endif //DLMS_IGNORE_MBUS_DIAGNOSTIC #ifndef DLMS_IGNORE_MBUS_PORT_SETUP case DLMS_OBJECT_TYPE_MBUS_PORT_SETUP: ret = GET_STR_FROM_EEPROM("MBusPortSetup"); break; #endif //DLMS_IGNORE_MBUS_PORT_SETUP #ifndef DLMS_IGNORE_G3_PLC_MAC_LAYER_COUNTERS case DLMS_OBJECT_TYPE_G3_PLC_MAC_LAYER_COUNTERS: ret = GET_STR_FROM_EEPROM("G3PlcMacLayerCounters"); break; #endif //DLMS_IGNORE_G3_PLC_MAC_LAYER_COUNTERS #ifndef DLMS_IGNORE_G3_PLC_MAC_SETUP case DLMS_OBJECT_TYPE_G3_PLC_MAC_SETUP: ret = GET_STR_FROM_EEPROM("G3PlcMacSetup"); break; #endif //DLMS_IGNORE_G3_PLC_MAC_SETUP #ifndef DLMS_IGNORE_G3_PLC_6LO_WPAN case DLMS_OBJECT_TYPE_G3_PLC_6LO_WPAN: ret = GET_STR_FROM_EEPROM("G3Plc6LoWPAN"); break; #endif //DLMS_IGNORE_G3_PLC_6LO_WPAN #ifndef DLMS_IGNORE_FUNCTION_CONTROL case DLMS_OBJECT_TYPE_FUNCTION_CONTROL: ret = GET_STR_FROM_EEPROM("FunctionControl"); break; #endif //DLMS_IGNORE_FUNCTION_CONTROL #ifndef DLMS_IGNORE_ARRAY_MANAGER case DLMS_OBJECT_TYPE_ARRAY_MANAGER: ret = GET_STR_FROM_EEPROM("ArrayManager"); break; #endif //DLMS_IGNORE_ARRAY_MANAGER case DLMS_OBJECT_TYPE_UTILITY_TABLES: ret = GET_STR_FROM_EEPROM("UtilityTables"); break; case DLMS_OBJECT_TYPE_MBUS_MASTER_PORT_SETUP: ret = GET_STR_FROM_EEPROM("MBUSMasterPortSetup"); break; case DLMS_OBJECT_TYPE_PUSH_SETUP: ret = GET_STR_FROM_EEPROM("PushSetup"); break; case DLMS_OBJECT_TYPE_DATA_PROTECTION: ret = GET_STR_FROM_EEPROM("DataProtection"); break; case DLMS_OBJECT_TYPE_ACCOUNT: ret = GET_STR_FROM_EEPROM("Account"); break; case DLMS_OBJECT_TYPE_CREDIT: ret = GET_STR_FROM_EEPROM("Credit"); break; case DLMS_OBJECT_TYPE_CHARGE: ret = GET_STR_FROM_EEPROM("Charge"); break; case DLMS_OBJECT_TYPE_TOKEN_GATEWAY: ret = GET_STR_FROM_EEPROM("TokenGateway"); break; case DLMS_OBJECT_TYPE_LLC_SSCS_SETUP: ret = GET_STR_FROM_EEPROM("LLCSSCSSetup"); break; case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_PHYSICAL_LAYER_COUNTERS: ret = GET_STR_FROM_EEPROM("PrimeNbOfdmPLCphysicalLayerCounters"); break; case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_SETUP: ret = GET_STR_FROM_EEPROM("PrimeNbOfdmPLCMacSetup"); break; case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_FUNCTIONAL_PARAMETERS: ret = GET_STR_FROM_EEPROM("PrimeNbOfdmPLCMacFunctionalParameters"); break; case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_COUNTERS: ret = GET_STR_FROM_EEPROM("PrimeNbOfdmPLCMacCounters"); break; case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_NETWORK_ADMINISTRATION_DATA: ret = GET_STR_FROM_EEPROM("PrimeNbOfdmPLCMacNetworkAdministrationData"); break; case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_APPLICATIONS_IDENTIFICATION: ret = GET_STR_FROM_EEPROM("PrimeNbOfdmPLCApplicationsIdentification"); break; case DLMS_OBJECT_TYPE_PARAMETER_MONITOR: ret = GET_STR_FROM_EEPROM("ParameterMonitor"); break; case DLMS_OBJECT_TYPE_COMPACT_DATA: ret = GET_STR_FROM_EEPROM("CompactData"); break; case DLMS_OBJECT_TYPE_GSM_DIAGNOSTIC: ret = GET_STR_FROM_EEPROM("GsmDiagnostic"); break; #ifndef DLMS_IGNORE_ARBITRATOR case DLMS_OBJECT_TYPE_ARBITRATOR: ret = GET_STR_FROM_EEPROM("Arbitrator"); break; #endif //DLMS_IGNORE_ARBITRATOR #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE1_SETUP case DLMS_OBJECT_TYPE_IEC_8802_LLC_TYPE1_SETUP: ret = GET_STR_FROM_EEPROM("Iec8802LlcType1Setup"); break; #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE1_SETUP #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE2_SETUP case DLMS_OBJECT_TYPE_IEC_8802_LLC_TYPE2_SETUP: ret = GET_STR_FROM_EEPROM("Iec8802LlcType2Setup"); break; #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE2_SETUP #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE3_SETUP case DLMS_OBJECT_TYPE_IEC_8802_LLC_TYPE3_SETUP: ret = GET_STR_FROM_EEPROM("Iec8802LlcType3Setup"); break; #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE3_SETUP #ifndef DLMS_IGNORE_SFSK_ACTIVE_INITIATOR case DLMS_OBJECT_TYPE_SFSK_ACTIVE_INITIATOR: ret = GET_STR_FROM_EEPROM("SFSKActiveInitiator"); break; #endif //DLMS_IGNORE_SFSK_ACTIVE_INITIATOR #ifndef DLMS_IGNORE_SFSK_MAC_COUNTERS case DLMS_OBJECT_TYPE_SFSK_MAC_COUNTERS: ret = GET_STR_FROM_EEPROM("FSKMacCounters"); break; #endif //DLMS_IGNORE_SFSK_MAC_COUNTERS #ifndef DLMS_IGNORE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS case DLMS_OBJECT_TYPE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS: ret = GET_STR_FROM_EEPROM("SFSKMacSynchronizationTimeouts"); break; #endif //DLMS_IGNORE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS #ifndef DLMS_IGNORE_SFSK_PHY_MAC_SETUP case DLMS_OBJECT_TYPE_SFSK_PHY_MAC_SETUP: ret = GET_STR_FROM_EEPROM("SFSKPhyMacSetUp"); break; #endif //DLMS_IGNORE_SFSK_PHY_MAC_SETUP #ifndef DLMS_IGNORE_SFSK_REPORTING_SYSTEM_LIST case DLMS_OBJECT_TYPE_SFSK_REPORTING_SYSTEM_LIST: ret = GET_STR_FROM_EEPROM("SFSKReportingSystemList"); break; #endif //DLMS_IGNORE_SFSK_REPORTING_SYSTEM_LIST #ifdef DLMS_ITALIAN_STANDARD case DLMS_OBJECT_TYPE_TARIFF_PLAN: ret = GET_STR_FROM_EEPROM("TariffPlan"); break; #endif //DLMS_ITALIAN_STANDARD default: //Unknown type. ret = NULL; break; } return ret; } #ifndef DLMS_IGNORE_MALLOC #ifndef DLMS_IGNORE_STRING_CONVERTER const char* obj_getUnitAsString(unsigned char unit) { const char* ret; switch (unit) { case DLMS_UNIT_NONE: ret = GET_STR_FROM_EEPROM("None"); break; case DLMS_UNIT_YEAR: ret = GET_STR_FROM_EEPROM("Year"); break; case DLMS_UNIT_MONTH: ret = GET_STR_FROM_EEPROM("Month"); break; case DLMS_UNIT_WEEK: ret = GET_STR_FROM_EEPROM("Week"); break; case DLMS_UNIT_DAY: ret = GET_STR_FROM_EEPROM("Day"); break; case DLMS_UNIT_HOUR: ret = GET_STR_FROM_EEPROM("Hour"); break; case DLMS_UNIT_MINUTE: ret = GET_STR_FROM_EEPROM("Minute"); break; case DLMS_UNIT_SECOND: ret = GET_STR_FROM_EEPROM("Second"); break; case DLMS_UNIT_PHASE_ANGLE_DEGREE: ret = GET_STR_FROM_EEPROM("PhaseAngle"); break; case DLMS_UNIT_TEMPERATURE: ret = GET_STR_FROM_EEPROM("Temperature"); break; case DLMS_UNIT_LOCAL_CURRENCY: ret = GET_STR_FROM_EEPROM("LocalCurrency"); break; case DLMS_UNIT_LENGTH: ret = GET_STR_FROM_EEPROM("Length"); break; case DLMS_UNIT_SPEED: ret = GET_STR_FROM_EEPROM("Speed"); break; case DLMS_UNIT_VOLUME_CUBIC_METER: ret = GET_STR_FROM_EEPROM("Volume Cubic Meter"); break; case DLMS_UNIT_CORRECTED_VOLUME: ret = GET_STR_FROM_EEPROM("Corrected volume"); break; case DLMS_UNIT_VOLUME_FLUX_HOUR: ret = GET_STR_FROM_EEPROM("Volume flux hour"); break; case DLMS_UNIT_CORRECTED_VOLUME_FLUX_HOUR: ret = GET_STR_FROM_EEPROM("Corrected volume flux hour"); break; case DLMS_UNIT_VOLUME_FLUX_DAY: ret = GET_STR_FROM_EEPROM("Volume flux day"); break; case DLMS_UNIT_CORRECTED_VOLUME_FLUX_DAY: ret = GET_STR_FROM_EEPROM("Corrected volume flux day"); break; case DLMS_UNIT_VOLUME_LITER: ret = GET_STR_FROM_EEPROM("Volume liter"); break; case DLMS_UNIT_MASS_KG: ret = GET_STR_FROM_EEPROM("Mass Kg"); break; case DLMS_UNIT_FORCE: ret = GET_STR_FROM_EEPROM("Force"); break; case DLMS_UNIT_ENERGY: ret = GET_STR_FROM_EEPROM("Energy"); break; case DLMS_UNIT_PRESSURE_PASCAL: ret = GET_STR_FROM_EEPROM("Pressure pascal"); break; case DLMS_UNIT_PRESSURE_BAR: ret = GET_STR_FROM_EEPROM("Pressure Bar"); break; case DLMS_UNIT_ENERGY_JOULE: ret = GET_STR_FROM_EEPROM("Energy joule"); break; case DLMS_UNIT_THERMAL_POWER: ret = GET_STR_FROM_EEPROM("Thermal power"); break; case DLMS_UNIT_ACTIVE_POWER: ret = GET_STR_FROM_EEPROM("Active power"); break; case DLMS_UNIT_APPARENT_POWER: ret = GET_STR_FROM_EEPROM("Apparent power"); break; case DLMS_UNIT_REACTIVE_POWER: ret = GET_STR_FROM_EEPROM("Reactive power"); break; case DLMS_UNIT_ACTIVE_ENERGY: ret = GET_STR_FROM_EEPROM("Active energy"); break; case DLMS_UNIT_APPARENT_ENERGY: ret = GET_STR_FROM_EEPROM("Apparent energy"); break; case DLMS_UNIT_REACTIVE_ENERGY: ret = GET_STR_FROM_EEPROM("Reactive energy"); break; case DLMS_UNIT_CURRENT: ret = GET_STR_FROM_EEPROM("Current"); break; case DLMS_UNIT_ELECTRICAL_CHARGE: ret = GET_STR_FROM_EEPROM("ElectricalCharge"); break; case DLMS_UNIT_VOLTAGE: ret = GET_STR_FROM_EEPROM("Voltage"); break; case DLMS_UNIT_ELECTRICAL_FIELD_STRENGTH: ret = GET_STR_FROM_EEPROM("Electrical field strength E V/m"); break; case DLMS_UNIT_CAPACITY: ret = GET_STR_FROM_EEPROM("Capacity C farad C/V = As/V"); break; case DLMS_UNIT_RESISTANCE: ret = GET_STR_FROM_EEPROM("Resistance"); break; case DLMS_UNIT_RESISTIVITY: ret = GET_STR_FROM_EEPROM("Resistivity"); break; case DLMS_UNIT_MAGNETIC_FLUX: ret = GET_STR_FROM_EEPROM("Magnetic flux F weber Wb = Vs"); break; case DLMS_UNIT_INDUCTION: ret = GET_STR_FROM_EEPROM("Induction T tesla Wb/m2"); break; case DLMS_UNIT_MAGNETIC: ret = GET_STR_FROM_EEPROM("Magnetic field strength H A/m"); break; case DLMS_UNIT_INDUCTIVITY: ret = GET_STR_FROM_EEPROM("Inductivity L henry H = Wb/A"); break; case DLMS_UNIT_FREQUENCY: ret = GET_STR_FROM_EEPROM("Frequency"); break; case DLMS_UNIT_ACTIVE: ret = GET_STR_FROM_EEPROM("Active energy"); break; case DLMS_UNIT_REACTIVE: ret = GET_STR_FROM_EEPROM("Reactive energy"); break; case DLMS_UNIT_APPARENT: ret = GET_STR_FROM_EEPROM("Apparent energy"); break; case DLMS_UNIT_V260: ret = GET_STR_FROM_EEPROM("V260*60s"); break; case DLMS_UNIT_A260: ret = GET_STR_FROM_EEPROM("A260*60s"); break; case DLMS_UNIT_MASS_KG_PER_SECOND: ret = GET_STR_FROM_EEPROM("Mass"); break; case DLMS_UNIT_CONDUCTANCE: ret = GET_STR_FROM_EEPROM("Conductance siemens"); break; case DLMS_UNIT_KELVIN: ret = GET_STR_FROM_EEPROM("Kelvin"); break; case DLMS_UNIT_RU2H: ret = GET_STR_FROM_EEPROM("RU2h"); break; case DLMS_UNIT_RI2H: ret = GET_STR_FROM_EEPROM("RI2h"); break; case DLMS_UNIT_CUBIC_METER_RV: ret = GET_STR_FROM_EEPROM("Cubic meter RV"); break; case DLMS_UNIT_PERCENTAGE: ret = GET_STR_FROM_EEPROM("Percentage"); break; case DLMS_UNIT_AMPERE_HOURS: ret = GET_STR_FROM_EEPROM("Ampere hours"); break; case DLMS_UNIT_ENERGY_PER_VOLUME: ret = GET_STR_FROM_EEPROM("Energy per volume"); break; case DLMS_UNIT_WOBBE: ret = GET_STR_FROM_EEPROM("Wobbe"); break; case DLMS_UNIT_MOLE_PERCENT: ret = GET_STR_FROM_EEPROM("Mole percent"); break; case DLMS_UNIT_MASS_DENSITY: ret = GET_STR_FROM_EEPROM("Mass density"); break; case DLMS_UNIT_PASCAL_SECOND: ret = GET_STR_FROM_EEPROM("Pascal second"); break; case DLMS_UNIT_JOULE_KILOGRAM: ret = GET_STR_FROM_EEPROM("Joule kilogram"); break; case DLMS_UNIT_PRESSURE_GRAM_PER_SQUARE_CENTIMETER: ret = GET_STR_FROM_EEPROM("Pressure, gram per square centimeter."); break; case DLMS_UNIT_PRESSURE_ATMOSPHERE: ret = GET_STR_FROM_EEPROM("Pressure, atmosphere."); break; case DLMS_UNIT_SIGNAL_STRENGTH_MILLI_WATT: ret = GET_STR_FROM_EEPROM("Signal strength, dB milliwatt"); break; case DLMS_UNIT_SIGNAL_STRENGTH_MICRO_VOLT: //logarithmic unit that expresses the ratio between two values of a physical quantity ret = GET_STR_FROM_EEPROM("Signal strength, dB microvolt"); break; case DLMS_UNIT_DB: ret = GET_STR_FROM_EEPROM("dB"); break; case DLMS_UNIT_INCH: ret = GET_STR_FROM_EEPROM("Inch"); break; case DLMS_UNIT_FOOT: ret = GET_STR_FROM_EEPROM("Foot"); break; case DLMS_UNIT_POUND: ret = GET_STR_FROM_EEPROM("Pound"); break; case DLMS_UNIT_FAHRENHEIT: ret = GET_STR_FROM_EEPROM("Fahrenheit"); break; case DLMS_UNIT_RANKINE: ret = GET_STR_FROM_EEPROM("Rankine"); break; case DLMS_UNIT_SQUARE_INCH: ret = GET_STR_FROM_EEPROM("Square inch"); break; case DLMS_UNIT_SQUARE_FOOT: ret = GET_STR_FROM_EEPROM("Square foot"); break; case DLMS_UNIT_ACRE: ret = GET_STR_FROM_EEPROM("Acre"); break; case DLMS_UNIT_CUBIC_INCH: ret = GET_STR_FROM_EEPROM("Cubic inch"); break; case DLMS_UNIT_CUBIC_FOOT: ret = GET_STR_FROM_EEPROM("Cubic foot"); break; case DLMS_UNIT_ACRE_FOOT: ret = GET_STR_FROM_EEPROM("Acre foot"); break; case DLMS_UNIT_GALLON_IMPERIAL: ret = GET_STR_FROM_EEPROM("Gallon Imperial"); break; case DLMS_UNIT_GALLON_US: ret = GET_STR_FROM_EEPROM("GallonUS"); break; case DLMS_UNIT_POUND_FORCE: ret = GET_STR_FROM_EEPROM("Pound force"); break; case DLMS_UNIT_POUND_FORCE_PER_SQUARE_INCH: ret = GET_STR_FROM_EEPROM("Pound force per square inch"); break; case DLMS_UNIT_POUND_PER_CUBIC_FOOT: ret = GET_STR_FROM_EEPROM("Pound per cubic foot"); break; case DLMS_UNIT_POUND_PER_FOOT_SECOND: ret = GET_STR_FROM_EEPROM("Pound per foot second"); break; case DLMS_UNIT_BRITISH_THERMAL_UNIT: ret = GET_STR_FROM_EEPROM("British thermal unit"); break; case DLMS_UNIT_THERM_EU: ret = GET_STR_FROM_EEPROM("Therm EU"); break; case DLMS_UNIT_THERM_US: ret = GET_STR_FROM_EEPROM("Therm US"); break; case DLMS_UNIT_BRITISH_THERMAL_UNIT_PER_POUND: ret = GET_STR_FROM_EEPROM("British thermal unit per pound"); break; case DLMS_UNIT_BRITISH_THERMAL_UNIT_PER_CUBIC_FOOT: ret = GET_STR_FROM_EEPROM("British thermal unit per cubic foot"); break; case DLMS_UNIT_CUBIC_FEET: ret = GET_STR_FROM_EEPROM("Cubic feet"); break; case DLMS_UNIT_FOOT_PER_SECOND: ret = GET_STR_FROM_EEPROM("Foot per second"); break; case DLMS_UNIT_CUBIC_FOOT_PER_MIN: ret = GET_STR_FROM_EEPROM("Foot per min"); break; case DLMS_UNIT_CUBIC_FOOT_PER_DAY: ret = GET_STR_FROM_EEPROM("Foot per day"); break; case DLMS_UNIT_ACRE_FOOT_PER_SECOND: ret = GET_STR_FROM_EEPROM("Acre foot per second"); break; case DLMS_UNIT_ACRE_FOOT_PER_MIN: ret = GET_STR_FROM_EEPROM("Acre foot per min"); break; case DLMS_UNIT_ACRE_FOOT_PER_HOUR: ret = GET_STR_FROM_EEPROM("Acre foot per hour"); break; case DLMS_UNIT_ACRE_FOOT_PER_DAY: ret = GET_STR_FROM_EEPROM("Acre foot per day"); break; case DLMS_UNIT_IMPERIAL_GALLON: ret = GET_STR_FROM_EEPROM("Imperial gallon"); break; case DLMS_UNIT_IMPERIAL_GALLON_PER_SECOND: ret = GET_STR_FROM_EEPROM("Imperial gallon per second"); break; case DLMS_UNIT_IMPERIAL_GALLON_PER_MIN: ret = GET_STR_FROM_EEPROM("Imperial gallon per min"); break; case DLMS_UNIT_IMPERIAL_GALLON_PER_HOUR: ret = GET_STR_FROM_EEPROM("Imperial gallon per hour"); break; case DLMS_UNIT_IMPERIAL_GALLON_PER_DAY: ret = GET_STR_FROM_EEPROM("Imperial gallon per day"); break; case DLMS_UNIT_US_GALLON: ret = GET_STR_FROM_EEPROM("US Gallon"); break; case DLMS_UNIT_US_GALLON_PER_SECOND: ret = GET_STR_FROM_EEPROM("US gallon per second"); break; case DLMS_UNIT_US_GALLON_PER_MIN: ret = GET_STR_FROM_EEPROM("US gallon per min"); break; case DLMS_UNIT_US_GALLON_PER_HOUR: ret = GET_STR_FROM_EEPROM("US gallon per hour"); break; case DLMS_UNIT_US_GALLON_PER_DAY: ret = GET_STR_FROM_EEPROM("US gallon per day"); break; case DLMS_UNIT_BRITISH_THERMAL_UNIT_PER_SECOND: ret = GET_STR_FROM_EEPROM("British thermal unit per second"); break; case DLMS_UNIT_BRITISH_THERMAL_UNIT_PER_MIN: ret = GET_STR_FROM_EEPROM("British thermal unit per min"); break; case DLMS_UNIT_BRITISH_THERMAL_UNIT_PER_HOUR: ret = GET_STR_FROM_EEPROM("British thermal unit per hour"); break; case DLMS_UNIT_BRITISH_THERMAL_UNIT_PER_DAY: ret = GET_STR_FROM_EEPROM("British thermal unit per day"); break; case DLMS_UNIT_OTHER: ret = GET_STR_FROM_EEPROM("Other unit"); break; case DLMS_UNIT_NO_UNIT: ret = GET_STR_FROM_EEPROM("NoUnit"); break; default: ret = NULL; break; } return ret; } #ifndef DLMS_IGNORE_DATA int obj_DataToString(gxData* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, GET_STR_FROM_EEPROM("Index: 2 Value: "))) == 0 && (ret = var_toString(&object->value, &ba)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\n"))) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_DATA #ifndef DLMS_IGNORE_REGISTER int obj_RegisterToString(gxRegister* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, GET_STR_FROM_EEPROM("Index: 3 Value: Scaler: "))) == 0 && (ret = bb_addDoubleAsString(&ba, hlp_getScaler(object->scaler))) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM(" Unit: "))) == 0 && (ret = bb_addString(&ba, obj_getUnitAsString(object->unit))) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 2 Value: "))) == 0 && (ret = var_toString(&object->value, &ba)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\n"))) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_REGISTER #ifndef DLMS_IGNORE_CLOCK int obj_clockToString(gxClock* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, GET_STR_FROM_EEPROM("Index: 2 Value: "))) == 0 && (ret = time_toString(&object->time, &ba)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 3 Value: "))) == 0 && (ret = bb_addIntAsString(&ba, object->timeZone)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 4 Value: "))) == 0 && (ret = bb_addIntAsString(&ba, object->status)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 5 Value: "))) == 0 && (ret = time_toString(&object->begin, &ba)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 6 Value: "))) == 0 && (ret = time_toString(&object->end, &ba)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 7 Value: "))) == 0 && (ret = bb_addIntAsString(&ba, object->deviation)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 8 Value: "))) == 0 && (ret = bb_addIntAsString(&ba, object->enabled)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\nIndex: 9 Value: "))) == 0 && (ret = bb_addIntAsString(&ba, object->clockBase)) == 0 && (ret = bb_addString(&ba, GET_STR_FROM_EEPROM("\n"))) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_CLOCK #ifndef DLMS_IGNORE_SCRIPT_TABLE int obj_ScriptTableToString(gxScriptTable* object, char** buff) { int ret; uint16_t pos, pos2; gxByteBuffer ba; gxScript* s; gxScriptAction* sa; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); for (pos = 0; pos != object->scripts.size; ++pos) { if (pos != 0) { bb_addString(&ba, ", "); } ret = arr_getByIndex(&object->scripts, pos, (void**)&s); if (ret != 0) { return ret; } bb_addIntAsString(&ba, s->id); bb_addString(&ba, "\n"); for (pos2 = 0; pos2 != s->actions.size; ++pos2) { ret = arr_getByIndex(&s->actions, pos2, (void**)&sa); if (ret != 0) { return ret; } if (pos2 != 0) { bb_addString(&ba, ", "); } bb_addIntAsString(&ba, sa->type); bb_addString(&ba, " "); #ifndef DLMS_IGNORE_OBJECT_POINTERS if (sa->target == NULL) { bb_addIntAsString(&ba, 0); bb_addString(&ba, " "); hlp_appendLogicalName(&ba, EMPTY_LN); } else { bb_addIntAsString(&ba, sa->target->objectType); bb_addString(&ba, " "); hlp_appendLogicalName(&ba, sa->target->logicalName); } #else bb_addIntAsString(&ba, sa->objectType); bb_addString(&ba, " "); hlp_appendLogicalName(&ba, sa->logicalName); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(&ba, " "); bb_addIntAsString(&ba, sa->index); bb_addString(&ba, " "); ret = var_toString(&sa->parameter, &ba); if (ret != 0) { return ret; } } } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_SCRIPT_TABLE #ifndef DLMS_IGNORE_SPECIAL_DAYS_TABLE int obj_specialDaysTableToString(gxSpecialDaysTable* object, char** buff) { int ret; uint16_t pos; gxSpecialDay* sd; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); for (pos = 0; pos != object->entries.size; ++pos) { if (pos != 0) { bb_addString(&ba, ", "); } ret = arr_getByIndex(&object->entries, pos, (void**)&sd); if (ret != 0) { return ret; } bb_addIntAsString(&ba, sd->index); bb_addString(&ba, " "); ret = time_toString(&sd->date, &ba); if (ret != 0) { return ret; } bb_addString(&ba, " "); bb_addIntAsString(&ba, sd->dayId); } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_SPECIAL_DAYS_TABLE #ifndef DLMS_IGNORE_TCP_UDP_SETUP int obj_TcpUdpSetupToString(gxTcpUdpSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->port); bb_addString(&ba, "\nIndex: 3 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS bb_addLogicalName(&ba, obj_getLogicalName((gxObject*)object->ipSetup)); #else bb_addLogicalName(&ba, object->ipReference); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->maximumSegmentSize); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->maximumSimultaneousConnections); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->inactivityTimeout); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_TCP_UDP_SETUP #ifndef DLMS_IGNORE_MBUS_MASTER_PORT_SETUP int obj_mBusMasterPortSetupToString(gxMBusMasterPortSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->commSpeed); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_MBUS_MASTER_PORT_SETUP int obj_timeWindowToString(gxArray* arr, gxByteBuffer* bb) { gxKey* it; int ret = 0; uint16_t pos; for (pos = 0; pos != arr->size; ++pos) { if ((ret = arr_getByIndex(arr, pos, (void**)&it)) != 0) { break; } if (pos != 0) { bb_addString(bb, ", "); } if ((ret = time_toString((gxtime*)it->key, bb)) != 0 || (ret = bb_addString(bb, " ")) != 0 || (ret = time_toString((gxtime*)it->value, bb)) != 0) { break; } } return ret; } int obj_CaptureObjectsToString(gxByteBuffer* ba, gxArray* objects) { uint16_t pos; int ret = DLMS_ERROR_CODE_OK; #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) gxTarget* it; #else gxKey* it; #endif //#if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) for (pos = 0; pos != objects->size; ++pos) { if ((ret = arr_getByIndex(objects, pos, (void**)&it)) != DLMS_ERROR_CODE_OK) { break; } if (pos != 0) { bb_addString(ba, ", "); } #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) if ((ret = bb_addString(ba, obj_typeToString2((DLMS_OBJECT_TYPE)it->target->objectType))) != 0 || (ret = bb_addString(ba, " ")) != 0 || (ret = hlp_appendLogicalName(ba, it->target->logicalName)) != 0) { break; } #else if ((ret = bb_addString(ba, obj_typeToString2(((gxObject*)it->key)->objectType))) != 0 || (ret = bb_addString(ba, " ")) != 0 || (ret = hlp_appendLogicalName(ba, ((gxObject*)it->key)->logicalName)) != 0) { break; } #endif //#if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) } return ret; } #ifndef DLMS_IGNORE_PUSH_SETUP int obj_pushSetupToString(gxPushSetup* object, char** buff) { int ret; gxByteBuffer ba; if ((ret = BYTE_BUFFER_INIT(&ba)) == 0 && (ret = bb_addString(&ba, "Index: 2 Value: ")) == 0 && (ret = obj_CaptureObjectsToString(&ba, &object->pushObjectList)) == 0 && (ret = bb_addString(&ba, "\nIndex: 3 Value: ")) == 0 && (ret = bb_set(&ba, object->destination.data, object->destination.size)) == 0 && (ret = bb_addString(&ba, " ")) == 0 && (ret = bb_addIntAsString(&ba, object->message)) == 0 && (ret = bb_addString(&ba, "\nIndex: 4 Value: ")) == 0 && (ret = obj_timeWindowToString(&object->communicationWindow, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->randomisationStartInterval)) == 0 && (ret = bb_addString(&ba, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->numberOfRetries)) == 0 && (ret = bb_addString(&ba, "\nIndex: 7 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->repetitionDelay)) == 0 && (ret = bb_addString(&ba, "\n")) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_PUSH_SETUP #ifndef DLMS_IGNORE_AUTO_CONNECT int obj_autoConnectToString(gxAutoConnect* object, char** buff) { gxKey* k; int ret; uint16_t pos; gxByteBuffer ba, * dest; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->mode); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->repetitions); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->repetitionDelay); bb_addString(&ba, "\nIndex: 5 Value: ["); for (pos = 0; pos != object->callingWindow.size; ++pos) { if (pos != 0) { bb_addString(&ba, ", "); } ret = arr_getByIndex(&object->callingWindow, pos, (void**)&k); if (ret != 0) { return ret; } time_toString((gxtime*)k->key, &ba); bb_addString(&ba, " "); time_toString((gxtime*)k->value, &ba); } bb_addString(&ba, "]"); bb_addString(&ba, "\nIndex: 6 Value: "); for (pos = 0; pos != object->destinations.size; ++pos) { if (pos != 0) { bb_addString(&ba, ", "); } ret = arr_getByIndex(&object->destinations, pos, (void**)&dest); if (ret != 0) { return ret; } bb_set2(&ba, dest, 0, bb_size(dest)); } bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_AUTO_CONNECT #ifndef DLMS_IGNORE_ACTIVITY_CALENDAR int obj_seasonProfileToString(gxArray* arr, gxByteBuffer* ba) { gxSeasonProfile* it; int ret; uint16_t pos; bb_addString(ba, "["); for (pos = 0; pos != arr->size; ++pos) { if (pos != 0) { bb_addString(ba, ", "); } ret = arr_getByIndex(arr, pos, (void**)&it); if (ret != DLMS_ERROR_CODE_OK) { return ret; } bb_addString(ba, "{"); bb_attachString(ba, bb_toHexString(&it->name)); bb_addString(ba, ", "); time_toString(&it->start, ba); bb_addString(ba, ", "); bb_attachString(ba, bb_toHexString(&it->weekName)); bb_addString(ba, "}"); } bb_addString(ba, "]"); return 0; } int obj_weekProfileToString(gxArray* arr, gxByteBuffer* ba) { gxWeekProfile* it; int ret; uint16_t pos; bb_addString(ba, "["); for (pos = 0; pos != arr->size; ++pos) { if (pos != 0) { bb_addString(ba, ", "); } ret = arr_getByIndex(arr, pos, (void**)&it); if (ret != DLMS_ERROR_CODE_OK) { return ret; } bb_attachString(ba, bb_toString(&it->name)); bb_addString(ba, " "); bb_addIntAsString(ba, it->monday); bb_addString(ba, " "); bb_addIntAsString(ba, it->tuesday); bb_addString(ba, " "); bb_addIntAsString(ba, it->wednesday); bb_addString(ba, " "); bb_addIntAsString(ba, it->thursday); bb_addString(ba, " "); bb_addIntAsString(ba, it->friday); bb_addString(ba, " "); bb_addIntAsString(ba, it->saturday); bb_addString(ba, " "); bb_addIntAsString(ba, it->sunday); } bb_addString(ba, "]"); return 0; } int obj_dayProfileToString(gxArray* arr, gxByteBuffer* ba) { gxDayProfile* dp; gxDayProfileAction* it; int ret; uint16_t pos, pos2; bb_addString(ba, "["); for (pos = 0; pos != arr->size; ++pos) { if (pos != 0) { bb_addString(ba, ", "); } ret = arr_getByIndex(arr, pos, (void**)&dp); if (ret != DLMS_ERROR_CODE_OK) { return ret; } bb_addIntAsString(ba, dp->dayId); bb_addString(ba, "["); for (pos2 = 0; pos2 != dp->daySchedules.size; ++pos2) { if (pos2 != 0) { bb_addString(ba, ", "); } ret = arr_getByIndex(&dp->daySchedules, pos2, (void**)&it); if (ret != DLMS_ERROR_CODE_OK) { return ret; } #ifndef DLMS_IGNORE_OBJECT_POINTERS if (it->script == NULL) { hlp_appendLogicalName(ba, EMPTY_LN); } else { hlp_appendLogicalName(ba, it->script->logicalName); } #else hlp_appendLogicalName(ba, it->scriptLogicalName); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(ba, " "); bb_addIntAsString(ba, it->scriptSelector); bb_addString(ba, " "); time_toString(&it->startTime, ba); } bb_addString(ba, "]"); } bb_addString(ba, "]"); return 0; } int obj_activityCalendarToString(gxActivityCalendar* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, "Index: 2 Value: ")) == 0 && (ret = bb_attachString(&ba, bb_toString(&object->calendarNameActive))) == 0 && (ret = bb_addString(&ba, "\nIndex: 3 Value: ")) == 0 && (ret = obj_seasonProfileToString(&object->seasonProfileActive, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 4 Value: ")) == 0 && (ret = obj_weekProfileToString(&object->weekProfileTableActive, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 5 Value: ")) == 0 && (ret = obj_dayProfileToString(&object->dayProfileTableActive, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 6 Value: ")) == 0 && (ret = bb_attachString(&ba, bb_toString(&object->calendarNamePassive))) == 0 && (ret = bb_addString(&ba, "\nIndex: 7 Value: ")) == 0 && (ret = obj_seasonProfileToString(&object->seasonProfilePassive, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 8 Value: ")) == 0 && (ret = obj_weekProfileToString(&object->weekProfileTablePassive, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 9 Value: ")) == 0 && (ret = obj_dayProfileToString(&object->dayProfileTablePassive, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 10 Value: ")) == 0 && (ret = time_toString(&object->time, &ba)) == 0 && (ret = bb_addString(&ba, "\n")) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_ACTIVITY_CALENDAR #ifndef DLMS_IGNORE_SECURITY_SETUP int obj_securitySetupToString(gxSecuritySetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->securityPolicy); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->securitySuite); bb_addString(&ba, "\nIndex: 4 Value: "); bb_attachString(&ba, bb_toHexString(&object->serverSystemTitle)); bb_addString(&ba, "\nIndex: 5 Value: "); bb_attachString(&ba, bb_toHexString(&object->clientSystemTitle)); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_SECURITY_SETUP #ifndef DLMS_IGNORE_IEC_HDLC_SETUP int obj_hdlcSetupToString(gxIecHdlcSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->communicationSpeed); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->windowSizeTransmit); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->windowSizeReceive); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->maximumInfoLengthTransmit); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->maximumInfoLengthReceive); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->interCharachterTimeout); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->inactivityTimeout); bb_addString(&ba, "\nIndex: 9 Value: "); bb_addIntAsString(&ba, object->deviceAddress); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_IEC_HDLC_SETUP #ifndef DLMS_IGNORE_IEC_LOCAL_PORT_SETUP int obj_localPortSetupToString(gxLocalPortSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->defaultMode); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->defaultBaudrate); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->proposedBaudrate); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->responseTime); bb_addString(&ba, "\nIndex: 6 Value: "); bb_attachString(&ba, bb_toString(&object->deviceAddress)); bb_addString(&ba, "\nIndex: 7 Value: "); bb_attachString(&ba, bb_toString(&object->password1)); bb_addString(&ba, "\nIndex: 8 Value: "); bb_attachString(&ba, bb_toString(&object->password2)); bb_addString(&ba, "\nIndex: 9 Value: "); bb_attachString(&ba, bb_toString(&object->password5)); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_IEC_LOCAL_PORT_SETUP #ifndef DLMS_IGNORE_IEC_TWISTED_PAIR_SETUP int obj_IecTwistedPairSetupToString(gxIecTwistedPairSetup* object, char** buff) { int pos, ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, "Index: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->mode)) == 0 && (ret = bb_addString(&ba, "Index: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, (int)object->speed)) == 0) { bb_addString(&ba, "Index: 4 Value: ["); for (pos = 0; pos != object->primaryAddresses.size; ++pos) { if (pos != 0) { bb_addString(&ba, ", "); } if ((ret = bb_addIntAsString(&ba, object->primaryAddresses.data[pos])) != 0) { break; } } if (ret == 0 && (ret = bb_addString(&ba, "]\n")) == 0 && (ret = bb_addString(&ba, "Index: 5 Value: [")) == 0) { for (pos = 0; pos != object->tabis.size; ++pos) { if (pos != 0) { bb_addString(&ba, ", "); } if ((ret = bb_addIntAsString(&ba, object->tabis.data[pos])) != 0) { break; } } if (ret == 0) { ret = bb_addString(&ba, "]\n"); } } } if (ret == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_IEC_TWISTED_PAIR_SETUP #ifndef DLMS_IGNORE_DEMAND_REGISTER int obj_demandRegisterToString(gxDemandRegister* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, "Index: 2 Value: ")) == 0 && (ret = var_toString(&object->currentAverageValue, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 3 Value: ")) == 0 && (ret = var_toString(&object->lastAverageValue, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 4 Value: Scaler: ")) == 0 && (ret = bb_addIntAsString(&ba, object->scaler)) == 0 && (ret = bb_addString(&ba, " Unit: ")) == 0 && (ret = bb_addString(&ba, obj_getUnitAsString(object->unit))) == 0 && (ret = bb_addString(&ba, "\nIndex: 5 Value: ")) == 0 && (ret = var_toString(&object->status, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 6 Value: ")) == 0 && (ret = time_toString(&object->captureTime, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 7 Value: ")) == 0 && (ret = time_toString(&object->startTimeCurrent, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 8 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->period)) == 0 && (ret = bb_addString(&ba, "\nIndex: 9 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->numberOfPeriods)) == 0 && (ret = bb_addString(&ba, "\n")) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_DEMAND_REGISTER #ifndef DLMS_IGNORE_REGISTER_ACTIVATION int obj_registerActivationToString(gxRegisterActivation* object, char** buff) { int ret = 0; uint16_t pos; #ifdef DLMS_IGNORE_OBJECT_POINTERS gxObjectDefinition* od; gxKey* it; #else gxObject* od; #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) gxRegisterActivationMask* it; #else gxKey* it; #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) #endif //DLMS_IGNORE_OBJECT_POINTERS gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); for (pos = 0; pos != object->registerAssignment.size; ++pos) { #if !defined(DLMS_IGNORE_OBJECT_POINTERS) && !defined(DLMS_IGNORE_MALLOC) && !defined(DLMS_COSEM_EXACT_DATA_TYPES) ret = oa_getByIndex(&object->registerAssignment, pos, &od); #else ret = arr_getByIndex(&object->registerAssignment, pos, (void**)&od); #endif //DLMS_IGNORE_OBJECT_POINTERS if (ret != 0) { break; } if (pos != 0) { bb_addString(&ba, ", "); } if ((ret = bb_addIntAsString(&ba, od->objectType)) != 0 || (ret = bb_addString(&ba, " ")) != 0 || (ret = hlp_appendLogicalName(&ba, od->logicalName)) != 0) { break; } } if (ret == 0) { if ((ret = bb_addString(&ba, "]\n")) == 0 && (ret = bb_addString(&ba, "Index: 3 Value: [")) == 0) { for (pos = 0; pos != object->maskList.size; ++pos) { ret = arr_getByIndex(&object->maskList, pos, (void**)&it); if (ret != 0) { break; } if (pos != 0) { bb_addString(&ba, ", "); } #if !defined(DLMS_IGNORE_OBJECT_POINTERS) && !defined(DLMS_IGNORE_MALLOC) && !defined(DLMS_COSEM_EXACT_DATA_TYPES) bb_attachString(&ba, bb_toString((gxByteBuffer*)it->key)); bb_addString(&ba, " "); bb_attachString(&ba, bb_toString((gxByteBuffer*)it->value)); #else if ((ret = bb_attachString(&ba, bb_toHexString(&it->name))) != 0 || (ret = bb_addString(&ba, ": ")) != 0 || (ret = bb_attachString(&ba, bb_toHexString(&it->indexes))) != 0) { break; } #endif //DLMS_IGNORE_OBJECT_POINTERS } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); } } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_REGISTER_ACTIVATION #if !(defined(DLMS_IGNORE_REGISTER_MONITOR) && defined(DLMS_IGNORE_LIMITER)) void actionItemToString(gxActionItem* item, gxByteBuffer* ba) { #ifndef DLMS_IGNORE_OBJECT_POINTERS if (item->script == NULL) { hlp_appendLogicalName(ba, EMPTY_LN); } else { hlp_appendLogicalName(ba, item->script->base.logicalName); } #else hlp_appendLogicalName(ba, item->logicalName); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(ba, " "); bb_addIntAsString(ba, item->scriptSelector); } #endif //!(defined(DLMS_IGNORE_REGISTER_MONITOR) && defined(DLMS_IGNORE_LIMITER)) #ifndef DLMS_IGNORE_REGISTER_MONITOR int obj_registerMonitorToString(gxRegisterMonitor* object, char** buff) { int ret; uint16_t pos; dlmsVARIANT* tmp; gxByteBuffer ba; gxActionSet* as; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); for (pos = 0; pos != object->thresholds.size; ++pos) { ret = va_getByIndex(&object->thresholds, pos, &tmp); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } ret = var_toString(tmp, &ba); #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(ret == 0); #endif } bb_addString(&ba, "]\nIndex: 3 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS if (object->monitoredValue.target == NULL) { hlp_appendLogicalName(&ba, EMPTY_LN); bb_addString(&ba, " "); bb_addString(&ba, obj_typeToString2(0)); } else { hlp_appendLogicalName(&ba, object->monitoredValue.target->logicalName); bb_addString(&ba, " "); bb_addString(&ba, obj_typeToString2(object->monitoredValue.target->objectType)); } #else hlp_appendLogicalName(&ba, object->monitoredValue.logicalName); bb_addString(&ba, " "); bb_addString(&ba, obj_typeToString2(object->monitoredValue.objectType)); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(&ba, " "); bb_addIntAsString(&ba, object->monitoredValue.attributeIndex); bb_addString(&ba, "\nIndex: 4 Value: ["); for (pos = 0; pos != object->actions.size; ++pos) { ret = arr_getByIndex(&object->actions, pos, (void**)&as); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } actionItemToString(&as->actionUp, &ba); bb_addString(&ba, " "); actionItemToString(&as->actionDown, &ba); } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_REGISTER_MONITOR #ifndef DLMS_IGNORE_ACTION_SCHEDULE int obj_actionScheduleToString(gxActionSchedule* object, char** buff) { int ret; uint16_t pos; gxtime* tm; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS if (object->executedScript == NULL) { hlp_appendLogicalName(&ba, EMPTY_LN); } else { hlp_appendLogicalName(&ba, object->executedScript->base.logicalName); } #else hlp_appendLogicalName(&ba, object->executedScriptLogicalName); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(&ba, " "); bb_addIntAsString(&ba, object->executedScriptSelector); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->type); bb_addString(&ba, "\nIndex: 4 Value: ["); for (pos = 0; pos != object->executionTime.size; ++pos) { ret = arr_getByIndex(&object->executionTime, pos, (void**)&tm); if (ret != DLMS_ERROR_CODE_OK) { return ret; } else { if (pos != 0) { bb_addString(&ba, ", "); } ret = time_toString(tm, &ba); if (ret != 0) { return ret; } } } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return DLMS_ERROR_CODE_OK; } #endif //DLMS_IGNORE_ACTION_SCHEDULE #ifndef DLMS_IGNORE_SAP_ASSIGNMENT int obj_sapAssignmentToString(gxSapAssignment* object, char** buff) { int ret; uint16_t pos; gxSapItem* it; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); for (pos = 0; pos != object->sapAssignmentList.size; ++pos) { ret = arr_getByIndex(&object->sapAssignmentList, pos, (void**)&it); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } bb_addIntAsString(&ba, it->id); bb_addString(&ba, ": "); bb_set2(&ba, &it->name, 0, bb_size(&it->name)); } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_SAP_ASSIGNMENT #ifndef DLMS_IGNORE_AUTO_ANSWER int obj_autoAnswerToString(gxAutoAnswer* object, char** buff) { int ret; gxByteBuffer ba; if ((ret = BYTE_BUFFER_INIT(&ba)) == 0 && (ret = bb_addString(&ba, "Index: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->mode)) == 0 && (ret = bb_addString(&ba, "\nIndex: 3 Value: [")) == 0 && (ret = obj_timeWindowToString(&object->listeningWindow, &ba)) == 0 && (ret = bb_addString(&ba, "]\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->status)) == 0 && (ret = bb_addString(&ba, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->numberOfCalls)) == 0 && (ret = bb_addString(&ba, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->numberOfRingsInListeningWindow)) == 0 && (ret = bb_addString(&ba, " ")) == 0 && (ret = bb_addIntAsString(&ba, object->numberOfRingsOutListeningWindow)) == 0 && (ret = bb_addString(&ba, "\n")) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_AUTO_ANSWER #ifndef DLMS_IGNORE_IP4_SETUP int obj_ip4SetupToString(gxIp4Setup* object, char** buff) { int ret; uint16_t pos; #if !defined(DLMS_IGNORE_OBJECT_POINTERS) && !defined(DLMS_IGNORE_MALLOC) && !defined(DLMS_COSEM_EXACT_DATA_TYPES) dlmsVARIANT* tmp; #else uint32_t* tmp; #endif gxip4SetupIpOption* ip; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS if (object->dataLinkLayer != NULL) { bb_addLogicalName(&ba, object->dataLinkLayer->logicalName); } #else bb_addLogicalName(&ba, object->dataLinkLayerReference); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->ipAddress); bb_addString(&ba, "\nIndex: 4 Value: ["); for (pos = 0; pos != object->multicastIPAddress.size; ++pos) { #if !defined(DLMS_IGNORE_OBJECT_POINTERS) && !defined(DLMS_IGNORE_MALLOC) && !defined(DLMS_COSEM_EXACT_DATA_TYPES) ret = va_getByIndex(&object->multicastIPAddress, pos, &tmp); #else ret = arr_getByIndex2(&object->multicastIPAddress, pos, (void**)&tmp, sizeof(uint32_t)); #endif if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) ret = bb_addIntAsString(&ba, *tmp); #else ret = var_toString(tmp, &ba); #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) if (ret != 0) { return ret; } } bb_addString(&ba, "]\nIndex: 5 Value: ["); for (pos = 0; pos != object->ipOptions.size; ++pos) { ret = arr_getByIndex(&object->ipOptions, pos, (void**)&ip); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } bb_addIntAsString(&ba, ip->type); bb_addString(&ba, " "); bb_attachString(&ba, bb_toString(&ip->data)); } bb_addString(&ba, "]\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->subnetMask); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->gatewayIPAddress); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->useDHCP); bb_addString(&ba, "\nIndex: 9 Value: "); bb_addIntAsString(&ba, object->primaryDNSAddress); bb_addString(&ba, "\nIndex: 10 Value: "); bb_addIntAsString(&ba, object->secondaryDNSAddress); bb_addString(&ba, "\nIndex: 11 Value: "); var_toString(&object->value, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_IP4_SETUP #ifndef DLMS_IGNORE_IP6_SETUP int obj_getIPAddress(gxByteBuffer* ba, gxArray* arr) { char tmp[64]; int ret; uint16_t pos; IN6_ADDR* ip; if ((ret = bb_addString(ba, "{")) == 0) { for (pos = 0; pos != arr->size; ++pos) { if ((ret = arr_getByIndex(arr, pos, (void**)&ip)) != 0) { break; } if (pos != 0) { bb_addString(ba, ", "); } //Add Ws2_32.lib for LabWindows/CVI. inet_ntop(AF_INET6, &ip, tmp, sizeof(tmp)); bb_addString(ba, tmp); } if (ret == 0) { ret = bb_addString(ba, "}"); } } return ret; } int obj_getNeighborDiscoverySetupAsString(gxByteBuffer* ba, gxArray* arr) { int ret; uint16_t pos; gxNeighborDiscoverySetup* it; if ((ret = bb_addString(ba, "{")) == 0) { for (pos = 0; pos != arr->size; ++pos) { if ((ret = arr_getByIndex(arr, pos, (void**)&it)) != 0) { break; } if (pos != 0) { bb_addString(ba, ", "); } if ((ret = bb_addString(ba, "[")) != 0 || (ret = bb_addIntAsString(ba, it->maxRetry)) != 0 || (ret = bb_addString(ba, ", ")) != 0 || (ret = bb_addIntAsString(ba, it->retryWaitTime)) != 0 || (ret = bb_addString(ba, ", ")) != 0 || (ret = bb_addIntAsString(ba, it->sendPeriod)) != 0 || (ret = bb_addString(ba, "]")) != 0) { break; } } if (ret == 0) { ret = bb_addString(ba, "}"); } } return ret; } int obj_ip6SetupToString(gxIp6Setup* object, char** buff) { char tmp[64]; int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS if (object->dataLinkLayer != NULL) { bb_addLogicalName(&ba, object->dataLinkLayer->logicalName); } #else bb_addLogicalName(&ba, object->dataLinkLayerReference); #endif //DLMS_IGNORE_OBJECT_POINTERS if ((ret = bb_addString(&ba, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->addressConfigMode)) == 0 && (ret = bb_addString(&ba, "\nIndex: 4 Value: [")) == 0 && (ret = obj_getIPAddress(&ba, &object->unicastIPAddress)) == 0 && (ret = bb_addString(&ba, "]\nIndex: 5 Value: [")) == 0 && (ret = obj_getIPAddress(&ba, &object->multicastIPAddress)) == 0 && (ret = bb_addString(&ba, "]\nIndex: 6 Value: [")) == 0 && (ret = obj_getIPAddress(&ba, &object->gatewayIPAddress)) == 0 && (ret = bb_addString(&ba, "]\nIndex: 7 Value: ")) == 0) { //Add Ws2_32.lib for LabWindows/CVI. inet_ntop(AF_INET6, &object->primaryDNSAddress, tmp, sizeof(tmp)); bb_addString(&ba, tmp); inet_ntop(AF_INET6, &object->secondaryDNSAddress, tmp, sizeof(tmp)); bb_addString(&ba, tmp); if ((ret = bb_addIntAsString(&ba, object->trafficClass)) == 0 && (ret = obj_getNeighborDiscoverySetupAsString(&ba, &object->neighborDiscoverySetup)) == 0 && (ret = bb_addString(&ba, "\n")) == 0) { } } if (ret == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_IP6_SETUP #ifndef DLMS_IGNORE_MBUS_DIAGNOSTIC int obj_MBusDiagnosticToString(gxMbusDiagnostic* object, char** buff) { int ret, pos; gxBroadcastFrameCounter* it; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->receivedSignalStrength); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->channelId); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->linkStatus); bb_addString(&ba, "\nIndex: 5 Value: {"); for (pos = 0; pos != object->broadcastFrames.size; ++pos) { ret = arr_getByIndex(&object->broadcastFrames, pos, (void**)&it); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } bb_addString(&ba, "["); bb_addIntAsString(&ba, it->clientId); bb_addString(&ba, ", "); bb_addIntAsString(&ba, it->counter); bb_addString(&ba, ", "); time_toString(&it->timeStamp, &ba); bb_addString(&ba, "]"); } bb_addString(&ba, "}\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->transmissions); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->receivedFrames); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->failedReceivedFrames); bb_addString(&ba, "\nIndex: 9 Value: "); bb_addIntAsString(&ba, object->captureTime.attributeId); bb_addString(&ba, ":"); time_toString(&object->captureTime.timeStamp, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_MBUS_DIAGNOSTIC #ifndef DLMS_IGNORE_MBUS_PORT_SETUP int obj_MBusPortSetupToString(gxMBusPortSetup* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, "Index: 2 Value: ")) == 0 && (ret = hlp_appendLogicalName(&ba, object->profileSelection)) == 0 && (ret = bb_addString(&ba, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->portCommunicationStatus)) == 0 && (ret = bb_addString(&ba, "\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->dataHeaderType)) == 0 && (ret = bb_addString(&ba, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->primaryAddress)) == 0 && (ret = bb_addString(&ba, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->identificationNumber)) == 0 && (ret = bb_addString(&ba, "\nIndex: 7 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->manufacturerId)) == 0 && (ret = bb_addString(&ba, "\nIndex: 8 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->mBusVersion)) == 0 && (ret = bb_addString(&ba, "\nIndex: 9 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->deviceType)) == 0 && (ret = bb_addString(&ba, "\nIndex: 10 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->maxPduSize)) == 0 && (ret = bb_addString(&ba, "\nIndex: 11 Value: ")) == 0 && (ret = obj_timeWindowToString(&object->listeningWindow, &ba)) == 0) { bb_addString(&ba, "\n"); *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_MBUS_PORT_SETUP #ifndef DLMS_IGNORE_G3_PLC_MAC_LAYER_COUNTERS int obj_G3PlcMacLayerCounters(gxG3PlcMacLayerCounters* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->txDataPacketCount); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->rxDataPacketCount); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->txCmdPacketCount); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->rxCmdPacketCount); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->cSMAFailCount); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->cSMANoAckCount); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->badCrcCount); bb_addString(&ba, "\nIndex: 9 Value: "); bb_addIntAsString(&ba, object->txDataBroadcastCount); bb_addString(&ba, "\nIndex: 10 Value: "); bb_addIntAsString(&ba, object->rxDataBroadcastCount); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_G3_PLC_MAC_LAYER_COUNTERS #ifndef DLMS_IGNORE_G3_PLC_MAC_SETUP int obj_G3PlcMacSetupKeyTableToString(gxG3PlcMacSetup* object, gxByteBuffer* ba) { int pos, ret = 0; gxG3MacKeyTable* it; bb_addString(ba, "\nIndex: 5 Value: [\r\n"); for (pos = 0; pos != object->keyTable.size; ++pos) { if ((ret = arr_getByIndex(&object->keyTable, pos, (void**)&it)) != 0) { return ret; } bb_addString(ba, "{ "); bb_addIntAsString(ba, it->id); bb_addString(ba, ","); //Add MAC keys as a hex string. if (bb_getCapacity(ba) - ba->size < 3 * MAX_G3_MAC_KEY_TABLE_KEY_SIZE) { bb_capacity(ba, bb_size(ba) + 3 * MAX_G3_MAC_KEY_TABLE_KEY_SIZE); } if ((ret = hlp_bytesToHex2(it->key, MAX_G3_MAC_KEY_TABLE_KEY_SIZE, (char*)ba->data + ba->size, (uint16_t)bb_available(ba))) != 0) { return ret; } ba->size += 3 * MAX_G3_MAC_KEY_TABLE_KEY_SIZE; --ba->size; bb_addString(ba, "}\n"); } bb_addString(ba, "]\n"); return ret; } int obj_G3PlcMacSetupNeighbourTableToString(gxG3PlcMacSetup* object, gxByteBuffer* ba) { int pos, ret = 0; gxNeighbourTable* it; bb_addString(ba, "\nIndex: 11 Value: [\r"); for (pos = 0; pos != object->neighbourTable.size; ++pos) { if ((ret = arr_getByIndex(&object->neighbourTable, pos, (void**)&it)) != 0) { return ret; } bb_addString(ba, "{shortAddress: "); bb_addIntAsString(ba, it->shortAddress); bb_addString(ba, ", scheme: "); bb_addIntAsString(ba, it->payloadModulationScheme); bb_addString(ba, ", tone map: "); ba_toString2(ba, &it->toneMap); bb_addString(ba, ", modulation: "); bb_addIntAsString(ba, it->modulation); bb_addString(ba, ", txGain: "); bb_addIntAsString(ba, it->txGain); bb_addString(ba, ", txRes: "); bb_addIntAsString(ba, it->txRes); bb_addString(ba, ", txCoeff: "); ba_toString2(ba, &it->txCoeff); bb_addString(ba, ", lqi: "); bb_addIntAsString(ba, it->lqi); bb_addString(ba, ", phaseDifferential: "); bb_addIntAsString(ba, it->phaseDifferential); bb_addString(ba, ", tmrValidTime: "); bb_addIntAsString(ba, it->tmrValidTime); bb_addString(ba, ", noData: "); bb_addIntAsString(ba, it->noData); } bb_addString(ba, "]\n"); return ret; } int obj_G3PlcMacSetupMacPosTableToString(gxG3PlcMacSetup* object, gxByteBuffer* ba) { int pos, ret = 0; gxMacPosTable* it; bb_addString(ba, "\nIndex: 25 Value: [\r"); for (pos = 0; pos != object->macPosTable.size; ++pos) { if ((ret = arr_getByIndex(&object->macPosTable, pos, (void**)&it)) != 0) { break; } bb_addString(ba, "{shortAddress: "); bb_addIntAsString(ba, it->shortAddress); bb_addString(ba, ", lqi: "); bb_addIntAsString(ba, it->lqi); bb_addString(ba, ", validTime: "); bb_addIntAsString(ba, it->validTime); } bb_addString(ba, "]\n"); return ret; } int obj_G3PlcMacSetupToString(gxG3PlcMacSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->shortAddress); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->rcCoord); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->panId); obj_G3PlcMacSetupKeyTableToString(object, &ba); bb_addString(&ba, "Index: 6 Value: "); bb_addIntAsString(&ba, object->frameCounter); bb_addString(&ba, "\nIndex: 7 Value: "); ba_toString2(&ba, &object->toneMask); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->tmrTtl); bb_addString(&ba, "\nIndex: 9 Value: "); bb_addIntAsString(&ba, object->maxFrameRetries); bb_addString(&ba, "\nIndex: 10 Value: "); bb_addIntAsString(&ba, object->neighbourTableEntryTtl); obj_G3PlcMacSetupNeighbourTableToString(object, &ba); bb_addString(&ba, "\nIndex: 12 Value: "); bb_addIntAsString(&ba, object->highPriorityWindowSize); bb_addString(&ba, "\nIndex: 13 Value: "); bb_addIntAsString(&ba, object->cscmFairnessLimit); bb_addString(&ba, "\nIndex: 14 Value: "); bb_addIntAsString(&ba, object->beaconRandomizationWindowLength); bb_addString(&ba, "\nIndex: 15 Value: "); bb_addIntAsString(&ba, object->macA); bb_addString(&ba, "\nIndex: 16 Value: "); bb_addIntAsString(&ba, object->macK); bb_addString(&ba, "\nIndex: 17 Value: "); bb_addIntAsString(&ba, object->minCwAttempts); bb_addString(&ba, "\nIndex: 18 Value: "); bb_addIntAsString(&ba, object->cenelecLegacyMode); bb_addString(&ba, "\nIndex: 19 Value: "); bb_addIntAsString(&ba, object->fccLegacyMode); bb_addString(&ba, "\nIndex: 20 Value: "); bb_addIntAsString(&ba, object->maxBe); bb_addString(&ba, "\nIndex: 21 Value: "); bb_addIntAsString(&ba, object->maxCsmaBackoffs); bb_addString(&ba, "\nIndex: 22 Value: "); bb_addIntAsString(&ba, object->minBe); bb_addString(&ba, "\nIndex: 23 Value: "); bb_addIntAsString(&ba, object->macBroadcastMaxCwEnabled); bb_addString(&ba, "\nIndex: 24 Value: "); bb_addIntAsString(&ba, object->macTransmitAtten); obj_G3PlcMacSetupMacPosTableToString(object, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_G3_PLC_MAC_SETUP #ifndef DLMS_IGNORE_G3_PLC_6LO_WPAN int obj_G3Plc6RoutingConfigurationToString(gxArray* table, gxByteBuffer* ba) { int pos, ret = 0; gxRoutingConfiguration* it; bb_addString(ba, "\nIndex: 6 Value: [\r"); for (pos = 0; pos != table->size; ++pos) { if ((ret = arr_getByIndex(table, pos, (void**)&it)) != 0) { break; } bb_addString(ba, "{netTraversalTime: "); bb_addIntAsString(ba, it->netTraversalTime); bb_addString(ba, ", routingTableEntryTtl: "); bb_addIntAsString(ba, it->routingTableEntryTtl); bb_addString(ba, ", kr: "); bb_addIntAsString(ba, it->kr); bb_addString(ba, ", km: "); bb_addIntAsString(ba, it->km); bb_addString(ba, ", kc: "); bb_addIntAsString(ba, it->kc); bb_addString(ba, ", kq: "); bb_addIntAsString(ba, it->kq); bb_addString(ba, ", kh: "); bb_addIntAsString(ba, it->kh); bb_addString(ba, ", krt: "); bb_addIntAsString(ba, it->krt); bb_addString(ba, ", rReqRetries: "); bb_addIntAsString(ba, it->rReqRetries); bb_addString(ba, ", rReqReqWait: "); bb_addIntAsString(ba, it->rReqReqWait); bb_addString(ba, ", blacklistTableEntryTtl: "); bb_addIntAsString(ba, it->blacklistTableEntryTtl); bb_addString(ba, ", unicastRreqGenEnable: "); bb_addIntAsString(ba, it->unicastRreqGenEnable); bb_addString(ba, ", rlcEnabled: "); bb_addIntAsString(ba, it->rlcEnabled); bb_addString(ba, ", addRevLinkCost: "); bb_addIntAsString(ba, it->addRevLinkCost); } bb_addString(ba, "]\n"); return ret; } int obj_G3Plc6RoutingTableToString(gxArray* table, gxByteBuffer* ba) { int pos, ret = 0; gxRoutingTable* it; bb_addString(ba, "\nIndex: 8 Value: [\r"); for (pos = 0; pos != table->size; ++pos) { if ((ret = arr_getByIndex(table, pos, (void**)&it)) != 0) { break; } bb_addString(ba, "{destination address: "); bb_addIntAsString(ba, it->destinationAddress); bb_addString(ba, ", next hop address: "); bb_addIntAsString(ba, it->nextHopAddress); bb_addString(ba, ", route cost: "); bb_addIntAsString(ba, it->routeCost); bb_addString(ba, ", hop count: "); bb_addIntAsString(ba, it->hopCount); bb_addString(ba, ", weak link count: "); bb_addIntAsString(ba, it->weakLinkCount); bb_addString(ba, ", valid time: "); bb_addIntAsString(ba, it->validTime); } bb_addString(ba, "]\n"); return ret; } int obj_G3Plc6ContextInformationTableToString(gxArray* table, gxByteBuffer* ba) { int pos, ret = 0; gxContextInformationTable* it; bb_addString(ba, "\nIndex: 9 Value: [\r"); for (pos = 0; pos != table->size; ++pos) { if ((ret = arr_getByIndex(table, pos, (void**)&it)) != 0) { break; } bb_addString(ba, "{CID: "); bb_addIntAsString(ba, it->cid); bb_addString(ba, ", context: "); bb_attachString(ba, hlp_bytesToHex(it->context, 16)); bb_addString(ba, ", compression: "); bb_addIntAsString(ba, it->compression); bb_addString(ba, ", valid life time: "); bb_addIntAsString(ba, it->validLifetime); } bb_addString(ba, "]\n"); return ret; } int obj_G3Plc6BlacklistTableToString(gxArray* table, gxByteBuffer* ba) { int pos, ret = 0; gxBlacklistTable* it; bb_addString(ba, "\nIndex: 10 Value: [\r"); for (pos = 0; pos != table->size; ++pos) { if ((ret = arr_getByIndex(table, pos, (void**)&it)) != 0) { break; } bb_addString(ba, "{neighbour address: "); bb_addIntAsString(ba, it->neighbourAddress); bb_addString(ba, ", valid time: "); bb_addIntAsString(ba, it->validTime); } bb_addString(ba, "]\n"); return ret; } int obj_G3Plc6BroadcastLogTableToString(gxArray* table, gxByteBuffer* ba) { int pos, ret = 0; gxBroadcastLogTable* it; bb_addString(ba, "\nIndex: 11 Value: [\r"); for (pos = 0; pos != table->size; ++pos) { if ((ret = arr_getByIndex(table, pos, (void**)&it)) != 0) { break; } bb_addString(ba, "{sourceAddress: "); bb_addIntAsString(ba, it->sourceAddress); bb_addString(ba, ", sequenceNumber: "); bb_addIntAsString(ba, it->sequenceNumber); bb_addString(ba, ", validTime: "); bb_addIntAsString(ba, it->validTime); } bb_addString(ba, "]\n"); return ret; } int obj_G3Plc6LoWPANToString(gxG3Plc6LoWPAN* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->maxHops); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->weakLqiValue); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->securityLevel); obj_G3Plc6RoutingConfigurationToString(&object->routingConfiguration, &ba); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->broadcastLogTableEntryTtl); obj_G3Plc6RoutingTableToString(&object->routingTable, &ba); obj_G3Plc6ContextInformationTableToString(&object->contextInformationTable, &ba); obj_G3Plc6BlacklistTableToString(&object->blacklistTable, &ba); obj_G3Plc6BroadcastLogTableToString(&object->broadcastLogTable, &ba); bb_addString(&ba, "\nIndex: 12 Value: "); #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) if ((ret = obj_UInt16ArrayToString(&ba, &object->groupTable)) != 0) { return ret; } #else if ((ret = va_toString(&object->groupTable, &ba)) != 0) { return ret; } #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) bb_addString(&ba, "\nIndex: 13 Value: "); bb_addIntAsString(&ba, object->maxJoinWaitTime); bb_addString(&ba, "\nIndex: 14 Value: "); bb_addIntAsString(&ba, object->pathDiscoveryTime); bb_addString(&ba, "\nIndex: 15 Value: "); bb_addIntAsString(&ba, object->activeKeyIndex); bb_addString(&ba, "\nIndex: 16 Value: "); bb_addIntAsString(&ba, object->metricType); bb_addString(&ba, "\nIndex: 17 Value: "); bb_addIntAsString(&ba, object->coordShortAddress); bb_addString(&ba, "\nIndex: 18 Value: "); bb_addIntAsString(&ba, object->disableDefaultRouting); bb_addString(&ba, "\nIndex: 19 Value: "); bb_addIntAsString(&ba, object->deviceType); bb_addString(&ba, "\nIndex: 20 Value: "); bb_addIntAsString(&ba, object->defaultCoordRouteEnabled); bb_addString(&ba, "\nIndex: 21 Value: "); #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) if ((ret = obj_UInt16ArrayToString(&ba, &object->destinationAddress)) != 0) { bb_clear(&ba); return ret; } #else if ((ret = va_toString(&object->destinationAddress, &ba)) != 0) { bb_clear(&ba); return ret; } #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) bb_addString(&ba, "\nIndex: 22 Value: "); bb_addIntAsString(&ba, object->lowLQI); bb_addString(&ba, "\nIndex: 23 Value: "); bb_addIntAsString(&ba, object->highLQI); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_G3_PLC_6LO_WPAN int obj_objectsToString(gxByteBuffer* ba, objectArray* objects) { uint16_t pos; int ret = DLMS_ERROR_CODE_OK; gxObject* it; for (pos = 0; pos != objects->size; ++pos) { ret = oa_getByIndex(objects, pos, &it); if (ret != DLMS_ERROR_CODE_OK) { return ret; } if (pos != 0) { bb_addString(ba, ", "); } bb_addString(ba, obj_typeToString2((DLMS_OBJECT_TYPE)it->objectType)); #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(ret == 0); #endif bb_addString(ba, " "); hlp_appendLogicalName(ba, it->logicalName); } return ret; } #ifndef DLMS_IGNORE_FUNCTION_CONTROL int obj_FunctionControlActivationStatusToString(gxArray* table, gxByteBuffer* ba) { int pos, ret = 0; functionStatus* it; bb_addString(ba, "\nIndex: 1 Value: [\r"); for (pos = 0; pos != table->size; ++pos) { if ((ret = arr_getByIndex(table, pos, (void**)&it)) != 0) { break; } bb_addString(ba, "{Name: "); bb_attachString(ba, bb_toHexString(&it->name)); bb_addString(ba, ", Status: "); bb_addIntAsString(ba, it->status); } bb_addString(ba, "]\n"); return ret; } int obj_FunctionControlFunctionsToString(gxArray* table, gxByteBuffer* ba) { int pos, ret = 0; functionalBlock* it; bb_addString(ba, "\nIndex: 1 Value: [\r"); for (pos = 0; pos != table->size; ++pos) { if ((ret = arr_getByIndex(table, pos, (void**)&it)) != 0 || (ret = bb_addString(ba, "{Name: ")) != 0 || (ret = bb_attachString(ba, bb_toHexString(&it->name))) != 0 || (ret = bb_addString(ba, ", specifications: ")) != 0 || (ret = obj_objectsToString(ba, &it->functionSpecifications)) != 0) { break; } } bb_addString(ba, "]\n"); return ret; } int obj_FunctionControlToString(gxFunctionControl* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = obj_FunctionControlActivationStatusToString(&object->activationStatus, &ba)) == 0 && (ret = obj_FunctionControlFunctionsToString(&object->functions, &ba)) == 0) { } bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_FUNCTION_CONTROL #ifndef DLMS_IGNORE_ARRAY_MANAGER int obj_ArrayManagerToString(gxArrayManager* object, char** buff) { int pos, ret = 0; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value:[ "); gxArrayManagerItem* it; for (pos = 0; pos != object->elements.size; ++pos) { if ((ret = arr_getByIndex(&object->elements, pos, (void**)&it)) != 0 || (ret = bb_addString(&ba, "{ID: ")) != 0 || (ret = bb_addIntAsString(&ba, it->id)) != 0 || (ret = bb_addString(&ba, ", Target: ")) != 0 || (ret = hlp_appendLogicalName(&ba, it->element.target->logicalName)) != 0 || (ret = bb_addString(&ba, ":")) != 0 || (ret = bb_addIntAsString(&ba, it->element.attributeIndex)) != 0 || (ret = bb_addString(&ba, "}")) != 0) { break; } } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_ARRAY_MANAGER #ifndef DLMS_IGNORE_UTILITY_TABLES int obj_UtilityTablesToString(gxUtilityTables* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->tableId); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, bb_size(&object->buffer)); bb_addString(&ba, "\nIndex: 4 Value: "); bb_attachString(&ba, bb_toHexString(&object->buffer)); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_UTILITY_TABLES #ifndef DLMS_IGNORE_MBUS_SLAVE_PORT_SETUP int obj_mbusSlavePortSetupToString(gxMbusSlavePortSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->defaultBaud); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->availableBaud); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->addressState); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->busAddress); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_MBUS_SLAVE_PORT_SETUP #ifndef DLMS_IGNORE_IMAGE_TRANSFER int obj_imageTransferToString(gxImageTransfer* object, char** buff) { uint16_t pos; int ret; gxImageActivateInfo* it; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->imageBlockSize); bb_addString(&ba, "\nIndex: 3 Value: "); bb_attachString(&ba, ba_toString(&object->imageTransferredBlocksStatus)); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->imageFirstNotTransferredBlockNumber); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->imageTransferEnabled); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->imageTransferStatus); bb_addString(&ba, "\nIndex: 7 Value: ["); for (pos = 0; pos != object->imageActivateInfo.size; ++pos) { ret = arr_getByIndex(&object->imageActivateInfo, pos, (void**)&it); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } bb_addIntAsString(&ba, it->size); bb_addString(&ba, " "); bb_attachString(&ba, bb_toHexString(&it->identification)); bb_addString(&ba, " "); bb_attachString(&ba, bb_toHexString(&it->signature)); } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_IMAGE_TRANSFER #ifndef DLMS_IGNORE_DISCONNECT_CONTROL int obj_disconnectControlToString(gxDisconnectControl* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->outputState); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->controlState); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->controlMode); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_DISCONNECT_CONTROL #ifndef DLMS_IGNORE_LIMITER int obj_limiterToString(gxLimiter* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addString(&ba, " "); if (object->monitoredValue != NULL) { hlp_appendLogicalName(&ba, object->monitoredValue->logicalName); bb_addString(&ba, ": "); bb_addIntAsString(&ba, object->selectedAttributeIndex); } bb_addString(&ba, "\nIndex: 3 Value: "); ret = var_toString(&object->thresholdActive, &ba); if (ret != 0) { return ret; } bb_addString(&ba, "\nIndex: 4 Value: "); ret = var_toString(&object->thresholdNormal, &ba); if (ret != 0) { return ret; } bb_addString(&ba, "\nIndex: 5 Value: "); ret = var_toString(&object->thresholdEmergency, &ba); if (ret != 0) { return ret; } bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->minOverThresholdDuration); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->minUnderThresholdDuration); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->emergencyProfile.id); bb_addString(&ba, " "); time_toString(&object->emergencyProfile.activationTime, &ba); bb_addString(&ba, " "); bb_addIntAsString(&ba, object->emergencyProfile.duration); bb_addString(&ba, "\nIndex: 9 Value: "); #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) if ((ret = obj_UInt16ArrayToString(&ba, &object->emergencyProfileGroupIDs)) != 0) { return ret; } #else if ((ret = va_toString(&object->emergencyProfileGroupIDs, &ba)) != 0) { return ret; } #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) bb_addString(&ba, "\nIndex: 10 Value: "); bb_addIntAsString(&ba, object->emergencyProfileActive); bb_addString(&ba, "\nIndex: 11 Value: "); actionItemToString(&object->actionOverThreshold, &ba); bb_addString(&ba, "\nIndex: 12 Value: "); actionItemToString(&object->actionUnderThreshold, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_LIMITER #ifndef DLMS_IGNORE_MBUS_CLIENT int obj_mBusClientToString(gxMBusClient* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->capturePeriod); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->primaryAddress); bb_addString(&ba, "\nIndex: 4 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS if (object->mBusPort != NULL) { bb_addLogicalName(&ba, object->mBusPort->logicalName); } #else bb_addLogicalName(&ba, object->mBusPortReference); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(&ba, "\nIndex: 5 Value: "); //TODO: bb_addIntAsString(&ba, object->captureDefinition); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->identificationNumber); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->manufacturerID); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->dataHeaderVersion); bb_addString(&ba, "\nIndex: 9 Value: "); bb_addIntAsString(&ba, object->deviceType); bb_addString(&ba, "\nIndex: 10 Value: "); bb_addIntAsString(&ba, object->accessNumber); bb_addString(&ba, "\nIndex: 11 Value: "); bb_addIntAsString(&ba, object->status); bb_addString(&ba, "\nIndex: 12 Value: "); bb_addIntAsString(&ba, object->alarm); bb_addString(&ba, "\nIndex: 13 Value: "); bb_addIntAsString(&ba, object->configuration); bb_addString(&ba, "\nIndex: 14 Value: "); bb_addIntAsString(&ba, object->encryptionKeyStatus); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_MBUS_CLIENT #ifndef DLMS_IGNORE_MODEM_CONFIGURATION int obj_modemConfigurationToString(gxModemConfiguration* object, char** buff) { uint16_t pos; int ret; gxModemInitialisation* mi; gxByteBuffer ba, * it; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->communicationSpeed); bb_addString(&ba, "\nIndex: 3 Value: ["); for (pos = 0; pos != object->initialisationStrings.size; ++pos) { ret = arr_getByIndex(&object->initialisationStrings, pos, (void**)&mi); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } bb_attachString(&ba, bb_toString(&mi->request)); bb_addString(&ba, " "); bb_attachString(&ba, bb_toString(&mi->response)); bb_addString(&ba, " "); bb_addIntAsString(&ba, mi->delay); } bb_addString(&ba, "]\nIndex: 4 Value: ["); for (pos = 0; pos != object->modemProfile.size; ++pos) { ret = arr_getByIndex(&object->modemProfile, pos, (void**)&it); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } bb_attachString(&ba, bb_toString(it)); } bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_MODEM_CONFIGURATION #ifndef DLMS_IGNORE_MAC_ADDRESS_SETUP int obj_macAddressSetupToString(gxMacAddressSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_attachString(&ba, bb_toString(&object->macAddress)); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_MAC_ADDRESS_SETUP #ifndef DLMS_IGNORE_GPRS_SETUP void qualityOfServiceToString(gxQualityOfService* target, gxByteBuffer* ba) { bb_addIntAsString(ba, target->precedence); bb_addString(ba, " "); bb_addIntAsString(ba, target->delay); bb_addString(ba, " "); bb_addIntAsString(ba, target->reliability); bb_addString(ba, " "); bb_addIntAsString(ba, target->peakThroughput); bb_addString(ba, " "); bb_addIntAsString(ba, target->meanThroughput); bb_addString(ba, " "); } int obj_GPRSSetupToString(gxGPRSSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_attachString(&ba, bb_toString(&object->apn)); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->pinCode); bb_addString(&ba, "\nIndex: 4 Value: ["); qualityOfServiceToString(&object->defaultQualityOfService, &ba); bb_addString(&ba, "]\nIndex: 5 Value: ["); qualityOfServiceToString(&object->requestedQualityOfService, &ba); bb_addString(&ba, "]\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_GPRS_SETUP #ifndef DLMS_IGNORE_EXTENDED_REGISTER int obj_extendedRegisterToString(gxExtendedRegister* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); ret = var_toString(&object->value, &ba); if (ret != 0) { return ret; } bb_addString(&ba, "\nIndex: 3 Value: Scaler: "); bb_addIntAsString(&ba, object->scaler); bb_addString(&ba, " Unit: "); bb_addString(&ba, obj_getUnitAsString(object->unit)); bb_addString(&ba, "\nIndex: 4 Value: "); ret = var_toString(&object->status, &ba); if (ret != 0) { return ret; } bb_addString(&ba, "\nIndex: 5 Value: "); time_toString(&object->captureTime, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_EXTENDED_REGISTER int obj_rowsToString(gxByteBuffer* ba, gxArray* buffer) { dlmsVARIANT* tmp; variantArray* va; int ret; uint16_t r, c; for (r = 0; r != buffer->size; ++r) { ret = arr_getByIndex(buffer, r, (void**)&va); if (ret != DLMS_ERROR_CODE_OK) { return ret; } for (c = 0; c != va->size; ++c) { if (c != 0) { bb_addString(ba, " | "); } ret = va_getByIndex(va, c, &tmp); if (ret != DLMS_ERROR_CODE_OK) { return ret; } ret = var_toString(tmp, ba); if (ret != DLMS_ERROR_CODE_OK) { return ret; } } bb_addString(ba, "\n"); } return 0; } #ifndef DLMS_IGNORE_ASSOCIATION_LOGICAL_NAME void obj_applicationContextNameToString(gxByteBuffer* ba, gxApplicationContextName* object) { hlp_appendLogicalName(ba, object->logicalName); bb_addString(ba, " "); bb_addIntAsString(ba, object->jointIsoCtt); bb_addString(ba, " "); bb_addIntAsString(ba, object->country); bb_addString(ba, " "); bb_addIntAsString(ba, object->countryName); bb_addString(ba, " "); bb_addIntAsString(ba, object->identifiedOrganization); bb_addString(ba, " "); bb_addIntAsString(ba, object->dlmsUA); bb_addString(ba, " "); bb_addIntAsString(ba, object->applicationContext); bb_addString(ba, " "); bb_addIntAsString(ba, object->contextId); } void obj_xDLMSContextTypeToString(gxByteBuffer* ba, gxXDLMSContextType* object) { bb_addIntAsString(ba, object->conformance); bb_addString(ba, " "); bb_addIntAsString(ba, object->maxReceivePduSize); bb_addString(ba, " "); bb_addIntAsString(ba, object->maxSendPduSize); bb_addString(ba, " "); bb_addIntAsString(ba, object->qualityOfService); bb_addString(ba, " "); bb_attachString(ba, bb_toString(&object->cypheringInfo)); } void obj_authenticationMechanismNameToString(gxByteBuffer* ba, gxAuthenticationMechanismName* object) { bb_addIntAsString(ba, object->jointIsoCtt); bb_addString(ba, " "); bb_addIntAsString(ba, object->country); bb_addString(ba, " "); bb_addIntAsString(ba, object->countryName); bb_addIntAsString(ba, object->identifiedOrganization); bb_addString(ba, " "); bb_addIntAsString(ba, object->dlmsUA); bb_addString(ba, " "); bb_addIntAsString(ba, object->authenticationMechanismName); bb_addString(ba, " "); bb_addIntAsString(ba, object->mechanismId); } int obj_associationLogicalNameToString(gxAssociationLogicalName* object, char** buff) { uint16_t pos; int ret = 0; gxKey2* it; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); obj_objectsToString(&ba, &object->objectList); bb_addString(&ba, "]\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->clientSAP); bb_addString(&ba, "/"); bb_addIntAsString(&ba, object->serverSAP); bb_addString(&ba, "\nIndex: 4 Value: "); obj_applicationContextNameToString(&ba, &object->applicationContextName); bb_addString(&ba, "\nIndex: 5 Value: "); obj_xDLMSContextTypeToString(&ba, &object->xDLMSContextInfo); bb_addString(&ba, "\nIndex: 6 Value: "); obj_authenticationMechanismNameToString(&ba, &object->authenticationMechanismName); bb_addString(&ba, "\nIndex: 7 Value: "); bb_attachString(&ba, bb_toString(&object->secret)); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->associationStatus); //Security Setup Reference is from version 1. if (object->base.version > 0) { bb_addString(&ba, "\nIndex: 9 Value: "); #ifndef DLMS_IGNORE_SECURITY_SETUP #ifndef DLMS_IGNORE_OBJECT_POINTERS bb_addLogicalName(&ba, obj_getLogicalName((gxObject*)object->securitySetup)); #else bb_addLogicalName(&ba, object->securitySetupReference); #endif //DLMS_IGNORE_OBJECT_POINTERS #endif //DLMS_IGNORE_SECURITY_SETUP } if (object->base.version > 1) { bb_addString(&ba, "\nIndex: 10 Value: [\n"); for (pos = 0; pos != object->userList.size; ++pos) { if ((ret = arr_getByIndex(&object->userList, pos, (void**)&it)) != 0) { return ret; } bb_addString(&ba, "ID: "); bb_addIntAsString(&ba, it->key); bb_addString(&ba, " Name: "); bb_addString(&ba, (char*)it->value); } bb_addString(&ba, "]\n"); } bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_ASSOCIATION_LOGICAL_NAME #ifndef DLMS_IGNORE_ASSOCIATION_SHORT_NAME int obj_associationShortNameToString(gxAssociationShortName* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); obj_objectsToString(&ba, &object->objectList); bb_addString(&ba, "]\nIndex: 3 Value: "); //TODO: Show access rights. #ifndef DLMS_IGNORE_SECURITY_SETUP bb_addString(&ba, "\nIndex: 4 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS bb_addLogicalName(&ba, obj_getLogicalName((gxObject*)object->securitySetup)); #else hlp_appendLogicalName(&ba, object->securitySetupReference); #endif //DLMS_IGNORE_OBJECT_POINTERS #endif //DLMS_IGNORE_SECURITY_SETUP bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_ASSOCIATION_SHORT_NAME #ifndef DLMS_IGNORE_PPP_SETUP int obj_pppSetupToString(gxPppSetup* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: ["); //TODO: ipcpOptions bb_addString(&ba, "]\nIndex: 3 Value: "); #ifndef DLMS_IGNORE_OBJECT_POINTERS if (object->phy != NULL) { bb_addLogicalName(&ba, object->phy->logicalName); } #else bb_addLogicalName(&ba, object->PHYReference); #endif //DLMS_IGNORE_OBJECT_POINTERS bb_addString(&ba, "\nIndex: 4 Value: ["); //TODO: lcpOptions bb_addString(&ba, "]\nIndex: 5 Value: "); bb_attachString(&ba, bb_toString(&object->userName)); bb_addString(&ba, "\nIndex: 6 Value: "); bb_attachString(&ba, bb_toString(&object->password)); bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->authentication); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_PPP_SETUP #ifndef DLMS_IGNORE_PROFILE_GENERIC int obj_ProfileGenericToString(gxProfileGeneric* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: [\n"); obj_rowsToString(&ba, &object->buffer); bb_addString(&ba, "]\nIndex: 3 Value: ["); obj_CaptureObjectsToString(&ba, &object->captureObjects); bb_addString(&ba, "]\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->capturePeriod); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->sortMethod); bb_addString(&ba, "\nIndex: 6 Value: "); if (object->sortObject != NULL) { ret = hlp_appendLogicalName(&ba, object->sortObject->logicalName); if (ret != 0) { return ret; } } bb_addString(&ba, "\nIndex: 7 Value: "); bb_addIntAsString(&ba, object->entriesInUse); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->profileEntries); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_PROFILE_GENERIC #ifndef DLMS_IGNORE_ACCOUNT int obj_appendReferences(gxByteBuffer* ba, gxArray* list) { uint16_t pos; int ret = 0; unsigned char* it; for (pos = 0; pos != list->size; ++pos) { #ifdef DLMS_IGNORE_MALLOC if ((ret = arr_getByIndex(list, pos, (void**)&it, 6)) != 0 || #else if ((ret = arr_getByIndex(list, pos, (void**)&it)) != 0 || #endif //DLMS_IGNORE_MALLOC (ret = hlp_appendLogicalName(ba, it)) != 0) { break; } } return ret; } int obj_accountToString(gxAccount* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, "Index: 2 Value: [\n")) == 0 && (ret = bb_addIntAsString(&ba, object->paymentMode)) == 0 && (ret = bb_addString(&ba, "\n")) == 0 && (ret = bb_addIntAsString(&ba, object->accountStatus)) == 0 && (ret = bb_addString(&ba, "]")) == 0 && (ret = bb_addString(&ba, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->currentCreditInUse)) == 0 && (ret = bb_addString(&ba, "\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->currentCreditStatus)) == 0 && (ret = bb_addString(&ba, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->availableCredit)) == 0 && (ret = bb_addString(&ba, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->amountToClear)) == 0 && (ret = bb_addString(&ba, "\nIndex: 7 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->clearanceThreshold)) == 0 && (ret = bb_addString(&ba, "\nIndex: 8 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->aggregatedDebt)) == 0 && (ret = bb_addString(&ba, "\nIndex: 9 Value: ")) == 0 && (ret = obj_appendReferences(&ba, &object->creditReferences)) == 0 && (ret = bb_addString(&ba, "\nIndex: 10 Value: ")) == 0 && (ret = obj_appendReferences(&ba, &object->chargeReferences)) == 0 && (ret = bb_addString(&ba, "\nIndex: 11 Value: ")) == 0 && //bb_addIntAsString(&ba, &object->creditChargeConfigurations)) == 0 && (ret = bb_addString(&ba, "\nIndex: 12 Value: ")) == 0 && // bb_addIntAsString(&ba, object->tokenGatewayConfigurations)) == 0 && (ret = bb_addString(&ba, "\nIndex: 13 Value: ")) == 0 && (ret = time_toString(&object->accountActivationTime, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 14 Value: ")) == 0 && (ret = time_toString(&object->accountClosureTime, &ba)) == 0 && (ret = bb_addString(&ba, "\nIndex: 15 Value: ")) == 0 && (ret = bb_set(&ba, object->currency.name.data, object->currency.name.size)) == 0 && (ret = bb_addIntAsString(&ba, object->currency.scale)) == 0 && (ret = bb_addIntAsString(&ba, object->currency.unit)) == 0 && (ret = bb_addString(&ba, "\nIndex: 16 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->lowCreditThreshold)) == 0 && (ret = bb_addString(&ba, "\nIndex: 17 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->nextCreditAvailableThreshold)) == 0 && (ret = bb_addString(&ba, "\nIndex: 18 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->maxProvision)) == 0 && (ret = bb_addString(&ba, "\nIndex: 19 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->maxProvisionPeriod)) == 0 && (ret = bb_addString(&ba, "\n")) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_ACCOUNT #ifndef DLMS_IGNORE_CREDIT int obj_creditToString(gxCredit* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->currentCreditAmount); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->type); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->priority); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->warningThreshold); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->limit); bb_addString(&ba, "\nIndex: 7 Value: "); // bb_addIntAsString(&ba, object->creditConfiguration); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->status); bb_addString(&ba, "\nIndex: 9 Value: "); bb_addIntAsString(&ba, object->presetCreditAmount); bb_addString(&ba, "\nIndex: 10 Value: "); bb_addIntAsString(&ba, object->creditAvailableThreshold); bb_addString(&ba, "\nIndex: 11 Value: "); time_toString(&object->period, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_CREDIT #ifndef DLMS_IGNORE_CHARGE int obj_chargeToString(gxCharge* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addIntAsString(&ba, object->totalAmountPaid); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->chargeType); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->priority); bb_addString(&ba, "\nIndex: 5 Value: "); //TODO: // bb_addIntAsString(&ba, object->unitChargeActive); bb_addString(&ba, "\nIndex: 6 Value: "); // bb_addIntAsString(&ba, object->unitChargePassive); bb_addString(&ba, "\nIndex: 7 Value: "); time_toString(&object->unitChargeActivationTime, &ba); bb_addString(&ba, "\nIndex: 8 Value: "); bb_addIntAsString(&ba, object->period); bb_addString(&ba, "\nIndex: 9 Value: "); // bb_addIntAsString(&ba, object->chargeConfiguration); bb_addString(&ba, "\nIndex: 10 Value: "); time_toString(&object->lastCollectionTime, &ba); bb_addString(&ba, "\nIndex: 11 Value: "); bb_addIntAsString(&ba, object->lastCollectionAmount); bb_addString(&ba, "\nIndex: 12 Value: "); bb_addIntAsString(&ba, object->totalAmountRemaining); bb_addString(&ba, "\nIndex: 13 Value: "); bb_addIntAsString(&ba, object->proportion); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_CHARGE #ifndef DLMS_IGNORE_TOKEN_GATEWAY int obj_tokenGatewayToString( gxTokenGateway* object, char** buff) { char* tmp; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); tmp = bb_toHexString(&object->token); bb_addString(&ba, tmp); gxfree(tmp); bb_addString(&ba, "\nIndex: 3 Value: "); time_toString(&object->time, &ba); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->deliveryMethod); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->status); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_TOKEN_GATEWAY #ifndef DLMS_IGNORE_GSM_DIAGNOSTIC int obj_GsmDiagnosticToString(gxGsmDiagnostic* object, char** buff) { int ret; uint16_t pos; gxAdjacentCell* it; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); #if defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) bb_set(&ba, object->operatorName.data, object->operatorName.size); #else bb_addString(&ba, object->operatorName); #endif //defined(DLMS_IGNORE_MALLOC) || defined(DLMS_COSEM_EXACT_DATA_TYPES) bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->status); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->circuitSwitchStatus); bb_addString(&ba, "\nIndex: 5 Value: "); bb_addIntAsString(&ba, object->packetSwitchStatus); bb_addString(&ba, "\nIndex: 6 Value: ["); bb_addString(&ba, "Cell ID: "); bb_addIntAsString(&ba, object->cellInfo.cellId); bb_addString(&ba, "Location ID: "); bb_addIntAsString(&ba, object->cellInfo.locationId); bb_addString(&ba, "Signal Quality: "); bb_addIntAsString(&ba, object->cellInfo.signalQuality); bb_addString(&ba, "BER: "); bb_addIntAsString(&ba, object->cellInfo.ber); bb_addString(&ba, "]"); bb_addString(&ba, "\nIndex: 7 Value:[\n"); for (pos = 0; pos != object->adjacentCells.size; ++pos) { ret = arr_getByIndex(&object->adjacentCells, pos, (void**)&it); if (ret != 0) { return ret; } if (pos != 0) { bb_addString(&ba, ", "); } bb_addIntAsString(&ba, it->cellId); bb_addString(&ba, ":"); bb_addIntAsString(&ba, it->signalQuality); } bb_addString(&ba, "]\n"); bb_addString(&ba, "\nIndex: 8 Value: "); time_toString(&object->captureTime, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_GSM_DIAGNOSTIC #ifndef DLMS_IGNORE_COMPACT_DATA int obj_CompactDataToString(gxCompactData* object, char** buff) { gxByteBuffer ba; char* tmp; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); tmp = bb_toHexString(&object->buffer); bb_addString(&ba, tmp); gxfree(tmp); bb_addString(&ba, "\nIndex: 3 Value: "); obj_CaptureObjectsToString(&ba, &object->captureObjects); bb_addString(&ba, "\nIndex: 4 Value: "); bb_addIntAsString(&ba, object->templateId); bb_addString(&ba, "\nIndex: 5 Value: "); tmp = bb_toHexString(&object->templateDescription); bb_addString(&ba, tmp); gxfree(tmp); bb_addString(&ba, "\nIndex: 6 Value: "); bb_addIntAsString(&ba, object->captureMethod); *buff = bb_toString(&ba); bb_clear(&ba); return 0; } #endif //DLMS_IGNORE_COMPACT_DATA #ifndef DLMS_IGNORE_LLC_SSCS_SETUP int obj_LlcSscsSetupToString(gxLlcSscsSetup* object, char** buff) { int ret; gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); if ((ret = bb_addString(&ba, "Index: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->serviceNodeAddress)) == 0 && (ret = bb_addString(&ba, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&ba, object->baseNodeAddress)) == 0) { *buff = bb_toString(&ba); } bb_clear(&ba); return ret; } #endif //DLMS_IGNORE_LLC_SSCS_SETUP #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_PHYSICAL_LAYER_COUNTERS int obj_PrimeNbOfdmPlcPhysicalLayerCountersToString(gxPrimeNbOfdmPlcPhysicalLayerCounters* object, char** buff) { return 0; } #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_PHYSICAL_LAYER_COUNTERS #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_SETUP int obj_PrimeNbOfdmPlcMacSetupToString(gxPrimeNbOfdmPlcMacSetup* object, char** buff) { return 0; } #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_SETUP #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_FUNCTIONAL_PARAMETERS int obj_PrimeNbOfdmPlcMacFunctionalParametersToString(gxPrimeNbOfdmPlcMacFunctionalParameters* object, char** buff) { return 0; } #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_FUNCTIONAL_PARAMETERS #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_COUNTERS int obj_PrimeNbOfdmPlcMacCountersToString(gxPrimeNbOfdmPlcMacCounters* object, char** buff) { return 0; } #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_COUNTERS #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_NETWORK_ADMINISTRATION_DATA int obj_PrimeNbOfdmPlcMacNetworkAdministrationDataToString(gxPrimeNbOfdmPlcMacNetworkAdministrationData* object, char** buff) { return 0; } #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_NETWORK_ADMINISTRATION_DATA #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_APPLICATIONS_IDENTIFICATION int obj_PrimeNbOfdmPlcApplicationsIdentificationToString(gxPrimeNbOfdmPlcApplicationsIdentification* object, char** buff) { return 0; } #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_APPLICATIONS_IDENTIFICATION #ifndef DLMS_IGNORE_SCHEDULE int obj_scheduleToString(gxSchedule* object, char** buff) { return 0; } #endif //DLMS_IGNORE_SCHEDULE #ifndef DLMS_IGNORE_PARAMETER_MONITOR int obj_ParameterMonitorToString(gxParameterMonitor* object, char** buff) { return 0; } #endif //DLMS_IGNORE_PARAMETER_MONITOR #ifndef DLMS_IGNORE_ARBITRATOR int obj_ArbitratorToString(gxArbitrator* object, char** buff) { uint16_t pos; int ret = 0; gxByteBuffer bb; gxActionItem* it; bitArray* ba; BYTE_BUFFER_INIT(&bb); bb_addString(&bb, "Index: 2 Value:{"); for (pos = 0; pos != object->actions.size; ++pos) { if (pos != 0) { bb_addString(&bb, ", "); } if ((ret = arr_getByIndex(&object->actions, pos, (void**)&it)) != 0) { break; } bb_addString(&bb, "["); hlp_appendLogicalName(&bb, it->script->base.logicalName); bb_addString(&bb, ", "); bb_addIntAsString(&bb, it->scriptSelector); bb_addString(&bb, "]"); } bb_addString(&bb, "}"); bb_addString(&bb, "\nIndex: 3 Value:{"); for (pos = 0; pos != object->permissionsTable.size; ++pos) { if (pos != 0) { bb_addString(&bb, ", "); } if ((ret = arr_getByIndex(&object->permissionsTable, pos, (void**)&ba)) != 0 || (ret = ba_toString2(&bb, ba)) != 0) { break; } } ret = bb_addString(&bb, "}"); *buff = bb_toString(&bb); bb_clear(&bb); return 0; } #endif //DLMS_IGNORE_ARBITRATOR #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE1_SETUP int obj_Iec8802LlcType1SetupToString(gxIec8802LlcType1Setup* object, char** buff) { int ret; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "Index: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->maximumOctetsUiPdu)) == 0) { *buff = bb_toString(&bb); } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE1_SETUP #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE2_SETUP int obj_Iec8802LlcType2SetupToString(gxIec8802LlcType2Setup* object, char** buff) { int ret; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "Index: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->transmitWindowSizeK)) == 0 && (ret = bb_addString(&bb, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->transmitWindowSizeRW)) == 0 && (ret = bb_addString(&bb, "\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->maximumOctetsPdu)) == 0 && (ret = bb_addString(&bb, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->maximumNumberTransmissions)) == 0 && (ret = bb_addString(&bb, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->acknowledgementTimer)) == 0 && (ret = bb_addString(&bb, "\nIndex: 7 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->bitTimer)) == 0 && (ret = bb_addString(&bb, "\nIndex: 8 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->rejectTimer)) == 0 && (ret = bb_addString(&bb, "\nIndex: 9 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->busyStateTimer)) == 0) { *buff = bb_toString(&bb); } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE2_SETUP #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE3_SETUP int obj_Iec8802LlcType3SetupToString(gxIec8802LlcType3Setup* object, char** buff) { int ret; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "\nIndex: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->maximumOctetsACnPdu)) == 0 && (ret = bb_addString(&bb, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->maximumTransmissions)) == 0 && (ret = bb_addString(&bb, "\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->acknowledgementTime)) == 0 && (ret = bb_addString(&bb, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->receiveLifetime)) == 0 && (ret = bb_addString(&bb, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->transmitLifetime)) == 0) { *buff = bb_toString(&bb); } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE3_SETUP #ifndef DLMS_IGNORE_SFSK_ACTIVE_INITIATOR int obj_SFSKActiveInitiatorToString(gxSFSKActiveInitiator* object, char** buff) { int ret; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "\nIndex: 2 Value: ")) == 0 && (ret = bb_attachString(&bb, bb_toHexString(&object->systemTitle))) == 0 && (ret = bb_addString(&bb, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->macAddress)) == 0 && (ret = bb_addString(&bb, "\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->lSapSelector)) == 0) { *buff = bb_toString(&bb); } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_SFSK_ACTIVE_INITIATOR #ifndef DLMS_IGNORE_SFSK_MAC_COUNTERS int obj_getArrayAsString(gxByteBuffer* bb, gxArray* arr) { uint16_t pos; int ret = 0; gxUint16PairUint32* it; for (pos = 0; pos != arr->size; ++pos) { if (pos != 0) { bb_addString(bb, ", "); } if ((ret = arr_getByIndex(arr, pos, (void**)&it)) != 0 || (ret = bb_addIntAsString(bb, it->first)) != 0 || (ret = bb_addString(bb, ": ")) != 0 || (ret = bb_addIntAsString(bb, it->second)) != 0) { break; } } return ret; } int obj_FSKMacCountersToString(gxFSKMacCounters* object, char** buff) { int ret; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "\nIndex: 2 Value:{")) == 0 && (ret = obj_getArrayAsString(&bb, &object->synchronizationRegister)) == 0 && (ret = bb_addString(&bb, "}\nIndex: 3 Value:[")) == 0 && (ret = bb_addIntAsString(&bb, object->physicalLayerDesynchronization)) == 0 && (ret = bb_addString(&bb, ", ")) == 0 && (ret = bb_addIntAsString(&bb, object->timeOutNotAddressedDesynchronization)) == 0 && (ret = bb_addString(&bb, ", ")) == 0 && (ret = bb_addIntAsString(&bb, object->timeOutFrameNotOkDesynchronization)) == 0 && (ret = bb_addString(&bb, ", ")) == 0 && (ret = bb_addIntAsString(&bb, object->writeRequestDesynchronization)) == 0 && (ret = bb_addString(&bb, ", ")) == 0 && (ret = bb_addIntAsString(&bb, object->wrongInitiatorDesynchronization)) == 0 && (ret = bb_addString(&bb, "]\nIndex: 3 Value:{")) == 0 && (ret = obj_getArrayAsString(&bb, &object->broadcastFramesCounter)) == 0 && (ret = bb_addString(&bb, "}\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->repetitionsCounter)) == 0 && (ret = bb_addString(&bb, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->transmissionsCounter)) == 0 && (ret = bb_addString(&bb, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->crcOkFramesCounter)) == 0 && (ret = bb_addString(&bb, "\nIndex: 7 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->crcNOkFramesCounter)) == 0) { *buff = bb_toString(&bb); } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_SFSK_MAC_COUNTERS #ifndef DLMS_IGNORE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS int obj_SFSKMacSynchronizationTimeoutsToString(gxSFSKMacSynchronizationTimeouts* object, char** buff) { int ret; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "\nIndex: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->searchInitiatorTimeout)) == 0 && (ret = bb_addString(&bb, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->synchronizationConfirmationTimeout)) == 0 && (ret = bb_addString(&bb, "\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->timeOutNotAddressed)) == 0 && (ret = bb_addString(&bb, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->timeOutFrameNotOK)) == 0) { *buff = bb_toString(&bb); } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS #ifndef DLMS_IGNORE_SFSK_PHY_MAC_SETUP int obj_SFSKPhyMacSetUpToString(gxSFSKPhyMacSetUp* object, char** buff) { int ret = 0; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "\nIndex: 2 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->initiatorElectricalPhase)) == 0 && (ret = bb_addString(&bb, "\nIndex: 3 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->deltaElectricalPhase)) == 0 && (ret = bb_addString(&bb, "\nIndex: 4 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->maxReceivingGain)) == 0 && (ret = bb_addString(&bb, "\nIndex: 5 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->maxTransmittingGain)) == 0 && (ret = bb_addString(&bb, "\nIndex: 6 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->searchInitiatorThreshold)) == 0 && (ret = bb_addString(&bb, "\nIndex: 7 Value:[")) == 0 && (ret = bb_addIntAsString(&bb, object->markFrequency)) == 0 && (ret = bb_addString(&bb, ", ")) == 0 && (ret = bb_addIntAsString(&bb, object->spaceFrequency)) == 0 && (ret = bb_addString(&bb, "]\nIndex: 8 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->macAddress)) == 0 && (ret = bb_addString(&bb, "\nIndex: 9 Value:{")) == 0 && (ret = obj_UInt16ArrayToString(&bb, &object->macGroupAddresses)) == 0 && (ret = bb_addString(&bb, "}\nIndex: 10 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->repeater)) == 0 && (ret = bb_addString(&bb, "\nIndex: 11 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->repeaterStatus)) == 0 && (ret = bb_addString(&bb, "\nIndex: 12 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->minDeltaCredit)) == 0 && (ret = bb_addString(&bb, "\nIndex: 13 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->initiatorMacAddress)) == 0 && (ret = bb_addString(&bb, "\nIndex: 14 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->synchronizationLocked)) == 0 && (ret = bb_addString(&bb, "\nIndex: 15 Value: ")) == 0 && (ret = bb_addIntAsString(&bb, object->transmissionSpeed)) == 0) { *buff = bb_toString(&bb); } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_SFSK_PHY_MAC_SETUP #ifndef DLMS_IGNORE_SFSK_REPORTING_SYSTEM_LIST int obj_SFSKReportingSystemListToString(gxSFSKReportingSystemList* object, char** buff) { uint16_t pos; int ret = 0; gxByteBuffer* it; gxByteBuffer bb; BYTE_BUFFER_INIT(&bb); if ((ret = bb_addString(&bb, "\nIndex: 2 Value:{")) == 0) { for (pos = 0; pos != object->reportingSystemList.size; ++pos) { if (pos != 0) { bb_addString(&bb, ", "); } if ((ret = arr_getByIndex(&object->reportingSystemList, pos, (void**)&it)) != 0 || (ret = bb_attachString(&bb, bb_toHexString(it))) != 0) { break; } } if (ret == 0) { if ((ret = bb_addString(&bb, "\n}")) == 0) { *buff = bb_toString(&bb); } } } bb_clear(&bb); return ret; } #endif //DLMS_IGNORE_SFSK_REPORTING_SYSTEM_LIST #ifdef DLMS_ITALIAN_STANDARD int obj_TariffPlanToString(gxTariffPlan* object, char** buff) { gxByteBuffer ba; BYTE_BUFFER_INIT(&ba); bb_addString(&ba, "Index: 2 Value: "); bb_addString(&ba, object->calendarName); bb_addString(&ba, "\nIndex: 3 Value: "); bb_addIntAsString(&ba, object->enabled); bb_addString(&ba, "\nIndex: 5 Value: "); time_toString(&object->activationTime, &ba); bb_addString(&ba, "\n"); *buff = bb_toString(&ba); bb_clear(&ba); return DLMS_ERROR_CODE_OK; } #endif //DLMS_ITALIAN_STANDARD int obj_toString(gxObject* object, char** buff) { int ret = 0; switch (object->objectType) { #ifndef DLMS_IGNORE_DATA case DLMS_OBJECT_TYPE_DATA: ret = obj_DataToString((gxData*)object, buff); break; #endif //DLMS_IGNORE_DATA #ifndef DLMS_IGNORE_REGISTER case DLMS_OBJECT_TYPE_REGISTER: ret = obj_RegisterToString((gxRegister*)object, buff); break; #endif //DLMS_IGNORE_REGISTER #ifndef DLMS_IGNORE_CLOCK case DLMS_OBJECT_TYPE_CLOCK: ret = obj_clockToString((gxClock*)object, buff); break; #endif //DLMS_IGNORE_CLOCK #ifndef DLMS_IGNORE_ACTION_SCHEDULE case DLMS_OBJECT_TYPE_ACTION_SCHEDULE: ret = obj_actionScheduleToString((gxActionSchedule*)object, buff); break; #endif //DLMS_IGNORE_ACTION_SCHEDULE #ifndef DLMS_IGNORE_ACTIVITY_CALENDAR case DLMS_OBJECT_TYPE_ACTIVITY_CALENDAR: ret = obj_activityCalendarToString((gxActivityCalendar*)object, buff); break; #endif //DLMS_IGNORE_ACTIVITY_CALENDAR #ifndef DLMS_IGNORE_ASSOCIATION_LOGICAL_NAME case DLMS_OBJECT_TYPE_ASSOCIATION_LOGICAL_NAME: ret = obj_associationLogicalNameToString((gxAssociationLogicalName*)object, buff); break; #endif //DLMS_IGNORE_ASSOCIATION_LOGICAL_NAME #ifndef DLMS_IGNORE_ASSOCIATION_SHORT_NAME case DLMS_OBJECT_TYPE_ASSOCIATION_SHORT_NAME: #ifndef DLMS_IGNORE_ASSOCIATION_SHORT_NAME ret = obj_associationShortNameToString((gxAssociationShortName*)object, buff); #else ret = DLMS_ERROR_CODE_INVALID_PARAMETER; #endif //DLMS_IGNORE_ASSOCIATION_SHORT_NAME break; #endif //DLMS_IGNORE_ASSOCIATION_SHORT_NAME #ifndef DLMS_IGNORE_AUTO_ANSWER case DLMS_OBJECT_TYPE_AUTO_ANSWER: ret = obj_autoAnswerToString((gxAutoAnswer*)object, buff); break; #endif //DLMS_IGNORE_AUTO_ANSWER #ifndef DLMS_IGNORE_AUTO_CONNECT case DLMS_OBJECT_TYPE_AUTO_CONNECT: ret = obj_autoConnectToString((gxAutoConnect*)object, buff); break; #endif //DLMS_IGNORE_AUTO_CONNECT #ifndef DLMS_IGNORE_DEMAND_REGISTER case DLMS_OBJECT_TYPE_DEMAND_REGISTER: ret = obj_demandRegisterToString((gxDemandRegister*)object, buff); break; #endif //DLMS_IGNORE_DEMAND_REGISTER #ifndef DLMS_IGNORE_MAC_ADDRESS_SETUP case DLMS_OBJECT_TYPE_MAC_ADDRESS_SETUP: ret = obj_macAddressSetupToString((gxMacAddressSetup*)object, buff); break; #endif //DLMS_IGNORE_MAC_ADDRESS_SETUP #ifndef DLMS_IGNORE_EXTENDED_REGISTER case DLMS_OBJECT_TYPE_EXTENDED_REGISTER: ret = obj_extendedRegisterToString((gxExtendedRegister*)object, buff); break; #endif //DLMS_IGNORE_EXTENDED_REGISTER #ifndef DLMS_IGNORE_GPRS_SETUP case DLMS_OBJECT_TYPE_GPRS_SETUP: #ifndef DLMS_IGNORE_GPRS_SETUP ret = obj_GPRSSetupToString((gxGPRSSetup*)object, buff); #endif //DLMS_IGNORE_GPRS_SETUP break; #endif //DLMS_IGNORE_GPRS_SETUP #ifndef DLMS_IGNORE_SECURITY_SETUP case DLMS_OBJECT_TYPE_SECURITY_SETUP: ret = obj_securitySetupToString((gxSecuritySetup*)object, buff); break; #endif //DLMS_IGNORE_SECURITY_SETUP #ifndef DLMS_IGNORE_IEC_HDLC_SETUP case DLMS_OBJECT_TYPE_IEC_HDLC_SETUP: ret = obj_hdlcSetupToString((gxIecHdlcSetup*)object, buff); break; #endif //DLMS_IGNORE_IEC_HDLC_SETUP #ifndef DLMS_IGNORE_IEC_LOCAL_PORT_SETUP case DLMS_OBJECT_TYPE_IEC_LOCAL_PORT_SETUP: ret = obj_localPortSetupToString((gxLocalPortSetup*)object, buff); break; #endif //DLMS_IGNORE_IEC_LOCAL_PORT_SETUP #ifndef DLMS_IGNORE_IEC_TWISTED_PAIR_SETUP case DLMS_OBJECT_TYPE_IEC_TWISTED_PAIR_SETUP: ret = obj_IecTwistedPairSetupToString((gxIecTwistedPairSetup*)object, buff); break; #endif //DLMS_IGNORE_IEC_TWISTED_PAIR_SETUP #ifndef DLMS_IGNORE_IP4_SETUP case DLMS_OBJECT_TYPE_IP4_SETUP: ret = obj_ip4SetupToString((gxIp4Setup*)object, buff); break; #endif //DLMS_IGNORE_IP4_SETUP #ifndef DLMS_IGNORE_IP6_SETUP case DLMS_OBJECT_TYPE_IP6_SETUP: ret = obj_ip6SetupToString((gxIp6Setup*)object, buff); break; #endif //DLMS_IGNORE_IP4_SETUP #ifndef DLMS_IGNORE_MBUS_SLAVE_PORT_SETUP case DLMS_OBJECT_TYPE_MBUS_SLAVE_PORT_SETUP: ret = obj_mbusSlavePortSetupToString((gxMbusSlavePortSetup*)object, buff); break; #endif //DLMS_IGNORE_MBUS_SLAVE_PORT_SETUP #ifndef DLMS_IGNORE_IMAGE_TRANSFER case DLMS_OBJECT_TYPE_IMAGE_TRANSFER: ret = obj_imageTransferToString((gxImageTransfer*)object, buff); break; #endif //DLMS_IGNORE_IMAGE_TRANSFER #ifndef DLMS_IGNORE_DISCONNECT_CONTROL case DLMS_OBJECT_TYPE_DISCONNECT_CONTROL: ret = obj_disconnectControlToString((gxDisconnectControl*)object, buff); break; #endif //DLMS_IGNORE_DISCONNECT_CONTROL #ifndef DLMS_IGNORE_LIMITER case DLMS_OBJECT_TYPE_LIMITER: ret = obj_limiterToString((gxLimiter*)object, buff); break; #endif //DLMS_IGNORE_LIMITER #ifndef DLMS_IGNORE_MBUS_CLIENT case DLMS_OBJECT_TYPE_MBUS_CLIENT: ret = obj_mBusClientToString((gxMBusClient*)object, buff); break; #endif //DLMS_IGNORE_MBUS_CLIENT #ifndef DLMS_IGNORE_MODEM_CONFIGURATION case DLMS_OBJECT_TYPE_MODEM_CONFIGURATION: ret = obj_modemConfigurationToString((gxModemConfiguration*)object, buff); break; #endif //DLMS_IGNORE_MODEM_CONFIGURATION #ifndef DLMS_IGNORE_PPP_SETUP case DLMS_OBJECT_TYPE_PPP_SETUP: ret = obj_pppSetupToString((gxPppSetup*)object, buff); break; #endif //DLMS_IGNORE_PPP_SETUP #ifndef DLMS_IGNORE_PROFILE_GENERIC case DLMS_OBJECT_TYPE_PROFILE_GENERIC: ret = obj_ProfileGenericToString((gxProfileGeneric*)object, buff); break; #endif //DLMS_IGNORE_PROFILE_GENERIC #ifndef DLMS_IGNORE_REGISTER_ACTIVATION case DLMS_OBJECT_TYPE_REGISTER_ACTIVATION: ret = obj_registerActivationToString((gxRegisterActivation*)object, buff); break; #endif //DLMS_IGNORE_REGISTER_ACTIVATION #ifndef DLMS_IGNORE_REGISTER_MONITOR case DLMS_OBJECT_TYPE_REGISTER_MONITOR: ret = obj_registerMonitorToString((gxRegisterMonitor*)object, buff); break; #endif //DLMS_IGNORE_REGISTER_MONITOR #ifndef DLMS_IGNORE_REGISTER_TABLE case DLMS_OBJECT_TYPE_REGISTER_TABLE: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_REGISTER_TABLE #ifndef DLMS_IGNORE_ZIG_BEE_SAS_STARTUP case DLMS_OBJECT_TYPE_ZIG_BEE_SAS_STARTUP: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_ZIG_BEE_SAS_STARTUP #ifndef DLMS_IGNORE_ZIG_BEE_SAS_JOIN case DLMS_OBJECT_TYPE_ZIG_BEE_SAS_JOIN: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_ZIG_BEE_SAS_JOIN #ifndef DLMS_IGNORE_ZIG_BEE_SAS_APS_FRAGMENTATION case DLMS_OBJECT_TYPE_ZIG_BEE_SAS_APS_FRAGMENTATION: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_ZIG_BEE_SAS_APS_FRAGMENTATION #ifndef DLMS_IGNORE_ZIG_BEE_NETWORK_CONTROL case DLMS_OBJECT_TYPE_ZIG_BEE_NETWORK_CONTROL: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_ZIG_BEE_NETWORK_CONTROL #ifndef DLMS_IGNORE_SAP_ASSIGNMENT case DLMS_OBJECT_TYPE_SAP_ASSIGNMENT: ret = obj_sapAssignmentToString((gxSapAssignment*)object, buff); break; #endif //DLMS_IGNORE_SAP_ASSIGNMENT #ifndef DLMS_IGNORE_SCHEDULE case DLMS_OBJECT_TYPE_SCHEDULE: ret = obj_scheduleToString((gxSchedule*)object, buff); break; #endif //DLMS_IGNORE_SCHEDULE #ifndef DLMS_IGNORE_SCRIPT_TABLE case DLMS_OBJECT_TYPE_SCRIPT_TABLE: ret = obj_ScriptTableToString((gxScriptTable*)object, buff); break; #endif //DLMS_IGNORE_SCRIPT_TABLE #ifndef DLMS_IGNORE_SMTP_SETUP case DLMS_OBJECT_TYPE_SMTP_SETUP: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_SMTP_SETUP #ifndef DLMS_IGNORE_SPECIAL_DAYS_TABLE case DLMS_OBJECT_TYPE_SPECIAL_DAYS_TABLE: ret = obj_specialDaysTableToString((gxSpecialDaysTable*)object, buff); break; #endif //DLMS_IGNORE_SPECIAL_DAYS_TABLE #ifndef DLMS_IGNORE_STATUS_MAPPING case DLMS_OBJECT_TYPE_STATUS_MAPPING: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_STATUS_MAPPING #ifndef DLMS_IGNORE_TCP_UDP_SETUP case DLMS_OBJECT_TYPE_TCP_UDP_SETUP: ret = obj_TcpUdpSetupToString((gxTcpUdpSetup*)object, buff); break; #endif //DLMS_IGNORE_TCP_UDP_SETUP #ifndef DLMS_IGNORE_MBUS_DIAGNOSTIC case DLMS_OBJECT_TYPE_MBUS_DIAGNOSTIC: ret = obj_MBusDiagnosticToString((gxMbusDiagnostic*)object, buff); break; #endif //DLMS_IGNORE_MBUS_DIAGNOSTIC #ifndef DLMS_IGNORE_MBUS_PORT_SETUP case DLMS_OBJECT_TYPE_MBUS_PORT_SETUP: ret = obj_MBusPortSetupToString((gxMBusPortSetup*)object, buff); break; #endif //DLMS_IGNORE_MBUS_PORT_SETUP #ifndef DLMS_IGNORE_G3_PLC_MAC_LAYER_COUNTERS case DLMS_OBJECT_TYPE_G3_PLC_MAC_LAYER_COUNTERS: ret = obj_G3PlcMacLayerCounters((gxG3PlcMacLayerCounters*)object, buff); break; #endif //DLMS_IGNORE_G3_PLC_MAC_LAYER_COUNTERS #ifndef DLMS_IGNORE_G3_PLC_MAC_SETUP case DLMS_OBJECT_TYPE_G3_PLC_MAC_SETUP: ret = obj_G3PlcMacSetupToString((gxG3PlcMacSetup*)object, buff); break; #endif //DLMS_IGNORE_G3_PLC_MAC_SETUP #ifndef DLMS_IGNORE_G3_PLC_6LO_WPAN case DLMS_OBJECT_TYPE_G3_PLC_6LO_WPAN: ret = obj_G3Plc6LoWPANToString((gxG3Plc6LoWPAN*)object, buff); break; #endif //DLMS_IGNORE_G3_PLC_6LO_WPAN #ifndef DLMS_IGNORE_FUNCTION_CONTROL case DLMS_OBJECT_TYPE_FUNCTION_CONTROL: ret = obj_FunctionControlToString((gxFunctionControl*)object, buff); break; #endif //DLMS_IGNORE_FUNCTION_CONTROL #ifndef DLMS_IGNORE_ARRAY_MANAGER case DLMS_OBJECT_TYPE_ARRAY_MANAGER: ret = obj_ArrayManagerToString((gxArrayManager*)object, buff); break; #endif //DLMS_IGNORE_ARRAY_MANAGER #ifndef DLMS_IGNORE_UTILITY_TABLES case DLMS_OBJECT_TYPE_UTILITY_TABLES: ret = obj_UtilityTablesToString((gxUtilityTables*)object, buff); break; #endif //DLMS_IGNORE_UTILITY_TABLES #ifndef DLMS_IGNORE_MBUS_MASTER_PORT_SETUP case DLMS_OBJECT_TYPE_MBUS_MASTER_PORT_SETUP: ret = obj_mBusMasterPortSetupToString((gxMBusMasterPortSetup*)object, buff); break; #endif //DLMS_IGNORE_MBUS_MASTER_PORT_SETUP #ifndef DLMS_IGNORE_PUSH_SETUP case DLMS_OBJECT_TYPE_PUSH_SETUP: ret = obj_pushSetupToString((gxPushSetup*)object, buff); break; #endif //DLMS_IGNORE_PUSH_SETUP #ifndef DLMS_IGNORE_DATA_PROTECTION case DLMS_OBJECT_TYPE_DATA_PROTECTION: #if defined(_WIN32) || defined(_WIN64) || defined(__linux__) assert(0); #endif break; #endif //DLMS_IGNORE_DATA_PROTECTION #ifndef DLMS_IGNORE_ACCOUNT case DLMS_OBJECT_TYPE_ACCOUNT: ret = obj_accountToString((gxAccount*)object, buff); break; #endif //DLMS_IGNORE_ACCOUNT #ifndef DLMS_IGNORE_CREDIT case DLMS_OBJECT_TYPE_CREDIT: ret = obj_creditToString((gxCredit*)object, buff); break; #endif //DLMS_IGNORE_CREDIT #ifndef DLMS_IGNORE_CHARGE case DLMS_OBJECT_TYPE_CHARGE: ret = obj_chargeToString((gxCharge*)object, buff); break; #endif //DLMS_IGNORE_CHARGE #ifndef DLMS_IGNORE_TOKEN_GATEWAY case DLMS_OBJECT_TYPE_TOKEN_GATEWAY: ret = obj_tokenGatewayToString((gxTokenGateway*)object, buff); break; #endif //DLMS_IGNORE_TOKEN_GATEWAY #ifndef DLMS_IGNORE_GSM_DIAGNOSTIC case DLMS_OBJECT_TYPE_GSM_DIAGNOSTIC: ret = obj_GsmDiagnosticToString((gxGsmDiagnostic*)object, buff); break; #endif //DLMS_IGNORE_GSM_DIAGNOSTIC #ifndef DLMS_IGNORE_COMPACT_DATA case DLMS_OBJECT_TYPE_COMPACT_DATA: ret = obj_CompactDataToString((gxCompactData*)object, buff); break; #endif //DLMS_IGNORE_COMPACT_DATA #ifndef DLMS_IGNORE_LLC_SSCS_SETUP case DLMS_OBJECT_TYPE_LLC_SSCS_SETUP: ret = obj_LlcSscsSetupToString((gxLlcSscsSetup*)object, buff); break; #endif //DLMS_IGNORE_LLC_SSCS_SETUP #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_PHYSICAL_LAYER_COUNTERS case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_PHYSICAL_LAYER_COUNTERS: ret = obj_PrimeNbOfdmPlcPhysicalLayerCountersToString((gxPrimeNbOfdmPlcPhysicalLayerCounters*)object, buff); break; #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_PHYSICAL_LAYER_COUNTERS #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_SETUP case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_SETUP: ret = obj_PrimeNbOfdmPlcMacSetupToString((gxPrimeNbOfdmPlcMacSetup*)object, buff); break; #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_SETUP #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_FUNCTIONAL_PARAMETERS case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_FUNCTIONAL_PARAMETERS: ret = obj_PrimeNbOfdmPlcMacFunctionalParametersToString((gxPrimeNbOfdmPlcMacFunctionalParameters*)object, buff); break; #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_FUNCTIONAL_PARAMETERS #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_COUNTERS case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_COUNTERS: ret = obj_PrimeNbOfdmPlcMacCountersToString((gxPrimeNbOfdmPlcMacCounters*)object, buff); break; #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_COUNTERS #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_NETWORK_ADMINISTRATION_DATA case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_MAC_NETWORK_ADMINISTRATION_DATA: ret = obj_PrimeNbOfdmPlcMacNetworkAdministrationDataToString((gxPrimeNbOfdmPlcMacNetworkAdministrationData*)object, buff); break; #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_MAC_NETWORK_ADMINISTRATION_DATA #ifndef DLMS_IGNORE_PRIME_NB_OFDM_PLC_APPLICATIONS_IDENTIFICATION case DLMS_OBJECT_TYPE_PRIME_NB_OFDM_PLC_APPLICATIONS_IDENTIFICATION: ret = obj_PrimeNbOfdmPlcApplicationsIdentificationToString((gxPrimeNbOfdmPlcApplicationsIdentification*)object, buff); break; #endif //DLMS_IGNORE_PRIME_NB_OFDM_PLC_APPLICATIONS_IDENTIFICATION #ifndef DLMS_IGNORE_PARAMETER_MONITOR case DLMS_OBJECT_TYPE_PARAMETER_MONITOR: ret = obj_ParameterMonitorToString((gxParameterMonitor*)object, buff); break; #endif //DLMS_IGNORE_PARAMETER_MONITOR #ifndef DLMS_IGNORE_ARBITRATOR case DLMS_OBJECT_TYPE_ARBITRATOR: ret = obj_ArbitratorToString((gxArbitrator*)object, buff); break; #endif //DLMS_IGNORE_ARBITRATOR #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE1_SETUP case DLMS_OBJECT_TYPE_IEC_8802_LLC_TYPE1_SETUP: ret = obj_Iec8802LlcType1SetupToString((gxIec8802LlcType1Setup*)object, buff); break; #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE1_SETUP #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE2_SETUP case DLMS_OBJECT_TYPE_IEC_8802_LLC_TYPE2_SETUP: ret = obj_Iec8802LlcType2SetupToString((gxIec8802LlcType2Setup*)object, buff); break; #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE2_SETUP #ifndef DLMS_IGNORE_IEC_8802_LLC_TYPE3_SETUP case DLMS_OBJECT_TYPE_IEC_8802_LLC_TYPE3_SETUP: ret = obj_Iec8802LlcType3SetupToString((gxIec8802LlcType3Setup*)object, buff); break; #endif //DLMS_IGNORE_IEC_8802_LLC_TYPE3_SETUP #ifndef DLMS_IGNORE_SFSK_ACTIVE_INITIATOR case DLMS_OBJECT_TYPE_SFSK_ACTIVE_INITIATOR: ret = obj_SFSKActiveInitiatorToString((gxSFSKActiveInitiator*)object, buff); break; #endif //DLMS_IGNORE_SFSK_ACTIVE_INITIATOR #ifndef DLMS_IGNORE_SFSK_MAC_COUNTERS case DLMS_OBJECT_TYPE_SFSK_MAC_COUNTERS: ret = obj_FSKMacCountersToString((gxFSKMacCounters*)object, buff); break; #endif //DLMS_IGNORE_SFSK_MAC_COUNTERS #ifndef DLMS_IGNORE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS case DLMS_OBJECT_TYPE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS: ret = obj_SFSKMacSynchronizationTimeoutsToString((gxSFSKMacSynchronizationTimeouts*)object, buff); break; #endif //DLMS_IGNORE_SFSK_MAC_SYNCHRONIZATION_TIMEOUTS #ifndef DLMS_IGNORE_SFSK_PHY_MAC_SETUP case DLMS_OBJECT_TYPE_SFSK_PHY_MAC_SETUP: ret = obj_SFSKPhyMacSetUpToString((gxSFSKPhyMacSetUp*)object, buff); break; #endif //DLMS_IGNORE_SFSK_PHY_MAC_SETUP #ifndef DLMS_IGNORE_SFSK_REPORTING_SYSTEM_LIST case DLMS_OBJECT_TYPE_SFSK_REPORTING_SYSTEM_LIST: ret = obj_SFSKReportingSystemListToString((gxSFSKReportingSystemList*)object, buff); break; #endif //DLMS_IGNORE_SFSK_REPORTING_SYSTEM_LIST #ifdef DLMS_ITALIAN_STANDARD case DLMS_OBJECT_TYPE_TARIFF_PLAN: ret = obj_TariffPlanToString((gxTariffPlan*)object, buff); break; #endif //DLMS_ITALIAN_STANDARD default: //Unknown type. ret = DLMS_ERROR_CODE_INVALID_PARAMETER; } return ret; } #endif //DLMS_IGNORE_STRING_CONVERTER const char* err_toString(int err) { return hlp_getErrorMessage(err); } #endif //DLMS_IGNORE_MALLOC