1

Я пытаюсь подключиться к USB-последовательный, который работает вручную, как показано ниже:Google хром - chrome.serial соединение не удалось

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

Но когда Google Chrome приложения пытаются подключиться его упущение.

enter image description here

приложения, 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

Существует API для взаимодействия с USB. См. [Chrome.usb] (https://developer.chrome.com/apps/usb). «Используйте API-интерфейс chrome.usb для взаимодействия с подключенными USB-устройствами. Этот API обеспечивает доступ к USB-операциям из контекста приложения. Используя этот API, приложения могут работать как драйверы для аппаратных устройств. Ошибки, сгенерированные этим API, сообщаются установка runtime.lastError и выполнение регулярного обратного вызова функции. Регулярные параметры обратного вызова в этом случае не будут определены ». – gerardnimo

+0

chrome.usb не предназначен для последовательного считывателя. можете ли вы проверить подробности? вопрос заключался в том, чтобы сделать chrome.serial работу не chrome.usb. – YumYumYum

+0

это БУГ? chrome.serial не работает, всегда соединение терпит неудачу. – YumYumYum

ответ

0

доступа USB на OSX, обнаружил, что Chrome не не получает доступ к устройству USB, пока родное приложение клиента (с помощью hidapi) работает и узнайте устройство.

Используйте ОС Windows с тем же кодом, что и работает.

+0

Я столкнулся с той же проблемой, что вы можете уточнить? –

+0

https://bugs.chromium.org/p/chromium/issues/detail?id=584599 - пожалуйста, запустите эту проблему в журнале отслеживания проблем и сообщите, что та же проблема у вас также есть. в OSX Сериал Google Chrome не работает, потому что Google Chrome не использует собственное клиентское приложение (hidapi). Но то же самое работает и в операционной системе Windows. Вы должны открыть глаза сообществам Google Chrome, которые тоже не работают с вами, если у вас есть много людей, сообщающих о той же проблеме на этой ссылке для отслеживания проблемы. Тогда сообщество Google Chrome исправит это. Поэтому, пожалуйста, проследите за сообщением о проблеме отслеживания проблем. – YumYumYum