1

Je suis en train de se connecter à série USB qui fonctionne manuellement comme ci-dessous:Google chrome - connexion chrome.serial échoué

$ ls /dev/cu.* 
/dev/cu.Bluetooth-Incoming-Port /dev/cu.usbserial 
$ screen /dev/cu.usbserial 9600 

Mais quand les applications Google Chrome essayant de connecter son échec.

enter image description here

applications, background.js:

var DEVICE_PATH = '/dev/cu.usbserial'; 
var serial = chrome.serial; 

function log(msg) { 
    console.log(msg); 
} 

var ab2str = function(buf) { 
    var bufView = new Uint8Array(buf); 
    var encodedString = String.fromCharCode.apply(null, bufView); 
    return decodeURIComponent(escape(encodedString)); 
}; 

var str2ab = function(str) { 
    var encodedString = unescape((str)); 
    var bytes = new Uint8Array(1); 
    bytes[0] = parseInt(encodedString); 
    return bytes.buffer; 
}; 

// Object 
var SerialConnection = function() { 
    this.connectionId = -1; 
    this.lineBuffer = ""; 
    this.receiveTimeout =50; 
    this.boundOnReceive = this.onReceive.bind(this); 
    this.boundOnReceiveError = this.onReceiveError.bind(this); 
    this.onConnect = new chrome.Event(); 
    this.onReadLine = new chrome.Event(); 
    this.onError = new chrome.Event(); 
}; 

SerialConnection.prototype.onConnectComplete = function(connectionInfo) { 
    if (!connectionInfo) { 
    log("Connection failed."); 
    return; 
    } 
    this.connectionId = connectionInfo.connectionId; 
    chrome.serial.onReceive.addListener(this.boundOnReceive); 
    chrome.serial.onReceiveError.addListener(this.boundOnReceiveError); 
    this.onConnect.dispatch(); 
}; 

SerialConnection.prototype.onReceive = function(receiveInfo) { 
    if (receiveInfo.connectionId !== this.connectionId) { 
    return; 
    } 

    this.lineBuffer += ab2str(receiveInfo.data); 

    var index; 
    while ((index = this.lineBuffer.indexOf('$')) >= 0) { 
    var line = this.lineBuffer.substr(0, index + 1); 
    this.onReadLine.dispatch(line); 
    this.lineBuffer = this.lineBuffer.substr(index + 1); 
    } 
}; 

SerialConnection.prototype.onReceiveError = function(errorInfo) { 
    log('Error'); 
    if (errorInfo.connectionId === this.connectionId) { 
    log('Error'); 
    this.onError.dispatch(errorInfo.error); 
    log('Error'); 
    } 
    log('Error'); 
}; 

SerialConnection.prototype.connect = function(path) { 
    serial.connect(path, {bitrate: 9600}, this.onConnectComplete.bind(this)); 
}; 

SerialConnection.prototype.send = function(msg) { 
    if (this.connectionId < 0) { 
    throw 'Invalid connection'; 
    } 
    serial.send(this.connectionId, str2ab(msg), function() {}); 
}; 

SerialConnection.prototype.disconnect = function() { 
    if (this.connectionId < 0) { 
    throw 'Invalid connection'; 
    } 
    serial.disconnect(this.connectionId, function() {}); 
}; 

// -- Connect 
var connection = new SerialConnection(); 
connection.onConnect.addListener(function() { 
    log('connected to: ' + DEVICE_PATH); 
}); 

connection.onReadLine.addListener(function(line) { 
    log('read line: ' + line); 
}); 

connection.onError.addListener(function() { 
    log('Error: '); 
}); 
connection.connect(DEVICE_PATH); 
+0

Il existe une API pour interagir avec l'USB. Voir [chrome.usb] (https://developer.chrome.com/apps/usb). «Utilisez l'API chrome.usb pour interagir avec les périphériques USB connectés.Cette API permet d'accéder aux opérations USB à partir du contexte d'une application.Avec cette API, les applications peuvent fonctionner comme des pilotes pour les périphériques matériels.Les erreurs générées par cette API sont signalées par en définissant runtime.lastError et en exécutant le rappel normal de la fonction, les paramètres habituels du callback seront indéfinis dans ce cas. " – gerardnimo

+0

chrome.usb n'est pas destiné au lecteur série. Pouvez-vous vérifier les détails? question était de faire chrome.serial travail pas le chrome.usb. – YumYumYum

+0

est-ce un BUG? chrome.serial ne fonctionne pas toujours la connexion échoue. – YumYumYum

Répondre

0

accès USB sur Mac OS X, a constaté que Chrome ne gagne pas l'accès au périphérique USB jusqu'à ce que l'application client natif (à l'aide de hidapi) est en cours d'exécution et Reconnaître l'appareil.

Utilisez Windows OS avec le même code, puis cela fonctionne.

+0

Je suis confronté au même problème, pouvez-vous élaborer un peu plus? –

+0

https://bugs.chromium.org/p/chromium/issues/detail?id=584599 - S'il vous plaît, tenez le premier rôle de ce numéro dans le suivi des problèmes et signalez que vous avez également le même problème. dans OSX Google Chrome série ne fonctionne pas parce que Google Chrome n'utilise pas l'application client natif (hidapi). Mais la même chose fonctionne sur le système d'exploitation Windows. Vous devez ouvrir les yeux de la communauté Google Chrome que, il échoue avec vous aussi, si vous avez beaucoup de personnes signalant le même problème sur ce lien de suivi de problème. Ensuite, la communauté Google Chrome va le réparer. Donc s'il vous plaît suivre dans l'URL de suivi des problèmes signalés. – YumYumYum