/* * Copyright (C) 2021-2024 Huawei Device Co., Ltd. * 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. */ #include "hril_network.h" #include "hril_notification.h" #include "hril_request.h" namespace OHOS { namespace Telephony { enum class NetworkParameter : int32_t { RESPONSE_VALUE = 3, INVALID_RESPONSE_VALUE = 11, }; HRilNetwork::HRilNetwork(int32_t slotId) : HRilBase(slotId) { AddNotificationToMap(); AddBasicHandlerToMap(); AddNetworkSearchHandlerToMap(); } void HRilNetwork::AddNotificationToMap() { // indication notiMemberFuncMap_[HNOTI_NETWORK_CS_REG_STATUS_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return NetworkCsRegStatusUpdated(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_SIGNAL_STRENGTH_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return SignalStrengthUpdated(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_TIME_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return NetworkTimeUpdated(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_TIME_ZONE_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return NetworkTimeZoneUpdated(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_PS_REG_STATUS_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return NetworkPsRegStatusUpdated(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_PHY_CHNL_CFG_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return NetworkPhyChnlCfgUpdated(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_CURRENT_CELL_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return NetworkCurrentCellUpdated_1_2(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_RRC_CONNECTION_STATE_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return GetRrcConnectionStateUpdated(notifyType, error, response, responseLen); }; notiMemberFuncMap_[HNOTI_NETWORK_RESIDENT_NETWORK_UPDATED] = [this](int32_t notifyType, HRilErrNumber error, const void *response, size_t responseLen) { return ResidentNetworkUpdated(notifyType, error, response, responseLen); }; } void HRilNetwork::AddBasicHandlerToMap() { // Response respMemberFuncMap_[HREQ_NETWORK_GET_SIGNAL_STRENGTH] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetSignalStrengthResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_CS_REG_STATUS] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetCsRegStatusResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_PS_REG_STATUS] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetPsRegStatusResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_OPERATOR_INFO] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetOperatorInfoResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_SET_LOCATE_UPDATES] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return SetLocateUpdatesResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_SET_NOTIFICATION_FILTER] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return SetNotificationFilterResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_SET_DEVICE_STATE] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return SetDeviceStateResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_SET_NR_OPTION_MODE] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return SetNrOptionModeResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_NR_OPTION_MODE] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetNrOptionModeResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_RRC_CONNECTION_STATE] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetRrcConnectionStateResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_NR_SSBID_INFO] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetNrSsbIdResponse(requestNum, responseInfo, response, responseLen); }; } void HRilNetwork::AddNetworkSearchHandlerToMap() { respMemberFuncMap_[HREQ_NETWORK_GET_NETWORK_SEARCH_INFORMATION] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetNetworkSearchInformationResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_NETWORK_SELECTION_MODE] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetNetworkSelectionModeResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_SET_NETWORK_SELECTION_MODE] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return SetNetworkSelectionModeResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_SET_PREFERRED_NETWORK] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return SetPreferredNetworkResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_PREFERRED_NETWORK] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetPreferredNetworkResponse(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_NEIGHBORING_CELLINFO_LIST] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetNeighboringCellInfoListResponse_1_2(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_CURRENT_CELL_INFO] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetCurrentCellInfoResponse_1_2(requestNum, responseInfo, response, responseLen); }; respMemberFuncMap_[HREQ_NETWORK_GET_PHYSICAL_CHANNEL_CONFIG] = [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return GetPhysicalChannelConfigResponse(requestNum, responseInfo, response, responseLen); }; } int32_t HRilNetwork::GetSignalStrength(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_SIGNAL_STRENGTH, networkFuncs_, &HRilNetworkReq::GetSignalStrength); } int32_t HRilNetwork::GetCsRegStatus(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_CS_REG_STATUS, networkFuncs_, &HRilNetworkReq::GetCsRegStatus); } int32_t HRilNetwork::GetPsRegStatus(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_PS_REG_STATUS, networkFuncs_, &HRilNetworkReq::GetPsRegStatus); } int32_t HRilNetwork::GetOperatorInfo(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_OPERATOR_INFO, networkFuncs_, &HRilNetworkReq::GetOperatorInfo); } int32_t HRilNetwork::GetNeighboringCellInfoList(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_NEIGHBORING_CELLINFO_LIST, networkFuncs_, &HRilNetworkReq::GetNeighboringCellInfoList); } int32_t HRilNetwork::GetCurrentCellInfo(int32_t serialId) { return RequestVendor( serialId, HREQ_NETWORK_GET_CURRENT_CELL_INFO, networkFuncs_, &HRilNetworkReq::GetCurrentCellInfo); } int32_t HRilNetwork::GetNetworkSearchInformation(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_NETWORK_SEARCH_INFORMATION, networkFuncs_, &HRilNetworkReq::GetNetworkSearchInformation); } int32_t HRilNetwork::GetNetworkSelectionMode(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_NETWORK_SELECTION_MODE, networkFuncs_, &HRilNetworkReq::GetNetworkSelectionMode); } int32_t HRilNetwork::SetNetworkSelectionMode( int32_t serialId, const HDI::Ril::V1_1::SetNetworkModeInfo &networkModeInfo) { HRilSetNetworkModeInfo setNetworkModeInfo = {}; setNetworkModeInfo.selectMode = networkModeInfo.selectMode; ConvertToString(&setNetworkModeInfo.oper, networkModeInfo.oper); TELEPHONY_LOGI("HRilNetwork::SetNetworkSelectionMode selectMode = %{public}d", setNetworkModeInfo.selectMode); return RequestVendor(serialId, HREQ_NETWORK_SET_NETWORK_SELECTION_MODE, networkFuncs_, &HRilNetworkReq::SetNetworkSelectionMode, &setNetworkModeInfo); } int32_t HRilNetwork::SetPreferredNetwork(int32_t serialId, int32_t preferredNetworkType) { return RequestVendor(serialId, HREQ_NETWORK_SET_PREFERRED_NETWORK, networkFuncs_, &HRilNetworkReq::SetPreferredNetwork, &preferredNetworkType); } int32_t HRilNetwork::GetPreferredNetwork(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_PREFERRED_NETWORK, networkFuncs_, &HRilNetworkReq::GetPreferredNetwork); } int32_t HRilNetwork::GetPhysicalChannelConfig(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_PHYSICAL_CHANNEL_CONFIG, networkFuncs_, &HRilNetworkReq::GetPhysicalChannelConfig); } int32_t HRilNetwork::SetLocateUpdates(int32_t serialId, const HDI::Ril::V1_1::RilRegNotifyMode mode) { HRilRegNotifyMode regNotifyMode = static_cast<HRilRegNotifyMode>(mode); if ((regNotifyMode < REG_NOT_NOTIFY) || (regNotifyMode > REG_NOTIFY_STAT_LAC_CELLID)) { TELEPHONY_LOGE("SetLocateUpdates Invalid regNotifyMode parameter"); return HRIL_ERR_INVALID_PARAMETER; } return RequestVendor(serialId, HREQ_NETWORK_SET_LOCATE_UPDATES, networkFuncs_, &HRilNetworkReq::SetLocateUpdates, static_cast<HRilRegNotifyMode>(mode)); } int32_t HRilNetwork::SetNotificationFilter(int32_t serialId, int32_t newFilter) { return RequestVendor(serialId, HREQ_NETWORK_SET_NOTIFICATION_FILTER, networkFuncs_, &HRilNetworkReq::SetNotificationFilter, &newFilter); } int32_t HRilNetwork::SetDeviceState(int32_t serialId, int32_t deviceStateType, int32_t deviceStateOn) { return RequestVendor(serialId, HREQ_NETWORK_SET_DEVICE_STATE, networkFuncs_, &HRilNetworkReq::SetDeviceState, &deviceStateType, &deviceStateOn); } int32_t HRilNetwork::SetNrOptionMode(int32_t serialId, int32_t mode) { return RequestVendor( serialId, HREQ_NETWORK_SET_NR_OPTION_MODE, networkFuncs_, &HRilNetworkReq::SetNrOptionMode, &mode); } int32_t HRilNetwork::GetNrOptionMode(int32_t serialId) { return RequestVendor(serialId, HREQ_NETWORK_GET_NR_OPTION_MODE, networkFuncs_, &HRilNetworkReq::GetNrOptionMode); } int32_t HRilNetwork::GetRrcConnectionState(int32_t serialId) { return RequestVendor( serialId, HREQ_NETWORK_GET_RRC_CONNECTION_STATE, networkFuncs_, &HRilNetworkReq::GetRrcConnectionState); } int32_t HRilNetwork::GetNrSsbId(int32_t serialId) { return RequestVendor( serialId, HREQ_NETWORK_GET_NR_SSBID_INFO, networkFuncs_, &HRilNetworkReq::GetNrSsbId); } int32_t HRilNetwork::GetSignalStrengthResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::Rssi rssi = {}; if (response == nullptr || responseLen != sizeof(HRilRssi)) { TELEPHONY_LOGE("GetSignalStrengthResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { ExchangeRilRssiToHdf(response, rssi); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSignalStrengthResponse, rssi); } int32_t HRilNetwork::GetCsRegStatusResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::CsRegStatusInfo csRegStatusInfo = {}; if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) { TELEPHONY_LOGE("GetCsRegStatusResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response); csRegStatusInfo.notifyType = hrilRegStatusInfo->notifyMode; csRegStatusInfo.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus); csRegStatusInfo.lacCode = hrilRegStatusInfo->lacCode; csRegStatusInfo.cellId = hrilRegStatusInfo->cellId; csRegStatusInfo.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType); TELEPHONY_LOGD("GetCsRegStatusResponse notifyType:%{public}d, regStatus:%{public}d, " "lacCode:%{private}d, cellId:%{private}d, radioTechnology:%{public}d", csRegStatusInfo.notifyType, csRegStatusInfo.regStatus, csRegStatusInfo.lacCode, csRegStatusInfo.cellId, csRegStatusInfo.radioTechnology); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCsRegStatusResponse, csRegStatusInfo); } int32_t HRilNetwork::GetPsRegStatusResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::PsRegStatusInfo psRegStatusInfo = {}; if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) { TELEPHONY_LOGE("GetPsRegStatusResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response); psRegStatusInfo.notifyType = hrilRegStatusInfo->notifyMode; psRegStatusInfo.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus); psRegStatusInfo.lacCode = hrilRegStatusInfo->lacCode; psRegStatusInfo.cellId = hrilRegStatusInfo->cellId; psRegStatusInfo.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType); psRegStatusInfo.isDcNrRestricted = hrilRegStatusInfo->isDcNrRestricted; psRegStatusInfo.isNrAvailable = hrilRegStatusInfo->isNrAvailable; psRegStatusInfo.isEnDcAvailable = hrilRegStatusInfo->isEnDcAvailable; TELEPHONY_LOGD( "GetPsRegStatusResponse notifyType:%{public}d, regStatus:%{public}d, lacCode:%{private}d, " "cellId:%{private}d, technology:%{public}d, isDcNrRestricted:%{private}d, isNrAvailable:%{private}d, " "isEnDcAvailable:%{private}d", psRegStatusInfo.notifyType, psRegStatusInfo.regStatus, psRegStatusInfo.lacCode, psRegStatusInfo.cellId, psRegStatusInfo.radioTechnology, psRegStatusInfo.isDcNrRestricted, psRegStatusInfo.isNrAvailable, psRegStatusInfo.isEnDcAvailable); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPsRegStatusResponse, psRegStatusInfo); } int32_t HRilNetwork::GetOperatorInfoResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::OperatorInfo operatorInfoResult = {}; if (response == nullptr || responseLen == 0) { TELEPHONY_LOGE("GetOperatorInfoResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { char **resp = static_cast<char **>(const_cast<void *>(response)); operatorInfoResult.longName = (resp[HRIL_LONE_NAME] == nullptr) ? "" : resp[HRIL_LONE_NAME]; operatorInfoResult.shortName = (resp[HRIL_SHORT_NAME] == nullptr) ? "" : resp[HRIL_SHORT_NAME]; operatorInfoResult.numeric = (resp[HRIL_NUMERIC] == nullptr) ? "" : resp[HRIL_NUMERIC]; TELEPHONY_LOGD("GetOperatorInfoResponse longName:%{public}s, shortName:%{public}s, numeric:%{public}s", operatorInfoResult.longName.c_str(), operatorInfoResult.shortName.c_str(), operatorInfoResult.numeric.c_str()); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetOperatorInfoResponse, operatorInfoResult); } int32_t HRilNetwork::GetNetworkSearchInformationResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::AvailableNetworkList availableNetworkList = {}; if (response == nullptr || responseLen == 0) { TELEPHONY_LOGE("GetNetworkSearchInformationResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { availableNetworkList.itemNum = 0; BuildOperatorList(availableNetworkList, response, responseLen); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNetworkSearchInformationResponse, availableNetworkList); } int32_t HRilNetwork::GetNetworkSelectionModeResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::SetNetworkModeInfo selectModeInfo = {}; if (response == nullptr || responseLen != sizeof(int32_t)) { TELEPHONY_LOGE("GetNetworkSelectionModeResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { int32_t *resp = static_cast<int32_t *>(const_cast<void *>(response)); selectModeInfo.selectMode = *resp; TELEPHONY_LOGI("GetNetworkSelectionModeResponse selectMode: %{public}d", selectModeInfo.selectMode); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNetworkSelectionModeResponse, selectModeInfo); } int32_t HRilNetwork::SetNetworkSelectionModeResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNetworkSelectionModeResponse); } int32_t HRilNetwork::SetPreferredNetworkResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetPreferredNetworkResponse); } int32_t HRilNetwork::GetPreferredNetworkResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::PreferredNetworkTypeInfo preferredNetworkTypeInfo = {}; if (response == nullptr || responseLen != sizeof(int32_t)) { TELEPHONY_LOGE("GetPreferredNetworkResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { int32_t *resp = static_cast<int32_t *>(const_cast<void *>(response)); preferredNetworkTypeInfo.preferredNetworkType = *resp; TELEPHONY_LOGI("GetPreferredNetworkResponse preferredNetworkType: %{public}d", *resp); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPreferredNetworkResponse, preferredNetworkTypeInfo); } int32_t HRilNetwork::GetNeighboringCellInfoListResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::CellListNearbyInfo cellInfoList; if (response == nullptr || responseLen != sizeof(CellInfoList)) { TELEPHONY_LOGE("GetNeighboringCellInfoListResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { cellInfoList.itemNum = 0; cellInfoList.cellNearbyInfo.clear(); if (BuildNeighboringCellList(cellInfoList, response, responseLen) != 0) { TELEPHONY_LOGE("GetNeighboringCellInfoListResponse BuildNeighboringCellList failed"); return HRIL_ERR_GENERIC_FAILURE; } } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNeighboringCellInfoListResponse, cellInfoList); } int32_t HRilNetwork::GetNeighboringCellInfoListResponse_1_2( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_2::CellListNearbyInfo_1_2 cellInfoList; if (response == nullptr || responseLen != sizeof(CellInfoList)) { TELEPHONY_LOGE("response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { cellInfoList.itemNum = 0; cellInfoList.cellNearbyInfo.clear(); if (BuildNeighboringCellList(cellInfoList, response, responseLen) != 0) { TELEPHONY_LOGE("BuildNeighboringCellList failed"); return HRIL_ERR_GENERIC_FAILURE; } } return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::GetNeighboringCellInfoListResponse_1_2, cellInfoList); } int32_t HRilNetwork::GetCurrentCellInfoResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::CellListCurrentInfo cellList; if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) { TELEPHONY_LOGE("GetCurrentCellInfoResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { cellList.itemNum = 0; cellList.cellCurrentInfo.clear(); if (BuildCurrentCellList(cellList, response, responseLen) != 0) { TELEPHONY_LOGE("GetCurrentCellInfoResponse BuildCurrentCellList failed"); return HRIL_ERR_GENERIC_FAILURE; } } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCurrentCellInfoResponse, cellList); } int32_t HRilNetwork::GetCurrentCellInfoResponse_1_1( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::CellListCurrentInfo_1_1 cellList; if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) { TELEPHONY_LOGE("response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { cellList.itemNum = 0; cellList.cellCurrentInfo.clear(); if (BuildCurrentCellList(cellList, response, responseLen) != 0) { TELEPHONY_LOGE("BuildCurrentCellList failed"); return HRIL_ERR_GENERIC_FAILURE; } } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCurrentCellInfoResponse_1_1, cellList); } int32_t HRilNetwork::GetCurrentCellInfoResponse_1_2( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_2::CellListCurrentInfo_1_2 cellList; if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) { TELEPHONY_LOGE("response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { cellList.itemNum = 0; cellList.cellCurrentInfo.clear(); if (BuildCurrentCellList(cellList, response, responseLen) != 0) { TELEPHONY_LOGE("BuildCurrentCellList failed"); return HRIL_ERR_GENERIC_FAILURE; } } return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::GetCurrentCellInfoResponse_1_2, cellList); } int32_t HRilNetwork::GetPhysicalChannelConfigResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_1::ChannelConfigInfoList phyChnlCfgList = {}; if (response == nullptr || responseLen != sizeof(HRilChannelConfigList)) { TELEPHONY_LOGE("GetPhysicalChannelConfigResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { phyChnlCfgList.itemNum = 0; phyChnlCfgList.channelConfigInfos.clear(); const HRilChannelConfigList *hrilChannelConfigList = static_cast<const HRilChannelConfigList *>(response); phyChnlCfgList.itemNum = hrilChannelConfigList->itemNum; for (int32_t i = 0; i < phyChnlCfgList.itemNum; i++) { HDI::Ril::V1_1::PhysicalChannelConfig phyChnlCfg; phyChnlCfg.cellConnStatus = static_cast<HDI::Ril::V1_1::RilCellConnectionStatus>( hrilChannelConfigList->channelConfigs[i].cellConnStatus); phyChnlCfg.cellBandwidthDownlinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthDownlinkKhz; phyChnlCfg.cellBandwidthUplinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthUplinkKhz; phyChnlCfg.ratType = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilChannelConfigList->channelConfigs[i].ratType); phyChnlCfg.freqRange = hrilChannelConfigList->channelConfigs[i].freqRange; phyChnlCfg.downlinkChannelNum = hrilChannelConfigList->channelConfigs[i].downlinkChannelNum; phyChnlCfg.uplinkChannelNum = hrilChannelConfigList->channelConfigs[i].uplinkChannelNum; phyChnlCfg.physicalCellId = hrilChannelConfigList->channelConfigs[i].physicalCellId; phyChnlCfg.contextIdNum = hrilChannelConfigList->channelConfigs[i].contextIdNum; TELEPHONY_LOGI( "GetPhysicalChannelConfigResponse cellConnStatus:%{private}d, " "cellBandwidthDownlinkKhz:%{private}d, cellBandwidthUplinkKhz:%{private}d, physicalCellId:%{private}d, " "ratType:%{private}d, freqRange:%{private}d, downlinkChannelNum:%{private}d, " "uplinkChannelNum:%{private}d, contextIdNum:%{private}d", phyChnlCfg.cellConnStatus, phyChnlCfg.cellBandwidthDownlinkKhz, phyChnlCfg.cellBandwidthUplinkKhz, phyChnlCfg.ratType, phyChnlCfg.freqRange, phyChnlCfg.downlinkChannelNum, phyChnlCfg.uplinkChannelNum, phyChnlCfg.physicalCellId, phyChnlCfg.contextIdNum); for (int32_t j = 0; j < phyChnlCfg.contextIdNum; j++) { phyChnlCfg.contextIds.push_back(hrilChannelConfigList->channelConfigs[i].contextIds[j]); TELEPHONY_LOGI("contextIds:%{public}d---contextId:%{private}d", j, phyChnlCfg.contextIds[j]); } phyChnlCfgList.channelConfigInfos.push_back(phyChnlCfg); } TELEPHONY_LOGI("GetPhysicalChannelConfigResponse itemNum:%{public}d", phyChnlCfgList.itemNum); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPhysicalChannelConfigResponse, phyChnlCfgList); } int32_t HRilNetwork::SetLocateUpdatesResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetLocateUpdatesResponse); } int32_t HRilNetwork::SetNotificationFilterResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNotificationFilterResponse); } int32_t HRilNetwork::SetDeviceStateResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetDeviceStateResponse); } int32_t HRilNetwork::SetNrOptionModeResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNrOptionModeResponse); } int32_t HRilNetwork::GetNrOptionModeResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { int32_t nrOptionMode = 0; if (response == nullptr || responseLen != sizeof(int32_t)) { TELEPHONY_LOGE("GetNrOptionModeResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { nrOptionMode = *(static_cast<const int32_t *>(response)); TELEPHONY_LOGI("GetNrOptionModeResponse nrOptionMode: %{public}d", nrOptionMode); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNrOptionModeResponse, nrOptionMode); } int32_t HRilNetwork::GetRrcConnectionStateResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { int32_t rrcConnectionState = 0; if (response == nullptr || responseLen != sizeof(int32_t)) { TELEPHONY_LOGE("GetRrcConnectionStateResponse response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { rrcConnectionState = *(static_cast<const int32_t *>(response)); TELEPHONY_LOGD("GetRrcConnectionStateResponse rrcConnectionState: %{public}d", rrcConnectionState); } return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetRrcConnectionStateResponse, rrcConnectionState); } int32_t HRilNetwork::GetNrSsbIdResponse( int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { HDI::Ril::V1_2::NrCellSsbIds nrCellSsbIds; if (response == nullptr || responseLen != sizeof(NrCellSsbIdsVendor)) { TELEPHONY_LOGE("Response is invalid"); if (responseInfo.error == HDI::Ril::V1_1::RilErrType::NONE) { responseInfo.error = HDI::Ril::V1_1::RilErrType::RIL_ERR_INVALID_RESPONSE; } } else { nrCellSsbIds.arfcn = 0; nrCellSsbIds.cid = 0; nrCellSsbIds.pic = 0; nrCellSsbIds.rsrp = 0; nrCellSsbIds.sinr = 0; nrCellSsbIds.timeAdvance = 0; nrCellSsbIds.sCellSsbList.clear(); nrCellSsbIds.nbCellCount = 0; nrCellSsbIds.nbCellSsbList.clear(); if (BuildNrCellSsbIdsInfo(nrCellSsbIds, response, responseLen) != 0) { TELEPHONY_LOGE("BuildNrCellSsbIdsInfo failed"); return HRIL_ERR_GENERIC_FAILURE; } } return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::GetNrSsbIdResponse, nrCellSsbIds); } int32_t HRilNetwork::NetworkCsRegStatusUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) { TELEPHONY_LOGE("response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } HDI::Ril::V1_1::CsRegStatusInfo regStatusInfoNotify = {}; const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response); regStatusInfoNotify.notifyType = hrilRegStatusInfo->notifyMode; regStatusInfoNotify.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus); regStatusInfoNotify.lacCode = hrilRegStatusInfo->lacCode; regStatusInfoNotify.cellId = hrilRegStatusInfo->cellId; regStatusInfoNotify.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType); TELEPHONY_LOGD("notifyType:%{public}d, regStatus:%{public}d, " "lacCode:%{private}d, cellId:%{private}d, radioTechnology:%{public}d", regStatusInfoNotify.notifyType, regStatusInfoNotify.regStatus, regStatusInfoNotify.lacCode, regStatusInfoNotify.cellId, regStatusInfoNotify.radioTechnology); return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCsRegStatusUpdated, regStatusInfoNotify); } int32_t HRilNetwork::NetworkPsRegStatusUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) { TELEPHONY_LOGE("response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } HDI::Ril::V1_1::PsRegStatusInfo regStatusInfoNotify = {}; const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response); regStatusInfoNotify.notifyType = hrilRegStatusInfo->notifyMode; regStatusInfoNotify.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus); regStatusInfoNotify.lacCode = hrilRegStatusInfo->lacCode; regStatusInfoNotify.cellId = hrilRegStatusInfo->cellId; regStatusInfoNotify.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType); regStatusInfoNotify.isDcNrRestricted = hrilRegStatusInfo->isDcNrRestricted; regStatusInfoNotify.isNrAvailable = hrilRegStatusInfo->isNrAvailable; regStatusInfoNotify.isEnDcAvailable = hrilRegStatusInfo->isEnDcAvailable; TELEPHONY_LOGD( "notifyType:%{public}d, regStatus:%{public}d, lacCode:%{private}d, cellId:%{private}d, " "radioTechnology:%{public}d, isDcNrRestricted:%{private}d, isNrAvailable:%{private}d, " "isEnDcAvailable:%{private}d", regStatusInfoNotify.notifyType, regStatusInfoNotify.regStatus, regStatusInfoNotify.lacCode, regStatusInfoNotify.cellId, regStatusInfoNotify.radioTechnology, regStatusInfoNotify.isDcNrRestricted, regStatusInfoNotify.isNrAvailable, regStatusInfoNotify.isEnDcAvailable); return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkPsRegStatusUpdated, regStatusInfoNotify); } int32_t HRilNetwork::SignalStrengthUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr || responseLen != sizeof(HRilRssi)) { TELEPHONY_LOGE("SignalStrengthUpdated response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } HDI::Ril::V1_1::Rssi rssi = {}; ExchangeRilRssiToHdf(response, rssi); return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::SignalStrengthUpdated, rssi); } int32_t HRilNetwork::NetworkTimeUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr) { TELEPHONY_LOGE("NetworkTimeUpdated response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkTimeUpdated, (const char *)response); } int32_t HRilNetwork::NetworkTimeZoneUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr) { TELEPHONY_LOGE("NetworkTimeZoneUpdated response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkTimeZoneUpdated, (const char *)response); } int32_t HRilNetwork::NetworkPhyChnlCfgUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr || responseLen != sizeof(HRilChannelConfigList)) { TELEPHONY_LOGE("NetworkPhyChnlCfgUpdated response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } HDI::Ril::V1_1::ChannelConfigInfoList phyChnlCfgList = {}; phyChnlCfgList.itemNum = 0; phyChnlCfgList.channelConfigInfos.clear(); const HRilChannelConfigList *hrilChannelConfigList = static_cast<const HRilChannelConfigList *>(response); phyChnlCfgList.itemNum = hrilChannelConfigList->itemNum; for (int32_t i = 0; i < phyChnlCfgList.itemNum; i++) { HDI::Ril::V1_1::PhysicalChannelConfig phyChnlCfg; phyChnlCfg.cellConnStatus = static_cast<HDI::Ril::V1_1::RilCellConnectionStatus>( hrilChannelConfigList->channelConfigs[i].cellConnStatus); phyChnlCfg.cellBandwidthDownlinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthDownlinkKhz; phyChnlCfg.cellBandwidthUplinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthUplinkKhz; phyChnlCfg.ratType = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilChannelConfigList->channelConfigs[i].ratType); phyChnlCfg.freqRange = hrilChannelConfigList->channelConfigs[i].freqRange; phyChnlCfg.downlinkChannelNum = hrilChannelConfigList->channelConfigs[i].downlinkChannelNum; phyChnlCfg.uplinkChannelNum = hrilChannelConfigList->channelConfigs[i].uplinkChannelNum; phyChnlCfg.physicalCellId = hrilChannelConfigList->channelConfigs[i].physicalCellId; phyChnlCfg.contextIdNum = hrilChannelConfigList->channelConfigs[i].contextIdNum; for (int32_t j = 0; j < phyChnlCfg.contextIdNum; j++) { phyChnlCfg.contextIds.push_back(hrilChannelConfigList->channelConfigs[i].contextIds[j]); } phyChnlCfgList.channelConfigInfos.push_back(phyChnlCfg); } TELEPHONY_LOGI("NetworkPhyChnlCfgUpdated itemNum:%{public}d", phyChnlCfgList.itemNum); return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkPhyChnlCfgUpdated, phyChnlCfgList); } int32_t HRilNetwork::NetworkCurrentCellUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) { TELEPHONY_LOGE("NetworkCurrentCellUpdated response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } HDI::Ril::V1_1::CellListCurrentInfo cellList; cellList.itemNum = 0; cellList.cellCurrentInfo.clear(); if (BuildCurrentCellList(cellList, response, responseLen) != 0) { TELEPHONY_LOGE("NetworkCurrentCellUpdated BuildCurrentCellList failed"); return HRIL_ERR_GENERIC_FAILURE; } return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCurrentCellUpdated, cellList); } int32_t HRilNetwork::NetworkCurrentCellUpdated_1_2( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) { TELEPHONY_LOGE("response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } HDI::Ril::V1_2::CellListCurrentInfo_1_2 cellList; cellList.itemNum = 0; cellList.cellCurrentInfo.clear(); if (BuildCurrentCellList(cellList, response, responseLen) != 0) { TELEPHONY_LOGE("BuildCurrentCellInfoList failed"); return HRIL_ERR_GENERIC_FAILURE; } return Notify(indType, error, &HDI::Ril::V1_2::IRilCallback::NetworkCurrentCellUpdated_1_2, cellList); } int32_t HRilNetwork::GetRrcConnectionStateUpdated( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(int32_t)) != 0) { TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen); return HRIL_ERR_INVALID_PARAMETER; } if (response == nullptr) { TELEPHONY_LOGE("response is null"); return HRIL_ERR_NULL_POINT; } return Notify( indType, error, &HDI::Ril::V1_1::IRilCallback::GetRrcConnectionStateUpdated, *(const int32_t *)response); } int32_t HRilNetwork::NetworkCurrentCellUpdated_1_1( int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) { TELEPHONY_LOGE("response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } HDI::Ril::V1_1::CellListCurrentInfo_1_1 cellList; cellList.itemNum = 0; cellList.cellCurrentInfo.clear(); if (BuildCurrentCellList(cellList, response, responseLen) != 0) { TELEPHONY_LOGE("BuildCurrentCellList failed"); return HRIL_ERR_GENERIC_FAILURE; } return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCurrentCellUpdated_1_1, cellList); } int32_t HRilNetwork::ResidentNetworkUpdated(int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen) { if (response == nullptr) { TELEPHONY_LOGE("ResidentNetworkUpdated response is invalid"); return HRIL_ERR_INVALID_PARAMETER; } return Notify(indType, error, &HDI::Ril::V1_2::IRilCallback::ResidentNetworkUpdated, (const char *)response); } void HRilNetwork::ExchangeRilRssiToHdf(const void *response, HDI::Ril::V1_1::Rssi &rssi) { HRilRssi *rilRssi = (HRilRssi *)response; rssi.gw.rxlev = rilRssi->gsmRssi.rxlev; rssi.gw.ber = rilRssi->gsmRssi.ber; rssi.cdma.absoluteRssi = rilRssi->cdmaRssi.absoluteRssi; rssi.cdma.ecno = rilRssi->cdmaRssi.ecno; rssi.wcdma.rxlev = rilRssi->wcdmaRssi.rxlev; rssi.wcdma.ber = rilRssi->wcdmaRssi.ber; rssi.wcdma.ecio = rilRssi->wcdmaRssi.ecio; rssi.wcdma.rscp = rilRssi->wcdmaRssi.rscp; rssi.lte.rxlev = rilRssi->lteRssi.rxlev; rssi.lte.rsrp = rilRssi->lteRssi.rsrp; rssi.lte.rsrq = rilRssi->lteRssi.rsrq; rssi.lte.snr = rilRssi->lteRssi.snr; rssi.tdScdma.rscp = rilRssi->tdScdmaRssi.rscp; rssi.nr.rsrp = rilRssi->nrRssi.rsrp; rssi.nr.rsrq = rilRssi->nrRssi.rsrq; rssi.nr.sinr = rilRssi->nrRssi.sinr; TELEPHONY_LOGD("ExchangeRilRssiToHdf rxlev:%{public}d, rsrp:%{public}d", rssi.lte.rxlev, rssi.lte.rsrp); } void HRilNetwork::BuildOperatorList( HDI::Ril::V1_1::AvailableNetworkList &availableNetworkList, const void *response, size_t responseLen) { size_t numStrings = responseLen / sizeof(AvailableOperInfo *); HDI::Ril::V1_1::AvailableNetworkInfo operInfo = {}; availableNetworkList.itemNum = numStrings; TELEPHONY_LOGI( "BuildOperatorList availableNetworkList.itemNum: %{public}lu", static_cast<unsigned long>(numStrings)); for (size_t i = 0; i < numStrings; i++) { AvailableOperInfo *curPtr = ((AvailableOperInfo **)response)[i]; if (curPtr != nullptr) { operInfo.status = curPtr->status; TELEPHONY_LOGI("operInfo.status:%{public}d", curPtr->status); operInfo.longName = (curPtr->longName == nullptr) ? "" : curPtr->longName; TELEPHONY_LOGI("operInfo.longName:%{public}s", curPtr->longName); operInfo.numeric = (curPtr->numeric == nullptr) ? "" : curPtr->numeric; TELEPHONY_LOGI("operInfo.numeric:%{public}s", curPtr->numeric); operInfo.shortName = (curPtr->shortName == nullptr) ? "" : curPtr->shortName; TELEPHONY_LOGI("operInfo.shortName:%{public}s", curPtr->shortName); operInfo.rat = curPtr->rat; TELEPHONY_LOGI("operInfo.rat:%{public}d", curPtr->rat); availableNetworkList.availableNetworkInfo.push_back(operInfo); } } } void HRilNetwork::FillCellNearbyInfo(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *cellPtr) { cellInfo.ratType = cellPtr->ratType; switch (cellPtr->ratType) { case NETWORK_TYPE_GSM: cellInfo.serviceCells.gsm.band = cellPtr->ServiceCellParas.gsm.band; cellInfo.serviceCells.gsm.arfcn = cellPtr->ServiceCellParas.gsm.arfcn; cellInfo.serviceCells.gsm.bsic = cellPtr->ServiceCellParas.gsm.bsic; cellInfo.serviceCells.gsm.cellId = cellPtr->ServiceCellParas.gsm.cellId; cellInfo.serviceCells.gsm.lac = cellPtr->ServiceCellParas.gsm.lac; cellInfo.serviceCells.gsm.rxlev = cellPtr->ServiceCellParas.gsm.rxlev; break; case NETWORK_TYPE_LTE: cellInfo.serviceCells.lte.arfcn = cellPtr->ServiceCellParas.lte.arfcn; cellInfo.serviceCells.lte.pci = cellPtr->ServiceCellParas.lte.pci; cellInfo.serviceCells.lte.rsrp = cellPtr->ServiceCellParas.lte.rsrp; cellInfo.serviceCells.lte.rsrq = cellPtr->ServiceCellParas.lte.rsrq; cellInfo.serviceCells.lte.rxlev = cellPtr->ServiceCellParas.lte.rxlev; break; case NETWORK_TYPE_WCDMA: cellInfo.serviceCells.wcdma.arfcn = cellPtr->ServiceCellParas.wcdma.arfcn; cellInfo.serviceCells.wcdma.psc = cellPtr->ServiceCellParas.wcdma.psc; cellInfo.serviceCells.wcdma.rscp = cellPtr->ServiceCellParas.wcdma.rscp; cellInfo.serviceCells.wcdma.ecno = cellPtr->ServiceCellParas.wcdma.ecno; break; case NETWORK_TYPE_CDMA: FillCellNearbyInfoCdma(cellInfo, cellPtr); break; case NETWORK_TYPE_TDSCDMA: FillCellNearbyInfoTdscdma(cellInfo, cellPtr); break; case NETWORK_TYPE_NR: cellInfo.serviceCells.nr.nrArfcn = cellPtr->ServiceCellParas.nr.nrArfcn; cellInfo.serviceCells.nr.pci = cellPtr->ServiceCellParas.nr.pci; cellInfo.serviceCells.nr.tac = cellPtr->ServiceCellParas.nr.tac; cellInfo.serviceCells.nr.nci = cellPtr->ServiceCellParas.nr.nci; break; default: cellInfo.serviceCells.gsm.band = 0; cellInfo.serviceCells.gsm.arfcn = 0; cellInfo.serviceCells.gsm.bsic = 0; cellInfo.serviceCells.gsm.cellId = 0; cellInfo.serviceCells.gsm.lac = 0; cellInfo.serviceCells.gsm.rxlev = 0; break; } } void HRilNetwork::FillCellNearbyInfoTdscdma(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *hrilCellPtr) { cellInfo.serviceCells.tdscdma.arfcn = hrilCellPtr->ServiceCellParas.tdscdma.arfcn; cellInfo.serviceCells.tdscdma.syncId = hrilCellPtr->ServiceCellParas.tdscdma.syncId; cellInfo.serviceCells.tdscdma.sc = hrilCellPtr->ServiceCellParas.tdscdma.sc; cellInfo.serviceCells.tdscdma.cellId = hrilCellPtr->ServiceCellParas.tdscdma.cellId; cellInfo.serviceCells.tdscdma.lac = hrilCellPtr->ServiceCellParas.tdscdma.lac; cellInfo.serviceCells.tdscdma.rscp = hrilCellPtr->ServiceCellParas.tdscdma.rscp; cellInfo.serviceCells.tdscdma.drx = hrilCellPtr->ServiceCellParas.tdscdma.drx; cellInfo.serviceCells.tdscdma.rac = hrilCellPtr->ServiceCellParas.tdscdma.rac; cellInfo.serviceCells.tdscdma.cpid = hrilCellPtr->ServiceCellParas.tdscdma.cpid; } void HRilNetwork::FillCellNearbyInfoCdma(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *hrilCellPtr) { cellInfo.serviceCells.cdma.systemId = hrilCellPtr->ServiceCellParas.cdma.systemId; cellInfo.serviceCells.cdma.networkId = hrilCellPtr->ServiceCellParas.cdma.networkId; cellInfo.serviceCells.cdma.baseId = hrilCellPtr->ServiceCellParas.cdma.baseId; cellInfo.serviceCells.cdma.zoneId = hrilCellPtr->ServiceCellParas.cdma.zoneId; cellInfo.serviceCells.cdma.pilotPn = hrilCellPtr->ServiceCellParas.cdma.pilotPn; cellInfo.serviceCells.cdma.pilotStrength = hrilCellPtr->ServiceCellParas.cdma.pilotStrength; cellInfo.serviceCells.cdma.channel = hrilCellPtr->ServiceCellParas.cdma.channel; cellInfo.serviceCells.cdma.longitude = hrilCellPtr->ServiceCellParas.cdma.longitude; cellInfo.serviceCells.cdma.latitude = hrilCellPtr->ServiceCellParas.cdma.latitude; } void HRilNetwork::FillCellNearbyInfo(HDI::Ril::V1_2::CellNearbyInfo_1_2 &cellInfo, const CellInfo *cellPtr) { cellInfo.ratType = cellPtr->ratType; switch (cellPtr->ratType) { case NETWORK_TYPE_GSM: cellInfo.serviceCells.gsm.band = cellPtr->ServiceCellParas.gsm.band; cellInfo.serviceCells.gsm.arfcn = cellPtr->ServiceCellParas.gsm.arfcn; cellInfo.serviceCells.gsm.bsic = cellPtr->ServiceCellParas.gsm.bsic; cellInfo.serviceCells.gsm.cellId = cellPtr->ServiceCellParas.gsm.cellId; cellInfo.serviceCells.gsm.lac = cellPtr->ServiceCellParas.gsm.lac; cellInfo.serviceCells.gsm.rxlev = cellPtr->ServiceCellParas.gsm.rxlev; break; case NETWORK_TYPE_LTE: cellInfo.serviceCells.lte.arfcn = cellPtr->ServiceCellParas.lte.arfcn; cellInfo.serviceCells.lte.pci = cellPtr->ServiceCellParas.lte.pci; cellInfo.serviceCells.lte.rsrp = cellPtr->ServiceCellParas.lte.rsrp; cellInfo.serviceCells.lte.rsrq = cellPtr->ServiceCellParas.lte.rsrq; cellInfo.serviceCells.lte.rxlev = cellPtr->ServiceCellParas.lte.rxlev; break; case NETWORK_TYPE_WCDMA: cellInfo.serviceCells.wcdma.arfcn = cellPtr->ServiceCellParas.wcdma.arfcn; cellInfo.serviceCells.wcdma.psc = cellPtr->ServiceCellParas.wcdma.psc; cellInfo.serviceCells.wcdma.rscp = cellPtr->ServiceCellParas.wcdma.rscp; cellInfo.serviceCells.wcdma.ecno = cellPtr->ServiceCellParas.wcdma.ecno; break; case NETWORK_TYPE_CDMA: FillCellNearbyInfoCdma(cellInfo, cellPtr); break; case NETWORK_TYPE_TDSCDMA: FillCellNearbyInfoTdscdma(cellInfo, cellPtr); break; case NETWORK_TYPE_NR: cellInfo.serviceCells.nr.nrArfcn = cellPtr->ServiceCellParas.nr.nrArfcn; cellInfo.serviceCells.nr.pci = cellPtr->ServiceCellParas.nr.pci; cellInfo.serviceCells.nr.tac = cellPtr->ServiceCellParas.nr.tac; cellInfo.serviceCells.nr.nci = cellPtr->ServiceCellParas.nr.nci; cellInfo.serviceCells.nr.rsrp = cellPtr->ServiceCellParas.nr.rsrp; cellInfo.serviceCells.nr.rsrq = cellPtr->ServiceCellParas.nr.rsrq; break; default: cellInfo.serviceCells.gsm.band = 0; cellInfo.serviceCells.gsm.arfcn = 0; cellInfo.serviceCells.gsm.bsic = 0; cellInfo.serviceCells.gsm.cellId = 0; cellInfo.serviceCells.gsm.lac = 0; cellInfo.serviceCells.gsm.rxlev = 0; break; } } void HRilNetwork::FillCellNearbyInfoTdscdma(HDI::Ril::V1_2::CellNearbyInfo_1_2 &cellInfo, const CellInfo *hrilCellPtr) { cellInfo.serviceCells.tdscdma.arfcn = hrilCellPtr->ServiceCellParas.tdscdma.arfcn; cellInfo.serviceCells.tdscdma.syncId = hrilCellPtr->ServiceCellParas.tdscdma.syncId; cellInfo.serviceCells.tdscdma.sc = hrilCellPtr->ServiceCellParas.tdscdma.sc; cellInfo.serviceCells.tdscdma.cellId = hrilCellPtr->ServiceCellParas.tdscdma.cellId; cellInfo.serviceCells.tdscdma.lac = hrilCellPtr->ServiceCellParas.tdscdma.lac; cellInfo.serviceCells.tdscdma.rscp = hrilCellPtr->ServiceCellParas.tdscdma.rscp; cellInfo.serviceCells.tdscdma.drx = hrilCellPtr->ServiceCellParas.tdscdma.drx; cellInfo.serviceCells.tdscdma.rac = hrilCellPtr->ServiceCellParas.tdscdma.rac; cellInfo.serviceCells.tdscdma.cpid = hrilCellPtr->ServiceCellParas.tdscdma.cpid; } void HRilNetwork::FillCellNearbyInfoCdma(HDI::Ril::V1_2::CellNearbyInfo_1_2 &cellInfo, const CellInfo *hrilCellPtr) { cellInfo.serviceCells.cdma.systemId = hrilCellPtr->ServiceCellParas.cdma.systemId; cellInfo.serviceCells.cdma.networkId = hrilCellPtr->ServiceCellParas.cdma.networkId; cellInfo.serviceCells.cdma.baseId = hrilCellPtr->ServiceCellParas.cdma.baseId; cellInfo.serviceCells.cdma.zoneId = hrilCellPtr->ServiceCellParas.cdma.zoneId; cellInfo.serviceCells.cdma.pilotPn = hrilCellPtr->ServiceCellParas.cdma.pilotPn; cellInfo.serviceCells.cdma.pilotStrength = hrilCellPtr->ServiceCellParas.cdma.pilotStrength; cellInfo.serviceCells.cdma.channel = hrilCellPtr->ServiceCellParas.cdma.channel; cellInfo.serviceCells.cdma.longitude = hrilCellPtr->ServiceCellParas.cdma.longitude; cellInfo.serviceCells.cdma.latitude = hrilCellPtr->ServiceCellParas.cdma.latitude; } int32_t HRilNetwork::BuildNeighboringCellList( HDI::Ril::V1_1::CellListNearbyInfo &cellInfoList, const void *response, size_t responseLen) { const CellInfoList *temp = reinterpret_cast<const CellInfoList *>(response); cellInfoList.itemNum = temp->itemNum; TELEPHONY_LOGI("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum); for (int32_t i = 0; i < temp->itemNum; i++) { HDI::Ril::V1_1::CellNearbyInfo cellInfo; CellInfo *cell = temp->cellNearbyInfo + i; if (cell == nullptr) { TELEPHONY_LOGE("cell is nullptr"); return HRIL_ERR_GENERIC_FAILURE; } FillCellNearbyInfo(cellInfo, cell); cellInfoList.cellNearbyInfo.push_back(cellInfo); } return HRIL_ERR_SUCCESS; } int32_t HRilNetwork::BuildNeighboringCellList( HDI::Ril::V1_2::CellListNearbyInfo_1_2 &cellInfoList, const void *response, size_t responseLen) { const CellInfoList *temp = reinterpret_cast<const CellInfoList *>(response); cellInfoList.itemNum = temp->itemNum; TELEPHONY_LOGI("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum); for (int32_t i = 0; i < temp->itemNum; i++) { HDI::Ril::V1_2::CellNearbyInfo_1_2 cellInfo; CellInfo *cell = temp->cellNearbyInfo + i; if (cell == nullptr) { TELEPHONY_LOGE("cell is nullptr"); return HRIL_ERR_GENERIC_FAILURE; } FillCellNearbyInfo(cellInfo, cell); cellInfoList.cellNearbyInfo.push_back(cellInfo); } return HRIL_ERR_SUCCESS; } void HRilNetwork::FillCellInfoType( HDI::Ril::V1_1::CurrentCellInfo &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor) { if (hrilCellInfoVendor->ratType == NETWORK_TYPE_WCDMA) { cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn; cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId; cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc; cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac; cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev; cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp; cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno; cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura; cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx; } else if (hrilCellInfoVendor->ratType == NETWORK_TYPE_CDMA) { cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId; cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId; cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId; cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId; cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn; cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength; cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel; cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude; cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude; } else if (hrilCellInfoVendor->ratType == NETWORK_TYPE_TDSCDMA) { cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn; cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId; cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc; cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId; cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac; cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp; cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx; cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac; cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid; } } void HRilNetwork::FillCellInfoType( HDI::Ril::V1_1::CurrentCellInfo_1_1 &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor) { switch (hrilCellInfoVendor->ratType) { case NETWORK_TYPE_WCDMA: cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn; cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId; cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc; cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac; cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev; cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp; cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno; cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura; cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx; break; case NETWORK_TYPE_CDMA: cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId; cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId; cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId; cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId; cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn; cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength; cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel; cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude; cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude; break; case NETWORK_TYPE_TDSCDMA: cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn; cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId; cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc; cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId; cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac; cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp; cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx; cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac; cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid; break; case NETWORK_TYPE_NR: cellInfo.serviceCells.nr.nrArfcn = hrilCellInfoVendor->ServiceCellParas.nr.nrArfcn; cellInfo.serviceCells.nr.pci = hrilCellInfoVendor->ServiceCellParas.nr.pci; cellInfo.serviceCells.nr.tac = hrilCellInfoVendor->ServiceCellParas.nr.tac; cellInfo.serviceCells.nr.nci = hrilCellInfoVendor->ServiceCellParas.nr.nci; cellInfo.serviceCells.nr.rsrp = hrilCellInfoVendor->ServiceCellParas.nr.rsrp; cellInfo.serviceCells.nr.rsrq = hrilCellInfoVendor->ServiceCellParas.nr.rsrq; break; default: break; } } void HRilNetwork::FillCellInfoType( HDI::Ril::V1_2::CurrentCellInfo_1_2 &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor) { switch (hrilCellInfoVendor->ratType) { case NETWORK_TYPE_WCDMA: cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn; cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId; cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc; cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac; cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev; cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp; cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno; cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura; cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx; break; case NETWORK_TYPE_CDMA: cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId; cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId; cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId; cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId; cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn; cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength; cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel; cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude; cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude; break; case NETWORK_TYPE_TDSCDMA: cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn; cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId; cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc; cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId; cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac; cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp; cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx; cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac; cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid; break; case NETWORK_TYPE_NR: cellInfo.serviceCells.nr.nrArfcn = hrilCellInfoVendor->ServiceCellParas.nr.nrArfcn; cellInfo.serviceCells.nr.pci = hrilCellInfoVendor->ServiceCellParas.nr.pci; cellInfo.serviceCells.nr.tac = hrilCellInfoVendor->ServiceCellParas.nr.tac; cellInfo.serviceCells.nr.nci = hrilCellInfoVendor->ServiceCellParas.nr.nci; cellInfo.serviceCells.nr.rsrp = hrilCellInfoVendor->ServiceCellParas.nr.rsrp; cellInfo.serviceCells.nr.rsrq = hrilCellInfoVendor->ServiceCellParas.nr.rsrq; break; default: break; } } void HRilNetwork::FillCurrentCellInfo( HDI::Ril::V1_1::CurrentCellInfo &cellInfo, const CurrentCellInfoVendor *cellInfoVendor) { cellInfo.ratType = cellInfoVendor->ratType; cellInfo.mcc = cellInfoVendor->mcc; cellInfo.mnc = cellInfoVendor->mnc; switch (cellInfoVendor->ratType) { case NETWORK_TYPE_GSM: cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band; cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn; cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic; cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId; cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac; cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev; cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality; cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta; break; case NETWORK_TYPE_LTE: cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn; cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId; cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci; cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac; cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp; cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq; cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi; break; case NETWORK_TYPE_WCDMA: case NETWORK_TYPE_CDMA: case NETWORK_TYPE_TDSCDMA: FillCellInfoType(cellInfo, cellInfoVendor); break; case NETWORK_TYPE_NR: cellInfo.serviceCells.nr.nrArfcn = cellInfoVendor->ServiceCellParas.nr.nrArfcn; cellInfo.serviceCells.nr.pci = cellInfoVendor->ServiceCellParas.nr.pci; cellInfo.serviceCells.nr.tac = cellInfoVendor->ServiceCellParas.nr.tac; cellInfo.serviceCells.nr.nci = cellInfoVendor->ServiceCellParas.nr.nci; break; default: cellInfo.serviceCells.wcdma.arfcn = 0; cellInfo.serviceCells.wcdma.cellId = 0; cellInfo.serviceCells.wcdma.psc = 0; cellInfo.serviceCells.wcdma.lac = 0; cellInfo.serviceCells.wcdma.rxlev = 0; cellInfo.serviceCells.wcdma.rscp = 0; cellInfo.serviceCells.wcdma.ecno = 0; cellInfo.serviceCells.wcdma.drx = 0; cellInfo.serviceCells.wcdma.ura = 0; break; } } void HRilNetwork::FillCurrentCellInfo( HDI::Ril::V1_1::CurrentCellInfo_1_1 &cellInfo, const CurrentCellInfoVendor *cellInfoVendor) { cellInfo.ratType = cellInfoVendor->ratType; cellInfo.mcc = cellInfoVendor->mcc; cellInfo.mnc = cellInfoVendor->mnc; switch (cellInfoVendor->ratType) { case NETWORK_TYPE_GSM: cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band; cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn; cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic; cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId; cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac; cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev; cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality; cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta; break; case NETWORK_TYPE_LTE: cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn; cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId; cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci; cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac; cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp; cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq; cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi; break; case NETWORK_TYPE_WCDMA: case NETWORK_TYPE_CDMA: case NETWORK_TYPE_TDSCDMA: case NETWORK_TYPE_NR: FillCellInfoType(cellInfo, cellInfoVendor); break; default: cellInfo.serviceCells.wcdma.arfcn = 0; cellInfo.serviceCells.wcdma.cellId = 0; cellInfo.serviceCells.wcdma.psc = 0; cellInfo.serviceCells.wcdma.lac = 0; cellInfo.serviceCells.wcdma.rxlev = 0; cellInfo.serviceCells.wcdma.rscp = 0; cellInfo.serviceCells.wcdma.ecno = 0; cellInfo.serviceCells.wcdma.drx = 0; cellInfo.serviceCells.wcdma.ura = 0; break; } } void HRilNetwork::FillCurrentCellInfo( HDI::Ril::V1_2::CurrentCellInfo_1_2 &cellInfo, const CurrentCellInfoVendor *cellInfoVendor) { cellInfo.ratType = cellInfoVendor->ratType; cellInfo.mcc = cellInfoVendor->mcc; cellInfo.mnc = cellInfoVendor->mnc; switch (cellInfoVendor->ratType) { case NETWORK_TYPE_GSM: cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band; cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn; cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic; cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId; cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac; cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev; cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality; cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta; break; case NETWORK_TYPE_LTE: cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn; cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId; cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci; cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac; cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp; cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq; cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi; break; case NETWORK_TYPE_WCDMA: case NETWORK_TYPE_CDMA: case NETWORK_TYPE_TDSCDMA: case NETWORK_TYPE_NR: FillCellInfoType(cellInfo, cellInfoVendor); break; default: cellInfo.serviceCells.wcdma.arfcn = 0; cellInfo.serviceCells.wcdma.cellId = 0; cellInfo.serviceCells.wcdma.psc = 0; cellInfo.serviceCells.wcdma.lac = 0; cellInfo.serviceCells.wcdma.rxlev = 0; cellInfo.serviceCells.wcdma.rscp = 0; cellInfo.serviceCells.wcdma.ecno = 0; cellInfo.serviceCells.wcdma.drx = 0; cellInfo.serviceCells.wcdma.ura = 0; break; } } int32_t HRilNetwork::BuildCurrentCellList(HDI::Ril::V1_1::CellListCurrentInfo &cellInfoList, const void *response, size_t responseLen) { const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response); cellInfoList.itemNum = temp->itemNum; TELEPHONY_LOGI("BuildCurrentCellList cellInfoList.itemNum = %{public}d", cellInfoList.itemNum); for (int32_t i = 0; i < temp->itemNum; i++) { HDI::Ril::V1_1::CurrentCellInfo cellInfo; CurrentCellInfoVendor *cell = temp->currentCellInfo + i; if (cell == nullptr) { TELEPHONY_LOGE("BuildCurrentCellList cell is nullptr"); return HRIL_ERR_GENERIC_FAILURE; } FillCurrentCellInfo(cellInfo, cell); cellInfoList.cellCurrentInfo.push_back(cellInfo); } return HRIL_ERR_SUCCESS; } int32_t HRilNetwork::BuildCurrentCellList( HDI::Ril::V1_1::CellListCurrentInfo_1_1 &cellInfoList, const void *response, size_t responseLen) { const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response); cellInfoList.itemNum = temp->itemNum; TELEPHONY_LOGI("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum); for (int32_t i = 0; i < temp->itemNum; i++) { HDI::Ril::V1_1::CurrentCellInfo_1_1 cellInfo; CurrentCellInfoVendor *cell = temp->currentCellInfo + i; if (cell == nullptr) { TELEPHONY_LOGE("cell is nullptr"); return HRIL_ERR_GENERIC_FAILURE; } FillCurrentCellInfo(cellInfo, cell); cellInfoList.cellCurrentInfo.push_back(cellInfo); } return HRIL_ERR_SUCCESS; } int32_t HRilNetwork::BuildCurrentCellList( HDI::Ril::V1_2::CellListCurrentInfo_1_2 &cellInfoList, const void *response, size_t responseLen) { const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response); cellInfoList.itemNum = temp->itemNum; TELEPHONY_LOGD("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum); for (int32_t i = 0; i < temp->itemNum; i++) { HDI::Ril::V1_2::CurrentCellInfo_1_2 cellInfo; CurrentCellInfoVendor *cell = temp->currentCellInfo + i; if (cell == nullptr) { TELEPHONY_LOGE("cell is nullptr"); return HRIL_ERR_GENERIC_FAILURE; } FillCurrentCellInfo(cellInfo, cell); cellInfoList.cellCurrentInfo.push_back(cellInfo); } return HRIL_ERR_SUCCESS; } int32_t HRilNetwork::BuildNrCellSsbIdsInfo(HDI::Ril::V1_2::NrCellSsbIds &nrCellSsbIds, const void *response, size_t responseLen) { const NrCellSsbIdsVendor *temp = reinterpret_cast<const NrCellSsbIdsVendor *>(response); if (temp->nbCellCount > MAX_NBCELL_COUNT) { TELEPHONY_LOGE("NbCellCount > max size 4"); return HRIL_ERR_GENERIC_FAILURE; } nrCellSsbIds.arfcn = temp->arfcn; nrCellSsbIds.cid = temp->cid; nrCellSsbIds.pic = temp->pic; nrCellSsbIds.rsrp = temp->rsrp; nrCellSsbIds.sinr = temp->sinr; nrCellSsbIds.timeAdvance = temp->timeAdvance; nrCellSsbIds.nbCellCount = temp->nbCellCount; for (int32_t i = 0; i < SCELL_SSB_LIST; i++) { HDI::Ril::V1_2::SsbIdInfo ssbIdInfo = {0}; SsbIdInfoVendor *sCellSsbList = temp->sCellSsbList + i; ssbIdInfo.ssbId = sCellSsbList->ssbId; ssbIdInfo.rsrp = sCellSsbList->rsrp; nrCellSsbIds.sCellSsbList.push_back(ssbIdInfo); } for (int32_t i = 0; i < temp->nbCellCount; i++) { HDI::Ril::V1_2::NeighboringCellSsbInfo neighboringCellSsbInfo; neighboringCellSsbInfo.pci = temp->nbCellSsbList[i].pci; neighboringCellSsbInfo.arfcn = temp->nbCellSsbList[i].arfcn; neighboringCellSsbInfo.rsrp = temp->nbCellSsbList[i].rsrp; neighboringCellSsbInfo.sinr = temp->nbCellSsbList[i].sinr; for (int32_t j = 0; j < NBCELL_SSB_LIST; j++) { HDI::Ril::V1_2::SsbIdInfo ssbIdInfo = {0}; SsbIdInfoVendor *sCellSsbList = temp->nbCellSsbList[i].ssbIdList + j; ssbIdInfo.ssbId = sCellSsbList->ssbId; ssbIdInfo.rsrp = sCellSsbList->rsrp; neighboringCellSsbInfo.ssbIdList.push_back(ssbIdInfo); } nrCellSsbIds.nbCellSsbList.push_back(neighboringCellSsbInfo); } return HRIL_ERR_SUCCESS; } bool HRilNetwork::IsNetworkResponse(uint32_t code) { return ((code >= HREQ_NETWORK_BASE) && (code < HREQ_COMMON_BASE)); } bool HRilNetwork::IsNetworkNotification(uint32_t code) { return ((code >= HNOTI_NETWORK_BASE) && (code < HNOTI_COMMON_BASE)); } bool HRilNetwork::IsNetworkRespOrNotify(uint32_t code) { return IsNetworkResponse(code) || IsNetworkNotification(code); } void HRilNetwork::RegisterNetworkFuncs(const HRilNetworkReq *networkFuncs) { networkFuncs_ = networkFuncs; } } // namespace Telephony } // namespace OHOS