react-native-obd-retriver
Version:
A React Native hook library to manage Bluetooth Low Energy connections and communication with ELM327 OBD-II adapters.
2 lines • 11.7 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ECUProvider=exports.ECUContext=void 0;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=_interopRequireWildcard(require("react"));var _reactNativeBluetoothObdManager=require("react-native-bluetooth-obd-manager");var _logger=require("../../utils/logger");var _connectionService=require("../services/connectionService");var _constants=require("../utils/constants");var _types=require("../utils/types");var _ECUReducer=require("./ECUReducer");var _jsxRuntime=require("react/jsx-runtime");var _this=this,_jsxFileName="/Users/rakshitbharat/hardware/react-native-obd-retriver/src/ecu/context/ECUContext.tsx";function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r;})(e);}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u];}return n.default=e,t&&t.set(e,n),n;}var ECUContext=exports.ECUContext=(0,_react.createContext)(null);var ECUProvider=exports.ECUProvider=function ECUProvider(_ref){var children=_ref.children;var _useReducer=(0,_react.useReducer)(_ECUReducer.ecuReducer,_ECUReducer.initialState),_useReducer2=(0,_slicedToArray2.default)(_useReducer,2),state=_useReducer2[0],dispatch=_useReducer2[1];var _useBluetooth=(0,_reactNativeBluetoothObdManager.useBluetooth)(),bluetoothSendCommand=_useBluetooth.sendCommand,connectedDevice=_useBluetooth.connectedDevice;var isBluetoothConnected=!!connectedDevice;var sendCommand=(0,_react.useCallback)(function(){var _ref2=(0,_asyncToGenerator2.default)(function*(command,timeout){if(!isBluetoothConnected||!bluetoothSendCommand){yield _logger.log.warn('[ECUContext] Attempted to send command while Bluetooth disconnected or command function unavailable:',{command:command});return null;}try{yield _logger.log.debug(`[ECUContext] Sending command via BT hook: ${command}`,{timeout:timeout});var response=yield bluetoothSendCommand(command,typeof timeout==='number'?{timeout:timeout}:timeout);yield _logger.log.debug(`[ECUContext] Received response for "${command}": ${response!=null?response:'null'}`);return response;}catch(error){var errorMessage=error instanceof Error?error.message:String(error);yield _logger.log.error(`[ECUContext] Error sending command "${command}" via BT hook:`,{error:errorMessage,stack:error instanceof Error?error.stack:undefined});return null;}});return function(_x,_x2){return _ref2.apply(this,arguments);};}(),[isBluetoothConnected,bluetoothSendCommand]);var connectWithECU=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){dispatch({type:_types.ECUActionType.CONNECT_START});yield _logger.log.info('[ECUContext] connectWithECU called');if(!isBluetoothConnected){var errorMsg='Bluetooth device not connected. Please connect via Bluetooth first.';yield _logger.log.error(`[ECUContext] Connection failed: ${errorMsg}`);dispatch({type:_types.ECUActionType.CONNECT_FAILURE,payload:{error:errorMsg}});return false;}try{var result=yield(0,_connectionService.connectToECU)(sendCommand);if(result.success){var _result$protocol,_result$protocolName,_result$voltage,_result$detectedEcus,_result$protocolName2,_result$protocol2;var payload={protocol:(_result$protocol=result.protocol)!=null?_result$protocol:null,protocolName:(_result$protocolName=result.protocolName)!=null?_result$protocolName:null,voltage:(_result$voltage=result.voltage)!=null?_result$voltage:null,detectedEcuAddresses:(_result$detectedEcus=result.detectedEcus)!=null?_result$detectedEcus:[]};dispatch({type:_types.ECUActionType.CONNECT_SUCCESS,payload:payload});yield _logger.log.info(`[ECUContext] ECU Connection successful. Protocol: ${(_result$protocolName2=result.protocolName)!=null?_result$protocolName2:'Unknown'} (${(_result$protocol2=result.protocol)!=null?_result$protocol2:'N/A'})`);return true;}else{var _result$error;var _errorMsg=(_result$error=result.error)!=null?_result$error:'ECU connection process failed.';dispatch({type:_types.ECUActionType.CONNECT_FAILURE,payload:{error:_errorMsg}});yield _logger.log.error(`[ECUContext] ECU Connection failed: ${_errorMsg}`);return false;}}catch(error){var _errorMsg2;if(error instanceof Error){_errorMsg2=`ECU Connection exception: ${error.message}`;yield _logger.log.error('[ECUContext] Connection exception details:',{message:error.message,stack:error.stack});}else{_errorMsg2=`ECU Connection exception: ${String(error)}`;yield _logger.log.error('[ECUContext] Connection exception (non-Error):',{error:error});}dispatch({type:_types.ECUActionType.CONNECT_FAILURE,payload:{error:_errorMsg2}});return false;}}),[sendCommand,isBluetoothConnected]);var disconnectECU=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){yield _logger.log.info('[ECUContext] disconnectECU called');if(state.status===_constants.ECUConnectionStatus.CONNECTED||state.status===_constants.ECUConnectionStatus.CONNECTING){try{yield(0,_connectionService.disconnectFromECU)(sendCommand);}catch(e){var errorMsg=e instanceof Error?e.message:String(e);yield _logger.log.warn('[ECUContext] Error during ECU service disconnect (ATPC):',{error:errorMsg});}finally{dispatch({type:_types.ECUActionType.DISCONNECT});yield _logger.log.info('[ECUContext] Internal ECU state reset to DISCONNECTED.');}}else{yield _logger.log.debug('[ECUContext] Already disconnected (ECU state). No action needed.');}}),[sendCommand,state.status]);var getECUInformation=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){if(state.status!==_constants.ECUConnectionStatus.CONNECTED){yield _logger.log.warn('[ECUContext] Cannot get ECU info: Not connected to ECU.');return;}try{var _info$voltage;var info=yield(0,_connectionService.getAdapterInfo)(sendCommand);var payload={voltage:(_info$voltage=info.voltage)!=null?_info$voltage:null};dispatch({type:_types.ECUActionType.SET_ECU_INFO,payload:payload});yield _logger.log.debug('[ECUContext] ECU information updated.',{voltage:info.voltage});}catch(error){var errorMsg=error instanceof Error?error.message:String(error);yield _logger.log.error('[ECUContext] Failed to get ECU information:',{error:errorMsg});}}),[sendCommand,state.status]);var getActiveProtocol=(0,_react.useCallback)(function(){return{protocol:state.activeProtocol,name:state.protocolName};},[state.activeProtocol,state.protocolName]);var getVIN=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){if(state.status!==_constants.ECUConnectionStatus.CONNECTED){yield _logger.log.warn('[ECUContext] Cannot get VIN: Not connected to ECU.');return null;}try{return yield(0,_connectionService.getVehicleVIN)(sendCommand);}catch(error){var errorMsg=error instanceof Error?error.message:String(error);yield _logger.log.error('[ECUContext] Failed to get VIN:',{error:errorMsg});return null;}}),[sendCommand,state.status]);var clearDTCs=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){var skipVerification=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;if(state.status!==_constants.ECUConnectionStatus.CONNECTED){yield _logger.log.warn('[ECUContext] Cannot clear DTCs: Not connected to ECU.');return false;}dispatch({type:_types.ECUActionType.CLEAR_DTCS_START});try{var success=yield(0,_connectionService.clearVehicleDTCs)(sendCommand,skipVerification);if(success){dispatch({type:_types.ECUActionType.CLEAR_DTCS_SUCCESS});}else{dispatch({type:_types.ECUActionType.CLEAR_DTCS_FAILURE,payload:{error:'Failed to clear DTCs (reported by service)'}});}return success;}catch(error){var errorMsg=error instanceof Error?error.message:String(error);dispatch({type:_types.ECUActionType.CLEAR_DTCS_FAILURE,payload:{error:`Clear DTCs exception: ${errorMsg}`}});yield _logger.log.error('[ECUContext] Clear DTCs exception:',{error:errorMsg});return false;}}),[sendCommand,state.status]);var getRawCurrentDTCs=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){if(state.status!==_constants.ECUConnectionStatus.CONNECTED){yield _logger.log.warn('[ECUContext] Cannot get raw current DTCs: Not connected to ECU.');return null;}dispatch({type:_types.ECUActionType.FETCH_RAW_DTCS_START});try{var data=yield(0,_connectionService.getRawDTCs)(sendCommand,_constants.OBD_MODE.CURRENT_DTC);var payload={data:data};dispatch({type:_types.ECUActionType.FETCH_RAW_CURRENT_DTCS_SUCCESS,payload:payload});return data;}catch(error){var errorMsg=error instanceof Error?error.message:String(error);dispatch({type:_types.ECUActionType.FETCH_RAW_DTCS_FAILURE,payload:{error:`Failed to get raw current DTCs: ${errorMsg}`}});yield _logger.log.error('[ECUContext] Get raw current DTCs exception:',{error:errorMsg});return null;}}),[sendCommand,state.status]);var getRawPendingDTCs=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){if(state.status!==_constants.ECUConnectionStatus.CONNECTED){yield _logger.log.warn('[ECUContext] Cannot get raw pending DTCs: Not connected to ECU.');return null;}dispatch({type:_types.ECUActionType.FETCH_RAW_DTCS_START});try{var data=yield(0,_connectionService.getRawDTCs)(sendCommand,_constants.OBD_MODE.PENDING_DTC);var payload={data:data};dispatch({type:_types.ECUActionType.FETCH_RAW_PENDING_DTCS_SUCCESS,payload:payload});return data;}catch(error){var errorMsg=error instanceof Error?error.message:String(error);dispatch({type:_types.ECUActionType.FETCH_RAW_DTCS_FAILURE,payload:{error:`Failed to get raw pending DTCs: ${errorMsg}`}});yield _logger.log.error('[ECUContext] Get raw pending DTCs exception:',{error:errorMsg});return null;}}),[sendCommand,state.status]);var getRawPermanentDTCs=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){if(state.status!==_constants.ECUConnectionStatus.CONNECTED){yield _logger.log.warn('[ECUContext] Cannot get raw permanent DTCs: Not connected to ECU.');return null;}dispatch({type:_types.ECUActionType.FETCH_RAW_DTCS_START});try{var data=yield(0,_connectionService.getRawDTCs)(sendCommand,_constants.OBD_MODE.PERMANENT_DTC);var payload={data:data};dispatch({type:_types.ECUActionType.FETCH_RAW_PERMANENT_DTCS_SUCCESS,payload:payload});return data;}catch(error){var errorMsg=error instanceof Error?error.message:String(error);dispatch({type:_types.ECUActionType.FETCH_RAW_DTCS_FAILURE,payload:{error:`Failed to get raw permanent DTCs: ${errorMsg}`}});yield _logger.log.error('[ECUContext] Get raw permanent DTCs exception:',{error:errorMsg});return null;}}),[sendCommand,state.status]);var contextValue=(0,_react.useMemo)(function(){return{state:state,connectWithECU:connectWithECU,disconnectECU:disconnectECU,getECUInformation:getECUInformation,getActiveProtocol:getActiveProtocol,getVIN:getVIN,clearDTCs:clearDTCs,getRawCurrentDTCs:getRawCurrentDTCs,getRawPendingDTCs:getRawPendingDTCs,getRawPermanentDTCs:getRawPermanentDTCs,sendCommand:sendCommand};},[state,connectWithECU,disconnectECU,getECUInformation,getActiveProtocol,getVIN,clearDTCs,getRawCurrentDTCs,getRawPendingDTCs,getRawPermanentDTCs,sendCommand]);return(0,_jsxRuntime.jsx)(ECUContext.Provider,{value:contextValue,children:children});};
//# sourceMappingURL=ECUContext.js.map