diff --git a/Inc/SerialPortArtery.h b/Inc/SerialPortArtery.h index eef7a61..148f97d 100644 --- a/Inc/SerialPortArtery.h +++ b/Inc/SerialPortArtery.h @@ -30,6 +30,7 @@ typedef struct { osMessageQueueId_t rxDataQueue; osMessageQueueId_t rxDataSnifferQueue; + osMessageQueueId_t rxDataSnifferSecondQueue; } tSerialPortArtery; void vSerialPortInit( @@ -201,7 +202,9 @@ tSerialPortIO vSerialPortGetIo(tSerialPortArtery *env); tSerialPortIO vSerialPortGetSnifferIo(tSerialPortArtery *env); -uint16_t vSerialPortTransmit(tSerialPortArtery *env, uint8_t *data, uint16_t size, uint32_t timeout); +tSerialPortIO SerialPort_GetSnifferSecondIo(tSerialPortArtery *env); + + uint16_t vSerialPortTransmit(tSerialPortArtery *env, uint8_t *data, uint16_t size, uint32_t timeout); uint16_t vSerialPortBlindTransmit(tSerialPortArtery *env, uint8_t *data, uint16_t size, uint32_t timeout); diff --git a/Src/SerialPortArtery.c b/Src/SerialPortArtery.c index a3890ea..1d43867 100644 --- a/Src/SerialPortArtery.c +++ b/Src/SerialPortArtery.c @@ -524,7 +524,7 @@ void SerialPortFilter_RxDmaBufToQueue(tSerialPortArtery *env, uint32_t bufEnd, } void SerialPort_RxDmaBufToQueue(tSerialPortArtery *env, uint32_t bufEnd) { - + osStatus_t res; for (uint32_t i = env->rxDmaOffset; i < bufEnd; ++i) { osMessageQueuePut(env->rxDataQueue, &env->rxDmaBuf[i], 0x0, 0U); if (env->rxDataSnifferQueue) { @@ -664,6 +664,12 @@ static uint16_t vSerialPortReceiveSniffer(tSerialPortArtery *env, uint8_t *data, : 0; } +static uint16_t vSerialPortReceiveSnifferSecond(tSerialPortArtery *env, uint8_t *data, uint16_t size, uint32_t timeout) { + + return env->rxDataSnifferSecondQueue + ? vSerialPortReceiveQueue(env, data, size, timeout, env->rxDataSnifferSecondQueue) + : 0; +} static uint16_t vSerialPortTransmitOverDma(tSerialPortArtery *env, uint8_t *data, uint16_t size, uint32_t timeout) { uint16_t sent = 0; @@ -784,3 +790,12 @@ tSerialPortIO vSerialPortGetSnifferIo(tSerialPortArtery *env) { }; return io; } + +tSerialPortIO SerialPort_GetSnifferSecondIo(tSerialPortArtery *env) { + tSerialPortIO io = { + .env = env, + .receive = (SerialPortIOTransaction) vSerialPortReceiveSnifferSecond, + .transmit = vSerialPortTransmitterGet(env) + }; + return io; +} \ No newline at end of file