blob: beae119d1592c9280b6af02455cb026cc48c2321 [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
type Class = strict enum : uint8 {
GENERIC = 1;
/// A Bluetooth host controller
BLUETOOTH_HCI = 2;
/// An interactive console
CONSOLE = 3;
/// Kernel debug serial
KERNEL_DEBUG = 4;
};
/// Number of bits per character
type CharacterWidth = strict enum : uint8 {
BITS_5 = 1;
BITS_6 = 2;
BITS_7 = 3;
BITS_8 = 4;
};
/// Number of stop bits
type StopWidth = strict enum : uint8 {
BITS_1 = 1;
BITS_2 = 2;
};
/// Which parity computation to use, if any.
type Parity = strict enum : uint8 {
NONE = 1;
EVEN = 2;
ODD = 3;
};
/// What flow control mechanism to use
type FlowControl = strict enum : uint8 {
NONE = 1;
/// Clear To Send/Request To Send
CTS_RTS = 2;
};
type Config = struct {
character_width CharacterWidth;
stop_width StopWidth;
parity Parity;
control_flow FlowControl;
baud_rate uint32;
};
/// Legacy synchronous device interface.
/// New drivers should implement NewDevice instead.
protocol Device {
/// Lookup what type of serial device this is.
GetClass() -> (struct {
device_class Class;
});
/// Set the configuration of this serial device.
SetConfig(struct {
config Config;
}) -> (struct {
s zx.status;
});
};
/// 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() -> (struct {
data vector<uint8>:MAX;
}) error zx.status;
/// Writes data to the serial port
Write(struct {
data vector<uint8>:MAX;
}) -> (struct {}) error zx.status;
};
@discoverable
protocol NewDeviceProxy {
GetChannel(resource struct {
req server_end:NewDevice;
});
};