@gopalroy/landu-package
Version:
landu package
83 lines (77 loc) • 2.56 kB
JavaScript
/**
* Created by Jesse on 2/25/14.
*/
;
var dataManager = require('./dataManager');
//ͨ�����ݰ�����ҵ������
exports.packetResolve=function(datagram){
var dataBuffer=dataManager.init(datagram,0);
if (dataBuffer.length < 0x0C){
console.log("���ݰ����ȹ���...");
return null;
}
var packetLeading =dataManager.nextWord();
if (packetLeading !== 0xAA55){
console.log('���ݰ�ͷ'+packetLeading+'δ֪...');
return null;
}
var packetLength = dataManager.nextWord();
var packetLenNot = dataManager.nextWord();
if ((packetLength | packetLenNot) !== 0xFFFF){
console.log("���ݰ�������֤ʧ��...");
return null;
}
var packetId =dataManager.nextByte();
var version = dataManager.nextByte();
var command=dataManager.nextWord();
var obdCode=dataManager.nextString();
dataManager.setOffset(packetLength);
var checksumInPacket = dataManager.nextWord();
var checksum=dataManager.getCheckSum(2,packetLength);
if (checksum !== checksumInPacket){
console.log("���ݰ�У�����֤ʧ��,����ֵ��"+checksum+",����ֵ��"+checksumInPacket);
return null;
}
var content= dataBuffer.slice(8, packetLength);
return {
data:dataBuffer,
leading:packetLeading,
length:packetLength,
lengthNot:packetLenNot,
packetId:packetId,
version:version,
content:content,
checksum:checksumInPacket,
command:command,
obdCode:obdCode
};
};
exports.packetBuild=function(packageJson,datagram){
var dataGramBuffer = null;
var offset = 0;
if (Buffer.isBuffer(datagram))
dataGramBuffer = datagram;
else
dataGramBuffer = new Buffer(datagram);
var dataBuffer = new Buffer(dataGramBuffer.length + 0x000A);
dataBuffer.writeUInt16BE(packageJson.leading, offset);
offset += 2;
dataBuffer.writeUInt16BE(dataGramBuffer.length + 0x0008, offset);
offset += 2;
dataBuffer.writeUInt16BE((0xFFFF - (dataGramBuffer.length + 0x0008)), offset);
offset += 2;
dataBuffer.writeUInt8(packageJson.packetId, offset);
offset += 1;
dataBuffer.writeUInt8(packageJson.version, offset);
offset += 1;
dataGramBuffer.copy(dataBuffer, offset);
offset += dataGramBuffer.length;
var checksum = 0;
var byteValue = 0;
for (var i = 2; i < offset; i++) {
byteValue = dataBuffer.readUInt8(i);
checksum += byteValue;
}
dataBuffer.writeUInt16BE(checksum, offset);
return dataBuffer;
};