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.17 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.DTCBaseDecoder=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _logger=require("../logger");var _Can=require("./Support/Can");var _NonCan=require("./Support/NonCan");var _utils=require("../utils");var _dtcDecoder=require("./utils/dtcDecoder");var DTC_MODES={MODE03:{REQUEST:'03',RESPONSE:0x43,DIVIDER:1,NAME:'CURRENT',DESCRIPTION:'Current DTCs'},MODE07:{REQUEST:'07',RESPONSE:0x47,DIVIDER:1,NAME:'PENDING',DESCRIPTION:'Pending DTCs'},MODE0A:{REQUEST:'0A',RESPONSE:0x4a,DIVIDER:1,NAME:'PERMANENT',DESCRIPTION:'Permanent DTCs'}};var DTCBaseDecoder=exports.DTCBaseDecoder=function(){function DTCBaseDecoder(config){(0,_classCallCheck2.default)(this,DTCBaseDecoder);var _config$isCan=config.isCan,isCan=_config$isCan===void 0?false:_config$isCan,serviceMode=config.serviceMode,troubleCodeType=config.troubleCodeType;this.serviceMode=serviceMode.toUpperCase();this.troubleCodeType=troubleCodeType;var modeResponse=this.getModeResponseByte();this.decoder=isCan?new _Can.CanDecoder(modeResponse):new _NonCan.NonCanDecoder();if(!isCan){this.decoder.setModeResponse(modeResponse);}else{this.decoder.setModeResponse(modeResponse);}var decoderAny=this.decoder;if(typeof decoderAny.setDTC!=='function'){decoderAny.setDTC=this.setDTC.bind(this);}}return(0,_createClass2.default)(DTCBaseDecoder,[{key:"decodeDTCs",value:function decodeDTCs(rawResponseBytes){if(!this.validateServiceMode(this.serviceMode)){return[];}var processedFrames=(0,_dtcDecoder.handleFrameSequence)(rawResponseBytes);(0,_logger.log)('debug','Decoding DTCs with processed frames:',processedFrames);return this.decoder.decodeDTCs(processedFrames);}},{key:"getRawDTCs",value:function getRawDTCs(){var rawDtcs=this.decoder.getRawDTCs();return rawDtcs.map(function(dtc){if(typeof dtc==='string'){var match=dtc.match(/^([PCBU])(\d)(\d)(\d{2})$/);if(match){var _match=(0,_slicedToArray2.default)(match,5),category=_match[1],d2=_match[2],d3=_match[3],d45=_match[4];return{type:'PCBU'.indexOf(category),digit2:parseInt(d2),digit3:parseInt(d3),digits45:parseInt(d45,16)};}(0,_logger.log)('warn',`Invalid DTC string format encountered: ${dtc}`);return{type:0,digit2:0,digit3:0,digits45:0};}return dtc;});}},{key:"parseDTCStatus",value:function parseDTCStatus(statusByte){var statusHex=(0,_utils.toHexString)(statusByte);(0,_logger.log)('debug',`Parsing DTC status: ${statusHex}`);var milActive=(statusByte&0x80)!==0;if(!milActive&&statusByte<0x20){return{milActive:false,dtcCount:statusByte,currentError:false,pendingError:false,confirmedError:false,egrSystem:false,oxygenSensor:false,catalyst:false};}return{milActive:milActive,dtcCount:milActive?statusByte&0x7f:statusByte&0x0f,currentError:(statusByte&0x20)!==0,pendingError:(statusByte&0x10)!==0,confirmedError:(statusByte&0x08)!==0,egrSystem:(statusByte&0x04)!==0,oxygenSensor:(statusByte&0x02)!==0,catalyst:(statusByte&0x01)!==0};}},{key:"getModeResponseByte",value:function getModeResponseByte(){if(!this.serviceMode){(0,_logger.log)('error',`Invalid service mode: ${this.serviceMode}`);return 0x43;}var upperMode=this.serviceMode.toUpperCase();var service=Object.values(DTC_MODES).find(function(s){return s.REQUEST===upperMode;});if(!service){(0,_logger.log)('error',`Invalid service mode: ${this.serviceMode}`);return 0x43;}return service.RESPONSE;}},{key:"validateServiceMode",value:function validateServiceMode(mode){if(!mode){(0,_logger.log)('error',`Invalid service mode: ${mode}`);return false;}var upperMode=mode.toUpperCase();var isValid=Object.values(DTC_MODES).some(function(service){return service.REQUEST===upperMode;});if(!isValid){(0,_logger.log)('error',`Invalid service mode: ${mode}`);}return isValid;}},{key:"setDTC",value:function setDTC(dtc){(0,_logger.log)('info',`Setting ${this.troubleCodeType} DTC: ${dtc}`);}}]);}();
//# sourceMappingURL=DTCBaseDecoder.js.map