diff options
author | Monika Forstner <Monika_Forstner@mentor.com> | 2020-09-16 10:20:03 +0200 |
---|---|---|
committer | Monika Forstner <Monika_Forstner@mentor.com> | 2020-09-16 10:50:27 +0200 |
commit | 2fb502b4bc23aa13fee1db3395b3cae5e34cc871 (patch) | |
tree | d9cd2c64522f190500dc53291b4fbcf5100b9720 /NodeStateMachineStub/Test_StubImpl.cpp | |
parent | 253d10aada6bf5cdfe307aaff55363f08194c85e (diff) | |
download | node-state-manager-release_NSM_CommonAPI.tar.gz |
NSM Release 3.0release_NSM_CommonAPI
Diffstat (limited to 'NodeStateMachineStub/Test_StubImpl.cpp')
-rw-r--r-- | NodeStateMachineStub/Test_StubImpl.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/NodeStateMachineStub/Test_StubImpl.cpp b/NodeStateMachineStub/Test_StubImpl.cpp new file mode 100644 index 0000000..422c281 --- /dev/null +++ b/NodeStateMachineStub/Test_StubImpl.cpp @@ -0,0 +1,61 @@ +/********************************************************************************************************************** +* +* Copyright (C) 2017 BMW AG +* +* The header file defines the interfaces offered by the NodeStateMachine stub. +* +* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +* file, You can obtain one at http://mozilla.org/MPL/2.0/. +* +**********************************************************************************************************************/ +#include "Test_StubImpl.hpp" + +#include "NodeStateManager.h" +#include "Watchdog.hpp" + +#include <string.h> +#include <unistd.h> + +void Test_StubImpl::SetNsmData(const std::shared_ptr<CommonAPI::ClientId> __attribute__((__unused__)) _client, GENIVI::NodeStateManagerTypes::NsmDataType_e _DataType, + std::vector<uint8_t> _Data, uint32_t _DataLen, SetNsmDataReply_t _reply) +{ + NSMTriggerWatchdog(NsmWatchdogState_Active); + _reply(NsmSetData((NsmDataType_e)(int) _DataType, _Data.data(), _DataLen)); + NSMUnregisterWatchdog(); +} + +void Test_StubImpl::GetNsmData(const std::shared_ptr<CommonAPI::ClientId> __attribute__((__unused__)) _client, GENIVI::NodeStateManagerTypes::NsmDataType_e _DataType, + std::vector<uint8_t> _DataIn, uint32_t _DataLen, GetNsmDataReply_t _reply) +{ + NSMTriggerWatchdog(NsmWatchdogState_Active); + /* + * The NSM has a read write interface for getting data. The largest data frame that can be + * exchanged is a NsmSession_s. Therefore, pDataIn is translated into this kind of variable. + */ + int retVal = 0; + std::vector<uint8_t> DataOut; + + NsmSession_s pData; + if(!_DataIn.empty() && sizeof(pData) <= _DataLen) + { + memcpy(&pData, _DataIn.data(), _DataLen); + } + else + { + memset(&pData, 0, sizeof(pData)); + } + + if (_DataLen != (uint32_t)(retVal = NsmGetData((NsmDataType_e)(int) _DataType, (unsigned char*) &pData, _DataLen))) + { + memset(&pData, 0, sizeof(pData)); + DataOut.insert(DataOut.begin(), (uint8_t*) &pData, ((uint8_t*) &pData) + sizeof(pData)); + } + else + { + DataOut.insert(DataOut.begin(), (uint8_t*) &pData, ((uint8_t*) &pData) + _DataLen); + } + + _reply(DataOut, retVal); + NSMUnregisterWatchdog(); +} |