// // Created by cfif on 03.10.22. // #include "SerialPortHalfDuplexIO.h" #include "SystemDelayInterface.h" static uint16_t vSerialPortHalfDuplexReceive(tSerialPortHalfDuplex *io, uint8_t *data, uint16_t size, uint32_t timeout) { GpioPinSet(io->de, false); uint16_t result = io->serialPortIo->receive(io->serialPortIo->env, data, size, timeout); return result; } static uint16_t vSerialPortHalfDuplexTransmit(tSerialPortHalfDuplex *io, uint8_t *data, uint16_t size, uint32_t timeout) { GpioPinSet(io->de, true); uint16_t result = io->serialPortIo->transmit(io->serialPortIo->env, data, size, timeout); #ifndef HALF_DUPLEX_NO_DELAY // SystemDelayMs(5); #else #endif GpioPinSet(io->de, false); return result; } tSerialPortHalfDuplex vSerialPortHalfDuplexInit( tSerialPortIO *serialPortIo, tGpioPin *de ) { tSerialPortHalfDuplex port = { .serialPortIo = serialPortIo, .de = de, }; return port; } tSerialPortIO vSerialPortHalfDuplexGetIo(tSerialPortHalfDuplex *serialPortHalfDuplex) { tSerialPortIO io = { .env = serialPortHalfDuplex, .receive = (SerialPortIOTransaction) vSerialPortHalfDuplexReceive, .transmit = (SerialPortIOTransaction) vSerialPortHalfDuplexTransmit }; return io; }