X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=service%2Fsystem%2Fpower_service%2Fserver%2Fsrc%2Fss_pwr_test_client_handlers.cpp;fp=service%2Fsystem%2Fpower_service%2Fserver%2Fsrc%2Fss_pwr_test_client_handlers.cpp;h=1542281630665d002067580c8a143556960a58cf;hb=17cf21bcf8a2e29d2cbcf0a313474d2a4ee44f5d;hp=0000000000000000000000000000000000000000;hpb=9e86046cdb356913ae026f616e5bf17f6f238aa5;p=staging%2Fbasesystem.git diff --git a/service/system/power_service/server/src/ss_pwr_test_client_handlers.cpp b/service/system/power_service/server/src/ss_pwr_test_client_handlers.cpp new file mode 100755 index 0000000..1542281 --- /dev/null +++ b/service/system/power_service/server/src/ss_pwr_test_client_handlers.cpp @@ -0,0 +1,204 @@ +/* + * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/////////////////////////////////////////////////////////////////////////////// +/// \ingroup tag_PowerService +/// \brief This file supports the power service test client. +/// +/////////////////////////////////////////////////////////////////////////////// + +#include "ss_power.h" +#include +#include +#include +#include +#include +#include +#include "ss_power_powerservicelog.h" + +using namespace std; // NOLINT (build/namespaces) + +#define SS_CRANK_STATE_STRING_LENGTH 5 +#define SS_VOLTAGE_STATE_STRING_LENGTH 5 +#define SS_MODULE_STATE_STRING_LENGTH 5 +#define SS_HEX_BASE_VALUE 16 + +const CHAR ReeadyToWakeUpDescription[] = "_READY_TO_WAKEUP:"; +const CHAR WakeUpInitiatedDescription[] = "_WAKEUP_INITIATED:"; +const CHAR WakeUpCompletedDescription[] = "_WAKEUP_COMPLETED:"; +const CHAR PowerOnCompletedDescription[] = "_POWER_ON_COMPLETED:"; +const CHAR PowerOffInitiatedDescription[] = "_POWER_OFF_INITIATED:"; +const CHAR PowerOffCompletedDescription[] = "_POWER_OFF_COMPLETED:"; +const CHAR ShutdownInitiatedDescription[] = "_SHUTDOWN_INITIATED:"; +const CHAR ShutdownCompletedDescription[] = "_SHUTDOWN_COMPLETED:"; + +const CHAR CrankInvalidDescription[] = "_INVALID:"; +const CHAR CrankEntryDescription[] = "_ENTRY:"; +const CHAR CrankExitDescription[] = "_EXIT:"; + +const CHAR VoltageInvalidDescription[] = "_INVALID:"; +const CHAR VoltageNormalDescription[] = "_NORMAL:"; +const CHAR VoltageLVI1Description[] = "_LVI1:"; +const CHAR VoltageLVI2Description[] = "_LVI2:"; + +/////////////////////////////////////////////////////////////////////// +/// AddCrankInformationToResponse +/// +////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus Power::AddCrankInformationToResponse(CHAR *f_MessageResponse) { + EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "+"); + CHAR l_Buffer[SS_CRANK_STATE_STRING_LENGTH] = { 0 }; + UI_32 l_Index = 0; + + std::map CrankMap; + CrankMap[epscsINVALID] = CrankInvalidDescription; + CrankMap[epscsENTRY] = CrankEntryDescription; + CrankMap[epscsEXIT] = CrankExitDescription; + + // confirm that CrankState value would fit in buffer array + if (m_CrankState < 0xFFFF) { // LCOV_EXCL_BR_LINE 8: dead code + itoa(m_CrankState, l_Buffer, SS_HEX_BASE_VALUE); + while (l_Buffer[l_Index]) { + l_Buffer[l_Index] = toupper(l_Buffer[l_Index]); + l_Index++; + } + } + + if (MaxRespMsg > (strlen(f_MessageResponse) + strlen(CrankMap[m_CrankState].c_str()) + strlen(l_Buffer))) { // LCOV_EXCL_BR_LINE 8: dead code // NOLINT[whitespace/line_length] + strcat(f_MessageResponse, l_Buffer); // NOLINT (runtime/printf) + strcat(f_MessageResponse, CrankMap[m_CrankState].c_str()); // NOLINT (runtime/printf) + } else { + FRAMEWORKUNIFIEDLOG( + ZONE_ERR, + __FUNCTION__, + "Buffer Overrun Condition : Failed to add Crank State description to response"); + l_eStatus = eFrameworkunifiedStatusFail; + } + + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "-"); + return l_eStatus; +} +/////////////////////////////////////////////////////////////////////// +/// AddVoltageInformationToResponse +/// +////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus Power::AddVoltageInformationToResponse(CHAR *f_MessageResponse) { + EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "+"); + CHAR l_Buffer[SS_VOLTAGE_STATE_STRING_LENGTH] = { 0 }; + UI_32 l_Index = 0; + + std::map VoltageMap; + VoltageMap[epsvsINVALID] = VoltageInvalidDescription; + VoltageMap[epsvsNORMAL] = VoltageNormalDescription; + VoltageMap[epsvsLVI1] = VoltageLVI1Description; + VoltageMap[epsvsLVI2] = VoltageLVI2Description; + + // confirm that VoltageState value would fit in buffer array + if (m_VoltageState < 0xFFFF) { // LCOV_EXCL_BR_LINE 8: dead code + itoa(m_VoltageState, l_Buffer, SS_HEX_BASE_VALUE); + while (l_Buffer[l_Index]) { + l_Buffer[l_Index] = toupper(l_Buffer[l_Index]); + l_Index++; + } + } + + if (MaxRespMsg > (strlen(f_MessageResponse) + strlen(VoltageMap[m_VoltageState].c_str()) + strlen(l_Buffer))) { // LCOV_EXCL_BR_LINE 8: dead code // NOLINT[whitespace/line_length] + strcat(f_MessageResponse, l_Buffer); // NOLINT (runtime/printf) + strcat(f_MessageResponse, VoltageMap[m_VoltageState].c_str()); // NOLINT (runtime/printf) + } else { + FRAMEWORKUNIFIEDLOG( + ZONE_ERR, + __FUNCTION__, + "Buffer Overrun Condition : Failed to add Voltage State description to response"); + l_eStatus = eFrameworkunifiedStatusFail; + } + + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "-"); + return l_eStatus; +} +/////////////////////////////////////////////////////////////////////// +/// AddStateInformationToResponse +/// +/// +////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus Power::AddStateInformationToResponse(CHAR *f_MessageResponse) { + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "+"); + CHAR l_Buffer[SS_MODULE_STATE_STRING_LENGTH] = { 0 }; + UI_32 l_Index = 0; + + std::map StateMap; // State Map + StateMap[SS_PS_READY_TO_WAKEUP] = ReeadyToWakeUpDescription; + StateMap[SS_PS_WAKEUP_INITIATED] = WakeUpInitiatedDescription; + StateMap[SS_PS_WAKEUP_COMPLETE] = WakeUpCompletedDescription; + StateMap[SS_PS_POWER_ON_COMPLETE] = PowerOnCompletedDescription; + StateMap[SS_PS_POWER_OFF_INITIATED] = PowerOffInitiatedDescription; + StateMap[SS_PS_POWER_OFF_COMPLETE] = PowerOffCompletedDescription; + StateMap[SS_PS_SHUTDOWN_INITIATED] = ShutdownInitiatedDescription; + StateMap[SS_PS_SHUTDOWN_COMPLETE] = ShutdownCompletedDescription; + + // confirm that PowerState value would fit in buffer array + if (m_PowerState < 0xFFFF) { // LCOV_EXCL_BR_LINE 8: dead code + itoa(m_PowerState, l_Buffer, SS_HEX_BASE_VALUE); + while (l_Buffer[l_Index]) { + l_Buffer[l_Index] = toupper(l_Buffer[l_Index]); + l_Index++; + } + } + + if (MaxRespMsg > (strlen(f_MessageResponse) + strlen(StateMap[m_PowerState].c_str()) + strlen(l_Buffer))) { // LCOV_EXCL_BR_LINE 8: dead code // NOLINT[whitespace/line_length] + strcat(f_MessageResponse, l_Buffer); // NOLINT (runtime/printf) + strcat(f_MessageResponse, StateMap[m_PowerState].c_str()); // NOLINT (runtime/printf) + } else { + FRAMEWORKUNIFIEDLOG( + ZONE_ERR, + __FUNCTION__, + "Buffer Overrun Condition : Failed to add Module State description to response"); + l_eStatus = eFrameworkunifiedStatusFail; + } + + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "-"); + return l_eStatus; +} + +/////////////////////////////////////////////////////////////////////// +/// ConstructPwrStateResponse +/// +/// +////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus Power::ConstructPwrStateResponse(CHAR *f_MessageResponse) { + EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "+"); + + if (f_MessageResponse == NULL) { // LCOV_EXCL_BR_LINE 8: dead code + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); + return eFrameworkunifiedStatusFail; + } + + if (eFrameworkunifiedStatusOK == (l_eStatus = AddStateInformationToResponse(f_MessageResponse))) { // LCOV_EXCL_BR_LINE 8: dead code // NOLINT[whitespace/line_length] + if (eFrameworkunifiedStatusOK == (l_eStatus = AddVoltageInformationToResponse(f_MessageResponse))) { // LCOV_EXCL_BR_LINE 8: dead code // NOLINT[whitespace/line_length] + if (eFrameworkunifiedStatusOK == (l_eStatus = AddCrankInformationToResponse(f_MessageResponse))) { // LCOV_EXCL_BR_LINE 8: dead code // NOLINT[whitespace/line_length] + FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Response Constructed"); + } + } + } + + FRAMEWORKUNIFIEDLOG0(ZONE_FUNC, __FUNCTION__, "-"); + return l_eStatus; +}