最近研究与硬件交互的方法。交互方式是这样:首先设备会放出一个wifi,然后连接wifi后,wifi允许进行TCP连接,这个是我们自己设置好的。然后通过TCP进行十六进制命令的发送。这里我们给出相应的TCP通讯方式和十六进制语义化转化方式。
首先是TCP的通讯代码
new Thread(new Runnable() {
@Override
public void run() {
Socket socket = null;
OutputStream os = null;
try {
//准备工作
socket = new Socket("10.10.100.254", 8899);
os = socket.getOutputStream();
InputStream is = socket.getInputStream();
//写入数据
byte[] sendInfo = hexStrToBinaryStr("68 00 00 00 00 00 80 68 01 00 51 16");
os.write(sendInfo);
//读取数据
byte[] data2 = new byte[86];
if ((is.read(data2))!=-1){
//获取返回值
String getInfo = byteArrToHex(data2);
Log.i("aaaaaaaaaaaaaaaa", getInfo);
}
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
接着是十六进制数和语义化字符串的转化
private static final char HexCharArr[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
* 字节数组转化为十六进制字符串
* @param btArr
* @return
*/
public static String byteArrToHex(byte[] btArr) {
char strArr[] = new char[btArr.length * 3];
int i = 0;
for (byte bt : btArr) {
strArr[i++] = HexCharArr[bt >>> 4 & 0xf];
strArr[i++] = HexCharArr[bt & 0xf];
strArr[i++] = ' ';
}
return new String(strArr);
}
/**
* 将十六进制的字符串转换成字节数组
*
* @param hexString
* @return
*/
public static byte[] hexStrToBinaryStr(String hexString) {
if (TextUtils.isEmpty(hexString)) {
return null;
}
hexString = hexString.replaceAll(" ", "");
int len = hexString.length();
int index = 0;
byte[] bytes = new byte[len / 2];
while (index < len) {
String sub = hexString.substring(index, index + 2);
bytes[index / 2] = (byte) Integer.parseInt(sub, 16);
index += 2;
}
return bytes;
}
这样就可以进行硬件的相关交互。