| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.hardware.serialimpl; |
| |
| using zx; |
| using fuchsia.hardware.serial; |
| |
| // Start of `flags` that can be passed to Config. |
| |
| // Select the character width |
| const SERIAL_DATA_BITS_5 uint32 = 0x0; |
| const SERIAL_DATA_BITS_6 uint32 = 0x1; |
| const SERIAL_DATA_BITS_7 uint32 = 0x2; |
| const SERIAL_DATA_BITS_8 uint32 = 0x3; |
| const SERIAL_DATA_BITS_MASK uint32 = 0x3; |
| |
| // Select the number of stop bits |
| const SERIAL_STOP_BITS_1 uint32 = 0x0; |
| const SERIAL_STOP_BITS_2 uint32 = 0x4; |
| const SERIAL_STOP_BITS_MASK uint32 = 0x4; |
| |
| // Select the parity mechanism |
| const SERIAL_PARITY_NONE uint32 = 0x00; |
| const SERIAL_PARITY_EVEN uint32 = 0x08; |
| const SERIAL_PARITY_ODD uint32 = 0x10; |
| const SERIAL_PARITY_MASK uint32 = 0x18; |
| |
| // Select the flow control mechanism |
| const SERIAL_FLOW_CTRL_NONE uint32 = 0x00; |
| const SERIAL_FLOW_CTRL_CTS_RTS uint32 = 0x20; |
| const SERIAL_FLOW_CTRL_MASK uint32 = 0x20; |
| |
| // Set this flag to change baud rate but leave other properties unchanged |
| const SERIAL_SET_BAUD_RATE_ONLY uint32 = 0x80000000; |
| |
| // End of `flags` that can be passed to Config. |
| @transport("Driver") |
| open protocol Device { |
| flexible GetInfo() -> (struct { |
| info fuchsia.hardware.serial.SerialPortInfo; |
| }) error zx.Status; |
| |
| /// Configures the given serial port. |
| /// Values of `flags` are defined in the constants above. |
| flexible Config(struct { |
| baud_rate uint32; |
| flags uint32; |
| }) -> () error zx.Status; |
| |
| /// Enable or disable the device. |
| /// If already enabled and `enable` is true, this is a no-op and returns successfully. |
| /// If already disabled and `enable` is false, this is a no-op and returns successfully. |
| /// |
| /// + request `enable` true to enable the device, or false to disable it. |
| /// * error one of the following values: |
| /// * `ZX_ERR_BAD_STATE`: `enable` was false, and a `Read()` or `Write()` call was pending. |
| flexible Enable(struct { |
| enable bool; |
| }) -> () error zx.Status; |
| |
| /// Perform a read operation. Returns immediately if data has been received since the last call; |
| /// otherwise the request is completed the next time data is received (clients can use the |
| /// hanging-get pattern to be notified of new data). |
| /// |
| /// - response `data` the bytes read from the device. |
| /// * error one of the following values: |
| /// * `ZX_ERR_BAD_STATE`: The device was not enabled. |
| /// * `ZX_ERR_CANCELED`: The call was canceled by `CancelAll()`. |
| /// * `ZX_ERR_ALREADY_BOUND`: Another `Read()` call was already pending. |
| /// * Other values may be returned for driver- or device-specific errors. |
| flexible Read() -> (struct { |
| data vector<uint8>:MAX; |
| }) error zx.Status; |
| |
| /// Perform a write operation. Returns when all bytes have been written, or when an error is |
| /// encountered. |
| /// |
| /// + request `data` the bytes to write to the device. |
| /// * error one of the following values: |
| /// * `ZX_ERR_BAD_STATE`: The device was not enabled. |
| /// * `ZX_ERR_CANCELED`: The call was canceled by `CancelAll()`. |
| /// * `ZX_ERR_ALREADY_BOUND`: Another `Write()` call was already pending. |
| /// * Other values may be returned for driver- or device-specific errors. |
| flexible Write(struct { |
| data vector<uint8>:MAX; |
| }) -> () error zx.Status; |
| |
| /// Immediately cancels all outstanding asynchronous I/O |
| flexible CancelAll() -> (); |
| }; |
| |
| service Service { |
| device client_end:Device; |
| }; |