diff --git a/src/ara/diag/dtc_information.cpp b/src/ara/diag/dtc_information.cpp index c35ae5fff..719bd2cc4 100644 --- a/src/ara/diag/dtc_information.cpp +++ b/src/ara/diag/dtc_information.cpp @@ -1,21 +1,33 @@ #include "./dtc_information.h" +#include "./diag_error_domain.h" namespace ara { namespace diag { - DTCInformation::DTCInformation(const ara::core::InstanceSpecifier &specifier) : mSpecifier{specifier}, - mControlDtcStatus{ControlDtcStatusType::kDTCSettingOff} + DTCInformation::DTCInformation(const core::InstanceSpecifier &specifier) : mSpecifier{specifier}, + mControlDtcStatus{ControlDtcStatusType::kDTCSettingOff} { } - ara::core::Result DTCInformation::GetCurrentStatus(uint32_t dtc) + core::Result DTCInformation::GetCurrentStatus(uint32_t dtc) { - /// @todo In case of out_of_range exception return kNoSuchDtc (108) error code - UdsDtcStatusByteType _status{mStatuses.at(dtc)}; - ara::core::Result _result{_status}; + try + { + UdsDtcStatusByteType _status{mStatuses.at(dtc)}; + core::Result _result{_status}; - return _result; + return _result; + } + catch (std::out_of_range) + { + core::ErrorDomain *_errorDomain{DiagErrorDomain::GetDiagDomain()}; + auto _diagErrorDomain{static_cast(_errorDomain)}; + core::ErrorCode _errorCode{_diagErrorDomain->MakeErrorCode(DiagErrc::kNoSuchDTC)}; + auto _result{core::Result::FromError(_errorCode)}; + + return _result; + } } void DTCInformation::SetCurrentStatus( @@ -65,37 +77,37 @@ namespace ara } } - ara::core::Result DTCInformation::SetDTCStatusChangedNotifier( + core::Result DTCInformation::SetDTCStatusChangedNotifier( std::function notifier) { // In contrast with the ARA standard, no evaluation is perfomed to validate the notifier pointer. mDtcStatusChangedNotifier = notifier; - ara::core::Result _result; + core::Result _result; return _result; } - ara::core::Result DTCInformation::GetNumberOfStoredEntries() + core::Result DTCInformation::GetNumberOfStoredEntries() { auto _size{static_cast(mStatuses.size())}; - ara::core::Result _result{_size}; + core::Result _result{_size}; return _result; } - ara::core::Result DTCInformation::SetNumberOfStoredEntriesNotifier( + core::Result DTCInformation::SetNumberOfStoredEntriesNotifier( std::function notifier) { // In contrast with the ARA standard, no evaluation is perfomed to validate the notifier pointer. mNumberOfStoredEntriesNotifier = notifier; - ara::core::Result _result; + core::Result _result; return _result; } - ara::core::Result DTCInformation::Clear(uint32_t dtc) + core::Result DTCInformation::Clear(uint32_t dtc) { - ara::core::Result _result; + auto _iterator{mStatuses.find(dtc)}; if (_iterator != mStatuses.end()) @@ -105,34 +117,40 @@ namespace ara { mNumberOfStoredEntriesNotifier(mStatuses.size()); } + + core::Result _result; + return _result; } else { - /// @todo Return kWrong error code - } + core::ErrorDomain *_errorDomain{DiagErrorDomain::GetDiagDomain()}; + auto _diagErrorDomain{static_cast(_errorDomain)}; + core::ErrorCode _errorCode{_diagErrorDomain->MakeErrorCode(DiagErrc::kWrongDtc)}; + auto _result{core::Result::FromError(_errorCode)}; - return _result; + return _result; + } } - ara::core::Result DTCInformation::GetControlDTCStatus() + core::Result DTCInformation::GetControlDTCStatus() { - ara::core::Result _result{mControlDtcStatus}; + core::Result _result{mControlDtcStatus}; return _result; } - ara::core::Result DTCInformation::SetControlDtcStatusNotifier( + core::Result DTCInformation::SetControlDtcStatusNotifier( std::function notifier) { // In contrast with the ARA standard, no evaluation is perfomed to validate the notifier pointer. mControlDtcStatusNotifier = notifier; - ara::core::Result _result; + core::Result _result; return _result; } - ara::core::Result DTCInformation::EnableControlDtc() + core::Result DTCInformation::EnableControlDtc() { - ara::core::Result _result; + core::Result _result; if (mControlDtcStatus != ControlDtcStatusType::kDTCSettingOn) { diff --git a/src/ara/diag/dtc_information.h b/src/ara/diag/dtc_information.h index c98ea881e..77ed160c5 100644 --- a/src/ara/diag/dtc_information.h +++ b/src/ara/diag/dtc_information.h @@ -44,7 +44,7 @@ namespace ara class DTCInformation { private: - const ara::core::InstanceSpecifier &mSpecifier; + const core::InstanceSpecifier &mSpecifier; std::map mStatuses; std::function mDtcStatusChangedNotifier; std::function mNumberOfStoredEntriesNotifier; @@ -54,14 +54,14 @@ namespace ara public: /// @brief Constructor /// @param specifier Instance specifier that owns the DTC information - explicit DTCInformation(const ara::core::InstanceSpecifier &specifier); + explicit DTCInformation(const core::InstanceSpecifier &specifier); ~DTCInformation() noexcept = default; /// @brief Get UDS DTC status byte of a certain DTC /// @param dtc DTC ID of interest /// @returns Requested USD DTC status byte if the DTC ID exists, otherwise an error - ara::core::Result GetCurrentStatus(uint32_t dtc); + core::Result GetCurrentStatus(uint32_t dtc); /// @brief Set UDS DTC status byte of a certain DTC /// @param dtc DTC ID of interest @@ -74,37 +74,37 @@ namespace ara /// @brief Set a notifer on any DTC status change /// @param notifier Callback to be invoked if the status of any DTC is changed /// @returns Error in case of invalid callback pointer - ara::core::Result SetDTCStatusChangedNotifier( + core::Result SetDTCStatusChangedNotifier( std::function notifier); /// @brief Get the number of stored DTC /// @returns Number of currently stored DTC in the primary fault memory - ara::core::Result GetNumberOfStoredEntries(); + core::Result GetNumberOfStoredEntries(); /// @brief Set a notifer on the number of stored DTC change /// @param notifier Callback to be invoked if the number of stored DTC is changed /// @returns Error in case of invalid callback pointer - ara::core::Result SetNumberOfStoredEntriesNotifier( + core::Result SetNumberOfStoredEntriesNotifier( std::function notifier); /// @brief Clear a DTC /// @param dtc ID of the DTC that should be removed /// @returns Error if the requested DTC ID does not exist - ara::core::Result Clear(uint32_t dtc); + core::Result Clear(uint32_t dtc); /// @brief Indicate whether the UDS DTC byte update is enabled or not /// @returns Control UDS status relates to the UDS service 0x85 - ara::core::Result GetControlDTCStatus(); + core::Result GetControlDTCStatus(); /// @brief Set a notifer on the control DTC status change /// @param notifier Callback to be invoked if the control DTC status is changed /// @returns Error in case of invalid callback pointer - ara::core::Result SetControlDtcStatusNotifier( + core::Result SetControlDtcStatusNotifier( std::function notifier); /// @brief Enforce enabling the USD DTC status byte update /// @returns No error - ara::core::Result EnableControlDtc(); + core::Result EnableControlDtc(); }; } } diff --git a/src/ara/diag/ecu_reset_request.cpp b/src/ara/diag/ecu_reset_request.cpp index ee229d6d9..f62ca92ea 100644 --- a/src/ara/diag/ecu_reset_request.cpp +++ b/src/ara/diag/ecu_reset_request.cpp @@ -167,7 +167,7 @@ namespace ara { if (mResetTypeFuture.valid()) { - /// @todo Reset the ECU based on the requested reset type + throw std::logic_error("ECU reset is not supported."); } else { diff --git a/src/ara/diag/security_access.cpp b/src/ara/diag/security_access.cpp index 2c9763974..c6311424d 100644 --- a/src/ara/diag/security_access.cpp +++ b/src/ara/diag/security_access.cpp @@ -59,7 +59,6 @@ namespace ara MetaInfo &metaInfo, CancellationHandler &&cancellationHandler) { - /// @todo Consider the cancellation handler uint8_t _nrc; OperationOutput _response; std::promise _resultPromise; @@ -99,6 +98,10 @@ namespace ara _suppressPositiveResponse); } } + else if (cancellationHandler.IsCanceled()) + { + GenerateNegativeResponse(_response, cGeneralReject); + } else { GenerateNegativeResponse(_response, _nrc); diff --git a/src/ara/diag/security_access.h b/src/ara/diag/security_access.h index c0343d9e6..556262342 100644 --- a/src/ara/diag/security_access.h +++ b/src/ara/diag/security_access.h @@ -46,6 +46,7 @@ namespace ara const size_t cKeyLength{2}; const uint8_t cSuppressPosRspMask{0x80}; + const uint8_t cGeneralReject{0x10}; const uint8_t cInvalidKey{0x35}; const uint8_t cExceededNumberOfAttempts{0x36}; diff --git a/src/ara/exec/deterministic_client.cpp b/src/ara/exec/deterministic_client.cpp index 0d3887da5..0980c7588 100644 --- a/src/ara/exec/deterministic_client.cpp +++ b/src/ara/exec/deterministic_client.cpp @@ -57,9 +57,8 @@ namespace ara { std::unique_lock _lock(mCycleMutex); mCycleConditionVariable.wait(_lock); - - /// @todo Return proper value based on the client current lifecycle core::Result _result{ActivationReturnType::kRun}; + return _result; } diff --git a/src/ara/exec/state_client.cpp b/src/ara/exec/state_client.cpp index fea5cc448..04df85ffc 100644 --- a/src/ara/exec/state_client.cpp +++ b/src/ara/exec/state_client.cpp @@ -156,7 +156,6 @@ namespace ara core::Result StateClient::GetExecutionError( const FunctionGroup &functionGroup) noexcept { - /// @todo Implement set state tracking const ExecErrc cExecErrc{ExecErrc::kFailed}; auto _errorValue{static_cast(cExecErrc)}; core::ErrorCode _errorCode{_errorValue, cErrorDomain}; diff --git a/test/ara/diag/ecu_reset_request_test.cpp b/test/ara/diag/ecu_reset_request_test.cpp index e5c119419..31b1f3ce6 100644 --- a/test/ara/diag/ecu_reset_request_test.cpp +++ b/test/ara/diag/ecu_reset_request_test.cpp @@ -129,8 +129,6 @@ namespace ara GeneralMetaInfo, std::move(_cancellationHander))}; EXPECT_TRUE(_succeedFuture.valid()); - - EXPECT_NO_THROW(Service.ExecuteReset(GeneralMetaInfo)); } TEST_F(EcuResetRequestTest, EnableRapidShutdownMethod)