Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
cordova-plugin-usbserialport
Advanced tools
此插件是基于cordovarduino基础上,升级了usb-serial-for-android库后增加了相应的方法,目前可以很好的适用于常见的一些USB/Type-C转串口的串口硬件。使用此插件,可以在android手机上直接使用USB或Type-C接口的USB转458/232等串口。
此插件仅适用于Android
此 Cordova/Phonegap 插件允许使用 USB On-The-Go (OTG) 从您的 Android 设备到您的串口板或其他USB供电的串行IO设备进行双向串行通信。
这意味着您可以使用 cordova-plugin-usbserialport 插件开发关于串口收发数据的Android应用
cordova项目运行:
cordova plugin add cordova-plugin-usbserialport
# 或
cordova plugin add https://github.com/king2088/cordova-plugin-usbserialport.git
您首先需要了解如何创建和上传一个简单的 Cordova 项目。 这里有一些关于 如何开始 在 Android 上使用 Cordova 的信息,这里是一个 简单的 Cordova plugin 可以用来熟悉插件系统。
使用方法:
android权限的原因,需要首先请求USB权限,使用以下代码请求权限:
usbSerialPort.requestPermission(function success(), function error());
获取设备信息(可选):
usbSerialPort.getDevice(function success(), function error());
获取串口打开状态(可选):
usbSerialPort.isOpen(function success(), function error());
其次,打开串口:
usbSerialPort.open(opts, function success(), function error());
opts
是JSON对象,包含如下属性:
再次,写入和读取串口数据:
usbSerialPort.write(data, function success(), function error());
usbSerialPort.read(function success(buffer), function error());
data
是要写入串行端口的字符串表示形式。
buffer
读取的数据为 JavaScript ArrayBuffer。
除了使用usbSerialPort.write
,您还可以使用usbSerialPort.writeHex
来发送hex-strings 并使用RS232 协议 驱动的硬件。
简而言之,usbSerialPort.writeHex('ff')
只会写入一个字节,而 usbSerialPort.write('ff')
会写入2个到串行端口。
除此之外,usbSerialPort.writeHex
的工作方式与 usbSerialPort.write
的工作方式相同。
然后,需要使用 usbSerialPort.readListener
监听串口数据返回。返回的数据为ArrayBuffer,可参考如下代码:
usbSerialPort.readListener(
function success(data){
var view = new Uint8Array(data);
console.log(view);
},
function error(){
new Error("Failed to register read callback");
});
最后,关闭串口:
usbSerialPort.close(function success(), function error())
var errorCallback = function(message) {
alert('Error: ' + message);
};
usbSerialPort.requestPermission(
function(successMessage) {
usbSerialPort.open(
{baudRate: 9600},
function(successMessage) {
usbSerialPort.write(
'1',
function(successMessage) {
alert(successMessage);
},
errorCallback
);
},
errorCallback
);
},
errorCallback
);
创建 index.html
:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css" href="css/index.css">
<title>串口操作</title>
</head>
<body>
<div class="app">
<h1>串口操作</h1>
<p>值 <span id="pot">...</span></p>
<p id="delta">...</p>
<button id="on">写入1</button>
<button id="off">写入0</button>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
创建 index.js
:
var app = {
initialize: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
var potText = document.getElementById('pot');
var delta = document.getElementById('delta');
var on = document.getElementById('on');
var off = document.getElementById('off');
var str = '';
var lastRead = new Date();
var errorCallback = function(message) {
alert('Error: ' + message);
};
// 首先请求USB权限
usbSerialPort.requestPermission(
// 如果用户授权
function(successMessage) {
// 打开串口
usbSerialPort.open(
{baudRate: 9600},
// 如果串口成功打开
function(successMessage) {
// 监听串口
usbSerialPort.readListener(
function success(data){
// 解码返回的数据
var view = new Uint8Array(data);
if(view.length >= 1) {
for(var i=0; i < view.length; i++) {
// 如果我们收到一个\n,则消息完成,显示它
if(view[i] == 13) {
// 检查读取速率是否对应于串行打印速率
var now = new Date();
delta.innerText = now - lastRead;
lastRead = now;
// 显示消息
var value = parseInt(str);
pot.innerText = value;
str = '';
}
// 如果不是\n,则将所有消息累加
else {
var temp_str = String.fromCharCode(view[i]);
var str_esc = escape(temp_str);
str += unescape(str_esc);
}
}
}
},
// 监听错误信息
errorCallback
);
},
// 打开串口错误信息
errorCallback
);
},
// 未授权错误
errorCallback
);
on.onclick = function() {
usbSerialPort.isOpen(opened => {
if(opened) {
usbSerialPort.write('1');
}
}, err => {
console.log(`发生错误:${err}`)
})
};
off.onclick = function() {
usbSerialPort.isOpen(opened => {
if(opened) {
usbSerialPort.write('0');
}
}, err => {
console.log(`发生错误:${err}`)
})
}
}
};
app.initialize();
感谢 usb-serial-for-android 库,您可以与 CDC、FTDI、Serial 等设备进行通信。
您的设备可能未在 https://github.com/mik3y/usb-serial-for-android 中列出。
如果您知道您的设备 VID(供应商 ID)和 PID(产品 ID),您可以尝试
usbSerialPort.requestPermission({vid: '1d50', pid: '607d'}, function success(), function error()); // 16进制
or
usbSerialPort.requestPermission({vid: 7504, pid: 24701}, function success(), function error()); // 整数
您还可以选择要使用的驱动程序。 选项是:
CdcAcmSerialDriver
Ch34xSerialDriver
Cp21xxSerialDriver
FtdiSerialDriver
ProlificSerialDriver
如果为空或不是其中之一,则默认为“CdcAcmSerialDriver”。
usbSerialPort.requestPermission({
vid: '1d50',
pid: '607d',
driver: 'FtdiSerialDriver' // or any other
},
function success(),
function error()
);
您可以使用“lsusb”(以十六进制返回 VID:PID)或查看您的 dmesg 日志在android上找到您的设备 VID 和 PID。
FAQs
Cordova plug-in for serial port
We found that cordova-plugin-usbserialport demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.