13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright (c) 2022 FuZhou Lockzhiner Electronic Co., Ltd. All rights reserved.
33d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43d0407baSopenharmony_ci * you may not use this file except in compliance with the License.
53d0407baSopenharmony_ci * You may obtain a copy of the License at
63d0407baSopenharmony_ci *
73d0407baSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83d0407baSopenharmony_ci *
93d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123d0407baSopenharmony_ci * See the License for the specific language governing permissions and
133d0407baSopenharmony_ci * limitations under the License.
143d0407baSopenharmony_ci */
153d0407baSopenharmony_ci
163d0407baSopenharmony_ci/**
173d0407baSopenharmony_ci * @addtogroup Lockzhiner
183d0407baSopenharmony_ci *
193d0407baSopenharmony_ci * @file uart.h
203d0407baSopenharmony_ci */
213d0407baSopenharmony_ci
223d0407baSopenharmony_ci#ifndef LZ_HARDWARE_UART_H
233d0407baSopenharmony_ci#define LZ_HARDWARE_UART_H
243d0407baSopenharmony_ci
253d0407baSopenharmony_ci/**
263d0407baSopenharmony_ci * @brief Enumerates the number of UART data bits.
273d0407baSopenharmony_ci *
283d0407baSopenharmony_ci * @since 2.2
293d0407baSopenharmony_ci * @version 2.2
303d0407baSopenharmony_ci */
313d0407baSopenharmony_citypedef enum {
323d0407baSopenharmony_ci    /** 5 data bits */
333d0407baSopenharmony_ci    UART_DATA_BIT_5 = 5,
343d0407baSopenharmony_ci    /** 6 data bits */
353d0407baSopenharmony_ci    UART_DATA_BIT_6,
363d0407baSopenharmony_ci    /** 7 data bits */
373d0407baSopenharmony_ci    UART_DATA_BIT_7,
383d0407baSopenharmony_ci    /** 8 data bits */
393d0407baSopenharmony_ci    UART_DATA_BIT_8,
403d0407baSopenharmony_ci} UartIdxDataBit;
413d0407baSopenharmony_ci
423d0407baSopenharmony_ci/**
433d0407baSopenharmony_ci * @brief Enumerates the number of UART stop bits.
443d0407baSopenharmony_ci *
453d0407baSopenharmony_ci * @since 2.2
463d0407baSopenharmony_ci * @version 2.2
473d0407baSopenharmony_ci */
483d0407baSopenharmony_citypedef enum {
493d0407baSopenharmony_ci    /** 1 stop bit */
503d0407baSopenharmony_ci    UART_STOP_BIT_1 = 1,
513d0407baSopenharmony_ci    /** 2 stop bits */
523d0407baSopenharmony_ci    UART_STOP_BIT_2 = 2,
533d0407baSopenharmony_ci} UartStopBit;
543d0407baSopenharmony_ci
553d0407baSopenharmony_ci/**
563d0407baSopenharmony_ci * @brief Enumerates UART parity bits.
573d0407baSopenharmony_ci *
583d0407baSopenharmony_ci * @since 2.2
593d0407baSopenharmony_ci * @version 2.2
603d0407baSopenharmony_ci */
613d0407baSopenharmony_citypedef enum {
623d0407baSopenharmony_ci    /** No parity */
633d0407baSopenharmony_ci    UART_PARITY_NONE = 0,
643d0407baSopenharmony_ci    /** Odd parity */
653d0407baSopenharmony_ci    UART_PARITY_ODD = 1,
663d0407baSopenharmony_ci    /** Even parity */
673d0407baSopenharmony_ci    UART_PARITY_EVEN = 2,
683d0407baSopenharmony_ci} UartParity;
693d0407baSopenharmony_ci
703d0407baSopenharmony_ci/**
713d0407baSopenharmony_ci * @brief Enumerates UART block states.
723d0407baSopenharmony_ci *
733d0407baSopenharmony_ci * @since 2.2
743d0407baSopenharmony_ci * @version 2.2
753d0407baSopenharmony_ci */
763d0407baSopenharmony_citypedef enum {
773d0407baSopenharmony_ci    /** Block disabled */
783d0407baSopenharmony_ci    UART_BLOCK_STATE_NONE_BLOCK = 0,
793d0407baSopenharmony_ci    /** Block enabled */
803d0407baSopenharmony_ci    UART_BLOCK_STATE_BLOCK,
813d0407baSopenharmony_ci} UartBlockState;
823d0407baSopenharmony_ci
833d0407baSopenharmony_ci/**
843d0407baSopenharmony_ci * @brief Enumerates hardware flow control modes.
853d0407baSopenharmony_ci *
863d0407baSopenharmony_ci * @since 2.2
873d0407baSopenharmony_ci * @version 2.2
883d0407baSopenharmony_ci */
893d0407baSopenharmony_citypedef enum {
903d0407baSopenharmony_ci    /** Hardware flow control disabled */
913d0407baSopenharmony_ci    FLOW_CTRL_NONE,
923d0407baSopenharmony_ci    /** RTS and CTS hardware flow control enabled */
933d0407baSopenharmony_ci    FLOW_CTRL_RTS_CTS,
943d0407baSopenharmony_ci    /** RTS hardware flow control enabled */
953d0407baSopenharmony_ci    FLOW_CTRL_RTS_ONLY,
963d0407baSopenharmony_ci    /** CTS hardware flow control enabled */
973d0407baSopenharmony_ci    FLOW_CTRL_CTS_ONLY,
983d0407baSopenharmony_ci} FlowCtrl;
993d0407baSopenharmony_ci
1003d0407baSopenharmony_ci/**
1013d0407baSopenharmony_ci * @brief Defines basic attributes of a UART port.
1023d0407baSopenharmony_ci *
1033d0407baSopenharmony_ci * @since 2.2
1043d0407baSopenharmony_ci * @version 2.2
1053d0407baSopenharmony_ci */
1063d0407baSopenharmony_citypedef struct {
1073d0407baSopenharmony_ci    /** Baud rate */
1083d0407baSopenharmony_ci    unsigned int baudRate;
1093d0407baSopenharmony_ci    /** Data bits */
1103d0407baSopenharmony_ci    UartIdxDataBit dataBits;
1113d0407baSopenharmony_ci    /** Stop bit */
1123d0407baSopenharmony_ci    UartStopBit stopBits;
1133d0407baSopenharmony_ci    /** Parity */
1143d0407baSopenharmony_ci    UartParity parity;
1153d0407baSopenharmony_ci    /** Rx block state */
1163d0407baSopenharmony_ci    UartBlockState rxBlock;
1173d0407baSopenharmony_ci    /** Tx block state */
1183d0407baSopenharmony_ci    UartBlockState txBlock;
1193d0407baSopenharmony_ci    /** Padding bit */
1203d0407baSopenharmony_ci    unsigned char pad;
1213d0407baSopenharmony_ci} UartAttribute;
1223d0407baSopenharmony_ci
1233d0407baSopenharmony_ci/**
1243d0407baSopenharmony_ci * @brief Configures a UART device with the port number specified by <b>id</b>
1253d0407baSopenharmony_ci * based on the basic and extended attributes.
1263d0407baSopenharmony_ci *
1273d0407baSopenharmony_ci *
1283d0407baSopenharmony_ci *
1293d0407baSopenharmony_ci * @param id Indicates the port number of the UART device.
1303d0407baSopenharmony_ci * @param param Indicates the pointer to the UART attributes.
1313d0407baSopenharmony_ci * @return Returns {@link LZ_HARDWARE_SUCCESS} if the UART device is configured successfully;
1323d0407baSopenharmony_ci * returns {@link LZ_HARDWARE_FAILURE} otherwise. For details about other return values, see the chip description.
1333d0407baSopenharmony_ci */
1343d0407baSopenharmony_ciunsigned int LzUartInit(unsigned int id, const UartAttribute *param);
1353d0407baSopenharmony_ci
1363d0407baSopenharmony_ci/**
1373d0407baSopenharmony_ci * @brief Reads a specified length of data from a UART device with the port number specified by <b>id</b>.
1383d0407baSopenharmony_ci *
1393d0407baSopenharmony_ci *
1403d0407baSopenharmony_ci *
1413d0407baSopenharmony_ci * @param id Indicates the port number of the UART device.
1423d0407baSopenharmony_ci * @param data Indicates the pointer to the start address of the data to read.
1433d0407baSopenharmony_ci * @param dataLen Indicates the number of bytes to read.
1443d0407baSopenharmony_ci * @return Returns the number of bytes read if the operation is successful; returns <b>-1</b> otherwise.
1453d0407baSopenharmony_ci */
1463d0407baSopenharmony_ciunsigned int LzUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);
1473d0407baSopenharmony_ci
1483d0407baSopenharmony_ci/**
1493d0407baSopenharmony_ci * @brief Writes a specified length of data to a UART device with the port number specified by <b>id</b>.
1503d0407baSopenharmony_ci *
1513d0407baSopenharmony_ci *
1523d0407baSopenharmony_ci *
1533d0407baSopenharmony_ci * @param id Indicates the port number of the UART device.
1543d0407baSopenharmony_ci * @param data Indicates the pointer to the start address of the data to write.
1553d0407baSopenharmony_ci * @param dataLen Indicates the number of bytes to write.
1563d0407baSopenharmony_ci * @return Returns the number of bytes written if the operation is successful; returns <b>-1</b> otherwise.
1573d0407baSopenharmony_ci */
1583d0407baSopenharmony_ciunsigned int LzUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);
1593d0407baSopenharmony_ci
1603d0407baSopenharmony_ci/**
1613d0407baSopenharmony_ci * @brief Writes a character to a UART device with the port number specified by <b>id</b>.
1623d0407baSopenharmony_ci *
1633d0407baSopenharmony_ci *
1643d0407baSopenharmony_ci *
1653d0407baSopenharmony_ci * @param id Indicates the port number of the UART device.
1663d0407baSopenharmony_ci * @param c Indicates a character to write.
1673d0407baSopenharmony_ci * @return Returns the number of bytes written if the operation is successful; returns <b>-1</b> otherwise.
1683d0407baSopenharmony_ci */
1693d0407baSopenharmony_ciunsigned int LzUartPutc(unsigned int id, char c);
1703d0407baSopenharmony_ci
1713d0407baSopenharmony_ci/**
1723d0407baSopenharmony_ci * @brief Deinitializes a UART device.
1733d0407baSopenharmony_ci *
1743d0407baSopenharmony_ci * @param id Indicates the port number of the UART device.
1753d0407baSopenharmony_ci * @return Returns {@link LZ_HARDWARE_SUCCESS} if the UART device is deinitialized;
1763d0407baSopenharmony_ci * returns {@link LZ_HARDWARE_FAILURE} otherwise. For details about other return values, see the chip description.
1773d0407baSopenharmony_ci */
1783d0407baSopenharmony_ciunsigned int LzUartDeinit(unsigned int id);
1793d0407baSopenharmony_ci
1803d0407baSopenharmony_ci/**
1813d0407baSopenharmony_ci * @brief Sets flow control for a UART device with the port number specified by <b>id</b>.
1823d0407baSopenharmony_ci *
1833d0407baSopenharmony_ci *
1843d0407baSopenharmony_ci *
1853d0407baSopenharmony_ci * @param id Indicates the port number of the UART device.
1863d0407baSopenharmony_ci * @param flowCtrl Indicates the flow control parameters, as enumerated in {@link FlowCtrl}.
1873d0407baSopenharmony_ci * @return Returns {@link LZ_HARDWARE_SUCCESS} if flow control is set successfully;
1883d0407baSopenharmony_ci * returns {@link LZ_HARDWARE_FAILURE} otherwise. For details about other return values, see the chip description.
1893d0407baSopenharmony_ci */
1903d0407baSopenharmony_ciunsigned int LzUartSetFlowCtrl(unsigned int id, FlowCtrl flowCtrl);
1913d0407baSopenharmony_ci
1923d0407baSopenharmony_ciunsigned int DebugWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);
1933d0407baSopenharmony_ciunsigned int DebugPutc(unsigned int id, char c);
1943d0407baSopenharmony_ci
1953d0407baSopenharmony_ci#endif
1963d0407baSopenharmony_ci
197