
/************************************************* 
 * Copyright (C), Xiongmai Information Technologies Co., Ltd. 2018-2019. All rights reserved. 
 * 文件名: maque_rs485.h
 * 作者@编号: XM R&D @02479
 * 版本: V1.00
 * 创建日期: 2019.05.15
 * 功能描述: 声明RS485读写相关对外接口。
 *
 * 修改历史:  
 ** 1.日期: 2019.05.15
 ** 修改者: XM R&D @02479
 ** 修改内容: 首次创建 。
 ** 2.日期: 2019.05.15
 ** 修改者: XM R&D @02479
 ** 修改内容: 完成了基础版。
 *************************************************/
 

#ifndef MAQUE_RS485_H
#define MAQUE_RS485_H


#ifdef __cplusplus
extern "C" {
#endif

/// 串口数据位数
typedef enum  
{
	MAQUE_UART_DATA_BITS_5 = 5,
	MAQUE_UART_DATA_BITS_6,
	MAQUE_UART_DATA_BITS_7,
	MAQUE_UART_DATA_BITS_8,
	MAQUE_UART_DATA_BITS_NR
} MaQueUartDataBits_e;

/// 串口校验位类型
typedef enum  
{
	MAQUE_UART_PARITY_NO,	 ///< 无校验
	MAQUE_UART_PARITY_ODD, 	 ///< 奇校验
	MAQUE_UART_PARITY_EVEN,	 ///< 偶校验
	MAQUE_UART_MARK,		 ///< 校验位始终为1
	MAQUE_UART_SPACE		 ///< 校验位始终为0
} MaQueUartParity_e;

/// 串口停止位类型
typedef enum 
{
	MAQUE_UART_STOPBITS_ONE,	///< 1 stop bit
	MAQUE_UART_STOPBITS_ONE5,	///< 1.5 stop bit
	MAQUE_UART_STOPBITS_TWO		///< 2 stop bit
} MaQueUartStopBits_e;


/// 串口属性结构
typedef struct
 {
	XM_U32 baudrate;	///< 实际的波特率值。		
	MaQueUartDataBits_e eDataBits;	///< 实际的数据位数，取UartDataBits_e类型的枚举值。	
	MaQueUartParity_e eParity;	///< 奇偶校验选项，取UartParity_e类型的枚举值。	
	MaQueUartStopBits_e eStopBits;	///< 停止位数，取UartStopBits_e类型的枚举值。	
	XM_U8 reserved;	///< 保留	
} MaQueUartAttr_s;


/*
【功能描述】
	创建RS485通信接口。
【参数】
	 无。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/
XM_S32 LibXmMaQue_RS485_create(XM_VOID);

/*
【功能描述】
	设置RS485通道属性。
【参数】
	 参数名称			描述
	pstAttr [in]	需要设置的通道属性。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/

XM_S32 LibXmMaQue_RS485_setAttr(MaQueUartAttr_s *pstAttr);


/*
【功能描述】
	写数据到RS485总线上。
【参数】
	  参数名称			描述
	pData [in]		指向需要写入RS485总线的数据。
	dataLen [in]	需要写入RS485总线的数据长度。
【返回值】
	大于0			实际写入的数据长度。
	小于等于0		失败，请参考错误码。
*/
XM_S32 LibXmMaQue_RS485_write(XM_CHAR *pData, XM_U32 dataLen);

/*
【功能描述】
	从RS485总线上读取数据。
【参数】
	  参数名称			描述
	pData [out]		存放从RS485总线读取数据的缓存。
	dataLenMax [in]	从RS485总线读取数据的最大长度，一般为pData所指的缓存大小。
【返回值】
	大于0			实际读入的数据长度。
	小于等于0		失败，请参考错误码。
*/
XM_S32 LibXmMaQue_RS485_read(XM_CHAR *pData, XM_U32 dataLenMax);

/*
【功能描述】
	从RS485总线上读取数据，用户可以传入超时时间，总超时为: timeoutSec秒 + timeoutUs微秒。
【参数】
	  参数名称			描述
	pData [out]		存放从RS485总线读取数据的缓存。
	dataLenMax [in]	从RS485总线读取数据的最大长度，一般为pData所指的缓存大小。
	timeoutSec [in]	超时时间秒部分。
	timeoutUs [in]	超时时间微秒部分。
【返回值】
	大于0			实际读入的数据长度。
	小于等于0		失败，请参考错误码。
*/
XM_S32 LibXmMaQue_RS485_readTimeOut(XM_CHAR *pData, XM_U32 dataLenMax, XM_U32 timeoutSec, XM_U32 timeoutUs);

/*
【功能描述】
	销毁RS485通信接口。
【参数】
	无。
【返回值】
	XM_SUCCESS		成功。
	其它			失败，请参考错误码。
*/
XM_S32 LibXmMaQue_RS485_destroy(XM_VOID);


#ifdef __cplusplus
}
#endif

#endif

