1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Use the <code>chrome.serial</code> API to read from and write to a device 6 // connected to a serial port. 7 namespace serial { 8 9 dictionary DeviceInfo { 10 // The device's system path. This should be passed as the <code>path</code> 11 // argument to <code>chrome.serial.connect</code> in order to connect to 12 // this device. 13 DOMString path; 14 }; 15 16 callback GetDevicesCallback = void (DeviceInfo[] ports); 17 18 enum DataBits { seven, eight }; 19 enum ParityBit { no, odd, even }; 20 enum StopBits { one, two }; 21 22 dictionary ConnectionOptions { 23 // Flag indicating whether or not the connection should be left open when 24 // the application is suspended (see 25 // <a href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App 26 // Lifecycle</a>). The default value is "false." When the application is 27 // loaded, any serial connections previously opened with persistent=true 28 // can be fetched with <code>getConnections</code>. 29 boolean? persistent; 30 31 // An application-defined string to associate with the connection. 32 DOMString? name; 33 34 // The size of the buffer used to receive data. The default value is 4096. 35 long? bufferSize; 36 37 // The requested bitrate of the connection to be opened. For compatibility 38 // with the widest range of hardware, this number should match one of 39 // commonly-available bitrates, such as 110, 300, 1200, 2400, 4800, 9600, 40 // 14400, 19200, 38400, 57600, 115200. There is no guarantee, of course, 41 // that the device connected to the serial port will support the requested 42 // bitrate, even if the port itself supports that bitrate. <code>9600</code> 43 // will be passed by default. 44 long? bitrate; 45 46 // <code>"eight"</code> will be passed by default. 47 DataBits? dataBits; 48 49 // <code>"no"</code> will be passed by default. 50 ParityBit? parityBit; 51 52 // <code>"one"</code> will be passed by default. 53 StopBits? stopBits; 54 55 // Flag indicating whether or not to enable RTS/CTS hardware flow control. 56 // Defaults to false. 57 boolean? ctsFlowControl; 58 59 // The maximum amount of time (in milliseconds) to wait for new data before 60 // raising an <code>onReceiveError</code> event with a "timeout" error. 61 // If zero, receive timeout errors will not be raised for the connection. 62 // Defaults to 0. 63 long? receiveTimeout; 64 65 // The maximum amount of time (in milliseconds) to wait for a 66 // <code>send</code> operation to complete before calling the callback with 67 // a "timeout" error. If zero, send timeout errors will not be triggered. 68 // Defaults to 0. 69 long? sendTimeout; 70 }; 71 72 // Result of the <code>getInfo</code> method. 73 dictionary ConnectionInfo { 74 // The id of the serial port connection. 75 long connectionId; 76 77 // Flag indicating whether the connection is blocked from firing onReceive 78 // events. 79 boolean paused; 80 81 // See <code>ConnectionOptions.persistent</code> 82 boolean persistent; 83 84 // See <code>ConnectionOptions.name</code> 85 DOMString name; 86 87 // See <code>ConnectionOptions.bufferSize</code> 88 long bufferSize; 89 90 // See <code>ConnectionOptions.receiveTimeout</code> 91 long receiveTimeout; 92 93 // See <code>ConnectionOptions.sendTimeout</code> 94 long sendTimeout; 95 96 // See <code>ConnectionOptions.bitrate</code>. This field may be omitted 97 // or inaccurate if a non-standard bitrate is in use, or if an error 98 // occurred while querying the underlying device. 99 long? bitrate; 100 101 // See <code>ConnectionOptions.dataBits</code>. This field may be omitted 102 // if an error occurred while querying the underlying device. 103 DataBits? dataBits; 104 105 // See <code>ConnectionOptions.parityBit</code>. This field may be omitted 106 // if an error occurred while querying the underlying device. 107 ParityBit? parityBit; 108 109 // See <code>ConnectionOptions.stopBits</code>. This field may be omitted 110 // if an error occurred while querying the underlying device. 111 StopBits? stopBits; 112 113 // See <code>ConnectionOptions.ctsFlowControl</code>. This field may be 114 // omitted if an error occurred while querying the underlying device. 115 boolean? ctsFlowControl; 116 }; 117 118 // Callback from the <code>connect</code> method; 119 callback ConnectCallback = void (ConnectionInfo connectionInfo); 120 121 // Callback from the <code>update</code> method. 122 callback UpdateCallback = void (boolean result); 123 124 // Callback from the <code>disconnect</code> method. Returns true if the 125 // operation was successful. 126 callback DisconnectCallback = void (boolean result); 127 128 // Callback from the <code>setPaused</code> method. 129 callback SetPausedCallback = void (); 130 131 // Callback from the <code>getInfo</code> method. 132 callback GetInfoCallback = void (ConnectionInfo connectionInfo); 133 134 // Callback from the <code>getConnections</code> method. 135 callback GetConnectionsCallback = void (ConnectionInfo[] connectionInfos); 136 137 enum SendError { 138 // The connection was disconnected. 139 disconnected, 140 141 // A send was already pending. 142 pending, 143 144 // The send timed out. 145 timeout, 146 147 // A system error occurred and the connection may be unrecoverable. 148 system_error 149 }; 150 151 dictionary SendInfo { 152 // The number of bytes sent. 153 long bytesSent; 154 155 // An error code if an error occurred. 156 SendError? error; 157 }; 158 159 callback SendCallback = void (SendInfo sendInfo); 160 161 callback FlushCallback = void (boolean result); 162 163 // The set of control signals which may be sent to a connected serial device 164 // using <code>setControlSignals</code>. Note that support for these signals 165 // is device-dependent. 166 dictionary HostControlSignals { 167 // DTR (Data Terminal Ready). 168 boolean? dtr; 169 170 // RTS (Request To Send). 171 boolean? rts; 172 }; 173 174 // The set of control signals which may be set by a connected serial device. 175 // These can be queried using <code>getControlSignals</code>. Note that 176 // support for these signals is device-dependent. 177 dictionary DeviceControlSignals { 178 // DCD (Data Carrier Detect) or RLSD (Receive Line Signal/ Detect). 179 boolean dcd; 180 181 // CTS (Clear To Send). 182 boolean cts; 183 184 // RI (Ring Indicator). 185 boolean ri; 186 187 // DSR (Data Set Ready). 188 boolean dsr; 189 }; 190 191 // Returns a snapshot of current control signals. 192 callback GetControlSignalsCallback = void (DeviceControlSignals signals); 193 194 // Returns true if operation was successful. 195 callback SetControlSignalsCallback = void (boolean result); 196 197 // Data from an <code>onReceive</code> event. 198 dictionary ReceiveInfo { 199 // The connection identifier. 200 long connectionId; 201 202 // The data received. 203 ArrayBuffer data; 204 }; 205 206 enum ReceiveError { 207 // The connection was disconnected. 208 disconnected, 209 210 // No data has been received for <code>receiveTimeout</code> milliseconds. 211 timeout, 212 213 // The device was most likely disconnected from the host. 214 device_lost, 215 216 // A system error occurred and the connection may be unrecoverable. 217 system_error 218 }; 219 220 // Data from an <code>onReceiveError</code> event. 221 dictionary ReceiveErrorInfo { 222 // The connection identifier. 223 long connectionId; 224 225 // An error code indicating what went wrong. 226 ReceiveError error; 227 }; 228 229 interface Functions { 230 // Returns information about available serial devices on the system. 231 // The list is regenerated each time this method is called. 232 // |callback| : Called with the list of <code>DeviceInfo</code> objects. 233 static void getDevices(GetDevicesCallback callback); 234 235 // Connects to a given serial port. 236 // |path| : The system path of the serial port to open. 237 // |options| : Port configuration options. 238 // |callback| : Called when the connection has been opened. 239 static void connect(DOMString path, 240 optional ConnectionOptions options, 241 ConnectCallback callback); 242 243 // Update the option settings on an open serial port connection. 244 // |connectionId| : The id of the opened connection. 245 // |options| : Port configuration options. 246 // |callback| : Called when the configuation has completed. 247 static void update(long connectionId, 248 ConnectionOptions options, 249 UpdateCallback callback); 250 251 // Disconnects from a serial port. 252 // |connectionId| : The id of the opened connection. 253 // |callback| : Called when the connection has been closed. 254 static void disconnect(long connectionId, DisconnectCallback callback); 255 256 // Pauses or unpauses an open connection. 257 // |connectionId| : The id of the opened connection. 258 // |paused| : Flag to indicate whether to pause or unpause. 259 // |callback| : Called when the connection has been successfully paused or 260 // unpaused. 261 static void setPaused(long connectionId, 262 boolean paused, 263 SetPausedCallback callback); 264 265 // Retrieves the state of a given connection. 266 // |connectionId| : The id of the opened connection. 267 // |callback| : Called with connection state information when available. 268 static void getInfo(long connectionId, GetInfoCallback callback); 269 270 // Retrieves the list of currently opened serial port connections owned by 271 // the application. 272 // |callback| : Called with the list of connections when available. 273 static void getConnections(GetConnectionsCallback callback); 274 275 // Writes data to the given connection. 276 // |connectionId| : The id of the connection. 277 // |data| : The data to send. 278 // |callback| : Called when the operation has completed. 279 static void send(long connectionId, 280 ArrayBuffer data, 281 SendCallback callback); 282 283 // Flushes all bytes in the given connection's input and output buffers. 284 static void flush(long connectionId, FlushCallback callback); 285 286 // Retrieves the state of control signals on a given connection. 287 // |connectionId| : The id of the connection. 288 // |callback| : Called when the control signals are available. 289 static void getControlSignals(long connectionId, 290 GetControlSignalsCallback callback); 291 292 // Sets the state of control signals on a given connection. 293 // |connectionId| : The id of the connection. 294 // |signals| : The set of signal changes to send to the device. 295 // |callback| : Called once the control signals have been set. 296 static void setControlSignals(long connectionId, 297 HostControlSignals signals, 298 SetControlSignalsCallback callback); 299 }; 300 301 interface Events { 302 // Event raised when data has been read from the connection. 303 // |info| : Event data. 304 static void onReceive(ReceiveInfo info); 305 306 // Event raised when an error occurred while the runtime was waiting for 307 // data on the serial port. Once this event is raised, the connection may be 308 // set to <code>paused</code>. A <code>"timeout"</code> error does not pause 309 // the connection. 310 static void onReceiveError(ReceiveErrorInfo info); 311 }; 312 }; 313