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

#include "uart.h"

UARTQUEUE TerminalQueue;

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;

    UartTimerCnt = 0;
    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)
{
    volatile static uint8_t update_data_buf[1024];
    volatile static int cnt;
    uint8_t temp_buf[11];
//    UART_HandleTypeDef *dst = (huart->Instance == USART2 ? &hWifi:&hTerminal);
    UART_HandleTypeDef *dst = &hTerminal;
    pUARTQUEUE pQueue = &TerminalQueue;
//    if (HAL_UART_Transmit(dst, pQueue->Buffer + pQueue->tail, 1, 3000) != HAL_OK)
//    {
     //  _Error_Handler(__FILE__, __LINE__);
//    }
    update_data_buf[cnt++] = *(pQueue->Buffer + pQueue->tail);        

    pQueue->tail++;
    if (pQueue->tail >= QUEUE_BUFFER_LENGTH) pQueue->tail = 0;
    pQueue->data--;
    if(pQueue->data == 0){
#if 0 // PYJ.2019.07.15_BEGIN -- 
#endif // PYJ.2019.07.15_END -- 
        cnt = 0;
        FirmwareUpdateStart(&update_data_buf[0]);
        for(int i  = 0; i < 1024; i++)
            update_data_buf[i] = 0;
        FirmwareTimerCnt = 0;
       // HAL_Delay(1);
    }
}
void Uart1_Data_Send(uint8_t* data,uint8_t size){
	HAL_UART_Transmit_DMA(&huart1, data,size);
}

