SerialPortHalfDuplexInterface/Src/SerialPortHalfDuplexIO.c

55 lines
1.3 KiB
C

//
// 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;
}