UNPKG

@gopalroy/landu-package

Version:

landu package

83 lines (77 loc) 2.56 kB
/** * Created by Jesse on 2/25/14. */ 'use strict'; 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; };