网站首页 > 博客文章 正文
Android如何监听USB插拔
https://blog.csdn.net/u011630465/article/details/86525857?spm=1001.2014.3001.5501
macOS下的串口调试助手——CoolTerm的使用
全网独一无二的USB、USB转串口二合一通信SDK
https://blog.csdn.net/u011630465/article/details/124604344?spm=1001.2014.3001.5501
USB通信使用系统api,USB转串口通信使用第三方库: usb-serial-for-android,
(https://github.com/mik3y/usb-serial-for-android)
串口通信使用Google官方库: android-serialport-api。
(https://github.com/cepr/android-serialport-api)
一、USB通信
1.1 查找USB设备(2选1)
1.1.1 获取已连接USB设备
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
1.1.2 监听USB设备插拔
1注册广播
public void registerReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
mUsbReceiver = new USBReceiver();
mContext.registerReceiver(mUsbReceiver, filter);
}
2、广播接收
private class USBReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 这里可以拿到插入的USB设备对象
UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
switch (intent.getAction()) {
case UsbManager.ACTION_USB_DEVICE_ATTACHED: // 插入USB设备
break;
case UsbManager.ACTION_USB_DEVICE_DETACHED: // 拔出USB设备
break;
default:
break;
}
}
}
3、释放监听
public void unregisterReceiver() {
mContext.unregisterReceiver(mUsbReceiver);
}
1.2 USB设备授权
// 判断usb设备是否有权限
manager.hasPermission(mUsbDevice)
// 为usb设备申请权限
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_DEVICE_PERMISSION), 0);
manager.requestPermission(mUsbDevice, pendingIntent)
1.3 打开USB设备
UsbDeviceConnection mConnection= manager.openDevice(mUsbDevice);
1.4 找到通信接口和节点
一般只有一个UsbInterface(也可能存在多个),每个UsbInterface下又有多个UsbEndpoint,找到对应的读写数据节点。
UsbInterface dataIface = mDevice.getInterface(0);
for (int i = 0; i < dataIface.getEndpointCount(); i++) {
UsbEndpoint endpoint = dataIface.getEndpoint(i);
if (endpoint.getDirection() == UsbConstants.USB_DIR_IN) {
mReadEndpoint = endpoint;
}
if (endpoint.getDirection() == UsbConstants.USB_DIR_OUT) {
mWriteEndpoint = endpoint;
}
}
1.5 开始通信
1.5.1 写数据
mConnection.bulkTransfer(mWriteEndpoint, bytes, bytes.length, timeout);
1.5.2 读数据
mConnection.bulkTransfer(mReadEndpoint, bytes, bytes.length, timeout);
二、USB转串口通信
USB转串口通信使用第三方库https://github.com/mik3y/usb-serial-for-android,底层实际也是使用系统USB通信api,在系统api的基础上增加串口驱动封装。
1.1-1.3(与USB通信流程一致)
1.4 检查驱动
驱动类型由串口芯片决定,驱动本质也只是调用系统usb写数据api完成一系列初始化操作。
UsbSerialDriver driver = UsbSerialProber.getDefaultProber().probeDevice(usbDevice);
1.5 打开串口,设置相关参数
UsbSerialPort mUsbSerialPort = driver.getPorts().get(mPort);
mUsbSerialPort.open(mConnection);
mUsbSerialPort.setParameters(mBaudRate, mDataBits, mStopBits, mParity);
1.6 开始通信
1.6.1 写数据
mUsbSerialPort.write(bytes, TIMEOUT);
1.6.2 读数据
mUsbSerialPort.read(bytes, TIMEOUT);
三、串口通信
串口通信使用google官方sdk:https://github.com/cepr/android-serialport-api
SerialPort mSerialPort = new SerialPort(new File("/dev/ttyUSB0"), 9600, 0);
// 读
InputStream inputStream = mSerialPort.getInputStream();
inputStream.read(buffer);
// 写
OutputStream outputStream = mSerialPort.getOutputStream();
out.write(bytes);
猜你喜欢
- 2024-10-25 388.C#使用RJCP.DLL.SerialPortStream进行串口通信
- 2024-10-25 嵌入式入门级学习——基于国产平台T3开发板的测试教程(6)
- 2024-10-25 H3C交换机通过MAC地址定位设备所在交换机端口步骤
- 2024-10-25 干货!PS端裸机与FreeRTOS案例开发之裸机lwIP_Demo案例
- 2024-10-25 Python读取Arduino的串口输出的数据?
- 2024-10-25 做网络那么多年,连以太网接口和串口都分不清?本文值得一看!
- 2024-10-25 QT中级(7)- 串口工具(qt串口类编程)
- 2024-10-25 MAC 10.14 安装教程-制作安装EFI文件
- 2024-10-25 FT232串口线和普通串口线有何区别?
- 2024-10-25 TI Sitara系列 AM64x开发板——TSN通信测试手册(上)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)