123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /*
- * hal_serial.h
- *
- * Copyright 2013-2021 Michael Zillgith
- *
- * This file is part of Platform Abstraction Layer (libpal)
- * for libiec61850, libmms, and lib60870.
- */
- #ifndef HAL_SERIAL_H
- #define HAL_SERIAL_H
- #include "hal_base.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * \file hal_serial.h
- * \brief Abstraction layer for serial ports.
- * Has to be implemented for the serial link layer of CS 101.
- */
- /*! \addtogroup hal Platform (Hardware/OS) abstraction layer
- *
- * @{
- */
- /**
- * @defgroup HAL_SERIAL Access to serial interfaces
- *
- * Serial interface abstraction layer. This functions have to be implemented to
- * port lib60870 to new platforms when the serial link layers are required.
- *
- * @{
- */
- typedef struct sSerialPort* SerialPort;
- typedef enum {
- SERIAL_PORT_ERROR_NONE = 0,
- SERIAL_PORT_ERROR_INVALID_ARGUMENT = 1,
- SERIAL_PORT_ERROR_INVALID_BAUDRATE = 2,
- SERIAL_PORT_ERROR_OPEN_FAILED = 3,
- SERIAL_PORT_ERROR_UNKNOWN = 99
- } SerialPortError;
- /**
- * \brief Create a new SerialPort instance
- *
- * \param interfaceName identifier or name of the serial interface (e.g. "/dev/ttyS1" or "COM4")
- * \param baudRate the baud rate in baud (e.g. 9600)
- * \param dataBits the number of data bits (usually 8)
- * \param parity defines what kind of parity to use ('E' - even parity, 'O' - odd parity, 'N' - no parity)
- * \param stopBits the number of stop buts (usually 1)
- *
- * \return the new SerialPort instance
- */
- PAL_API SerialPort
- SerialPort_create(const char* interfaceName, int baudRate, uint8_t dataBits, char parity, uint8_t stopBits);
- /**
- * \brief Destroy the SerialPort instance and release all resources
- */
- PAL_API void
- SerialPort_destroy(SerialPort self);
- /**
- * \brief Open the serial interface
- *
- * \return true in case of success, false otherwise (use \ref SerialPort_getLastError for a detailed error code)
- */
- PAL_API bool
- SerialPort_open(SerialPort self);
- /**
- * \brief Close (release) the serial interface
- */
- PAL_API void
- SerialPort_close(SerialPort self);
- /**
- * \brief Get the baudrate used by the serial interface
- *
- * \return the baud rate in baud
- */
- PAL_API int
- SerialPort_getBaudRate(SerialPort self);
- /**
- * \brief Set the timeout used for message reception
- *
- * \param timeout the timeout value in ms.
- */
- PAL_API void
- SerialPort_setTimeout(SerialPort self, int timeout);
- /**
- * \brief Discard all data in the input buffer of the serial interface
- */
- PAL_API void
- SerialPort_discardInBuffer(SerialPort self);
- /**
- * \brief Read a byte from the interface
- *
- * \return number of read bytes of -1 in case of an error
- */
- PAL_API int
- SerialPort_readByte(SerialPort self);
- /**
- * \brief Write the number of bytes from the buffer to the serial interface
- *
- * \param buffer the buffer containing the data to write
- * \param startPos start position in the buffer of the data to write
- * \param numberOfBytes number of bytes to write
- *
- * \return number of bytes written, or -1 in case of an error
- */
- PAL_API int
- SerialPort_write(SerialPort self, uint8_t* buffer, int startPos, int numberOfBytes);
- /**
- * \brief Get the error code of the last operation
- */
- PAL_API SerialPortError
- SerialPort_getLastError(SerialPort self);
- /*! @} */
- /*! @} */
- #ifdef __cplusplus
- }
- #endif
- #endif /* SRC_IEC60870_LINK_LAYER_SERIAL_PORT_H_ */
|