obd-raw-data-parser
Version:
A React Native hook library to manage Bluetooth Low Energy connections and communication with ELM327 OBD-II adapters.
2 lines • 4.7 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.NonCanDecoder=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _logger=require("../../logger");var _BaseDecoder2=require("./BaseDecoder");var _utils=require("../../utils");var _dtcConverter=require("../utils/dtcConverter");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2.default)(o),(0,_possibleConstructorReturn2.default)(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2.default)(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var NonCanDecoder=exports.NonCanDecoder=function(_BaseDecoder){function NonCanDecoder(){(0,_classCallCheck2.default)(this,NonCanDecoder);return _callSuper(this,NonCanDecoder,arguments);}(0,_inherits2.default)(NonCanDecoder,_BaseDecoder);return(0,_createClass2.default)(NonCanDecoder,[{key:"_determineFrameType",value:function _determineFrameType(frame){var colonIndex=frame.indexOf(58);return colonIndex!==-1?'colon':'no-colon';}},{key:"_extractBytesFromColonFrame",value:function _extractBytesFromColonFrame(frame,colonIndex){var dataStartIndex=colonIndex+1;while(dataStartIndex<frame.length&&frame[dataStartIndex]===32){dataStartIndex++;}return this._extractBytesFromData(frame.slice(dataStartIndex));}},{key:"_extractBytesFromNoColonFrame",value:function _extractBytesFromNoColonFrame(frame){var dataStartIndex=0;while(dataStartIndex<frame.length&&frame[dataStartIndex]===32){dataStartIndex++;}return this._extractBytesFromData(frame.slice(dataStartIndex));}},{key:"_extractBytesFromData",value:function _extractBytesFromData(dataArray){var bytes=[];var hexString=(0,_utils.byteArrayToString)(dataArray).replace(/[\s\x00-\x1F]/g,'');for(var i=0;i<hexString.length;i+=2){var pair=hexString.substr(i,2);if(pair.length===2){bytes.push(pair);}}(0,_logger.log)('debug','Converted ASCII to bytes:',JSON.stringify(bytes));return bytes;}},{key:"decodeDTCs",value:function decodeDTCs(rawResponseBytes){try{this.reset();var dtcs=new Set();for(var frameIndex=0;frameIndex<rawResponseBytes.length;frameIndex++){var frame=rawResponseBytes[frameIndex];if(!Array.isArray(frame)||frame.length===0)continue;var frameType=this._determineFrameType(frame);var bytes=void 0;if(frameType==='colon'){bytes=this._extractBytesFromColonFrame(frame,frame.indexOf(58));}else{bytes=this._extractBytesFromNoColonFrame(frame);}if(!bytes||bytes.length===0)continue;if(frameIndex===0){var modeResponse=(0,_utils.parseHexInt)(bytes[0]);if(modeResponse===this.getModeResponseByte()){bytes=bytes.slice(1);}else if(modeResponse===0x01&&bytes.length>=3){var responseCode=(0,_utils.parseHexInt)(bytes[1]);var serviceId=(0,_utils.parseHexInt)(bytes[2]);if(responseCode===0x7f){(0,_logger.log)('debug',`KWP2000 negative response detected: 7F ${serviceId.toString(16).toUpperCase()}`);return[];}}}for(var i=0;i<bytes.length;i+=2){if(i+1>=bytes.length){this.leftoverByte=bytes[i];break;}var dtc=this._decodeDTC(bytes[i],bytes[i+1]);if(dtc){this.rawDtcObjects.push(dtc);var dtcString=this._dtcToString(dtc);if(dtcString){dtcs.add(dtcString);this.setDTC(dtcString);}}}}return Array.from(dtcs);}catch(error){(0,_logger.log)('error','Failed to parse response:',String(error));return[];}}},{key:"setDTC",value:function setDTC(_dtc){}},{key:"getModeResponseByte",value:function getModeResponseByte(){return 0;}},{key:"setModeResponse",value:function setModeResponse(modeResponse){Object.defineProperty(this,'getModeResponseByte',{value:function value(){return modeResponse;}});}},{key:"_getDTCInfo",value:function _getDTCInfo(){return undefined;}},{key:"_decodeDTC",value:function _decodeDTC(byte1,byte2){try{if(!byte1||!byte2||byte1==='00'&&byte2==='00'){return null;}var combinedHex=byte1.padStart(2,'0')+byte2.padStart(2,'0');return(0,_dtcConverter.hexToDTC)(combinedHex);}catch(error){(0,_logger.log)('error','Failed to decode DTC:',error);return null;}}},{key:"_dtcToString",value:function _dtcToString(dtc){return dtc;}}]);}(_BaseDecoder2.BaseDecoder);
//# sourceMappingURL=NonCan.js.map