381 lines
11 KiB
JavaScript
381 lines
11 KiB
JavaScript
var mc1_oper = {
|
|
cmd:0,
|
|
comm_port:"",
|
|
comm_baud:"",
|
|
comm_parity:-1,
|
|
comm_stopbit:-1,
|
|
mos_switch:0,
|
|
file_crc : 0,
|
|
heart_beat_sw:1,
|
|
mc_high_voltage:85,
|
|
mc_middle_voltage:50,
|
|
mc_firmware_file:"",
|
|
mc_boot_crcaddr_beg:0x1000,
|
|
mc_boot_crcaddr_end:0x3C00,
|
|
mc_boot_readaddr_beg:0x3C00,
|
|
mc_boot_readlen:8,
|
|
mc_boot_earseaddr_beg:0x1000,
|
|
mc_boot_earseaddr_end:0x3C00,
|
|
mc_boot_writeaddr:0x3C00,
|
|
mc_boot_writevalue:"",
|
|
mc_iic_setaddr:0x1000,
|
|
mc_iic_read_len:8,
|
|
mc_iic_writedata:"",
|
|
mc_iic_mtp_v:0x14,
|
|
mc_iic_mtp_ear_cfg:0x04,
|
|
|
|
}
|
|
var mc_1_qthandle = null;
|
|
var mc_1_excuedcmd = -1;
|
|
var mc_1_excued_rtv = -1;
|
|
function MC_1_Start_Comm()
|
|
{
|
|
if( typeof(mc_1_qthandle) != "undefined" && mc_1_qthandle != null )
|
|
{
|
|
mc_1_qthandle.SearchCommport();
|
|
}
|
|
}
|
|
function MC_1_Open_CommPort(main_serial)
|
|
{
|
|
|
|
mc1_oper.comm_port =main_serial.comm_port;
|
|
mc1_oper.comm_baud =main_serial.comm_baud;
|
|
mc1_oper.comm_parity =main_serial.comm_parity;
|
|
mc1_oper.comm_stopbit = main_serial.comm_stopbit;
|
|
console.log(mc1_oper);
|
|
Main_Close_CommPort_Select();
|
|
mc1_oper.cmd = 0xFF;
|
|
var json_str = JSON.stringify(mc1_oper);
|
|
if( typeof(mc_1_qthandle) != "undefined" && mc_1_qthandle != null )
|
|
{
|
|
mc_1_qthandle.ExcueCmd(json_str);
|
|
}
|
|
}
|
|
|
|
function mc1_cmd(cmd_v)
|
|
{
|
|
mc1_oper.cmd = cmd_v;
|
|
switch(cmd_v)
|
|
{
|
|
case 4: mc1_oper.mos_switch = 1;break;
|
|
case 5: mc1_oper.mos_switch = 0;break;
|
|
case 25:mc1_oper.heart_beat_sw ^= 0x01;break;
|
|
default : break;
|
|
}
|
|
mc1_oper.mc_boot_crcaddr_beg = parseInt($("#mc_boot_crcaddr_beg").val(), 16); ;
|
|
mc1_oper.mc_boot_crcaddr_end = parseInt($("#mc_boot_crcaddr_end").val(),16);
|
|
mc1_oper.mc_boot_readaddr_beg = parseInt($("#mc_boot_readaddr_beg").val(),16);
|
|
mc1_oper.mc_boot_readlen = parseInt($("#mc_boot_readlen").val(),10);
|
|
mc1_oper.mc_boot_earseaddr_beg = parseInt($("#mc_boot_earseaddr_beg").val(),16);
|
|
mc1_oper.mc_boot_earseaddr_end = parseInt($("#mc_boot_earseaddr_end").val(),16);
|
|
mc1_oper.mc_boot_writeaddr = parseInt($("#mc_boot_writeaddr").val(),16);
|
|
mc1_oper.mc_boot_writevalue = $("#mc_boot_writevalue").val();
|
|
mc1_oper.mc_firmware_file = $("#mc_firmware_file").val();
|
|
mc1_oper.mc_iic_read_len = parseInt($("#mc_iic_read_len").val(),10);
|
|
mc1_oper.mc_iic_setaddr = parseInt($("#mc_iic_setaddr").val(),16);
|
|
mc1_oper.mc_iic_writedata = $("#mc_iic_writedata").val();
|
|
mc1_oper.mc_high_voltage = parseInt($("#mc_high_voltage").val(),10);
|
|
mc1_oper.mc_middle_voltage = parseInt($("#mc_middle_voltage").val(),10);
|
|
mc1_oper.mc_iic_mtp_v = parseInt($("#mc_iic_mtp_v").val(),16);
|
|
mc1_oper.mc_iic_mtp_ear_cfg = parseInt($("#mc_iic_mtp_ear_cfg").val(),16);
|
|
var json_str = JSON.stringify(mc1_oper);
|
|
if( typeof(mc_1_qthandle) != "undefined" && mc_1_qthandle != null )
|
|
{
|
|
mc_1_qthandle.ExcueCmd(json_str);
|
|
}
|
|
}
|
|
|
|
function MC_ShowDef()
|
|
{
|
|
$("#mc_boot_crcaddr_beg").val(Int2HexStr(mc1_oper.mc_boot_crcaddr_beg,"",0));
|
|
$("#mc_boot_crcaddr_end").val(Int2HexStr(mc1_oper.mc_boot_crcaddr_end,"",0));
|
|
$("#mc_boot_readaddr_beg").val(Int2HexStr(mc1_oper.mc_boot_readaddr_beg,"",0));
|
|
$("#mc_boot_readlen").val(mc1_oper.mc_boot_readlen);
|
|
$("#mc_boot_earseaddr_beg").val(Int2HexStr(mc1_oper.mc_boot_earseaddr_beg,"",0));
|
|
$("#mc_boot_earseaddr_end").val(Int2HexStr(mc1_oper.mc_boot_earseaddr_end,"",0))
|
|
$("#mc_boot_writeaddr").val(Int2HexStr(mc1_oper.mc_boot_writeaddr,"",0));
|
|
$("#mc_boot_writevalue").val(mc1_oper.mc_boot_writevalue);
|
|
$("#mc_firmware_file").val(mc1_oper.mc_firmware_file);
|
|
$("#mc_iic_read_len").val(mc1_oper.mc_iic_read_len);
|
|
$("#mc_iic_setaddr").val(Int2HexStr(mc1_oper.mc_iic_setaddr,"",0));
|
|
$("#mc_iic_writedata").val(mc1_oper.mc_iic_writedata);
|
|
$("#mc_high_voltage").val(mc1_oper.mc_high_voltage);
|
|
$("#mc_middle_voltage").val(mc1_oper.mc_middle_voltage);
|
|
$("#mc_iic_mtp_v").val(Int2HexStr(mc1_oper.mc_iic_mtp_v,"",0));
|
|
$("#mc_iic_mtp_ear_cfg").val(Int2HexStr(mc1_oper.mc_iic_mtp_ear_cfg,"",0));
|
|
}
|
|
|
|
function MC_1ShowFirmWare(file)
|
|
{
|
|
$("#mc_firmware_file").val(file);
|
|
ShowCommMes("选择文件: "+file,MesgType.MESG_TYPE_INFO);
|
|
}
|
|
function MC_1Init()
|
|
{
|
|
|
|
MC_ShowDef();
|
|
|
|
if(typeof(qchannel) != "undefined" && qchannel != null )
|
|
{
|
|
if(typeof(mc_1_qthandle) != "undefined" && mc_1_qthandle != null )
|
|
{
|
|
console.log("MC_1Inited OK ---");
|
|
}else{
|
|
mc_1_qthandle = qchannel.objects.mc1_qthandle;
|
|
if((typeof(mc_1_qthandle) != "undefined") && (mc_1_qthandle != null) )
|
|
{
|
|
console.log("MC_1Init OK ---");
|
|
mc_1_qthandle.ShowCommMes.connect(function(mesg,type){
|
|
ShowCommMes(mesg,type);
|
|
|
|
});
|
|
mc_1_qthandle.ShowCommport.connect(function(jsoninfo){
|
|
Main_ShowCommport(jsoninfo);
|
|
});
|
|
|
|
mc_1_qthandle.ShowFirmWare.connect(function(jsoninfo){
|
|
MC_1ShowFirmWare(jsoninfo);
|
|
});
|
|
mc_1_qthandle.Comm_Recive.connect(function(jsoninfo){
|
|
MC_1_Comm_Recive(jsoninfo);
|
|
});
|
|
mc_1_qthandle.IICDownLoadFirmware.connect(function(file_size){
|
|
MC_1_IICDownLoadFirmware(file_size);
|
|
});
|
|
|
|
mc_1_qthandle.VBUSDownLoadFirmware.connect(function(file_size,crc){
|
|
MC_1_VBUSDownLoadFirmware(file_size,crc);
|
|
});
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
//同步非阻塞延时
|
|
async function MC_1WaitCmdExcu( cmd, time_out)
|
|
{
|
|
if(time_out == 0)
|
|
return 0;
|
|
time_out = parseInt ( (time_out+19)/20);
|
|
mc_1_excued_rtv = 0;
|
|
while(time_out > 0)
|
|
{
|
|
if(mc_1_excuedcmd == cmd)
|
|
{
|
|
break;
|
|
}
|
|
await TransSleep(20);
|
|
time_out--;
|
|
}
|
|
if(mc_1_excued_rtv != 0)
|
|
{
|
|
ShowCommMes("命令错误退出",MesgType.MESG_TYPE_ERROR);
|
|
return 2;
|
|
}
|
|
if(time_out > 0 )
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
ShowCommMes("通信超时",MesgType.MESG_TYPE_ERROR);
|
|
return 1;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
var mc1_heartbeat_head = Str2Bytes("HBT");
|
|
function MC1_HeartBeat(frame_buf)
|
|
{
|
|
var bus_volate = frame_buf[5] + (frame_buf[6] << 8);
|
|
bus_volate = bus_volate / 10;
|
|
bus_volate = bus_volate.toFixed(1);
|
|
var bus_current = frame_buf[7] + (frame_buf[8] << 8)+(frame_buf[9] << 16)+(frame_buf[10] << 24);
|
|
bus_current = bus_current/1000;
|
|
bus_current = bus_current.toFixed(2);
|
|
var bus_mvolate = frame_buf[11] + (frame_buf[12] << 8);
|
|
bus_mvolate = bus_mvolate / 10;
|
|
bus_mvolate = bus_mvolate.toFixed(1);
|
|
var mes = "高电平电压 "+bus_volate+"V 中电平"+bus_mvolate+"V 总线电流 "+bus_current+"mA"
|
|
ShowCommMes(mes,MesgType.MESG_TYPE_INFO);
|
|
}
|
|
function MC_1_Comm_Recive(json_str)
|
|
{
|
|
var frame = JSON.parse(json_str);
|
|
var frame_str = "Rx: "+ Bytes2Str(frame);
|
|
ShowCommMes(frame_str,MesgType.MESG_TYPE_INFO);
|
|
mc_1_excued_rtv = 0;
|
|
mc_1_excuedcmd = frame[4];
|
|
//心跳包拦截
|
|
if(frame[0] == mc1_heartbeat_head[0] &&frame[1] == mc1_heartbeat_head[1]&&frame[1] == mc1_heartbeat_head[1] )
|
|
{
|
|
MC1_HeartBeat(frame);
|
|
return;
|
|
}
|
|
if(frame[2] == 0x42)
|
|
{
|
|
if(frame[6] != 0)
|
|
{
|
|
ShowCommMes("获取执行结果失败",MesgType.MESG_TYPE_ERROR);
|
|
mc_1_excued_rtv = 1;
|
|
BTErrorCount(1);
|
|
return;
|
|
}
|
|
if(frame.length > 7)
|
|
{
|
|
if(frame[9] != 0)
|
|
{
|
|
ShowCommMes("命令执行失败",MesgType.MESG_TYPE_ERROR);
|
|
mc_1_excued_rtv = 1;
|
|
BTErrorCount(1);
|
|
return;
|
|
}
|
|
if( 0 != MC_1_CRC8(frame,7,frame.length - 7))
|
|
{
|
|
ShowCommMes("数据校验失败",MesgType.MESG_TYPE_ERROR);
|
|
mc_1_excued_rtv = 1;
|
|
BTErrorCount(1);
|
|
return;
|
|
}
|
|
}
|
|
|
|
BTInfoCount(1);
|
|
switch(frame[4])
|
|
{
|
|
case 1: ShowCommMes("全擦除执行成功",MesgType.MESG_TYPE_OK);break;
|
|
case 2: ShowCommMes("跳转执行成功",MesgType.MESG_TYPE_OK);break;
|
|
case 4: ShowCommMes("充电命令执行成功",MesgType.MESG_TYPE_OK);break;
|
|
case 5: ShowCommMes("放电命令执行成功",MesgType.MESG_TYPE_OK);break;
|
|
case 8: ShowCommMes("CRC值: "+Bytes2Str(frame.slice(10,frame.length-1)),MesgType.MESG_TYPE_OK);break;
|
|
case 9: ShowCommMes("读取数据: "+Bytes2Str(frame.slice(10,frame.length-1)),MesgType.MESG_TYPE_OK);break;
|
|
case 10: ShowCommMes("擦除指定空间执行成功 ",MesgType.MESG_TYPE_OK);break;
|
|
case 11: ShowCommMes("写数据成功 ",MesgType.MESG_TYPE_OK);break;
|
|
|
|
}
|
|
|
|
}else if((frame[2] == 0x49) && (frame.length > 8))
|
|
{
|
|
if(frame[8] != 0)
|
|
{
|
|
ShowCommMes("命令执行超时",MesgType.MESG_TYPE_ERROR);
|
|
mc_1_excued_rtv = 1;
|
|
return;
|
|
}
|
|
BTInfoCount(1);
|
|
switch(frame[4])
|
|
{
|
|
case 12: ShowCommMes("MTP使能执行成功",MesgType.MESG_TYPE_OK);break;
|
|
case 13: ShowCommMes("片擦执行成功",MesgType.MESG_TYPE_OK);break;
|
|
case 14: ShowCommMes("块擦命令执行成功",MesgType.MESG_TYPE_OK);break;
|
|
case 15: ShowCommMes("页擦命令执行成功",MesgType.MESG_TYPE_OK);break;
|
|
}
|
|
|
|
}else{
|
|
ShowCommMes("错误命令",MesgType.MESG_TYPE_ERROR);
|
|
}
|
|
}
|
|
|
|
async function MC_1_IICDownLoadFirmware(file_size)
|
|
{
|
|
ShowCommMes("开始升级",MesgType.MESG_TYPE_INFO);
|
|
if(file_size < 1)
|
|
{
|
|
return ;
|
|
}
|
|
var count = 0;
|
|
var begaddr = parseInt($("#mc_iic_setaddr").val(),16);
|
|
var write_len = 0;
|
|
var rtv = 0;
|
|
while(count < file_size)
|
|
{
|
|
/*************设置MTP操作地址**********************/
|
|
mc1_oper.cmd = 18;
|
|
mc1_oper.mc_iic_setaddr = begaddr + count;
|
|
var json_str = JSON.stringify(mc1_oper);
|
|
if( typeof(mc_1_qthandle) != "undefined" && mc_1_qthandle != null )
|
|
{
|
|
mc_1_qthandle.ExcueCmd(json_str);
|
|
}
|
|
mc_1_excuedcmd = -1;
|
|
rtv = await MC_1WaitCmdExcu(mc1_oper.cmd,1000);
|
|
if(0 != rtv)
|
|
{
|
|
return;
|
|
}
|
|
ShowCommMes("设置操作地址: "+mc1_oper.mc_iic_setaddr.toString(16),MesgType.MESG_TYPE_INFO);
|
|
if((count+192) < file_size)
|
|
{
|
|
write_len = 192;
|
|
}else{
|
|
write_len = file_size - count;
|
|
}
|
|
/************写缓存区中的固件数据******************/
|
|
|
|
if( typeof(mc_1_qthandle) != "undefined" && mc_1_qthandle != null )
|
|
{
|
|
mc_1_qthandle.IICDownLoadFirmwareFrame(20,count,write_len);
|
|
}
|
|
mc_1_excuedcmd = -1;
|
|
rtv = await MC_1WaitCmdExcu(20,1000);
|
|
if(0 != rtv)
|
|
{
|
|
return;
|
|
}
|
|
count += write_len;
|
|
}
|
|
}
|
|
|
|
async function MC_1_VBUSDownLoadFirmware(file_size,crc)
|
|
{
|
|
|
|
if(file_size < 1)
|
|
{
|
|
return ;
|
|
}
|
|
mc1_oper.file_crc = crc;
|
|
var count = 0;
|
|
var begaddr = parseInt($("#mc_boot_writeaddr").val(),16);
|
|
var write_len = 0;
|
|
var rtv = 0;
|
|
var mes = "开始升级,文件大小 "+file_size;
|
|
mes += "起始地址 "+ begaddr;
|
|
ShowCommMes(mes,MesgType.MESG_TYPE_INFO);
|
|
while(count < file_size)
|
|
{
|
|
if((count+192) < file_size)
|
|
{
|
|
write_len = 192;
|
|
}else{
|
|
write_len = file_size - count;
|
|
}
|
|
ShowCommMes("地址: "+begaddr.toString(16)+" 写入长度 "+ write_len,MesgType.MESG_TYPE_INFO);
|
|
if( typeof(mc_1_qthandle) != "undefined" && mc_1_qthandle != null )
|
|
{
|
|
mc_1_qthandle.VBUSDownLoadFirmwareFrame(11, begaddr, count, write_len);
|
|
}
|
|
mc_1_excuedcmd = -1;
|
|
rtv = await MC_1WaitCmdExcu(11,1000);
|
|
if(0 != rtv )
|
|
{
|
|
return;
|
|
}
|
|
count += write_len;
|
|
begaddr+= write_len;
|
|
}
|
|
|
|
}
|
|
|
|
function MC_1_CRC8(buf,offset,len)
|
|
{
|
|
var crc = 0;
|
|
var count = 0;
|
|
while(count < len)
|
|
{
|
|
crc ^= (buf[offset++] & 0xFF);
|
|
count++;
|
|
crc &= 0xFF;
|
|
}
|
|
return crc;
|
|
}
|