461 lines
10 KiB
JavaScript
461 lines
10 KiB
JavaScript
var HexBase = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
|
||
var EProCmdV = {
|
||
WRITE_UID_ : 0x01,
|
||
WRITE_PWD_ : 0x02,
|
||
READ_UID_ : 0x03,
|
||
READ_PWD_ : 0x04,
|
||
VERIFY_UID_ : 0x05,
|
||
VERIFY_PWD_ : 0x06,
|
||
READ_STATE_ : 0x07,
|
||
SET_DELAY_ : 0x08,
|
||
SET_DELAY_ALL_ : 0x09,
|
||
WRITE_ADDR_ : 0x0A,
|
||
CHARGE_ : 0x0B,
|
||
DISCHARGE_ : 0x0C,
|
||
AMEND_ : 0x0D,
|
||
READ_FIRWARE_ : 0x0E,
|
||
READ_ADDR_ : 0x0F,
|
||
BOOM_ : 0x10,
|
||
INSPECT_SLAVE_ : 0x11,
|
||
BASE_CHECK_ : 0x12,
|
||
SLAVE_ONLINE_ : 0x13,
|
||
ALL_SLEEP : 0x14,
|
||
READ_DELAY_ : 0x16,
|
||
BC_WRITE_ADDR_ : 0x17,
|
||
READ_AMEND_V_ : 0x18,
|
||
READ_S_BUS_C_ : 0x19,
|
||
READ_S_BUS_V_ : 0x1A,
|
||
SLAVE_BUS_CMD : 0x1B,
|
||
EQUEL_UID_FEA : 0x1C,
|
||
SET_PSWD_FLAG : 0x1D,
|
||
SET_SUPER_T_ : 0x1E,
|
||
MASTER_HARTBEAT_ : 0x20,
|
||
SET_BUS_MODE_ : 0x21,
|
||
BROADCAST_ADDR : 0xFF,
|
||
|
||
BUS_MODE_R_ : 0xFFFE,
|
||
BUS_MODE_B_ : 0xFFFD,
|
||
WAIT_ONLINE_ : 0xFFFC,
|
||
WAIT_RELEASE_ : 0xFFFB,
|
||
TRANS_DELAY_ : 0xFFFA,
|
||
|
||
|
||
S_A_ERROR_S : 0 , //从机应答错误状态
|
||
S_RA_WRITE_ID : 1 , //主机写入UUID param :15字节
|
||
S_RA_WRITE_PSW : 2 , //主机写入密码 param :8字节
|
||
S_RA_EQUAL_ID : 3 , //主机验证UUID param :13字节
|
||
S_RA_EQUAL_PSW : 4 , //主机验证密码 param :8字节
|
||
S_RA_SET_DELAY : 5 , //主机设置单发雷管的延时 param :2字节
|
||
S_RA_SET_ADDR : 7 , //设置从机的通讯地址 param :2字节 或 15+2(广播通过UID设置地址)
|
||
S_RA_OPER_CMD : 8 , //主机发送操作命令 param :1字节
|
||
S_RA_REQUEST_ACK : 9 , //主机发送的应答请求 param :0字节
|
||
S_RA_SET_BAUDRATE : 10 ,//设置通讯速率 param :2字节
|
||
S_R_SET_LOCAL : 11 ,//设置使用位置 param :8字节
|
||
S_R_SET_USETIME : 12 , //设置使用时间 param :2字节
|
||
S_R_HEARTBEAT : 13 ,//心跳包 param :0字节
|
||
S_R_FACTORY_SET : 14 ,//释放工厂模式 param :4字节
|
||
S_UID_REQUEST : 15 ,//利用UID进行访问,只能用广播访问 param : {UID+(10bit地址+6bit功能码)+功能码参数}
|
||
S_UID_SEARCH : 16 ,//UID搜索功功能码
|
||
S_RA_EQUAL_UID_F : 17 ,//UID特征码验证
|
||
S_RA_SETSUPER_T : 18 ,//设置复位保存延时起爆时间
|
||
RA_REGISTER : 62 ,//读寄存器
|
||
WA_REGISTER : 63 ,//写4字节寄存器
|
||
|
||
S_CMD_READ_ID : 1 , //主机读取UUID
|
||
S_CMD_READ_PSW : 2 , //主机读取PSWD
|
||
S_CMD_READ_SYS_S : 3 , //主机读取系统状态
|
||
S_CMD_READ_VERSION : 4 , //主机读取系统版本
|
||
S_CMD_READ_LOCAL : 5 , //读取位置信息
|
||
S_CMD_READ_OPERTIME : 6 , //读取操作时间
|
||
S_CMD_READ_ADDR : 7 , //读取通讯地址
|
||
S_CMD_READ_DELAY : 8 , //主机读取延时设置
|
||
S_CMD_READ_SYS_F : 9 , //读取备份区的状态信息
|
||
|
||
S_CMD_CHARGE : 10 , //充电
|
||
S_CMD_DISCHARGE : 11 , //放电
|
||
S_CMD_CLK_CHECK : 12 , //时钟校准
|
||
S_CMD_BLAST : 13 , //起爆
|
||
S_CMD_SLEEP : 14 , //强制休眠,不在监听总线
|
||
S_CMD_INSPECT : 15 , //巡检
|
||
S_CMD_SYS_CHECK : 16 , //执行自检
|
||
//public final static byte CMD_SEARCH_UID : 17 //搜索UID
|
||
S_CMD_STOP_CHARGE : 18 , //停止充电
|
||
S_CMD_FAC_CHECK1 : 19 , //工厂自检
|
||
S_CMD_FAC_CHECK2 : 20 , //工厂自检
|
||
S_CND_READ_AMEND : 21 , //读校准值
|
||
S_CMD_FAC_CHECK3 : 22 , //工厂自检
|
||
S_CMD_READ_BUSV : 23 , //读总线电压
|
||
S_CMD_EQUEL_PWD : 24 , //密码验证置位
|
||
};
|
||
//十六进制字符串转字节数组
|
||
|
||
function HexStr2Bytes(str)
|
||
{
|
||
var pos = 0;
|
||
var len = str.length;
|
||
if(len %2 != 0)
|
||
{
|
||
return null;
|
||
|
||
}
|
||
len /= 2;
|
||
var hexA = new Array();
|
||
for(var i=0; i<len; i++)
|
||
{
|
||
var s = str.substr(pos, 2);
|
||
var v = parseInt(s, 16);
|
||
hexA.push(v);
|
||
pos += 2;
|
||
}
|
||
/*
|
||
len = hexA.length;
|
||
var index = 0;
|
||
while(index < (len-index-1))
|
||
{
|
||
pos = hexA[index];
|
||
hexA[index] = hexA[len-index - 1];
|
||
hexA[len-index - 1] = pos;
|
||
index++;
|
||
}*/
|
||
|
||
return hexA;
|
||
|
||
}
|
||
function HexString2ByteArray(src)
|
||
{
|
||
var regexp = /(,|;|0x|0X)/g;
|
||
var w_data = src.replace(regexp," ");
|
||
var w_data_array = w_data.split(" ");
|
||
var w_data_temp = '' ;
|
||
for(var index = 0; index < w_data_array.length;index++)
|
||
{
|
||
var str = w_data_array[index];
|
||
if(str.length < 1)
|
||
{
|
||
continue;
|
||
}else if(str.length == 1)
|
||
{
|
||
str = "0"+str;
|
||
}
|
||
if(str.length != 2)
|
||
{
|
||
continue;
|
||
}
|
||
w_data_temp += str;
|
||
}
|
||
w_data = HexStr2Bytes(w_data_temp);
|
||
return w_data;
|
||
}
|
||
function Str2Bytes(str)
|
||
{
|
||
var pos = 0;
|
||
var len = str.length;
|
||
if(len < 1)
|
||
{
|
||
return null;
|
||
|
||
}
|
||
var buf = new Array();
|
||
for(var i=0; i<len; i++)
|
||
{
|
||
var v = parseInt(str.charCodeAt(i), 10);
|
||
buf.push(v);
|
||
pos += 2;
|
||
}
|
||
return buf;
|
||
}
|
||
//字节数组转十六进制字符串
|
||
function Bytes2Str(arr)
|
||
{
|
||
var str = "";
|
||
for(var i=0; i<arr.length; i++)
|
||
{
|
||
str += HexBase[(arr[i] >> 4) & 0x0F];
|
||
str += HexBase[(arr[i]) & 0x0F];
|
||
if(i != arr.length )
|
||
str+= " ";
|
||
}
|
||
return str;
|
||
}
|
||
|
||
function Bytes2ChartArray(arr)
|
||
{
|
||
var str = [];
|
||
var index = 0;
|
||
for(var i=0; i<arr.length; i++)
|
||
{
|
||
str[index++]= HexBase[(arr[i] >> 4) & 0x0F];
|
||
str[index++]= HexBase[(arr[i]) & 0x0F];
|
||
|
||
}
|
||
return str;
|
||
}
|
||
|
||
|
||
function Byte2Hex(data)
|
||
{
|
||
var str = "";
|
||
str += HexBase[(data >> 4) & 0x0F];
|
||
str += HexBase[(data) & 0x0F];
|
||
return str;
|
||
}
|
||
|
||
function Bytes2ULong(arr)
|
||
{
|
||
var data_l = 0;
|
||
for(i = 0; i < arr.length; i++)
|
||
{
|
||
data_l += (arr[i] & 0xFF) << (8*i);
|
||
}
|
||
return data_l;
|
||
}
|
||
|
||
function Bytes2UShort(arr){
|
||
var data_s = Bytes2ULong(arr);
|
||
if((data_s & 0x8000) > 0)
|
||
{
|
||
data_s = (65536 - data_s)*-1;
|
||
}
|
||
return data_s;
|
||
|
||
}
|
||
|
||
function IntFormat(charcount,val)
|
||
{
|
||
var buf_ = new Array();
|
||
for(var count_ = 0 ; count_ < charcount; count_++)
|
||
{
|
||
buf_.push(val % 10);
|
||
val = parseInt(val / 10);
|
||
}
|
||
var str_ = "";
|
||
while(charcount > 0)
|
||
{
|
||
charcount--;
|
||
str_ += buf_[charcount];
|
||
}
|
||
return str_;
|
||
}
|
||
|
||
function ArrayCopy(src,dst,offset,len)
|
||
{
|
||
var len_
|
||
if(typeof(len) == "undefined" || len == null || len < 1)
|
||
{
|
||
if(src.length > offset)
|
||
len_ = src.length - offset;
|
||
else
|
||
return;
|
||
}else{
|
||
len_ = len;
|
||
}
|
||
if(offset < 0)
|
||
{
|
||
offset = 0;
|
||
}
|
||
var index = 0;
|
||
while(index < len_)
|
||
dst[index++] = src[offset++];
|
||
return dst;
|
||
}
|
||
function ArrayAppend(src,dst,offset,len)
|
||
{
|
||
var len_
|
||
if(typeof(len) == "undefined" || len == null || len < 1)
|
||
{
|
||
len_ = src.length;
|
||
}else{
|
||
len_ = len;
|
||
}
|
||
if(offset < 0)
|
||
{
|
||
offset = 0;
|
||
}
|
||
var index = 0;
|
||
while(index < len_)
|
||
dst[offset++] = src[index++];
|
||
return dst;
|
||
}
|
||
function Int2HexStr(intdata,spec,format)
|
||
{
|
||
var data = [];
|
||
var count = 0;
|
||
var hexdata = '';
|
||
var index = 0;
|
||
var index2 = 0;
|
||
var temp = '';
|
||
if((format == 0) && (intdata == 0))
|
||
{
|
||
return '0';
|
||
}
|
||
while(intdata > 0)
|
||
{
|
||
data[count++] = HexBase[intdata & 0x0F];
|
||
intdata >>= 4;
|
||
}
|
||
if((count %2) != 0)
|
||
{
|
||
data[count++] = '0';
|
||
}
|
||
index = 0;
|
||
while((count > 0) && ((count-1-index) >index))
|
||
{
|
||
temp = data[index];
|
||
data[index] = data[count-1-index];
|
||
data[count-1-index] = temp;
|
||
index++;
|
||
}
|
||
|
||
if(format > count){
|
||
index = 0;
|
||
if((format %2) > 0)
|
||
format++;
|
||
while(format > count)
|
||
{
|
||
if((index % 2) == 0)
|
||
{
|
||
hexdata += spec;
|
||
}
|
||
hexdata += '0';
|
||
format--;
|
||
index++;
|
||
}
|
||
}
|
||
index = 0;
|
||
while(index < count)
|
||
{
|
||
if((index % 2) == 0)
|
||
{
|
||
hexdata += spec;
|
||
}
|
||
hexdata += data[index++];
|
||
}
|
||
return hexdata;
|
||
|
||
}
|
||
function Crc8(buf)
|
||
{
|
||
var crc = 0;
|
||
var index = 0;
|
||
while(index < buf.length)
|
||
{
|
||
crc ^= buf[index++];
|
||
crc &= 0xFF;
|
||
}
|
||
return crc;
|
||
}
|
||
|
||
function PrapareUIDFeatrue(uidarray)
|
||
{
|
||
var index1 = 0;
|
||
var us_temp = 0;
|
||
var uidfeatrue = [];
|
||
var uid_f = uidarray[9];
|
||
//拷贝特征值
|
||
uidfeatrue[0] = 0;// uidarray[9];
|
||
//合并年月
|
||
uidfeatrue[1] = uidarray[3] - 0x30;
|
||
uidfeatrue[1] <<= 4;
|
||
if(uidarray[5] > 48)
|
||
{
|
||
uidfeatrue[1] += 0x0A;
|
||
}
|
||
uidfeatrue[1] += (uidarray[6] - 0x30 );
|
||
//特征码于日期调整
|
||
uidarray[9] = uidarray[8];
|
||
uidarray[8] = uidarray[7];
|
||
//将日期和流水号转为3字节int
|
||
us_temp = 0;
|
||
for(var index1 = 8; index1 < 15; index1++)
|
||
{
|
||
us_temp *= 10;
|
||
us_temp += (uidarray[index1] - 0x30 );
|
||
}
|
||
for(var index1 = 0; index1 < 3; index1++)
|
||
{
|
||
uidfeatrue[2+index1] = us_temp & 0xFF;
|
||
us_temp >>= 8;
|
||
}
|
||
for(var index = 0; index < 4;index++)
|
||
{
|
||
uidfeatrue[index] = uidfeatrue[index+1];
|
||
}
|
||
uidfeatrue[4] = uid_f;
|
||
return uidfeatrue;
|
||
// Mem_Copy(searchfeatrue,uidfeatrue,6);
|
||
// index1 = searchfeatrue[4];
|
||
// searchfeatrue[4] = searchfeatrue[2];
|
||
// searchfeatrue[2] = index1;
|
||
}
|
||
|
||
function PrapareUIDFeatrue2(uidarray)
|
||
{
|
||
var index1 = 0;
|
||
var us_temp = 0;
|
||
var uidfeatrue = [];
|
||
//拷贝特征值
|
||
uidfeatrue[0] = uidarray[9];
|
||
//合并年月
|
||
uidfeatrue[1] = uidarray[3] - 0x30;
|
||
uidfeatrue[1] <<= 4;
|
||
if(uidarray[5] > 48)
|
||
{
|
||
uidfeatrue[1] += 0x0A;
|
||
}
|
||
uidfeatrue[1] += (uidarray[6] - 0x30 );
|
||
//特征码于日期调整
|
||
uidarray[9] = uidarray[8];
|
||
uidarray[8] = uidarray[7];
|
||
//将日期和流水号转为3字节int
|
||
us_temp = 0;
|
||
for(var index1 = 8; index1 < 15; index1++)
|
||
{
|
||
us_temp *= 10;
|
||
us_temp += (uidarray[index1] - 0x30 );
|
||
}
|
||
for(var index = 0; index < 3;index++)
|
||
{
|
||
uidfeatrue[2+index] = us_temp & 0xFF;
|
||
us_temp >>= 8;
|
||
}
|
||
return uidfeatrue;
|
||
// Mem_Copy(searchfeatrue,uidfeatrue,6);
|
||
// index1 = searchfeatrue[4];
|
||
// searchfeatrue[4] = searchfeatrue[2];
|
||
// searchfeatrue[2] = index1;
|
||
}
|
||
|
||
function Epro_CmdData(addr,func,cmd,param,read_len)
|
||
{
|
||
var bufdata = [];
|
||
var index = 0;
|
||
addr <<= 6;
|
||
addr |= (func & 0x3F);
|
||
bufdata[index++] = addr & 0xFF;
|
||
bufdata[index++] = (addr>>8) & 0xFF;
|
||
if(func == 0x08 || func == 0x0A)
|
||
{
|
||
bufdata[index++] = cmd;
|
||
}
|
||
if(typeof(param) != "undefined" && param != null)
|
||
{
|
||
for(i = 0; i < param.length;i++)
|
||
{
|
||
bufdata[index++] = param[i];
|
||
}
|
||
}
|
||
var crc = Crc8(bufdata);
|
||
bufdata[index++] = crc;
|
||
var bufdata2 = [];
|
||
bufdata2[0] = index;
|
||
bufdata2[1] = read_len;
|
||
for(var i = 0; i < index ; i++)
|
||
{
|
||
bufdata2[i+2] = bufdata[i];
|
||
}
|
||
return bufdata2;
|
||
|
||
}
|
||
|
||
|