can_bootloader/user/S19Decode.aardio

123 lines
2.6 KiB
Plaintext
Raw Normal View History

2022-05-17 16:34:44 +08:00
var fileinfo = "";
var FlashData = {};
FuncGetAllData = function(){
return FlashData;
}
FuncGetFileInfo = function(){
return fileinfo;
}
FuncOpenS19File = function(path){
import fsys.dlg;
if(path == null){
path = fsys.dlg.open('S19文件|*.sx;*.s19;*.srec|所有文件|*.*||',,,winform);
}
if(io.exist( path )){
//winform.editPath.text = path;
var readbuf = string.load(path);
readbuf = string.split(readbuf,'\r\n');
//console.dumpJson(readbuf);
var block = null;
FlashData = {};
for(i=1;#readbuf;1){
if(#readbuf[i] == 0){
continue;
}
var str = readbuf[i];
var data = "";
var addr = 0;
var len = 0;
select(string.slice(str,1,2)) {
case "S0"{
//S0为文件信息
var fileinfobuf = string.slice(str,9,-3);//取出文件信息
fileinfo = "file info:"+string.unhex(fileinfobuf,"")//解码
fileinfo = string.replace(fileinfo,"\z"," ");//替换空字符
FuncDisplay(fileinfo)//显示
continue;
}
case "S1"{
len = tonumber(string.slice(str,3,4),16)
addr = tonumber(string.slice(str,5,8),16)
data = string.slice(str,9,-3)
}
case "S2"{
len = tonumber(string.slice(str,3,4),16)
addr = tonumber(string.slice(str,5,10),16)
data = string.slice(str,11,-3)
}
case "S3"{
len = tonumber(string.slice(str,3,4),16)
addr = tonumber(string.slice(str,5,12),16)
data = string.slice(str,13,-3)
}
else {
continue;
}
}
if(block == null){
//空表,第一次进入
block = {};
block["address"] = addr;
block["data"] = {};
}
else {
//非空表
if(addr == (block["address"]+#block["data"])){
//连续,无动作
}
else {
//不同块,新建块
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
block["address"] = addr;
block["data"] = {};
//不连续,判断是否填充
/*不填充,所以注释了
if((addr & 0xfff800) == ((block["address"]+#block["data"])&0xfff800)){
//同一个块,填充FF
for(i=1;addr - (block["address"]+#block["data"]);1){
table.push(block["data"],0xff);
}
}
else {
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
block["address"] = addr;
block["data"] = {};
}
*/
}
}
data = string.unhex(data,"")
for(i=1;#data;1){
var bytedata = string.unpack(data,i)
table.push(block["data"],bytedata)
}
}
if(block != null){
table.push(FlashData,block)
//console.dumpTable(block["data"]);
}
}
//blocknum = 1;
return path;
}