|  | // 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. | 
|  |  | 
|  | /** | 
|  | * @fileoverview Interface for representing a low-level gnubby device. | 
|  | */ | 
|  | 'use strict'; | 
|  |  | 
|  | /** | 
|  | * Low level gnubby 'driver'. One per physical USB device. | 
|  | * @interface | 
|  | */ | 
|  | function GnubbyDevice() {} | 
|  |  | 
|  | // Commands of the USB interface. | 
|  | /** Echo data through local processor only */ | 
|  | GnubbyDevice.CMD_PING = 0x81; | 
|  | /** Perform reset action and read ATR string */ | 
|  | GnubbyDevice.CMD_ATR = 0x82; | 
|  | /** Send raw APDU */ | 
|  | GnubbyDevice.CMD_APDU = 0x83; | 
|  | /** Send lock channel command */ | 
|  | GnubbyDevice.CMD_LOCK = 0x84; | 
|  | /** Obtain system information record */ | 
|  | GnubbyDevice.CMD_SYSINFO = 0x85; | 
|  | /** Obtain an unused channel ID */ | 
|  | GnubbyDevice.CMD_INIT = 0x86; | 
|  | /** Control prompt flashing */ | 
|  | GnubbyDevice.CMD_PROMPT = 0x87; | 
|  | /** Send device identification wink */ | 
|  | GnubbyDevice.CMD_WINK = 0x88; | 
|  | /** USB test */ | 
|  | GnubbyDevice.CMD_USB_TEST = 0xb9; | 
|  | /** Device Firmware Upgrade */ | 
|  | GnubbyDevice.CMD_DFU = 0xba; | 
|  | /** Protocol resync command */ | 
|  | GnubbyDevice.CMD_SYNC = 0xbc; | 
|  | /** Error response */ | 
|  | GnubbyDevice.CMD_ERROR = 0xbf; | 
|  |  | 
|  | // Low-level error codes. | 
|  | /** No error */ | 
|  | GnubbyDevice.OK = 0; | 
|  | /** Invalid command */ | 
|  | GnubbyDevice.INVALID_CMD = 1; | 
|  | /** Invalid parameter */ | 
|  | GnubbyDevice.INVALID_PAR = 2; | 
|  | /** Invalid message length */ | 
|  | GnubbyDevice.INVALID_LEN = 3; | 
|  | /** Invalid message sequencing */ | 
|  | GnubbyDevice.INVALID_SEQ = 4; | 
|  | /** Message has timed out */ | 
|  | GnubbyDevice.TIMEOUT = 5; | 
|  | /** Channel is busy */ | 
|  | GnubbyDevice.BUSY = 6; | 
|  | /** Access denied */ | 
|  | GnubbyDevice.ACCESS_DENIED = 7; | 
|  | /** Device is gone */ | 
|  | GnubbyDevice.GONE = 8; | 
|  | /** Verification error */ | 
|  | GnubbyDevice.VERIFY_ERROR = 9; | 
|  | /** Command requires channel lock */ | 
|  | GnubbyDevice.LOCK_REQUIRED = 10; | 
|  | /** Sync error */ | 
|  | GnubbyDevice.SYNC_FAIL = 11; | 
|  | /** Other unspecified error */ | 
|  | GnubbyDevice.OTHER = 127; | 
|  |  | 
|  | // Remote helper errors. | 
|  | /** Not a remote helper */ | 
|  | GnubbyDevice.NOTREMOTE = 263; | 
|  | /** Could not reach remote endpoint */ | 
|  | GnubbyDevice.COULDNOTDIAL = 264; | 
|  |  | 
|  | // chrome.usb-related errors. | 
|  | /** No device */ | 
|  | GnubbyDevice.NODEVICE = 512; | 
|  | /** More than one device */ | 
|  | GnubbyDevice.TOOMANY = 513; | 
|  | /** Permission denied */ | 
|  | GnubbyDevice.NOPERMISSION = 666; | 
|  |  | 
|  | /** Destroys this low-level device instance. */ | 
|  | GnubbyDevice.prototype.destroy = function() {}; | 
|  |  | 
|  | /** | 
|  | * Register a client for this gnubby. | 
|  | * @param {*} who The client. | 
|  | */ | 
|  | GnubbyDevice.prototype.registerClient = function(who) {}; | 
|  |  | 
|  | /** | 
|  | * De-register a client. | 
|  | * @param {*} who The client. | 
|  | * @return {number} The number of remaining listeners for this device, or -1 | 
|  | *     if this had no clients to start with. | 
|  | */ | 
|  | GnubbyDevice.prototype.deregisterClient = function(who) {}; | 
|  |  | 
|  | /** | 
|  | * @param {*} who The client. | 
|  | * @return {boolean} Whether this device has who as a client. | 
|  | */ | 
|  | GnubbyDevice.prototype.hasClient = function(who) {}; | 
|  |  | 
|  | /** | 
|  | * Queue command to be sent. | 
|  | * If queue was empty, initiate the write. | 
|  | * @param {number} cid The client's channel ID. | 
|  | * @param {number} cmd The command to send. | 
|  | * @param {ArrayBuffer|Uint8Array} data Command data | 
|  | */ | 
|  | GnubbyDevice.prototype.queueCommand = function(cid, cmd, data) {}; | 
|  |  | 
|  | /** | 
|  | * @typedef {{ | 
|  | *   vendorId: number, | 
|  | *   productId: number | 
|  | * }} | 
|  | */ | 
|  | var UsbDeviceSpec; |