lib60870-C
2.3.2
C source code library for the IEC 60870-5-101/104 protocols
|
Common definitions for IEC 60870-5-101/104 These types are used by CS101/CS104 master and slaves. More...
Go to the source code of this file.
Data Structures | |
struct | Lib60870VersionInfo |
lib60870 version information More... | |
struct | sCS101_AppLayerParameters |
struct | sCS101_StaticASDU |
struct | sCP16Time2a |
struct | sCP24Time2a |
struct | sCP32Time2a |
4 byte binary time More... | |
struct | sCP56Time2a |
struct | sBinaryCounterReading |
struct | sCS104_APCIParameters |
Macros | |
#define | IEC_60870_5_104_DEFAULT_PORT 2404 |
#define | IEC_60870_5_104_DEFAULT_TLS_PORT 19998 |
#define | LIB60870_VERSION_MAJOR 2 |
#define | LIB60870_VERSION_MINOR 3 |
#define | LIB60870_VERSION_PATCH 1 |
Typedefs | |
typedef void(* | IEC60870_LinkLayerStateChangedHandler) (void *parameter, int address, LinkLayerState newState) |
Callback handler for link layer state changes. More... | |
typedef void(* | IEC60870_RawMessageHandler) (void *parameter, uint8_t *msg, int msgSize, bool sent) |
Callback handler for sent and received messages. More... | |
typedef struct sCS101_AppLayerParameters * | CS101_AppLayerParameters |
Parameters for the CS101/CS104 application layer. | |
typedef IEC60870_5_TypeID | TypeID |
typedef struct sInformationObject * | InformationObject |
typedef struct sCS101_ASDU * | CS101_ASDU |
Application Service Data Unit (ASDU) for the CS101/CS104 application layer. | |
typedef sCS101_StaticASDU * | CS101_StaticASDU |
typedef struct sCP16Time2a * | CP16Time2a |
typedef struct sCP24Time2a * | CP24Time2a |
typedef struct sCP32Time2a * | CP32Time2a |
typedef struct sCP56Time2a * | CP56Time2a |
7 byte binary time | |
typedef struct sBinaryCounterReading * | BinaryCounterReading |
Base type for counter readings. | |
typedef struct sCS104_APCIParameters * | CS104_APCIParameters |
Parameters for CS104 connections - APCI (application protocol control information) | |
typedef struct sFrame * | Frame |
Enumerations | |
enum | IEC60870_LinkLayerMode { IEC60870_LINK_LAYER_BALANCED = 0 , IEC60870_LINK_LAYER_UNBALANCED = 1 } |
link layer mode for serial link layers | |
enum | LinkLayerState { LL_STATE_IDLE , LL_STATE_ERROR , LL_STATE_BUSY , LL_STATE_AVAILABLE } |
State of the link layer. More... | |
enum | IEC60870_5_TypeID { M_SP_NA_1 = 1 , M_SP_TA_1 = 2 , M_DP_NA_1 = 3 , M_DP_TA_1 = 4 , M_ST_NA_1 = 5 , M_ST_TA_1 = 6 , M_BO_NA_1 = 7 , M_BO_TA_1 = 8 , M_ME_NA_1 = 9 , M_ME_TA_1 = 10 , M_ME_NB_1 = 11 , M_ME_TB_1 = 12 , M_ME_NC_1 = 13 , M_ME_TC_1 = 14 , M_IT_NA_1 = 15 , M_IT_TA_1 = 16 , M_EP_TA_1 = 17 , M_EP_TB_1 = 18 , M_EP_TC_1 = 19 , M_PS_NA_1 = 20 , M_ME_ND_1 = 21 , M_SP_TB_1 = 30 , M_DP_TB_1 = 31 , M_ST_TB_1 = 32 , M_BO_TB_1 = 33 , M_ME_TD_1 = 34 , M_ME_TE_1 = 35 , M_ME_TF_1 = 36 , M_IT_TB_1 = 37 , M_EP_TD_1 = 38 , M_EP_TE_1 = 39 , M_EP_TF_1 = 40 , S_IT_TC_1 = 41 , C_SC_NA_1 = 45 , C_DC_NA_1 = 46 , C_RC_NA_1 = 47 , C_SE_NA_1 = 48 , C_SE_NB_1 = 49 , C_SE_NC_1 = 50 , C_BO_NA_1 = 51 , C_SC_TA_1 = 58 , C_DC_TA_1 = 59 , C_RC_TA_1 = 60 , C_SE_TA_1 = 61 , C_SE_TB_1 = 62 , C_SE_TC_1 = 63 , C_BO_TA_1 = 64 , M_EI_NA_1 = 70 , S_CH_NA_1 = 81 , S_RP_NA_1 = 82 , S_AR_NA_1 = 83 , S_KR_NA_1 = 84 , S_KS_NA_1 = 85 , S_KC_NA_1 = 86 , S_ER_NA_1 = 87 , S_US_NA_1 = 90 , S_UQ_NA_1 = 91 , S_UR_NA_1 = 92 , S_UK_NA_1 = 93 , S_UA_NA_1 = 94 , S_UC_NA_1 = 95 , C_IC_NA_1 = 100 , C_CI_NA_1 = 101 , C_RD_NA_1 = 102 , C_CS_NA_1 = 103 , C_TS_NA_1 = 104 , C_RP_NA_1 = 105 , C_CD_NA_1 = 106 , C_TS_TA_1 = 107 , P_ME_NA_1 = 110 , P_ME_NB_1 = 111 , P_ME_NC_1 = 112 , P_AC_NA_1 = 113 , F_FR_NA_1 = 120 , F_SR_NA_1 = 121 , F_SC_NA_1 = 122 , F_LS_NA_1 = 123 , F_AF_NA_1 = 124 , F_SG_NA_1 = 125 , F_DR_TA_1 = 126 , F_SC_NB_1 = 127 } |
Message type IDs. | |
enum | CS101_CauseOfTransmission { CS101_COT_PERIODIC = 1 , CS101_COT_BACKGROUND_SCAN = 2 , CS101_COT_SPONTANEOUS = 3 , CS101_COT_INITIALIZED = 4 , CS101_COT_REQUEST = 5 , CS101_COT_ACTIVATION = 6 , CS101_COT_ACTIVATION_CON = 7 , CS101_COT_DEACTIVATION = 8 , CS101_COT_DEACTIVATION_CON = 9 , CS101_COT_ACTIVATION_TERMINATION = 10 , CS101_COT_RETURN_INFO_REMOTE = 11 , CS101_COT_RETURN_INFO_LOCAL = 12 , CS101_COT_FILE_TRANSFER = 13 , CS101_COT_AUTHENTICATION = 14 , CS101_COT_MAINTENANCE_OF_AUTH_SESSION_KEY = 15 , CS101_COT_MAINTENANCE_OF_USER_ROLE_AND_UPDATE_KEY = 16 , CS101_COT_INTERROGATED_BY_STATION = 20 , CS101_COT_INTERROGATED_BY_GROUP_1 = 21 , CS101_COT_INTERROGATED_BY_GROUP_2 = 22 , CS101_COT_INTERROGATED_BY_GROUP_3 = 23 , CS101_COT_INTERROGATED_BY_GROUP_4 = 24 , CS101_COT_INTERROGATED_BY_GROUP_5 = 25 , CS101_COT_INTERROGATED_BY_GROUP_6 = 26 , CS101_COT_INTERROGATED_BY_GROUP_7 = 27 , CS101_COT_INTERROGATED_BY_GROUP_8 = 28 , CS101_COT_INTERROGATED_BY_GROUP_9 = 29 , CS101_COT_INTERROGATED_BY_GROUP_10 = 30 , CS101_COT_INTERROGATED_BY_GROUP_11 = 31 , CS101_COT_INTERROGATED_BY_GROUP_12 = 32 , CS101_COT_INTERROGATED_BY_GROUP_13 = 33 , CS101_COT_INTERROGATED_BY_GROUP_14 = 34 , CS101_COT_INTERROGATED_BY_GROUP_15 = 35 , CS101_COT_INTERROGATED_BY_GROUP_16 = 36 , CS101_COT_REQUESTED_BY_GENERAL_COUNTER = 37 , CS101_COT_REQUESTED_BY_GROUP_1_COUNTER = 38 , CS101_COT_REQUESTED_BY_GROUP_2_COUNTER = 39 , CS101_COT_REQUESTED_BY_GROUP_3_COUNTER = 40 , CS101_COT_REQUESTED_BY_GROUP_4_COUNTER = 41 , CS101_COT_UNKNOWN_TYPE_ID = 44 , CS101_COT_UNKNOWN_COT = 45 , CS101_COT_UNKNOWN_CA = 46 , CS101_COT_UNKNOWN_IOA = 47 } |
Functions | |
const char * | CS101_CauseOfTransmission_toString (CS101_CauseOfTransmission self) |
void | Lib60870_enableDebugOutput (bool value) |
Lib60870VersionInfo | Lib60870_getLibraryVersionInfo (void) |
bool | CS101_ASDU_isTest (CS101_ASDU self) |
Check if the test flag of the ASDU is set. | |
void | CS101_ASDU_setTest (CS101_ASDU self, bool value) |
Set the test flag of the ASDU. | |
bool | CS101_ASDU_isNegative (CS101_ASDU self) |
Check if the negative flag of the ASDU is set. | |
void | CS101_ASDU_setNegative (CS101_ASDU self, bool value) |
Set the negative flag of the ASDU. | |
int | CS101_ASDU_getOA (CS101_ASDU self) |
get the OA (originator address) of the ASDU. | |
CS101_CauseOfTransmission | CS101_ASDU_getCOT (CS101_ASDU self) |
Get the cause of transmission (COT) of the ASDU. | |
void | CS101_ASDU_setCOT (CS101_ASDU self, CS101_CauseOfTransmission value) |
Set the cause of transmission (COT) of the ASDU. | |
int | CS101_ASDU_getCA (CS101_ASDU self) |
Get the common address (CA) of the ASDU. | |
void | CS101_ASDU_setCA (CS101_ASDU self, int ca) |
Set the common address (CA) of the ASDU. More... | |
IEC60870_5_TypeID | CS101_ASDU_getTypeID (CS101_ASDU self) |
Get the type ID of the ASDU. More... | |
void | CS101_ASDU_setTypeID (CS101_ASDU self, IEC60870_5_TypeID typeId) |
Set the type ID of the ASDU. More... | |
bool | CS101_ASDU_isSequence (CS101_ASDU self) |
Check if the ASDU contains a sequence of consecutive information objects. More... | |
void | CS101_ASDU_setSequence (CS101_ASDU self, bool isSequence) |
Set the ASDU to represent a sequence of consecutive information objects. More... | |
int | CS101_ASDU_getNumberOfElements (CS101_ASDU self) |
Get the number of information objects (elements) in the ASDU. More... | |
void | CS101_ASDU_setNumberOfElements (CS101_ASDU self, int numberOfElements) |
Set the number of information objects (elements) in the ASDU. More... | |
InformationObject | CS101_ASDU_getElement (CS101_ASDU self, int index) |
Get the information object with the given index. More... | |
InformationObject | CS101_ASDU_getElementEx (CS101_ASDU self, InformationObject io, int index) |
Get the information object with the given index and store it in the provided information object instance. More... | |
CS101_ASDU | CS101_ASDU_create (CS101_AppLayerParameters parameters, bool isSequence, CS101_CauseOfTransmission cot, int oa, int ca, bool isTest, bool isNegative) |
Create a new ASDU. The type ID will be derived from the first InformationObject that will be added. More... | |
CS101_ASDU | CS101_ASDU_initializeStatic (CS101_StaticASDU self, CS101_AppLayerParameters parameters, bool isSequence, CS101_CauseOfTransmission cot, int oa, int ca, bool isTest, bool isNegative) |
Create a new ASDU and store it in the provided static ASDU structure. More... | |
CS101_ASDU | CS101_ASDU_clone (CS101_ASDU self, CS101_StaticASDU clone) |
Create a new ASDU that is an exact copy of the ASDU. More... | |
uint8_t * | CS101_ASDU_getPayload (CS101_ASDU self) |
bool | CS101_ASDU_addPayload (CS101_ASDU self, uint8_t *buffer, int size) |
Append the provided data to the ASDU payload. More... | |
int | CS101_ASDU_getPayloadSize (CS101_ASDU self) |
void | CS101_ASDU_destroy (CS101_ASDU self) |
Destroy the ASDU object (release all resources) | |
bool | CS101_ASDU_addInformationObject (CS101_ASDU self, InformationObject io) |
add an information object to the ASDU More... | |
void | CS101_ASDU_removeAllElements (CS101_ASDU self) |
remove all information elements from the ASDU object More... | |
int | CP16Time2a_getEplapsedTimeInMs (const CP16Time2a self) |
Get the elapsed time in ms. | |
void | CP16Time2a_setEplapsedTimeInMs (CP16Time2a self, int value) |
set the elapsed time in ms | |
int | CP24Time2a_getMillisecond (const CP24Time2a self) |
Get the millisecond part of the time value. | |
void | CP24Time2a_setMillisecond (CP24Time2a self, int value) |
Set the millisecond part of the time value. | |
int | CP24Time2a_getSecond (const CP24Time2a self) |
Get the second part of the time value. | |
void | CP24Time2a_setSecond (CP24Time2a self, int value) |
Set the second part of the time value. | |
int | CP24Time2a_getMinute (const CP24Time2a self) |
Get the minute part of the time value. | |
void | CP24Time2a_setMinute (CP24Time2a self, int value) |
Set the minute part of the time value. | |
bool | CP24Time2a_isInvalid (const CP24Time2a self) |
Check if the invalid flag of the time value is set. | |
void | CP24Time2a_setInvalid (CP24Time2a self, bool value) |
Set the invalid flag of the time value. | |
bool | CP24Time2a_isSubstituted (const CP24Time2a self) |
Check if the substituted flag of the time value is set. | |
void | CP24Time2a_setSubstituted (CP24Time2a self, bool value) |
Set the substituted flag of the time value. | |
CP56Time2a | CP56Time2a_createFromMsTimestamp (CP56Time2a self, uint64_t timestamp) |
Create a 7 byte time from a UTC ms timestamp. | |
CP32Time2a | CP32Time2a_create (CP32Time2a self) |
void | CP32Time2a_setFromMsTimestamp (CP32Time2a self, uint64_t timestamp) |
int | CP32Time2a_getMillisecond (const CP32Time2a self) |
void | CP32Time2a_setMillisecond (CP32Time2a self, int value) |
int | CP32Time2a_getSecond (const CP32Time2a self) |
void | CP32Time2a_setSecond (CP32Time2a self, int value) |
int | CP32Time2a_getMinute (const CP32Time2a self) |
void | CP32Time2a_setMinute (CP32Time2a self, int value) |
bool | CP32Time2a_isInvalid (const CP32Time2a self) |
void | CP32Time2a_setInvalid (CP32Time2a self, bool value) |
bool | CP32Time2a_isSubstituted (const CP32Time2a self) |
void | CP32Time2a_setSubstituted (CP32Time2a self, bool value) |
int | CP32Time2a_getHour (const CP32Time2a self) |
void | CP32Time2a_setHour (CP32Time2a self, int value) |
bool | CP32Time2a_isSummerTime (const CP32Time2a self) |
void | CP32Time2a_setSummerTime (CP32Time2a self, bool value) |
void | CP56Time2a_setFromMsTimestamp (CP56Time2a self, uint64_t timestamp) |
Set the time value of a 7 byte time from a UTC ms timestamp. | |
uint64_t | CP56Time2a_toMsTimestamp (const CP56Time2a self) |
Convert a 7 byte time to a ms timestamp. | |
int | CP56Time2a_getMillisecond (const CP56Time2a self) |
Get the ms part of a time value. | |
void | CP56Time2a_setMillisecond (CP56Time2a self, int value) |
Set the ms part of a time value. | |
int | CP56Time2a_getSecond (const CP56Time2a self) |
void | CP56Time2a_setSecond (CP56Time2a self, int value) |
int | CP56Time2a_getMinute (const CP56Time2a self) |
void | CP56Time2a_setMinute (CP56Time2a self, int value) |
int | CP56Time2a_getHour (const CP56Time2a self) |
void | CP56Time2a_setHour (CP56Time2a self, int value) |
int | CP56Time2a_getDayOfWeek (const CP56Time2a self) |
void | CP56Time2a_setDayOfWeek (CP56Time2a self, int value) |
int | CP56Time2a_getDayOfMonth (const CP56Time2a self) |
void | CP56Time2a_setDayOfMonth (CP56Time2a self, int value) |
int | CP56Time2a_getMonth (const CP56Time2a self) |
Get the month field of the time. More... | |
void | CP56Time2a_setMonth (CP56Time2a self, int value) |
Set the month field of the time. More... | |
int | CP56Time2a_getYear (const CP56Time2a self) |
Get the year (range 0..99) More... | |
void | CP56Time2a_setYear (CP56Time2a self, int value) |
Set the year. More... | |
bool | CP56Time2a_isSummerTime (const CP56Time2a self) |
void | CP56Time2a_setSummerTime (CP56Time2a self, bool value) |
bool | CP56Time2a_isInvalid (const CP56Time2a self) |
void | CP56Time2a_setInvalid (CP56Time2a self, bool value) |
bool | CP56Time2a_isSubstituted (const CP56Time2a self) |
void | CP56Time2a_setSubstituted (CP56Time2a self, bool value) |
BinaryCounterReading | BinaryCounterReading_create (BinaryCounterReading self, int32_t value, int seqNumber, bool hasCarry, bool isAdjusted, bool isInvalid) |
void | BinaryCounterReading_destroy (BinaryCounterReading self) |
int32_t | BinaryCounterReading_getValue (BinaryCounterReading self) |
void | BinaryCounterReading_setValue (BinaryCounterReading self, int32_t value) |
int | BinaryCounterReading_getSequenceNumber (BinaryCounterReading self) |
bool | BinaryCounterReading_hasCarry (BinaryCounterReading self) |
bool | BinaryCounterReading_isAdjusted (BinaryCounterReading self) |
bool | BinaryCounterReading_isInvalid (BinaryCounterReading self) |
void | BinaryCounterReading_setSequenceNumber (BinaryCounterReading self, int value) |
void | BinaryCounterReading_setCarry (BinaryCounterReading self, bool value) |
void | BinaryCounterReading_setAdjusted (BinaryCounterReading self, bool value) |
void | BinaryCounterReading_setInvalid (BinaryCounterReading self, bool value) |
void | Frame_destroy (Frame self) |
void | Frame_resetFrame (Frame self) |
void | Frame_setNextByte (Frame self, uint8_t byte) |
void | Frame_appendBytes (Frame self, uint8_t *bytes, int numberOfBytes) |
int | Frame_getMsgSize (Frame self) |
uint8_t * | Frame_getBuffer (Frame self) |
int | Frame_getSpaceLeft (Frame self) |
Common definitions for IEC 60870-5-101/104 These types are used by CS101/CS104 master and slaves.