Init basesystem source codes.
[staging/basesystem.git] / vehicleservice / positioning / server / src / Sensor / VehicleSens_Did_GyroTempExt_l.cpp
1 /*
2  * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * @file
19  *  VehicleSens_Did_GyroTempExt_l.cpp
20  * @brief
21  *  Vehicle sensor data master(POSHAL_DID_GYRO_TEMP)
22  */
23
24 #include <vehicle_service/positioning_base_library.h>
25 #include "VehicleSens_DataMaster.h"
26
27 /*************************************************/
28 /*           Global variable                      */
29 /*************************************************/
30 static  VEHICLESENS_DATA_MASTER_EXT  g_stgyro_temp_ext_l;    // NOLINT(readability/nolint)
31
32 /**
33  * @brief
34  *   Vehicle sensor gyro temperature initialization function
35  *
36  *   Gyro Temperature Data Master Initialization Processing
37  */
38 void VehicleSensInitGyroTempExtl(void) {
39     (void)memset(reinterpret_cast<void *>(&g_stgyro_temp_ext_l), 0, sizeof(VEHICLESENS_DATA_MASTER_EXT));
40     g_stgyro_temp_ext_l.ul_did    = POSHAL_DID_GYRO_TEMP;
41     g_stgyro_temp_ext_l.us_size    = VEHICLE_DSIZE_GYRO_TEMP_EXT_INIT;
42     g_stgyro_temp_ext_l.uc_rcvflag  = VEHICLE_RCVFLAG_OFF;
43 }
44
45 /**
46  * @brief
47  *   Vehicle Sensor Gyro Temperature SET Function
48  *
49  *   Update the gyro temperature data master
50  *
51  * @param[in]  *pst_data : Pointer to the message data received by the direct line
52  *
53  * @return  VEHICLESENS_EQ  No data change<br>
54  *      VEHICLESENS_NEQ Data change
55  */
56 void VehicleSensSetGyroTempExtlG(const LSDRV_LSDATA_G *pst_data) {
57     VEHICLESENS_DATA_MASTER_EXT *pst_master;
58     u_int16 us_start = 0;
59     u_int16 us_size = 0;
60     u_int16 us_cnt = 0;
61
62     pst_master = &g_stgyro_temp_ext_l;
63     us_size = sizeof(u_int16);  /* Size of one data item: 2byte */
64
65     /* Store the latest one in the internal data structure */
66     us_start = gstPkgTempExt.start_point[GyroTemp];  /* Location to store one received message    */
67     /* Stored in data master(Order of reception)*/
68     if (us_start == VEHICLE_DKEEP_MAX) {
69         /* Store the latest one at position 0 */
70         us_start = VEHICLE_DATA_POS_00;
71         /* If you are discarding old data,,Set a flag */
72         gstPkgTempExt.data_break = VEHICLE_SNS_BREAK;
73     }
74     pst_master->ul_did    = pst_data->ul_did;
75     pst_master->uc_rcvflag  = VEHICLE_RCVFLAG_ON;
76     for (us_cnt = 0; us_cnt < us_size; us_cnt++) {
77         pst_master->uc_data[us_start * us_size + us_cnt] = (u_int8)(pst_data->uc_data[us_cnt]);
78     }
79
80     /* Update next storage start position and latest data storage position. */
81     us_start++;
82     gstPkgTempExt.start_point[GyroTemp] = us_start;
83
84     /* Update data master size */
85     if (gstPkgTempExt.data_break == VEHICLE_SNS_BREAK) {
86         /* Make the size of all extended data masters */
87         pst_master->us_size = VEHICLE_DSIZE_GYRO_TEMP_EXT;
88     } else {
89         /* Add the size of one received data item */
90         pst_master->us_size = static_cast<u_int16>(pst_master->us_size + us_size);
91     }
92 }
93
94 /**
95  * @brief
96  *   Vehicle Sensor Gyro Temperature GET Function
97  *
98  *   Provide a gyro temperature data master
99  *
100  * @param[in]  Pointer to the data master acquisition destination
101  */
102 void VehicleSensGetGyroTempExtl(VEHICLESENS_DATA_MASTER_EXT *pst_data) {
103   const VEHICLESENS_DATA_MASTER_EXT *pst_master;
104   uint16_t us_size = 0;
105   uint16_t us_data_cnt = 0; // Number of data contained
106   uint16_t us_loop_cnt = 0; // 64 over index
107
108   /* Store the data master in the specified destination. */
109   pst_master      = &g_stgyro_temp_ext_l;
110   pst_data->ul_did    = pst_master->ul_did;
111   pst_data->us_size    = pst_master->us_size;
112   pst_data->uc_rcvflag  = pst_master->uc_rcvflag;
113
114   us_size = sizeof(u_int16); /* Size of one data item: 2byte */
115
116   /* Checking whether the number of stored entries is looped */
117   if (gstPkgTempExt.data_break == VEHICLE_SNS_BREAK) {
118     us_data_cnt = VEHICLE_DKEEP_MAX;
119   } else {
120     us_data_cnt = gstPkgTempExt.start_point[GyroTemp];
121   }
122
123   /* Acquire data from the oldest data master */
124   for (uint16_t us_cnt = 0; us_cnt < us_data_cnt; us_cnt++) {
125     if (gstPkgTempExt.data_break == VEHICLE_SNS_BREAK) {
126       /* Get information before loop */
127       if (gstPkgTempExt.start_point[GyroTemp] + us_cnt < VEHICLE_DKEEP_MAX) {
128         memcpy(&pst_data->uc_data[us_cnt * us_size],
129                &pst_master->uc_data[(gstPkgTempExt.start_point[GyroTemp] + us_cnt) * us_size], us_size);
130       } else {
131         memcpy(&pst_data->uc_data[us_cnt * us_size],
132                &pst_master->uc_data[us_loop_cnt * us_size], us_size);
133         us_loop_cnt++;
134       }
135     } else {
136       memcpy(&pst_data->uc_data[us_cnt * us_size],
137              &pst_master->uc_data[us_cnt * us_size], us_size);
138     }
139   }
140 }