• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "ratUtils.h"
18 
19 namespace aidl {
20 namespace android {
21 namespace hardware {
22 namespace radio {
23 namespace implementation {
24 namespace ratUtils {
25 
supportedRadioTechBitmask(const ModemTechnology mtech)26 uint32_t supportedRadioTechBitmask(const ModemTechnology mtech) {
27     static constexpr uint32_t kTechsBitmask[] = {
28         kGSM, kWCDMA, kCDMA, kEVDO, kTDSCDMA, kLTE, kNR,
29     };
30 
31     const size_t i = static_cast<size_t>(mtech);
32     if (i < (sizeof(kTechsBitmask) / sizeof(kTechsBitmask[0]))) {
33         return kTechsBitmask[i];
34     } else {
35         return 0;
36     }
37 }
38 
currentRadioTechnology(const ModemTechnology mtech)39 RadioTechnology currentRadioTechnology(const ModemTechnology mtech) {
40     static constexpr RadioTechnology kCurrentTech[] = {
41         RadioTechnology::EDGE,
42         RadioTechnology::HSPA,
43         RadioTechnology::IS95B,
44         RadioTechnology::EVDO_B,
45         RadioTechnology::TD_SCDMA,
46         RadioTechnology::LTE,
47         RadioTechnology::NR,
48     };
49 
50     const size_t i = static_cast<size_t>(mtech);
51     if (i < (sizeof(kCurrentTech) / sizeof(kCurrentTech[0]))) {
52         return kCurrentTech[i];
53     } else {
54         return RadioTechnology::EDGE;
55     }
56 }
57 
modemTechnologyFromRadioTechnologyBitmask(const uint32_t radioTechnologyBitmask)58 ModemTechnology modemTechnologyFromRadioTechnologyBitmask(
59         const uint32_t radioTechnologyBitmask) {
60     if (radioTechnologyBitmask & kNR) {
61         return ModemTechnology::NR;
62     }
63     if (radioTechnologyBitmask & kLTE) {
64         return ModemTechnology::LTE;
65     }
66     if (radioTechnologyBitmask & kTDSCDMA) {
67         return ModemTechnology::TDSCDMA;
68     }
69     if (radioTechnologyBitmask & kEVDO) {
70         return ModemTechnology::EVDO;
71     }
72     if (radioTechnologyBitmask & kCDMA) {
73         return ModemTechnology::CDMA;
74     }
75     if (radioTechnologyBitmask & kWCDMA) {
76         return ModemTechnology::WCDMA;
77     }
78     return ModemTechnology::GSM;
79 }
80 
modemTechnologyBitmaskFromRadioTechnologyBitmask(const uint32_t radioTechnologyBitmask)81 uint32_t modemTechnologyBitmaskFromRadioTechnologyBitmask(
82     const uint32_t radioTechnologyBitmask) {
83     uint32_t modemTechnologyBitmask = 0;
84 
85     const auto mtechBit = [](const ModemTechnology mtech){
86         return 1U << static_cast<unsigned>(mtech);
87     };
88 
89     if (radioTechnologyBitmask & kNR) {
90         modemTechnologyBitmask |=
91             mtechBit(ModemTechnology::NR);
92     }
93     if (radioTechnologyBitmask & kLTE) {
94         modemTechnologyBitmask |=
95             mtechBit(ModemTechnology::LTE);
96     }
97     if (radioTechnologyBitmask & kTDSCDMA) {
98         modemTechnologyBitmask |=
99             mtechBit(ModemTechnology::TDSCDMA);
100     }
101     if (radioTechnologyBitmask & kEVDO) {
102         modemTechnologyBitmask |=
103             mtechBit(ModemTechnology::EVDO);
104     }
105     if (radioTechnologyBitmask & kCDMA) {
106         modemTechnologyBitmask |=
107             mtechBit(ModemTechnology::CDMA);
108     }
109     if (radioTechnologyBitmask & kWCDMA) {
110         modemTechnologyBitmask |=
111             mtechBit(ModemTechnology::WCDMA);
112     }
113 
114     if (radioTechnologyBitmask & kGSM) {
115         modemTechnologyBitmask |=
116             mtechBit(ModemTechnology::GSM);
117     }
118 
119     return modemTechnologyBitmask;
120 }
121 
122 
123 }  // namespace ratUtils
124 }  // namespace implementation
125 }  // namespace radio
126 }  // namespace hardware
127 }  // namespace android
128 }  // namespace aidl
129