/* * @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. */ /******************************************************************************* * File name :DeadReckoning_DeliveryCtrl.cpp * System name :GPF * Subsystem name :Vehicle sensor process * Program name :Vehicle Sensor Destination Management( * Module configuration DeadReckoningInitDeliveryCtrlTbl() Vehicle sensor delivery destination management table initialization function * DeadReckoningInitDeliveryCtrlTblMng() Vehicle sensor delivery destination management table management area initialization function * DeadReckoningEntryDeliveryCtrl() Vehicle sensor delivery destination management registration function * :DeadReckoningAddDeliveryCtrlTbl() Vehicle sensor delivery destination management table addition function * :DeadReckoningUpdateDeliveryCtrlTbl() Vehicle sensor delivery destination management table update function * :DeadReckoning_DeliveryEntry_Delete() Vehicle sensor delivery destination management table deletion function * :DeadReckoningAddDeliveryCtrlTblMng() Vehicle sensor delivery destination management table management addition function * :DeadReckoningUpdateDeliveryCtrlTblMng() Vehicle sensor delivery destination management table management update function * :DeadReckoning_DeleteDeliveryCtrlTblMng_Touch() Vehicle sensor delivery destination management table management deletion (touch panel) function * DeadReckoningMakeDeliveryPnoTbl() Vehicle Sensor Destination PNO Table Creation Function * :DeadReckoningAddPnoTbl() Vehicle Sensor Destination PNO Table Addition Function * :DeadReckoningDeliveryProc() Vehicle Sensor Data Delivery Process ******************************************************************************/ #include #include "DeadReckoning_DeliveryCtrl.h" #include "Vehicle_API.h" #include "Vehicle_API_Dummy.h" #include "Dead_Reckoning_Local_Api.h" /*************************************************/ /* Global variable */ /*************************************************/ static DEADRECKONING_DELIVERY_CTRL_TBL g_delivery_dr_ctrltbl; static DEADRECKONING_DELIVERY_CTRL_TBL_MNG g_delivery_dr_ctrltbl_mng; static DEADRECKONING_DELIVERY_PNO_TBL g_delivery_dr_pnotbl; /* Stored data count */ int32 g_delivery_dr_ctrl_num = 0; /* PastModel002 support DR */ /******************************************************************************* * MODULE : DeadReckoningInitDeliveryCtrlTbl * ABSTRACT : Vehicle sensor delivery destination management table initialization function * FUNCTION : Delivery destination management table initialization processing * ARGUMENT : void * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningInitDeliveryCtrlTbl(void) { // LCOV_EXCL_START 8: dead code. AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert memset(&g_delivery_dr_ctrltbl, 0x00, sizeof(DEADRECKONING_DELIVERY_CTRL_TBL)); } /******************************************************************************* * MODULE : DeadReckoningInitDeliveryCtrlTblMng * ABSTRACT : Vehicle sensor delivery destination management table management area initialization function * FUNCTION : Delivery destination management table management area initialization processing * ARGUMENT : void * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningInitDeliveryCtrlTblMng(void) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert memset(&g_delivery_dr_ctrltbl_mng, 0x00, sizeof(DEADRECKONING_DELIVERY_CTRL_TBL_MNG)); } /******************************************************************************* * MODULE : DeadReckoningEntryDeliveryCtrl * ABSTRACT : Vehicle sensor delivery destination management registration function * FUNCTION : Shipping management table,Update the shipping management table management. * ARGUMENT : p_st_delivery_entry : Pointer to the delivery registration information * NOTE : * RETURN : VEHICLE_RET_NORMAL :Successful registration ******************************************************************************/ DEAD_RECKONING_RET_API DeadReckoningEntryDeliveryCtrl(const DEADRECKONING_MSG_DELIVERY_ENTRY *p_st_delivery_entry) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert int32 i; u_int8 uc_action_type = DEADRECKONING_ACTION_TYPE_ADD; int32 uc_did_flag; DID ul_entry_did = p_st_delivery_entry->data.did; DEADRECKONING_DELIVERY_CTRL_TBL_MNG_DATA *p_st_existing_mng_data = NULL; /* _CWORD71_:QAC++4020:Multiple exit points found. MISRA-C++ Rule 6-6-5 */ DEAD_RECKONING_RET_API ret = DEAD_RECKONING_RET_NORMAL; /* Check if the data ID exists. */ uc_did_flag = DeadReckoningCheckDid(ul_entry_did); if (uc_did_flag == 0) { ret = DEADRECKONING_RET_ERROR_DID; /* _CWORD71_:QAC++4020:Multiple exit points found. MISRA-C++ Rule 6-6-5 */ } /* Check the number of registered shipments. */ if ((ret == DEAD_RECKONING_RET_NORMAL) &&/* _CWORD71_:QAC++4020:Multiple exit points found. MISRA-C++ Rule 6-6-5 */ (g_delivery_dr_ctrltbl.us_num >= DEADRECKONING_DELIVERY_INFO_MAX)) { /* Return the FULL of delivery registrations*/ ret = DEADRECKONING_RET_ERROR_BUFFULL; /* _CWORD71_:QAC++4020:Multiple exit points found. MISRA-C++ Rule 6-6-5 */ } /* _CWORD71_:QAC++4020:Multiple exit points found. MISRA-C++ Rule 6-6-5 */ if (ret == DEAD_RECKONING_RET_NORMAL) { /* By searching for the delivery registration of the relevant DID,Hold the address. */ for (i = 0; i < g_delivery_dr_ctrltbl_mng.us_num; i++) { if (g_delivery_dr_ctrltbl_mng.st_ctrl_tbl_mng_data[i].ul_did == ul_entry_did) { uc_action_type = DEADRECKONING_ACTION_TYPE_UPDATE; p_st_existing_mng_data = &g_delivery_dr_ctrltbl_mng.st_ctrl_tbl_mng_data[i]; } } /* Add to the shipping management table.*/ DeadReckoningAddDeliveryCtrlTbl(p_st_delivery_entry); /* Processing when updating existing data*/ if (uc_action_type == DEADRECKONING_ACTION_TYPE_UPDATE) { /* Update the shipping management table.*/ DeadReckoningUpdateDeliveryCtrlTbl(p_st_existing_mng_data); /* Update the shipping destination management table management information.*/ DeadReckoningUpdateDeliveryCtrlTblMng(p_st_existing_mng_data); } else { /* Newly added processing*/ /* Add to the shipping management table management information.*/ DeadReckoningAddDeliveryCtrlTblMng(p_st_delivery_entry); } } return ret; /* _CWORD71_:QAC++4020:Multiple exit points found. MISRA-C++ Rule 6-6-5 */ } /******************************************************************************* * MODULE : DeadReckoningAddDeliveryCtrlTbl * ABSTRACT : Vehicle sensor delivery destination management table addition function * FUNCTION : Add to the shipping management table. * ARGUMENT : *p_st_delivery_entry : Pointer to the delivery registration information * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningAddDeliveryCtrlTbl(const DEADRECKONING_MSG_DELIVERY_ENTRY *p_st_delivery_entry) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert DEADRECKONING_DELIVERY_CTRL_TBL_DATA *p_st_ctrl_data; p_st_ctrl_data = &g_delivery_dr_ctrltbl.st_ctrl_data[g_delivery_dr_ctrltbl.us_num]; p_st_ctrl_data->ul_did = p_st_delivery_entry->data.did; p_st_ctrl_data->us_pno = p_st_delivery_entry->data.pno; p_st_ctrl_data->uc_chg_type = p_st_delivery_entry->data.delivery_timing; p_st_ctrl_data->uc_ctrl_flg = p_st_delivery_entry->data.ctrl_flg; p_st_ctrl_data->us_link_idx = DEADRECKONING_LINK_INDEX_END; p_st_ctrl_data->uc_method = DEADRECKONING_DELIVERY_METHOD_NORMAL; g_delivery_dr_ctrltbl.us_num = static_cast(g_delivery_dr_ctrltbl.us_num + 1); } /******************************************************************************* * MODULE : DeadReckoningUpdateDeliveryCtrlTbl * ABSTRACT : Vehicle sensor delivery destination management table update function * FUNCTION : Update the shipping management table. * ARGUMENT : *p_st_existing_mng_data : Pointer to the previous data information with the same data ID * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningUpdateDeliveryCtrlTbl(DEADRECKONING_DELIVERY_CTRL_TBL_MNG_DATA *p_st_existing_mng_data) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert /* Update Link Index Only. For the index of the value of us_end_idx that matches the data ID of the distribution target management table management information Make us_link_idx a registered index */ g_delivery_dr_ctrltbl.st_ctrl_data[p_st_existing_mng_data->us_end_idx].us_link_idx = static_cast(g_delivery_dr_ctrltbl.us_num - 1); } /******************************************************************************* * MODULE : DeadReckoningAddDeliveryCtrlTblMng * ABSTRACT : Vehicle sensor delivery destination management table management addition function * FUNCTION : Add to the shipping management table management. * ARGUMENT : *p_st_delivery_entry : Pointer to the delivery registration information * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningAddDeliveryCtrlTblMng(const DEADRECKONING_MSG_DELIVERY_ENTRY *p_st_delivery_entry) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert DEADRECKONING_DELIVERY_CTRL_TBL_MNG_DATA *p_st_ctr_mng_data; p_st_ctr_mng_data = &g_delivery_dr_ctrltbl_mng.st_ctrl_tbl_mng_data[g_delivery_dr_ctrltbl_mng.us_num]; p_st_ctr_mng_data->ul_did = p_st_delivery_entry->data.did; p_st_ctr_mng_data->us_start_idx = static_cast(g_delivery_dr_ctrltbl.us_num - 1); p_st_ctr_mng_data->us_end_idx = static_cast(g_delivery_dr_ctrltbl.us_num - 1); p_st_ctr_mng_data->us_dlvry_entry_num++; g_delivery_dr_ctrltbl_mng.us_num++; g_delivery_dr_ctrl_num++; } /******************************************************************************* * MODULE : DeadReckoningUpdateDeliveryCtrlTblMng * ABSTRACT : Vehicle sensor delivery destination management table management update function * FUNCTION : Update the shipping management table management. * ARGUMENT : *p_st_existing_mng_data : Pointer to the previous data information with the same data ID * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningUpdateDeliveryCtrlTblMng(DEADRECKONING_DELIVERY_CTRL_TBL_MNG_DATA *p_st_existing_mng_data) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert /* Update only the end index and the number of registered shipping destinations. */ p_st_existing_mng_data->us_end_idx = static_cast(g_delivery_dr_ctrltbl.us_num - 1); p_st_existing_mng_data->us_dlvry_entry_num++; } /******************************************************************************* * MODULE : DeadReckoningMakeDeliveryPnoTbl * ABSTRACT : Vehicle sensor delivery destination PNO table creation function * FUNCTION : Create the shipping destination PNO table * ARGUMENT : ul_did Data ID * Change_type Delivery Trigger * NOTE : * RETURN : DEADRECKONING_DELIVERY_PNO_TBL* Pointer to the shipping PNO table ******************************************************************************/ DEADRECKONING_DELIVERY_PNO_TBL* DeadReckoningMakeDeliveryPnoTbl(DID ul_did, u_int8 change_type) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert int32 i; u_int16 us_index = 0; u_int16 us_num = 0; /* Get the start index and count of the corresponding data ID. */ for (i = 0; i < g_delivery_dr_ctrl_num; i++) { /* Stores the information of the corresponding DID.. */ if (g_delivery_dr_ctrltbl_mng.st_ctrl_tbl_mng_data[i].ul_did == ul_did) { us_index = g_delivery_dr_ctrltbl_mng.st_ctrl_tbl_mng_data[i].us_start_idx; us_num = g_delivery_dr_ctrltbl_mng.st_ctrl_tbl_mng_data[i].us_dlvry_entry_num; break; } } /* Create a PNO list */ g_delivery_dr_pnotbl.us_num = 0; if (change_type == DEADRECKONING_CHGTYPE_CHG) { /* Processing when delivery timing is changed*/ for (i = 0; i < us_num; i++) { /* Functionalization by Increasing Structure Members */ DeadReckoningAddPnoTbl(us_index); us_index = g_delivery_dr_ctrltbl.st_ctrl_data[us_index].us_link_idx; } } else { /* Processing when delivery timing is update */ for (i = 0; i < us_num; i++) { if (DEADRECKONING_DELIVERY_TIMING_UPDATE == g_delivery_dr_ctrltbl.st_ctrl_data[us_index].uc_chg_type) { /* Functionalization by Increasing Structure Members */ DeadReckoningAddPnoTbl(us_index); } us_index = g_delivery_dr_ctrltbl.st_ctrl_data[us_index].us_link_idx; } } return (&g_delivery_dr_pnotbl); } /******************************************************************************* * MODULE : DeadReckoningAddPnoTbl * ABSTRACT : Vehicle Sensor Destination PNO Table Addition Function * FUNCTION : Add to the shipping PNO table. * ARGUMENT : us_index : Index of the referenced destination management table * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningAddPnoTbl(u_int16 us_index) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert u_int16 us_pno_tbl_idx; us_pno_tbl_idx = g_delivery_dr_pnotbl.us_num; g_delivery_dr_pnotbl.st_pno_data[us_pno_tbl_idx].us_pno = g_delivery_dr_ctrltbl.st_ctrl_data[us_index].us_pno; /* Save the relevant INDEX in the delivery control table */ g_delivery_dr_pnotbl.st_pno_data[us_pno_tbl_idx].us_index = us_index; g_delivery_dr_pnotbl.st_pno_data[us_pno_tbl_idx].uc_method = g_delivery_dr_ctrltbl.st_ctrl_data[us_index].uc_method; g_delivery_dr_pnotbl.us_num++; } /******************************************************************************* * MODULE : DeadReckoningDeliveryProc * ABSTRACT : Vehicle Sensor Data Delivery Process * FUNCTION : Deliver data to a destination. * ARGUMENT : ul_did :Data ID * uc_chg_type :Delivery timing * uc_get_method :Acquisition method * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningDeliveryProc(DID ul_did, u_int8 uc_chg_type, u_int8 uc_get_method) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert int32 i; /* Generic counters */ DEADRECKONING_DATA_MASTER st_master; /* Data master of normal data */ /* Defines the data master for each API. */ SENSORLOCATION_MSG_LONLATINFO_DAT st_msg_lonlat_info; SENSORLOCATION_MSG_ALTITUDEINFO_DAT st_msg_altitude_info; SENSORMOTION_MSG_SPEEDINFO_DAT st_msg_speed_info; SENSORMOTION_MSG_HEADINGINFO_DAT st_msg_heading_info; const DEADRECKONING_DELIVERY_PNO_TBL *p_st_pno_tbl; /* Vehicle Sensor Destination PNO Table Pointer */ /* Initialization */ st_msg_lonlat_info.reserve[0] = 0; st_msg_lonlat_info.reserve[1] = 0; st_msg_lonlat_info.reserve[2] = 0; st_msg_altitude_info.reserve[0] = 0; st_msg_altitude_info.reserve[1] = 0; st_msg_altitude_info.reserve[2] = 0; st_msg_speed_info.reserve = 0; st_msg_heading_info.reserve = 0; /* Obtain the shipping destination PNO */ p_st_pno_tbl = reinterpret_cast(DeadReckoningMakeDeliveryPnoTbl(ul_did, uc_chg_type)); if ((p_st_pno_tbl->us_num) > 0) { /* When there is a shipping destination PNO registration */ /* Vehicle sensor information notification transmission process */ for (i = 0; i < (p_st_pno_tbl->us_num); i++) { /* Acquire the applicable data information from the data master..*/ DeadReckoningGetDataMaster(ul_did, &st_master); /* Align data from the data master for API I/F */ switch (ul_did) { /* Describes the process for each DID. */ case VEHICLE_DID_DR_LATITUDE: { /* Size storage(LONLAT) */ st_msg_lonlat_info.size = (u_int16)sizeof(SENSORLOCATION_MSG_LONLATINFO_DAT); /* DR status setting */ st_msg_lonlat_info.dr_status = st_master.dr_status; /* The DR enable flag is set to enabled. */ st_msg_lonlat_info.is_exist_dr = SENSORLOCATION_EXISTDR_DR; /* Set the Latitude */ (void)memcpy(reinterpret_cast(&(st_msg_lonlat_info.latitude)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); /* Obtain the data master Longitude */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_LONGITUDE, &st_master); /* Set the Longitude */ (void)memcpy(reinterpret_cast(&(st_msg_lonlat_info.longitude)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ (void)memcpy(reinterpret_cast(&(st_msg_lonlat_info.sensor_cnt)), (const void *)(&( st_master.uc_data[0])), (size_t)(st_master.us_size)); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, p_st_pno_tbl->st_pno_data[i].us_pno, CID_VEHICLE_SENSORLOCATION_LONLAT, sizeof(SENSORLOCATION_MSG_LONLATINFO_DAT), (const void *)&st_msg_lonlat_info); break; } case VEHICLE_DID_DR_ALTITUDE: { /* Size storage(ALTITUDE) */ st_msg_altitude_info.size = (u_int16)sizeof(SENSORLOCATION_MSG_ALTITUDEINFO_DAT); /* The DR enable flag is set to enabled. */ st_msg_altitude_info.is_exist_dr = SENSORLOCATION_EXISTDR_DR; /* DR status setting */ st_msg_altitude_info.dr_status = st_master.dr_status; /* Set the Altitude */ (void)memcpy(reinterpret_cast(&(st_msg_altitude_info.altitude)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ (void)memcpy(reinterpret_cast(&(st_msg_altitude_info.sensor_cnt)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, p_st_pno_tbl->st_pno_data[i].us_pno, CID_VEHICLE_SENSORLOCATION_ALTITUDE, sizeof(SENSORLOCATION_MSG_ALTITUDEINFO_DAT), (const void *)&st_msg_altitude_info); break; } case VEHICLE_DID_DR_SPEED: { /* Size storage(SPEED) */ st_msg_speed_info.size = (u_int16)sizeof(SENSORMOTION_MSG_SPEEDINFO_DAT); /* The DR enable flag is set to enabled. */ st_msg_speed_info.is_exist_dr = SENSORMOTION_EXISTDR_DR; /* DR status setting */ st_msg_speed_info.dr_status = st_master.dr_status; /* Set the Speed */ (void)memcpy(reinterpret_cast(&(st_msg_speed_info.speed)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ (void)memcpy(reinterpret_cast(&(st_msg_speed_info.sensor_cnt)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, p_st_pno_tbl->st_pno_data[i].us_pno, CID_VEHICLE_SENSORMOTION_SPEED, sizeof(SENSORMOTION_MSG_SPEEDINFO_DAT), (const void *)&st_msg_speed_info); break; } case VEHICLE_DID_DR_HEADING: { /* Size storage(HEADING) */ st_msg_heading_info.size = (u_int16)sizeof(SENSORMOTION_MSG_HEADINGINFO_DAT); /* The DR enable flag is set to enabled. */ st_msg_heading_info.is_exist_dr = SENSORMOTION_EXISTDR_DR; /* DR status setting */ st_msg_heading_info.dr_status = st_master.dr_status; /* Set the Heading */ (void)memcpy(reinterpret_cast(&(st_msg_heading_info.heading)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ (void)memcpy(reinterpret_cast(&(st_msg_heading_info.sensor_cnt)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, p_st_pno_tbl->st_pno_data[i].us_pno, CID_VEHICLE_SENSORMOTION_HEADING, sizeof(SENSORMOTION_MSG_HEADINGINFO_DAT), (const void *)&st_msg_heading_info); break; } case VEHICLE_DID_DR_GYRO_SCALE_FACTOR_LEVEL: { SENSORMOTION_MSG_GYROPARAMETERINFO_DAT stMsgGyroParameterInfo; /* Initialization */ stMsgGyroParameterInfo.reserve[0] = 0; stMsgGyroParameterInfo.reserve[1] = 0; /* GyroOffset/GyroScaleFactor/GyroScaleFactorLevel data master */ /* setup must be completed before data delivery of this DID */ /* The order of processing is defined by DeadReckoning_RcvMsg().,Be careful when changing */ /* Size storage(GYROPARAMETER) */ stMsgGyroParameterInfo.size = (u_int16)sizeof(stMsgGyroParameterInfo); /* GyroOffset acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_GYRO_OFFSET, &st_master); (void)memcpy(reinterpret_cast(&(stMsgGyroParameterInfo.gyro_offset)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgGyroParameterInfo.gyro_offset)); /* GyroScaleFactor acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_GYRO_SCALE_FACTOR, &st_master); (void)memcpy(reinterpret_cast(&(stMsgGyroParameterInfo.gyro_scale_factor)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgGyroParameterInfo.gyro_scale_factor)); /* GyroScaleFactorLevel acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_GYRO_SCALE_FACTOR_LEVEL, &st_master); (void)memcpy(reinterpret_cast(&(stMsgGyroParameterInfo.gyro_scale_factor_level)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgGyroParameterInfo.gyro_scale_factor_level)); /* Data transmission */ (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, p_st_pno_tbl->st_pno_data[i].us_pno, CID_VEHICLE_SENSORMOTION_GYROPARAMETER, sizeof(stMsgGyroParameterInfo), (const void *)&stMsgGyroParameterInfo); } break; case VEHICLE_DID_DR_SPEED_PULSE_SCALE_FACTOR_LEVEL: { SENSORMOTION_MSG_SPEEDPULSEPARAMETERINFO_DAT stMsgSpeedPulseParameterInfo; /* Initialization */ stMsgSpeedPulseParameterInfo.reserve[0] = 0; stMsgSpeedPulseParameterInfo.reserve[1] = 0; stMsgSpeedPulseParameterInfo.reserve[2] = 0; /* GyroOffset/GyroScaleFactor/GyroScaleFactorLevel data master */ /* setup must be completed before data delivery of this DID */ /* The order of processing is defined by DeadReckoning_RcvMsg().,Be careful when changing */ /* Size storage(SPEEDPULSEPARAMETER) */ stMsgSpeedPulseParameterInfo.size = (u_int16)sizeof(stMsgSpeedPulseParameterInfo); /* SpeedPulseScaleFactor acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SPEED_PULSE_SCALE_FACTOR, &st_master); (void)memcpy(reinterpret_cast(&(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor)); /* SpeedPulseScaleFactorLevel acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SPEED_PULSE_SCALE_FACTOR_LEVEL, &st_master); (void)memcpy(reinterpret_cast(&(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor_level)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor_level)); /* Data transmission */ (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, p_st_pno_tbl->st_pno_data[i].us_pno, CID_VEHICLE_SENSORMOTION_SPEEDPULSEPARAMETER, sizeof(stMsgSpeedPulseParameterInfo), (const void *)&stMsgSpeedPulseParameterInfo); } break; /* Other than the above */ default: /* Do not edit. */ break; } } } } /******************************************************************************* * MODULE : DRManagerSndMsg * ABSTRACT : Message transmission processing * FUNCTION : Send a message to the specified PNO * ARGUMENT : us_pno_src : Source PNO * : us_pno_dest : Destination PNO * : us_cid : Command ID * : us_msg_len : Message data body length * : *p_msg_data : Pointer to message data * NOTE : * RETURN : RET_NORMAL : Normal completion * : RET_ERRNOTRDY : Destination process is not wakeup * : RET_ERRMSGFULL : Message queue overflows * : RET_ERRPARAM : Buffer size error ******************************************************************************/ RET_API DRManagerSndMsg(PNO us_pno_src, PNO us_pno_dest, CID us_cid, u_int16 us_msg_len, const void *p_msg_data) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert DEADRECKONING_MSG_BUF st_msg_buf; /* message buffer */ T_APIMSG_MSGBUF_HEADER *p_st_msg_hdr; /* Pointer to the message header */ RET_API l_ret_api; /* Return value */ /* Message buffer initialization */ memset(reinterpret_cast(&st_msg_buf), 0, sizeof(DEADRECKONING_MSG_BUF)); /* Get pointer to send buffer */ p_st_msg_hdr = reinterpret_cast(reinterpret_cast(&st_msg_buf)); /*--------------------------------------------------------------* * Create message headers * *--------------------------------------------------------------*/ p_st_msg_hdr->hdr.sndpno = us_pno_src; /* Source PNO */ p_st_msg_hdr->hdr.cid = us_cid; /* Command ID */ p_st_msg_hdr->hdr.msgbodysize = us_msg_len; /* Message data body length */ /*--------------------------------------------------------------* * Create message data * *--------------------------------------------------------------*/ if ((0 != p_msg_data) && (0 != us_msg_len)) { /* Set the message data */ memcpy(reinterpret_cast(st_msg_buf.data), p_msg_data, (size_t)us_msg_len); } /*--------------------------------------------------------------* * Send messages * *--------------------------------------------------------------*/ l_ret_api = _pb_SndMsg(us_pno_dest, (u_int16)(sizeof(T_APIMSG_MSGBUF_HEADER) + us_msg_len), reinterpret_cast(&st_msg_buf), 0); return (l_ret_api); } /******************************************************************************* * MODULE : DeadReckoningFirstDelivery * ABSTRACT : Vehicle Sensor Initial Data Delivery Process * FUNCTION : Deliver the initial data to the destination. * ARGUMENT : us_pno :Addresses for delivery NO * ul_did :Data ID * NOTE : * RETURN : void ******************************************************************************/ void DeadReckoningFirstDelivery(PNO us_pno, DID ul_did) { AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert DEADRECKONING_DATA_MASTER st_master; /* Data master of normal data */ /* Defines the data master for each API. */ SENSORLOCATION_MSG_LONLATINFO_DAT st_msg_lonlat_info; SENSORLOCATION_MSG_ALTITUDEINFO_DAT st_msg_altitude_info; SENSORMOTION_MSG_SPEEDINFO_DAT st_msg_speed_info; SENSORMOTION_MSG_HEADINGINFO_DAT st_msg_heading_info; /* Initialization */ st_msg_lonlat_info.reserve[0] = 0; st_msg_lonlat_info.reserve[1] = 0; st_msg_lonlat_info.reserve[2] = 0; st_msg_altitude_info.reserve[0] = 0; st_msg_altitude_info.reserve[1] = 0; st_msg_altitude_info.reserve[2] = 0; st_msg_speed_info.reserve = 0; st_msg_heading_info.reserve = 0; /* Align data from the data master for API I/F */ switch (ul_did) { /* Describes the process for each DID. */ case VEHICLE_DID_DR_LATITUDE: { DeadReckoningGetDataMaster(ul_did, &st_master); /* Size storage(LONLAT) */ st_msg_lonlat_info.size = (u_int16)sizeof(SENSORLOCATION_MSG_LONLATINFO_DAT); /* DR status setting */ st_msg_lonlat_info.dr_status = st_master.dr_status; /* The DR enable flag is set to enabled. */ st_msg_lonlat_info.is_exist_dr = SENSORLOCATION_EXISTDR_DR; /* Set the Latitude */ memcpy(&(st_msg_lonlat_info.latitude), &(st_master.uc_data[0]), st_master.us_size); /* Obtain the data master Longitude */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_LONGITUDE, &st_master); /* Set the Longitude */ memcpy(&(st_msg_lonlat_info.longitude), &(st_master.uc_data[0]), st_master.us_size); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ memcpy(&(st_msg_lonlat_info.sensor_cnt), &(st_master.uc_data[0]), st_master.us_size); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, us_pno, CID_VEHICLE_SENSORLOCATION_LONLAT, sizeof(SENSORLOCATION_MSG_LONLATINFO_DAT), (const void *)&st_msg_lonlat_info); break; } case VEHICLE_DID_DR_ALTITUDE: { DeadReckoningGetDataMaster(ul_did, &st_master); /* Size storage(ALTITUDE) */ st_msg_altitude_info.size = (u_int16)sizeof(SENSORLOCATION_MSG_ALTITUDEINFO_DAT); /* The DR enable flag is set to enabled. */ st_msg_altitude_info.is_exist_dr = SENSORLOCATION_EXISTDR_DR; /* DR status setting */ st_msg_altitude_info.dr_status = st_master.dr_status; /* Set the Altitude */ memcpy(&(st_msg_altitude_info.altitude), &(st_master.uc_data[0]), st_master.us_size); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ memcpy(&(st_msg_altitude_info.sensor_cnt), &(st_master.uc_data[0]), st_master.us_size); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, us_pno, CID_VEHICLE_SENSORLOCATION_ALTITUDE, sizeof(SENSORLOCATION_MSG_ALTITUDEINFO_DAT), (const void *)&st_msg_altitude_info); break; } case VEHICLE_DID_DR_SPEED: { DeadReckoningGetDataMaster(ul_did, &st_master); /* Size storage(SPEED) */ st_msg_speed_info.size = (u_int16)sizeof(SENSORMOTION_MSG_SPEEDINFO_DAT); /* The DR enable flag is set to enabled. */ st_msg_speed_info.is_exist_dr = SENSORMOTION_EXISTDR_DR; /* DR status setting */ st_msg_speed_info.dr_status = st_master.dr_status; /* Set the Speed */ memcpy(&(st_msg_speed_info.speed), &(st_master.uc_data[0]), st_master.us_size); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ memcpy(&(st_msg_speed_info.sensor_cnt), &(st_master.uc_data[0]), st_master.us_size); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, us_pno, CID_VEHICLE_SENSORMOTION_SPEED, sizeof(SENSORMOTION_MSG_SPEEDINFO_DAT), (const void *)&st_msg_speed_info); break; } case VEHICLE_DID_DR_HEADING: { DeadReckoningGetDataMaster(ul_did, &st_master); /* Size storage(HEADING) */ st_msg_heading_info.size = (u_int16)sizeof(SENSORMOTION_MSG_HEADINGINFO_DAT); /* The DR enable flag is set to enabled. */ st_msg_heading_info.is_exist_dr = SENSORMOTION_EXISTDR_DR; /* DR status setting */ st_msg_heading_info.dr_status = st_master.dr_status; /* Set the Heading */ (void)memcpy(reinterpret_cast(&(st_msg_heading_info.heading)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); /* Acquire data master SensorCnt */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SNS_COUNTER, &st_master); /* Set the SensorCnt */ (void)memcpy(reinterpret_cast(&(st_msg_heading_info.sensor_cnt)), (const void *)(&(st_master.uc_data[0])), (size_t)(st_master.us_size)); (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, us_pno, CID_VEHICLE_SENSORMOTION_HEADING, sizeof(SENSORMOTION_MSG_HEADINGINFO_DAT), (const void *)&st_msg_heading_info); break; } case VEHICLE_DID_DR_GYRO_SCALE_FACTOR_LEVEL: { SENSORMOTION_MSG_GYROPARAMETERINFO_DAT stMsgGyroParameterInfo; /* Initialization */ stMsgGyroParameterInfo.reserve[0] = 0; stMsgGyroParameterInfo.reserve[1] = 0; /* Size storage(GYROPARAMETER) */ stMsgGyroParameterInfo.size = (u_int16)sizeof(stMsgGyroParameterInfo); /* GyroOffset acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_GYRO_OFFSET, &st_master); (void)memcpy(reinterpret_cast(&(stMsgGyroParameterInfo.gyro_offset)), reinterpret_cast(&(st_master.uc_data[0])), sizeof( stMsgGyroParameterInfo.gyro_offset)); /* GyroScaleFactor acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_GYRO_SCALE_FACTOR, &st_master); (void)memcpy(reinterpret_cast(&(stMsgGyroParameterInfo.gyro_scale_factor)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgGyroParameterInfo.gyro_scale_factor)); /* GyroScaleFactorLevel acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_GYRO_SCALE_FACTOR_LEVEL, &st_master); (void)memcpy(reinterpret_cast(&(stMsgGyroParameterInfo.gyro_scale_factor_level)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgGyroParameterInfo.gyro_scale_factor_level)); /* Data transmission */ (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, us_pno, CID_VEHICLE_SENSORMOTION_GYROPARAMETER, sizeof(stMsgGyroParameterInfo), (const void *)&stMsgGyroParameterInfo); } break; case VEHICLE_DID_DR_SPEED_PULSE_SCALE_FACTOR_LEVEL: { SENSORMOTION_MSG_SPEEDPULSEPARAMETERINFO_DAT stMsgSpeedPulseParameterInfo; /* Initialization */ stMsgSpeedPulseParameterInfo.reserve[0] = 0; stMsgSpeedPulseParameterInfo.reserve[1] = 0; stMsgSpeedPulseParameterInfo.reserve[2] = 0; /* Size storage(SPEEDPULSEPARAMETER) */ stMsgSpeedPulseParameterInfo.size = (u_int16)sizeof(stMsgSpeedPulseParameterInfo); /* SpeedPulseScaleFactor acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SPEED_PULSE_SCALE_FACTOR, &st_master); (void)memcpy(reinterpret_cast(&(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor)); /* SpeedPulseScaleFactorLevel acuisition/setting */ DeadReckoningGetDataMaster(VEHICLE_DID_DR_SPEED_PULSE_SCALE_FACTOR_LEVEL, &st_master); (void)memcpy(reinterpret_cast(&(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor_level)), reinterpret_cast(&(st_master.uc_data[0])), sizeof(stMsgSpeedPulseParameterInfo.speed_pulse_scale_factor_level)); /* Data transmission */ (void)DRManagerSndMsg(PNO_VEHICLE_SENSOR, us_pno, CID_VEHICLE_SENSORMOTION_SPEEDPULSEPARAMETER, sizeof(stMsgSpeedPulseParameterInfo), (const void *)&stMsgSpeedPulseParameterInfo); } break; /* Other than the above */ default: /* Do not edit. */ break; } } // LCOV_EXCL_STOP