|
@@ -97,9 +97,25 @@ uint32_t write_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
|
|
|
volatile uint32_t ringBuf_bw = ringBuf->bw;
|
|
|
uint32_t ringBuf_len = ringBuf->length;
|
|
|
uint8_t *ringBuf_source = ringBuf->source;
|
|
|
+
|
|
|
+ if( (ringBuf_bw + size) > ringBuf_len )
|
|
|
+ {
|
|
|
+ ringBuf_bw = 0;
|
|
|
+ }
|
|
|
+ memcpy(ringBuf_source + ringBuf_bw, buffer, size);
|
|
|
+ ringBuf->bw = (ringBuf->bw + size) % ringBuf_len;
|
|
|
+ ringBuf->btoRead += size;
|
|
|
+
|
|
|
+/*
|
|
|
+ if(ringBuf->br!=0)
|
|
|
+ {
|
|
|
+ memcpy(ringBuf_source, buffer, size);
|
|
|
+ ringBuf->br = 0;
|
|
|
+ }
|
|
|
+*/
|
|
|
+/*
|
|
|
if( (ringBuf_bw + size) <= ringBuf_len )
|
|
|
{
|
|
|
- memset(ringBuf_source + ringBuf_bw, 0x00, size);
|
|
|
memcpy(ringBuf_source + ringBuf_bw, buffer, size);
|
|
|
}
|
|
|
else
|
|
@@ -110,6 +126,8 @@ uint32_t write_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
|
|
|
}
|
|
|
ringBuf->bw = (ringBuf->bw + size) % ringBuf_len;
|
|
|
ringBuf->btoRead += size;
|
|
|
+*/
|
|
|
+
|
|
|
return size;
|
|
|
}
|
|
|
uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
|
|
@@ -118,44 +136,44 @@ uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
|
|
|
volatile uint32_t ringBuf_br = ringBuf->br;
|
|
|
uint32_t ringBuf_len = ringBuf->length;
|
|
|
uint8_t *ringBuf_source = ringBuf->source;
|
|
|
-#if SEGGER_PRINTF==1
|
|
|
- if(ringBuf_source==0x1fffa63c)
|
|
|
- {
|
|
|
- SEGGER_RTT_printf("[%d]buffer=%X,ringBuf_len=%d-%d-%d\r\n",__LINE__,buffer,ringBuf_len,ringBuf_br,size);
|
|
|
- }
|
|
|
-#endif
|
|
|
- if( (ringBuf_br + size ) <= ringBuf_len )
|
|
|
- {
|
|
|
- memcpy(buffer, ringBuf_source + ringBuf_br, size);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- len = ringBuf_len - ringBuf_br;
|
|
|
- memcpy(buffer, ringBuf_source + ringBuf_br, len);
|
|
|
- memcpy(buffer + len, ringBuf_source, size - len);
|
|
|
- }
|
|
|
- ringBuf->br = (ringBuf->br + size) % ringBuf_len;
|
|
|
- ringBuf->btoRead -= size;
|
|
|
+
|
|
|
+ memcpy(buffer, ringBuf_source, size);
|
|
|
+ ringBuf->br = size;
|
|
|
+
|
|
|
+// if( (ringBuf_br + size ) <= ringBuf_len )
|
|
|
+// {
|
|
|
+// memcpy(buffer, ringBuf_source + ringBuf_br, size);
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// len = ringBuf_len - ringBuf_br;
|
|
|
+// memcpy(buffer, ringBuf_source + ringBuf_br, len);
|
|
|
+// memcpy(buffer + len, ringBuf_source, size - len);
|
|
|
+// }
|
|
|
+// ringBuf->br = (ringBuf->br + size) % ringBuf_len;
|
|
|
+// ringBuf->btoRead -= size;
|
|
|
+
|
|
|
return size;
|
|
|
}
|
|
|
Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, uint8 *txBuffer, uint16 sendLength, uint8 *rxBuffer, uint16 *rxlen, uint32 T_timeout)
|
|
|
{
|
|
|
- uint16 queueRecvSize = 0;
|
|
|
+ UartMsg_t UartRecvMsg;
|
|
|
UartMsg_t UartSendMsg;
|
|
|
BaseType_t Sendret = pdFALSE;
|
|
|
BaseType_t Recvret = pdFALSE;
|
|
|
uint32 retVal = E_NOT_OK;
|
|
|
UartSendMsg.DataLen = sendLength;
|
|
|
- UartSendMsg.dataPrt = txBuffer;
|
|
|
+ UartSendMsg.dataPtr = txBuffer;
|
|
|
*rxlen = 0;
|
|
|
Sendret = xQueueSend(UartSendQueue[transChannel],&UartSendMsg,50);
|
|
|
if(Sendret == pdTRUE)
|
|
|
{
|
|
|
- Recvret = xQueueReceive(UartRecvQueue[recvChannel],&queueRecvSize,T_timeout);
|
|
|
+ Recvret = xQueueReceive(UartRecvQueue[recvChannel],&UartRecvMsg,T_timeout);
|
|
|
if(Recvret == pdTRUE)
|
|
|
{
|
|
|
- *rxlen = queueRecvSize;
|
|
|
- read_ringBuffer(rxBuffer, queueRecvSize, &uartRingBuffer[recvChannel]);
|
|
|
+ *rxlen = UartRecvMsg.DataLen;
|
|
|
+ // read_ringBuffer(rxBuffer, queueRecvSize, &uartRingBuffer[recvChannel]);
|
|
|
+ memcpy(rxBuffer,(uint8 *)(UartRecvMsg.dataAddr),UartRecvMsg.DataLen);
|
|
|
retVal = E_OK;
|
|
|
}
|
|
|
else
|
|
@@ -171,15 +189,16 @@ Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, uint8 *txB
|
|
|
}
|
|
|
Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint8 *rxlen, uint32 T_timeout)
|
|
|
{
|
|
|
- uint16 queueRecvSize = 0;
|
|
|
+ UartMsg_t UartRecvMsg;
|
|
|
BaseType_t ret = pdFALSE;
|
|
|
uint32 retVal = E_NOT_OK;
|
|
|
*rxlen = 0;
|
|
|
- ret = xQueueReceive(UartRecvQueue[recvChannel],&queueRecvSize,T_timeout);
|
|
|
+ ret = xQueueReceive(UartRecvQueue[recvChannel],&UartRecvMsg,T_timeout);
|
|
|
if(ret == pdTRUE)
|
|
|
{
|
|
|
- *rxlen = queueRecvSize;
|
|
|
- read_ringBuffer(rxBuffer, queueRecvSize, &uartRingBuffer[recvChannel]);
|
|
|
+ *rxlen = UartRecvMsg.DataLen;
|
|
|
+// read_ringBuffer(rxBuffer, queueRecvSize, &uartRingBuffer[recvChannel]);
|
|
|
+ memcpy(rxBuffer,(uint8 *)UartRecvMsg.dataAddr,UartRecvMsg.DataLen);
|
|
|
retVal = E_OK;
|
|
|
}
|
|
|
return retVal;
|
|
@@ -196,7 +215,7 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
|
|
|
BaseType_t ret = pdFALSE;
|
|
|
uint32 retVal = E_NOT_OK;
|
|
|
UartSendMsg.DataLen = sendLength;
|
|
|
- UartSendMsg.dataPrt = txBuffer;
|
|
|
+ UartSendMsg.dataPtr = txBuffer;
|
|
|
ret = xQueueSend(UartSendQueue[transChannel],&UartSendMsg,T_timeout);
|
|
|
if(ret == pdTRUE)
|
|
|
{
|
|
@@ -209,9 +228,9 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
|
|
|
create_ringBuffer(&uartRingBuffer[0],ringBufferforUart[0],sizeof(ringBufferforUart[0]));
|
|
|
create_ringBuffer(&uartRingBuffer[1],ringBufferforUart[1],sizeof(ringBufferforUart[1]));
|
|
|
create_ringBuffer(&uartRingBuffer[2],ringBufferforUart[2],sizeof(ringBufferforUart[2]));
|
|
|
- UartRecvQueue[0] = xQueueCreate(6, sizeof(uint16));
|
|
|
- UartRecvQueue[1] = xQueueCreate(6, sizeof(uint16));
|
|
|
- UartRecvQueue[2] = xQueueCreate(6, sizeof(uint16));
|
|
|
+ UartRecvQueue[0] = xQueueCreate(6, sizeof(UartMsg_t));
|
|
|
+ UartRecvQueue[1] = xQueueCreate(6, sizeof(UartMsg_t));
|
|
|
+ UartRecvQueue[2] = xQueueCreate(6, sizeof(UartMsg_t));
|
|
|
UartSendQueue[0] = xQueueCreate(3, sizeof(UartMsg_t));
|
|
|
UartSendQueue[1] = xQueueCreate(1, sizeof(UartMsg_t));
|
|
|
UartSendQueue[2] = xQueueCreate(1, sizeof(UartMsg_t));
|
|
@@ -252,6 +271,7 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
|
|
|
void Uart_Hal_RecvTask(void *pvParameters)
|
|
|
{
|
|
|
UartHalMsg_t UartHalMsgRecv;
|
|
|
+ UartMsg_t UartRecvMsg;
|
|
|
uint16 recvSize = 0;
|
|
|
BaseType_t ret = pdFALSE;
|
|
|
BaseType_t ret_send = pdFALSE;
|
|
@@ -291,19 +311,10 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
|
|
|
if(UartHalMsgRecv.value>0)
|
|
|
{
|
|
|
recvSize = write_ringBuffer(RX_Buffer[UartHalMsgRecv.Channel],UartHalMsgRecv.value,&uartRingBuffer[UartHalMsgRecv.Channel]);
|
|
|
- ret_send = xQueueSend(UartRecvQueue[UartHalMsgRecv.Channel],&recvSize,10);
|
|
|
+ UartRecvMsg.DataLen = UartHalMsgRecv.value;
|
|
|
+ UartRecvMsg.dataAddr = (uint32)(uartRingBuffer[UartHalMsgRecv.Channel].bw + uartRingBuffer[UartHalMsgRecv.Channel].source - recvSize);
|
|
|
+ ret_send = xQueueSend(UartRecvQueue[UartHalMsgRecv.Channel],&UartRecvMsg,10);
|
|
|
}
|
|
|
-#if SEGGER_PRINTF==1
|
|
|
- if(UartHalMsgRecv.Channel==1)
|
|
|
- {
|
|
|
- SEGGER_RTT_printf("uart1_recv= ");
|
|
|
- for(uint16 i=0;i<recvSize;i++)
|
|
|
- {
|
|
|
- SEGGER_RTT_printf("%02X ",RX_Buffer[UartHalMsgRecv.Channel][i]);
|
|
|
- }
|
|
|
- SEGGER_RTT_printf("\r\n");
|
|
|
- }
|
|
|
-#endif
|
|
|
T_timeout[UartHalMsgRecv.Channel] = 0;
|
|
|
UartState[UartHalMsgRecv.Channel] = UartRecvComplete;
|
|
|
}
|
|
@@ -331,10 +342,10 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
|
|
|
#if SEGGER_PRINTF==1
|
|
|
if(UartIdx==1)
|
|
|
{
|
|
|
- SEGGER_RTT_printf("[%d]uart1_s=%s\r\n",__LINE__,UartSendMsg.dataPrt);
|
|
|
+ SEGGER_RTT_printf("[%d]uart1_s=%s\r\n",__LINE__,UartSendMsg.dataPtr);
|
|
|
}
|
|
|
#endif
|
|
|
- T_Uart_Status[UartIdx] = Uart_AsyncSend(UartIdx, UartSendMsg.dataPrt, UartSendMsg.DataLen);
|
|
|
+ T_Uart_Status[UartIdx] = Uart_AsyncSend(UartIdx, UartSendMsg.dataPtr, UartSendMsg.DataLen);
|
|
|
if (E_OK != T_Uart_Status[UartIdx])
|
|
|
{
|
|
|
Uart_Abort(UartIdx, UART_SEND);
|