#include "sr_sunrise.h"

#include <string.h>

#define TEST_UART_ID SR_UART1

static SR_DEVICE_T *uartDev;
static int g_uartRxFlag = 0;
static uint32_t g_uartRxLen = 0;
static char recvBuf[48] = {0};



// 串口事件回调
static void UserUartCb(SR_DEVICE_T *dev, SR_UART_EVENT_E event, uint32_t size, void *args)
{
    switch (event)
    {
        case SR_UART_EVT_RXNE:
                g_uartRxFlag = 1;
                g_uartRxLen = size;
        break;
    }

}

static int UartExmp(int argc, char *argv[])
{
    char sendBuf[48] = "uart send\r\n";
    uint32_t tick = 0;
    int ret;
	
    SR_UART_ID_E uartId = TEST_UART_ID;  //默认

    if(argc >=2) uartId = (SR_UART_ID_E)atoi(argv[1]); //如果有参数传入，配置传入参数所代表的串口号

    gShellThreadRun =1;

    SR_UART_CFG_T config = SR_UART_CFG_DEFAULT; // 初始默认配置

    // 获取设备句柄
    uartDev = SR_HalUartOpen(uartId);

    // 参数配置
    config.baudrate = SR_UART_BAUD_115200; // 波特率115200
    config.dataBits = SR_UART_DATA_BIT_8;  // 8位数据位
    config.parity = SR_UART_PARITY_NONE;   // 无奇偶校验
    config.stopBits = SR_UART_STOP_BIT_1;  // 1位停止位
    SR_HalUartConfig(uartDev, &config);

    // 注册回调
    SR_HalUartSetCb(uartDev, UserUartCb, 0);

    while (gShellThreadRun)
    {
        if (g_uartRxFlag == 1)
        {
            g_uartRxFlag = 0;

            // 读取收到的数据
            ret = SR_HalUartRead(uartDev, recvBuf, g_uartRxLen);
            if(ret >0) recvBuf[ret] = 0;

            // 打印收到的数据
            SR_HalUartWrite(uartDev, "recv: ", 6);
            SR_HalUartWrite(uartDev, recvBuf, g_uartRxLen);
            SR_HalUartWrite(uartDev, "\r\n", 2);
        }

        if (tick++ >= 500)
        {
            tick = 0;

            // 周期发送数据
            SR_HalUartWrite(uartDev, sendBuf, strlen(sendBuf));
        }

        SR_Delay(10);
    }
    
    // 关闭串口
    SR_HalUartClose(uartDev);

    return 0;
}
SR_SHELL_CMD_EXPORT(uartExmp, UartExmp);


