转自:http://112.124.9.243/wordpress/?p=342
iTest是JAVA写的,给一些相关的代码作参考,
代码如下,handleMessage函数是用timer触发的,通过HardwareControler.select轮询串口是否可读,
当可读时,从串口读到的数据会存到 buf 中,retSize是数据大小,而 hex 变量决定是否以十六进制显示,最终显示的字符串存入 str, :
private final int BUFSIZE = 512;
private byte[] buf = new byte[BUFSIZE];
private Timer timer = new Timer();
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (HardwareControler.select(devfd, 0, 0) == 1) {
int retSize = HardwareControler.read(devfd, buf, BUFSIZE);
if (retSize > 0 && !pauseUpdate) {
String str;
if (hex) {
str = bytesToHexString(buf, retSize);
} else {
str = new String(buf, 0, retSize);
}
remoteData.append(str);
转换成十六进制的函数:
public static String bytesToHexString(byte[] src, int size){
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0 || size <= 0) {
return null;
}
for (int i = 0; i < size; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(" ");
stringBuilder.append(hv);
}
return stringBuilder.toString();
}