Files
python_tools/web/layui/mc-1.js
2024-01-14 22:38:04 +08:00

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;
}