Android Serial Port

Serial Port

Android 串口通讯 arm64-v8a、armeabi-v7a、x86、x86_64
支持指令队列发送;
支持指令间隔设置;
支持指令延迟时间设置;
支持携带可选参数发送;
支持单例模式跨页面通信;

AAR
名称操作
serial.jar下载
arm64-v8a下载
armeabi-v7a下载
x86下载
x86_64下载
arm-zip下载
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']
        }
    }
}
权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
路径

所有驱动路径

 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<T> packet) {
        //发送内容
    }
    
    @Override
    public void onSerialTimeout(SerialPacket<T> 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);
代理

服务配置

<service
    android:name="android.serial.port.api.SercdService"
    android:directBootAware="true"
    android:enabled="true" />

初始化

Sercd sercd = new Sercd(getContext());

网络接口列表 + 端口

String netInterface = "";
int port = 30001;
Map<String, String> 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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值