123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /*
- * link_layer.h
- *
- * Copyright 2017 MZ Automation GmbH
- *
- * This file is part of lib60870-C
- *
- * lib60870-C is free 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, either version 3 of the License, or
- * (at your option) any later version.
- *
- * lib60870-C 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with lib60870-C. If not, see <http://www.gnu.org/licenses/>.
- *
- * See COPYING file for the complete license text.
- */
- #ifndef SRC_IEC60870_LINK_LAYER_LINK_LAYER_H_
- #define SRC_IEC60870_LINK_LAYER_LINK_LAYER_H_
- #include <stdbool.h>
- #include "iec60870_common.h"
- #include "frame.h"
- #include "buffer_frame.h"
- #include "serial_transceiver_ft_1_2.h"
- #include "link_layer_paramete.h"
- typedef struct sLinkLayer* LinkLayer;
- typedef struct sLinkLayerBalanced* LinkLayerBalanced;
- typedef struct sLinkLayerSecondaryUnbalanced* LinkLayerSecondaryUnbalanced;
- typedef struct sLinkLayerPrimaryUnbalanced* LinkLayerPrimaryUnbalanced;
- typedef struct sISecondaryApplicationLayer* ISecondaryApplicationLayer;
- struct sISecondaryApplicationLayer {
- bool (*IsClass1DataAvailable) (void* parameter);
- Frame (*GetClass1Data) (void* parameter, Frame frame);
- Frame (*GetClass2Data) (void* parameter, Frame frame);
- bool (*HandleReceivedData) (void* parameter, uint8_t* msg, bool isBroadcast, int userDataStart, int userDataLength);
- void (*ResetCUReceived) (void* parameter, bool onlyFCB);
- };
- typedef struct sIPrimaryApplicationLayer* IPrimaryApplicationLayer;
- struct sIPrimaryApplicationLayer {
- void (*AccessDemand) (void* parameter, int slaveAddress);
- void (*UserData) (void* parameter, int slaveAddress, uint8_t* msg, int start, int length);
- void (*Timeout) (void* parameter, int slaveAddress);
- };
- typedef struct sIBalancedApplicationLayer* IBalancedApplicationLayer;
- struct sIBalancedApplicationLayer {
- Frame (*GetUserData) (void* parameter, Frame frame);
- bool (*HandleReceivedData) (void* parameter, uint8_t* msg, bool isBroadcast, int userDataStart, int userDataLength);
- };
- LinkLayerPrimaryUnbalanced
- LinkLayerPrimaryUnbalanced_create(
- SerialTransceiverFT12 transceiver,
- LinkLayerParameters linkLayerParameters,
- IPrimaryApplicationLayer applicationLayer,
- void* applicationLayerParameter
- );
- void
- LinkLayerPrimaryUnbalanced_destroy(LinkLayerPrimaryUnbalanced self);
- void
- LinkLayerPrimaryUnbalanced_setStateChangeHandler(LinkLayerPrimaryUnbalanced self,
- IEC60870_LinkLayerStateChangedHandler handler, void* parameter);
- void
- LinkLayerPrimaryUnbalanced_addSlaveConnection(LinkLayerPrimaryUnbalanced self, int slaveAddress);
- void
- LinkLayerPrimaryUnbalanced_resetCU(LinkLayerPrimaryUnbalanced self, int slaveAddress);
- bool
- LinkLayerPrimaryUnbalanced_isChannelAvailable(LinkLayerPrimaryUnbalanced self, int slaveAddress);
- void
- LinkLayerPrimaryUnbalanced_sendLinkLayerTestFunction(LinkLayerPrimaryUnbalanced self, int slaveAddress);
- bool
- LinkLayerPrimaryUnbalanced_requestClass1Data(LinkLayerPrimaryUnbalanced self, int slaveAddress);
- bool
- LinkLayerPrimaryUnbalanced_requestClass2Data(LinkLayerPrimaryUnbalanced self, int slaveAddress);
- bool
- LinkLayerPrimaryUnbalanced_sendConfirmed(LinkLayerPrimaryUnbalanced self, int slaveAddress, BufferFrame message);
- bool
- LinkLayerPrimaryUnbalanced_sendNoReply(LinkLayerPrimaryUnbalanced self, int slaveAddress, BufferFrame message);
- void
- LinkLayerPrimaryUnbalanced_run(LinkLayerPrimaryUnbalanced self);
- LinkLayerSecondaryUnbalanced
- LinkLayerSecondaryUnbalanced_create(
- int linkLayerAddress,
- SerialTransceiverFT12 transceiver,
- LinkLayerParameters linkLayerParameters,
- ISecondaryApplicationLayer applicationLayer,
- void* applicationLayerParameter
- );
- void
- LinkLayerSecondaryUnbalanced_destroy(LinkLayerSecondaryUnbalanced self);
- void
- LinkLayerSecondaryUnbalanced_run(LinkLayerSecondaryUnbalanced self);
- void
- LinkLayerSecondaryUnbalanced_setIdleTimeout(LinkLayerSecondaryUnbalanced self, int timeoutInMs);
- void
- LinkLayerSecondaryUnbalanced_setStateChangeHandler(LinkLayerSecondaryUnbalanced self,
- IEC60870_LinkLayerStateChangedHandler handler, void* parameter);
- void
- LinkLayerSecondaryUnbalanced_setAddress(LinkLayerSecondaryUnbalanced self, int address);
- LinkLayerBalanced
- LinkLayerBalanced_create(
- int linkLayerAddress,
- SerialTransceiverFT12 transceiver,
- LinkLayerParameters linkLayerParameters,
- IBalancedApplicationLayer applicationLayer,
- void* applicationLayerParameter
- );
- void
- LinkLayerBalanced_setStateChangeHandler(LinkLayerBalanced self,
- IEC60870_LinkLayerStateChangedHandler handler, void* parameter);
- void
- LinkLayerBalanced_sendLinkLayerTestFunction(LinkLayerBalanced self);
- void
- LinkLayerBalanced_setIdleTimeout(LinkLayerBalanced self, int timeoutInMs);
- void
- LinkLayerBalanced_setDIR(LinkLayerBalanced self, bool dir);
- void
- LinkLayerBalanced_setAddress(LinkLayerBalanced self, int address);
- void
- LinkLayerBalanced_setOtherStationAddress(LinkLayerBalanced self, int address);
- void
- LinkLayerBalanced_destroy(LinkLayerBalanced self);
- void
- LinkLayerBalanced_run(LinkLayerBalanced self);
- LinkLayer
- LinkLayer_init(LinkLayer self, int address, SerialTransceiverFT12 transceiver, LinkLayerParameters linkLayerParameters);
- void
- LinkLayer_setDIR(LinkLayer self, bool dir);
- void
- LinkLayer_setAddress(LinkLayer self, int address);
- #endif /* SRC_IEC60870_LINK_LAYER_LINK_LAYER_H_ */
|