Init basesystem source codes.
[staging/basesystem.git] / video_in_hal / vehicleservice / positioning / server / src / Sensor / VehicleSens_Did_GyroExt_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 name    :VehicleSens_Did_GyroExt_l.cpp
19  *  System name    :Polaris
20  *  Subsystem name  :Vehicle sensor process
21  *  Program name  :Vehicle sensor data master(POSHAL_DID_GYRO_EXT)
22  *  Module configuration  :VehicleSensInitGyroExtl()    Vehicle Sensor GYRO (Initial Delivery) Initialization Functions
23  *                  :VehicleSensSetGyroExtlG()    Vehicle Sensor GYRO (Initial Delivery) Set Functions
24  *                  :VehicleSensGetGyroExtl()    Vehicle Sensor GYRO (Initial Delivery) Get Functions
25  ******************************************************************************/
26
27 #include <vehicle_service/positioning_base_library.h>
28 #include "VehicleSens_DataMaster.h"
29
30 /* Ignore->MISRA-C++:2008 Rule 2-7-2 */
31 #if CONFIG_SENSOR_EXT_VALID        /* Initial Sensor Support */
32 /*************************************************/
33 /*           Global variable                      */
34 /*************************************************/
35 static  VEHICLESENS_DATA_MASTER_EXT    gstGyroExt_l;    // NOLINT(readability/nolint)
36 static  VEHICLESENS_DATA_MASTER      gstGyroRev_l;    // NOLINT(readability/nolint)
37
38 /*******************************************************************************
39 * MODULE    : VehicleSensInitGyroRevl
40 * ABSTRACT  : Vehicle Sensor GYRO Initialization Functions(Extensions data)
41 * FUNCTION  : GYRO data master initialization process
42 * ARGUMENT  : void
43 * NOTE      :
44 * RETURN    : void
45 ******************************************************************************/
46 void VehicleSensInitGyroRevl(void) {
47     u_int16  *pus;
48
49     memset(&gstGyroRev_l, 0x00, sizeof(VEHICLESENS_DATA_MASTER));
50     /* POSHAL_DID_GYRO initialized by POSHAL_DID_GYRO_X because POSHAL_DID_GYRO is internally replaced by POSHAL_DID_GYRO_EXT  */
51     gstGyroRev_l.ul_did  = POSHAL_DID_GYRO_X;
52     gstGyroRev_l.us_size  = VEHICLE_DSIZE_GYRO;
53
54     pus    = reinterpret_cast<u_int16 *>(gstGyroRev_l.uc_data);
55     pus[0]  = VEHICLE_DINIT_GYRO;  /* Ignore->MISRA-C++:2008 Rule 5-0-15 */
56     pus[1]  = VEHICLE_DINIT_GYRO;  /* Ignore->MISRA-C++:2008 Rule 5-0-15 */
57     pus[2]  = VEHICLE_DINIT_GYRO;  /* Ignore->MISRA-C++:2008 Rule 5-0-15 */
58 }
59
60 /*******************************************************************************
61 * MODULE    : VehicleSensInitGyroExtl
62 * ABSTRACT  : Vehicle Sensor GYRO Initialization Functions(Initial delivery)
63 * FUNCTION  : GYRO data master initialization process
64 * ARGUMENT  : void
65 * NOTE      :
66 * RETURN    : void
67 ******************************************************************************/
68 void VehicleSensInitGyroExtl(void) {
69     u_int16  *pus;
70
71     memset(&gstGyroExt_l, 0x00, sizeof(VEHICLESENS_DATA_MASTER_EXT));
72     /* POSHAL_DID_GYRO initialized by POSHAL_DID_GYRO_X because POSHAL_DID_GYRO is internally replaced by POSHAL_DID_GYRO_EXT  */
73     gstGyroExt_l.ul_did    = POSHAL_DID_GYRO_X;
74     gstGyroExt_l.us_size    = VEHICLE_DSIZE_GYRO_EXT_INIT;
75
76     pus    = reinterpret_cast<u_int16 *>(gstGyroExt_l.uc_data);
77     memset(reinterpret_cast<void*>(pus), VEHICLE_DINIT_GYRO, VEHICLE_DSIZE_GYRO_EXT);
78 }
79
80 /*******************************************************************************
81 * MODULE    : VehicleSensSetGyroRevl
82 * ABSTRACT  : Vehicle Sensor GYRO SET Functions
83 * FUNCTION  : Update the GYRO data master
84 * ARGUMENT  : *pst_data : Pointer to the message data received by the direct line
85 * NOTE      :
86 * RETURN    : VEHICLESENS_EQ  : No data change
87 *             VEHICLESENS_NEQ  : Data change
88 ******************************************************************************/
89 u_int8 VehicleSensSetGyroRevl(const LSDRV_LSDATA *pst_data) {  // LCOV_EXCL_START 8 : dead code
90     AGL_ASSERT_NOT_TESTED();  // LCOV_EXCL_LINE 200: test assert
91     u_int8 uc_ret;
92     VEHICLESENS_DATA_MASTER *pst_master;
93
94     pst_master = &gstGyroRev_l;
95
96     /* Compare data master and received data */
97     uc_ret = VehicleSensmemcmp(pst_master->uc_data,
98                     pst_data->uc_data, pst_data->uc_size);  /* Ignore->MISRA-C++:2008 Rule 5-0-5 */
99
100     /* Received data is set in the data master. */
101     pst_master->ul_did    = POSHAL_DID_GYRO_X;
102     pst_master->us_size    = pst_data->uc_size;  /* Ignore->MISRA-C++:2008 Rule 5-0-5 */
103     pst_master->uc_rcvflag  = VEHICLE_RCVFLAG_ON;
104     pst_master->uc_snscnt  = pst_data->uc_sns_cnt;
105     memset(pst_master->uc_data, 0x00, sizeof(pst_master->uc_data));
106     memcpy(pst_master->uc_data, pst_data->uc_data, pst_data->uc_size);  /* Ignore->MISRA-C++:2008 Rule 5-0-5 */
107
108     return(uc_ret);
109 }
110 // LCOV_EXCL_STOP
111
112 /*******************************************************************************
113 * MODULE    : VehicleSensSetGyroRevlG
114 * ABSTRACT  : Vehicle Sensor GYRO SET Functions
115 * FUNCTION  : Update the GYRO data master
116 * ARGUMENT  : *pst_data : Pointer to the message data received by the direct line
117 * NOTE      :
118 * RETURN    : VEHICLESENS_EQ  : No data change
119 *             VEHICLESENS_NEQ  : Data change
120 ******************************************************************************/
121 u_int8 VehicleSensSetGyroRevlG(const LSDRV_LSDATA_G *pst_data) {
122     u_int8 uc_ret;
123     VEHICLESENS_DATA_MASTER *pst_master;
124
125     pst_master = &gstGyroRev_l;
126
127     /* Compare data master and received data */
128     /* Ignore->MISRA-C++:2008 Rule 5-0-5 */
129     uc_ret = VehicleSensmemcmp(pst_master->uc_data, pst_data->uc_data, pst_data->uc_size);
130
131     /* Received data is set in the data master. */
132     pst_master->ul_did    = POSHAL_DID_GYRO_X;
133     pst_master->us_size    = pst_data->uc_size;  /* Ignore->MISRA-C++:2008 Rule 5-0-5 */
134     pst_master->uc_rcvflag = VEHICLE_RCVFLAG_ON;
135     pst_master->uc_snscnt  = pst_data->uc_sns_cnt;
136     memcpy(pst_master->uc_data, pst_data->uc_data, pst_data->uc_size);  /* Ignore->MISRA-C++:2008 Rule 5-0-5 */
137
138     return(uc_ret);
139 }
140
141 /*******************************************************************************
142 * MODULE    : VehicleSensSetGyroExtlG
143 * ABSTRACT  : Vehicle Sensor GYRO SET Functions(Initial delivery)
144 * FUNCTION  : Update the GYRO data master
145 * ARGUMENT  : *pst_data : Pointer to the message data received by the direct line
146 * NOTE      :
147 * RETURN    : VEHICLESENS_EQ  : No data change
148 *             VEHICLESENS_NEQ  : Data change
149 ******************************************************************************/
150 void VehicleSensSetGyroExtlG(const LSDRV_LSDATA_G *pst_data) {
151   VEHICLESENS_DATA_MASTER_EXT *pst_master;
152   u_int16 us_start = 0;
153   u_int16 us_size = 0;
154   u_int16 us_cnt = 0;
155
156   pst_master = &gstGyroExt_l;
157   us_size = static_cast<u_int16>(sizeof(u_int16) * 10);  /* Size of one data item: 2byte * 10 data items */
158
159   /* Retrieve the location where the received one is stored */
160   us_start = gstPkgTempExt.start_point[GyroExt];
161
162   /* Stored in data master(Order of reception)*/
163   if (us_start >= VEHICLE_DKEEP_MAX) {
164       /* Store the latest one at position 0 */
165       us_start = VEHICLE_DATA_POS_00;
166       /* If you are discarding old data,,Set a flag */
167       gstPkgTempExt.data_break = VEHICLE_SNS_BREAK;
168   }
169   pst_master->ul_did    = POSHAL_DID_GYRO_X;
170   pst_master->uc_rcvflag    = VEHICLE_RCVFLAG_ON;
171   for (us_cnt = 0; us_cnt < us_size; us_cnt++) {
172       pst_master->uc_data[us_start * us_size + us_cnt] = (u_int8)(pst_data->uc_data[us_cnt]);
173   }
174
175   /* Update next storage start position and latest data storage position */
176   us_start++;
177   gstPkgTempExt.start_point[GyroExt] = us_start;
178
179   /* Update data master size */
180   if (gstPkgTempExt.data_break == VEHICLE_SNS_BREAK) {
181       /* Make the size of all extended data masters */
182       pst_master->us_size = VEHICLE_DSIZE_GYRO_EXT;
183   } else {
184       /* Add the size of one received data item */
185       pst_master->us_size = static_cast<u_int16>(pst_master->us_size + us_size);
186   }
187 }
188
189 /*******************************************************************************
190 * MODULE    : VehicleSensGetGyroExtl
191 * ABSTRACT  : Vehicle Sensor GYRO GET Functions(Initial delivery)
192 * FUNCTION  : Provide a GYRO data master
193 * ARGUMENT  : *pst_data : Pointer to the data master acquisition destination
194 * NOTE      :
195 * RETURN    : void
196 ******************************************************************************/
197 void VehicleSensGetGyroExtl(VEHICLESENS_DATA_MASTER_EXT *pst_data) {
198   const VEHICLESENS_DATA_MASTER_EXT *pst_master;
199   uint16_t us_size = 0;
200   uint16_t us_data_cnt = 0; // Number of data contained
201   uint16_t us_loop_cnt = 0; // 64 over index
202
203   /* Store the data master in the specified destination. */
204   pst_master           = &gstGyroExt_l;
205   pst_data->ul_did     = pst_master->ul_did;
206   pst_data->us_size    = pst_master->us_size;
207   pst_data->uc_rcvflag = pst_master->uc_rcvflag;
208
209   us_size = static_cast<u_int16>(sizeof(u_int16) * 10); /* Size of one data item: 2byte * 10 data items */
210
211   /* Checking whether the number of stored entries is looped */
212   if (gstPkgTempExt.data_break == VEHICLE_SNS_BREAK) {
213     us_data_cnt = VEHICLE_DKEEP_MAX;
214   } else {
215     us_data_cnt = gstPkgTempExt.start_point[GyroExt];
216   }
217
218   /* Acquire data from the oldest data master */
219   for (uint16_t us_cnt = 0; us_cnt < us_data_cnt; us_cnt++) {
220     if (gstPkgTempExt.data_break == VEHICLE_SNS_BREAK) {
221       /* Get information before loop */
222       if (gstPkgTempExt.start_point[GyroExt] + us_cnt < VEHICLE_DKEEP_MAX) {
223         memcpy(&pst_data->uc_data[us_cnt * us_size],
224                &pst_master->uc_data[(gstPkgTempExt.start_point[GyroExt] + us_cnt) * us_size], us_size);
225       } else {
226         memcpy(&pst_data->uc_data[us_cnt * us_size],
227                &pst_master->uc_data[us_loop_cnt * us_size], us_size);
228         us_loop_cnt++;
229       }
230     } else {
231       memcpy(&pst_data->uc_data[us_cnt * us_size],
232              &pst_master->uc_data[us_cnt * us_size], us_size);
233     }
234   }
235 }
236
237 /*******************************************************************************
238 * MODULE    : VehicleSensGetGyroRevl
239 * ABSTRACT  : Vehicle Sensor GYRO GET Functions(Initial delivery)
240 * FUNCTION  : Provide a GYRO data master
241 * ARGUMENT  : *pst_data : Pointer to the data master acquisition destination
242 * NOTE      :
243 * RETURN    : void
244 ******************************************************************************/
245 void VehicleSensGetGyroRevl(VEHICLESENS_DATA_MASTER *pst_data) {
246     const VEHICLESENS_DATA_MASTER *pst_master;
247
248     pst_master = &gstGyroRev_l;
249
250     /* Store the data master in the specified destination. */
251     pst_data->ul_did    = pst_master->ul_did;
252     pst_data->us_size    = pst_master->us_size;
253     pst_data->uc_rcvflag  = pst_master->uc_rcvflag;
254     pst_data->uc_snscnt  = pst_master->uc_snscnt;
255     memcpy(pst_data->uc_data, pst_master->uc_data, pst_master->us_size);  /* Ignore->MISRA-C++:2008 Rule 5-0-5 */
256 }
257 #endif