)
前言如果你开发的App需要与硬件做通讯获取相应数据进行业务处理这个库肯定对你有帮助。常见的硬件通讯连接方式有串口通讯、Usb Com、Usb、蓝牙包括BLE、Wifi等实际硬件支持哪种连接方式要看硬件支持哪种方式。应用层硬件通讯方案有两种硬件供应商有提供SDK,不需要关注连接通讯实现直接集成到App中使用即可硬件供应商没有提供SDK单提供有通讯协议这时候自己需要分析协议流程和写通讯代码本文针对第二点封装了一个基础的、轻量级的通讯库支持多种连接方式串口通讯、Usb Com、Usb、蓝牙包括BLE、Wifi通讯流程为1. 初始化连接实例2. 打开连接3. 读写数据4. 关闭连接通讯库特点上层调用一致底层不同实现方便使用者切换连接方式。为简化上层调用和方便数据处理全部连接采用同步操作即一发一收一问一答的方式通讯调用1.初始化实例//串口 BaseConnectProvider baseConnectProvider new SerialPortConnectProvider(SerialPortConfig serialPortConfig); //Usb Com BaseConnectProvider baseConnectProvider new UsbComConnectProvider(int vendorId, int productId, SerialPortConfig serialPortConfig); //or BaseConnectProvider baseConnectProvider new UsbComConnectProvider(UsbDevice usbDevice, SerialPortConfig serialPortConfig); //Usb BaseConnectProvider baseConnectProvider new UsbConnectProvider(int vendorId, int productId); //or BaseConnectProvider baseConnectProvider new UsbConnectProvider(UsbDevice usbDevice); //默认蓝牙 Com BaseConnectProvider baseConnectProvider new BluetoothConnectProvider(BluetoothDevice bluetoothDevice); BaseConnectProvider baseConnectProvider new BluetoothConnectProvider(String address); //指定蓝牙服务UUID BaseConnectProvider baseConnectProvider new BluetoothConnectProvider(BluetoothDevice bluetoothDevice, String uuid); BaseConnectProvider baseConnectProvider new BluetoothConnectProvider(String address, String uuid); //Wifi BaseConnectProvider baseConnectProvider new WifiConnectProvider(String host, int port, int connectTimeout, int readTimeout); //特别地蓝牙Ble BluetoothLeConnectProvider connectProvider new BluetoothLeConnectProvider(BluetoothDevice bluetoothDevice); BluetoothLeConnectProvider connectProvider new BluetoothLeConnectProvider(String address);2.打开连接baseConnectProvider.open();3.写和读数据baseConnectProvider.read(byte[] sendParams, byte[] buffer, int timeout);3.1 蓝牙Ble通讯蓝牙Ble,与其它连接方式不好统一故做特殊处理//特征写请求,其它请求创建不同的实例发送即可 CharacteristicWriteRequest bluetoothLeRequest new CharacteristicWriteRequest(); bluetoothLeRequest.setService(UUID_SERVICE); bluetoothLeRequest.setCharacter(UUID_CHARACTER_WRITE); bluetoothLeRequest.setBytes(sendData); BluetoothLeResponse response new BluetoothLeResponse(); bluetoothLeRequest.sendRequest(bluetoothLeRequest,response,5*1000); //蓝牙ble监听服务端(也叫从机/外围设备/peripheral)数据分两步操作 //1.监听通知信息 bluetoothLeConnectProvider.setBluetoothLeNotifyListener(new BluetoothLeNotifyListener() { Override public void onNotify(UUID serviceId, UUID characterId, byte[] value) { } }); //2.开启通知 NotifyRequest notifyRequest new NotifyRequest(); notifyRequest.setService(UUID_SERVICE); notifyRequest.setCharacter(UUID_CHARACTER_READ); notifyRequest.setEnable(true); BluetoothLeResponse response new BluetoothLeResponse(); bluetoothLeConnectProvider.sendRequest(notifyRequest,response,5*1000);4.关闭连接baseConnectProvider.close();小结上面只是陈述了简单调用流程实际使用要注意组装命令的格式是否正确设备连接参数数据转换等等特别注意的是:不用连接实例的时候要关闭连接避免fd泄露导致应用崩溃。更多用法参考DeviceConnector欢迎star注V1.1.0版本开始支持低功耗蓝牙PC端数据包监控工具-Bus HoundBus hound是一款为了在pc电脑上进行总线数据包监控以及操控的开发工具。用来捕捉来自设备的协议包和输入输出操作它是功能强大的总线协议分析器支持监听USB 1.0 - 4.0NVMeSATA IDESCSI ATAPIFireWire, 1394A/BBluetoothFibre ChanneliSCSI, SASPC Card, PCMCIAserial portparallel portps/2 ports下载地址https://perisoft.net/bushound/index.htm更多文章关于Android终端机串口的理解串口通信扩展知识