diff options
author | Supreeth Herle <herlesupreeth@gmail.com> | 2019-11-30 10:37:09 +0100 |
---|---|---|
committer | Vadim Yanitskiy <axilirator@gmail.com> | 2020-02-15 03:26:49 +0700 |
commit | d24f1635135f72743345c0296dd469ec037eff5b (patch) | |
tree | 8bb79f72e054e439a21934c5ae1c41bd44c9d2aa | |
parent | f442fb4d6985000c08cf3d55243609163919a388 (diff) |
Fix MCC and MCC representation in the output of pySim-read
Change-Id: Ie699c0a38d5ae90e4d6109e4574ce860e4044096
-rw-r--r-- | pySim/utils.py | 55 | ||||
-rw-r--r-- | pysim-testdata/Fairwaves-SIM.ok | 2 | ||||
-rw-r--r-- | pysim-testdata/Wavemobile-SIM.ok | 4 | ||||
-rw-r--r-- | pysim-testdata/sysmoISIM-SJA2.ok | 4 | ||||
-rw-r--r-- | pysim-testdata/sysmoUSIM-SJS1.ok | 6 |
5 files changed, 48 insertions, 23 deletions
diff --git a/pySim/utils.py b/pySim/utils.py index e8dd531..af4a491 100644 --- a/pySim/utils.py +++ b/pySim/utils.py @@ -124,10 +124,7 @@ def dec_mcc_from_plmn(plmn): digit3 = ia[1] & 0x0F # 2nd byte, LSB if digit3 == 0xF and digit2 == 0xF and digit1 == 0xF: return 0xFFF # 4095 - mcc = digit1 * 100 - mcc += digit2 * 10 - mcc += digit3 - return mcc + return derive_mcc(digit1, digit2, digit3) def dec_mnc_from_plmn(plmn): ia = h2i(plmn) @@ -136,16 +133,7 @@ def dec_mnc_from_plmn(plmn): digit3 = (ia[1] & 0xF0) >> 4 # 2nd byte, MSB if digit3 == 0xF and digit2 == 0xF and digit1 == 0xF: return 0xFFF # 4095 - mnc = 0 - # signifies two digit MNC - if digit3 == 0xF: - mnc += digit1 * 10 - mnc += digit2 - else: - mnc += digit1 * 100 - mnc += digit2 * 10 - mnc += digit3 - return mnc + return derive_mnc(digit1, digit2, digit3) def dec_act(twohexbytes): act_list = [ @@ -182,7 +170,7 @@ def format_xplmn_w_act(hexstr): if rec_info['mcc'] == 0xFFF and rec_info['mnc'] == 0xFFF: rec_str = "unused" else: - rec_str = "MCC: %3s MNC: %3s AcT: %s" % (rec_info['mcc'], rec_info['mnc'], ", ".join(rec_info['act'])) + rec_str = "MCC: %03d MNC: %03d AcT: %s" % (rec_info['mcc'], rec_info['mnc'], ", ".join(rec_info['act'])) s += "\t%s # %s\n" % (rec_data, rec_str) return s @@ -233,3 +221,40 @@ def mnc_from_imsi(imsi, long=False): return imsi[3:5] else: return None + +def derive_mcc(digit1, digit2, digit3): + """ + Derive decimal representation of the MCC (Mobile Country Code) + from three given digits. + """ + + mcc = 0 + + if digit1 != 0x0f: + mcc += digit1 * 100 + if digit2 != 0x0f: + mcc += digit2 * 10 + if digit3 != 0x0f: + mcc += digit3 + + return mcc + +def derive_mnc(digit1, digit2, digit3=0x0f): + """ + Derive decimal representation of the MNC (Mobile Network Code) + from two or (optionally) three given digits. + """ + + mnc = 0 + + # 3-rd digit is optional for the MNC. If present + # the algorythm is the same as for the MCC. + if digit3 != 0x0f: + return derive_mcc(digit1, digit2, digit3) + + if digit1 != 0x0f: + mnc += digit1 * 10 + if digit2 != 0x0f: + mnc += digit2 + + return mnc diff --git a/pysim-testdata/Fairwaves-SIM.ok b/pysim-testdata/Fairwaves-SIM.ok index 94df376..cd6e33b 100644 --- a/pysim-testdata/Fairwaves-SIM.ok +++ b/pysim-testdata/Fairwaves-SIM.ok @@ -28,7 +28,7 @@ OPLMNwAcT: ffffff0000 # unused HPLMNAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused diff --git a/pysim-testdata/Wavemobile-SIM.ok b/pysim-testdata/Wavemobile-SIM.ok index 8b14a30..30aeed8 100644 --- a/pysim-testdata/Wavemobile-SIM.ok +++ b/pysim-testdata/Wavemobile-SIM.ok @@ -8,7 +8,7 @@ Display HPLMN: False Display OPLMN: False PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff PLMNwAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused @@ -26,7 +26,7 @@ PLMNwAcT: ffffff0000 # unused OPLMNwAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok index 77c4878..a64aa8b 100644 --- a/pysim-testdata/sysmoISIM-SJA2.ok +++ b/pysim-testdata/sysmoISIM-SJA2.ok @@ -8,7 +8,7 @@ Display HPLMN: False Display OPLMN: False PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff PLMNwAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused @@ -22,7 +22,7 @@ PLMNwAcT: ffffff0000 # unused OPLMNwAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused diff --git a/pysim-testdata/sysmoUSIM-SJS1.ok b/pysim-testdata/sysmoUSIM-SJS1.ok index d0523f8..8def4e3 100644 --- a/pysim-testdata/sysmoUSIM-SJS1.ok +++ b/pysim-testdata/sysmoUSIM-SJS1.ok @@ -8,7 +8,7 @@ Display HPLMN: True Display OPLMN: True PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff PLMNwAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused @@ -22,7 +22,7 @@ PLMNwAcT: ffffff0000 # unused OPLMNwAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused @@ -36,7 +36,7 @@ OPLMNwAcT: ffffff0000 # unused HPLMNAcT: - fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT ffffff0000 # unused ffffff0000 # unused ffffff0000 # unused |