# SerialPort **Repository Path**: relin/SerialPort ## Basic Information - **Project Name**: SerialPort - **Description**: Android Serial Port - **Primary Language**: C - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-09-21 - **Last Updated**: 2024-11-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##### Serial Port Android 串口通讯 arm64-v8a、armeabi-v7a、x86、x86_64 支持指令队列发送; 支持指令间隔设置; 支持指令延迟时间设置; 支持携带可选参数发送; 支持单例模式跨页面通信; ##### AAR |名称|操作| |-|-| |serial.jar|[下载](https://github.com/RelinRan/SerialPort/blob/main/libs)| |arm64-v8a|[下载](https://github.com/RelinRan/SerialPort/blob/main/libs/arm64-v8a/libserial.so)| |armeabi-v7a|[下载](https://github.com/RelinRan/SerialPort/blob/main/libs/armeabi-v7a/libserial.so)| |x86|[下载](https://github.com/RelinRan/SerialPort/blob/main/libs/x86/libserial.so)| |x86_64|[下载](https://github.com/RelinRan/SerialPort/blob/main/libs/x86_64/libserial.so)| |arm-zip|[下载](https://github.com/RelinRan/SerialPort/blob/main/libs/arm.zip)| |x86-zip|[下载](https://github.com/RelinRan/SerialPort/blob/main/libs/x86.zip)| ##### Maven 1.build.grade | setting.grade ``` repositories { ... maven { url 'https://jitpack.io' } } ``` 2./app/build.grade ``` dependencies { implementation 'com.github.RelinRan:SerialPort:2024.4.23.1' } ``` 3.CPU架构 ``` defaultConfig { ndk { abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64' } } ``` ##### 文件依赖 下载的jar放入libs文件夹,so文件放入jniLibs文件夹 ``` android { sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } } } ``` ##### 权限 ``` ``` ##### 路径 所有驱动路径 ``` SerialPortFinder finder = new SerialPortFinder(); String[] paths = finder.getAllDevicesPath(); for (String path : paths) { Log.i("SerialPortFinder","path:"+path); } ``` ##### 通讯 初始化串口 ``` Serial serial = new Serial("/dev/ttyMSM2",30001,SerialMode.RDWR); serial.setDebug(true); ``` 添加监听 ``` //封装一个单例情况下,addSerialListener在当前页面即可获取到指令监听, //不需要EventBus、广播等来传递信息,只是注意在页面销毁情况下,remove掉自己的监听即可。 long sid = serial.addSerialListener(new OnSerialListener() { @Override public void onSerialSend(SerialPacket packet) { //发送内容 } @Override public void onSerialTimeout(SerialPacket packet) { //发送超时 } @Override public void onSerialReceived(byte[] data) { //接收内容 } }); ``` 移除监听 ``` serial.remove(sid); ``` 打开串口 ``` serial.open(); ``` 关闭串口 ``` serial.close(); ``` 一般发送 ``` byte[] data = new byte[]{0x01,0x02,0x03}; serial.send(data); ``` 延迟发送 ``` byte[] data = new byte[]{0x01,0x02,0x03}; long delay = 200; serial.send(data,delay); ``` 带参发送 ``` byte[] data = new byte[]{0x01,0x02,0x03}; long delay = 200; Object options = new Object(); serial.send(data,options,delay); ``` ##### 代理 服务配置 ``` ``` 初始化 ``` Sercd sercd = new Sercd(getContext()); ``` 网络接口列表 + 端口 ``` String netInterface = ""; int port = 30001; Map map = sercd.feedNetworkInterfacesList(); for (String key:map.keySet()){ //wifi是wlan0 if (key.equals("eth0")){ netInterface = map.get(key); } } ``` 设置监听 ``` sercd.setOnSercdListener(new OnSercdListener() { @Override public void onSercdStateChange(ProxyState proxyState) { System.out.println("proxyState:"+proxyState); } }); ``` 开始代理 ``` sercd.start("/dev/ttyMSM2",netInterface,port); ``` 关闭代理 ``` sercd.stop(); ``` ##### 字节工具 ``` Bytecode bytecode = new Bytecode(); byte b = 0b00001111; ``` Boolean值Byte ``` byte b = bytecode.toByte(false,false,false,false,true,true,true,true);//00001111 ``` Byte的Boolean[] ``` boolean[] booleans = bytecode.toBooleans(b);//[false, false, false, false, true, true, true, true] ``` Byte转十六进制 ``` String hex = bytecode.toHex(b);//0F ``` Byte转十进制 ``` int dec = bytecode.toDec(b);//15 ``` Byte转八进制 ``` String oct = bytecode.toOct(b);//017 ``` Byte转二进制 ``` String bin = bytecode.toBin(b);//00001111 ``` Byte数组转十六进制字符串 ``` float floatValue = 99.99f; byte[] data = bytecode.toBytes(floatValue); String hexString = bytecode.toHex(data);//E1 FA C7 42 ``` 十六进制String转Byte数组 ``` byte[] value = bytecode.toBytes(hexString);//[-31, -6, -57, 66] ``` Byte数组转Float ``` float floatValue = 99.99f; byte[] data = bytecode.toBytes(floatValue); float value = bytecode.toFloat(new byte[]{data[0],data[1],data[2],data[3]}));//99.99 ``` Byte数组转Short ``` short shortValue = 33; byte[] data = bytecode.toBytes(shortValue); short value = bytecode.toShort(new byte[]{data[0],data[1]}));//33 ``` Byte数组转Int ``` int intValue = 100; byte[] data = bytecode.toBytes(intValue); int value = bytecode.toInt(new byte[]{data[0],data[1],data[2],data[3]}));//100 ```