/*
 * uart.c
 *
 *  Created on: 2019. 5. 27.
 *      Author: parkyj
 */

#include "uart.h"

UARTQUEUE TerminalQueue;
UARTQUEUE WifiQueue;
void InitUartQueue(pUARTQUEUE pQueue)
{
    pQueue->data = pQueue->head = pQueue->tail = 0;

    if (HAL_UART_Receive_DMA(&hTerminal, TerminalQueue.Buffer, 1) != HAL_OK)
    {
//      _Error_Handler(__FILE__, __LINE__);
    }
    //HAL_UART_Receive_DMA(&hTerminal,  TerminalQueue.Buffer, 1);
    //HAL_UART_Receive_IT(hTerminal, pQueue->Buffer + pQueue->head, 1);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    pUARTQUEUE pQueue;

    pQueue = &TerminalQueue;
    pQueue->head++;
    if (pQueue->head >= QUEUE_BUFFER_LENGTH) pQueue->head = 0;
    pQueue->data++;
    if (pQueue->data >= QUEUE_BUFFER_LENGTH)
        GetDataFromUartQueue(huart);
    HAL_UART_Receive_DMA(&hTerminal, pQueue->Buffer + pQueue->head, 1);
   // Set_UartRcv(true);
}
void PutDataToUartQueue(UART_HandleTypeDef *huart, uint8_t data)
{
    pUARTQUEUE pQueue = &TerminalQueue;
    if (pQueue->data >= QUEUE_BUFFER_LENGTH)
        GetDataFromUartQueue(huart);
    pQueue->Buffer[pQueue->head++] = data;
    if (pQueue->head == QUEUE_BUFFER_LENGTH) pQueue->head = 0;
    pQueue->data++;
   // HAL_UART_Receive_DMA(&hTerminal,  pQueue->Buffer + pQueue->head, 10);
}
void GetDataFromUartQueue(UART_HandleTypeDef *huart)
{
    UART_HandleTypeDef *dst = (huart->Instance == USART2 ? &hWifi:&hTerminal);
    pUARTQUEUE pQueue = &TerminalQueue;
    printf("Function : %s : ",__func__);
    if (HAL_UART_Transmit(dst, pQueue->Buffer + pQueue->tail, 1, 3000) != HAL_OK)
    {
     //  _Error_Handler(__FILE__, __LINE__);
    }
    printf("\r\n");
    pQueue->tail++;
    if (pQueue->tail >= QUEUE_BUFFER_LENGTH) pQueue->tail = 0;
    pQueue->data--;
    HAL_Delay(1);
}
void Uart1_Data_Send(uint8_t* data,uint8_t size){
    HAL_UART_Transmit(&huart1, data,size, 10); 
}

