xref: /aosp_15_r20/hardware/ril/include/telephony/ril_mcc.h (revision 062a843b36e31144e02d312b6b2de34642e6750e)
1*062a843bSAndroid Build Coastguard Worker /*
2*062a843bSAndroid Build Coastguard Worker  * Copyright (C) 2019 The Android Open Source Project
3*062a843bSAndroid Build Coastguard Worker  *
4*062a843bSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*062a843bSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*062a843bSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*062a843bSAndroid Build Coastguard Worker  *
8*062a843bSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*062a843bSAndroid Build Coastguard Worker  *
10*062a843bSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*062a843bSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*062a843bSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*062a843bSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*062a843bSAndroid Build Coastguard Worker  * limitations under the License.
15*062a843bSAndroid Build Coastguard Worker  */
16*062a843bSAndroid Build Coastguard Worker 
17*062a843bSAndroid Build Coastguard Worker #ifndef RIL_MCC_H
18*062a843bSAndroid Build Coastguard Worker #define RIL_MCC_H
19*062a843bSAndroid Build Coastguard Worker 
20*062a843bSAndroid Build Coastguard Worker #include <climits>
21*062a843bSAndroid Build Coastguard Worker #include <cstdio>
22*062a843bSAndroid Build Coastguard Worker #include <string>
23*062a843bSAndroid Build Coastguard Worker 
24*062a843bSAndroid Build Coastguard Worker namespace ril {
25*062a843bSAndroid Build Coastguard Worker namespace util {
26*062a843bSAndroid Build Coastguard Worker namespace mcc {
27*062a843bSAndroid Build Coastguard Worker 
28*062a843bSAndroid Build Coastguard Worker /**
29*062a843bSAndroid Build Coastguard Worker  * Decode an integer mcc and encode as 3 digit string
30*062a843bSAndroid Build Coastguard Worker  *
31*062a843bSAndroid Build Coastguard Worker  * @param an integer mcc, its range should be in 0 to 999.
32*062a843bSAndroid Build Coastguard Worker  *
33*062a843bSAndroid Build Coastguard Worker  * @return string representation of an encoded MCC or an empty string
34*062a843bSAndroid Build Coastguard Worker  * if the MCC is not a valid MCC value.
35*062a843bSAndroid Build Coastguard Worker  */
decode(int mcc)36*062a843bSAndroid Build Coastguard Worker static inline std::string decode(int mcc) {
37*062a843bSAndroid Build Coastguard Worker     char mccStr[4] = {0};
38*062a843bSAndroid Build Coastguard Worker     if (mcc > 999 || mcc < 0) return "";
39*062a843bSAndroid Build Coastguard Worker 
40*062a843bSAndroid Build Coastguard Worker     snprintf(mccStr, sizeof(mccStr), "%03d", mcc);
41*062a843bSAndroid Build Coastguard Worker     return mccStr;
42*062a843bSAndroid Build Coastguard Worker }
43*062a843bSAndroid Build Coastguard Worker 
44*062a843bSAndroid Build Coastguard Worker // echo -e "#include \"hardware/ril/include/telephony/ril_mcc.h\"\nint main()"\
45*062a843bSAndroid Build Coastguard Worker // "{ return ril::util::mcc::test(); }" > ril_test.cpp \
46*062a843bSAndroid Build Coastguard Worker // && g++ -o /tmp/ril_test -DTEST_RIL_MCC ril_test.cpp; \
47*062a843bSAndroid Build Coastguard Worker // rm ril_test.cpp; /tmp/ril_test && [ $? ] && echo "passed"
48*062a843bSAndroid Build Coastguard Worker #ifdef TEST_RIL_MCC
test()49*062a843bSAndroid Build Coastguard Worker static int test() {
50*062a843bSAndroid Build Coastguard Worker     const struct mcc_ints { const int in; const char * out; } legacy_mccs[] = {
51*062a843bSAndroid Build Coastguard Worker         {INT_MAX, ""},
52*062a843bSAndroid Build Coastguard Worker         {1, "001"},
53*062a843bSAndroid Build Coastguard Worker         {11, "011"},
54*062a843bSAndroid Build Coastguard Worker         {111, "111"},
55*062a843bSAndroid Build Coastguard Worker         {0, "000"},
56*062a843bSAndroid Build Coastguard Worker         {9999, ""},
57*062a843bSAndroid Build Coastguard Worker         {-12, ""},
58*062a843bSAndroid Build Coastguard Worker     };
59*062a843bSAndroid Build Coastguard Worker 
60*062a843bSAndroid Build Coastguard Worker     for (int i=0; i < sizeof(legacy_mccs) / sizeof(struct mcc_ints); i++) {
61*062a843bSAndroid Build Coastguard Worker         if (decode(legacy_mccs[i].in).compare(legacy_mccs[i].out)) return 1;
62*062a843bSAndroid Build Coastguard Worker     }
63*062a843bSAndroid Build Coastguard Worker 
64*062a843bSAndroid Build Coastguard Worker     return 0;
65*062a843bSAndroid Build Coastguard Worker }
66*062a843bSAndroid Build Coastguard Worker #endif
67*062a843bSAndroid Build Coastguard Worker 
68*062a843bSAndroid Build Coastguard Worker }
69*062a843bSAndroid Build Coastguard Worker }
70*062a843bSAndroid Build Coastguard Worker }
71*062a843bSAndroid Build Coastguard Worker #endif /* !defined(RIL_MCC_H) */
72