/*
 * Copyright (c) 2026 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ohos.hdi.serial.v1_0;

import ohos.hdi.serial.v1_0.SerialTypes;

/**
 * @brief Serial HDI interface
 * @since 7.0
 * @version 1.0
 */
interface ISerialDevice {
    /**
     * @brief start to read a serial device.
     *
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
	 * @version 1.0
     */
    StartRead();

    /**
     * @brief stop to read a serial device.
     *
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
	 * @version 1.0
     */
    StopRead();

    /**
     * @brief Close a serial device.
     *
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
	 * @version 1.0
     */
    Close();

    /**
     * @brief Write data to a serial device.
     *
     * @param data Indicates data to write,data size not more than 4096 bytes.
     * @param timeout Indicates timeout in milliseconds.
     * @param bytesWritten Indicates output number of bytes written.
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
	 * @version 1.0
     */
    Write([in] unsigned char[] data, [in] int timeout, [out] int bytesWritten);

    /**
     * @brief Flush buffer of a serial device.
     *
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
	 * @version 1.0
     */
    Flush();

    /**
     * @brief Wait for all write operations to complete.
     *
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
	 * @version 1.0
     */
    Drain();

    /**
     * @brief Send BRK signal of a serial device.
     *
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
	 * @version 1.0
     */
    SendBrkSignal();

    /**
     * @brief Set RTS signal of a serial device.
     *
     * @param rts Indicates RTS signal state.
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
     */
    SetRtsSignal([in] boolean rts);

    /**
     * @brief Get CTS signal of a serial device.
     *
     * @param cts Indicates output CTS signal state.
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
     */
    GetCtsSignal([out] boolean cts);

    /**
     * @brief Set DTR signal of a serial device.
     *
     * @param dtr Indicates DTR signal state.
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
     */
    SetDtrSignal([in] boolean dtr);

    /**
     * @brief Get DSR signal of a serial device.
     *
     * @param dsr Indicates output DSR signal state.
     * @return Returns <b>0</b> if operation is successful.
     * @return Returns a non-zero value if operation fails.
     * @since 7.0
     */
    GetDsrSignal([out] boolean dsr);
}