summaryrefslogtreecommitdiffstats
path: root/positioning/client/src/SensorLocation_API/common/SensorLocation_API.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'positioning/client/src/SensorLocation_API/common/SensorLocation_API.cpp')
-rw-r--r--positioning/client/src/SensorLocation_API/common/SensorLocation_API.cpp142
1 files changed, 142 insertions, 0 deletions
diff --git a/positioning/client/src/SensorLocation_API/common/SensorLocation_API.cpp b/positioning/client/src/SensorLocation_API/common/SensorLocation_API.cpp
new file mode 100644
index 00000000..f39c9e17
--- /dev/null
+++ b/positioning/client/src/SensorLocation_API/common/SensorLocation_API.cpp
@@ -0,0 +1,142 @@
+/*
+ * @copyright Copyright (c) 2016-2019 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.
+ */
+
+/******************************************************************************
+@file SensorLocation_API.cpp
+@detail SensorLocation_API Functions
+@lib libSensorLocation_API.so
+******************************************************************************/
+
+/*****************************************************************************
+ * Include *
+ *****************************************************************************/
+#include <vehicle_service/positioning_base_library.h>
+#include "SensorLocation_API.h"
+#include "Vehicle_API.h"
+#include "Vehicle_API_Dummy.h"
+#include "SensorLocation_API_private.h"
+
+static RET_API SensorLocationGetLonLatOnShutdownGetData(LONLAT *lonlat);
+
+/*******************************************************************************
+* MODULE : SensorLocationGetLonLatOnShutdownGetData
+* ABSTRACT : Obtain position at shutdown
+* FUNCTION : Gets the location at shutdown from shared memory
+* ARGUMENT : LONLAT * lonlat : Latitude/Longitude
+* NOTE :
+* RETURN : RET_NORMAL : Successful acquisition
+* : RET_ERROR : Failed to acquire
+* : RET_ERRPARAM : Parameter error
+******************************************************************************/
+static RET_API SensorLocationGetLonLatOnShutdownGetData(LONLAT *lonlat) { // LCOV_EXCL_START 8:dead code
+ AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
+ RET_API ret = RET_NORMAL;
+ RET_API ret_api;
+ LONLAT *share_mem; /* Store Shared Memory Address */
+ u_int32 share_mem_size; /* Size of the linked shared memory */
+
+ if (lonlat == NULL) {
+ ret = RET_ERRPARAM;
+ FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "lonlat is NULL\r\n");
+ } else {
+ /* Link to shared memory */
+ ret_api = _pb_LinkShareData(const_cast<char *>(LONLAT_SHARE_NAME),
+ reinterpret_cast<void **>(&share_mem), &share_mem_size);
+ /* #QAC confirmation Rule11.4 Use structure for member reference(Cast according to shared memory link IF) */
+
+ if (ret_api == RET_NORMAL) {
+ /* Link to shared memory successful */
+
+ /* Get shutdown location from shared memory */
+ *lonlat = *share_mem;
+ } else {
+ /* Failed to link to shared memory */
+ ret = RET_ERROR;
+ FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Can't link shared memory\r\n");
+ }
+ }
+
+ return ret;
+}
+// LCOV_EXCL_STOP
+
+/******************************************************************************
+@brief SensorLocationGetLonLatOnShutdown<BR>
+ Obtain position at shutdown
+@outline Get location information at shutdown.
+@param[in] none
+@param[out] LONLAT* lonlat: Pointer to the acquired latitude/longitude information storage destination
+@return SENSORLOCATION_RET_API
+@retval SENSORLOCATION_RET_NORMAL : Normal completion
+@retval SENSORLOCATION_RET_ERROR_INNER : Internal error
+*******************************************************************************/
+SENSORLOCATION_RET_API SensorLocationGetLonLatOnShutdown(LONLAT *lonlat) { // LCOV_EXCL_START 8:dead code
+ AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
+ SENSORLOCATION_RET_API ret;
+ RET_API ret_api; /* API return value */
+ RET_API ret_tmp;
+ SemID sem_id; /* Semaphore ID */
+
+ if (lonlat != NULL) {
+ /* Get Semaphore ID */
+ sem_id = _pb_CreateSemaphore(const_cast<char *>(LONLAT_SEMAPHO_NAME));
+
+ if (sem_id != 0) { /* Because the return value of _pb_CreateSemaphore is not defined in #define,Evaluate directly */
+ /* Semaphore ID successfully acquired */
+
+ /* Semaphore Lock */
+ ret_api = _pb_SemLock(sem_id);
+
+ if (ret_api == RET_NORMAL) {
+ /* Semaphore lock successful */
+
+ /* Obtain position at shutdown */
+ ret_tmp = SensorLocationGetLonLatOnShutdownGetData(lonlat);
+
+ if (ret_tmp == RET_NORMAL) {
+ /* Position acquisition at shutdown successful */
+ ret = SENSORLOCATION_RET_NORMAL;
+ } else {
+ /* Location acquisition at shutdown failed */
+ ret = SENSORLOCATION_RET_ERROR_INNER;
+ FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "SensorLocationGetLonLatOnShutdownGetData failed");
+ }
+
+ /* Semaphore unlock */
+ ret_api = _pb_SemUnlock(sem_id);
+ if (ret_api != RET_NORMAL) {
+ /* Semaphore unlock failure */
+ ret = SENSORLOCATION_RET_ERROR_INNER;
+ FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "_pb_SemUnlock failed");
+ }
+ } else {
+ /* Semaphore lock failed */
+ ret = SENSORLOCATION_RET_ERROR_INNER;
+ FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "_pb_SemLock failed");
+ }
+ } else {
+ /* Semaphore ID acquisition failure */
+ ret = SENSORLOCATION_RET_ERROR_INNER;
+ FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "sem_id == 0");
+ }
+ } else {
+ ret = SENSORLOCATION_RET_ERROR_INNER;
+ FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "lonlat == NULL");
+ }
+
+ return ret;
+}
+// LCOV_EXCL_STOP