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