blob: 94029dcc1c465e46cafd4f4816239e1fdcf6d1ce [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Use the <code>chrome.serial</code> API to read from and write to a device
// connected to a serial port.
namespace serial {
dictionary DeviceInfo {
// The device's system path. This should be passed as the <code>path</code>
// argument to <code>chrome.serial.connect</code> in order to connect to
// this device.
DOMString path;
// A PCI or USB vendor ID if one can be determined for the underlying
// device.
long? vendorId;
// A USB product ID if one can be determined for the underlying device.
long? productId;
// A human-readable display name for the underlying device if one can be
// queried from the host driver.
DOMString? displayName;
};
callback GetDevicesCallback = void (DeviceInfo[] ports);
enum DataBits { seven, eight };
enum ParityBit { no, odd, even };
enum StopBits { one, two };
dictionary ConnectionOptions {
// Flag indicating whether or not the connection should be left open when
// the application is suspended (see
// <a href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App
// Lifecycle</a>). The default value is "false." When the application is
// loaded, any serial connections previously opened with persistent=true
// can be fetched with <code>getConnections</code>.
boolean? persistent;
// An application-defined string to associate with the connection.
DOMString? name;
// The size of the buffer used to receive data. The default value is 4096.
long? bufferSize;
// The requested bitrate of the connection to be opened. For compatibility
// with the widest range of hardware, this number should match one of
// commonly-available bitrates, such as 110, 300, 1200, 2400, 4800, 9600,
// 14400, 19200, 38400, 57600, 115200. There is no guarantee, of course,
// that the device connected to the serial port will support the requested
// bitrate, even if the port itself supports that bitrate. <code>9600</code>
// will be passed by default.
long? bitrate;
// <code>"eight"</code> will be passed by default.
DataBits? dataBits;
// <code>"no"</code> will be passed by default.
ParityBit? parityBit;
// <code>"one"</code> will be passed by default.
StopBits? stopBits;
// Flag indicating whether or not to enable RTS/CTS hardware flow control.
// Defaults to false.
boolean? ctsFlowControl;
// The maximum amount of time (in milliseconds) to wait for new data before
// raising an <code>onReceiveError</code> event with a "timeout" error.
// If zero, receive timeout errors will not be raised for the connection.
// Defaults to 0.
long? receiveTimeout;
// The maximum amount of time (in milliseconds) to wait for a
// <code>send</code> operation to complete before calling the callback with
// a "timeout" error. If zero, send timeout errors will not be triggered.
// Defaults to 0.
long? sendTimeout;
};
// Result of the <code>getInfo</code> method.
dictionary ConnectionInfo {
// The id of the serial port connection.
long connectionId;
// Flag indicating whether the connection is blocked from firing onReceive
// events.
boolean paused;
// See <code>ConnectionOptions.persistent</code>
boolean persistent;
// See <code>ConnectionOptions.name</code>
DOMString name;
// See <code>ConnectionOptions.bufferSize</code>
long bufferSize;
// See <code>ConnectionOptions.receiveTimeout</code>
long receiveTimeout;
// See <code>ConnectionOptions.sendTimeout</code>
long sendTimeout;
// See <code>ConnectionOptions.bitrate</code>. This field may be omitted
// or inaccurate if a non-standard bitrate is in use, or if an error
// occurred while querying the underlying device.
long? bitrate;
// See <code>ConnectionOptions.dataBits</code>. This field may be omitted
// if an error occurred while querying the underlying device.
DataBits? dataBits;
// See <code>ConnectionOptions.parityBit</code>. This field may be omitted
// if an error occurred while querying the underlying device.
ParityBit? parityBit;
// See <code>ConnectionOptions.stopBits</code>. This field may be omitted
// if an error occurred while querying the underlying device.
StopBits? stopBits;
// See <code>ConnectionOptions.ctsFlowControl</code>. This field may be
// omitted if an error occurred while querying the underlying device.
boolean? ctsFlowControl;
};
// Callback from the <code>connect</code> method;
callback ConnectCallback = void (ConnectionInfo connectionInfo);
// Callback from the <code>update</code> method.
callback UpdateCallback = void (boolean result);
// Callback from the <code>disconnect</code> method. Returns true if the
// operation was successful.
callback DisconnectCallback = void (boolean result);
// Callback from the <code>setPaused</code> method.
callback SetPausedCallback = void ();
// Callback from the <code>getInfo</code> method.
callback GetInfoCallback = void (ConnectionInfo connectionInfo);
// Callback from the <code>getConnections</code> method.
callback GetConnectionsCallback = void (ConnectionInfo[] connectionInfos);
enum SendError {
// The connection was disconnected.
disconnected,
// A send was already pending.
pending,
// The send timed out.
timeout,
// A system error occurred and the connection may be unrecoverable.
system_error
};
dictionary SendInfo {
// The number of bytes sent.
long bytesSent;
// An error code if an error occurred.
SendError? error;
};
callback SendCallback = void (SendInfo sendInfo);
callback FlushCallback = void (boolean result);
callback SetBreakCallback = void (boolean result);
callback ClearBreakCallback = void (boolean result);
// The set of control signals which may be sent to a connected serial device
// using <code>setControlSignals</code>. Note that support for these signals
// is device-dependent.
dictionary HostControlSignals {
// DTR (Data Terminal Ready).
boolean? dtr;
// RTS (Request To Send).
boolean? rts;
};
// The set of control signals which may be set by a connected serial device.
// These can be queried using <code>getControlSignals</code>. Note that
// support for these signals is device-dependent.
dictionary DeviceControlSignals {
// DCD (Data Carrier Detect) or RLSD (Receive Line Signal/ Detect).
boolean dcd;
// CTS (Clear To Send).
boolean cts;
// RI (Ring Indicator).
boolean ri;
// DSR (Data Set Ready).
boolean dsr;
};
// Returns a snapshot of current control signals.
callback GetControlSignalsCallback = void (DeviceControlSignals signals);
// Returns true if operation was successful.
callback SetControlSignalsCallback = void (boolean result);
// Data from an <code>onReceive</code> event.
dictionary ReceiveInfo {
// The connection identifier.
long connectionId;
// The data received.
ArrayBuffer data;
};
enum ReceiveError {
// The connection was disconnected.
disconnected,
// No data has been received for <code>receiveTimeout</code> milliseconds.
timeout,
// The device was most likely disconnected from the host.
device_lost,
// The device detected a break condition.
break,
// The device detected a framing error.
frame_error,
// A character-buffer overrun has occurred. The next character is lost.
overrun,
// An input buffer overflow has occurred. There is either no room in the
// input buffer, or a character was received after the end-of-file (EOF)
// character.
buffer_overflow,
// The device detected a parity error.
parity_error,
// A system error occurred and the connection may be unrecoverable.
system_error
};
// Data from an <code>onReceiveError</code> event.
dictionary ReceiveErrorInfo {
// The connection identifier.
long connectionId;
// An error code indicating what went wrong.
ReceiveError error;
};
interface Functions {
// Returns information about available serial devices on the system.
// The list is regenerated each time this method is called.
// |callback| : Called with the list of <code>DeviceInfo</code> objects.
static void getDevices(GetDevicesCallback callback);
// Connects to a given serial port.
// |path| : The system path of the serial port to open.
// |options| : Port configuration options.
// |callback| : Called when the connection has been opened.
static void connect(DOMString path,
optional ConnectionOptions options,
ConnectCallback callback);
// Update the option settings on an open serial port connection.
// |connectionId| : The id of the opened connection.
// |options| : Port configuration options.
// |callback| : Called when the configuation has completed.
static void update(long connectionId,
ConnectionOptions options,
UpdateCallback callback);
// Disconnects from a serial port.
// |connectionId| : The id of the opened connection.
// |callback| : Called when the connection has been closed.
static void disconnect(long connectionId, DisconnectCallback callback);
// Pauses or unpauses an open connection.
// |connectionId| : The id of the opened connection.
// |paused| : Flag to indicate whether to pause or unpause.
// |callback| : Called when the connection has been successfully paused or
// unpaused.
static void setPaused(long connectionId,
boolean paused,
SetPausedCallback callback);
// Retrieves the state of a given connection.
// |connectionId| : The id of the opened connection.
// |callback| : Called with connection state information when available.
static void getInfo(long connectionId, GetInfoCallback callback);
// Retrieves the list of currently opened serial port connections owned by
// the application.
// |callback| : Called with the list of connections when available.
static void getConnections(GetConnectionsCallback callback);
// Writes data to the given connection.
// |connectionId| : The id of the connection.
// |data| : The data to send.
// |callback| : Called when the operation has completed.
static void send(long connectionId,
ArrayBuffer data,
SendCallback callback);
// Flushes all bytes in the given connection's input and output buffers.
static void flush(long connectionId, FlushCallback callback);
// Retrieves the state of control signals on a given connection.
// |connectionId| : The id of the connection.
// |callback| : Called when the control signals are available.
static void getControlSignals(long connectionId,
GetControlSignalsCallback callback);
// Sets the state of control signals on a given connection.
// |connectionId| : The id of the connection.
// |signals| : The set of signal changes to send to the device.
// |callback| : Called once the control signals have been set.
static void setControlSignals(long connectionId,
HostControlSignals signals,
SetControlSignalsCallback callback);
// Suspends character transmission on a given connection and places the
// transmission line in a break state until the clearBreak is called.
// |connectionId| : The id of the connection.
static void setBreak(long connectionId, SetBreakCallback callback);
// Restore character transmission on a given connection and place the
// transmission line in a nonbreak state.
// |connectionId| : The id of the connection.
static void clearBreak(long connectionId, ClearBreakCallback callback);
};
interface Events {
// Event raised when data has been read from the connection.
// |info| : Event data.
static void onReceive(ReceiveInfo info);
// Event raised when an error occurred while the runtime was waiting for
// data on the serial port. Once this event is raised, the connection may be
// set to <code>paused</code>. A <code>"timeout"</code> error does not pause
// the connection.
static void onReceiveError(ReceiveErrorInfo info);
};
};