// 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 chrome.serial 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 path // argument to chrome.serial.connect 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 // Manage App // Lifecycle). The default value is "false." When the application is // loaded, any serial connections previously opened with persistent=true // can be fetched with getConnections. 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. 9600 // will be passed by default. long? bitrate; // "eight" will be passed by default. DataBits? dataBits; // "no" will be passed by default. ParityBit? parityBit; // "one" 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 onReceiveError 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 // send 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 getInfo 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 ConnectionOptions.persistent boolean persistent; // See ConnectionOptions.name DOMString name; // See ConnectionOptions.bufferSize long bufferSize; // See ConnectionOptions.receiveTimeout long receiveTimeout; // See ConnectionOptions.sendTimeout long sendTimeout; // See ConnectionOptions.bitrate. 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 ConnectionOptions.dataBits. This field may be omitted // if an error occurred while querying the underlying device. DataBits? dataBits; // See ConnectionOptions.parityBit. This field may be omitted // if an error occurred while querying the underlying device. ParityBit? parityBit; // See ConnectionOptions.stopBits. This field may be omitted // if an error occurred while querying the underlying device. StopBits? stopBits; // See ConnectionOptions.ctsFlowControl. This field may be // omitted if an error occurred while querying the underlying device. boolean? ctsFlowControl; }; // Callback from the connect method; callback ConnectCallback = void (ConnectionInfo connectionInfo); // Callback from the update method. callback UpdateCallback = void (boolean result); // Callback from the disconnect method. Returns true if the // operation was successful. callback DisconnectCallback = void (boolean result); // Callback from the setPaused method. callback SetPausedCallback = void (); // Callback from the getInfo method. callback GetInfoCallback = void (ConnectionInfo connectionInfo); // Callback from the getConnections 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 setControlSignals. 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 getControlSignals. 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 onReceive 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 receiveTimeout 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 onReceiveError 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 DeviceInfo 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 paused. A "timeout" error does not pause // the connection. static void onReceiveError(ReceiveErrorInfo info); }; };