fix: decode base64-encoded file content
This commit is contained in:
@@ -1,200 +1,307 @@
|
|||||||
cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQudXRpbHM7CgppbXBvcnQgc3RhdGljIGFuZHJvaWQu
|
package android.serialport.utils;
|
||||||
c2VyaWFscG9ydC51dGlscy5CeXRlVXRpbC5yZWFkQmluYXJ5RmlsZTsKaW1wb3J0IHN0YXRpYyBh
|
|
||||||
bmRyb2lkLnNlcmlhbHBvcnQudXRpbHMuQnl0ZVV0aWwudW5ib3VuZGVkUXVldWU7CgppbXBvcnQg
|
|
||||||
YW5kcm9pZC5hcHAuQXBwbGljYXRpb247CmltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CmltcG9y
|
|
||||||
dCBhbmRyb2lkLm9zLk1lc3NhZ2U7CmltcG9ydCBhbmRyb2lkLnNlcmlhbHBvcnQuU2VyaWFsUG9y
|
|
||||||
dDsKaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CmltcG9ydCBhbmRyb2lkLnV0aWwuTG9n
|
|
||||||
OwoKaW1wb3J0IGFuZHJvaWR4LmFubm90YXRpb24uTm9uTnVsbDsKCmltcG9ydCBqYXZhLmlvLkZp
|
|
||||||
bGU7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVh
|
|
||||||
bTsKaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwppbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVn
|
|
||||||
ZXI7CmltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CmltcG9ydCBqYXZh
|
|
||||||
LnNlY3VyaXR5LkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb247CmltcG9ydCBqYXZhLnV0aWwuQXJy
|
|
||||||
YXlMaXN0OwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZTsK
|
|
||||||
CnB1YmxpYyBjbGFzcyBTZXJpYWxDYXJkQ29udHJvbCB7CiAgICBzdGF0aWMgQXBwbGljYXRpb24g
|
|
||||||
bUFwcGxpY2F0aW9uOwogICAgcHJpdmF0ZSBzdGF0aWMgU2VyaWFsQ2FyZENvbnRyb2wgc2VyaWFs
|
|
||||||
Q2FyZENvbnRyb2w7CiAgICBwcml2YXRlIHN0YXRpYyBIYW5kbGVyIG1IYW5kbGVyOwogICAgc3Rh
|
|
||||||
dGljIGludCBNU0dfUmRBc3luQ21kU3RhdHVzID0gMTAwOwogICAgU3RyaW5nIEdldEluc1Byb3Bz
|
|
||||||
ID0gIi9HZXRJbnNQcm9wczpoLDE7IjsKICAgIFN0cmluZyBXZElucyA9ICIvV2RJbnM6aCwwLCI7
|
|
||||||
CiAgICBTdHJpbmcgSW5zUGFyYW1zID0gIi9JbnNQYXJhbXM6aCwwLDMsZjsiOwogICAgc3RhdGlj
|
|
||||||
IFN0cmluZyBSZEFzeW5DbWRTdGF0dXMgPSAiL1JkQXN5bkNtZFN0YXR1czpoLDE7IjsKCiAgICBT
|
|
||||||
dHJpbmcgY3VycmVudENtZCA9ICIiOwogICAgcHJpdmF0ZSBPdXRwdXRTdHJlYW0gbU91dHB1dFN0
|
|
||||||
cmVhbSA9IG51bGw7CiAgICBwcml2YXRlIElucHV0U3RyZWFtIG1JbnB1dFN0cmVhbSA9IG51bGw7
|
|
||||||
CiAgICBwcml2YXRlIFJlYWRUaHJlYWQgbVJlYWRUaHJlYWQgPSBudWxsOwogICAgU3RyaW5nQnVm
|
|
||||||
ZmVyIGRhdGFCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBTdHJpbmdbXSBjb250ZW50
|
|
||||||
cyA9bnVsbDsKICAgIFN0cmluZyBhZGRyZXNzSW5kZXggPSAiIjsKICAgIHByaXZhdGUgU2VyaWFs
|
|
||||||
UG9ydCBtU2VyaWFsUG9ydCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBUYXNrIGV4Y3V0ZSByZXN1
|
|
||||||
bHQKICAgICAqLwogICAgcHJpdmF0ZSBUYXNrRXhjdXRlUmVzdWx0IHRhc2tFeGN1dGVSZXN1bHQ7
|
|
||||||
|
|
||||||
ICAgIC8qKgogICAgICogZmluZCB0aGUgYXZhaWxhYmxlIHBvcnQKICAgICAqLwogICAgU3RyaW5n
|
import static android.serialport.utils.ByteUtil.readBinaryFile;
|
||||||
IGF2YWlsYWJsZVBvcnQgPSAiIjsKCiAgICAvKioKICAgICAqIGZvciBjb25zdHJ1Y3QgbXV0aS1j
|
import static android.serialport.utils.ByteUtil.unboundedQueue;
|
||||||
b21tYW5kIGFuZCBieSBvcmRlcgogICAgICogKi8KICAgIExpbmtlZEJsb2NraW5nUXVldWU8U3Ry
|
|
||||||
aW5nPiBjb21tYW5kUXVldWUgPSBuZXcgTGlua2VkQmxvY2tpbmdRdWV1ZTxTdHJpbmc+KCk7Cgog
|
import android.app.Application;
|
||||||
ICAgLyoqCiAgICAgKiBnZXQgdGhlIFNlcmlhbCBpbnN0YW5jZQogICAgICogQHBhcmFtIGFwcGxp
|
import android.os.Handler;
|
||||||
Y2F0aW9uCiAgICAgKiBAcmV0dXJuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgU2VyaWFsQ2Fy
|
import android.os.Message;
|
||||||
ZENvbnRyb2wgZ2V0U2VyaWFsSW5zdGFuY2UoQXBwbGljYXRpb24gYXBwbGljYXRpb24pIHsKICAg
|
import android.serialport.SerialPort;
|
||||||
ICAgICBtQXBwbGljYXRpb24gPSBhcHBsaWNhdGlvbjsKICAgICAgICBpZiAobnVsbCA9PSBzZXJp
|
import android.text.TextUtils;
|
||||||
YWxDYXJkQ29udHJvbCkgewogICAgICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKG1BcHBs
|
import android.util.Log;
|
||||||
aWNhdGlvbi5nZXRNYWluTG9vcGVyKCkpewogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAg
|
|
||||||
ICAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKEBOb25OdWxsIE1lc3NhZ2UgbXNn
|
import androidx.annotation.NonNull;
|
||||||
KSB7CiAgICAgICAgICAgICAgICAgICAgaWYobXNnLndoYXQgPT0gTVNHX1JkQXN5bkNtZFN0YXR1
|
|
||||||
cyl7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbENhcmRDb250cm9sLnNlbmRUb1Nlcmlh
|
import java.io.File;
|
||||||
bENvbW1hbmQoc2VyaWFsQ2FyZENvbnRyb2wuZ2V0UHJvdG9jb2xCeXRlcyhSZEFzeW5DbWRTdGF0
|
import java.io.IOException;
|
||||||
dXMpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
|
import java.io.InputStream;
|
||||||
IH07CiAgICAgICAgICAgIHNlcmlhbENhcmRDb250cm9sID0gbmV3IFNlcmlhbENhcmRDb250cm9s
|
import java.io.OutputStream;
|
||||||
KCk7CiAgICAgICAgICAgIHNlcmlhbENhcmRDb250cm9sLmluaXRTZXJpYWxQb3J0KHRydWUpOwog
|
import java.math.BigInteger;
|
||||||
ICAgICAgIH0KICAgICAgICByZXR1cm4gc2VyaWFsQ2FyZENvbnRyb2w7CiAgICB9CgoKICAgIC8q
|
import java.nio.charset.StandardCharsets;
|
||||||
KgogICAgICogc2VuZCBjb25maWcgZmlsZSB0byBjb250cm9sIGNhcmQKICAgICAqIEBwYXJhbSBm
|
import java.security.InvalidParameterException;
|
||||||
aWxlUGF0aAogICAgICogQHBhcmFtIHRhc2tFeGN1dGVSZXN1bHQKICAgICAqLwogICAgcHVibGlj
|
import java.util.ArrayList;
|
||||||
IHZvaWQgc2VuZENvbmZpZ0ZpbGVUb0NvbnRyb2xDYXJkKFN0cmluZyBmaWxlUGF0aCxUYXNrRXhj
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
dXRlUmVzdWx0IHRhc2tFeGN1dGVSZXN1bHQpewogICAgICAgIHRoaXMudGFza0V4Y3V0ZVJlc3Vs
|
|
||||||
dCA9IHRhc2tFeGN1dGVSZXN1bHQ7CiAgICAgICAgaWYoIW5ldyBGaWxlKGZpbGVQYXRoKS5leGlz
|
public class SerialCardControl {
|
||||||
dHMoKSB8fCBuZXcgRmlsZShmaWxlUGF0aCkubGVuZ3RoKCkgPD0gMTAyNCl7CiAgICAgICAgICAg
|
static Application mApplication;
|
||||||
IExvZy5pKCJSb2NreSIsImZpbGUgaXMgbm90IGV4c2l0Iik7CiAgICAgICAgICAgIGlmKG51bGwg
|
private static SerialCardControl serialCardControl;
|
||||||
IT0gdGFza0V4Y3V0ZVJlc3VsdCkgewogICAgICAgICAgICAgICAgdGFza0V4Y3V0ZVJlc3VsdC5m
|
private static Handler mHandler;
|
||||||
YWlsKCJmaWxlIGlzIG5vdCBleHNpdCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVy
|
static int MSG_RdAsynCmdStatus = 100;
|
||||||
bjsKICAgICAgICB9CiAgICAgICAgaWYoVGV4dFV0aWxzLmlzRW1wdHkoYXZhaWxhYmxlUG9ydCkp
|
String GetInsProps = "/GetInsProps:h,1;";
|
||||||
ewogICAgICAgICAgICBMb2cuaSgiUm9ja3kiLCJwb3J0IGlzIG5vdCBleHNpdCIpOwogICAgICAgI
|
String WdIns = "/WdIns:h,0,";
|
||||||
CAgICBpZihudWxsICE9IHRhc2tFeGN1dGVSZXN1bHQpIHsKICAgICAgICAgICAgICAgIHRhc2tF
|
String InsParams = "/InsParams:h,0,3,f;";
|
||||||
eGN1dGVSZXN1bHQuZmFpbCgicG9ydCBpcyBub3QgZXhzaXQiKTsKICAgICAgICAgICAgfQogICAg
|
static String RdAsynCmdStatus = "/RdAsynCmdStatus:h,1;";
|
||||||
ICAgIH0KICAgICAgICByZWFkQmluYXJ5RmlsZShmaWxlUGF0aCk7CiAgICAgICAgY29tbWFuZFF1
|
|
||||||
ZXVlLmFkZChHZXRJbnNQcm9wcyk7CiAgICAgICAgZm9yKGludCBpPSAwIDtpPHVuYm91bmRlZFF1
|
String currentCmd = "";
|
||||||
ZXVlLnNpemUoKTtpKyspIHsKICAgICAgICAgICAgY29tbWFuZFF1ZXVlLmFkZChXZElucyk7CiAg
|
private OutputStream mOutputStream = null;
|
||||||
ICAgICAgfQogICAgICAgIGNvbW1hbmRRdWV1ZS5hZGQoSW5zUGFyYW1zKTsKICAgICAgICBTdHJp
|
private InputStream mInputStream = null;
|
||||||
bmcgY21kID0gY29tbWFuZFF1ZXVlLnBvbGwoKTsKICAgICAgICBzZW5kVG9TZXJpYWxDb21tYW5k
|
private ReadThread mReadThread = null;
|
||||||
KGdldFByb3RvY29sQnl0ZXMoY21kKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBpbml0IHNlcmlh
|
StringBuffer dataBuffer = new StringBuffer();
|
||||||
bCBwb3J0CiAgICAgKi8KICAgIHByaXZhdGUgdm9pZCBpbml0U2VyaWFsUG9ydChCb29sZWFuIG5l
|
String[] contents =null;
|
||||||
ZWRTdGFydFRocmVhZCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIG1TZXJpYWxQb3J0ID0g
|
String addressIndex = "";
|
||||||
Z2V0U2VyaWFsUG9ydCgpOwogICAgICAgICAgICBtT3V0cHV0U3RyZWFtID0gbVNlcmlhbFBvcnQu
|
private SerialPort mSerialPort = null;
|
||||||
Z2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgIG1JbnB1dFN0cmVhbSA9IG1TZXJpYWxQb3J0
|
|
||||||
LmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgIGlmIChuZWVkU3RhcnRUaHJlYWQpIHsKICAg
|
/**
|
||||||
ICAgICAgICAgICAgIG1SZWFkVGhyZWFkID0gbmV3IFJlYWRUaHJlYWQoKTsKICAgICAgICAgICAg
|
* Task excute result
|
||||||
ICAgIG1SZWFkVGhyZWFkLnN0YXJ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChT
|
*/
|
||||||
ZWN1cml0eUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAg
|
private TaskExcuteResult taskExcuteResult; /**
|
||||||
ICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICBlLnByaW50U3RhY2tU
|
* find the available port
|
||||||
cmFjZSgpOwogICAgICAgIH0gY2F0Y2ggKEludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb24gZSkgewog
|
*/
|
||||||
ICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioK
|
String availablePort = "";
|
||||||
ICAgICAqIGdldCBhdmFpbGFibGUgcG9ydAogICAgICogQHJldHVybgogICAgICogQHRocm93cyBJ
|
|
||||||
T0V4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIFNlcmlhbFBvcnQgZ2V0U2VyaWFsUG9ydCgp
|
/**
|
||||||
IHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgaWYgKG1TZXJpYWxQb3J0ID09IG51bGwpIHsK
|
* for construct muti-command and by order
|
||||||
ICAgICAgICAgICAgLyogUmVhZCBzZXJpYWwgcG9ydCBwYXJhbWV0ZXJzICovCiAgICAgICAgICAg
|
* */
|
||||||
IGF2YWlsYWJsZVBvcnQgPSAiIjsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxJbnRlZ2VyLk1B
|
LinkedBlockingQueue<String> commandQueue = new LinkedBlockingQueue<String>();
|
||||||
WF9WQUxVRTtpKyspewogICAgICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoImRldi90
|
|
||||||
dHlVU0IiK2kpOwogICAgICAgICAgICAgICAgaWYoZmlsZS5leGlzdHMoKSl7CiAgICAgICAgICAg
|
/**
|
||||||
ICAgICAgICAgYXZhaWxhYmxlUG9ydCA9IGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7CiAgICAgICAg
|
* get the Serial instance
|
||||||
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
|
* @param application
|
||||||
ICAgICAgU3RyaW5nIHBhdGggPSBhdmFpbGFibGVQb3J0OwogICAgICAgICAgICBTZXJpYWxQb3J0
|
* @return
|
||||||
IHNlcmlhbFBvcnQgPQogICAgICAgICAgICAgICAgICAgIFNlcmlhbFBvcnQgLy8KICAgICAgICAg
|
*/
|
||||||
ICAgICAgICAgICAgICAgICAgIC5uZXdCdWlsZGVyKHBhdGgsIDExNTIwMCkucGFyaXR5KDApLmRh
|
public static SerialCardControl getSerialInstance(Application application) {
|
||||||
dGFCaXRzKDgpLnN0b3BCaXRzKDEpLmJ1aWxkKCk7CiAgICAgICAgICAgIG1TZXJpYWxQb3J0ID0g
|
mApplication = application;
|
||||||
c2VyaWFsUG9ydDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1TZXJpYWxQb3J0OwogICAgfQoK
|
if (null == serialCardControl) {
|
||||||
CiAgICAvKioKICAgICAqIHJlYWQgdGhlIGRhdGEgZnJvbSBzZXJpYWwgcG9ydAogICAgICovCiAg
|
mHandler = new Handler(mApplication.getMainLooper()){
|
||||||
ICBjbGFzcyBSZWFkVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKICAgICAgICBAT3ZlcnJpZGUKICAg
|
@Override
|
||||||
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgIHN1cGVyLnJ1bigpOwogICAgICAg
|
public void handleMessage(@NonNull Message msg) {
|
||||||
ICAgICB3aGlsZSAoIWlzSW50ZXJydXB0ZWQoKSkgewogICAgICAgICAgICAgICAgaW50IHNpemU7
|
if(msg.what == MSG_RdAsynCmdStatus){
|
||||||
CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIg
|
serialCardControl.sendToSerialCommand(serialCardControl.getProtocolBytes(RdAsynCmdStatus));
|
||||||
PSBuZXcgYnl0ZVsxMjhdOwogICAgICAgICAgICAgICAgICAgIGlmIChtSW5wdXRTdHJlYW0gIT0g
|
}
|
||||||
bnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbUlucHV0U3RyZWFtLnJlYWQo
|
}
|
||||||
YnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPiAwKSB7CiAgICAgICAg
|
};
|
||||||
ICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExv
|
serialCardControl = new SerialCardControl();
|
||||||
Z2dlci5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW50ID4+
|
serialCardControl.initSerialPort(true);
|
||||||
PiBTZW5kIGNvbW1hbmQgMTExIHJlY2VpdmVyIDogIiwgQnl0ZVV0aWwuYnl0ZXNUb0hleFdpdGhT
|
}
|
||||||
cGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
|
return serialCardControl;
|
||||||
ZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAg
|
}
|
||||||
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
|
|
||||||
dHJpbmcgdGVtcCA9IEJ5dGVVdGlsLmJ5dGVzVG9IZXhXaXRoU3BhY2UoYnVmZmVyKTsKICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWdub3JlWmVybyA9IHRlbXAuc3Vic3Ry
|
/**
|
||||||
aW5nKDAsIHRlbXAuaW5kZXhPZigiMDAiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
* send config file to control card
|
||||||
ICAgTG9nZ2VyLmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJp
|
* @param filePath
|
||||||
bnQgPj4+IFNlbmQgY29tbWFuZCBlZ25vcmVaZXJvIHJlY2VpdmVyIDogJGVnbm9yZVplcm8iCiAg
|
* @param taskExcuteResult
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
|
*/
|
||||||
ICAgICAgICBpZiAoZWdub3JlWmVyby5jb250YWlucygiM0IiKSkgewogICAgICAgICAgICAgICAg
|
public void sendConfigFileToControlCard(String filePath,TaskExcuteResult taskExcuteResult){
|
||||||
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgd2hvbGVSZXN1bHQgPSBkYXRhQnVmZmVyLnRvU3Ry
|
this.taskExcuteResult = taskExcuteResult;
|
||||||
aW5nKCkgKyBlZ25vcmVaZXJvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
|
if(!new File(filePath).exists() || new File(filePath).length() <= 1024){
|
||||||
b2dnZXIuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJp
|
Log.i("Rocky","file is not exsit");
|
||||||
bnQgPj4+IFNlbmQgY29tbWFuZCAyMjIgcmVjZWl2ZXIgOiAkd2hvbGVSZXN1bHQiCiAgICAgICAg
|
if(null != taskExcuteResult) {
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
|
taskExcuteResult.fail("file is not exsit");
|
||||||
ICAgICAgICAgIHBhcnNlUmVzdWx0KHdob2xlUmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAg
|
}
|
||||||
ICAgICAgICAgICAgICAgZGF0YUJ1ZmZlci5zZXRMZW5ndGgoMCk7CiAgICAgICAgICAgICAgICAg
|
return;
|
||||||
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
|
}
|
||||||
CAgZGF0YUJ1ZmZlci5hcHBlbmQoZWdub3JlWmVybyk7CiAgICAgICAgICAgICAgICAgICAgICAg
|
if(TextUtils.isEmpty(availablePort)){
|
||||||
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlv
|
Log.i("Rocky","port is not exsit");
|
||||||
biBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2Uo
|
if(null != taskExcuteResult) {
|
||||||
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
|
taskExcuteResult.fail("port is not exsit");
|
||||||
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9u
|
}
|
||||||
IGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAg
|
}
|
||||||
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIH0KCiAgICBwcml2YXRlIHZvaWQg
|
readBinaryFile(filePath);
|
||||||
c2VuZFRvU2VyaWFsQ29tbWFuZChieXRlW10gY29tbWFuZCkgewogICAgICAgIHRyeSB7CiAgICAg
|
commandQueue.add(GetInsProps);
|
||||||
ICAgICAgIExvZ2dlci5kKAogICAgICAgICAgICAgICAgICAgICJQcmludCA+Pj4gU2VuZCBjb21t
|
for(int i= 0 ;i<unboundedQueue.size();i++) {
|
||||||
YW5kIDExMSBoZWFydGJlYXQ6IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlVXRp
|
commandQueue.add(WdIns);
|
||||||
bC5ieXRlc1RvSGV4V2l0aFNwYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
}
|
||||||
ICBjb21tYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgdHJ5
|
commandQueue.add(InsParams);
|
||||||
IHsKICAgICAgICAgICAgICAgIGlmIChtT3V0cHV0U3RyZWFtID09IG51bGwpIHsKICAgICAgICAg
|
String cmd = commandQueue.poll();
|
||||||
ICAgICAgICAgICBtT3V0cHV0U3RyZWFtID0gbVNlcmlhbFBvcnQuZ2V0T3V0cHV0U3RyZWFtKCk7
|
sendToSerialCommand(getProtocolBytes(cmd));
|
||||||
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBtT3V0cHV0U3Ry
|
}
|
||||||
ZWFtKSB7CiAgICAgICAgICAgICAgICAgICAgbU91dHB1dFN0cmVhbS53cml0ZShjb21tYW5kKTsK
|
|
||||||
ICAgICAgICAgICAgICAgICAgICBtT3V0cHV0U3RyZWFtLmZsdXNoKCk7CiAgICAgICAgICAgICAg
|
/**
|
||||||
ICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICBl
|
* init serial port
|
||||||
LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSAgY2F0Y2ggKEV4Y2Vw
|
*/
|
||||||
dGlvbiBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQoKICAg
|
private void initSerialPort(Boolean needStartThread) {
|
||||||
IH0KCiAgICAvKioKICAgICAqIHBhcnNlIHRoZSByZXN1bHQgZnJvbSB0aGUgc2VyaWFsIHBvcnQK
|
try {
|
||||||
ICAgICAqIEBwYXJhbSB3aG9sZVJlc3VsdAogICAgICovCiAgICBwcml2YXRlIHZvaWQgcGFyc2VS
|
mSerialPort = getSerialPort();
|
||||||
ZXN1bHQoU3RyaW5nIHdob2xlUmVzdWx0KSB7CiAgICAgICAgU3RyaW5nW10gY29udGVudD1udWxs
|
mOutputStream = mSerialPort.getOutputStream();
|
||||||
OwogICAgICAgIFN0cmluZyBzdHIgPSAiIjsKICAgICAgICB0cnkgewogICAgICAgICAgICBTdHJp
|
mInputStream = mSerialPort.getInputStream();
|
||||||
bmcgaW5mbyA9IHdob2xlUmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgIGJ5dGVbXSBieXRl
|
if (needStartThread) {
|
||||||
cyA9IG5ldyBCaWdJbnRlZ2VyKGluZm8sIDE2KS50b0J5dGVBcnJheSgpOwogICAgICAgICAgICBz
|
mReadThread = new ReadThread();
|
||||||
dHIgPSBuZXcgU3RyaW5nKGJ5dGVzLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKICAgICAgICAg
|
mReadThread.start();
|
||||||
ICAgY29udGVudCA9IHN0ci5zcGxpdCgiLCIpOwogICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGUp
|
}
|
||||||
e2UucHJpbnRTdGFja1RyYWNlKCk7fQogICAgICAgIExvZy5pKCJSb2NreSIsImFjayBkYXRhIGlz
|
} catch (SecurityException e) {
|
||||||
ICIrc3RyKyIgY3VycmVudENtZCAiK2N1cnJlbnRDbWQpOwogICAgICAgIGlmKFRleHRVdGlscy5l
|
e.printStackTrace();
|
||||||
cXVhbHMoR2V0SW5zUHJvcHMsY3VycmVudENtZCkpewogICAgICAgICAgICBjb250ZW50cyA9IGNv
|
} catch (IOException e) {
|
||||||
bnRlbnQ7CiAgICAgICAgICAgIGFkZHJlc3NJbmRleCA9IGNvbnRlbnRzWzRdOwogICAgICAgIH0g
|
e.printStackTrace();
|
||||||
ZWxzZSBpZihUZXh0VXRpbHMuZXF1YWxzKFJkQXN5bkNtZFN0YXR1cyxjdXJyZW50Q21kKSl7CiAg
|
} catch (InvalidParameterException e) {
|
||||||
ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5lcXVhbHMoIjAi
|
e.printStackTrace();
|
||||||
LCBjb250ZW50WzJdKSkgewogICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1l
|
}
|
||||||
c3NhZ2VEZWxheWVkKE1TR19SZEFzeW5DbWRTdGF0dXMsIDIwMDApOwogICAgICAgICAgICAgICAg
|
}
|
||||||
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBMb2cuaSgiUm9ja3kiLCAiTVNHX1JkQXN5bkNt
|
|
||||||
ZFN0YXR1cyBzdWNjZXNzPj4+Iik7CiAgICAgICAgICAgICAgICAgICAgaWYobnVsbCAhPSB0YXNr
|
/**
|
||||||
RXhjdXRlUmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICB0YXNrRXhjdXRlUmVzdWx0LnN1
|
* get available port
|
||||||
Y2Nlc3MoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24g
|
* @return
|
||||||
ZSl7CiAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlRGVsYXllZChNU0df
|
* @throws IOException
|
||||||
UmRBc3luQ21kU3RhdHVzLCAyMDAwKTsKICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNl
|
*/
|
||||||
KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoY3VycmVudENtZC5zdGFydHNX
|
private SerialPort getSerialPort() throws IOException {
|
||||||
aXRoKCIvV2RJbnMiKSAmJiB1bmJvdW5kZWRRdWV1ZS5zaXplKCk8PTApewogICAgICAgICAgICBM
|
if (mSerialPort == null) {
|
||||||
b2cuaSgiUm9ja3kiLCJzZW5kIHdkaW5zIGNvbW1hbmQgZG9uZSB3ZSBjaGVjayB0aGUgcmVzdWx0
|
/* Read serial port parameters */
|
||||||
IG9mIHdkaW5zID4+Pj4+Iik7CiAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2VE
|
availablePort = "";
|
||||||
ZWxheWVkKE1TR19SZEFzeW5DbWRTdGF0dXMsMjAwMCk7CiAgICAgICAgfQogICAgICAgIE9iamVj
|
for(int i=0;i<Integer.MAX_VALUE;i++){
|
||||||
dCBjb21tYW5kID0gY29tbWFuZFF1ZXVlLnBvbGwoKTsKICAgICAgICBpZihudWxsID09IGNvbW1h
|
File file = new File("dev/ttyUSB"+i);
|
||||||
bmQpewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIExvZy5pKCJSb2NreSIs
|
if(file.exists()){
|
||||||
ImNvbW1hbmRRdWV1ZSAiK2NvbW1hbmQgKyAiIGNvbW1hbmQgc3RhcnQgIit1bmJvdW5kZWRRdWV1
|
availablePort = file.getAbsolutePath();
|
||||||
ZS5zaXplKCkpOwogICAgICAgIGlmKGNvbW1hbmQudG9TdHJpbmcoKS5zdGFydHNXaXRoKCIvV2RJ
|
break;
|
||||||
bnMiKSAmJiB1bmJvdW5kZWRRdWV1ZS5zaXplKCkgPjApewogICAgICAgICAgICBTdHJpbmdCdWZm
|
}
|
||||||
ZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+
|
}
|
||||||
IGMgPSB1bmJvdW5kZWRRdWV1ZS5wb2xsKCk7CiAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7aTxj
|
String path = availablePort;
|
||||||
LnNpemUoKTtpKyspewogICAgICAgICAgICAgICAgc2IuYXBwZW5kKGMuZ2V0KGkpKTsKICAgICAg
|
SerialPort serialPort =
|
||||||
ICAgICAgICAgIGlmKGkgIT0gYy5zaXplKCktMSl7CiAgICAgICAgICAgICAgICAgICAgc2IuYXBw
|
SerialPort //
|
||||||
ZW5kKCIsIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3Ry
|
.newBuilder(path, 115200).parity(0).dataBits(8).stopBits(1).build();
|
||||||
aW5nIGhleFN0cmluZyA9IEludGVnZXIudG9IZXhTdHJpbmcoYy5zaXplKCkpLnRvVXBwZXJDYXNl
|
mSerialPort = serialPort;
|
||||||
KCk7CiAgICAgICAgICAgIGludCBzaXpldGFnID0gSW50ZWdlci5wYXJzZUludChoZXhTdHJpbmcs
|
}
|
||||||
MTYpOwogICAgICAgICAgICBXZElucyA9IGNvbW1hbmQrYWRkcmVzc0luZGV4KyIsIitoZXhTdHJp
|
return mSerialPort;
|
||||||
bmcrIiwiKyBzYiArIjsiOwogICAgICAgICAgICBzZW5kVG9TZXJpYWxDb21tYW5kKGdldFByb3Rv
|
}
|
||||||
Y29sQnl0ZXMoV2RJbnMpKTsKICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGFkZEhleChhZGRy
|
|
||||||
ZXNzSW5kZXgsaGV4U3RyaW5nKTsKICAgICAgICAgICAgaW50IGZpcnN0QWRkcmVzcyA9IEludGVn
|
|
||||||
ZXIucGFyc2VJbnQoYWRkcmVzc0luZGV4LDE2KTsKICAgICAgICAgICAgaW50IGZpbmFsQWRkcmVz
|
/**
|
||||||
cyA9IGZpcnN0QWRkcmVzcyArIGMuc2l6ZSgpOwogICAgICAgICAgICBTdHJpbmcgcmVzdWx0SGV4
|
* read the data from serial port
|
||||||
ID0gSW50ZWdlci50b0hleFN0cmluZyhmaW5hbEFkZHJlc3MpLnRvVXBwZXJDYXNlKCk7CiAgICAg
|
*/
|
||||||
ICAgICAgIGFkZHJlc3NJbmRleCA9IFN0cmluZy52YWx1ZU9mKHJlc3VsdEhleCk7CiAgICAgICAg
|
class ReadThread extends Thread {
|
||||||
ICAgIExvZy5pKCJSb2NreSIsIj4+PldkSW5zMjIyICIrV2RJbnMrIiBhZGRyZXNzSW5kZXggIith
|
@Override
|
||||||
ZGRyZXNzSW5kZXggKyIgc2l6ZSBpcyAiK2Muc2l6ZSgpKTsKICAgICAgICB9CiAgICAgICAgZWxz
|
public void run() {
|
||||||
ZSBpZihjb21tYW5kLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgiL0luc1BhcmFtcyIpKXsKICAgICAg
|
super.run();
|
||||||
ICAgICAgc2VuZFRvU2VyaWFsQ29tbWFuZChnZXRQcm90b2NvbEJ5dGVzKEluc1BhcmFtcykpOwog
|
while (!isInterrupted()) {
|
||||||
ICAgICAgIH0KICAgIH0KICAgIHB1YmxpYyBieXRlW10gZ2V0UHJvdG9jb2xCeXRlcyhTdHJpbmcg
|
int size;
|
||||||
Y21kKXsKICAgICAgICBjdXJyZW50Q21kID0gY21kOwogICAgICAgIGJ5dGVbXSBieXRlQXJyYXkg
|
try {
|
||||||
PSBjdXJyZW50Q21kLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOwogICAgICAgIHJl
|
byte[] buffer = new byte[128];
|
||||||
dHVybiBieXRlQXJyYXk7CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBhZGRIZXgoU3Ry
|
if (mInputStream != null) {
|
||||||
aW5nIGhleDEgLFN0cmluZyBoZXgyKSB7CiAgICAgICAgQmlnSW50ZWdlciBudW0xID0gbmV3IEJp
|
size = mInputStream.read(buffer);
|
||||||
Z0ludGVnZXIoaGV4MS5zdWJzdHJpbmcoMiksIDE2KTsKICAgICAgICBCaWdJbnRlZ2VyIG51bTIg
|
if (size > 0) {
|
||||||
PSBuZXcgQmlnSW50ZWdlcihoZXgyLnN1YnN0cmluZygyKSwgMTYpOwogICAgICAgIEJpZ0ludGVn
|
try {
|
||||||
ZXIgc3VtID0gbnVtMS5hZGQobnVtMik7CiAgICAgICAgU3RyaW5nIHJlc3VsdEhleCA9IHN1bS50
|
Logger.d(
|
||||||
b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJl
|
"Print >>> Send command 111 receiver : ", ByteUtil.bytesToHexWithSpace(
|
||||||
c3VsdDogIiArICIweCIgKyByZXN1bHRIZXgpOwogICAgICAgIHJldHVybiByZXN1bHRIZXg7CiAg
|
buffer
|
||||||
ICB9Cn0K
|
)
|
||||||
|
);
|
||||||
|
String temp = ByteUtil.bytesToHexWithSpace(buffer);
|
||||||
|
String egnoreZero = temp.substring(0, temp.indexOf("00"));
|
||||||
|
Logger.d(
|
||||||
|
"Print >>> Send command egnoreZero receiver : $egnoreZero"
|
||||||
|
);
|
||||||
|
if (egnoreZero.contains("3B")) {
|
||||||
|
String wholeResult = dataBuffer.toString() + egnoreZero;
|
||||||
|
Logger.d(
|
||||||
|
"Print >>> Send command 222 receiver : $wholeResult"
|
||||||
|
);
|
||||||
|
parseResult(wholeResult);
|
||||||
|
dataBuffer.setLength(0);
|
||||||
|
} else {
|
||||||
|
dataBuffer.append(egnoreZero);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendToSerialCommand(byte[] command) {
|
||||||
|
try {
|
||||||
|
Logger.d(
|
||||||
|
"Print >>> Send command 111 heartbeat:" +
|
||||||
|
ByteUtil.bytesToHexWithSpace(
|
||||||
|
command
|
||||||
|
));
|
||||||
|
try {
|
||||||
|
if (mOutputStream == null) {
|
||||||
|
mOutputStream = mSerialPort.getOutputStream();
|
||||||
|
}
|
||||||
|
if (null != mOutputStream) {
|
||||||
|
mOutputStream.write(command);
|
||||||
|
mOutputStream.flush();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parse the result from the serial port
|
||||||
|
* @param wholeResult
|
||||||
|
*/
|
||||||
|
private void parseResult(String wholeResult) {
|
||||||
|
String[] content=null;
|
||||||
|
String str = "";
|
||||||
|
try {
|
||||||
|
String info = wholeResult.toString();
|
||||||
|
byte[] bytes = new BigInteger(info, 16).toByteArray();
|
||||||
|
str = new String(bytes, StandardCharsets.UTF_8);
|
||||||
|
content = str.split(",");
|
||||||
|
}catch (Exception e){e.printStackTrace();}
|
||||||
|
Log.i("Rocky","ack data is "+str+" currentCmd "+currentCmd);
|
||||||
|
if(TextUtils.equals(GetInsProps,currentCmd)){
|
||||||
|
contents = content;
|
||||||
|
addressIndex = contents[4];
|
||||||
|
} else if(TextUtils.equals(RdAsynCmdStatus,currentCmd)){
|
||||||
|
try {
|
||||||
|
if (!TextUtils.equals("0", content[2])) {
|
||||||
|
mHandler.sendEmptyMessageDelayed(MSG_RdAsynCmdStatus, 2000);
|
||||||
|
} else {
|
||||||
|
Log.i("Rocky", "MSG_RdAsynCmdStatus success>>>");
|
||||||
|
if(null != taskExcuteResult)
|
||||||
|
taskExcuteResult.success();
|
||||||
|
}
|
||||||
|
}catch (Exception e){
|
||||||
|
mHandler.sendEmptyMessageDelayed(MSG_RdAsynCmdStatus, 2000);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(currentCmd.startsWith("/WdIns") && unboundedQueue.size()<=0){
|
||||||
|
Log.i("Rocky","send wdins command done we check the result of wdins >>>>>");
|
||||||
|
mHandler.sendEmptyMessageDelayed(MSG_RdAsynCmdStatus,2000);
|
||||||
|
}
|
||||||
|
Object command = commandQueue.poll();
|
||||||
|
if(null == command){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Log.i("Rocky","commandQueue "+command + " command start "+unboundedQueue.size());
|
||||||
|
if(command.toString().startsWith("/WdIns") && unboundedQueue.size() >0){
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
ArrayList<String> c = unboundedQueue.poll();
|
||||||
|
for(int i = 0;i<c.size();i++){
|
||||||
|
sb.append(c.get(i));
|
||||||
|
if(i != c.size()-1){
|
||||||
|
sb.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String hexString = Integer.toHexString(c.size()).toUpperCase();
|
||||||
|
int sizetag = Integer.parseInt(hexString,16);
|
||||||
|
WdIns = command+addressIndex+","+hexString+","+ sb +";";
|
||||||
|
sendToSerialCommand(getProtocolBytes(WdIns));
|
||||||
|
String result = addHex(addressIndex,hexString);
|
||||||
|
int firstAddress = Integer.parseInt(addressIndex,16);
|
||||||
|
int finalAddress = firstAddress + c.size();
|
||||||
|
String resultHex = Integer.toHexString(finalAddress).toUpperCase();
|
||||||
|
addressIndex = String.valueOf(resultHex);
|
||||||
|
Log.i("Rocky",">>>WdIns222 "+WdIns+" addressIndex "+addressIndex +" size is "+c.size());
|
||||||
|
}
|
||||||
|
else if(command.toString().startsWith("/InsParams")){
|
||||||
|
sendToSerialCommand(getProtocolBytes(InsParams));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public byte[] getProtocolBytes(String cmd){
|
||||||
|
currentCmd = cmd;
|
||||||
|
byte[] byteArray = currentCmd.getBytes(StandardCharsets.UTF_8);
|
||||||
|
return byteArray;
|
||||||
|
}
|
||||||
|
public static String addHex(String hex1 ,String hex2) {
|
||||||
|
BigInteger num1 = new BigInteger(hex1.substring(2), 16);
|
||||||
|
BigInteger num2 = new BigInteger(hex2.substring(2), 16);
|
||||||
|
BigInteger sum = num1.add(num2);
|
||||||
|
String resultHex = sum.toString(16).toUpperCase();
|
||||||
|
System.out.println("Result: " + "0x" + resultHex);
|
||||||
|
return resultHex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user