#ifndef UART_DEV_H
#define UART_DEV_H

#include "ring_queue.h"
#include "comm_types.h"
#include "string.h"
#include "usart.h"
#include "assertions.h"

#define  ASCII_CHAR_BACKSPACE                           0x08    /* '\b' */
#define  ASCII_CHAR_CHARACTER_TABULATION                0x09    /* '\t' */
#define  ASCII_CHAR_LINE_FEED                           0x0A    /* '\n' */
#define  ASCII_CHAR_LINE_TABULATION                     0x0B    /* '\v' */
#define  ASCII_CHAR_FORM_FEED                           0x0C    /* '\f' */
#define  ASCII_CHAR_CARRIAGE_RETURN                     0x0D    /* '\r' */         


typedef u_int32_t device_handle;
extern device_handle g_term_uart_handle;
extern device_handle g_lora_uart_handle;

#define RS485_MAX_PACK_DATA_LEN  30

typedef enum{  
   RAIN_RS485_UART_INDEX  = 0,
   TERM_UART_INDEX        = 1,
   LORA_UART_INDEX        = 3,
}uartIndex_e;

/* UART 驱动数据结构,对应一个uart设备 */
typedef struct _uart_device_info{
  u_int8_t      init;               
  uartIndex_e   uart_index;             
  u_int32_t     uart_baudrate;    
  RingQueue     uart_ring_queue;  
}uart_device_info;

void uart_sendstr(device_handle device,char *str);
void uart_dev_write(device_handle device, void *data, int len);
void init_term_uart();
void init_lora_uart();
void uart_close(uartIndex_e uart_index);
void term_printf(char *format, ...);
void uart_dev_write(device_handle device, void *data, int len);
int term_uart_readln(u_int8_t *buff, int buff_size, u_int32_t timeout_ms);
int uart_dev_char_present(device_handle device);
char uart_dev_in_char(device_handle device);
#endif