|
|
|
@ -86,8 +86,6 @@ public class IspManager {
|
|
|
|
|
serialPort = device.device;
|
|
|
|
|
if (serialPort != null)
|
|
|
|
|
serialPort.resetDevice();
|
|
|
|
|
else
|
|
|
|
|
System.out.println("device is null fuck");
|
|
|
|
|
|
|
|
|
|
if (serialPort != null && serialPort.isOpen()) {
|
|
|
|
|
serialPort.setBaudRate(baudRate);
|
|
|
|
@ -108,7 +106,6 @@ public class IspManager {
|
|
|
|
|
serialPort.purge(D2xxManager.FT_PURGE_RX);
|
|
|
|
|
String[] uids = readUid();
|
|
|
|
|
if (uids == null) {
|
|
|
|
|
System.out.println("uids null fuck");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -130,18 +127,13 @@ public class IspManager {
|
|
|
|
|
int ret = sendCommand(READ_UID);
|
|
|
|
|
|
|
|
|
|
if (ret != 0) {
|
|
|
|
|
System.out.println("Send Command " + ret);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
byte[] buf = new byte[REP_BUF];
|
|
|
|
|
|
|
|
|
|
int size = read(buf, 50, 500);
|
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
|
System.out.println(String.format("%02x", buf[i]));
|
|
|
|
|
}
|
|
|
|
|
if (size <= 0) {
|
|
|
|
|
System.out.println("Send size " + size);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
String[] uids = new String[4];
|
|
|
|
@ -158,7 +150,6 @@ public class IspManager {
|
|
|
|
|
buffer = buffer.substring(buffer.indexOf("\r") + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
System.out.println("uids ok");
|
|
|
|
|
return uids;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -186,7 +177,6 @@ public class IspManager {
|
|
|
|
|
return null;
|
|
|
|
|
int ret = sendCommand(READ_BOOT_VERSION);
|
|
|
|
|
if (ret != 0) {
|
|
|
|
|
System.out.println("Send Command " + ret);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
byte[] buf = new byte[REP_BUF];
|
|
|
|
@ -194,7 +184,6 @@ public class IspManager {
|
|
|
|
|
int size = read(buf, 50, 500);
|
|
|
|
|
|
|
|
|
|
if (size <= 0) {
|
|
|
|
|
System.out.println("Receive " + size);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
String[] version = new String[2];
|
|
|
|
@ -254,7 +243,6 @@ public class IspManager {
|
|
|
|
|
File file = new File(context.getApplicationInfo().dataDir + "/" + server.id + "/" + binary.path + binary.filename);
|
|
|
|
|
int size = copy_buffer(file, data, parts.flash_size);
|
|
|
|
|
if (size <= 0) {
|
|
|
|
|
System.out.println("Size " + size);
|
|
|
|
|
listener.onError(context.getString(R.string.copy_file),flashView);
|
|
|
|
|
return -5;
|
|
|
|
|
}
|
|
|
|
@ -315,7 +303,6 @@ public class IspManager {
|
|
|
|
|
serialPort.purge(D2xxManager.FT_PURGE_TX);
|
|
|
|
|
byte[] buf;
|
|
|
|
|
if (serialPort.write(SYNC_START) != SYNC_START.length) {
|
|
|
|
|
System.out.println("Start");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -325,11 +312,9 @@ public class IspManager {
|
|
|
|
|
String expected = new String(SYNC);
|
|
|
|
|
if (result.compareTo(expected) != 0) {
|
|
|
|
|
serialPort.write("\r\n".getBytes());
|
|
|
|
|
System.out.println("Start answer " + result);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (serialPort.write(SYNC) != SYNC.length) {
|
|
|
|
|
System.out.println("SYNC write");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
clearBuffer(SYNC.length);
|
|
|
|
@ -338,13 +323,11 @@ public class IspManager {
|
|
|
|
|
result = new String(buf);
|
|
|
|
|
expected = new String(SYNC_OK);
|
|
|
|
|
if (result.compareTo(expected) != 0) {
|
|
|
|
|
System.out.println("SYNC OK " + result);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String freq = String.valueOf(crystal_freq) + "\r\n";
|
|
|
|
|
if (serialPort.write(freq.getBytes()) != freq.length()) {
|
|
|
|
|
System.out.println("freq write");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -354,12 +337,10 @@ public class IspManager {
|
|
|
|
|
result = new String(buf);
|
|
|
|
|
expected = new String(SYNC_OK);
|
|
|
|
|
if (result.compareTo(expected) != 0) {
|
|
|
|
|
System.out.println("freq answer " + result);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (serialPort.write(SYNC_ECHO_OFF) != SYNC_ECHO_OFF.length) {
|
|
|
|
|
System.out.println("Sync Echo Off write");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -439,17 +420,14 @@ public class IspManager {
|
|
|
|
|
String request = String.format(Locale.getDefault(),"%c %d %d %d\r\n",c,flash_addr,ram_addr,write_size);
|
|
|
|
|
len = serialPort.write(request.getBytes());
|
|
|
|
|
if(len != request.getBytes().length){
|
|
|
|
|
System.out.println("cmd addr write");
|
|
|
|
|
return -5;
|
|
|
|
|
}
|
|
|
|
|
len = read(buf,buf.length,500);
|
|
|
|
|
if (len <= 0) {
|
|
|
|
|
System.out.println("cmd addr read");
|
|
|
|
|
return -4;
|
|
|
|
|
}
|
|
|
|
|
ret = parseRetCode(buf);
|
|
|
|
|
|
|
|
|
|
System.out.println("cmd addr ret "+ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -464,7 +442,6 @@ public class IspManager {
|
|
|
|
|
|
|
|
|
|
ret = sendCommand('W',ram_addr,write_size);
|
|
|
|
|
if(ret != 0){
|
|
|
|
|
System.out.println("ask for write to ram");
|
|
|
|
|
return -8;
|
|
|
|
|
}
|
|
|
|
|
if(!uuencode) {
|
|
|
|
@ -491,41 +468,27 @@ public class IspManager {
|
|
|
|
|
computed_checksum = calc_checksum(dataToSend,total_sent,data_size);
|
|
|
|
|
|
|
|
|
|
byte[] checksum = String.format(Locale.getDefault(),"%d\r\n", computed_checksum).getBytes();
|
|
|
|
|
System.out.println(String.format(Locale.getDefault(),"%d %08x",i,computed_checksum));
|
|
|
|
|
System.arraycopy(checksum,0,buf,encoded_size,checksum.length);
|
|
|
|
|
encoded_size+=checksum.length;
|
|
|
|
|
//buf[encoded_size]='\0';
|
|
|
|
|
//encoded_size++;
|
|
|
|
|
for(int j = 0; j < encoded_size; j++) {
|
|
|
|
|
System.out.print(String.format(Locale.getDefault(),"%02x",buf[j]));
|
|
|
|
|
if(j%10==0)
|
|
|
|
|
System.out.println("");
|
|
|
|
|
}
|
|
|
|
|
len = serialPort.write(buf,encoded_size);
|
|
|
|
|
if(len != encoded_size) {
|
|
|
|
|
System.out.println("write fail "+i);
|
|
|
|
|
return -8;
|
|
|
|
|
}
|
|
|
|
|
len = read(repbuf,REP_BUF,500);
|
|
|
|
|
if(len <= 0) {
|
|
|
|
|
System.out.println("read answer fail "+i);
|
|
|
|
|
return -9;
|
|
|
|
|
}
|
|
|
|
|
repbuf[len]='\0';
|
|
|
|
|
System.out.println("Length "+len);
|
|
|
|
|
for(int j = 0; j < len; j++) {
|
|
|
|
|
System.out.println(String.format(Locale.getDefault(),"%02x",repbuf[j]));
|
|
|
|
|
}
|
|
|
|
|
String result = new String(repbuf,0,len);
|
|
|
|
|
String expected = new String(DATA_BLOCK_OK);
|
|
|
|
|
System.out.println("result "+result+".");
|
|
|
|
|
if(result.compareTo(expected)==0){
|
|
|
|
|
total_sent += data_size;
|
|
|
|
|
resend_requested_for_block = 0;
|
|
|
|
|
} else {
|
|
|
|
|
resend_requested_for_block++;
|
|
|
|
|
if(resend_requested_for_block >= 3) {
|
|
|
|
|
System.out.println("resend fail "+i);
|
|
|
|
|
return -10;
|
|
|
|
|
}
|
|
|
|
|
i--;
|
|
|
|
@ -547,7 +510,6 @@ public class IspManager {
|
|
|
|
|
private int eraseFlash(Part parts,FlashListener listener) {
|
|
|
|
|
int ret = unlock();
|
|
|
|
|
if (ret != 0) {
|
|
|
|
|
System.out.println("unlock fail");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < parts.flash_nb_sectors; i++) {
|
|
|
|
@ -559,7 +521,6 @@ public class IspManager {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ret < 0) {
|
|
|
|
|
System.out.println("blank "+i+" fail");
|
|
|
|
|
return ret;
|
|
|
|
|
} else {
|
|
|
|
|
byte buf[] = new byte[REP_BUF];
|
|
|
|
@ -568,13 +529,11 @@ public class IspManager {
|
|
|
|
|
//prepare-for-write
|
|
|
|
|
ret = send_cmd_sectors('P', i, i);
|
|
|
|
|
if (ret != 0) {
|
|
|
|
|
System.out.println("prepare-for-write "+i+" fail");
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
//erase
|
|
|
|
|
ret = send_cmd_sectors('E', i, i);
|
|
|
|
|
if (ret != 0) {
|
|
|
|
|
System.out.println("erase "+i+" fail");
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|