/**
* @file HW_UART_ATY.h
*
* @param Project DEVICE_GENERAL_ATY_LIB
*
* @author ATY
*
* @copyright
* - Copyright 2017 - 2026 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
*
* https://mengze.top/MZ-ATY_VCJS
* - CC 4.0 BY-NC-SA -
*
* https://creativecommons.org/licenses/by-nc-sa/4.0/
* - Your use will be deemed to have accepted the terms of this statement.
*
* @brief functions of uart for C platform
*
* @version
* - 1_01_221231 > ATY
* -# Preliminary version, first Release
* - 1_02_240410 > ATY
* -# add multy addr and channel
* -# add lock
* -# 1ms with 2 channel at the same time tested good(OK?)
* - 1_04_251118 > ATY
* -# finish UartPrintf and test
********************************************************************************
*/
#ifndef __HW_UART_ATY_H
#define __HW_UART_ATY_H
#include "INCLUDE_ATY.h"
/******************************* For user *************************************/
// #define UART_RX_MAX_LEN (9 + (15 * 4))
// #define UART_RX_MAX_LEN (16)
#ifndef UART_RX_MAX_LEN
#define UART_RX_MAX_LEN (254)
#endif
/******************************************************************************/
struct HW_UART_ATY_Dev{
// uint8_t* rx;
uint8_t rx[UART_RX_MAX_LEN];
uint8_t* tx;
uint8_t rxCount;
uint8_t txCount;
uint32_t rcvOverTimeOutCountNum;
uint32_t rcvOverTimeOutCount;
uint8_t rcvOverFlag;
uint8_t uartInitFlag;
void (*uartInit)(uint8_t* rx);
void (*uartSendByte)(uint8_t byte);
/**
* @brief uart receive data analysis in user define self
*/
void (*uartReceiveProcess_User)();
uint8_t lock;
};
uint8_t UartSendByte(uint8_t byte, struct HW_UART_ATY_Dev* dev);
void UartRxClear(struct HW_UART_ATY_Dev* dev);
void UartSendBytes(uint8_t* bytes, uint16_t len, struct HW_UART_ATY_Dev* dev);
void UartSendStr(uint8_t* buf, struct HW_UART_ATY_Dev* dev);
void UartSendFloat(float dataFloat, uint8_t endian, struct HW_UART_ATY_Dev* dev);
void UartSendFloatStr(float dataFloat, uint8_t DECIMALS_NUM, struct HW_UART_ATY_Dev* dev);
void UartReceiveProcess(struct HW_UART_ATY_Dev* dev);
void UartPrintf(struct HW_UART_ATY_Dev* dev, ...);
// #define UartPrintf_Test_ATY
#ifdef UartPrintf_Test_ATY
void UartPrintf_Test_All(struct HW_UART_ATY_Dev* dev);
void UartPrintf_Test_Quick(struct HW_UART_ATY_Dev* dev);
#endif /* UartPrintf_Test_ATY */
#endif /* __HW_UART_ATY_H */
/******************************** End Of File *********************************/