[英]chrome extension - reading from serial port
This is my first attempt at developing with a chrome app or extension. 这是我第一次使用Chrome应用程序或扩展程序进行开发。 I have a GPS receiver on the USB port which is emulated as a serial device.
我在USB端口上有一个GPS接收器,它被模拟为串行设备。
Running this code 运行此代码
var onGetDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
// show me some output
console.log(ports[i].path);
// Connect to the serial port /dev/ttyUSB0
chrome.serial.connect(ports[i].path, {bitrate: 9600}, onConnect);
}
}
chrome.serial.getDevices(onGetDevices);
gets me "/dev/ttyUSB0" in the console, so it appears to be finding the device. 在控制台中给我“/ dev / ttyUSB0”,所以它似乎找到了设备。
How do I then connect to the device? 我如何连接到设备? I've included the serial.connect line above, with the following functions:
我已经在上面包含了serial.connect行,其中包含以下功能:
var onConnect = function(connectionInfo) {
// The serial port has been opened. Save its id to use later.
_this.connectionId = connectionInfo.connectionId;
// Do whatever you need to do with the opened port.
chrome.serial.onReceive.addListener(onReceiveCallback);
}
var stringReceived = '';
var onReceiveCallback = function(info) {
if (info.connectionId == expectedConnectionId && info.data) {
var str = convertArrayBufferToString(info.data);
if (str.charAt(str.length-1) === '\n') {
stringReceived += str.substring(0, str.length-1);
onLineReceived(stringReceived);
stringReceived = '';
}
else {
stringReceived += str;
}
}
};
but I get the following error: 但是我收到以下错误:
Error in response to serial.connect: ReferenceError: _this is not defined at Object.onGetDevices [as callback]
响应serial.connect时出错:ReferenceError:_this没有在Object.onGetDevices中定义[作为回调]
I'm not sure exactly what I'm doing right or wrong here so any pointers appreciated. 我不确定我在这里做的是对还是错,所以任何指针都赞赏。
First the example does not work properly. 首先,该示例无法正常工作。 Try this instead:
试试这个:
var connectionId;
$(document).ready(function() {
chrome.serial.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
$('select#portList').append('<option value="' + devices[i].path + '">' + devices[i].path + '</option>');
}
});
// ui hook
$('button#open').click(function() {
var clicks = $(this).data('clicks');
if (!clicks) {
var port = $('select#portList').val();
chrome.serial.connect(port, {bitrate: 9600}, function(info) {
connectionId = info.connectionId;
$("button#open").html("Close Port");
console.log('Connection opened with id: ' + connectionId + ', Bitrate: ' + info.bitrate);
});
} else {
chrome.serial.disconnect(connectionId, function(result) {
$("button#open").html("Open Port");
console.log('Connection with id: ' + connectionId + ' closed');
});
}
$(this).data("clicks", !clicks);
});
});
Now as for the actual reading of the input from the serial connection it will work but converting the ArrayBuffer to a string is a bit harder than expected. 现在,对于从串行连接实际读取输入,它将起作用,但将ArrayBuffer转换为字符串比预期的要困难一些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.