55 lines
1.3 KiB
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;
|
|
} |