blob: 7354f680fa4dafd2afe748bfab173bafa30a6f7a [file] [log] [blame]
// Copyright 2019 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.serial;
using zx;
/// Description of what type of serial device this is
enum Class : uint8 {
GENERIC = 1;
/// A Bluetooth host controller
BLUETOOTH_HCI = 2;
/// An interactive console
CONSOLE = 3;
};
/// Number of bits per character
enum CharacterWidth : uint8 {
BITS_5 = 1;
BITS_6 = 2;
BITS_7 = 3;
BITS_8 = 4;
};
/// Number of stop bits
enum StopWidth : uint8 {
BITS_1 = 1;
BITS_2 = 2;
};
/// Which parity computation to use, if any.
enum Parity : uint8 {
NONE = 1;
EVEN = 2;
ODD = 3;
};
/// What flow control mechanism to use
enum FlowControl : uint8 {
NONE = 1;
/// Clear To Send/Request To Send
CTS_RTS = 2;
};
struct Config {
CharacterWidth character_width;
StopWidth stop_width;
Parity parity;
FlowControl control_flow;
uint32 baud_rate;
};
/// Legacy synchronous device interface.
/// New drivers should implement NewDevice instead.
[FragileBase]
protocol Device {
/// Lookup what type of serial device this is.
GetClass() -> (Class device_class);
/// Set the configuration of this serial device.
SetConfig(Config config) -> (zx.status s);
};
/// FIDL device utilizing the new asynchronous serial driver
/// instead of the synchronous FDIO-backed read/write interface.
/// New drivers should implement this instead of the Device interface above.
protocol NewDevice {
compose Device;
/// Reads data from the serial port
Read() -> (vector<uint8>:MAX data) error zx.status;
/// Writes data to the serial port
Write(vector<uint8>:MAX data) -> () error zx.status;
};
protocol NewDeviceProxy {
GetChannel(request<NewDevice> req);
};